agentomatic 0.5.1__tar.gz → 0.7.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.
- {agentomatic-0.5.1 → agentomatic-0.7.0}/PKG-INFO +100 -7
- {agentomatic-0.5.1 → agentomatic-0.7.0}/README.md +88 -6
- {agentomatic-0.5.1 → agentomatic-0.7.0}/pyproject.toml +15 -3
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/__init__.py +38 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/_version.py +1 -1
- agentomatic-0.7.0/src/agentomatic/agents/__init__.py +93 -0
- agentomatic-0.7.0/src/agentomatic/agents/base.py +737 -0
- agentomatic-0.7.0/src/agentomatic/agents/builder.py +232 -0
- agentomatic-0.7.0/src/agentomatic/agents/decorators.py +109 -0
- agentomatic-0.7.0/src/agentomatic/agents/graph.py +507 -0
- agentomatic-0.7.0/src/agentomatic/agents/metrics.py +202 -0
- agentomatic-0.7.0/src/agentomatic/agents/mixins/__init__.py +31 -0
- agentomatic-0.7.0/src/agentomatic/agents/mixins/dataset.py +74 -0
- agentomatic-0.7.0/src/agentomatic/agents/mixins/evaluation.py +150 -0
- agentomatic-0.7.0/src/agentomatic/agents/mixins/graph_execution.py +181 -0
- agentomatic-0.7.0/src/agentomatic/agents/mixins/observability.py +71 -0
- agentomatic-0.7.0/src/agentomatic/agents/mixins/optimization.py +131 -0
- agentomatic-0.7.0/src/agentomatic/agents/mixins/serialization.py +135 -0
- agentomatic-0.7.0/src/agentomatic/agents/optimizers.py +223 -0
- agentomatic-0.7.0/src/agentomatic/agents/types.py +399 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/cli/commands.py +533 -5
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/cli/templates.py +268 -49
- agentomatic-0.7.0/src/agentomatic/config/__init__.py +19 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/config/settings.py +45 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/__init__.py +2 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/manifest.py +14 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/platform.py +167 -1
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/registry.py +159 -2
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/router_factory.py +22 -1
- agentomatic-0.7.0/src/agentomatic/core/schemas.py +95 -0
- agentomatic-0.7.0/src/agentomatic/delegation/__init__.py +12 -0
- agentomatic-0.7.0/src/agentomatic/delegation/handoff.py +180 -0
- agentomatic-0.7.0/src/agentomatic/delegation/swarm.py +265 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/config.py +32 -0
- agentomatic-0.7.0/src/agentomatic/optimize/context.py +276 -0
- agentomatic-0.7.0/src/agentomatic/optimize/dashboard.py +562 -0
- agentomatic-0.7.0/src/agentomatic/optimize/events.py +248 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/fitter.py +207 -7
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/fitter_optimizers.py +195 -102
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/loop.py +148 -25
- agentomatic-0.7.0/src/agentomatic/optimize/progress.py +642 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/__init__.py +82 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/builder.py +572 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/context.py +228 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/engine.py +432 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/flow.py +585 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/loader.py +488 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/models.py +295 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/router.py +198 -0
- agentomatic-0.7.0/src/agentomatic/pipelines/steps.py +484 -0
- agentomatic-0.7.0/src/agentomatic/plugins/__init__.py +7 -0
- agentomatic-0.7.0/src/agentomatic/plugins/ml.py +78 -0
- agentomatic-0.7.0/src/agentomatic/plugins/registry.py +107 -0
- agentomatic-0.7.0/src/agentomatic/plugins/router.py +80 -0
- agentomatic-0.7.0/src/agentomatic/prompts/manager.py +131 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/providers/__init__.py +4 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/providers/llm.py +88 -3
- agentomatic-0.7.0/src/agentomatic/security/__init__.py +14 -0
- agentomatic-0.7.0/src/agentomatic/security/jwt_auth.py +176 -0
- agentomatic-0.7.0/src/agentomatic/security/policy.py +114 -0
- agentomatic-0.7.0/src/agentomatic/security/zero_trust.py +213 -0
- agentomatic-0.7.0/src/agentomatic/stacks/__init__.py +7 -0
- agentomatic-0.7.0/src/agentomatic/stacks/defaults.py +154 -0
- agentomatic-0.7.0/src/agentomatic/stacks/manager.py +431 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/adapters/__init__.py +8 -1
- agentomatic-0.7.0/src/agentomatic/studio/adapters/graph_agent.py +163 -0
- agentomatic-0.7.0/tests/test_agent_dataset.py +296 -0
- agentomatic-0.7.0/tests/test_agent_graph.py +506 -0
- agentomatic-0.7.0/tests/test_agent_graph_stream.py +63 -0
- agentomatic-0.7.0/tests/test_agent_metrics.py +170 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_agentomatic.py +27 -36
- agentomatic-0.7.0/tests/test_base_graph_agent.py +626 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_cli.py +33 -33
- agentomatic-0.7.0/tests/test_delegation.py +381 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_fitter.py +3 -3
- agentomatic-0.7.0/tests/test_flow.py +472 -0
- agentomatic-0.7.0/tests/test_optimizer_dashboard.py +64 -0
- agentomatic-0.7.0/tests/test_optimizer_events.py +65 -0
- agentomatic-0.7.0/tests/test_optimizer_progress.py +59 -0
- agentomatic-0.7.0/tests/test_pipelines.py +1068 -0
- agentomatic-0.7.0/tests/test_plugins.py +76 -0
- agentomatic-0.7.0/tests/test_security.py +460 -0
- agentomatic-0.7.0/tests/test_stacks.py +380 -0
- agentomatic-0.7.0/tests/test_v06_core.py +538 -0
- agentomatic-0.5.1/src/agentomatic/config/__init__.py +0 -3
- agentomatic-0.5.1/src/agentomatic/prompts/manager.py +0 -59
- {agentomatic-0.5.1 → agentomatic-0.7.0}/LICENSE +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/examples/full_agent/README.md +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/cli/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/config/defaults.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/lifespan.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/memory_manager.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/core/state.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/demo/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/demo/agent.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/demo/server.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/middleware/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/middleware/auth.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/middleware/feedback.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/middleware/logging.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/middleware/metrics.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/middleware/rate_limit.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/observability/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/observability/concurrency.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/observability/metrics.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/observability/telemetry.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/dataset.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/deployment.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/eval_contract.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/failure_analysis.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/judges.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/llm_caller.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/metrics.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/optimizer.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/report.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/runner.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/search_space.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/strategies.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/optimize/synthesizer.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/prompts/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/protocols/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/protocols/decorators.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/providers/embeddings.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/py.typed +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/storage/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/storage/base.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/storage/checkpointer.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/storage/memory.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/storage/models.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/storage/sqlalchemy.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/adapter.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/adapters/generic.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/adapters/langchain.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/adapters/langgraph.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/decorators.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/graph_inspector.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/models.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/router.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/run_tracker.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/serve.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/asset-manifest.json +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/imgs/graph_view.png +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/imgs/logo.png +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/imgs/main_screen.png +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/imgs/main_screen_ok.png +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/index.html +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/manifest.json +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/static/css/main.8b3c42dd.css +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/static/css/main.8b3c42dd.css.map +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js.LICENSE.txt +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js.map +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/ui/__init__.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/src/agentomatic/ui/chat.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_bugfixes_041.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_coverage_boost.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_deep_agent.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_integration.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_optimize.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_platform_features.py +0 -0
- {agentomatic-0.5.1 → agentomatic-0.7.0}/tests/test_studio.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentomatic
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: Drop agents, not code — zero-code multi-agent API platform framework
|
|
5
5
|
Project-URL: Homepage, https://github.com/UnicoLab/agentomatic
|
|
6
6
|
Project-URL: Documentation, https://unicolab.github.io/agentomatic
|
|
@@ -34,10 +34,12 @@ Requires-Dist: typing-extensions>=4.12
|
|
|
34
34
|
Requires-Dist: uvicorn[standard]>=0.32
|
|
35
35
|
Provides-Extra: all
|
|
36
36
|
Requires-Dist: aiosqlite>=0.20; extra == 'all'
|
|
37
|
+
Requires-Dist: cryptography>=42.0; extra == 'all'
|
|
37
38
|
Requires-Dist: deepeval>=2.0; extra == 'all'
|
|
38
39
|
Requires-Dist: holysheet>=0.1; extra == 'all'
|
|
39
40
|
Requires-Dist: langchain-core>=0.3; extra == 'all'
|
|
40
41
|
Requires-Dist: langchain-ollama>=0.2; extra == 'all'
|
|
42
|
+
Requires-Dist: langgraph-swarm>=0.1; extra == 'all'
|
|
41
43
|
Requires-Dist: langgraph>=0.4; extra == 'all'
|
|
42
44
|
Requires-Dist: ollama>=0.4; extra == 'all'
|
|
43
45
|
Requires-Dist: opentelemetry-api>=1.20; extra == 'all'
|
|
@@ -45,6 +47,8 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.40; extra == 'all'
|
|
|
45
47
|
Requires-Dist: opentelemetry-instrumentation-httpx>=0.40; extra == 'all'
|
|
46
48
|
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'all'
|
|
47
49
|
Requires-Dist: prometheus-client>=0.21; extra == 'all'
|
|
50
|
+
Requires-Dist: pyjwt[crypto]>=2.8; extra == 'all'
|
|
51
|
+
Requires-Dist: python-dotenv>=1.0; extra == 'all'
|
|
48
52
|
Requires-Dist: questionary>=2.0; extra == 'all'
|
|
49
53
|
Requires-Dist: rich>=13.0; extra == 'all'
|
|
50
54
|
Requires-Dist: sqlalchemy[asyncio]>=2.0; extra == 'all'
|
|
@@ -74,6 +78,8 @@ Provides-Extra: docs
|
|
|
74
78
|
Requires-Dist: mike>=2.1; extra == 'docs'
|
|
75
79
|
Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
|
|
76
80
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
81
|
+
Provides-Extra: dotenv
|
|
82
|
+
Requires-Dist: python-dotenv>=1.0; extra == 'dotenv'
|
|
77
83
|
Provides-Extra: langchain
|
|
78
84
|
Requires-Dist: langchain-community>=0.3; extra == 'langchain'
|
|
79
85
|
Requires-Dist: langchain-core>=0.3; extra == 'langchain'
|
|
@@ -91,7 +97,12 @@ Requires-Dist: langchain-openai>=0.3; extra == 'openai'
|
|
|
91
97
|
Provides-Extra: optimize
|
|
92
98
|
Requires-Dist: deepeval>=2.0; extra == 'optimize'
|
|
93
99
|
Requires-Dist: holysheet>=0.1; extra == 'optimize'
|
|
100
|
+
Provides-Extra: security
|
|
101
|
+
Requires-Dist: cryptography>=42.0; extra == 'security'
|
|
102
|
+
Requires-Dist: pyjwt[crypto]>=2.8; extra == 'security'
|
|
94
103
|
Provides-Extra: studio
|
|
104
|
+
Provides-Extra: swarm
|
|
105
|
+
Requires-Dist: langgraph-swarm>=0.1; extra == 'swarm'
|
|
95
106
|
Provides-Extra: telemetry
|
|
96
107
|
Requires-Dist: opentelemetry-api>=1.20; extra == 'telemetry'
|
|
97
108
|
Requires-Dist: opentelemetry-instrumentation-fastapi>=0.40; extra == 'telemetry'
|
|
@@ -138,7 +149,8 @@ Build, trace, optimize, and time-travel debug production-ready AI agent APIs in
|
|
|
138
149
|
| 🚀 **Rich API Surface** | Natively handles `invoke`, `stream`, `chat`, `A2A`, `health`, `config`, `threads`, `memory`, and `feedback`. |
|
|
139
150
|
| 🗄️ **Pluggable Storage** | Use `MemoryStore`, `SQLAlchemy`, or plug in your own custom persistence layer. |
|
|
140
151
|
| 🔐 **Enterprise Middleware** | High-performance pipeline with JWT Auth, dynamic rate limiting, and Prometheus telemetry — all toggleable. |
|
|
141
|
-
| 📦 **Scaffolding Templates** | Jumpstart development with
|
|
152
|
+
| 📦 **Scaffolding Templates** | Jumpstart development with 9 templates: `basic`, `full`, `rag`, `chatbot`, `deepagent`, `custom`, `swarm`, `pipeline`, `class`. |
|
|
153
|
+
| 🧬 **Class-Based Agents** | Define agents as Python classes with ML lifecycle: `compile()` → `fit()` → `evaluate()` → `transform()`. |
|
|
142
154
|
| 🤖 **A2A Protocol** | True Agent-to-Agent communication flows integrated out of the box. |
|
|
143
155
|
| 🔌 **Framework Agnostic** | Fully supports LangGraph, LangChain, or raw Python execution logic. |
|
|
144
156
|
| 🩺 **Beautiful CLI** | A rich terminal experience with commands like `doctor`, `inspect`, and `test`. |
|
|
@@ -216,13 +228,12 @@ curl -X POST http://localhost:8000/api/v1/my_agent/invoke \
|
|
|
216
228
|
|
|
217
229
|
## 📂 Agent Structure
|
|
218
230
|
|
|
219
|
-
Only `
|
|
231
|
+
Only `agent.py` is required. Everything else is optional overrides:
|
|
220
232
|
|
|
221
233
|
```
|
|
222
234
|
agents/my_agent/
|
|
223
|
-
├── __init__.py ←
|
|
224
|
-
├──
|
|
225
|
-
├── nodes.py ← Optional: node functions
|
|
235
|
+
├── __init__.py ← Optional: Python package init
|
|
236
|
+
├── agent.py ← REQUIRED: Contains your BaseGraphAgent subclass
|
|
226
237
|
├── config.py ← Optional: Pydantic config
|
|
227
238
|
├── schemas.py ← Optional: custom request/response models
|
|
228
239
|
├── tools.py ← Optional: LangChain tools
|
|
@@ -245,7 +256,11 @@ agentomatic init my_agent --template <template>
|
|
|
245
256
|
| `full` | 11 | All override files — config, schemas, api, tools |
|
|
246
257
|
| `rag` | 9 | Retrieve → Generate pipeline |
|
|
247
258
|
| `chatbot` | 8 | Conversational with memory |
|
|
259
|
+
| `deepagent` | 6 | Autonomous planning with sub-agents |
|
|
248
260
|
| `custom` | 4 | Framework-agnostic — no LangGraph |
|
|
261
|
+
| `swarm` | 10+ | Multi-agent delegation and handoffs |
|
|
262
|
+
| `pipeline` | 2 | Multi-agent workflow composition (YAML) |
|
|
263
|
+
| `class` | 4 | **NEW** Python class with ML lifecycle |
|
|
249
264
|
|
|
250
265
|
## 🖥️ CLI
|
|
251
266
|
|
|
@@ -263,6 +278,54 @@ agentomatic init my_agent --template <template>
|
|
|
263
278
|
doctor Environment health check
|
|
264
279
|
optimize <name> Run prompt optimization
|
|
265
280
|
ui Launch Chainlit debug UI standalone
|
|
281
|
+
pipeline Pipeline management commands
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## 🧬 Class-Based Agents (NEW)
|
|
285
|
+
|
|
286
|
+
Define agents as Python classes with LangGraph-style graph wiring and ML lifecycle:
|
|
287
|
+
|
|
288
|
+
```python
|
|
289
|
+
from dataclasses import dataclass, field
|
|
290
|
+
from agentomatic import BaseGraphAgent
|
|
291
|
+
|
|
292
|
+
@dataclass
|
|
293
|
+
class MyState:
|
|
294
|
+
query: str = ""
|
|
295
|
+
output: dict = field(default_factory=dict)
|
|
296
|
+
|
|
297
|
+
class MyAgent(BaseGraphAgent[MyState]):
|
|
298
|
+
agent_name = "my_agent"
|
|
299
|
+
|
|
300
|
+
def build_graph(self):
|
|
301
|
+
g = self.new_graph()
|
|
302
|
+
g.add_node("process", self.process)
|
|
303
|
+
g.add_node("format", self.format_out)
|
|
304
|
+
g.set_entry_point("process")
|
|
305
|
+
g.add_edge("process", "format")
|
|
306
|
+
g.set_finish_point("format")
|
|
307
|
+
return g.compile()
|
|
308
|
+
|
|
309
|
+
def process(self, state):
|
|
310
|
+
state.output = {"response": f"Hello! You asked: {state.query}"}
|
|
311
|
+
return state
|
|
312
|
+
|
|
313
|
+
def format_out(self, state):
|
|
314
|
+
return state
|
|
315
|
+
|
|
316
|
+
def input_to_state(self, data):
|
|
317
|
+
return MyState(query=data.get("query", ""))
|
|
318
|
+
|
|
319
|
+
def state_to_output(self, state):
|
|
320
|
+
return state.output
|
|
321
|
+
|
|
322
|
+
# ML-like workflow
|
|
323
|
+
agent = MyAgent()
|
|
324
|
+
result = agent.transform({"query": "Hello!"})
|
|
325
|
+
agent.compile(dataset, metrics)
|
|
326
|
+
agent.fit(dataset)
|
|
327
|
+
report = agent.evaluate(dataset.test, metrics)
|
|
328
|
+
agent.save("compiled/v1")
|
|
266
329
|
```
|
|
267
330
|
|
|
268
331
|
## 🎨 Agentomatic Studio
|
|
@@ -276,7 +339,7 @@ pip install "agentomatic[studio]"
|
|
|
276
339
|
agentomatic run --studio
|
|
277
340
|
```
|
|
278
341
|
|
|
279
|
-
The unified server will bind to `http://localhost:8000` and mount the studio at `http://localhost:8000/studio/ui/`.
|
|
342
|
+
The unified server will bind to `http://localhost:8000` and mount the studio at `http://localhost:8000/studio/ui/`.
|
|
280
343
|
|
|
281
344
|
**Key Studio Features**:
|
|
282
345
|
- **Live Node Streaming**: Watch Server-Sent Events (SSE) transition node activity dynamically.
|
|
@@ -284,6 +347,36 @@ The unified server will bind to `http://localhost:8000` and mount the studio at
|
|
|
284
347
|
- **Time-Travel History**: Rewind to any state checkpoint and replay from historical forks.
|
|
285
348
|
- **Live State Editing**: Mutate graph state payloads on the fly during a breakpoint pause.
|
|
286
349
|
|
|
350
|
+
## 🧠 ML Model Plugins (NEW)
|
|
351
|
+
|
|
352
|
+
Agentomatic isn't just for LLMs. Wrap classical ML models (Scikit-Learn, PyTorch, PyMC) securely with auto-generated REST endpoints:
|
|
353
|
+
|
|
354
|
+
```python
|
|
355
|
+
from agentomatic.plugins import BaseMLPlugin
|
|
356
|
+
from pydantic import BaseModel
|
|
357
|
+
|
|
358
|
+
class IrisInput(BaseModel):
|
|
359
|
+
sepal_length: float
|
|
360
|
+
sepal_width: float
|
|
361
|
+
petal_length: float
|
|
362
|
+
petal_width: float
|
|
363
|
+
|
|
364
|
+
class IrisPlugin(BaseMLPlugin[IrisInput, dict]):
|
|
365
|
+
async def load_model(self):
|
|
366
|
+
# Load sklearn model from disk
|
|
367
|
+
import joblib
|
|
368
|
+
self.model = joblib.load("iris_model.pkl")
|
|
369
|
+
|
|
370
|
+
async def predict(self, inputs: IrisInput) -> dict:
|
|
371
|
+
prediction = self.model.predict([[
|
|
372
|
+
inputs.sepal_length, inputs.sepal_width,
|
|
373
|
+
inputs.petal_length, inputs.petal_width
|
|
374
|
+
]])
|
|
375
|
+
return {"species": prediction[0]}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
Place it in `plugins/` and Agentomatic auto-discovers it alongside your AI agents!
|
|
379
|
+
|
|
287
380
|
## ⚙️ Configuration
|
|
288
381
|
|
|
289
382
|
```python
|
|
@@ -33,7 +33,8 @@ Build, trace, optimize, and time-travel debug production-ready AI agent APIs in
|
|
|
33
33
|
| 🚀 **Rich API Surface** | Natively handles `invoke`, `stream`, `chat`, `A2A`, `health`, `config`, `threads`, `memory`, and `feedback`. |
|
|
34
34
|
| 🗄️ **Pluggable Storage** | Use `MemoryStore`, `SQLAlchemy`, or plug in your own custom persistence layer. |
|
|
35
35
|
| 🔐 **Enterprise Middleware** | High-performance pipeline with JWT Auth, dynamic rate limiting, and Prometheus telemetry — all toggleable. |
|
|
36
|
-
| 📦 **Scaffolding Templates** | Jumpstart development with
|
|
36
|
+
| 📦 **Scaffolding Templates** | Jumpstart development with 9 templates: `basic`, `full`, `rag`, `chatbot`, `deepagent`, `custom`, `swarm`, `pipeline`, `class`. |
|
|
37
|
+
| 🧬 **Class-Based Agents** | Define agents as Python classes with ML lifecycle: `compile()` → `fit()` → `evaluate()` → `transform()`. |
|
|
37
38
|
| 🤖 **A2A Protocol** | True Agent-to-Agent communication flows integrated out of the box. |
|
|
38
39
|
| 🔌 **Framework Agnostic** | Fully supports LangGraph, LangChain, or raw Python execution logic. |
|
|
39
40
|
| 🩺 **Beautiful CLI** | A rich terminal experience with commands like `doctor`, `inspect`, and `test`. |
|
|
@@ -111,13 +112,12 @@ curl -X POST http://localhost:8000/api/v1/my_agent/invoke \
|
|
|
111
112
|
|
|
112
113
|
## 📂 Agent Structure
|
|
113
114
|
|
|
114
|
-
Only `
|
|
115
|
+
Only `agent.py` is required. Everything else is optional overrides:
|
|
115
116
|
|
|
116
117
|
```
|
|
117
118
|
agents/my_agent/
|
|
118
|
-
├── __init__.py ←
|
|
119
|
-
├──
|
|
120
|
-
├── nodes.py ← Optional: node functions
|
|
119
|
+
├── __init__.py ← Optional: Python package init
|
|
120
|
+
├── agent.py ← REQUIRED: Contains your BaseGraphAgent subclass
|
|
121
121
|
├── config.py ← Optional: Pydantic config
|
|
122
122
|
├── schemas.py ← Optional: custom request/response models
|
|
123
123
|
├── tools.py ← Optional: LangChain tools
|
|
@@ -140,7 +140,11 @@ agentomatic init my_agent --template <template>
|
|
|
140
140
|
| `full` | 11 | All override files — config, schemas, api, tools |
|
|
141
141
|
| `rag` | 9 | Retrieve → Generate pipeline |
|
|
142
142
|
| `chatbot` | 8 | Conversational with memory |
|
|
143
|
+
| `deepagent` | 6 | Autonomous planning with sub-agents |
|
|
143
144
|
| `custom` | 4 | Framework-agnostic — no LangGraph |
|
|
145
|
+
| `swarm` | 10+ | Multi-agent delegation and handoffs |
|
|
146
|
+
| `pipeline` | 2 | Multi-agent workflow composition (YAML) |
|
|
147
|
+
| `class` | 4 | **NEW** Python class with ML lifecycle |
|
|
144
148
|
|
|
145
149
|
## 🖥️ CLI
|
|
146
150
|
|
|
@@ -158,6 +162,54 @@ agentomatic init my_agent --template <template>
|
|
|
158
162
|
doctor Environment health check
|
|
159
163
|
optimize <name> Run prompt optimization
|
|
160
164
|
ui Launch Chainlit debug UI standalone
|
|
165
|
+
pipeline Pipeline management commands
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## 🧬 Class-Based Agents (NEW)
|
|
169
|
+
|
|
170
|
+
Define agents as Python classes with LangGraph-style graph wiring and ML lifecycle:
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
from dataclasses import dataclass, field
|
|
174
|
+
from agentomatic import BaseGraphAgent
|
|
175
|
+
|
|
176
|
+
@dataclass
|
|
177
|
+
class MyState:
|
|
178
|
+
query: str = ""
|
|
179
|
+
output: dict = field(default_factory=dict)
|
|
180
|
+
|
|
181
|
+
class MyAgent(BaseGraphAgent[MyState]):
|
|
182
|
+
agent_name = "my_agent"
|
|
183
|
+
|
|
184
|
+
def build_graph(self):
|
|
185
|
+
g = self.new_graph()
|
|
186
|
+
g.add_node("process", self.process)
|
|
187
|
+
g.add_node("format", self.format_out)
|
|
188
|
+
g.set_entry_point("process")
|
|
189
|
+
g.add_edge("process", "format")
|
|
190
|
+
g.set_finish_point("format")
|
|
191
|
+
return g.compile()
|
|
192
|
+
|
|
193
|
+
def process(self, state):
|
|
194
|
+
state.output = {"response": f"Hello! You asked: {state.query}"}
|
|
195
|
+
return state
|
|
196
|
+
|
|
197
|
+
def format_out(self, state):
|
|
198
|
+
return state
|
|
199
|
+
|
|
200
|
+
def input_to_state(self, data):
|
|
201
|
+
return MyState(query=data.get("query", ""))
|
|
202
|
+
|
|
203
|
+
def state_to_output(self, state):
|
|
204
|
+
return state.output
|
|
205
|
+
|
|
206
|
+
# ML-like workflow
|
|
207
|
+
agent = MyAgent()
|
|
208
|
+
result = agent.transform({"query": "Hello!"})
|
|
209
|
+
agent.compile(dataset, metrics)
|
|
210
|
+
agent.fit(dataset)
|
|
211
|
+
report = agent.evaluate(dataset.test, metrics)
|
|
212
|
+
agent.save("compiled/v1")
|
|
161
213
|
```
|
|
162
214
|
|
|
163
215
|
## 🎨 Agentomatic Studio
|
|
@@ -171,7 +223,7 @@ pip install "agentomatic[studio]"
|
|
|
171
223
|
agentomatic run --studio
|
|
172
224
|
```
|
|
173
225
|
|
|
174
|
-
The unified server will bind to `http://localhost:8000` and mount the studio at `http://localhost:8000/studio/ui/`.
|
|
226
|
+
The unified server will bind to `http://localhost:8000` and mount the studio at `http://localhost:8000/studio/ui/`.
|
|
175
227
|
|
|
176
228
|
**Key Studio Features**:
|
|
177
229
|
- **Live Node Streaming**: Watch Server-Sent Events (SSE) transition node activity dynamically.
|
|
@@ -179,6 +231,36 @@ The unified server will bind to `http://localhost:8000` and mount the studio at
|
|
|
179
231
|
- **Time-Travel History**: Rewind to any state checkpoint and replay from historical forks.
|
|
180
232
|
- **Live State Editing**: Mutate graph state payloads on the fly during a breakpoint pause.
|
|
181
233
|
|
|
234
|
+
## 🧠 ML Model Plugins (NEW)
|
|
235
|
+
|
|
236
|
+
Agentomatic isn't just for LLMs. Wrap classical ML models (Scikit-Learn, PyTorch, PyMC) securely with auto-generated REST endpoints:
|
|
237
|
+
|
|
238
|
+
```python
|
|
239
|
+
from agentomatic.plugins import BaseMLPlugin
|
|
240
|
+
from pydantic import BaseModel
|
|
241
|
+
|
|
242
|
+
class IrisInput(BaseModel):
|
|
243
|
+
sepal_length: float
|
|
244
|
+
sepal_width: float
|
|
245
|
+
petal_length: float
|
|
246
|
+
petal_width: float
|
|
247
|
+
|
|
248
|
+
class IrisPlugin(BaseMLPlugin[IrisInput, dict]):
|
|
249
|
+
async def load_model(self):
|
|
250
|
+
# Load sklearn model from disk
|
|
251
|
+
import joblib
|
|
252
|
+
self.model = joblib.load("iris_model.pkl")
|
|
253
|
+
|
|
254
|
+
async def predict(self, inputs: IrisInput) -> dict:
|
|
255
|
+
prediction = self.model.predict([[
|
|
256
|
+
inputs.sepal_length, inputs.sepal_width,
|
|
257
|
+
inputs.petal_length, inputs.petal_width
|
|
258
|
+
]])
|
|
259
|
+
return {"species": prediction[0]}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Place it in `plugins/` and Agentomatic auto-discovers it alongside your AI agents!
|
|
263
|
+
|
|
182
264
|
## ⚙️ Configuration
|
|
183
265
|
|
|
184
266
|
```python
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agentomatic"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.7.0"
|
|
4
4
|
description = "Drop agents, not code — zero-code multi-agent API platform framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "MIT"}
|
|
@@ -52,7 +52,10 @@ telemetry = [
|
|
|
52
52
|
"opentelemetry-instrumentation-fastapi>=0.40",
|
|
53
53
|
"opentelemetry-instrumentation-httpx>=0.40",
|
|
54
54
|
]
|
|
55
|
-
|
|
55
|
+
dotenv = ["python-dotenv>=1.0"]
|
|
56
|
+
security = ["pyjwt[crypto]>=2.8", "cryptography>=42.0"]
|
|
57
|
+
swarm = ["langgraph-swarm>=0.1"]
|
|
58
|
+
all = ["agentomatic[langgraph,ollama,metrics,db,cli,studio,optimize,telemetry,dotenv,security,swarm]"]
|
|
56
59
|
docs = [
|
|
57
60
|
"mkdocs-material>=9.5",
|
|
58
61
|
"mike>=2.1",
|
|
@@ -85,6 +88,8 @@ Changelog = "https://github.com/UnicoLab/agentomatic/blob/main/CHANGELOG.md"
|
|
|
85
88
|
|
|
86
89
|
|
|
87
90
|
|
|
91
|
+
|
|
92
|
+
|
|
88
93
|
[dependency-groups]
|
|
89
94
|
dev = [
|
|
90
95
|
"pytest>=8",
|
|
@@ -97,6 +102,8 @@ dev = [
|
|
|
97
102
|
"build>=1.0",
|
|
98
103
|
"twine>=6.0",
|
|
99
104
|
"python-semantic-release>=9.0",
|
|
105
|
+
"mike>=2.2.0",
|
|
106
|
+
"mkdocs-material>=9.7.6",
|
|
100
107
|
]
|
|
101
108
|
docs = [
|
|
102
109
|
"mkdocs-material>=9.5",
|
|
@@ -189,12 +196,18 @@ exclude_lines = [
|
|
|
189
196
|
# ---------------------------------------------------------------------------
|
|
190
197
|
[tool.mypy]
|
|
191
198
|
python_version = "3.11"
|
|
199
|
+
plugins = ["pydantic.mypy"]
|
|
192
200
|
warn_return_any = false
|
|
193
201
|
warn_unused_configs = true
|
|
194
202
|
check_untyped_defs = true
|
|
195
203
|
explicit_package_bases = true
|
|
196
204
|
mypy_path = "src"
|
|
197
205
|
|
|
206
|
+
[tool.pydantic-mypy]
|
|
207
|
+
init_forbid_extra = true
|
|
208
|
+
init_typed = true
|
|
209
|
+
warn_required_dynamic_aliases = true
|
|
210
|
+
|
|
198
211
|
# Pydantic models with Field(default=...) trigger false call-arg errors
|
|
199
212
|
[[tool.mypy.overrides]]
|
|
200
213
|
module = [
|
|
@@ -206,4 +219,3 @@ module = [
|
|
|
206
219
|
"agentomatic.optimize.*",
|
|
207
220
|
]
|
|
208
221
|
disable_error_code = ["call-arg", "override", "misc", "attr-defined"]
|
|
209
|
-
|
|
@@ -24,6 +24,13 @@ With storage::
|
|
|
24
24
|
enable_auth=True,
|
|
25
25
|
auth_api_key="secret",
|
|
26
26
|
)
|
|
27
|
+
|
|
28
|
+
With stacks (v0.6)::
|
|
29
|
+
|
|
30
|
+
from agentomatic import AgentPlatform
|
|
31
|
+
|
|
32
|
+
platform = AgentPlatform.from_folder("agents/", stack="local")
|
|
33
|
+
app = platform.build()
|
|
27
34
|
"""
|
|
28
35
|
|
|
29
36
|
from __future__ import annotations
|
|
@@ -36,6 +43,7 @@ from agentomatic.core.manifest import AgentManifest, RegisteredAgent
|
|
|
36
43
|
from agentomatic.core.memory_manager import ConversationMemoryManager
|
|
37
44
|
from agentomatic.core.platform import AgentPlatform
|
|
38
45
|
from agentomatic.core.registry import AgentRegistry
|
|
46
|
+
from agentomatic.core.schemas import SchemaValidator
|
|
39
47
|
from agentomatic.core.state import BaseAgentState
|
|
40
48
|
from agentomatic.prompts import PromptManager
|
|
41
49
|
|
|
@@ -45,6 +53,24 @@ from agentomatic.protocols.decorators import APIResponse, handle_api_errors, log
|
|
|
45
53
|
# Studio
|
|
46
54
|
from agentomatic.studio import GraphInspector, RunTracker
|
|
47
55
|
|
|
56
|
+
# Pipelines (lazy — avoids hard failure if yaml not installed)
|
|
57
|
+
try:
|
|
58
|
+
from agentomatic.pipelines import Pipeline, PipelineConfig, PipelineResult
|
|
59
|
+
except ImportError:
|
|
60
|
+
Pipeline = None # type: ignore[assignment,misc]
|
|
61
|
+
PipelineConfig = None # type: ignore[assignment,misc]
|
|
62
|
+
PipelineResult = None # type: ignore[assignment,misc]
|
|
63
|
+
|
|
64
|
+
# Class-owned graph agents (v0.7)
|
|
65
|
+
from agentomatic.agents import (
|
|
66
|
+
AgentDataset,
|
|
67
|
+
AgentExample,
|
|
68
|
+
AgentGraph,
|
|
69
|
+
BaseGraphAgent,
|
|
70
|
+
GraphBuilder,
|
|
71
|
+
agent_node,
|
|
72
|
+
)
|
|
73
|
+
|
|
48
74
|
__all__ = [
|
|
49
75
|
# Core
|
|
50
76
|
"AgentPlatform",
|
|
@@ -53,6 +79,7 @@ __all__ = [
|
|
|
53
79
|
"AgentRegistry",
|
|
54
80
|
"BaseAgentState",
|
|
55
81
|
"ConversationMemoryManager",
|
|
82
|
+
"SchemaValidator",
|
|
56
83
|
# Protocols
|
|
57
84
|
"APIResponse",
|
|
58
85
|
"handle_api_errors",
|
|
@@ -62,6 +89,17 @@ __all__ = [
|
|
|
62
89
|
# Studio
|
|
63
90
|
"GraphInspector",
|
|
64
91
|
"RunTracker",
|
|
92
|
+
# Pipelines
|
|
93
|
+
"Pipeline",
|
|
94
|
+
"PipelineConfig",
|
|
95
|
+
"PipelineResult",
|
|
96
|
+
# Class-owned graph agents (v0.7)
|
|
97
|
+
"BaseGraphAgent",
|
|
98
|
+
"AgentGraph",
|
|
99
|
+
"GraphBuilder",
|
|
100
|
+
"agent_node",
|
|
101
|
+
"AgentDataset",
|
|
102
|
+
"AgentExample",
|
|
65
103
|
# Version
|
|
66
104
|
"__version__",
|
|
67
105
|
]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""Class-owned graph agents — ML-like lifecycle for GenAI agents.
|
|
2
|
+
|
|
3
|
+
Define agents as Python classes with LangGraph-style graph wiring::
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from agentomatic.agents import BaseGraphAgent
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class MyState:
|
|
10
|
+
query: str = ""
|
|
11
|
+
response: str = ""
|
|
12
|
+
|
|
13
|
+
class MyAgent(BaseGraphAgent[MyState]):
|
|
14
|
+
agent_name = "my_agent"
|
|
15
|
+
|
|
16
|
+
def __init__(self, *, llm=None):
|
|
17
|
+
super().__init__()
|
|
18
|
+
self.llm = llm
|
|
19
|
+
|
|
20
|
+
def build_graph(self):
|
|
21
|
+
g = self.new_graph()
|
|
22
|
+
g.add_node("process", self.process)
|
|
23
|
+
g.set_entry_point("process")
|
|
24
|
+
g.set_finish_point("process")
|
|
25
|
+
return g.compile()
|
|
26
|
+
|
|
27
|
+
def process(self, state):
|
|
28
|
+
state.response = "hello"
|
|
29
|
+
return state
|
|
30
|
+
|
|
31
|
+
def input_to_state(self, data):
|
|
32
|
+
return MyState(query=data.get("query", ""))
|
|
33
|
+
|
|
34
|
+
def state_to_output(self, state):
|
|
35
|
+
return {"response": state.response}
|
|
36
|
+
|
|
37
|
+
# ML-like workflow
|
|
38
|
+
agent = MyAgent(llm=my_llm)
|
|
39
|
+
result = agent.transform({"query": "hello"})
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
from __future__ import annotations
|
|
43
|
+
|
|
44
|
+
from agentomatic.agents.base import BaseGraphAgent
|
|
45
|
+
from agentomatic.agents.builder import GraphBuilder
|
|
46
|
+
from agentomatic.agents.decorators import agent_node
|
|
47
|
+
from agentomatic.agents.graph import AgentGraph, GraphNode
|
|
48
|
+
from agentomatic.agents.metrics import (
|
|
49
|
+
CallableMetric,
|
|
50
|
+
ContainsTermsMetric,
|
|
51
|
+
ExactKeyMatchMetric,
|
|
52
|
+
OptimizeMetricAdapter,
|
|
53
|
+
)
|
|
54
|
+
from agentomatic.agents.optimizers import (
|
|
55
|
+
GridSearchOptimizer,
|
|
56
|
+
NoOpOptimizer,
|
|
57
|
+
PromptFitterBridge,
|
|
58
|
+
)
|
|
59
|
+
from agentomatic.agents.types import (
|
|
60
|
+
AgentDataset,
|
|
61
|
+
AgentExample,
|
|
62
|
+
EvaluationReport,
|
|
63
|
+
ExampleResult,
|
|
64
|
+
Metric,
|
|
65
|
+
Optimizer,
|
|
66
|
+
TraceEvent,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
__all__ = [
|
|
70
|
+
# Core
|
|
71
|
+
"BaseGraphAgent",
|
|
72
|
+
"AgentGraph",
|
|
73
|
+
"GraphNode",
|
|
74
|
+
"GraphBuilder",
|
|
75
|
+
"agent_node",
|
|
76
|
+
# Types
|
|
77
|
+
"AgentDataset",
|
|
78
|
+
"AgentExample",
|
|
79
|
+
"EvaluationReport",
|
|
80
|
+
"ExampleResult",
|
|
81
|
+
"Metric",
|
|
82
|
+
"Optimizer",
|
|
83
|
+
"TraceEvent",
|
|
84
|
+
# Metrics
|
|
85
|
+
"ExactKeyMatchMetric",
|
|
86
|
+
"ContainsTermsMetric",
|
|
87
|
+
"CallableMetric",
|
|
88
|
+
"OptimizeMetricAdapter",
|
|
89
|
+
# Optimizers
|
|
90
|
+
"NoOpOptimizer",
|
|
91
|
+
"GridSearchOptimizer",
|
|
92
|
+
"PromptFitterBridge",
|
|
93
|
+
]
|