agentomatic 0.5.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentomatic-0.5.0 → agentomatic-0.5.1}/PKG-INFO +1 -1
- {agentomatic-0.5.0 → agentomatic-0.5.1}/pyproject.toml +2 -1
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/_version.py +1 -1
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/memory_manager.py +1 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/router_factory.py +6 -4
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/__init__.py +0 -1
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/config.py +1 -2
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/optimizer.py +1 -3
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/langgraph.py +6 -6
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_bugfixes_041.py +18 -11
- {agentomatic-0.5.0 → agentomatic-0.5.1}/LICENSE +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/README.md +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/examples/full_agent/README.md +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/cli/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/cli/commands.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/cli/templates.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/config/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/config/defaults.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/config/settings.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/lifespan.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/manifest.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/platform.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/registry.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/state.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/demo/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/demo/agent.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/demo/server.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/auth.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/feedback.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/logging.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/metrics.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/rate_limit.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/concurrency.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/metrics.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/telemetry.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/dataset.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/deployment.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/eval_contract.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/failure_analysis.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/fitter.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/fitter_optimizers.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/judges.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/llm_caller.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/loop.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/metrics.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/report.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/runner.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/search_space.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/strategies.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/synthesizer.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/prompts/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/prompts/manager.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/protocols/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/protocols/decorators.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/providers/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/providers/embeddings.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/providers/llm.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/py.typed +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/base.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/checkpointer.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/memory.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/models.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/sqlalchemy.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapter.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/generic.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/langchain.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/decorators.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/graph_inspector.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/models.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/router.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/run_tracker.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/serve.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/asset-manifest.json +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/graph_view.png +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/logo.png +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/main_screen.png +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/main_screen_ok.png +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/index.html +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/manifest.json +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/css/main.8b3c42dd.css +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/css/main.8b3c42dd.css.map +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js.LICENSE.txt +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js.map +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/ui/__init__.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/ui/chat.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_agentomatic.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_cli.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_coverage_boost.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_deep_agent.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_fitter.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_integration.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_optimize.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_platform_features.py +0 -0
- {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_studio.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentomatic
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agentomatic"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.1"
|
|
4
4
|
description = "Drop agents, not code — zero-code multi-agent API platform framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "MIT"}
|
|
@@ -84,6 +84,7 @@ Changelog = "https://github.com/UnicoLab/agentomatic/blob/main/CHANGELOG.md"
|
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
|
|
87
|
+
|
|
87
88
|
[dependency-groups]
|
|
88
89
|
dev = [
|
|
89
90
|
"pytest>=8",
|
|
@@ -62,6 +62,7 @@ except ImportError:
|
|
|
62
62
|
def __init__(self, content: str = "", **kwargs: Any) -> None:
|
|
63
63
|
super().__init__(content=content, type="system", **kwargs)
|
|
64
64
|
|
|
65
|
+
|
|
65
66
|
# Default summary system prompt
|
|
66
67
|
_SUMMARY_SYSTEM_PROMPT = (
|
|
67
68
|
"You are a conversation summarizer. Condense the following conversation "
|
|
@@ -641,10 +641,12 @@ def create_default_router(
|
|
|
641
641
|
# langchain_core not installed — use plain dicts
|
|
642
642
|
lc_messages_plain: list[dict[str, str]] = []
|
|
643
643
|
for msg in request.messages:
|
|
644
|
-
lc_messages_plain.append(
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
644
|
+
lc_messages_plain.append(
|
|
645
|
+
{
|
|
646
|
+
"role": msg.get("role", "user"),
|
|
647
|
+
"content": msg.get("content", ""),
|
|
648
|
+
}
|
|
649
|
+
)
|
|
648
650
|
lc_messages_plain.append({"role": "user", "content": request.content})
|
|
649
651
|
state["messages"] = lc_messages_plain
|
|
650
652
|
history_loaded = len(request.messages)
|
|
@@ -469,8 +469,7 @@ class PromptFitResult:
|
|
|
469
469
|
|
|
470
470
|
json_path = out / "fit_result.json"
|
|
471
471
|
json_path.write_text(
|
|
472
|
-
json.dumps(self.to_dict(), indent=2, ensure_ascii=False, default=str)
|
|
473
|
-
+ "\n",
|
|
472
|
+
json.dumps(self.to_dict(), indent=2, ensure_ascii=False, default=str) + "\n",
|
|
474
473
|
encoding="utf-8",
|
|
475
474
|
)
|
|
476
475
|
logger.info("Saved fit result to {}", json_path.resolve())
|
|
@@ -314,9 +314,7 @@ class OptimizationResult:
|
|
|
314
314
|
|
|
315
315
|
# JSON results
|
|
316
316
|
json_path = out / "optimization_results.json"
|
|
317
|
-
json_path.write_text(
|
|
318
|
-
json.dumps(self.to_dict(), indent=2, ensure_ascii=False, default=str)
|
|
319
|
-
)
|
|
317
|
+
json_path.write_text(json.dumps(self.to_dict(), indent=2, ensure_ascii=False, default=str))
|
|
320
318
|
logger.info(f"📄 Results saved to {json_path}")
|
|
321
319
|
|
|
322
320
|
# HTML report
|
|
@@ -216,12 +216,12 @@ class LangGraphAdapter(StudioAdapter):
|
|
|
216
216
|
checkpointer = getattr(graph, "checkpointer", None)
|
|
217
217
|
if checkpointer is not None:
|
|
218
218
|
cfg = {"configurable": {"thread_id": thread_id, "checkpoint_ns": ""}}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
219
|
+
if hasattr(checkpointer, "aget_tuple"):
|
|
220
|
+
cp_tuple = await checkpointer.aget_tuple(cfg)
|
|
221
|
+
elif hasattr(checkpointer, "get_tuple"):
|
|
222
|
+
cp_tuple = checkpointer.get_tuple(cfg)
|
|
223
|
+
else:
|
|
224
|
+
cp_tuple = None
|
|
225
225
|
|
|
226
226
|
if cp_tuple:
|
|
227
227
|
state_data = cp_tuple.checkpoint or {}
|
|
@@ -17,16 +17,14 @@ Covers:
|
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
|
-
import asyncio
|
|
21
20
|
import json
|
|
22
21
|
import sys
|
|
23
22
|
import tempfile
|
|
24
23
|
from pathlib import Path
|
|
25
|
-
from unittest.mock import
|
|
24
|
+
from unittest.mock import MagicMock, patch
|
|
26
25
|
|
|
27
26
|
import pytest
|
|
28
27
|
|
|
29
|
-
|
|
30
28
|
# =====================================================================
|
|
31
29
|
# BUG 1: memory_manager.py — lazy langchain_core import
|
|
32
30
|
# =====================================================================
|
|
@@ -420,8 +418,12 @@ class TestLoopResultSave:
|
|
|
420
418
|
agent="loop_test",
|
|
421
419
|
experiment_id="loop123",
|
|
422
420
|
steps=[
|
|
423
|
-
StepResult(
|
|
424
|
-
|
|
421
|
+
StepResult(
|
|
422
|
+
step=0, prompt="p1", avg_score=0.7, accuracy=0.8, results=[], elapsed=1.0
|
|
423
|
+
),
|
|
424
|
+
StepResult(
|
|
425
|
+
step=1, prompt="p2", avg_score=0.85, accuracy=0.9, results=[], elapsed=1.0
|
|
426
|
+
),
|
|
425
427
|
],
|
|
426
428
|
best_step=1,
|
|
427
429
|
best_score=0.85,
|
|
@@ -448,7 +450,7 @@ class TestChatEndpointLangchainGuard:
|
|
|
448
450
|
|
|
449
451
|
def test_chat_endpoint_with_messages_no_crash(self):
|
|
450
452
|
"""Providing messages to /chat should not crash without langchain."""
|
|
451
|
-
from agentomatic.core.manifest import AgentManifest
|
|
453
|
+
from agentomatic.core.manifest import AgentManifest
|
|
452
454
|
from agentomatic.core.platform import AgentPlatform
|
|
453
455
|
|
|
454
456
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
@@ -496,7 +498,7 @@ class TestHistoryErrorMetadata:
|
|
|
496
498
|
|
|
497
499
|
def test_history_error_sets_metadata_flag(self):
|
|
498
500
|
"""Failed history load should set _history_error in state metadata."""
|
|
499
|
-
from agentomatic.core.manifest import AgentManifest
|
|
501
|
+
from agentomatic.core.manifest import AgentManifest
|
|
500
502
|
from agentomatic.core.platform import AgentPlatform
|
|
501
503
|
from agentomatic.storage.memory import MemoryStore
|
|
502
504
|
|
|
@@ -542,17 +544,22 @@ class TestHistoryErrorMetadata:
|
|
|
542
544
|
|
|
543
545
|
|
|
544
546
|
class TestVersion:
|
|
545
|
-
"""Version should be
|
|
547
|
+
"""Version should be a valid semver and consistent across modules."""
|
|
548
|
+
|
|
549
|
+
def test_version_is_valid_semver(self):
|
|
550
|
+
import re
|
|
546
551
|
|
|
547
|
-
def test_version_is_041(self):
|
|
548
552
|
from agentomatic._version import __version__
|
|
549
553
|
|
|
550
|
-
assert __version__
|
|
554
|
+
assert re.match(r"^\d+\.\d+\.\d+", __version__), (
|
|
555
|
+
f"Version {__version__!r} is not valid semver"
|
|
556
|
+
)
|
|
551
557
|
|
|
552
558
|
def test_version_matches_package(self):
|
|
553
559
|
import agentomatic
|
|
560
|
+
from agentomatic._version import __version__
|
|
554
561
|
|
|
555
|
-
assert agentomatic.__version__ ==
|
|
562
|
+
assert agentomatic.__version__ == __version__
|
|
556
563
|
|
|
557
564
|
|
|
558
565
|
# =====================================================================
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/main_screen_ok.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/css/main.8b3c42dd.css
RENAMED
|
File without changes
|
|
File without changes
|
{agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js
RENAMED
|
File without changes
|
|
File without changes
|
{agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|