The Railtracks Framework for building resilient agentic systems in simple python
Project description
Railtracks
Agents in minutes • Zero config • Local visualization • Pure Python
✨ What is Railtracks?
Easy agent building, for no one but YOU: Create deployable complex agents using simple, Pythonic style interface with natural control flow.
import railtracks as rt
# Define a tool (just a function!)
def get_weather(location: str) -> str:
return f"It's sunny in {location}!"
# Create an agent with tools
agent = rt.agent_node(
"Weather Assistant",
tool_nodes=(rt.function_node(get_weather)),
llm=rt.llm.OpenAILLM("gpt-4o"),
system_message="You help users with weather information."
)
# Run it
result = await rt.call(agent, "What's the weather in Paris?")
print(result.text) # "Based on the current data, it's sunny in Paris!"
That's it. No complex configurations, no learning proprietary syntax. Just Python.
🎯 Why Railtracks?
🐍 Pure Python Experience# Write agents like regular functions
@rt.function_node
def my_tool(text: str) -> str:
return process(text)
|
🔧 Tool-First Architecture# Any function becomes a tool
agent = rt.agent_node(
"Assistant",
tool_nodes=(my_tool, api_call)
)
|
⚡ Look Familiar?# Smart parallelization built-in
# with interface similar to asyncio
result = await rt.call(agent, query)
|
👁️ Transparent by Designrailtracks viz # See everything
|
🚀 Quick Start
📦 Installation
pip install railtracks railtracks-cli
⚡ Your First Agent in 5 Min
import railtracks as rt
# 1. Create tools (just functions with decorators!)
@rt.function_node
def count_characters(text: str, character: str) -> int:
"""Count occurrences of a character in text."""
return text.count(character)
@rt.function_node
def word_count(text: str) -> int:
"""Count words in text."""
return len(text.split())
# 2. Build an agent with tools
text_analyzer = rt.agent_node(
"Text Analyzer",
tool_nodes=(count_characters, word_count),
llm=rt.llm.OpenAILLM("gpt-4o"),
system_message="You analyze text using the available tools."
)
# 3. Use it to solve the classic "How many r's in strawberry?" problem
@rt.session
async def main():
result = await rt.call(text_analyzer, "How many 'r's are in 'strawberry'?")
print(result.text) # "There are 3 'r's in 'strawberry'!"
# Run it
import asyncio
asyncio.run(main())
📊 Visualize Agent in 5 second
railtracks init # Setup visualization (one-time)
railtracks viz # See your agent in action
🔍 See every step of your agent's execution in real-time
💡 Real-World Examples
🔍 Multi-Agent Research System
# Research coordinator that uses specialized agents
researcher = rt.agent_node("Researcher", tool_nodes=(web_search, summarize))
analyst = rt.agent_node("Analyst", tool_nodes=(analyze_data, create_charts))
writer = rt.agent_node("Writer", tool_nodes=(draft_report, format_document))
coordinator = rt.agent_node(
"Research Coordinator",
tool_nodes=(researcher, analyst, writer), # Agents as tools!
system_message="Coordinate research tasks between specialists."
)
🔄 Complex Workflows Made Simple
# Customer service system with context sharing
async def handle_customer_request(query: str):
with rt.Session() as session:
# Technical support first
technical_result = await rt.call(technical_agent, query)
# Share context with billing if needed
if "billing" in technical_result.text.lower():
session.context["technical_notes"] = technical_result.text
billing_result = await rt.call(billing_agent, query)
return billing_result
return technical_result
🌟 What Makes Railtracks Special?
A lightweight agentic LLM framework for building modular, multi-LLM workflows with a focus on simplicity and developer experience.
| Feature | Railtracks | LangGraph | Google ADK |
|---|---|---|---|
| 🐍 Python-first, no DSL | ✅ | ❌ | ✅ |
| 📊 Built-in visualization | ✅ | ✅ | ⚠️ |
| ⚡ Zero setup overhead | ✅ | ✅ | ❌ |
| 🔄 LLM-agnostic | ✅ | ✅ | ✅ |
| 🎯 Pythonic style | ✅ | ❌ | ⚠️ |
🔗 Universal LLM Support
Switch between providers effortlessly:
# OpenAI
rt.llm.OpenAILLM("gpt-4o")
# Anthropic
rt.llm.AnthropicLLM("claude-3-5-sonnet")
# Local models
rt.llm.OllamaLLM("llama3")
Works with OpenAI, Anthropic, Google, Azure, and more! Check out our neatly crafted docs.
🛠️ Powerful Features
📦 Rich Tool EcosystemUse existing tools or create your own:
|
🔍 Built-in ObservabilityDebug and monitor with ease:
|
📚 Learn More
|
Documentation Complete guides & API reference |
Quickstart Up and running in 5 minutes |
Examples Real-world implementations |
Discord Get help & share creations |
Contributing Help make us better |
🚀 Ready to Build?
pip install railtracks railtracks-cli
✨ Join developers across the world building the future with AI agents
You grow, we grow - Railtracks will expand with your ambitions.
Made with lots of ❤️ and ☕ by the ◊Railtracks◊ team • Licensed under MIT • Report Bug • Request Feature
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file railtracks-1.1.21.tar.gz.
File metadata
- Download URL: railtracks-1.1.21.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28752eef09daa6aabeb6611745d4cdf80425969641816c3f61ac12cc0967c207
|
|
| MD5 |
771326cfb54b7ae17d17ad7be57ac4c3
|
|
| BLAKE2b-256 |
e9490b0f01361862ce12a99178b51dddedebfbfc2203cd8905ae66ae4d709852
|
File details
Details for the file railtracks-1.1.21-py3-none-any.whl.
File metadata
- Download URL: railtracks-1.1.21-py3-none-any.whl
- Upload date:
- Size: 202.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0ebebdd4ce6ddafc99ccc5df313acd527c6145a07f82cdfb52fc39c744ed099
|
|
| MD5 |
a6472d70aff7fc35424c109131d22bea
|
|
| BLAKE2b-256 |
6e350ea2d285cfe8042bec796a4d06cdb75f08702d39ea3f354289eabd0ea37f
|