yaab-sdk 0.1.0__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 (249) hide show
  1. yaab_sdk-0.1.0/.gitignore +45 -0
  2. yaab_sdk-0.1.0/LICENSE +21 -0
  3. yaab_sdk-0.1.0/PKG-INFO +533 -0
  4. yaab_sdk-0.1.0/README.md +439 -0
  5. yaab_sdk-0.1.0/docs/DEPLOYMENT.md +119 -0
  6. yaab_sdk-0.1.0/docs/agents.md +84 -0
  7. yaab_sdk-0.1.0/docs/api/agent.md +5 -0
  8. yaab_sdk-0.1.0/docs/api/governance.md +5 -0
  9. yaab_sdk-0.1.0/docs/api/graph.md +5 -0
  10. yaab_sdk-0.1.0/docs/api/limits.md +5 -0
  11. yaab_sdk-0.1.0/docs/api/memory.md +5 -0
  12. yaab_sdk-0.1.0/docs/api/models.md +5 -0
  13. yaab_sdk-0.1.0/docs/api/multiagent.md +5 -0
  14. yaab_sdk-0.1.0/docs/api/rag.md +5 -0
  15. yaab_sdk-0.1.0/docs/api/runner.md +5 -0
  16. yaab_sdk-0.1.0/docs/api/serve.md +5 -0
  17. yaab_sdk-0.1.0/docs/api/sessions.md +5 -0
  18. yaab_sdk-0.1.0/docs/api/testing.md +5 -0
  19. yaab_sdk-0.1.0/docs/api/tools.md +5 -0
  20. yaab_sdk-0.1.0/docs/api/types.md +5 -0
  21. yaab_sdk-0.1.0/docs/concepts.md +144 -0
  22. yaab_sdk-0.1.0/docs/evaluation.md +94 -0
  23. yaab_sdk-0.1.0/docs/extending.md +154 -0
  24. yaab_sdk-0.1.0/docs/get-started.md +154 -0
  25. yaab_sdk-0.1.0/docs/governance.md +280 -0
  26. yaab_sdk-0.1.0/docs/graph.md +124 -0
  27. yaab_sdk-0.1.0/docs/index.md +88 -0
  28. yaab_sdk-0.1.0/docs/interop.md +143 -0
  29. yaab_sdk-0.1.0/docs/limits.md +67 -0
  30. yaab_sdk-0.1.0/docs/llms.txt +52 -0
  31. yaab_sdk-0.1.0/docs/models.md +83 -0
  32. yaab_sdk-0.1.0/docs/multi-agent.md +113 -0
  33. yaab_sdk-0.1.0/docs/optimization.md +88 -0
  34. yaab_sdk-0.1.0/docs/platform.md +142 -0
  35. yaab_sdk-0.1.0/docs/prompts-skills.md +68 -0
  36. yaab_sdk-0.1.0/docs/quickstart.md +100 -0
  37. yaab_sdk-0.1.0/docs/rag.md +147 -0
  38. yaab_sdk-0.1.0/docs/robustness.md +106 -0
  39. yaab_sdk-0.1.0/docs/serving.md +89 -0
  40. yaab_sdk-0.1.0/docs/state-and-agui.md +77 -0
  41. yaab_sdk-0.1.0/docs/state.md +106 -0
  42. yaab_sdk-0.1.0/docs/storage-backends.md +140 -0
  43. yaab_sdk-0.1.0/docs/streaming-events.md +84 -0
  44. yaab_sdk-0.1.0/docs/tools.md +127 -0
  45. yaab_sdk-0.1.0/examples/01_quickstart.py +53 -0
  46. yaab_sdk-0.1.0/examples/02_graph_hitl.py +50 -0
  47. yaab_sdk-0.1.0/examples/03_governance.py +79 -0
  48. yaab_sdk-0.1.0/examples/04_multi_agent.py +39 -0
  49. yaab_sdk-0.1.0/examples/05_streaming.py +38 -0
  50. yaab_sdk-0.1.0/examples/06_managers.py +47 -0
  51. yaab_sdk-0.1.0/examples/07_rag.py +60 -0
  52. yaab_sdk-0.1.0/examples/08_robust_agent.py +81 -0
  53. yaab_sdk-0.1.0/examples/09_loaders_streaming_batch.py +58 -0
  54. yaab_sdk-0.1.0/examples/serve_app.py +17 -0
  55. yaab_sdk-0.1.0/pyproject.toml +147 -0
  56. yaab_sdk-0.1.0/samples/README.md +63 -0
  57. yaab_sdk-0.1.0/scripts/README.md +48 -0
  58. yaab_sdk-0.1.0/tests/test_a2a_depth.py +99 -0
  59. yaab_sdk-0.1.0/tests/test_agent.py +89 -0
  60. yaab_sdk-0.1.0/tests/test_agui.py +89 -0
  61. yaab_sdk-0.1.0/tests/test_approval.py +103 -0
  62. yaab_sdk-0.1.0/tests/test_authorization.py +153 -0
  63. yaab_sdk-0.1.0/tests/test_builtin_tools.py +81 -0
  64. yaab_sdk-0.1.0/tests/test_builtin_tools_expansion.py +263 -0
  65. yaab_sdk-0.1.0/tests/test_cloud_backends.py +112 -0
  66. yaab_sdk-0.1.0/tests/test_compliance.py +53 -0
  67. yaab_sdk-0.1.0/tests/test_content.py +78 -0
  68. yaab_sdk-0.1.0/tests/test_context_caching.py +206 -0
  69. yaab_sdk-0.1.0/tests/test_context_window.py +74 -0
  70. yaab_sdk-0.1.0/tests/test_core.py +60 -0
  71. yaab_sdk-0.1.0/tests/test_deploy_cli.py +268 -0
  72. yaab_sdk-0.1.0/tests/test_doc_snippets.py +108 -0
  73. yaab_sdk-0.1.0/tests/test_embedder_default.py +83 -0
  74. yaab_sdk-0.1.0/tests/test_eval_adapters.py +98 -0
  75. yaab_sdk-0.1.0/tests/test_eval_cli.py +232 -0
  76. yaab_sdk-0.1.0/tests/test_evalset.py +254 -0
  77. yaab_sdk-0.1.0/tests/test_examples.py +189 -0
  78. yaab_sdk-0.1.0/tests/test_governance.py +139 -0
  79. yaab_sdk-0.1.0/tests/test_graph.py +76 -0
  80. yaab_sdk-0.1.0/tests/test_graph_engine.py +99 -0
  81. yaab_sdk-0.1.0/tests/test_graph_hitl_fanout.py +85 -0
  82. yaab_sdk-0.1.0/tests/test_graph_retry.py +275 -0
  83. yaab_sdk-0.1.0/tests/test_guardrail_adapters.py +138 -0
  84. yaab_sdk-0.1.0/tests/test_interop.py +127 -0
  85. yaab_sdk-0.1.0/tests/test_interop_depth.py +139 -0
  86. yaab_sdk-0.1.0/tests/test_limits.py +114 -0
  87. yaab_sdk-0.1.0/tests/test_live_fixes.py +135 -0
  88. yaab_sdk-0.1.0/tests/test_loaders_stores.py +101 -0
  89. yaab_sdk-0.1.0/tests/test_managers.py +76 -0
  90. yaab_sdk-0.1.0/tests/test_mapagent.py +54 -0
  91. yaab_sdk-0.1.0/tests/test_mcp_sampling.py +56 -0
  92. yaab_sdk-0.1.0/tests/test_mcp_server.py +104 -0
  93. yaab_sdk-0.1.0/tests/test_memory_intelligence.py +252 -0
  94. yaab_sdk-0.1.0/tests/test_misc.py +149 -0
  95. yaab_sdk-0.1.0/tests/test_model_resilience_depth.py +122 -0
  96. yaab_sdk-0.1.0/tests/test_model_router.py +207 -0
  97. yaab_sdk-0.1.0/tests/test_model_settings.py +71 -0
  98. yaab_sdk-0.1.0/tests/test_monitor.py +57 -0
  99. yaab_sdk-0.1.0/tests/test_more_backends.py +136 -0
  100. yaab_sdk-0.1.0/tests/test_multiagent.py +69 -0
  101. yaab_sdk-0.1.0/tests/test_observability_controls.py +64 -0
  102. yaab_sdk-0.1.0/tests/test_openapi_tools.py +253 -0
  103. yaab_sdk-0.1.0/tests/test_optimize_inspect.py +25 -0
  104. yaab_sdk-0.1.0/tests/test_optimizer_depth.py +90 -0
  105. yaab_sdk-0.1.0/tests/test_output_retry.py +77 -0
  106. yaab_sdk-0.1.0/tests/test_parallel_agent_session.py +45 -0
  107. yaab_sdk-0.1.0/tests/test_parallel_tools.py +184 -0
  108. yaab_sdk-0.1.0/tests/test_rag.py +135 -0
  109. yaab_sdk-0.1.0/tests/test_rag_governance.py +64 -0
  110. yaab_sdk-0.1.0/tests/test_registry_remote.py +104 -0
  111. yaab_sdk-0.1.0/tests/test_resilience_config.py +117 -0
  112. yaab_sdk-0.1.0/tests/test_resumable_runs.py +255 -0
  113. yaab_sdk-0.1.0/tests/test_run_lifecycle.py +120 -0
  114. yaab_sdk-0.1.0/tests/test_run_management_api.py +226 -0
  115. yaab_sdk-0.1.0/tests/test_samples.py +116 -0
  116. yaab_sdk-0.1.0/tests/test_serve_endpoints.py +166 -0
  117. yaab_sdk-0.1.0/tests/test_state.py +77 -0
  118. yaab_sdk-0.1.0/tests/test_streaming_tool_loop.py +124 -0
  119. yaab_sdk-0.1.0/tests/test_sub_agents.py +206 -0
  120. yaab_sdk-0.1.0/tests/test_tool_auth.py +306 -0
  121. yaab_sdk-0.1.0/tests/test_tool_choice.py +102 -0
  122. yaab_sdk-0.1.0/tests/test_user_simulation.py +315 -0
  123. yaab_sdk-0.1.0/tests/test_voice.py +311 -0
  124. yaab_sdk-0.1.0/tests/test_web_ui.py +166 -0
  125. yaab_sdk-0.1.0/tests/test_yaml_spec.py +342 -0
  126. yaab_sdk-0.1.0/yaab/__init__.py +159 -0
  127. yaab_sdk-0.1.0/yaab/_core.py +214 -0
  128. yaab_sdk-0.1.0/yaab/a2a/__init__.py +14 -0
  129. yaab_sdk-0.1.0/yaab/a2a/client.py +170 -0
  130. yaab_sdk-0.1.0/yaab/agent.py +330 -0
  131. yaab_sdk-0.1.0/yaab/agui.py +205 -0
  132. yaab_sdk-0.1.0/yaab/artifacts/__init__.py +54 -0
  133. yaab_sdk-0.1.0/yaab/artifacts/manager.py +86 -0
  134. yaab_sdk-0.1.0/yaab/auth.py +127 -0
  135. yaab_sdk-0.1.0/yaab/batch.py +115 -0
  136. yaab_sdk-0.1.0/yaab/cli.py +469 -0
  137. yaab_sdk-0.1.0/yaab/config.py +457 -0
  138. yaab_sdk-0.1.0/yaab/content.py +143 -0
  139. yaab_sdk-0.1.0/yaab/context.py +119 -0
  140. yaab_sdk-0.1.0/yaab/deploy.py +411 -0
  141. yaab_sdk-0.1.0/yaab/eval/__init__.py +128 -0
  142. yaab_sdk-0.1.0/yaab/eval/adapters/__init__.py +4 -0
  143. yaab_sdk-0.1.0/yaab/eval/adapters/deepeval.py +74 -0
  144. yaab_sdk-0.1.0/yaab/eval/adapters/ragas.py +76 -0
  145. yaab_sdk-0.1.0/yaab/exceptions.py +98 -0
  146. yaab_sdk-0.1.0/yaab/extensions.py +127 -0
  147. yaab_sdk-0.1.0/yaab/governance/__init__.py +147 -0
  148. yaab_sdk-0.1.0/yaab/governance/approval.py +89 -0
  149. yaab_sdk-0.1.0/yaab/governance/audit.py +155 -0
  150. yaab_sdk-0.1.0/yaab/governance/authorization.py +223 -0
  151. yaab_sdk-0.1.0/yaab/governance/compliance/__init__.py +59 -0
  152. yaab_sdk-0.1.0/yaab/governance/compliance/base.py +88 -0
  153. yaab_sdk-0.1.0/yaab/governance/compliance/eu_ai_act.py +83 -0
  154. yaab_sdk-0.1.0/yaab/governance/compliance/iso_42001.py +49 -0
  155. yaab_sdk-0.1.0/yaab/governance/compliance/nist_ai_rmf.py +62 -0
  156. yaab_sdk-0.1.0/yaab/governance/compliance/soc2.py +47 -0
  157. yaab_sdk-0.1.0/yaab/governance/compliance/sr_11_7.py +90 -0
  158. yaab_sdk-0.1.0/yaab/governance/eval.py +391 -0
  159. yaab_sdk-0.1.0/yaab/governance/evalset.py +159 -0
  160. yaab_sdk-0.1.0/yaab/governance/guardrails/__init__.py +48 -0
  161. yaab_sdk-0.1.0/yaab/governance/guardrails/llm_guard.py +82 -0
  162. yaab_sdk-0.1.0/yaab/governance/guardrails/nemo.py +74 -0
  163. yaab_sdk-0.1.0/yaab/governance/guardrails/presidio.py +72 -0
  164. yaab_sdk-0.1.0/yaab/governance/lifecycle.py +142 -0
  165. yaab_sdk-0.1.0/yaab/governance/monitor.py +138 -0
  166. yaab_sdk-0.1.0/yaab/governance/policy.py +211 -0
  167. yaab_sdk-0.1.0/yaab/governance/registry.py +286 -0
  168. yaab_sdk-0.1.0/yaab/governance/service.py +118 -0
  169. yaab_sdk-0.1.0/yaab/governance/simulation.py +307 -0
  170. yaab_sdk-0.1.0/yaab/graph/__init__.py +53 -0
  171. yaab_sdk-0.1.0/yaab/graph/checkpoint.py +191 -0
  172. yaab_sdk-0.1.0/yaab/graph/state.py +431 -0
  173. yaab_sdk-0.1.0/yaab/limits.py +144 -0
  174. yaab_sdk-0.1.0/yaab/memory/__init__.py +155 -0
  175. yaab_sdk-0.1.0/yaab/memory/embedders.py +67 -0
  176. yaab_sdk-0.1.0/yaab/memory/extraction.py +119 -0
  177. yaab_sdk-0.1.0/yaab/memory/manager.py +194 -0
  178. yaab_sdk-0.1.0/yaab/models/__init__.py +33 -0
  179. yaab_sdk-0.1.0/yaab/models/base.py +75 -0
  180. yaab_sdk-0.1.0/yaab/models/instrumented.py +64 -0
  181. yaab_sdk-0.1.0/yaab/models/litellm_provider.py +341 -0
  182. yaab_sdk-0.1.0/yaab/models/resilient.py +139 -0
  183. yaab_sdk-0.1.0/yaab/models/router.py +194 -0
  184. yaab_sdk-0.1.0/yaab/models/test_model.py +154 -0
  185. yaab_sdk-0.1.0/yaab/multiagent.py +291 -0
  186. yaab_sdk-0.1.0/yaab/observability/__init__.py +113 -0
  187. yaab_sdk-0.1.0/yaab/observability/sinks.py +109 -0
  188. yaab_sdk-0.1.0/yaab/optimize/__init__.py +30 -0
  189. yaab_sdk-0.1.0/yaab/optimize/module.py +132 -0
  190. yaab_sdk-0.1.0/yaab/optimize/optimizer.py +296 -0
  191. yaab_sdk-0.1.0/yaab/optimize/signature.py +70 -0
  192. yaab_sdk-0.1.0/yaab/plugins/__init__.py +71 -0
  193. yaab_sdk-0.1.0/yaab/plugins/builtins.py +102 -0
  194. yaab_sdk-0.1.0/yaab/prompts.py +98 -0
  195. yaab_sdk-0.1.0/yaab/py.typed +0 -0
  196. yaab_sdk-0.1.0/yaab/rag/__init__.py +75 -0
  197. yaab_sdk-0.1.0/yaab/rag/chunking.py +116 -0
  198. yaab_sdk-0.1.0/yaab/rag/eval.py +84 -0
  199. yaab_sdk-0.1.0/yaab/rag/knowledge.py +168 -0
  200. yaab_sdk-0.1.0/yaab/rag/loaders.py +171 -0
  201. yaab_sdk-0.1.0/yaab/rag/memory_service.py +92 -0
  202. yaab_sdk-0.1.0/yaab/rag/rerank.py +133 -0
  203. yaab_sdk-0.1.0/yaab/rag/store.py +226 -0
  204. yaab_sdk-0.1.0/yaab/rag/stores_external.py +645 -0
  205. yaab_sdk-0.1.0/yaab/rag/types.py +62 -0
  206. yaab_sdk-0.1.0/yaab/runner.py +986 -0
  207. yaab_sdk-0.1.0/yaab/serve.py +372 -0
  208. yaab_sdk-0.1.0/yaab/sessions/__init__.py +56 -0
  209. yaab_sdk-0.1.0/yaab/sessions/base.py +38 -0
  210. yaab_sdk-0.1.0/yaab/sessions/manager.py +136 -0
  211. yaab_sdk-0.1.0/yaab/sessions/memory.py +33 -0
  212. yaab_sdk-0.1.0/yaab/sessions/postgres.py +80 -0
  213. yaab_sdk-0.1.0/yaab/sessions/redis.py +79 -0
  214. yaab_sdk-0.1.0/yaab/sessions/sqlite.py +58 -0
  215. yaab_sdk-0.1.0/yaab/skills.py +84 -0
  216. yaab_sdk-0.1.0/yaab/state.py +122 -0
  217. yaab_sdk-0.1.0/yaab/streaming.py +172 -0
  218. yaab_sdk-0.1.0/yaab/testing/__init__.py +8 -0
  219. yaab_sdk-0.1.0/yaab/tools/__init__.py +25 -0
  220. yaab_sdk-0.1.0/yaab/tools/agent_tool.py +52 -0
  221. yaab_sdk-0.1.0/yaab/tools/auth.py +212 -0
  222. yaab_sdk-0.1.0/yaab/tools/base.py +186 -0
  223. yaab_sdk-0.1.0/yaab/tools/builtin/__init__.py +80 -0
  224. yaab_sdk-0.1.0/yaab/tools/builtin/calculator.py +48 -0
  225. yaab_sdk-0.1.0/yaab/tools/builtin/code.py +38 -0
  226. yaab_sdk-0.1.0/yaab/tools/builtin/datetime_tool.py +19 -0
  227. yaab_sdk-0.1.0/yaab/tools/builtin/files.py +122 -0
  228. yaab_sdk-0.1.0/yaab/tools/builtin/grounding.py +59 -0
  229. yaab_sdk-0.1.0/yaab/tools/builtin/http.py +30 -0
  230. yaab_sdk-0.1.0/yaab/tools/builtin/search.py +123 -0
  231. yaab_sdk-0.1.0/yaab/tools/builtin/url_context.py +82 -0
  232. yaab_sdk-0.1.0/yaab/tools/mcp.py +62 -0
  233. yaab_sdk-0.1.0/yaab/tools/mcp_client.py +225 -0
  234. yaab_sdk-0.1.0/yaab/tools/mcp_server.py +252 -0
  235. yaab_sdk-0.1.0/yaab/tools/openapi.py +336 -0
  236. yaab_sdk-0.1.0/yaab/tools/sandbox.py +124 -0
  237. yaab_sdk-0.1.0/yaab/types.py +167 -0
  238. yaab_sdk-0.1.0/yaab/voice.py +383 -0
  239. yaab_sdk-0.1.0/yaab/web.py +383 -0
  240. yaab_sdk-0.1.0/yaab-core/Cargo.toml +27 -0
  241. yaab_sdk-0.1.0/yaab-core/LICENSE +21 -0
  242. yaab_sdk-0.1.0/yaab-core/README.md +18 -0
  243. yaab_sdk-0.1.0/yaab-core/pyproject.toml +21 -0
  244. yaab_sdk-0.1.0/yaab-core/src/actors.rs +41 -0
  245. yaab_sdk-0.1.0/yaab-core/src/channels.rs +94 -0
  246. yaab_sdk-0.1.0/yaab-core/src/checkpoint.rs +33 -0
  247. yaab_sdk-0.1.0/yaab-core/src/lib.rs +102 -0
  248. yaab_sdk-0.1.0/yaab-core/src/scheduler.rs +77 -0
  249. yaab_sdk-0.1.0/yaab-core/src/vector.rs +39 -0
@@ -0,0 +1,45 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ .pytest_cache/
9
+ .mypy_cache/
10
+ .ruff_cache/
11
+ .venv/
12
+ venv/
13
+ *.so
14
+ .coverage
15
+ htmlcov/
16
+
17
+ # Rust
18
+ target/
19
+ Cargo.lock
20
+
21
+ # Local
22
+ live_e2e_report.json
23
+ *.log
24
+ *.db
25
+ *.sqlite
26
+ *.sqlite3
27
+ .DS_Store
28
+ .env
29
+ yaab_audit.db
30
+ yaab_registry.db
31
+ gap_analysis_parsed.json
32
+
33
+ # Docs site build output
34
+ site/
35
+
36
+ # Local tooling, scratch, and internal working notes (never commit)
37
+ .claude/
38
+ CLAUDE.md
39
+ graphify-out/
40
+ dist-rust/
41
+ docs/superpowers/
42
+ docs/ADK_GAP_ANALYSIS.md
43
+ docs/COMPARISON.md
44
+ docs/ROADMAP.md
45
+ docs/RESEARCH_FEATURE_DEMAND.md
yaab_sdk-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 YAAB contributors
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 all
13
+ 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 THE
21
+ SOFTWARE.
@@ -0,0 +1,533 @@
1
+ Metadata-Version: 2.4
2
+ Name: yaab-sdk
3
+ Version: 0.1.0
4
+ Summary: Yet Another Agent Builder — a type-safe, governance-first agent SDK with a Rust performance core.
5
+ Project-URL: Homepage, https://github.com/sthitaprajnas/yaab
6
+ Project-URL: Repository, https://github.com/sthitaprajnas/yaab
7
+ Author: YAAB contributors
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Keywords: agents,ai,compliance,governance,litellm,llm,orchestration
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Rust
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Requires-Python: >=3.11
19
+ Requires-Dist: pydantic>=2.7
20
+ Requires-Dist: typing-extensions>=4.10
21
+ Provides-Extra: all
22
+ Requires-Dist: beautifulsoup4>=4.12; extra == 'all'
23
+ Requires-Dist: fastapi>=0.110; extra == 'all'
24
+ Requires-Dist: httpx>=0.27; extra == 'all'
25
+ Requires-Dist: litellm>=1.40; extra == 'all'
26
+ Requires-Dist: opentelemetry-api>=1.25; extra == 'all'
27
+ Requires-Dist: opentelemetry-sdk>=1.25; extra == 'all'
28
+ Requires-Dist: psycopg[binary]>=3.1; extra == 'all'
29
+ Requires-Dist: pypdf>=4.0; extra == 'all'
30
+ Requires-Dist: pyyaml>=6.0; extra == 'all'
31
+ Requires-Dist: uvicorn>=0.29; extra == 'all'
32
+ Provides-Extra: chroma
33
+ Requires-Dist: chromadb>=0.5; extra == 'chroma'
34
+ Provides-Extra: deepeval
35
+ Requires-Dist: deepeval>=1.0; extra == 'deepeval'
36
+ Provides-Extra: dev
37
+ Requires-Dist: fastapi>=0.110; extra == 'dev'
38
+ Requires-Dist: httpx>=0.27; extra == 'dev'
39
+ Requires-Dist: maturin>=1.5; extra == 'dev'
40
+ Requires-Dist: mypy>=1.10; extra == 'dev'
41
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
42
+ Requires-Dist: pytest>=8; extra == 'dev'
43
+ Requires-Dist: pyyaml>=6.0; extra == 'dev'
44
+ Requires-Dist: ruff>=0.4; extra == 'dev'
45
+ Provides-Extra: docs
46
+ Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
47
+ Requires-Dist: mkdocstrings[python]>=0.24; extra == 'docs'
48
+ Provides-Extra: http
49
+ Requires-Dist: httpx>=0.27; extra == 'http'
50
+ Provides-Extra: langfuse
51
+ Requires-Dist: langfuse>=2.0; extra == 'langfuse'
52
+ Provides-Extra: litellm
53
+ Requires-Dist: litellm>=1.40; extra == 'litellm'
54
+ Provides-Extra: llm-guard
55
+ Requires-Dist: llm-guard>=0.3; extra == 'llm-guard'
56
+ Provides-Extra: logfire
57
+ Requires-Dist: logfire>=0.30; extra == 'logfire'
58
+ Provides-Extra: nemo
59
+ Requires-Dist: nemoguardrails>=0.9; extra == 'nemo'
60
+ Provides-Extra: opensearch
61
+ Requires-Dist: opensearch-py>=2.4; extra == 'opensearch'
62
+ Provides-Extra: oracle
63
+ Requires-Dist: oracledb>=2.0; extra == 'oracle'
64
+ Provides-Extra: otel
65
+ Requires-Dist: opentelemetry-api>=1.25; extra == 'otel'
66
+ Requires-Dist: opentelemetry-sdk>=1.25; extra == 'otel'
67
+ Provides-Extra: pinecone
68
+ Requires-Dist: pinecone>=5.0; extra == 'pinecone'
69
+ Provides-Extra: postgres
70
+ Requires-Dist: psycopg[binary]>=3.1; extra == 'postgres'
71
+ Provides-Extra: presidio
72
+ Requires-Dist: presidio-analyzer>=2.2; extra == 'presidio'
73
+ Requires-Dist: presidio-anonymizer>=2.2; extra == 'presidio'
74
+ Provides-Extra: qdrant
75
+ Requires-Dist: qdrant-client>=1.9; extra == 'qdrant'
76
+ Provides-Extra: rag
77
+ Requires-Dist: beautifulsoup4>=4.12; extra == 'rag'
78
+ Requires-Dist: pypdf>=4.0; extra == 'rag'
79
+ Provides-Extra: ragas
80
+ Requires-Dist: datasets>=2.0; extra == 'ragas'
81
+ Requires-Dist: ragas>=0.1; extra == 'ragas'
82
+ Provides-Extra: redis
83
+ Requires-Dist: redis>=5.0; extra == 'redis'
84
+ Provides-Extra: rust
85
+ Requires-Dist: yaab-core>=0.1.0; extra == 'rust'
86
+ Provides-Extra: serve
87
+ Requires-Dist: fastapi>=0.110; extra == 'serve'
88
+ Requires-Dist: uvicorn>=0.29; extra == 'serve'
89
+ Provides-Extra: weaviate
90
+ Requires-Dist: weaviate-client>=4.5; extra == 'weaviate'
91
+ Provides-Extra: yaml
92
+ Requires-Dist: pyyaml>=6.0; extra == 'yaml'
93
+ Description-Content-Type: text/markdown
94
+
95
+ # YAAB — Yet Another Agent Builder
96
+
97
+ **YAAB is the agent SDK for teams that have to ship agents into production AND prove it to a regulator.**
98
+ Type-safe, optimizable, durable, and simple — the best ideas from across the
99
+ agent ecosystem on one runtime, on a universal LiteLLM model layer, with a
100
+ Rust core that accelerates the compute-bound hot paths (and an opt-in native
101
+ graph engine). Governance, an agent registry, audit lineage, and policy
102
+ guardrails are **first-class, not bolted on**.
103
+
104
+ 📖 **[Documentation](https://sthitaprajnas.github.io/yaab/)** — guides, concepts, and the full API reference.
105
+
106
+ ```python
107
+ from yaab import Agent
108
+
109
+ agent = Agent("assistant", model="openai/gpt-4o", instructions="Be concise.")
110
+ print(agent.run_sync("Say hello").output)
111
+ ```
112
+
113
+ No API key? Everything runs offline with `TestModel`:
114
+
115
+ ```python
116
+ from yaab import Agent
117
+ from yaab.testing import TestModel
118
+
119
+ agent = Agent("assistant", model=TestModel("hi!"))
120
+ assert agent.run_sync("hello").output == "hi!"
121
+ ```
122
+
123
+ ---
124
+
125
+ ## Why YAAB
126
+
127
+ No single existing framework covers the regulated-enterprise agent use case.
128
+ Each excels at one layer and is weak elsewhere. YAAB fuses the best ideas from
129
+ each onto **one runtime** and adds the layer none of them ship: enterprise
130
+ governance.
131
+
132
+ | Capability | ADK | DSPy | Pydantic AI | Strands | LangGraph | **YAAB** |
133
+ |---|---|---|---|---|---|---|
134
+ | Type-safe `Agent[Deps, Output]` | ◑ | ✕ | ✓ | ◑ | ◑ | **✓** |
135
+ | Model-driven fast path | ◑ | ✕ | ✓ | ✓ | ✕ | **✓** |
136
+ | Durable graph + checkpoints + HITL | ◑ | ✕ | ◑ | ✕ | ✓ | **✓** |
137
+ | Optimizable programs (compile) | ✕ | ✓ | ✕ | ✕ | ✕ | **✓** |
138
+ | Universal models (LiteLLM) | ◑ | ◑ | ✓ | ✓ | ◑ | **✓** |
139
+ | MCP + A2A interop | ✓ | ✕ | ◑ | ◑ | ✕ | **✓** |
140
+ | `fastapi_server_app` / serve as A2A server | ✕ | ✕ | ✕ | ◑ | ✕ | **✓** |
141
+ | Pluggable auth (bearer / API key / OAuth2)| ◑ | ✕ | ✕ | ◑ | ✕ | **✓** |
142
+ | OTel GenAI-convention tracing | ✓ | ◑ | ✓ | ✓ | ◑ | **✓** |
143
+ | Prompt management + versioning | ✕ | ◑ | ✕ | ✕ | ✕ | **✓** |
144
+ | Built-in RAG (provider-neutral) | ◑ cloud | ◑ cloud | ✕ | ◑ cloud | ◑ | **✓** |
145
+ | RAG access control + citations + faithfulness | ✕ | ✕ | ✕ | ✕ | ✕ | **✓** |
146
+ | Built-in tools + sandboxed code exec | ◑ | ✕ | ◑ | ◑ | ◑ | **✓** |
147
+ | Eval (RAGAS / DeepEval adapters) | ◑ | ◑ | ◑ | ✕ | ◑ | **✓** |
148
+ | AG-UI streaming + structured-output streaming | ✕ | ◑ | ◑ | ✕ | ◑ | **✓** |
149
+ | Cloud backends (Aurora/pgvector/OpenSearch/Oracle/Chroma/Qdrant/Pinecone/Weaviate/Redis) | ◑ | ✕ | ◑ | ◑ | ◑ | **✓** |
150
+ | **Agent registry + lifecycle FSM** | ✕ | ✕ | ✕ | ✕ | ✕ | **✓** |
151
+ | **Guardrail / policy engine** | ◑ | ✕ | ◑ | ✕ | ◑ | **✓** |
152
+ | **Tamper-evident audit + lineage** | ✕ | ✕ | ✕ | ✕ | ✕ | **✓** |
153
+ | **Compliance mappers (SR 11-7 / EU AI Act / NIST / ISO 42001 / SOC 2)** | ✕ | ✕ | ✕ | ✕ | ✕ | **✓** |
154
+ | **Rust performance core** | ✕ | ✕ | ✕ | ✕ | ✕ | **✓** |
155
+
156
+ ✓ first-class · ◑ partial / via add-on · ✕ not provided.
157
+
158
+ ---
159
+
160
+ ## Architecture
161
+
162
+ YAAB is **progressive disclosure**: three lines to a working agent, but every
163
+ layer is openable.
164
+
165
+ **Python is the brain and the entire developer surface** — the `Agent`,
166
+ `Runner`, model layer, tools, governance, orchestration logic, and every
167
+ extension point are Python (~95% of the code). **Rust (`yaab-core`) is a small
168
+ performance core** (~325 lines) holding the compute-bound primitives where
169
+ native speed pays off: vector similarity, checkpoint serialization, channel
170
+ reducers, BSP superstep planning + whole-superstep state folding, and
171
+ tamper-evident audit hashing. Every Rust primitive has a **pure-Python
172
+ fallback**, so YAAB installs and runs anywhere — Rust is an accelerator, never a
173
+ hard dependency. This is the proven pydantic-core / Polars / Ruff pattern: a
174
+ thin native core under a rich Python API.
175
+
176
+ ```
177
+ L5 Developer API (Python) — Agent, tools, signatures, DI, skills
178
+ L4 Orchestration (Python) — fast path · durable graph · optimizable programs
179
+ L3 Governance & Registry — registry, lifecycle, policy, audit, evals, compliance
180
+ L2 Model Layer (LiteLLM) — streaming, tools, structured output, fallbacks, cost
181
+ L1 yaab-core (RUST/PyO3) — vectors · channels · checkpoints · scheduler · hashing
182
+ ↑ accelerates the hot paths called by L1–L4; pure-Python fallback always present
183
+ ```
184
+
185
+ What runs **where**, precisely:
186
+
187
+ | Concern | Runs in |
188
+ |---|---|
189
+ | Agent loop, tool dispatch, model calls (I/O-bound) | **Python** (network is the bottleneck, not the loop) |
190
+ | Governance, registry, lifecycle, compliance | **Python** |
191
+ | Graph control flow (routing, HITL, checkp-orchestration) | **Python** |
192
+ | Vector top-k, checkpoint (de)serialize, channel reduce, superstep fold, audit hash | **Rust** (Python fallback) |
193
+
194
+ Check which core is active:
195
+
196
+ ```python
197
+ import yaab
198
+ print(yaab.BACKEND) # "rust" or "python"
199
+ ```
200
+
201
+ ### Opt-in Rust graph engine
202
+
203
+ The durable graph lets you choose how each superstep's state is advanced — your
204
+ call, per compiled graph:
205
+
206
+ ```python
207
+ app = graph.compile(engine="auto") # rust if the extension is built, else python (default)
208
+ app = graph.compile(engine="rust") # force the native whole-superstep fold (raises if unbuilt)
209
+ app = graph.compile(engine="python") # force the pure-Python engine
210
+ print(app.engine) # "rust" | "python"
211
+ ```
212
+
213
+ Both engines produce **identical results**; `rust` folds an entire superstep's
214
+ state in one native call instead of one cross-language hop per key. The Python
215
+ developer API is unchanged either way.
216
+
217
+ ---
218
+
219
+ ## The three orchestration paths (one runtime)
220
+
221
+ **1. Fast path — model-driven (Strands-style).** Just call the agent.
222
+
223
+ ```python
224
+ from yaab import Agent, tool
225
+
226
+ @tool
227
+ def get_weather(city: str) -> str:
228
+ """Return the weather for a city."""
229
+ return f"It's sunny in {city}."
230
+
231
+ agent = Agent("weather", model="openai/gpt-4o", tools=[get_weather])
232
+ print(agent.run_sync("What's the weather in Paris?").output)
233
+ ```
234
+
235
+ **2. Graph path — durable (LangGraph-style)** with checkpoints and HITL.
236
+
237
+ ```python
238
+ from yaab.graph import StateGraph, Channel, START, END, MemorySaver
239
+
240
+ g = StateGraph(channels={"count": Channel("add", default=0)})
241
+ g.add_node("inc", lambda s: {"count": 1})
242
+ g.add_edge(START, "inc")
243
+ g.add_conditional_edges("inc", lambda s: "inc" if s["count"] < 3 else END,
244
+ {"inc": "inc", END: END})
245
+
246
+ app = g.compile(checkpointer=MemorySaver())
247
+ print(app.invoke({}).state) # {'count': 3}
248
+ ```
249
+
250
+ Human-in-the-loop pauses and resumes by `thread_id`:
251
+
252
+ ```python
253
+ def approve(state, ctx):
254
+ decision = ctx.interrupt({"need": "approval"}) # pauses on first pass
255
+ return {"approved": decision}
256
+
257
+ # first call returns interrupted=True; resume with the human's answer:
258
+ app.invoke({}, thread_id="t1")
259
+ app.invoke(thread_id="t1", resume=True)
260
+ ```
261
+
262
+ **3. Optimizable path — compiled (DSPy-style).** Tune at build time, freeze for prod.
263
+
264
+ ```python
265
+ from yaab.optimize import Predict, BootstrapFewShot
266
+ from yaab.governance.eval import Case
267
+
268
+ qa = Predict("question -> answer", model="openai/gpt-4o")
269
+ artifact = await BootstrapFewShot().compile(qa, trainset, metric) # frozen, versioned
270
+ qa.load(artifact) # deterministic in production
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Governance
276
+
277
+ Governance is opt-in by **mode** (`off` / `observe` / `enforcing`) so YAAB is
278
+ frictionless for prototyping but enforces registry, approval, and guardrails in
279
+ production.
280
+
281
+ ```python
282
+ from yaab import Agent, Runner
283
+ from yaab.governance import (
284
+ GovernanceService, GovernanceMode, AgentCard, RiskTier, LifecycleState,
285
+ EvidenceArtifact,
286
+ )
287
+
288
+ gov = GovernanceService(mode=GovernanceMode.ENFORCING)
289
+
290
+ # Register the agent and walk it through the model-risk lifecycle.
291
+ gov.registry.register(AgentCard(agent_id="kyc-bot", name="KYC Bot", risk_tier=RiskTier.HIGH))
292
+ gov.lifecycle.transition("kyc-bot", LifecycleState.IN_DEVELOPMENT,
293
+ evidence=[EvidenceArtifact(kind="development_docs"),
294
+ EvidenceArtifact(kind="conceptual_soundness")])
295
+ # ... validation → approval ...
296
+
297
+ agent = Agent("KYC Bot", model="openai/gpt-4o", registry_id="kyc-bot")
298
+ runner = Runner(governance=gov) # refuses unregistered/unapproved agents
299
+ ```
300
+
301
+ You get, out of the box:
302
+
303
+ - **Agent registry** — A2A-compatible cards with ownership, risk tier, decision
304
+ authority, data lineage, and approval status; produces the SR 11-7 / EU AI Act
305
+ **model inventory**.
306
+ - **Lifecycle FSM** — `DRAFT → IN_DEVELOPMENT → IN_VALIDATION → APPROVED →
307
+ DEPLOYED → MONITORED → DECOMMISSIONED`, each transition evidence-gated and audited.
308
+ - **Policy / guardrail engine** — prompt-injection, PII (redact), secret, topic,
309
+ and system-prompt-leak scanners; pluggable (LLM Guard / NeMo / custom).
310
+ - **Tamper-evident audit log** — append-only, **hash-chained in Rust**; every
311
+ run, model call, tool call, guard decision, and lifecycle change. `audit.verify()`
312
+ detects any retroactive edit.
313
+ - **Evaluation** — code-first datasets/metrics that double as optimizer metrics
314
+ and drift monitoring.
315
+ - **Compliance mappers** — project the data model onto **SR 11-7, EU AI Act,
316
+ NIST AI RMF, ISO/IEC 42001, SOC 2** and emit audit-ready reports.
317
+
318
+ ```bash
319
+ yaab compliance report sr_11_7
320
+ ```
321
+
322
+ > Compliance mappers produce *evidence*, not legal sign-off. Effective challenge
323
+ > and conformity assessment still require qualified human reviewers — YAAB
324
+ > produces the evidence; humans attest to it.
325
+
326
+ ---
327
+
328
+ ## Serve anywhere — local to cloud
329
+
330
+ Local one-liner, or mount the ASGI app in any cloud (Lambda, Cloud Run, Fargate, K8s):
331
+
332
+ ```python
333
+ from yaab import Agent
334
+ from yaab.serve import fastapi_server_app
335
+ from yaab.auth import BearerTokenAuth
336
+
337
+ agent = Agent("assistant", model="openai/gpt-4o")
338
+ app = fastapi_server_app(agent, auth=BearerTokenAuth({"secret-token": "alice"}))
339
+ # uvicorn module:app → exposes /run, /a2a/tasks, /.well-known/agent.json, /health
340
+ ```
341
+
342
+ `yaab serve mymodule:agent` runs it directly. The app speaks **A2A** (agent
343
+ card + task endpoint), so other agents can discover and delegate to it. See
344
+ [`docs/DEPLOYMENT.md`](docs/DEPLOYMENT.md) and the [`Dockerfile`](Dockerfile).
345
+
346
+ ---
347
+
348
+ ## Multi-agent & managers
349
+
350
+ Compose agents as Sequential / Parallel / Loop / Swarm workflows — each is itself
351
+ an agent, so they nest and drop into tools, graphs, and servers:
352
+
353
+ ```python
354
+ from yaab import SequentialAgent, ParallelAgent, Swarm
355
+ from yaab.multiagent import SwarmState
356
+
357
+ pipeline = SequentialAgent("etl", [extractor, transformer, loader])
358
+ board = ParallelAgent("review", [legal, finance, risk])
359
+ support = Swarm("support", [triage, billing, tech], entry="triage")
360
+ await support.run("I was double charged", deps=SwarmState())
361
+ ```
362
+
363
+ Scoped session / memory / artifact **managers** keep state organized per app/user:
364
+
365
+ ```python
366
+ from yaab import SessionManager, MemoryManager, ArtifactManager
367
+
368
+ sessions = SessionManager()
369
+ s = await sessions.create_session(app_name="bank", user_id="alice", state={"tier": "gold"})
370
+
371
+ memory = MemoryManager()
372
+ await memory.add("Alice prefers email", app_name="bank", user_id="alice")
373
+ await memory.add_session_to_memory(s, app_name="bank", user_id="alice")
374
+
375
+ artifacts = ArtifactManager()
376
+ await artifacts.save("report.pdf", data, session_id=s.id) # auto-versioned
377
+ ```
378
+
379
+ Interop is first-class: import an **MCP** server's tools with `MCPClient` (or
380
+ expose yours with `MCPServer`), and discover/delegate to remote agents over
381
+ **A2A** with `RemoteAgent` (which is also a tool). See the docs below.
382
+
383
+ ## Built-in RAG (provider-neutral)
384
+
385
+ A whole retrieval pipeline ships in the box — not delegated to a cloud service —
386
+ with the governance pieces other SDKs lack:
387
+
388
+ ```python
389
+ from yaab import Agent, KnowledgeBase
390
+ from yaab.rag import load_directory
391
+
392
+ kb = KnowledgeBase() # default: in-memory + Rust top-k
393
+ kb.add(load_directory("./docs", glob="**/*.md")) # pdf/html/csv/json loaders too
394
+ agent = Agent("support", model="openai/gpt-4o", tools=[kb.as_tool()])
395
+ ```
396
+
397
+ Per-user/document access control, source citations, dedup/incremental indexing,
398
+ retrieval guardrails (context-poisoning defense), and faithfulness eval are all
399
+ first-class. Swap the store for a cloud backend with one line — see below.
400
+
401
+ ## Batteries included
402
+
403
+ Everything below is built in, extensible by `Protocol`, and selectable by name
404
+ through the component registry — each integration is an optional extra:
405
+
406
+ - **Built-in tools** — calculator, time, HTTP fetch, web search, and sandboxed
407
+ Python exec (subprocess by default; `DockerSandbox` for real isolation).
408
+ - **Cloud backends** — sessions on Postgres/**Aurora**/Redis; vector stores on
409
+ **pgvector/Aurora**, **OpenSearch**, **Oracle 23ai**, Chroma, Qdrant,
410
+ Pinecone, Weaviate; graph checkpointers on Postgres/Aurora/Redis. All ship an
411
+ in-memory default and honor metadata filters for per-tenant isolation.
412
+ - **Evaluation** — deterministic + LLM-judge metrics, plus **RAGAS** and
413
+ **DeepEval** adapters, behind one registry.
414
+ - **Frontends & ops** — `yaab web` dev playground, **AG-UI** streaming
415
+ middleware, token + structured-output streaming, batch/offline inference,
416
+ resilience (rate limit + circuit breaker), YAML-config agents, OTel tracing
417
+ with Langfuse/Logfire/OTel audit sinks.
418
+
419
+ ```python
420
+ from yaab import get_component, available_components
421
+ available_components("vectorstore") # memory, pgvector, aurora, chroma, qdrant, opensearch, oracle, pinecone, weaviate
422
+ store = get_component("vectorstore", "opensearch", index="kb", hosts=[...])
423
+ ```
424
+
425
+ See [Storage & backends](docs/storage-backends.md) and
426
+ [Extending YAAB](docs/extending.md).
427
+
428
+ ## Documentation
429
+
430
+ Full guides live in [`docs/`](docs/index.md):
431
+
432
+ [**Get started**](docs/get-started.md) ·
433
+ [Concepts](docs/concepts.md) ·
434
+ [Samples](samples/README.md) ·
435
+ [Quickstart](docs/quickstart.md) ·
436
+ [Agents](docs/agents.md) ·
437
+ [Tools](docs/tools.md) ·
438
+ [Models](docs/models.md) ·
439
+ [State (sessions/memory/artifacts)](docs/state.md) ·
440
+ [Storage & backends](docs/storage-backends.md) ·
441
+ [RAG](docs/rag.md) ·
442
+ [Multi-agent](docs/multi-agent.md) ·
443
+ [Streaming & events](docs/streaming-events.md) ·
444
+ [Graph](docs/graph.md) ·
445
+ [MCP & A2A](docs/interop.md) ·
446
+ [Governance](docs/governance.md) ·
447
+ [Evaluation](docs/evaluation.md) ·
448
+ [Optimization](docs/optimization.md) ·
449
+ [Prompts & skills](docs/prompts-skills.md) ·
450
+ [Serving & auth](docs/serving.md) ·
451
+ [Platform extensions](docs/platform.md) ·
452
+ [Extending](docs/extending.md) ·
453
+ [Deployment](docs/DEPLOYMENT.md)
454
+
455
+ ## Install
456
+
457
+ ```bash
458
+ pip install yaab-sdk # SDK + high-performance async-first Python core
459
+ pip install 'yaab-sdk[litellm]' # universal model layer
460
+ pip install 'yaab-sdk[all]' # everything on PyPI (litellm, otel, rag, serve, …)
461
+ ```
462
+
463
+ > The PyPI distribution is **`yaab-sdk`**; the import package and CLI are **`yaab`**:
464
+ > `pip install yaab-sdk` → `import yaab` / `from yaab import Agent` / `$ yaab web`.
465
+
466
+ **Two cores, one API.** `pip install yaab-sdk` ships a high-performance,
467
+ async-first **pure-Python core** that works on every platform with zero build
468
+ tooling — this is what runs today (`yaab.BACKEND == "python"`).
469
+
470
+ The optional **`yaab-core`** Rust accelerator transparently speeds up the hot
471
+ paths (vector search, checkpoint serialization, channel reducers, audit hashing,
472
+ the graph engine). It is **not yet published to PyPI**, so today you build it
473
+ from source (needs only `maturin`); a prebuilt `abi3` wheel and `pip install
474
+ 'yaab-sdk[rust]'` are planned. YAAB auto-selects Rust when present and falls back to
475
+ Python otherwise — your code never changes either way.
476
+
477
+ ```bash
478
+ maturin develop -m yaab-core/Cargo.toml --release # build the Rust core locally
479
+ ```
480
+
481
+ Check which core is active:
482
+
483
+ ```python
484
+ import yaab; print(yaab.BACKEND) # "rust" or "python"
485
+ ```
486
+
487
+ ---
488
+
489
+ ## CLI
490
+
491
+ ```bash
492
+ yaab info # environment + active performance backend
493
+ yaab init my_agent # scaffold a starter agent
494
+ yaab registry list # the model inventory
495
+ yaab compliance report eu_ai_act # audit-ready compliance report
496
+ yaab serve my_module:agent # serve over HTTP / A2A
497
+ ```
498
+
499
+ ---
500
+
501
+ ## Project layout
502
+
503
+ ```
504
+ yaab/ Python SDK (thin API layer)
505
+ agent.py runner.py types.py core abstractions + event-driven runner
506
+ models/ LiteLLM provider, instrumentation, TestModel
507
+ tools/ sessions/ memory/ artifacts/ services
508
+ graph/ durable StateGraph + checkpointers
509
+ optimize/ Signature / Module / Optimizer (DSPy-style)
510
+ governance/ registry, lifecycle, policy, audit, eval, compliance
511
+ plugins/ prompts.py skills.py auth.py serve.py cli.py
512
+ yaab-core/ Rust crate (PyO3) — the performance core
513
+ examples/ runnable examples
514
+ tests/ test suite (runs offline)
515
+ ```
516
+
517
+ ---
518
+
519
+ ## Status & caveats
520
+
521
+ YAAB is **alpha**. The core runtime, governance layer, graph engine, and Rust
522
+ core are implemented and tested offline; some borrowed capabilities are
523
+ simplified relative to their source frameworks.
524
+ Framework APIs evolve fast — pin versions and re-verify. Verify EU AI Act
525
+ dates/fines against EUR-Lex and SR 11-7 language against the Federal Reserve's
526
+ official letter.
527
+
528
+ ## License
529
+
530
+ YAAB is open source under the **MIT License** — see [`LICENSE`](LICENSE). The
531
+ Rust core (`yaab-core`) is published under the same license. SPDX identifier:
532
+ `MIT`. You're free to use, modify, and distribute it, including commercially,
533
+ provided the copyright and license notice are retained.