Skip to content

Releases: UnicoLab/agentomatic

v0.3.0

14 Jun 13:59

Choose a tag to compare

v0.3.0 (2026-06-14)

This release is published under the MIT License.

Features

  • Implement memory management, platform features, and router updates (5cf8aa8)

Detailed Changes: v0.2.0...v0.3.0

v0.2.0

14 Jun 07:49

Choose a tag to compare

v0.2.0 (2026-06-14)

This release is published under the MIT License.

Documentation

  • Add telemetry and feedback correlation notes for A/B testing (2c27a86)

Features

  • Implement advanced platform features (HITL, checkpointer, structured output, fork, A/B routing, fallbacks, hooks) and update documentation (c1a55c3)

  • Increase core test coverage over 85% and enhance homepage aesthetics (98f28f5)

Testing

  • Enhance unit test coverage for sqlalchemy store, sync checkpointers, and structured fallbacks (91ab042)

Detailed Changes: v0.1.1...v0.2.0

v0.1.1

13 Jun 20:29

Choose a tag to compare

v0.1.1 (2026-06-13)

This release is published under the MIT License.

Bug Fixes

  • Resolve import block sorting and unused typing imports (99c83ba)

  • ci: Force Node.js 24 runtime and disable PyPI attestations to remove warnings (275a233)

Documentation

  • Add detailed input and output schemas guide and improve custom schema extraction (4c5e079)

  • Expand agent structure, customization overrides, and platform settings references (5aa9956)

  • Overhaul documentation with detailed guides, visual diagrams, and logo accents (ef3de5a)

  • agnostic: Replace all remaining hr_bot references with project-agnostic placeholders (4f868d6)

  • prompts: Document versioned prompts and PromptManager usage (f0fe872)


Detailed Changes: v0.1.0...v0.1.1

v0.1.0

13 Jun 20:04

Choose a tag to compare

v0.1.0 (2026-06-13)

This release is published under the MIT License.

Bug Fixes

  • Add parallel-safe Annotated reducers to BaseAgentState (04ed6b8)

All state fields now use Annotated reducers for LangGraph parallel fan-out compatibility:

  • metadata: dict merge (last-writer-wins per key)
  • response/agent_type/routing_decision/error: last-writer-wins
  • suggestions/citations/steps_taken: list concatenation (operator.add)
  • messages: add_messages (existing)

This fixes 'Can receive only one value per step' errors when parallel graph branches write to the same state field.

  • ci: Fix codecov param on v7, add pr-title check filter, and import Callable (490583c)

  • ci: Fix semantic release token and upgrade deprecated Node.js 20 actions (7dfea0d)

  • release: Disable semantic-release build command and pypi upload (2b1c427)

Chores

  • Fix workflows, docker, setup-telemetry, and resolve all type/mypy errors for first release (54cd42d)

  • Run pre-commit quality gate autofix, add importlib.util, resolve mypy and formatting (1140c7b)

Documentation

  • Comprehensive v0.1.0 release documentation (06c34b1)

  • Create root CHANGELOG.md with detailed release notes

  • Update docs/changelog.md with full feature breakdown

  • Update docs/index.md with badges, expanded features, architecture diagram

  • Update docs/getting-started/installation.md with extras table, pip/uv/poetry tabs

  • Update docs/getting-started/quickstart.md with expected outputs, next steps

  • Update docs/cli/commands.md with click-style help for all 7 commands

  • Update docs/guide/optimization.md with all 7 strategies, GEval, per-agent pattern

  • Fix noqa WPS433 → F811 in optimize/report.py

  • Format cli/commands.py

  • mkdocs build --strict passes with 0 errors

  • Mkdocs Material + CI/CD + semantic release + pre-commit (2f672e8)

Documentation (MkDocs Material): - 16 documentation pages (getting-started, user guide, CLI, architecture) - mike versioning (dev/latest aliases) - Dark/light theme with deep purple accent - Mermaid diagrams, tabbed content, code copy

CI/CD (GitHub Actions): - ci.yml: lint (ruff), test (Python 3.11/3.12/3.13 matrix), typecheck (mypy) - release.yml: python-semantic-release + PyPI publish + GitHub Release - docs.yml: auto-deploy docs via mike on push/tag

Pre-commit: - trailing whitespace, end-of-file-fixer, check-yaml/toml/json - ruff lint + format - mypy type checking - conventional-pre-commit (commit message enforcement)

Author: UnicoLab - Updated pyproject.toml, LICENSE, README, all URLs - Added semantic-release config, coverage thresholds - Added docs and cli optional deps - Cleaned up 12 stale test files, removed conflicting pytest.ini - Enhanced Makefile with docs-serve, docs-build, docs-deploy, check-all

88/88 tests passing, docs build clean in strict mode

Features

  • Add Pixar logo, fix 130 lint errors, format all files (902072d)

  • Add assets/logo.png (Pixar-style 3D robot mascot)

  • Update README.md with centered logo

  • Fix 130 ruff lint errors (import sorting, unused imports, etc.)

  • Reformat 51 files with ruff format

  • All 161 tests pass, all linting clean

  • Verify CI workflows reference UnicoLab/agentomatic

  • Add PromptOptimizationLoop — local-first prompt optimizer (3b4143f)

Generic, framework-agnostic iterative prompt optimization engine:

  • PromptOptimizationLoop: evaluate → analyse failures → LLM rewrite → repeat

  • 4 rewrite strategies: iterative, adversarial, structured, minimal

  • Built-in scorers: keyword_overlap, contains_score

  • Pluggable scoring: sync or async (LLM-as-a-judge)

  • Pluggable rewrite LLM: any LangChain model or raw callable

  • Early stopping with patience

  • Rich HTML reports with SVG evolution charts

  • JSON experiment tracking for reproducibility

  • Zero project-specific deps — works with any agent

  • Complete framework with SQLAlchemy storage, full example, and integration tests (c358ed1)

New modules:

  • storage/models.py: SQLAlchemy ORM (ThreadModel, MessageModel, FeedbackModel)
  • storage/sqlalchemy.py: Async SQLAlchemyStore with connection pooling
  • examples/full_agent/: Full weather agent demonstrating ALL overwrite options
    (manifest, graph, nodes, config, schemas, tools, api, prompts, langgraph.json)

Fixes:

  • platform.py: Mount routers for programmatic agents at build-time
    (previously only mounted during lifespan, breaking TestClient)

Tests:

  • test_integration.py: 20 integration tests (platform + agent endpoints)

  • 41/41 tests passing (unit + integration)

  • Deep DeepEval + HolySheet integration (fc2dc44)

Metrics (metrics.py): - GEvalMetric — DeepEval GEval with custom criteria + eval_steps (chain-of-thought LLM-as-judge, Ollama fallback) - DeepEvalMetric — wrap ANY deepeval metric instance as BaseMetric - RedTeamMetric — adversarial safety scoring (bias+toxicity) - resolve_metrics() now supports 'geval:criteria' shorthand syntax - All DeepEval imports gracefully degrade via try/except

Reports (report.py): - HolySheet integration for interactive React dashboards - KPI cards (baseline, best, improvement, duration, iteration) - LineChart (score vs iteration per metric) - DataTable (full iteration history) - Markdown (prompt diffs via difflib) - Falls back to inline SVG/HTML if HolySheet not installed

Synthesizer (synthesizer.py): - generate_from_docs() — DeepEval Synthesizer.generate_goldens_from_docs() - red_team() — DeepEval RedTeamer with 40+ vulnerability scans - to_deepeval_dataset() / from_deepeval_dataset() — bidirectional bridge - Convenience: generate_from_docs(), red_team() at module level

Dependencies: - optimize extra: deepeval>=2.0, holysheet>=0.1

Tests: 139/139 passing | Docs: builds clean

  • Make skip_paths customizable in AuthMiddleware (acc6de2)

  • Optimization endpoints, feedback collection, OpenTelemetry (3dcfc8c)

API Endpoints: - POST /{agent}/optimize/invoke — full pipeline context (retrieval_context, tool_calls, reasoning, citations) for DeepEval metrics - POST /{agent}/feedback — async user feedback (thumbs, rating, correction) - GET /{agent}/feedback — list feedback entries - GET /{agent}/feedback/export — JSONL export for optimization datasets

Feedback System (middleware/feedback.py): - FeedbackCollector — async collector with in-memory buffer + BaseStore backend - @collect_feedback decorator — auto-record agent I/O for dataset building - Module-level singleton via get_collector()/set_collector() - Corrections feed back as expected_answers for optimization

OpenTelemetry (observability/telemetry.py): - setup_telemetry(app) — auto-configures from env vars - Auto-instruments FastAPI + httpx - @Traced decorator — creates spans for any sync/async function - OTLP exporter (gRPC → HTTP fallback) or ConsoleSpanExporter - Graceful no-op when opentelemetry not installed

Runner Context (optimize/runner.py): - RunResult now carries retrieval_context, tool_calls, reasoning, steps_taken - Auto-tries /optimize/invoke first, falls back to /invoke - submit_feedback() method for feeding optimization results back

Platform (core/platform.py): - enable_feedback=True (default) — auto-attaches feedback endpoints - enable_telemetry=True (default) — auto-configures OTEL on build()

Dependencies: - telemetry = [opentelemetry-api, opentelemetry-sdk, fastapi+httpx instrumentors] - all extra now includes telemetry

Tests: 161/161 passing | Docs: builds clean

  • Production-ready pluggable architecture (f096a9d)

Storage: - BaseStore ABC defining the universal storage protocol - MemoryStore and SQLAlchemyStore both inherit BaseStore - Users can implement RedisStore, MongoStore, etc. by subclassing - Platform accepts store= param with auto-init/close lifecycle

Middleware pipeline: - AuthMiddleware: API key auth via header/query param - RateLimitMiddleware: sliding-window per-IP rate limiter - MetricsMiddleware: Prometheus counters + histograms - All toggleable via platform constructor params - Custom middleware via middleware=[] param

Platform integration: - Storage wired into router_factory (threads, messages, feedback) - Health endpoint includes storage health check - /api/v1/storage/stats and /api/v1/feedback endpoints - Lifecycle hooks properly init/close storage

Tests: - 63/63 passing (21 unit + 42 integration) - Coverage: invoke, chat, stream, A2A, threads, lifecycle, middleware, storage, feedback, programmatic reg, custom routers

  • Prompt optimization engine with DSPy-inspired strategies (c12f00e)

Optimization Module (agentomatic.optimize): - PromptOptimizer — like model.fit() for prompts -...

Read more