RouteKitAI 0.1.0__tar.gz → 0.2.1__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.
Files changed (118) hide show
  1. {routekitai-0.1.0/src/RouteKitAI.egg-info → routekitai-0.2.1}/PKG-INFO +58 -28
  2. {routekitai-0.1.0 → routekitai-0.2.1}/README.md +54 -27
  3. routekitai-0.2.1/docs/api-reference.md +135 -0
  4. {routekitai-0.1.0 → routekitai-0.2.1}/docs/architecture.md +7 -6
  5. routekitai-0.2.1/docs/getting-started.md +117 -0
  6. routekitai-0.2.1/docs/guides/cli-reference.md +134 -0
  7. routekitai-0.2.1/docs/guides/creating-tools.md +122 -0
  8. routekitai-0.2.1/docs/guides/graph-workflows.md +110 -0
  9. routekitai-0.2.1/docs/guides/providers.md +120 -0
  10. routekitai-0.2.1/docs/guides/running-agents.md +111 -0
  11. routekitai-0.2.1/docs/guides/tracing-and-replay.md +106 -0
  12. routekitai-0.2.1/docs/index.md +56 -0
  13. {routekitai-0.1.0 → routekitai-0.2.1}/docs/security-and-governance.md +3 -17
  14. routekitai-0.2.1/examples/anthropic_agent.py +107 -0
  15. routekitai-0.2.1/examples/basic.py +30 -0
  16. {routekitai-0.1.0 → routekitai-0.2.1}/examples/eval_regression.py +10 -5
  17. {routekitai-0.1.0 → routekitai-0.2.1}/examples/function_calling_policy.py +3 -3
  18. routekitai-0.2.1/examples/graph_policy.py +119 -0
  19. routekitai-0.2.1/examples/plan_execute_policy.py +91 -0
  20. {routekitai-0.1.0 → routekitai-0.2.1}/examples/react_policy.py +5 -5
  21. {routekitai-0.1.0 → routekitai-0.2.1}/examples/supervisor_agent.py +18 -3
  22. {routekitai-0.1.0 → routekitai-0.2.1}/examples/supervisor_policy.py +30 -8
  23. {routekitai-0.1.0 → routekitai-0.2.1}/pyproject.toml +4 -0
  24. {routekitai-0.1.0 → routekitai-0.2.1/src/RouteKitAI.egg-info}/PKG-INFO +58 -28
  25. {routekitai-0.1.0 → routekitai-0.2.1}/src/RouteKitAI.egg-info/SOURCES.txt +10 -1
  26. {routekitai-0.1.0 → routekitai-0.2.1}/src/RouteKitAI.egg-info/requires.txt +4 -0
  27. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/__init__.py +1 -1
  28. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/message.py +2 -2
  29. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/policies.py +20 -14
  30. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/policy.py +3 -0
  31. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/policy_adapter.py +17 -2
  32. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/runtime.py +57 -11
  33. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/tool.py +2 -2
  34. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/graphs/graph.py +2 -2
  35. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/message.py +2 -2
  36. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/providers/__init__.py +2 -0
  37. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/providers/anthropic.py +25 -9
  38. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/sandbox/permissions.py +2 -2
  39. routekitai-0.1.0/docs/oidc-publishing.md +0 -146
  40. routekitai-0.1.0/examples/basic.py +0 -54
  41. routekitai-0.1.0/examples/graph_policy.py +0 -49
  42. routekitai-0.1.0/examples/plan_execute_policy.py +0 -55
  43. {routekitai-0.1.0 → routekitai-0.2.1}/CHANGELOG.md +0 -0
  44. {routekitai-0.1.0 → routekitai-0.2.1}/LICENSE +0 -0
  45. {routekitai-0.1.0 → routekitai-0.2.1}/MANIFEST.in +0 -0
  46. {routekitai-0.1.0 → routekitai-0.2.1}/examples/__init__.py +0 -0
  47. {routekitai-0.1.0 → routekitai-0.2.1}/examples/graph_agent.py +0 -0
  48. {routekitai-0.1.0 → routekitai-0.2.1}/examples/graph_agent_real.py +0 -0
  49. {routekitai-0.1.0 → routekitai-0.2.1}/examples/hello_routekit.py +0 -0
  50. {routekitai-0.1.0 → routekitai-0.2.1}/setup.cfg +0 -0
  51. {routekitai-0.1.0 → routekitai-0.2.1}/src/RouteKitAI.egg-info/dependency_links.txt +0 -0
  52. {routekitai-0.1.0 → routekitai-0.2.1}/src/RouteKitAI.egg-info/entry_points.txt +0 -0
  53. {routekitai-0.1.0 → routekitai-0.2.1}/src/RouteKitAI.egg-info/top_level.txt +0 -0
  54. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/__init__.py +0 -0
  55. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/main.py +0 -0
  56. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/replay.py +0 -0
  57. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/run.py +0 -0
  58. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/serve.py +0 -0
  59. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/test_agent.py +0 -0
  60. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/trace.py +0 -0
  61. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/trace_analyze.py +0 -0
  62. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/cli/trace_search.py +0 -0
  63. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/__init__.py +0 -0
  64. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/agent.py +0 -0
  65. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/errors.py +0 -0
  66. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/hooks.py +0 -0
  67. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/memory.py +0 -0
  68. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/model.py +0 -0
  69. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/core/tools.py +0 -0
  70. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/evals/__init__.py +0 -0
  71. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/evals/dataset.py +0 -0
  72. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/evals/metrics.py +0 -0
  73. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/evals/runner.py +0 -0
  74. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/graphs/__init__.py +0 -0
  75. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/graphs/executors.py +0 -0
  76. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/memory/__init__.py +0 -0
  77. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/memory/episodic.py +0 -0
  78. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/memory/kv.py +0 -0
  79. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/memory/retrieval.py +0 -0
  80. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/memory/vector.py +0 -0
  81. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/memory/working.py +0 -0
  82. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/model.py +0 -0
  83. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/__init__.py +0 -0
  84. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/analyzer.py +0 -0
  85. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/exporters/__init__.py +0 -0
  86. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/exporters/base.py +0 -0
  87. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/exporters/jsonl.py +0 -0
  88. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/exporters/otel.py +0 -0
  89. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/spans.py +0 -0
  90. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/streaming.py +0 -0
  91. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/observability/trace.py +0 -0
  92. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/providers/azure_openai.py +0 -0
  93. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/providers/local.py +0 -0
  94. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/providers/openai.py +0 -0
  95. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/py.typed +0 -0
  96. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/sandbox/__init__.py +0 -0
  97. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/sandbox/filesystem.py +0 -0
  98. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/sandbox/network.py +0 -0
  99. {routekitai-0.1.0 → routekitai-0.2.1}/src/routekitai/tool.py +0 -0
  100. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_evals.py +0 -0
  101. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_graphs.py +0 -0
  102. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_graphs_subgraph.py +0 -0
  103. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_hooks.py +0 -0
  104. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_integration.py +0 -0
  105. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_memory.py +0 -0
  106. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_memory_kv.py +0 -0
  107. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_memory_vector.py +0 -0
  108. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_message.py +0 -0
  109. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_otel_exporter.py +0 -0
  110. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_runtime.py +0 -0
  111. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_sandbox_filesystem.py +0 -0
  112. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_sandbox_network.py +0 -0
  113. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_streaming.py +0 -0
  114. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_streaming_serve.py +0 -0
  115. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_tool.py +0 -0
  116. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_tools.py +0 -0
  117. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_trace_analyzer.py +0 -0
  118. {routekitai-0.1.0 → routekitai-0.2.1}/tests/test_trace_analyzer_integration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: RouteKitAI
3
- Version: 0.1.0
3
+ Version: 0.2.1
4
4
  Summary: An agent development + orchestration framework
5
5
  Author: Mohamed Ghassen Brahim
6
6
  License: MIT
@@ -41,6 +41,9 @@ Requires-Dist: sentence-transformers>=2.2.0; extra == "optional"
41
41
  Requires-Dist: faiss-cpu>=1.7.4; extra == "optional"
42
42
  Requires-Dist: openai>=1.0.0; extra == "optional"
43
43
  Requires-Dist: nest-asyncio>=1.5.0; extra == "optional"
44
+ Provides-Extra: docs
45
+ Requires-Dist: mkdocs>=1.5.0; extra == "docs"
46
+ Requires-Dist: mkdocs-material>=9.0.0; extra == "docs"
44
47
  Dynamic: license-file
45
48
 
46
49
  # RouteKitAI
@@ -60,6 +63,8 @@ Dynamic: license-file
60
63
 
61
64
  ---
62
65
 
66
+ > **⚠️ Early stage**: RouteKitAI is still in very early development. APIs may change, and some features are experimental. Use with caution in production.
67
+
63
68
  RouteKitAI is a Python framework for building AI agents with **graph-based orchestration**, **built-in tracing**, and **deterministic replay**. Unlike other frameworks, RouteKitAI treats observability and testability as first-class features from day one.
64
69
 
65
70
  ## ✨ Features
@@ -195,50 +200,54 @@ asyncio.run(main())
195
200
 
196
201
  - **[Architecture Guide](docs/architecture.md)**: Deep dive into RouteKitAI's design
197
202
  - **[Security & Governance](docs/security-and-governance.md)**: Security features and best practices
198
- - **[API Reference](https://RouteKitAI.readthedocs.io)**: Complete API documentation (coming soon)
203
+ - **[Full documentation](https://routekitai.readthedocs.io)**: Architecture, security, and guides (Read the Docs)
199
204
 
200
205
  ## 🎓 Examples
201
206
 
202
207
  Check out the [`examples/`](examples/) directory for complete examples:
203
208
 
204
- - **[Basic Agent](examples/hello_RouteKitAI.py)**: Simple agent with tools
205
- - **[Graph Orchestration](examples/graph_agent.py)**: Multi-agent workflow
206
- - **[Supervisor Pattern](examples/supervisor_agent.py)**: Supervisor delegating to sub-agents
209
+ - **[Basic Agent](examples/basic.py)** / **[Hello RouteKit](examples/hello_routekit.py)**: Simple agent with tools
210
+ - **[Real agent with Anthropic](examples/anthropic_agent.py)**: Live Claude agent with tool use (requires `ANTHROPIC_API_KEY`)
211
+ - **[Graph Orchestration](examples/graph_agent.py)** / **[Graph Policy](examples/graph_policy.py)**: Multi-agent workflows
212
+ - **[Supervisor Pattern](examples/supervisor_agent.py)** / **[Supervisor Policy](examples/supervisor_policy.py)**: Supervisor delegating to sub-agents
213
+ - **[ReAct / Plan–Execute / Function Calling](examples/react_policy.py)**, **[Plan–Execute](examples/plan_execute_policy.py)**, **[Function Calling](examples/function_calling_policy.py)**: Policy examples
207
214
  - **[Evaluation Harness](examples/eval_regression.py)**: Testing agents with datasets
208
215
 
216
+ Run all examples: `./scripts/run_examples.sh` (or `bash scripts/run_examples.sh`).
217
+
209
218
  ## 🛠️ CLI Commands
210
219
 
211
- RouteKitAI provides a CLI for common operations:
220
+ RouteKitAI provides a CLI (`routekitai`) for common operations:
212
221
 
213
222
  ```bash
214
223
  # Run an agent script
215
- RouteKitAI run agent_script.py
224
+ routekitai run agent_script.py
216
225
 
217
226
  # View a trace (multiple formats available)
218
- RouteKitAI trace <trace_id> # Table view (default)
219
- RouteKitAI trace <trace_id> --format timeline # Timeline visualization
220
- RouteKitAI trace <trace_id> --format steps # Step-by-step execution
221
- RouteKitAI trace <trace_id> --format json # JSON output
222
- RouteKitAI trace <trace_id> --format raw # Raw JSONL
227
+ routekitai trace <trace_id> # Table view (default)
228
+ routekitai trace <trace_id> --format timeline # Timeline visualization
229
+ routekitai trace <trace_id> --format steps # Step-by-step execution
230
+ routekitai trace <trace_id> --format json # JSON output
231
+ routekitai trace <trace_id> --format raw # Raw JSONL
223
232
 
224
233
  # Analyze trace metrics
225
- RouteKitAI trace-analyze <trace_id> # Performance metrics, token usage, costs
234
+ routekitai trace-analyze <trace_id> # Performance metrics, token usage, costs
226
235
 
227
236
  # Search traces
228
- RouteKitAI trace-search "error" # Search all traces for "error"
229
- RouteKitAI trace-search "model" --trace-id abc # Search specific trace
230
- RouteKitAI trace-search "tool" --event-type tool_called # Filter by event type
237
+ routekitai trace-search "error" # Search all traces for "error"
238
+ routekitai trace-search "model" --trace-id abc # Search specific trace
239
+ routekitai trace-search "tool" --event-type tool_called # Filter by event type
231
240
 
232
241
  # Replay a trace
233
- RouteKitAI replay <trace_id> --agent my_agent
242
+ routekitai replay <trace_id> --agent my_agent
234
243
 
235
244
  # Start web UI for trace visualization
236
- RouteKitAI serve # Start on default port 8080
237
- RouteKitAI serve --port 3000 # Custom port
238
- RouteKitAI serve --host 0.0.0.0 # Make accessible from network
245
+ routekitai serve # Start on default port 8080
246
+ routekitai serve --port 3000 # Custom port
247
+ routekitai serve --host 0.0.0.0 # Make accessible from network
239
248
 
240
249
  # Run sanity checks
241
- RouteKitAI test-agent
250
+ routekitai test-agent
242
251
  ```
243
252
 
244
253
  ## 🏗️ Core Primitives
@@ -271,7 +280,7 @@ pip install -e ".[dev]"
271
280
  pytest
272
281
 
273
282
  # Run with coverage
274
- pytest --cov=RouteKitAI --cov-report=html
283
+ pytest --cov=routekitai --cov-report=html
275
284
 
276
285
  # Run specific test file
277
286
  pytest tests/test_runtime.py
@@ -284,15 +293,15 @@ pytest tests/test_runtime.py
284
293
  mypy src/
285
294
 
286
295
  # Linting
287
- ruff check src/
296
+ ruff check src/ tests/ examples/
288
297
 
289
298
  # Format code
290
- ruff format src/
299
+ ruff format src/ tests/ examples/
291
300
  ```
292
301
 
293
302
  ## 🤝 Contributing
294
303
 
295
- Contributions are welcome! Please read our contributing guidelines (coming soon) and:
304
+ Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) and:
296
305
 
297
306
  1. Fork the repository
298
307
  2. Create a feature branch (`git checkout -b feature/amazing-feature`)
@@ -302,8 +311,29 @@ Contributions are welcome! Please read our contributing guidelines (coming soon)
302
311
 
303
312
  ## 📋 Requirements
304
313
 
305
- - Python 3.11 or higher
306
- - Pydantic 2.0+
314
+ **Core (always installed):**
315
+
316
+ - Python 3.11+
317
+ - [Pydantic](https://docs.pydantic.dev/) 2.x
318
+ - [NumPy](https://numpy.org/) 1.24+
319
+ - [httpx](https://www.python-httpx.org/) 0.24+
320
+
321
+ **Optional extras:**
322
+
323
+ | Extra | Purpose |
324
+ |-------|---------|
325
+ | `[dev]` | CLI, tests, linting, type checking (pytest, mypy, ruff, rich, typer, safety, bandit) |
326
+ | `[ui]` | Web UI for traces: `routekitai serve` (FastAPI, Uvicorn) |
327
+ | `[optional]` | Vector memory, OpenAI adapter (sentence-transformers, faiss, openai, nest-asyncio) |
328
+ | `[docs]` | Build documentation locally (MkDocs, MkDocs Material) |
329
+
330
+ Examples:
331
+
332
+ ```bash
333
+ pip install "RouteKitAI[dev]" # development + CLI
334
+ pip install "RouteKitAI[dev,ui]" # + trace web UI
335
+ pip install "RouteKitAI[docs]" # build docs: mkdocs build / mkdocs serve
336
+ ```
307
337
 
308
338
  ## 📄 License
309
339
 
@@ -316,7 +346,7 @@ RouteKitAI is inspired by the need for testable, observable AI agent frameworks.
316
346
  ## 🔗 Links
317
347
 
318
348
  - **GitHub**: [https://github.com/MedGhassen/RouteKitAI](https://github.com/MedGhassen/RouteKitAI)
319
- - **Documentation**: [https://RouteKitAI.readthedocs.io](https://RouteKitAI.readthedocs.io) (coming soon)
349
+ - **Documentation**: [https://routekitai.readthedocs.io](https://routekitai.readthedocs.io)
320
350
  - **Issues**: [https://github.com/MedGhassen/RouteKitAI/issues](https://github.com/MedGhassen/RouteKitAI/issues)
321
351
 
322
352
  ---
@@ -15,6 +15,8 @@
15
15
 
16
16
  ---
17
17
 
18
+ > **⚠️ Early stage**: RouteKitAI is still in very early development. APIs may change, and some features are experimental. Use with caution in production.
19
+
18
20
  RouteKitAI is a Python framework for building AI agents with **graph-based orchestration**, **built-in tracing**, and **deterministic replay**. Unlike other frameworks, RouteKitAI treats observability and testability as first-class features from day one.
19
21
 
20
22
  ## ✨ Features
@@ -150,50 +152,54 @@ asyncio.run(main())
150
152
 
151
153
  - **[Architecture Guide](docs/architecture.md)**: Deep dive into RouteKitAI's design
152
154
  - **[Security & Governance](docs/security-and-governance.md)**: Security features and best practices
153
- - **[API Reference](https://RouteKitAI.readthedocs.io)**: Complete API documentation (coming soon)
155
+ - **[Full documentation](https://routekitai.readthedocs.io)**: Architecture, security, and guides (Read the Docs)
154
156
 
155
157
  ## 🎓 Examples
156
158
 
157
159
  Check out the [`examples/`](examples/) directory for complete examples:
158
160
 
159
- - **[Basic Agent](examples/hello_RouteKitAI.py)**: Simple agent with tools
160
- - **[Graph Orchestration](examples/graph_agent.py)**: Multi-agent workflow
161
- - **[Supervisor Pattern](examples/supervisor_agent.py)**: Supervisor delegating to sub-agents
161
+ - **[Basic Agent](examples/basic.py)** / **[Hello RouteKit](examples/hello_routekit.py)**: Simple agent with tools
162
+ - **[Real agent with Anthropic](examples/anthropic_agent.py)**: Live Claude agent with tool use (requires `ANTHROPIC_API_KEY`)
163
+ - **[Graph Orchestration](examples/graph_agent.py)** / **[Graph Policy](examples/graph_policy.py)**: Multi-agent workflows
164
+ - **[Supervisor Pattern](examples/supervisor_agent.py)** / **[Supervisor Policy](examples/supervisor_policy.py)**: Supervisor delegating to sub-agents
165
+ - **[ReAct / Plan–Execute / Function Calling](examples/react_policy.py)**, **[Plan–Execute](examples/plan_execute_policy.py)**, **[Function Calling](examples/function_calling_policy.py)**: Policy examples
162
166
  - **[Evaluation Harness](examples/eval_regression.py)**: Testing agents with datasets
163
167
 
168
+ Run all examples: `./scripts/run_examples.sh` (or `bash scripts/run_examples.sh`).
169
+
164
170
  ## 🛠️ CLI Commands
165
171
 
166
- RouteKitAI provides a CLI for common operations:
172
+ RouteKitAI provides a CLI (`routekitai`) for common operations:
167
173
 
168
174
  ```bash
169
175
  # Run an agent script
170
- RouteKitAI run agent_script.py
176
+ routekitai run agent_script.py
171
177
 
172
178
  # View a trace (multiple formats available)
173
- RouteKitAI trace <trace_id> # Table view (default)
174
- RouteKitAI trace <trace_id> --format timeline # Timeline visualization
175
- RouteKitAI trace <trace_id> --format steps # Step-by-step execution
176
- RouteKitAI trace <trace_id> --format json # JSON output
177
- RouteKitAI trace <trace_id> --format raw # Raw JSONL
179
+ routekitai trace <trace_id> # Table view (default)
180
+ routekitai trace <trace_id> --format timeline # Timeline visualization
181
+ routekitai trace <trace_id> --format steps # Step-by-step execution
182
+ routekitai trace <trace_id> --format json # JSON output
183
+ routekitai trace <trace_id> --format raw # Raw JSONL
178
184
 
179
185
  # Analyze trace metrics
180
- RouteKitAI trace-analyze <trace_id> # Performance metrics, token usage, costs
186
+ routekitai trace-analyze <trace_id> # Performance metrics, token usage, costs
181
187
 
182
188
  # Search traces
183
- RouteKitAI trace-search "error" # Search all traces for "error"
184
- RouteKitAI trace-search "model" --trace-id abc # Search specific trace
185
- RouteKitAI trace-search "tool" --event-type tool_called # Filter by event type
189
+ routekitai trace-search "error" # Search all traces for "error"
190
+ routekitai trace-search "model" --trace-id abc # Search specific trace
191
+ routekitai trace-search "tool" --event-type tool_called # Filter by event type
186
192
 
187
193
  # Replay a trace
188
- RouteKitAI replay <trace_id> --agent my_agent
194
+ routekitai replay <trace_id> --agent my_agent
189
195
 
190
196
  # Start web UI for trace visualization
191
- RouteKitAI serve # Start on default port 8080
192
- RouteKitAI serve --port 3000 # Custom port
193
- RouteKitAI serve --host 0.0.0.0 # Make accessible from network
197
+ routekitai serve # Start on default port 8080
198
+ routekitai serve --port 3000 # Custom port
199
+ routekitai serve --host 0.0.0.0 # Make accessible from network
194
200
 
195
201
  # Run sanity checks
196
- RouteKitAI test-agent
202
+ routekitai test-agent
197
203
  ```
198
204
 
199
205
  ## 🏗️ Core Primitives
@@ -226,7 +232,7 @@ pip install -e ".[dev]"
226
232
  pytest
227
233
 
228
234
  # Run with coverage
229
- pytest --cov=RouteKitAI --cov-report=html
235
+ pytest --cov=routekitai --cov-report=html
230
236
 
231
237
  # Run specific test file
232
238
  pytest tests/test_runtime.py
@@ -239,15 +245,15 @@ pytest tests/test_runtime.py
239
245
  mypy src/
240
246
 
241
247
  # Linting
242
- ruff check src/
248
+ ruff check src/ tests/ examples/
243
249
 
244
250
  # Format code
245
- ruff format src/
251
+ ruff format src/ tests/ examples/
246
252
  ```
247
253
 
248
254
  ## 🤝 Contributing
249
255
 
250
- Contributions are welcome! Please read our contributing guidelines (coming soon) and:
256
+ Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) and:
251
257
 
252
258
  1. Fork the repository
253
259
  2. Create a feature branch (`git checkout -b feature/amazing-feature`)
@@ -257,8 +263,29 @@ Contributions are welcome! Please read our contributing guidelines (coming soon)
257
263
 
258
264
  ## 📋 Requirements
259
265
 
260
- - Python 3.11 or higher
261
- - Pydantic 2.0+
266
+ **Core (always installed):**
267
+
268
+ - Python 3.11+
269
+ - [Pydantic](https://docs.pydantic.dev/) 2.x
270
+ - [NumPy](https://numpy.org/) 1.24+
271
+ - [httpx](https://www.python-httpx.org/) 0.24+
272
+
273
+ **Optional extras:**
274
+
275
+ | Extra | Purpose |
276
+ |-------|---------|
277
+ | `[dev]` | CLI, tests, linting, type checking (pytest, mypy, ruff, rich, typer, safety, bandit) |
278
+ | `[ui]` | Web UI for traces: `routekitai serve` (FastAPI, Uvicorn) |
279
+ | `[optional]` | Vector memory, OpenAI adapter (sentence-transformers, faiss, openai, nest-asyncio) |
280
+ | `[docs]` | Build documentation locally (MkDocs, MkDocs Material) |
281
+
282
+ Examples:
283
+
284
+ ```bash
285
+ pip install "RouteKitAI[dev]" # development + CLI
286
+ pip install "RouteKitAI[dev,ui]" # + trace web UI
287
+ pip install "RouteKitAI[docs]" # build docs: mkdocs build / mkdocs serve
288
+ ```
262
289
 
263
290
  ## 📄 License
264
291
 
@@ -271,7 +298,7 @@ RouteKitAI is inspired by the need for testable, observable AI agent frameworks.
271
298
  ## 🔗 Links
272
299
 
273
300
  - **GitHub**: [https://github.com/MedGhassen/RouteKitAI](https://github.com/MedGhassen/RouteKitAI)
274
- - **Documentation**: [https://RouteKitAI.readthedocs.io](https://RouteKitAI.readthedocs.io) (coming soon)
301
+ - **Documentation**: [https://routekitai.readthedocs.io](https://routekitai.readthedocs.io)
275
302
  - **Issues**: [https://github.com/MedGhassen/RouteKitAI/issues](https://github.com/MedGhassen/RouteKitAI/issues)
276
303
 
277
304
  ---
@@ -0,0 +1,135 @@
1
+ # API reference
2
+
3
+ Overview of the main public APIs in RouteKitAI. For full signatures and docstrings, use the in-editor help or the source under `src/routekitai/`.
4
+
5
+ ---
6
+
7
+ ## Core: `routekitai` (top-level)
8
+
9
+ | Symbol | Description |
10
+ |--------|-------------|
11
+ | **Agent** | Agent with model, tools, optional policy and memory. Use `agent.run(prompt)` or `agent.run_stream(prompt)`. |
12
+ | **RunResult** | Result of a run: `output` (Message), `trace_id`, `messages`, `final_state`. |
13
+ | **Runtime** | Orchestrator: register agents, run with optional policy, replay traces. |
14
+ | **Message** | Single message: `role`, `content`, `tool_calls`, `tool_result`, `metadata`. |
15
+ | **MessageRole** | Enum: SYSTEM, USER, ASSISTANT, TOOL. |
16
+ | **Model** | Abstract LLM interface: `chat(messages, tools=..., stream=...)`. |
17
+ | **ModelResponse** | `content`, `tool_calls`, `usage`, `metadata`. |
18
+ | **StreamEvent** | Streaming event: `type`, `content`, `tool_calls`, `usage`, `metadata`. |
19
+ | **Tool** | Abstract base for tools: `name`, `description`, `input_model`, `output_model`, `run(input)`. |
20
+ | **ToolCall** | Model-requested tool call: `id`, `name`, `arguments`. |
21
+ | **ToolFilter** | Allow/deny list for tools (agent or runtime hooks). |
22
+ | **Usage** | Token/cost info: `prompt_tokens`, `completion_tokens`, `total_tokens`, `cost`. |
23
+ | **RouteKitError**, **ModelError**, **ToolError**, **PolicyError**, **RouteKitRuntimeError** | Error types. |
24
+
25
+ ---
26
+
27
+ ## Core: `routekitai.core`
28
+
29
+ ### Agent and runtime
30
+
31
+ - **Agent** — Same as top-level. Fields: `name`, `model`, `tools`, `policy`, `memory`, `tool_filter`, `trace_dir`.
32
+ - **RunResult** — Same as top-level.
33
+ - **Runtime** — `agents`, `trace_dir`, `timeout`, `max_concurrency`, `policy_hooks`, etc. Methods: `register_agent()`, `run()`, `replay()`.
34
+
35
+ ### Messages and model
36
+
37
+ - **Message**, **MessageRole** — As above.
38
+ - **Model**, **ModelResponse**, **StreamEvent**, **ToolCall**, **Usage** — As above.
39
+
40
+ ### Tools
41
+
42
+ - **Tool** — Base class. Subclass and implement `run(input) -> output`. Optional: `input_model`, `output_model`, `permissions`, `timeout`, `redact_fields`.
43
+ - **ToolPermission** — Enum: NETWORK, FILESYSTEM, DATABASE, NONE.
44
+ - **EchoTool**, **HttpGetTool**, **FileReadTool** — Built-in tools in `routekitai.core.tools`.
45
+
46
+ ### Policies
47
+
48
+ - **Policy** — Abstract: `plan(state) -> list[Action]`, `reflect(state, observation) -> state`.
49
+ - **Action** — Base for model/tool/parallel/final actions.
50
+ - **ModelAction**, **ToolAction**, **Parallel**, **Final** — Action types.
51
+ - **ReActPolicy** — Reasoning + acting loop (default). Config: `max_iterations`.
52
+ - **FunctionCallingPolicy** — Strict function-calling.
53
+ - **GraphPolicy** — Runs a `Graph`; requires a Runtime with registered agents.
54
+ - **SupervisorPolicy** — Delegates to other agents.
55
+ - **PlanExecutePolicy** — Plan then execute.
56
+ - **PolicyAdapter** — Adapts policy interface for the runtime.
57
+
58
+ ### Hooks (security and governance)
59
+
60
+ - **PolicyHooks** — Container: `pii_redaction`, `tool_filter`, `approval_gate`.
61
+ - **PIIRedactionHook** — Redact emails, phones, custom patterns.
62
+ - **ToolFilter** — `allowed_tools` / `denied_tools`.
63
+ - **ApprovalGate** — Require approval for certain permissions; `approval_callback(tool_name, tool_args) -> bool`.
64
+
65
+ ---
66
+
67
+ ## Graphs: `routekitai.graphs`
68
+
69
+ | Symbol | Description |
70
+ |--------|-------------|
71
+ | **Graph** | Workflow: `name`, `nodes`, `edges`, `entry_node`, `exit_node`, `state_schema`, `config`. |
72
+ | **GraphNode** | Node: `id`, `type` (NodeType), `agent_name` / `tool_name` / `subgraph_name` / `condition`, `input_mapping`, `output_mapping`. |
73
+ | **GraphEdge** | Edge: `source`, `target`, optional `condition`. |
74
+ | **NodeType** | Enum: MODEL, TOOL, SUBGRAPH, CONDITION. |
75
+ | **GraphExecutor** | Executes a graph (used internally by GraphPolicy). |
76
+
77
+ ---
78
+
79
+ ## Memory: `routekitai.memory`
80
+
81
+ | Symbol | Description |
82
+ |--------|-------------|
83
+ | **Memory** | Abstract interface (from `routekitai.core.memory`). |
84
+ | **WorkingMemory** | In-memory context for a single run. |
85
+ | **EpisodicMemory** | SQLite-backed episode storage. |
86
+ | **RetrievalMemory** | TF-IDF or substring search. |
87
+ | **VectorMemory** | Vector similarity search (in `routekitai.memory.vector`). |
88
+ | **KVMemory** | Key-value store (in `routekitai.memory.kv`). |
89
+
90
+ ---
91
+
92
+ ## Evaluations: `routekitai.evals`
93
+
94
+ | Symbol | Description |
95
+ |--------|-------------|
96
+ | **Dataset** | Evaluation dataset (inputs and expected outputs). |
97
+ | **EvalRunner** | Runs an agent over a dataset and computes metrics. |
98
+ | **ExactMatchMetric**, **ContainsMetric**, **RegexMetric** | Built-in metrics. |
99
+
100
+ ---
101
+
102
+ ## Providers: `routekitai.providers`
103
+
104
+ | Symbol | Description |
105
+ |--------|-------------|
106
+ | **FakeModel** | Local model with preloaded responses (no API key). |
107
+ | **OpenAIChatModel** | OpenAI chat API. |
108
+ | **AnthropicModel** | Anthropic Claude (Messages API). |
109
+ | **AzureOpenAIChatModel** | Azure OpenAI (if installed). |
110
+
111
+ ---
112
+
113
+ ## Observability: `routekitai.observability`
114
+
115
+ - **Trace**, **TraceEvent** — Trace representation.
116
+ - **JSONLExporter** — Writes traces to `.routekit/traces/<trace_id>.jsonl`.
117
+ - **Analyzer** — Trace analysis (used by CLI `trace-analyze`).
118
+ - **OtelExporter** — OpenTelemetry export (optional).
119
+
120
+ ---
121
+
122
+ ## Sandbox: `routekitai.sandbox`
123
+
124
+ - **FilesystemSandbox** — Restrict filesystem access.
125
+ - **NetworkSandbox** — Restrict network access.
126
+ - **PermissionManager** — Manages tool permissions (used by runtime).
127
+
128
+ ---
129
+
130
+ ## Version
131
+
132
+ ```python
133
+ import routekitai
134
+ print(routekitai.__version__)
135
+ ```
@@ -237,8 +237,9 @@ RouteKitAI supports multiple memory backends:
237
237
 
238
238
  - **EpisodicMemory**: SQLite-backed episode storage
239
239
  - **RetrievalMemory**: TF-IDF or substring search
240
- - **VectorMemory**: Vector similarity search (planned)
241
- - **KVMemory**: Key-value storage (planned)
240
+ - **VectorMemory**: Vector similarity search
241
+ - **KVMemory**: Key-value storage
242
+ - **WorkingMemory**: In-memory context for a single run
242
243
 
243
244
  Memory is accessed through the `Memory` abstract interface, allowing agents to retain context across runs.
244
245
 
@@ -273,16 +274,16 @@ Sandboxing provides isolation for tool execution:
273
274
  - Memory backends: Episodic and retrieval memory
274
275
  - Security hooks: PII redaction, tool filtering, approval gates
275
276
  - CLI tools: Run, trace, replay, test commands
277
+ - Trace analysis: Metrics (`trace-analyze`), search (`trace-search`), timeline/step views, web UI (`serve`)
276
278
 
277
279
  ### Excluded (Post-MVP)
278
280
 
279
281
  - Distributed execution: Multi-machine orchestration
280
282
  - Streaming traces: Real-time trace streaming/aggregation
281
- - Trace analysis: Advanced querying, visualization, metrics
282
- - Production observability: Integration with monitoring systems
283
+ - Production observability: Integration with external monitoring (e.g. OpenTelemetry exporters exist; full integration TBD)
283
284
  - Advanced graph features: Dynamic graphs, conditional branching beyond basics
284
285
  - Model providers: Built-in integrations (use adapters)
285
- - UI/dashboards: Trace visualization tools
286
+ - UI/dashboards: Additional trace visualization (basic serve UI included)
286
287
 
287
288
  ## Design Principles
288
289
 
@@ -309,7 +310,7 @@ Performance optimizations can be added later without breaking the core design.
309
310
 
310
311
  - **Distributed execution**: Scale across multiple machines
311
312
  - **Advanced graph features**: Dynamic graphs, parallel node execution
312
- - **Trace analysis**: Query, visualize, and analyze traces
313
+ - **Trace analysis**: Further tooling and integrations (basic analysis and serve UI included)
313
314
  - **Production observability**: Integrate with monitoring systems
314
315
  - **Model provider integrations**: Built-in support for major LLM providers
315
316
  - **UI/dashboards**: Visual trace inspection and graph editing
@@ -0,0 +1,117 @@
1
+ # Getting Started
2
+
3
+ This guide gets you from zero to running your first agent and first graph in RouteKitAI.
4
+
5
+ ## Installation
6
+
7
+ Install the package from PyPI:
8
+
9
+ ```bash
10
+ pip install RouteKitAI
11
+ ```
12
+
13
+ For development (CLI, tests, type checking):
14
+
15
+ ```bash
16
+ pip install "RouteKitAI[dev]"
17
+ ```
18
+
19
+ Optional extras:
20
+
21
+ - **`[ui]`** — Web UI for traces (`routekitai serve`): FastAPI, Uvicorn
22
+ - **`[optional]`** — Vector memory, OpenAI/Anthropic adapters: sentence-transformers, faiss, openai, etc.
23
+
24
+ ```bash
25
+ pip install "RouteKitAI[dev,ui,optional]"
26
+ ```
27
+
28
+ **Requirements:** Python 3.11+, Pydantic 2.x.
29
+
30
+ ## Your first agent
31
+
32
+ A minimal agent needs a **model** and optionally **tools**. RouteKitAI uses a provider-agnostic `Model` interface, so you can start with a fake model (no API key) and later switch to OpenAI, Anthropic, or your own backend.
33
+
34
+ ```python
35
+ import asyncio
36
+ from routekitai import Agent
37
+ from routekitai.core.tools import EchoTool
38
+ from routekitai.providers.local import FakeModel
39
+
40
+ async def main():
41
+ # Local fake model (no API key)
42
+ model = FakeModel(name="basic")
43
+ model.add_response("Hello! I used the echo tool.")
44
+
45
+ agent = Agent(
46
+ name="assistant",
47
+ model=model,
48
+ tools=[EchoTool()],
49
+ )
50
+
51
+ result = await agent.run("Say hello and echo 'RouteKit works!'")
52
+ print(result.output.content)
53
+ print("Trace ID:", result.trace_id)
54
+
55
+ asyncio.run(main())
56
+ ```
57
+
58
+ - **`agent.run(prompt)`** — Runs the agent and returns a `RunResult` with `output`, `trace_id`, `messages`, and `final_state`.
59
+ - Every run is **traced** by default; traces are written under `.routekit/traces/` unless you set `trace_dir` on the agent.
60
+
61
+ ## Your first graph
62
+
63
+ Graphs define **explicit workflows** as nodes (model, tool, subgraph, condition) and edges. Use `GraphPolicy` with a `Runtime` and registered agents.
64
+
65
+ ```python
66
+ import asyncio
67
+ from pathlib import Path
68
+ from routekitai import Agent
69
+ from routekitai.core.policies import GraphPolicy
70
+ from routekitai.core.runtime import Runtime
71
+ from routekitai.core.tools import EchoTool
72
+ from routekitai.graphs import Graph, GraphNode, GraphEdge, NodeType
73
+ from routekitai.providers.local import FakeModel
74
+
75
+ async def main():
76
+ model = FakeModel(name="m1")
77
+ model.add_response("Processing...")
78
+ agent = Agent(name="worker", model=model, tools=[EchoTool()])
79
+
80
+ graph = Graph(
81
+ name="example",
82
+ entry_node="start",
83
+ exit_node="end",
84
+ nodes=[
85
+ GraphNode(id="start", type=NodeType.MODEL, agent_name="worker",
86
+ output_mapping={"output": "result"}),
87
+ GraphNode(id="end", type=NodeType.MODEL, agent_name="worker",
88
+ input_mapping={"result": "input"}, output_mapping={"output": "final"}),
89
+ ],
90
+ edges=[
91
+ GraphEdge(source="start", target="end"),
92
+ ],
93
+ )
94
+
95
+ runtime = Runtime(trace_dir=Path(".routekit/traces"))
96
+ runtime.register_agent(agent)
97
+ policy = GraphPolicy(graph=graph)
98
+
99
+ result = await runtime.run("worker", "Hello", policy=policy)
100
+ print(result.output.content)
101
+ print("Trace ID:", result.trace_id)
102
+
103
+ asyncio.run(main())
104
+ ```
105
+
106
+ In practice you’ll often build the graph and policy once, then call `runtime.run(...)` with the appropriate agent and policy. See [Graph workflows](guides/graph-workflows.md) for full details.
107
+
108
+ ## Next steps
109
+
110
+ - **[Running agents](guides/running-agents.md)** — `run` vs `run_stream`, using `Runtime` directly, trace directory.
111
+ - **[Creating tools](guides/creating-tools.md)** — Define tools with Pydantic input/output, permissions, redaction.
112
+ - **[Graph workflows](guides/graph-workflows.md)** — Nodes, edges, state mapping, `GraphPolicy`, subgraphs.
113
+ - **[Tracing and replay](guides/tracing-and-replay.md)** — Trace IDs, CLI (`trace`, `trace-analyze`, `replay`), replay for tests.
114
+ - **[CLI reference](guides/cli-reference.md)** — All `routekitai` commands and options.
115
+ - **[Providers](guides/providers.md)** — FakeModel, OpenAI, environment variables.
116
+
117
+ For design and concepts, see [Architecture](architecture.md). For security (PII redaction, tool filtering, approval gates), see [Security & Governance](security-and-governance.md).