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.
- yaab_sdk-0.1.0/.gitignore +45 -0
- yaab_sdk-0.1.0/LICENSE +21 -0
- yaab_sdk-0.1.0/PKG-INFO +533 -0
- yaab_sdk-0.1.0/README.md +439 -0
- yaab_sdk-0.1.0/docs/DEPLOYMENT.md +119 -0
- yaab_sdk-0.1.0/docs/agents.md +84 -0
- yaab_sdk-0.1.0/docs/api/agent.md +5 -0
- yaab_sdk-0.1.0/docs/api/governance.md +5 -0
- yaab_sdk-0.1.0/docs/api/graph.md +5 -0
- yaab_sdk-0.1.0/docs/api/limits.md +5 -0
- yaab_sdk-0.1.0/docs/api/memory.md +5 -0
- yaab_sdk-0.1.0/docs/api/models.md +5 -0
- yaab_sdk-0.1.0/docs/api/multiagent.md +5 -0
- yaab_sdk-0.1.0/docs/api/rag.md +5 -0
- yaab_sdk-0.1.0/docs/api/runner.md +5 -0
- yaab_sdk-0.1.0/docs/api/serve.md +5 -0
- yaab_sdk-0.1.0/docs/api/sessions.md +5 -0
- yaab_sdk-0.1.0/docs/api/testing.md +5 -0
- yaab_sdk-0.1.0/docs/api/tools.md +5 -0
- yaab_sdk-0.1.0/docs/api/types.md +5 -0
- yaab_sdk-0.1.0/docs/concepts.md +144 -0
- yaab_sdk-0.1.0/docs/evaluation.md +94 -0
- yaab_sdk-0.1.0/docs/extending.md +154 -0
- yaab_sdk-0.1.0/docs/get-started.md +154 -0
- yaab_sdk-0.1.0/docs/governance.md +280 -0
- yaab_sdk-0.1.0/docs/graph.md +124 -0
- yaab_sdk-0.1.0/docs/index.md +88 -0
- yaab_sdk-0.1.0/docs/interop.md +143 -0
- yaab_sdk-0.1.0/docs/limits.md +67 -0
- yaab_sdk-0.1.0/docs/llms.txt +52 -0
- yaab_sdk-0.1.0/docs/models.md +83 -0
- yaab_sdk-0.1.0/docs/multi-agent.md +113 -0
- yaab_sdk-0.1.0/docs/optimization.md +88 -0
- yaab_sdk-0.1.0/docs/platform.md +142 -0
- yaab_sdk-0.1.0/docs/prompts-skills.md +68 -0
- yaab_sdk-0.1.0/docs/quickstart.md +100 -0
- yaab_sdk-0.1.0/docs/rag.md +147 -0
- yaab_sdk-0.1.0/docs/robustness.md +106 -0
- yaab_sdk-0.1.0/docs/serving.md +89 -0
- yaab_sdk-0.1.0/docs/state-and-agui.md +77 -0
- yaab_sdk-0.1.0/docs/state.md +106 -0
- yaab_sdk-0.1.0/docs/storage-backends.md +140 -0
- yaab_sdk-0.1.0/docs/streaming-events.md +84 -0
- yaab_sdk-0.1.0/docs/tools.md +127 -0
- yaab_sdk-0.1.0/examples/01_quickstart.py +53 -0
- yaab_sdk-0.1.0/examples/02_graph_hitl.py +50 -0
- yaab_sdk-0.1.0/examples/03_governance.py +79 -0
- yaab_sdk-0.1.0/examples/04_multi_agent.py +39 -0
- yaab_sdk-0.1.0/examples/05_streaming.py +38 -0
- yaab_sdk-0.1.0/examples/06_managers.py +47 -0
- yaab_sdk-0.1.0/examples/07_rag.py +60 -0
- yaab_sdk-0.1.0/examples/08_robust_agent.py +81 -0
- yaab_sdk-0.1.0/examples/09_loaders_streaming_batch.py +58 -0
- yaab_sdk-0.1.0/examples/serve_app.py +17 -0
- yaab_sdk-0.1.0/pyproject.toml +147 -0
- yaab_sdk-0.1.0/samples/README.md +63 -0
- yaab_sdk-0.1.0/scripts/README.md +48 -0
- yaab_sdk-0.1.0/tests/test_a2a_depth.py +99 -0
- yaab_sdk-0.1.0/tests/test_agent.py +89 -0
- yaab_sdk-0.1.0/tests/test_agui.py +89 -0
- yaab_sdk-0.1.0/tests/test_approval.py +103 -0
- yaab_sdk-0.1.0/tests/test_authorization.py +153 -0
- yaab_sdk-0.1.0/tests/test_builtin_tools.py +81 -0
- yaab_sdk-0.1.0/tests/test_builtin_tools_expansion.py +263 -0
- yaab_sdk-0.1.0/tests/test_cloud_backends.py +112 -0
- yaab_sdk-0.1.0/tests/test_compliance.py +53 -0
- yaab_sdk-0.1.0/tests/test_content.py +78 -0
- yaab_sdk-0.1.0/tests/test_context_caching.py +206 -0
- yaab_sdk-0.1.0/tests/test_context_window.py +74 -0
- yaab_sdk-0.1.0/tests/test_core.py +60 -0
- yaab_sdk-0.1.0/tests/test_deploy_cli.py +268 -0
- yaab_sdk-0.1.0/tests/test_doc_snippets.py +108 -0
- yaab_sdk-0.1.0/tests/test_embedder_default.py +83 -0
- yaab_sdk-0.1.0/tests/test_eval_adapters.py +98 -0
- yaab_sdk-0.1.0/tests/test_eval_cli.py +232 -0
- yaab_sdk-0.1.0/tests/test_evalset.py +254 -0
- yaab_sdk-0.1.0/tests/test_examples.py +189 -0
- yaab_sdk-0.1.0/tests/test_governance.py +139 -0
- yaab_sdk-0.1.0/tests/test_graph.py +76 -0
- yaab_sdk-0.1.0/tests/test_graph_engine.py +99 -0
- yaab_sdk-0.1.0/tests/test_graph_hitl_fanout.py +85 -0
- yaab_sdk-0.1.0/tests/test_graph_retry.py +275 -0
- yaab_sdk-0.1.0/tests/test_guardrail_adapters.py +138 -0
- yaab_sdk-0.1.0/tests/test_interop.py +127 -0
- yaab_sdk-0.1.0/tests/test_interop_depth.py +139 -0
- yaab_sdk-0.1.0/tests/test_limits.py +114 -0
- yaab_sdk-0.1.0/tests/test_live_fixes.py +135 -0
- yaab_sdk-0.1.0/tests/test_loaders_stores.py +101 -0
- yaab_sdk-0.1.0/tests/test_managers.py +76 -0
- yaab_sdk-0.1.0/tests/test_mapagent.py +54 -0
- yaab_sdk-0.1.0/tests/test_mcp_sampling.py +56 -0
- yaab_sdk-0.1.0/tests/test_mcp_server.py +104 -0
- yaab_sdk-0.1.0/tests/test_memory_intelligence.py +252 -0
- yaab_sdk-0.1.0/tests/test_misc.py +149 -0
- yaab_sdk-0.1.0/tests/test_model_resilience_depth.py +122 -0
- yaab_sdk-0.1.0/tests/test_model_router.py +207 -0
- yaab_sdk-0.1.0/tests/test_model_settings.py +71 -0
- yaab_sdk-0.1.0/tests/test_monitor.py +57 -0
- yaab_sdk-0.1.0/tests/test_more_backends.py +136 -0
- yaab_sdk-0.1.0/tests/test_multiagent.py +69 -0
- yaab_sdk-0.1.0/tests/test_observability_controls.py +64 -0
- yaab_sdk-0.1.0/tests/test_openapi_tools.py +253 -0
- yaab_sdk-0.1.0/tests/test_optimize_inspect.py +25 -0
- yaab_sdk-0.1.0/tests/test_optimizer_depth.py +90 -0
- yaab_sdk-0.1.0/tests/test_output_retry.py +77 -0
- yaab_sdk-0.1.0/tests/test_parallel_agent_session.py +45 -0
- yaab_sdk-0.1.0/tests/test_parallel_tools.py +184 -0
- yaab_sdk-0.1.0/tests/test_rag.py +135 -0
- yaab_sdk-0.1.0/tests/test_rag_governance.py +64 -0
- yaab_sdk-0.1.0/tests/test_registry_remote.py +104 -0
- yaab_sdk-0.1.0/tests/test_resilience_config.py +117 -0
- yaab_sdk-0.1.0/tests/test_resumable_runs.py +255 -0
- yaab_sdk-0.1.0/tests/test_run_lifecycle.py +120 -0
- yaab_sdk-0.1.0/tests/test_run_management_api.py +226 -0
- yaab_sdk-0.1.0/tests/test_samples.py +116 -0
- yaab_sdk-0.1.0/tests/test_serve_endpoints.py +166 -0
- yaab_sdk-0.1.0/tests/test_state.py +77 -0
- yaab_sdk-0.1.0/tests/test_streaming_tool_loop.py +124 -0
- yaab_sdk-0.1.0/tests/test_sub_agents.py +206 -0
- yaab_sdk-0.1.0/tests/test_tool_auth.py +306 -0
- yaab_sdk-0.1.0/tests/test_tool_choice.py +102 -0
- yaab_sdk-0.1.0/tests/test_user_simulation.py +315 -0
- yaab_sdk-0.1.0/tests/test_voice.py +311 -0
- yaab_sdk-0.1.0/tests/test_web_ui.py +166 -0
- yaab_sdk-0.1.0/tests/test_yaml_spec.py +342 -0
- yaab_sdk-0.1.0/yaab/__init__.py +159 -0
- yaab_sdk-0.1.0/yaab/_core.py +214 -0
- yaab_sdk-0.1.0/yaab/a2a/__init__.py +14 -0
- yaab_sdk-0.1.0/yaab/a2a/client.py +170 -0
- yaab_sdk-0.1.0/yaab/agent.py +330 -0
- yaab_sdk-0.1.0/yaab/agui.py +205 -0
- yaab_sdk-0.1.0/yaab/artifacts/__init__.py +54 -0
- yaab_sdk-0.1.0/yaab/artifacts/manager.py +86 -0
- yaab_sdk-0.1.0/yaab/auth.py +127 -0
- yaab_sdk-0.1.0/yaab/batch.py +115 -0
- yaab_sdk-0.1.0/yaab/cli.py +469 -0
- yaab_sdk-0.1.0/yaab/config.py +457 -0
- yaab_sdk-0.1.0/yaab/content.py +143 -0
- yaab_sdk-0.1.0/yaab/context.py +119 -0
- yaab_sdk-0.1.0/yaab/deploy.py +411 -0
- yaab_sdk-0.1.0/yaab/eval/__init__.py +128 -0
- yaab_sdk-0.1.0/yaab/eval/adapters/__init__.py +4 -0
- yaab_sdk-0.1.0/yaab/eval/adapters/deepeval.py +74 -0
- yaab_sdk-0.1.0/yaab/eval/adapters/ragas.py +76 -0
- yaab_sdk-0.1.0/yaab/exceptions.py +98 -0
- yaab_sdk-0.1.0/yaab/extensions.py +127 -0
- yaab_sdk-0.1.0/yaab/governance/__init__.py +147 -0
- yaab_sdk-0.1.0/yaab/governance/approval.py +89 -0
- yaab_sdk-0.1.0/yaab/governance/audit.py +155 -0
- yaab_sdk-0.1.0/yaab/governance/authorization.py +223 -0
- yaab_sdk-0.1.0/yaab/governance/compliance/__init__.py +59 -0
- yaab_sdk-0.1.0/yaab/governance/compliance/base.py +88 -0
- yaab_sdk-0.1.0/yaab/governance/compliance/eu_ai_act.py +83 -0
- yaab_sdk-0.1.0/yaab/governance/compliance/iso_42001.py +49 -0
- yaab_sdk-0.1.0/yaab/governance/compliance/nist_ai_rmf.py +62 -0
- yaab_sdk-0.1.0/yaab/governance/compliance/soc2.py +47 -0
- yaab_sdk-0.1.0/yaab/governance/compliance/sr_11_7.py +90 -0
- yaab_sdk-0.1.0/yaab/governance/eval.py +391 -0
- yaab_sdk-0.1.0/yaab/governance/evalset.py +159 -0
- yaab_sdk-0.1.0/yaab/governance/guardrails/__init__.py +48 -0
- yaab_sdk-0.1.0/yaab/governance/guardrails/llm_guard.py +82 -0
- yaab_sdk-0.1.0/yaab/governance/guardrails/nemo.py +74 -0
- yaab_sdk-0.1.0/yaab/governance/guardrails/presidio.py +72 -0
- yaab_sdk-0.1.0/yaab/governance/lifecycle.py +142 -0
- yaab_sdk-0.1.0/yaab/governance/monitor.py +138 -0
- yaab_sdk-0.1.0/yaab/governance/policy.py +211 -0
- yaab_sdk-0.1.0/yaab/governance/registry.py +286 -0
- yaab_sdk-0.1.0/yaab/governance/service.py +118 -0
- yaab_sdk-0.1.0/yaab/governance/simulation.py +307 -0
- yaab_sdk-0.1.0/yaab/graph/__init__.py +53 -0
- yaab_sdk-0.1.0/yaab/graph/checkpoint.py +191 -0
- yaab_sdk-0.1.0/yaab/graph/state.py +431 -0
- yaab_sdk-0.1.0/yaab/limits.py +144 -0
- yaab_sdk-0.1.0/yaab/memory/__init__.py +155 -0
- yaab_sdk-0.1.0/yaab/memory/embedders.py +67 -0
- yaab_sdk-0.1.0/yaab/memory/extraction.py +119 -0
- yaab_sdk-0.1.0/yaab/memory/manager.py +194 -0
- yaab_sdk-0.1.0/yaab/models/__init__.py +33 -0
- yaab_sdk-0.1.0/yaab/models/base.py +75 -0
- yaab_sdk-0.1.0/yaab/models/instrumented.py +64 -0
- yaab_sdk-0.1.0/yaab/models/litellm_provider.py +341 -0
- yaab_sdk-0.1.0/yaab/models/resilient.py +139 -0
- yaab_sdk-0.1.0/yaab/models/router.py +194 -0
- yaab_sdk-0.1.0/yaab/models/test_model.py +154 -0
- yaab_sdk-0.1.0/yaab/multiagent.py +291 -0
- yaab_sdk-0.1.0/yaab/observability/__init__.py +113 -0
- yaab_sdk-0.1.0/yaab/observability/sinks.py +109 -0
- yaab_sdk-0.1.0/yaab/optimize/__init__.py +30 -0
- yaab_sdk-0.1.0/yaab/optimize/module.py +132 -0
- yaab_sdk-0.1.0/yaab/optimize/optimizer.py +296 -0
- yaab_sdk-0.1.0/yaab/optimize/signature.py +70 -0
- yaab_sdk-0.1.0/yaab/plugins/__init__.py +71 -0
- yaab_sdk-0.1.0/yaab/plugins/builtins.py +102 -0
- yaab_sdk-0.1.0/yaab/prompts.py +98 -0
- yaab_sdk-0.1.0/yaab/py.typed +0 -0
- yaab_sdk-0.1.0/yaab/rag/__init__.py +75 -0
- yaab_sdk-0.1.0/yaab/rag/chunking.py +116 -0
- yaab_sdk-0.1.0/yaab/rag/eval.py +84 -0
- yaab_sdk-0.1.0/yaab/rag/knowledge.py +168 -0
- yaab_sdk-0.1.0/yaab/rag/loaders.py +171 -0
- yaab_sdk-0.1.0/yaab/rag/memory_service.py +92 -0
- yaab_sdk-0.1.0/yaab/rag/rerank.py +133 -0
- yaab_sdk-0.1.0/yaab/rag/store.py +226 -0
- yaab_sdk-0.1.0/yaab/rag/stores_external.py +645 -0
- yaab_sdk-0.1.0/yaab/rag/types.py +62 -0
- yaab_sdk-0.1.0/yaab/runner.py +986 -0
- yaab_sdk-0.1.0/yaab/serve.py +372 -0
- yaab_sdk-0.1.0/yaab/sessions/__init__.py +56 -0
- yaab_sdk-0.1.0/yaab/sessions/base.py +38 -0
- yaab_sdk-0.1.0/yaab/sessions/manager.py +136 -0
- yaab_sdk-0.1.0/yaab/sessions/memory.py +33 -0
- yaab_sdk-0.1.0/yaab/sessions/postgres.py +80 -0
- yaab_sdk-0.1.0/yaab/sessions/redis.py +79 -0
- yaab_sdk-0.1.0/yaab/sessions/sqlite.py +58 -0
- yaab_sdk-0.1.0/yaab/skills.py +84 -0
- yaab_sdk-0.1.0/yaab/state.py +122 -0
- yaab_sdk-0.1.0/yaab/streaming.py +172 -0
- yaab_sdk-0.1.0/yaab/testing/__init__.py +8 -0
- yaab_sdk-0.1.0/yaab/tools/__init__.py +25 -0
- yaab_sdk-0.1.0/yaab/tools/agent_tool.py +52 -0
- yaab_sdk-0.1.0/yaab/tools/auth.py +212 -0
- yaab_sdk-0.1.0/yaab/tools/base.py +186 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/__init__.py +80 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/calculator.py +48 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/code.py +38 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/datetime_tool.py +19 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/files.py +122 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/grounding.py +59 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/http.py +30 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/search.py +123 -0
- yaab_sdk-0.1.0/yaab/tools/builtin/url_context.py +82 -0
- yaab_sdk-0.1.0/yaab/tools/mcp.py +62 -0
- yaab_sdk-0.1.0/yaab/tools/mcp_client.py +225 -0
- yaab_sdk-0.1.0/yaab/tools/mcp_server.py +252 -0
- yaab_sdk-0.1.0/yaab/tools/openapi.py +336 -0
- yaab_sdk-0.1.0/yaab/tools/sandbox.py +124 -0
- yaab_sdk-0.1.0/yaab/types.py +167 -0
- yaab_sdk-0.1.0/yaab/voice.py +383 -0
- yaab_sdk-0.1.0/yaab/web.py +383 -0
- yaab_sdk-0.1.0/yaab-core/Cargo.toml +27 -0
- yaab_sdk-0.1.0/yaab-core/LICENSE +21 -0
- yaab_sdk-0.1.0/yaab-core/README.md +18 -0
- yaab_sdk-0.1.0/yaab-core/pyproject.toml +21 -0
- yaab_sdk-0.1.0/yaab-core/src/actors.rs +41 -0
- yaab_sdk-0.1.0/yaab-core/src/channels.rs +94 -0
- yaab_sdk-0.1.0/yaab-core/src/checkpoint.rs +33 -0
- yaab_sdk-0.1.0/yaab-core/src/lib.rs +102 -0
- yaab_sdk-0.1.0/yaab-core/src/scheduler.rs +77 -0
- 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.
|
yaab_sdk-0.1.0/PKG-INFO
ADDED
|
@@ -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.
|