Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
8cc6ac0
fix(studio,tasks): make template agents chat, thread and run as tasks…
claude Sep 30, 2026
868755f
fix(optimize): accept every metric protocol everywhere; hold the test…
claude Sep 30, 2026
a39b603
feat(optimize): an anti-overfitting mechanism for prompt optimization
claude Sep 30, 2026
950baa3
fix(optimize): judge scores and metric aggregation mean what they say
claude Sep 30, 2026
7a46ae7
fix(optimize): data augmentation actually adds usable, leak-free rows
claude Sep 30, 2026
735f9c5
feat(optimize): fit reports show what changed and whether it helped
claude Sep 30, 2026
7d04c78
feat(examples): working prompt-optimization examples, low to high level
claude Sep 30, 2026
dcc74af
docs(optimization): a dedicated section covering the whole mechanism
claude Sep 30, 2026
8b45d7d
fix(studio): chat, debug, tasks, pipelines and feedback work with tem…
claude Sep 30, 2026
9b88a71
chore: sync uv.lock with the 1.14.0 project version
claude Sep 30, 2026
b5b60d1
chore(studio): ship the Studio UI 0.4.1 build from source
claude Sep 30, 2026
1428e2d
chore(studio): rebuild the Studio UI 0.4.1 bundle with patched depend…
claude Sep 30, 2026
54ce4a0
ci: keep pre-commit fixers off the synced Studio bundle
claude Sep 30, 2026
20eb8ae
fix(deps): upgrade locked anyio, PyJWT, urllib3 and virtualenv past a…
claude Sep 30, 2026
921a97d
chore: ignore ModelCheckpoint's default output directory
claude Sep 30, 2026
69e1636
ci(sync-studio): do not fail the sync when PR labels are missing
claude Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/sync-studio.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,10 @@ jobs:

---
*This PR was automatically created by the [sync-studio workflow](https://github.com/UnicoLab/agentomatic/actions/workflows/sync-studio.yml).*" \
--label "automated,studio-ui" \
--base main

echo "✅ Pull request created successfully"
# Labels are best-effort: a missing label must not fail the sync.
gh pr edit "${BRANCH}" --add-label "automated,studio-ui" \
|| echo "::warning::Could not add labels (create 'automated' and 'studio-ui')"
fi
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,6 @@ site/
# Poetry (legacy)
poetry.lock
inspiration/
examples/prompt_optimization/out/
# ModelCheckpoint default output (runtime artefacts, never committed)
optimization_results/checkpoints/
5 changes: 5 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# The Studio UI bundle is a build artifact synced from agentomatic-studio
# releases (sync-studio.yml). Whitespace fixers would rewrite its minified
# chunks, so the shipped files would no longer match the release tarball.
exclude: ^src/agentomatic/studio/static/

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
Expand Down
7 changes: 7 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ into the image/compose that drive the same `main.py`.
| `AGENTOMATIC_ENABLE_CONTROL_PLANE` / `AGENTOMATIC_CONTROL_TOKEN` | Control plane |
| `AGENTOMATIC_ENABLE_RATE_LIMIT` | Rate limiting |
| `AGENTOMATIC_LOGS_HISTORY` | Persist per-agent invoke/chat/stream history (default off) |
| `AGENTOMATIC_EPHEMERAL_THREADS` | With no store/DB configured, keep chat threads in a bounded in-memory store (default on; `0` disables — thread routes then answer 400) |
| `AGENTOMATIC_ALLOW_LOGSLLM_ANALYSIS` | Enable LLM analysis over those logs (default off) |
| `AGENTOMATIC_INGESTION_ROOT` | Confine ingestion source/output paths to this dir (default: cwd) |
| `AGENTOMATIC_TASK_EVENT_LOG` | Task-event replay backend: `memory` (default), `none` to disable, or a registered provider |
Expand Down Expand Up @@ -235,6 +236,12 @@ register_vector_store_adapter("my_db", MyDbStore) # upsert/query/delete
`"skipped: <reason>"`).
- Model defaults resolve provider-agnostically from `AGENTOMATIC_TASK_MODEL` /
`LLM__MODEL` before any local fallback.
- Data roles: **train** is what the optimizer learns from, **validation** selects
candidates, **holdout** only vetoes (no transfer / regression / widened gap),
**test** is never passed to the fitter — `agent.evaluate(data.test)` before and
after `fit()`. `generate_fit_report(history, baseline_eval=..., final_eval=...)`
shows the prompt diff, every candidate's decision and reason, and per-example
answers. Guide: `docs/optimization/`; runnable: `examples/prompt_optimization/`.

## Project conventions (match these when editing the framework)

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -764,7 +764,7 @@ Failure cluster 2:
agentomatic run

# 2. Prepare a labelled JSONL evaluation dataset (query + expected_answer).
# See docs/guide/optimization.md for the format and metric guidance.
# See docs/optimization/ for the format, metrics and anti-overfitting guidance.

# 3. Optimize a running agent with the current fitter CLI.
agentomatic optimize scope_agent \
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,7 @@ Now that your first agent is running, explore these resources:
| **[Deep Agent Integration](../guide/deep-agents.md)** | Register and debug Deep Agent workflows with full Studio support |
| **[Chat Interface](../guide/debug-ui.md)** | Chainlit-based conversational testing |
| **[Prompt Management](../guide/prompts.md)** | Template versioning, hot-reload, and A/B testing |
| **[Prompt Optimization](../guide/optimization.md)** | Auto-tune prompts with DSPy-inspired optimization |
| **[Prompt Optimization](../optimization/index.md)** | Auto-tune prompts with DSPy-inspired optimization |
| **[Storage Backends](../guide/storage.md)** | Configure PostgreSQL, SQLite, or custom adapters |
| **[Middleware](../guide/middleware.md)** | Auth, rate limiting, metrics, and custom middleware |
| **[Configuration](../guide/configuration.md)** | Platform settings, CORS, environment variables |
Expand Down
4 changes: 2 additions & 2 deletions docs/guide/class-agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -1163,7 +1163,7 @@ agents/my_agent/

Class scaffolds emit flat scripts (full abstraction):
`TrainCliSettings` / `EvalCliSettings` →
[`train_and_report`](optimization.md) / [`evaluate_and_report`](optimization.md).
[`train_and_report`](../optimization/class-agents.md#one-call-train_and_report) / [`evaluate_and_report`](../optimization/reports.md#evaluation-only-reports).
`train.py` also includes a **commented staged** path
(`compile_agent` → `fit_agent` → `evaluate_agent`) for full control —
same primitives under the hood.
Expand Down Expand Up @@ -1205,7 +1205,7 @@ agents/my_agent/
```

For the current in-process fitter API and explicit search spaces, see
[Prompt Optimization](optimization.md#modern-python-api-promptfitter).
[Low level: PromptFitter](../optimization/prompt-fitter.md).

??? example "Generated `dataset.jsonl`"

Expand Down
1 change: 1 addition & 0 deletions docs/guide/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ directory, host, port, and stack values passed to `agentomatic run`.
| `AGENTOMATIC_ENABLE_CONTROL_PLANE` / `AGENTOMATIC_CONTROL_TOKEN` | control plane | `true` / empty in generated `main.py`; `false` in CLI fallback | Mount control-plane routes and protect mutations |
| `AGENTOMATIC_ENABLE_RATE_LIMIT` / `AGENTOMATIC_RATE_LIMIT_TRUST_PROXY_HEADERS` | rate limiting | `false` / `false` | Enable the limiter; trust forwarded client IPs only behind a trusted proxy |
| `AGENTOMATIC_LOGS_HISTORY` / `DATABASE_URL` | invocation history / storage | `false` / empty | Persist logs and threads using an async SQLAlchemy URL |
| `AGENTOMATIC_EPHEMERAL_THREADS` | thread-store fallback | `true` | With no `store=`, MEMORY connection or database URL, keep conversation threads in a bounded in-memory store (1000 threads, lost on restart) so Studio chat and `/chat` history work out of the box. `0` disables it — thread routes then answer `400 Thread storage not configured` |
| `AGENTOMATIC_ARTIFACT_ROOT` | `artifact_root` | `.local/artifacts` | Versioned plugin/model artifact bundles |
| `AGENTOMATIC_PLUGIN_AUTORELOAD` | `plugin_autoreload` | `false` | Watch the promoted artifact version and reload plugins safely |
| `AGENTOMATIC_PLUGIN_AUTORELOAD_INTERVAL` | `plugin_autoreload_interval` | `5` | Seconds between artifact-pointer checks |
Expand Down
Loading
Loading