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.
Files changed (102) hide show
  1. {agentomatic-0.5.0 → agentomatic-0.5.1}/PKG-INFO +1 -1
  2. {agentomatic-0.5.0 → agentomatic-0.5.1}/pyproject.toml +2 -1
  3. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/_version.py +1 -1
  4. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/memory_manager.py +1 -0
  5. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/router_factory.py +6 -4
  6. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/__init__.py +0 -1
  7. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/config.py +1 -2
  8. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/optimizer.py +1 -3
  9. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/langgraph.py +6 -6
  10. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_bugfixes_041.py +18 -11
  11. {agentomatic-0.5.0 → agentomatic-0.5.1}/LICENSE +0 -0
  12. {agentomatic-0.5.0 → agentomatic-0.5.1}/README.md +0 -0
  13. {agentomatic-0.5.0 → agentomatic-0.5.1}/examples/full_agent/README.md +0 -0
  14. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/__init__.py +0 -0
  15. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/cli/__init__.py +0 -0
  16. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/cli/commands.py +0 -0
  17. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/cli/templates.py +0 -0
  18. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/config/__init__.py +0 -0
  19. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/config/defaults.py +0 -0
  20. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/config/settings.py +0 -0
  21. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/__init__.py +0 -0
  22. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/lifespan.py +0 -0
  23. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/manifest.py +0 -0
  24. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/platform.py +0 -0
  25. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/registry.py +0 -0
  26. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/core/state.py +0 -0
  27. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/demo/__init__.py +0 -0
  28. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/demo/agent.py +0 -0
  29. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/demo/server.py +0 -0
  30. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/auth.py +0 -0
  31. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/feedback.py +0 -0
  32. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/logging.py +0 -0
  33. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/metrics.py +0 -0
  34. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/middleware/rate_limit.py +0 -0
  35. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/__init__.py +0 -0
  36. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/concurrency.py +0 -0
  37. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/metrics.py +0 -0
  38. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/observability/telemetry.py +0 -0
  39. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/__init__.py +0 -0
  40. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/dataset.py +0 -0
  41. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/deployment.py +0 -0
  42. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/eval_contract.py +0 -0
  43. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/failure_analysis.py +0 -0
  44. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/fitter.py +0 -0
  45. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/fitter_optimizers.py +0 -0
  46. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/judges.py +0 -0
  47. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/llm_caller.py +0 -0
  48. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/loop.py +0 -0
  49. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/metrics.py +0 -0
  50. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/report.py +0 -0
  51. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/runner.py +0 -0
  52. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/search_space.py +0 -0
  53. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/strategies.py +0 -0
  54. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/optimize/synthesizer.py +0 -0
  55. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/prompts/__init__.py +0 -0
  56. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/prompts/manager.py +0 -0
  57. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/protocols/__init__.py +0 -0
  58. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/protocols/decorators.py +0 -0
  59. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/providers/__init__.py +0 -0
  60. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/providers/embeddings.py +0 -0
  61. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/providers/llm.py +0 -0
  62. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/py.typed +0 -0
  63. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/__init__.py +0 -0
  64. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/base.py +0 -0
  65. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/checkpointer.py +0 -0
  66. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/memory.py +0 -0
  67. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/models.py +0 -0
  68. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/storage/sqlalchemy.py +0 -0
  69. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/__init__.py +0 -0
  70. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapter.py +0 -0
  71. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/__init__.py +0 -0
  72. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/generic.py +0 -0
  73. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/adapters/langchain.py +0 -0
  74. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/decorators.py +0 -0
  75. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/graph_inspector.py +0 -0
  76. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/models.py +0 -0
  77. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/router.py +0 -0
  78. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/run_tracker.py +0 -0
  79. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/serve.py +0 -0
  80. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/asset-manifest.json +0 -0
  81. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/graph_view.png +0 -0
  82. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/logo.png +0 -0
  83. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/main_screen.png +0 -0
  84. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/imgs/main_screen_ok.png +0 -0
  85. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/index.html +0 -0
  86. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/manifest.json +0 -0
  87. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/css/main.8b3c42dd.css +0 -0
  88. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/css/main.8b3c42dd.css.map +0 -0
  89. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js +0 -0
  90. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js.LICENSE.txt +0 -0
  91. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/studio/static/static/js/main.cbb2a8ee.js.map +0 -0
  92. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/ui/__init__.py +0 -0
  93. {agentomatic-0.5.0 → agentomatic-0.5.1}/src/agentomatic/ui/chat.py +0 -0
  94. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_agentomatic.py +0 -0
  95. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_cli.py +0 -0
  96. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_coverage_boost.py +0 -0
  97. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_deep_agent.py +0 -0
  98. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_fitter.py +0 -0
  99. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_integration.py +0 -0
  100. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_optimize.py +0 -0
  101. {agentomatic-0.5.0 → agentomatic-0.5.1}/tests/test_platform_features.py +0 -0
  102. {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.0
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.0"
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",
@@ -2,4 +2,4 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "0.5.0"
5
+ __version__ = "0.5.1"
@@ -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
- "role": msg.get("role", "user"),
646
- "content": msg.get("content", ""),
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)
@@ -33,4 +33,3 @@ def __getattr__(name: str) -> Any:
33
33
  mod = importlib.import_module(module_path, package=__name__)
34
34
  return getattr(mod, attr)
35
35
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
36
-
@@ -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
- 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
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 AsyncMock, MagicMock, patch
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(step=0, prompt="p1", avg_score=0.7, accuracy=0.8, results=[], elapsed=1.0),
424
- StepResult(step=1, prompt="p2", avg_score=0.85, accuracy=0.9, results=[], elapsed=1.0),
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, RegisteredAgent
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, RegisteredAgent
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 0.4.1."""
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__ == "0.4.1"
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__ == "0.4.1"
562
+ assert agentomatic.__version__ == __version__
556
563
 
557
564
 
558
565
  # =====================================================================
File without changes
File without changes