railtracks 1.1.20__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- railtracks-1.1.20/LICENSE +21 -0
- railtracks-1.1.20/PKG-INFO +474 -0
- railtracks-1.1.20/README.md +422 -0
- railtracks-1.1.20/docs/assets/assets/Railtracks_logo-01.png +0 -0
- railtracks-1.1.20/docs/assets/assets/elements/banner.svg +3 -0
- railtracks-1.1.20/docs/assets/assets/hero-banner.svg +116 -0
- railtracks-1.1.20/docs/assets/assets/local_chat/chatui_messages.png +0 -0
- railtracks-1.1.20/docs/assets/assets/local_chat/chatui_messages_advanced.png +0 -0
- railtracks-1.1.20/docs/assets/assets/local_chat/chatui_tools.png +0 -0
- railtracks-1.1.20/docs/assets/assets/logo.svg +14 -0
- railtracks-1.1.20/docs/assets/assets/visualizer_photo.png +0 -0
- railtracks-1.1.20/pyproject.toml +88 -0
- railtracks-1.1.20/src/railtracks/__init__.py +59 -0
- railtracks-1.1.20/src/railtracks/_session.py +418 -0
- railtracks-1.1.20/src/railtracks/built_nodes/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/built_nodes/_node_builder.py +395 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/__init__.py +35 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/_llm_base.py +417 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/_tool_call_base.py +387 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/chat_tool_call_llm.py +144 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/function_base.py +164 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/rag.py +189 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/response.py +89 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/structured_llm_base.py +140 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/structured_tool_call_llm_base.py +108 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/terminal_llm_base.py +123 -0
- railtracks-1.1.20/src/railtracks/built_nodes/concrete/tool_call_llm_base.py +20 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/__init__.py +7 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/agent.py +223 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/function.py +275 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/helpers/__init__.py +11 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/helpers/structured_llm.py +64 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/helpers/structured_tool_call_llm.py +71 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/helpers/terminal_llm.py +53 -0
- railtracks-1.1.20/src/railtracks/built_nodes/easy_usage_wrappers/helpers/tool_call_llm.py +63 -0
- railtracks-1.1.20/src/railtracks/context/__init__.py +9 -0
- railtracks-1.1.20/src/railtracks/context/central.py +434 -0
- railtracks-1.1.20/src/railtracks/context/external.py +99 -0
- railtracks-1.1.20/src/railtracks/context/internal.py +108 -0
- railtracks-1.1.20/src/railtracks/exceptions/__init__.py +17 -0
- railtracks-1.1.20/src/railtracks/exceptions/_base.py +16 -0
- railtracks-1.1.20/src/railtracks/exceptions/errors.py +133 -0
- railtracks-1.1.20/src/railtracks/exceptions/messages/exception_messages.py +69 -0
- railtracks-1.1.20/src/railtracks/exceptions/messages/exception_messages.yaml +94 -0
- railtracks-1.1.20/src/railtracks/execution/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/execution/coordinator.py +194 -0
- railtracks-1.1.20/src/railtracks/execution/execution_strategy.py +124 -0
- railtracks-1.1.20/src/railtracks/execution/task.py +36 -0
- railtracks-1.1.20/src/railtracks/human_in_the_loop/__init__.py +4 -0
- railtracks-1.1.20/src/railtracks/human_in_the_loop/human_in_the_loop.py +56 -0
- railtracks-1.1.20/src/railtracks/human_in_the_loop/local_chat_ui.py +373 -0
- railtracks-1.1.20/src/railtracks/integrations/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/interaction/__init__.py +11 -0
- railtracks-1.1.20/src/railtracks/interaction/_call.py +219 -0
- railtracks-1.1.20/src/railtracks/interaction/batch.py +62 -0
- railtracks-1.1.20/src/railtracks/interaction/broadcast_.py +16 -0
- railtracks-1.1.20/src/railtracks/interaction/interactive.py +167 -0
- railtracks-1.1.20/src/railtracks/llm/__init__.py +58 -0
- railtracks-1.1.20/src/railtracks/llm/_exception_base.py +16 -0
- railtracks-1.1.20/src/railtracks/llm/content.py +100 -0
- railtracks-1.1.20/src/railtracks/llm/encoding.py +82 -0
- railtracks-1.1.20/src/railtracks/llm/history.py +21 -0
- railtracks-1.1.20/src/railtracks/llm/logging.py +58 -0
- railtracks-1.1.20/src/railtracks/llm/message.py +258 -0
- railtracks-1.1.20/src/railtracks/llm/model.py +379 -0
- railtracks-1.1.20/src/railtracks/llm/models/__init__.py +22 -0
- railtracks-1.1.20/src/railtracks/llm/models/_litellm_wrapper.py +756 -0
- railtracks-1.1.20/src/railtracks/llm/models/_model_exception_base.py +67 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/__init__.py +15 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/_openai_compatable_provider_wrapper.py +30 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/_provider_wrapper.py +82 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/anthropic.py +12 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/cohere.py +12 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/gemini.py +16 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/huggingface.py +43 -0
- railtracks-1.1.20/src/railtracks/llm/models/api_providers/openai.py +16 -0
- railtracks-1.1.20/src/railtracks/llm/models/cloud/__init__.py +10 -0
- railtracks-1.1.20/src/railtracks/llm/models/cloud/azureai.py +87 -0
- railtracks-1.1.20/src/railtracks/llm/models/cloud/portkey.py +44 -0
- railtracks-1.1.20/src/railtracks/llm/models/cloud/telus.py +35 -0
- railtracks-1.1.20/src/railtracks/llm/models/local/__init__.py +3 -0
- railtracks-1.1.20/src/railtracks/llm/models/local/ollama.py +117 -0
- railtracks-1.1.20/src/railtracks/llm/prompt_injection_utils.py +18 -0
- railtracks-1.1.20/src/railtracks/llm/providers.py +35 -0
- railtracks-1.1.20/src/railtracks/llm/response.py +112 -0
- railtracks-1.1.20/src/railtracks/llm/tools/__init__.py +26 -0
- railtracks-1.1.20/src/railtracks/llm/tools/docstring_parser.py +156 -0
- railtracks-1.1.20/src/railtracks/llm/tools/parameter_handlers.py +238 -0
- railtracks-1.1.20/src/railtracks/llm/tools/parameters/__init__.py +16 -0
- railtracks-1.1.20/src/railtracks/llm/tools/parameters/_base.py +116 -0
- railtracks-1.1.20/src/railtracks/llm/tools/parameters/array_parameter.py +73 -0
- railtracks-1.1.20/src/railtracks/llm/tools/parameters/object_parameter.py +70 -0
- railtracks-1.1.20/src/railtracks/llm/tools/parameters/ref_parameter.py +52 -0
- railtracks-1.1.20/src/railtracks/llm/tools/parameters/union_parameter.py +76 -0
- railtracks-1.1.20/src/railtracks/llm/tools/schema_parser.py +403 -0
- railtracks-1.1.20/src/railtracks/llm/tools/tool.py +231 -0
- railtracks-1.1.20/src/railtracks/llm/type_mapping.py +152 -0
- railtracks-1.1.20/src/railtracks/nodes/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/nodes/manifest.py +23 -0
- railtracks-1.1.20/src/railtracks/nodes/nodes.py +177 -0
- railtracks-1.1.20/src/railtracks/nodes/tool_callable.py +25 -0
- railtracks-1.1.20/src/railtracks/nodes/utils.py +57 -0
- railtracks-1.1.20/src/railtracks/prebuilt/__init__.py +5 -0
- railtracks-1.1.20/src/railtracks/prebuilt/rag_node.py +47 -0
- railtracks-1.1.20/src/railtracks/prompts/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/prompts/prompt.py +32 -0
- railtracks-1.1.20/src/railtracks/pubsub/__init__.py +28 -0
- railtracks-1.1.20/src/railtracks/pubsub/_subscriber.py +20 -0
- railtracks-1.1.20/src/railtracks/pubsub/messages.py +186 -0
- railtracks-1.1.20/src/railtracks/pubsub/publisher.py +30 -0
- railtracks-1.1.20/src/railtracks/pubsub/utils.py +27 -0
- railtracks-1.1.20/src/railtracks/py.typed +0 -0
- railtracks-1.1.20/src/railtracks/rag/__init__.py +8 -0
- railtracks-1.1.20/src/railtracks/rag/chunking_service.py +160 -0
- railtracks-1.1.20/src/railtracks/rag/embedding_service.py +133 -0
- railtracks-1.1.20/src/railtracks/rag/rag_core.py +157 -0
- railtracks-1.1.20/src/railtracks/rag/text_object.py +94 -0
- railtracks-1.1.20/src/railtracks/rag/utils.py +179 -0
- railtracks-1.1.20/src/railtracks/rag/vector_store/__init__.py +13 -0
- railtracks-1.1.20/src/railtracks/rag/vector_store/base.py +223 -0
- railtracks-1.1.20/src/railtracks/rag/vector_store/factory.py +32 -0
- railtracks-1.1.20/src/railtracks/rag/vector_store/in_memory.py +371 -0
- railtracks-1.1.20/src/railtracks/rag/vector_store/utils.py +41 -0
- railtracks-1.1.20/src/railtracks/rt_mcp/__init__.py +10 -0
- railtracks-1.1.20/src/railtracks/rt_mcp/jupyter_compat.py +193 -0
- railtracks-1.1.20/src/railtracks/rt_mcp/main.py +247 -0
- railtracks-1.1.20/src/railtracks/rt_mcp/mcp_tool.py +24 -0
- railtracks-1.1.20/src/railtracks/rt_mcp/node_to_mcp.py +127 -0
- railtracks-1.1.20/src/railtracks/state/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/state/forest.py +202 -0
- railtracks-1.1.20/src/railtracks/state/info.py +215 -0
- railtracks-1.1.20/src/railtracks/state/node.py +121 -0
- railtracks-1.1.20/src/railtracks/state/request.py +439 -0
- railtracks-1.1.20/src/railtracks/state/serialize.py +208 -0
- railtracks-1.1.20/src/railtracks/state/state.py +453 -0
- railtracks-1.1.20/src/railtracks/state/utils.py +48 -0
- railtracks-1.1.20/src/railtracks/utils/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/utils/config.py +95 -0
- railtracks-1.1.20/src/railtracks/utils/logging/__init__.py +5 -0
- railtracks-1.1.20/src/railtracks/utils/logging/action.py +93 -0
- railtracks-1.1.20/src/railtracks/utils/logging/config.py +359 -0
- railtracks-1.1.20/src/railtracks/utils/logging/create.py +23 -0
- railtracks-1.1.20/src/railtracks/utils/profiling.py +116 -0
- railtracks-1.1.20/src/railtracks/utils/prompt_injection.py +24 -0
- railtracks-1.1.20/src/railtracks/utils/publisher.py +231 -0
- railtracks-1.1.20/src/railtracks/utils/serialization/__init__.py +1 -0
- railtracks-1.1.20/src/railtracks/utils/serialization/graph.py +82 -0
- railtracks-1.1.20/src/railtracks/utils/visuals/browser/chat.css +1048 -0
- railtracks-1.1.20/src/railtracks/utils/visuals/browser/chat.html +185 -0
- railtracks-1.1.20/src/railtracks/utils/visuals/browser/chat.js +741 -0
- railtracks-1.1.20/src/railtracks/validation/__init__.py +0 -0
- railtracks-1.1.20/src/railtracks/validation/node_creation/validation.py +420 -0
- railtracks-1.1.20/src/railtracks/validation/node_invocation/validation.py +57 -0
- railtracks-1.1.20/src/railtracks/vector_stores/__init__.py +7 -0
- railtracks-1.1.20/src/railtracks/vector_stores/chroma.py +408 -0
- railtracks-1.1.20/src/railtracks/vector_stores/vector_store_base.py +241 -0
- railtracks-1.1.20/tests/__init__.py +0 -0
- railtracks-1.1.20/tests/conftest.py +207 -0
- railtracks-1.1.20/tests/end_to_end/__init__.py +0 -0
- railtracks-1.1.20/tests/end_to_end/rag/test_rag_examples.py +194 -0
- railtracks-1.1.20/tests/end_to_end/tools/__init__.py +0 -0
- railtracks-1.1.20/tests/end_to_end/tools/conftest.py +90 -0
- railtracks-1.1.20/tests/end_to_end/tools/test_parameter_conversion.py +46 -0
- railtracks-1.1.20/tests/end_to_end/tools/test_schemas_for_tools.json +1507 -0
- railtracks-1.1.20/tests/integration_tests/__init__.py +0 -0
- railtracks-1.1.20/tests/integration_tests/conftest.py +152 -0
- railtracks-1.1.20/tests/integration_tests/context/__init__.py +0 -0
- railtracks-1.1.20/tests/integration_tests/context/test_external.py +130 -0
- railtracks-1.1.20/tests/integration_tests/context/test_internal.py +120 -0
- railtracks-1.1.20/tests/integration_tests/interaction/conftest.py +277 -0
- railtracks-1.1.20/tests/integration_tests/interaction/test_batch.py +124 -0
- railtracks-1.1.20/tests/integration_tests/interaction/test_call.py +517 -0
- railtracks-1.1.20/tests/integration_tests/library/__init__.py +0 -0
- railtracks-1.1.20/tests/integration_tests/library/conftest.py +75 -0
- railtracks-1.1.20/tests/integration_tests/library/test_basic_llms.py +114 -0
- railtracks-1.1.20/tests/integration_tests/library/test_function.py +508 -0
- railtracks-1.1.20/tests/integration_tests/library/test_tool_calling_llms.py +245 -0
- railtracks-1.1.20/tests/integration_tests/library/test_tool_manifestation.py +166 -0
- railtracks-1.1.20/tests/integration_tests/rt_mcp/__init__.py +0 -0
- railtracks-1.1.20/tests/integration_tests/rt_mcp/test_mcp.py +95 -0
- railtracks-1.1.20/tests/integration_tests/rt_mcp/test_node_to_mcp.py +90 -0
- railtracks-1.1.20/tests/integration_tests/run/.covailence/363d501f-c9a9-4bdb-940a-8c264f520e69.json +1 -0
- railtracks-1.1.20/tests/integration_tests/run/.covailence/75b7a1e9-8896-4c94-910a-b5b1b525cf5a.json +1 -0
- railtracks-1.1.20/tests/integration_tests/run/.covailence/a319b94e-07bc-4007-af58-9167fb3094d0.json +1 -0
- railtracks-1.1.20/tests/integration_tests/run/.covailence/fbefdbb9-6151-405f-a778-e36917033d05.json +1 -0
- railtracks-1.1.20/tests/integration_tests/run/__init__.py +0 -0
- railtracks-1.1.20/tests/integration_tests/run/test_broadcast.py +119 -0
- railtracks-1.1.20/tests/integration_tests/run/test_error_handler.py +146 -0
- railtracks-1.1.20/tests/integration_tests/run/test_exterior_call.py +218 -0
- railtracks-1.1.20/tests/integration_tests/run/test_multiple_runners.py +56 -0
- railtracks-1.1.20/tests/integration_tests/run/test_parallelization.py +56 -0
- railtracks-1.1.20/tests/integration_tests/state_schema.json +368 -0
- railtracks-1.1.20/tests/integration_tests/test_session.py +166 -0
- railtracks-1.1.20/tests/integration_tests/test_state.py +162 -0
- railtracks-1.1.20/tests/integration_tests/validation/test_duplicate_warnings.py +65 -0
- railtracks-1.1.20/tests/llm_live_tests/__init__.py +0 -0
- railtracks-1.1.20/tests/llm_live_tests/llm_map.py +15 -0
- railtracks-1.1.20/tests/llm_live_tests/rag/conftest.py +11 -0
- railtracks-1.1.20/tests/llm_live_tests/rag/test_rag_core_intergration.py +49 -0
- railtracks-1.1.20/tests/llm_live_tests/rag/test_rag_node_intergration.py +43 -0
- railtracks-1.1.20/tests/llm_live_tests/test_basic.py +110 -0
- railtracks-1.1.20/tests/llm_live_tests/test_rt_mcp.py +66 -0
- railtracks-1.1.20/tests/llm_live_tests/test_tool_calling.py +196 -0
- railtracks-1.1.20/tests/unit_tests/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/built_nodes/concrete/test_rag.py +223 -0
- railtracks-1.1.20/tests/unit_tests/built_nodes/concrete/test_response.py +50 -0
- railtracks-1.1.20/tests/unit_tests/built_nodes/conftest.py +116 -0
- railtracks-1.1.20/tests/unit_tests/built_nodes/easy_usage_wrappers/conftest.py +57 -0
- railtracks-1.1.20/tests/unit_tests/built_nodes/easy_usage_wrappers/test_agent.py +95 -0
- railtracks-1.1.20/tests/unit_tests/built_nodes/easy_usage_wrappers/test_function.py +47 -0
- railtracks-1.1.20/tests/unit_tests/built_nodes/test_node_builder.py +280 -0
- railtracks-1.1.20/tests/unit_tests/conftest.py +28 -0
- railtracks-1.1.20/tests/unit_tests/context/conftest.py +53 -0
- railtracks-1.1.20/tests/unit_tests/context/test_central.py +150 -0
- railtracks-1.1.20/tests/unit_tests/context/test_external.py +110 -0
- railtracks-1.1.20/tests/unit_tests/context/test_internal.py +86 -0
- railtracks-1.1.20/tests/unit_tests/execution/conftest.py +31 -0
- railtracks-1.1.20/tests/unit_tests/execution/test_coordinator.py +123 -0
- railtracks-1.1.20/tests/unit_tests/execution/test_execution_strategy.py +70 -0
- railtracks-1.1.20/tests/unit_tests/execution/test_task.py +42 -0
- railtracks-1.1.20/tests/unit_tests/human_in_the_loop/test_local_chat_ui.py +368 -0
- railtracks-1.1.20/tests/unit_tests/integrations/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/interaction/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/interaction/conftest.py +79 -0
- railtracks-1.1.20/tests/unit_tests/interaction/test_batch.py +66 -0
- railtracks-1.1.20/tests/unit_tests/interaction/test_broadcast.py +26 -0
- railtracks-1.1.20/tests/unit_tests/interaction/test_call.py +325 -0
- railtracks-1.1.20/tests/unit_tests/interaction/test_interactive.py +337 -0
- railtracks-1.1.20/tests/unit_tests/llm/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/llm/conftest.py +37 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/api_providers/test_anthropic.py +8 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/api_providers/test_cohere.py +9 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/api_providers/test_gemini.py +8 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/api_providers/test_huggingface.py +9 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/api_providers/test_openai.py +9 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/api_providers/test_provider_llm.py +68 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/cloud/test_azureai.py +93 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/cloud/test_portkey.py +43 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/conftest.py +303 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/local/test_ollama.py +145 -0
- railtracks-1.1.20/tests/unit_tests/llm/models/test_litellm_wrapper.py +326 -0
- railtracks-1.1.20/tests/unit_tests/llm/test_content.py +122 -0
- railtracks-1.1.20/tests/unit_tests/llm/test_encoding.py +118 -0
- railtracks-1.1.20/tests/unit_tests/llm/test_history.py +38 -0
- railtracks-1.1.20/tests/unit_tests/llm/test_message.py +216 -0
- railtracks-1.1.20/tests/unit_tests/llm/test_model.py +201 -0
- railtracks-1.1.20/tests/unit_tests/llm/test_response.py +102 -0
- railtracks-1.1.20/tests/unit_tests/llm/test_type_mapping.py +110 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/parameters/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/parameters/conftest.py +1 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/parameters/test__base.py +28 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/parameters/test_array_parameter.py +23 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/parameters/test_object_parameter.py +31 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/parameters/test_ref_parameter.py +15 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/parameters/test_union_parameter.py +33 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/test_docstring_parser.py +219 -0
- railtracks-1.1.20/tests/unit_tests/llm/tools/test_schema_parser.py +430 -0
- railtracks-1.1.20/tests/unit_tests/nodes/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/nodes/conftest.py +20 -0
- railtracks-1.1.20/tests/unit_tests/nodes/library/tool_calling_llms/test_structured_tool_call_llm.py +287 -0
- railtracks-1.1.20/tests/unit_tests/nodes/test_manifest.py +50 -0
- railtracks-1.1.20/tests/unit_tests/nodes/test_nodes.py +135 -0
- railtracks-1.1.20/tests/unit_tests/nodes/test_tool_callable.py +37 -0
- railtracks-1.1.20/tests/unit_tests/prompt/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/prompt/test_prompt.py +122 -0
- railtracks-1.1.20/tests/unit_tests/pubsub/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/pubsub/conftest.py +36 -0
- railtracks-1.1.20/tests/unit_tests/pubsub/test_messages.py +109 -0
- railtracks-1.1.20/tests/unit_tests/pubsub/test_publisher.py +26 -0
- railtracks-1.1.20/tests/unit_tests/rag/conftest.py +90 -0
- railtracks-1.1.20/tests/unit_tests/rag/test_chunking_service_unit.py +69 -0
- railtracks-1.1.20/tests/unit_tests/rag/test_embedding_service_unit.py +43 -0
- railtracks-1.1.20/tests/unit_tests/rag/test_rag_core_unit.py +212 -0
- railtracks-1.1.20/tests/unit_tests/rag/vector_store/test_inmemory_vectorstore_unit.py +377 -0
- railtracks-1.1.20/tests/unit_tests/rag/vector_store/test_utils_unit.py +52 -0
- railtracks-1.1.20/tests/unit_tests/rt_mcp/conftest.py +219 -0
- railtracks-1.1.20/tests/unit_tests/rt_mcp/test_jupyter_compat.py +81 -0
- railtracks-1.1.20/tests/unit_tests/rt_mcp/test_main.py +167 -0
- railtracks-1.1.20/tests/unit_tests/rt_mcp/test_to_node.py +121 -0
- railtracks-1.1.20/tests/unit_tests/state/conftest.py +223 -0
- railtracks-1.1.20/tests/unit_tests/state/test_forest.py +214 -0
- railtracks-1.1.20/tests/unit_tests/state/test_info.py +147 -0
- railtracks-1.1.20/tests/unit_tests/state/test_node.py +116 -0
- railtracks-1.1.20/tests/unit_tests/state/test_request.py +254 -0
- railtracks-1.1.20/tests/unit_tests/state/test_state.py +166 -0
- railtracks-1.1.20/tests/unit_tests/state/test_utils.py +78 -0
- railtracks-1.1.20/tests/unit_tests/test_exceptions.py +111 -0
- railtracks-1.1.20/tests/unit_tests/test_session.py +407 -0
- railtracks-1.1.20/tests/unit_tests/utils/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/utils/conftest.py +52 -0
- railtracks-1.1.20/tests/unit_tests/utils/logging/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/utils/logging/test_action.py +38 -0
- railtracks-1.1.20/tests/unit_tests/utils/logging/test_config.py +373 -0
- railtracks-1.1.20/tests/unit_tests/utils/logging/test_create.py +12 -0
- railtracks-1.1.20/tests/unit_tests/utils/serialization/__init__.py +0 -0
- railtracks-1.1.20/tests/unit_tests/utils/serialization/conftest.py +61 -0
- railtracks-1.1.20/tests/unit_tests/utils/serialization/test_graph.py +153 -0
- railtracks-1.1.20/tests/unit_tests/utils/serialization/test_serialize.py +64 -0
- railtracks-1.1.20/tests/unit_tests/utils/test_config.py +152 -0
- railtracks-1.1.20/tests/unit_tests/utils/test_profiling.py +258 -0
- railtracks-1.1.20/tests/unit_tests/utils/test_prompt_injection.py +80 -0
- railtracks-1.1.20/tests/unit_tests/utils/test_publisher.py +623 -0
- railtracks-1.1.20/tests/unit_tests/vector_stores/conftest.py +318 -0
- railtracks-1.1.20/tests/unit_tests/vector_stores/test_chroma.py +499 -0
- railtracks-1.1.20/tests/unit_tests/vector_stores/test_vector_store_base.py +297 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Railtown AI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: railtracks
|
|
3
|
+
Version: 1.1.20
|
|
4
|
+
Summary: The Railtracks Framework for building resilient agentic systems in simple python
|
|
5
|
+
Author-email: Logan Underwood <logan@railtown.ai>, Levi Varsanyi <levi@railtown.ai>, Jaime Bueza <jaime@railtown.ai>, Amir Refaee <amir@railtown.ai>, Aryan Ballani <aryan@railtown.ai>, Tristan Brown <tristan@railtown.ai>
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Development Status :: 4 - Beta
|
|
16
|
+
Classifier: Framework :: AsyncIO
|
|
17
|
+
Classifier: Intended Audience :: Developers
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Natural Language :: English
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: colorama >= 0.4.6
|
|
25
|
+
Requires-Dist: litellm[proxy] >= 1.70.2
|
|
26
|
+
Requires-Dist: mcp >= 1.9.0
|
|
27
|
+
Requires-Dist: openai < 1.100.0
|
|
28
|
+
Requires-Dist: pydantic >= 2.5.3, <3
|
|
29
|
+
Requires-Dist: python-dotenv >= 1.0.0
|
|
30
|
+
Requires-Dist: PyYAML >= 6.0
|
|
31
|
+
Requires-Dist: railtracks[chat, rag, integrations] ; extra == "all"
|
|
32
|
+
Requires-Dist: fastapi >= 0.104.0 ; extra == "chat"
|
|
33
|
+
Requires-Dist: chromadb > 1.3.0 ; extra == "chroma"
|
|
34
|
+
Requires-Dist: railtracks[chat] ; extra == "core"
|
|
35
|
+
Requires-Dist: railtracks[portkey] ; extra == "integrations"
|
|
36
|
+
Requires-Dist: railtracks[chroma] ; extra == "integrations"
|
|
37
|
+
Requires-Dist: portkey_ai >= 2.0.2 ; extra == "portkey"
|
|
38
|
+
Requires-Dist: litellm[proxy] >= 1.70.2 ; extra == "rag"
|
|
39
|
+
Requires-Dist: openai < 1.100.0 ; extra == "rag"
|
|
40
|
+
Project-URL: Release Notes, https://github.com/RailtownAI/railtracks/releases
|
|
41
|
+
Project-URL: documentation, https://railtownai.github.io/railtracks/
|
|
42
|
+
Project-URL: home, https://railtracks.org
|
|
43
|
+
Project-URL: repository, https://github.com/RailtownAI/railtracks
|
|
44
|
+
Provides-Extra: all
|
|
45
|
+
Provides-Extra: chat
|
|
46
|
+
Provides-Extra: chroma
|
|
47
|
+
Provides-Extra: core
|
|
48
|
+
Provides-Extra: integrations
|
|
49
|
+
Provides-Extra: portkey
|
|
50
|
+
Provides-Extra: rag
|
|
51
|
+
|
|
52
|
+
# Railtracks
|
|
53
|
+
|
|
54
|
+
<!--Happy Coding β -->
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img alt="Railtracks Space Banner" src="https://raw.githubusercontent.com/RailtownAI/railtracks/main/docs/assets/hero-banner.svg" width="100%">
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
<h3 align="center">
|
|
61
|
+
Agents in minutes β’ Zero config β’ Local visualization β’ Pure Python
|
|
62
|
+
</h3>
|
|
63
|
+
|
|
64
|
+
<br>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<a href="#-quick-start">
|
|
68
|
+
<img src="https://img.shields.io/badge/Quick_Start-4285F4?style=for-the-badge&logo=rocket&logoColor=white" alt="Quick Start" />
|
|
69
|
+
</a>
|
|
70
|
+
<a href="https://railtownai.github.io/railtracks/">
|
|
71
|
+
<img src="https://img.shields.io/badge/Documentation-00D4AA?style=for-the-badge&logo=gitbook&logoColor=white" alt="Documentation" />
|
|
72
|
+
</a>
|
|
73
|
+
<a href="https://github.com/RailtownAI/railtracks/tree/main/examples">
|
|
74
|
+
<img src="https://img.shields.io/badge/Examples-FF6B35?style=for-the-badge&logo=github&logoColor=white" alt="Examples" />
|
|
75
|
+
</a>
|
|
76
|
+
<a href="https://discord.gg/h5ZcahDc">
|
|
77
|
+
<img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Join Discord" />
|
|
78
|
+
</a>
|
|
79
|
+
</p>
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<a href="https://pypi.org/project/railtracks/">
|
|
83
|
+
<img src="https://img.shields.io/pypi/v/railtracks?color=brightgreen&style=for-the-badge" alt="PyPI Version" />
|
|
84
|
+
</a>
|
|
85
|
+
<a href="https://pypi.org/project/railtracks/">
|
|
86
|
+
<img src="https://img.shields.io/pypi/pyversions/railtracks?style=for-the-badge&logo=python&logoColor=white" alt="Python Versions" />
|
|
87
|
+
</a>
|
|
88
|
+
<a href="https://pypistats.org/packages/railtracks">
|
|
89
|
+
<img src="https://img.shields.io/pypi/dm/railtracks?style=for-the-badge&color=blue" alt="Monthly Downloads" />
|
|
90
|
+
</a>
|
|
91
|
+
<a href="https://opensource.org/licenses/MIT">
|
|
92
|
+
<img src="https://img.shields.io/pypi/l/railtracks?style=for-the-badge&color=lightgrey" alt="License" />
|
|
93
|
+
</a>
|
|
94
|
+
<a href="https://github.com/RailtownAI/railtracks/stargazers">
|
|
95
|
+
<img src="https://img.shields.io/github/stars/RailtownAI/railtracks?style=for-the-badge&logo=github" alt="GitHub Stars" />
|
|
96
|
+
</a>
|
|
97
|
+
</p>
|
|
98
|
+
|
|
99
|
+
<div align="center">
|
|
100
|
+
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## β¨ What is **Railtracks**?
|
|
106
|
+
|
|
107
|
+
Easy agent building, for no one but **YOU**: Create deployable complex agents using simple, Pythonic style interface with natural control flow.
|
|
108
|
+
|
|
109
|
+
<!-- Add an empty line or a horizontal rule to ensure separation -->
|
|
110
|
+
<br>
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
import railtracks as rt
|
|
115
|
+
|
|
116
|
+
# Define a tool (just a function!)
|
|
117
|
+
def get_weather(location: str) -> str:
|
|
118
|
+
return f"It's sunny in {location}!"
|
|
119
|
+
|
|
120
|
+
# Create an agent with tools
|
|
121
|
+
agent = rt.agent_node(
|
|
122
|
+
"Weather Assistant",
|
|
123
|
+
tool_nodes=(rt.function_node(get_weather)),
|
|
124
|
+
llm=rt.llm.OpenAILLM("gpt-4o"),
|
|
125
|
+
system_message="You help users with weather information."
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
# Run it
|
|
129
|
+
result = await rt.call(agent, "What's the weather in Paris?")
|
|
130
|
+
print(result.text) # "Based on the current data, it's sunny in Paris!"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**That's it.** No complex configurations, no learning proprietary syntax. Just Python.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## π― Why Railtracks?
|
|
138
|
+
|
|
139
|
+
<div align="center">
|
|
140
|
+
|
|
141
|
+
<table>
|
|
142
|
+
<tr>
|
|
143
|
+
<td width="50%" valign="top">
|
|
144
|
+
|
|
145
|
+
#### π **Pure Python Experience**
|
|
146
|
+
```python
|
|
147
|
+
# Write agents like regular functions
|
|
148
|
+
@rt.function_node
|
|
149
|
+
def my_tool(text: str) -> str:
|
|
150
|
+
return process(text)
|
|
151
|
+
```
|
|
152
|
+
- β
No YAML, no DSLs, no magic strings
|
|
153
|
+
- β
Use your existing debugging tools
|
|
154
|
+
- β
IDE autocomplete & type checking
|
|
155
|
+
|
|
156
|
+
</td>
|
|
157
|
+
<td width="50%" valign="top">
|
|
158
|
+
|
|
159
|
+
#### π§ **Tool-First Architecture**
|
|
160
|
+
```python
|
|
161
|
+
# Any function becomes a tool
|
|
162
|
+
agent = rt.agent_node(
|
|
163
|
+
"Assistant",
|
|
164
|
+
tool_nodes=(my_tool, api_call)
|
|
165
|
+
)
|
|
166
|
+
```
|
|
167
|
+
- β
Instant function-to-tool conversion
|
|
168
|
+
- β
Seamless API/database integration
|
|
169
|
+
- β
MCP protocol support
|
|
170
|
+
|
|
171
|
+
</td>
|
|
172
|
+
</tr>
|
|
173
|
+
<tr>
|
|
174
|
+
<td width="50%" valign="top">
|
|
175
|
+
|
|
176
|
+
#### β‘ **Look Familiar?**
|
|
177
|
+
```python
|
|
178
|
+
# Smart parallelization built-in
|
|
179
|
+
# with interface similar to asyncio
|
|
180
|
+
result = await rt.call(agent, query)
|
|
181
|
+
```
|
|
182
|
+
- β
Easy to learn standardized interface
|
|
183
|
+
- β
Built-in validation, error handling & retries
|
|
184
|
+
- β
Auto-parallelization management
|
|
185
|
+
|
|
186
|
+
</td>
|
|
187
|
+
<td width="50%" valign="top">
|
|
188
|
+
|
|
189
|
+
#### ποΈ **Transparent by Design**
|
|
190
|
+
```bash
|
|
191
|
+
railtracks viz # See everything
|
|
192
|
+
```
|
|
193
|
+
- β
Real-time execution visualization
|
|
194
|
+
- β
Complete execution history
|
|
195
|
+
- β
Debug like regular Python code
|
|
196
|
+
|
|
197
|
+
</td>
|
|
198
|
+
</tr>
|
|
199
|
+
</table>
|
|
200
|
+
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## π Quick Start
|
|
206
|
+
|
|
207
|
+
<details open>
|
|
208
|
+
<summary><b>π¦ Installation</b></summary>
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
pip install railtracks railtracks-cli
|
|
212
|
+
```
|
|
213
|
+
</details>
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
<details open>
|
|
217
|
+
<summary><b>β‘ Your First Agent in 5 Min</b></summary>
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
import railtracks as rt
|
|
222
|
+
|
|
223
|
+
# 1. Create tools (just functions with decorators!)
|
|
224
|
+
@rt.function_node
|
|
225
|
+
def count_characters(text: str, character: str) -> int:
|
|
226
|
+
"""Count occurrences of a character in text."""
|
|
227
|
+
return text.count(character)
|
|
228
|
+
|
|
229
|
+
@rt.function_node
|
|
230
|
+
def word_count(text: str) -> int:
|
|
231
|
+
"""Count words in text."""
|
|
232
|
+
return len(text.split())
|
|
233
|
+
|
|
234
|
+
# 2. Build an agent with tools
|
|
235
|
+
text_analyzer = rt.agent_node(
|
|
236
|
+
"Text Analyzer",
|
|
237
|
+
tool_nodes=(count_characters, word_count),
|
|
238
|
+
llm=rt.llm.OpenAILLM("gpt-4o"),
|
|
239
|
+
system_message="You analyze text using the available tools."
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
# 3. Use it to solve the classic "How many r's in strawberry?" problem
|
|
243
|
+
@rt.session
|
|
244
|
+
async def main():
|
|
245
|
+
result = await rt.call(text_analyzer, "How many 'r's are in 'strawberry'?")
|
|
246
|
+
print(result.text) # "There are 3 'r's in 'strawberry'!"
|
|
247
|
+
|
|
248
|
+
# Run it
|
|
249
|
+
import asyncio
|
|
250
|
+
asyncio.run(main())
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
</details>
|
|
254
|
+
|
|
255
|
+
<details open>
|
|
256
|
+
<summary><b>π Visualize Agent in 5 second</b></summary>
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
railtracks init # Setup visualization (one-time)
|
|
261
|
+
railtracks viz # See your agent in action
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
<p align="center">
|
|
265
|
+
<img src="docs/assets/visualizer_photo.png" alt="Railtracks Visualizer" width="90%">
|
|
266
|
+
<br>
|
|
267
|
+
<em>π See every step of your agent's execution in real-time</em>
|
|
268
|
+
</p>
|
|
269
|
+
|
|
270
|
+
</details>
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## π‘ Real-World Examples
|
|
275
|
+
|
|
276
|
+
<details open>
|
|
277
|
+
<summary><b>π Multi-Agent Research System</b></summary>
|
|
278
|
+
|
|
279
|
+
```python
|
|
280
|
+
# Research coordinator that uses specialized agents
|
|
281
|
+
researcher = rt.agent_node("Researcher", tool_nodes=(web_search, summarize))
|
|
282
|
+
analyst = rt.agent_node("Analyst", tool_nodes=(analyze_data, create_charts))
|
|
283
|
+
writer = rt.agent_node("Writer", tool_nodes=(draft_report, format_document))
|
|
284
|
+
|
|
285
|
+
coordinator = rt.agent_node(
|
|
286
|
+
"Research Coordinator",
|
|
287
|
+
tool_nodes=(researcher, analyst, writer), # Agents as tools!
|
|
288
|
+
system_message="Coordinate research tasks between specialists."
|
|
289
|
+
)
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
</details>
|
|
293
|
+
|
|
294
|
+
<details open>
|
|
295
|
+
<summary><b>π Complex Workflows Made Simple</b></summary>
|
|
296
|
+
|
|
297
|
+
```python
|
|
298
|
+
# Customer service system with context sharing
|
|
299
|
+
async def handle_customer_request(query: str):
|
|
300
|
+
with rt.Session() as session:
|
|
301
|
+
# Technical support first
|
|
302
|
+
technical_result = await rt.call(technical_agent, query)
|
|
303
|
+
|
|
304
|
+
# Share context with billing if needed
|
|
305
|
+
if "billing" in technical_result.text.lower():
|
|
306
|
+
session.context["technical_notes"] = technical_result.text
|
|
307
|
+
billing_result = await rt.call(billing_agent, query)
|
|
308
|
+
return billing_result
|
|
309
|
+
|
|
310
|
+
return technical_result
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
</details>
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## π What Makes Railtracks Special?
|
|
318
|
+
|
|
319
|
+
A lightweight agentic LLM framework for building modular, multi-LLM workflows with a focus on simplicity and developer experience.
|
|
320
|
+
|
|
321
|
+
<div align="center">
|
|
322
|
+
|
|
323
|
+
| Feature | Railtracks | LangGraph | Google ADK |
|
|
324
|
+
|:--------|:----------:|:---------:|:----------:|
|
|
325
|
+
| **π Python-first, no DSL** | β
| β | β
|
|
|
326
|
+
| **π Built-in visualization** | β
| β
| β οΈ |
|
|
327
|
+
| **β‘ Zero setup overhead** | β
| β
| β |
|
|
328
|
+
| **π LLM-agnostic** | β
| β
| β
|
|
|
329
|
+
| **π― Pythonic style** | β
| β | β οΈ |
|
|
330
|
+
|
|
331
|
+
</div>
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## π Universal LLM Support
|
|
336
|
+
|
|
337
|
+
Switch between providers effortlessly:
|
|
338
|
+
|
|
339
|
+
```python
|
|
340
|
+
# OpenAI
|
|
341
|
+
rt.llm.OpenAILLM("gpt-4o")
|
|
342
|
+
|
|
343
|
+
# Anthropic
|
|
344
|
+
rt.llm.AnthropicLLM("claude-3-5-sonnet")
|
|
345
|
+
|
|
346
|
+
# Local models
|
|
347
|
+
rt.llm.OllamaLLM("llama3")
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Works with **OpenAI**, **Anthropic**, **Google**, **Azure**, and more! Check out our neatly crafted [docs](https://railtownai.github.io/railtracks/llm/).
|
|
351
|
+
|
|
352
|
+
## π οΈ Powerful Features
|
|
353
|
+
|
|
354
|
+
<div align="center">
|
|
355
|
+
|
|
356
|
+
<table>
|
|
357
|
+
<tr>
|
|
358
|
+
<td width="50%" valign="top">
|
|
359
|
+
|
|
360
|
+
### π¦ Rich Tool Ecosystem
|
|
361
|
+
|
|
362
|
+
Use existing tools or create your own:
|
|
363
|
+
|
|
364
|
+
- β
**Built in Tools** RAG, CoT, etc.
|
|
365
|
+
- β
**Functions** β Tools automatically
|
|
366
|
+
- β
**MCP Integration** as client or as server
|
|
367
|
+
- β
**Agents as Tools** β agent cluster
|
|
368
|
+
|
|
369
|
+
</td>
|
|
370
|
+
<td width="50%" valign="top">
|
|
371
|
+
|
|
372
|
+
### π Built-in Observability
|
|
373
|
+
|
|
374
|
+
Debug and monitor with ease:
|
|
375
|
+
|
|
376
|
+
- β
Real-time execution graphs
|
|
377
|
+
- β
Performance metrics
|
|
378
|
+
- β
Error tracking & debugging
|
|
379
|
+
- β
Local visualization
|
|
380
|
+
- β
Session management
|
|
381
|
+
- β
**No signup required!**
|
|
382
|
+
|
|
383
|
+
</td>
|
|
384
|
+
</tr>
|
|
385
|
+
</table>
|
|
386
|
+
|
|
387
|
+
</div>
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## π Learn More
|
|
392
|
+
|
|
393
|
+
<div align="center">
|
|
394
|
+
|
|
395
|
+
<table>
|
|
396
|
+
<tr>
|
|
397
|
+
<td align="center" width="20%">
|
|
398
|
+
<a href="https://railtownai.github.io/railtracks/">
|
|
399
|
+
<img src="https://img.icons8.com/fluency/96/000000/book.png" width="64" height="64" alt="Documentation"/>
|
|
400
|
+
<br><b>Documentation</b>
|
|
401
|
+
</a>
|
|
402
|
+
<br>
|
|
403
|
+
<sub>Complete guides & API reference</sub>
|
|
404
|
+
</td>
|
|
405
|
+
<td align="center" width="20%">
|
|
406
|
+
<a href="https://railtownai.github.io/railtracks/quickstart/quickstart/">
|
|
407
|
+
<img src="https://img.icons8.com/fluency/96/000000/rocket.png" width="64" height="64" alt="Quickstart"/>
|
|
408
|
+
<br><b>Quickstart</b>
|
|
409
|
+
</a>
|
|
410
|
+
<br>
|
|
411
|
+
<sub>Up and running in 5 minutes</sub>
|
|
412
|
+
</td>
|
|
413
|
+
<td align="center" width="20%">
|
|
414
|
+
<a href="https://github.com/RailtownAI/railtracks/tree/main/examples">
|
|
415
|
+
<img src="https://img.icons8.com/fluency/96/000000/code.png" width="64" height="64" alt="Examples"/>
|
|
416
|
+
<br><b>Examples</b>
|
|
417
|
+
</a>
|
|
418
|
+
<br>
|
|
419
|
+
<sub>Real-world implementations</sub>
|
|
420
|
+
</td>
|
|
421
|
+
<td align="center" width="20%">
|
|
422
|
+
<a href="https://discord.gg/h5ZcahDc">
|
|
423
|
+
<img src="https://img.icons8.com/fluency/96/000000/discord-logo.png" width="64" height="64" alt="Discord"/>
|
|
424
|
+
<br><b>Discord</b>
|
|
425
|
+
</a>
|
|
426
|
+
<br>
|
|
427
|
+
<sub>Get help & share creations</sub>
|
|
428
|
+
</td>
|
|
429
|
+
<td align="center" width="20%">
|
|
430
|
+
<a href="./CONTRIBUTING.md">
|
|
431
|
+
<img src="https://img.icons8.com/fluency/96/000000/handshake.png" width="64" height="64" alt="Contributing"/>
|
|
432
|
+
<br><b>Contributing</b>
|
|
433
|
+
</a>
|
|
434
|
+
<br>
|
|
435
|
+
<sub>Help make us better</sub>
|
|
436
|
+
</td>
|
|
437
|
+
</tr>
|
|
438
|
+
</table>
|
|
439
|
+
|
|
440
|
+
</div>
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
## π Ready to Build?
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
pip install railtracks railtracks-cli
|
|
450
|
+
```
|
|
451
|
+
<div align="center">
|
|
452
|
+
|
|
453
|
+
<br>
|
|
454
|
+
|
|
455
|
+
## β¨ Join developers across the world building the future with AI agents
|
|
456
|
+
|
|
457
|
+
<br>
|
|
458
|
+
|
|
459
|
+
<a href="https://github.com/RailtownAI/railtracks/stargazers">
|
|
460
|
+
<img src="https://img.shields.io/badge/β_STAR_THIS_REPO-FFD700?style=for-the-badge&logo=github&logoColor=000" alt="Star this repo" />
|
|
461
|
+
</a>
|
|
462
|
+
|
|
463
|
+
<br><br>
|
|
464
|
+
|
|
465
|
+
**You grow, we grow - Railtracks will expand with your ambitions.**
|
|
466
|
+
|
|
467
|
+
<br>
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
<sub>Made with lots of β€οΈ and β by the βRailtracksβ team β’ Licensed under MIT β’ [Report Bug](https://github.com/RailtownAI/railtracks/issues) β’ [Request Feature](https://github.com/RailtownAI/railtracks/issues)</sub>
|
|
472
|
+
|
|
473
|
+
</div>
|
|
474
|
+
|