synth-optimizers 0.2.8.dev20260814__tar.gz → 0.2.11.dev20260816__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.
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/Cargo.lock +5 -5
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/Cargo.toml +1 -1
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/PKG-INFO +15 -5
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/README.md +14 -4
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/pyproject.toml +1 -1
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/lib.rs +50 -19
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/runtime.rs +31 -5
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/config.rs +4 -2
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/__init__.py +10 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/algorithms/20-proposer-and-policies.md +1 -1
- synth_optimizers-0.2.11.dev20260816/src/synth_optimizers/future_algorithms.py +39 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/hosted.py +20 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/Cargo.toml +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/README.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/openapi/gepa-service-v1.yaml +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/codex_app_server.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/jesterky_workflow.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/machines.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/pipeline.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/planner.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/prompting_best_practices.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_gepa/src/service.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/Cargo.toml +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/README.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/README.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/app_server.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/codex_home.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/daytona.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/docker.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/jsonrpc_read_window.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/limits.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/local.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/mod.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/nano.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/role_agent.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/session.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/substrate.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/supervisor.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/agent_runtime/usage.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/artifact_store.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/artifacts.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/cache.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/candidates.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/checkpoints.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/configured_limits.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/container_contract.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/data_models.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/disk_budget.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/error.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/event_visualization.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/events.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/evidence.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/failures.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/fsm.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/http.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/invariants.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/jesterky.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/jobs.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/levers.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/lib.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/limit_engine.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/limits.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/observability.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/operations.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/process.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/projections.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/prompt_program.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/registry.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/resources.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/rollouts.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/runtime_records.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/scores.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/sensors.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/state_machine.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/stopper.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/storage_maintenance.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/usage.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizer_platform/src/workspace.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizers_py/Cargo.toml +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizers_py/README.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/rust/crates/synth_optimizers_py/src/lib.rs +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/README.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/_synth_optimizers.pyi +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/board_server.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/cli.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/discovery.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gelo/00-index.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gelo/10-cli.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gelo/20-sdk.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gelo/30-hosted.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gelo/containers/00-overview.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gelo/containers/20-contract.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/00-index.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/10-cli.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/20-sdk.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/algorithms/00-overview.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/algorithms/10-pipeline-modes.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/assets/synth-logo.png +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/containers/00-overview.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/containers/10-catalog.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs/gepa/containers/20-contract.md +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/docs_server.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/eval_stats.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/gelo.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/gepa.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/hosted_config.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/o11y.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/observability.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/py.typed +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/sdk.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/tunnels.py +0 -0
- {synth_optimizers-0.2.8.dev20260814 → synth_optimizers-0.2.11.dev20260816}/src/synth_optimizers/victorialogs.py +0 -0
|
@@ -1306,7 +1306,7 @@ dependencies = [
|
|
|
1306
1306
|
|
|
1307
1307
|
[[package]]
|
|
1308
1308
|
name = "synth_gepa"
|
|
1309
|
-
version = "0.2.
|
|
1309
|
+
version = "0.2.9"
|
|
1310
1310
|
dependencies = [
|
|
1311
1311
|
"base64",
|
|
1312
1312
|
"fs2",
|
|
@@ -1321,7 +1321,7 @@ dependencies = [
|
|
|
1321
1321
|
|
|
1322
1322
|
[[package]]
|
|
1323
1323
|
name = "synth_mapo"
|
|
1324
|
-
version = "0.2.
|
|
1324
|
+
version = "0.2.9"
|
|
1325
1325
|
dependencies = [
|
|
1326
1326
|
"serde",
|
|
1327
1327
|
"serde_json",
|
|
@@ -1333,7 +1333,7 @@ dependencies = [
|
|
|
1333
1333
|
|
|
1334
1334
|
[[package]]
|
|
1335
1335
|
name = "synth_marl_promptopt"
|
|
1336
|
-
version = "0.2.
|
|
1336
|
+
version = "0.2.9"
|
|
1337
1337
|
dependencies = [
|
|
1338
1338
|
"clap",
|
|
1339
1339
|
"serde",
|
|
@@ -1347,7 +1347,7 @@ dependencies = [
|
|
|
1347
1347
|
|
|
1348
1348
|
[[package]]
|
|
1349
1349
|
name = "synth_optimizer_platform"
|
|
1350
|
-
version = "0.2.
|
|
1350
|
+
version = "0.2.9"
|
|
1351
1351
|
dependencies = [
|
|
1352
1352
|
"fs2",
|
|
1353
1353
|
"libc",
|
|
@@ -1364,7 +1364,7 @@ dependencies = [
|
|
|
1364
1364
|
|
|
1365
1365
|
[[package]]
|
|
1366
1366
|
name = "synth_optimizers_py"
|
|
1367
|
-
version = "0.2.
|
|
1367
|
+
version = "0.2.9"
|
|
1368
1368
|
dependencies = [
|
|
1369
1369
|
"pyo3",
|
|
1370
1370
|
"serde_json",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synth-optimizers
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.11.dev20260816
|
|
4
4
|
Requires-Dist: pydantic>=2.0.0
|
|
5
5
|
Requires-Dist: synth-containers==0.4.1.dev20260814
|
|
6
6
|
Requires-Dist: websocket-client>=1.8.0
|
|
@@ -43,12 +43,22 @@ contract.
|
|
|
43
43
|
| --- | --- | --- | --- |
|
|
44
44
|
| **GEPA** — reflective prompt evolution | Supported | [`rust/crates/synth_gepa/`](rust/crates/synth_gepa/) (Rust engine + service), [`src/synth_optimizers/gepa.py`](src/synth_optimizers/gepa.py) (Python API), [`skills/gepa/SKILL.md`](skills/gepa/SKILL.md) (agent runbook) | [Paper](https://arxiv.org/abs/2507.19457) · [gepa-ai docs](https://gepa-ai.github.io/gepa/) · bundled HTML via `gepa console` |
|
|
45
45
|
| **GELO** — Go-Explore in prompt space (hosted) | Hosted submit | [`src/synth_optimizers/gelo.py`](src/synth_optimizers/gelo.py), [`skills/gelo/SKILL.md`](skills/gelo/SKILL.md), [`GELO_HOSTED_SDK_CLI_SPEC.md`](GELO_HOSTED_SDK_CLI_SPEC.md) | Bundled HTML via `gelo console` — [`src/synth_optimizers/docs/gelo/`](src/synth_optimizers/docs/gelo/) |
|
|
46
|
+
| **SFT** — supervised fine-tuning (hosted) | Hosted submit | `HostedOptimizerClient.submit_sft()` / `submit_sft()` | Executed by the private Optimizers-beta runtime; the public client uses the shared hosted run API. |
|
|
46
47
|
|
|
47
48
|
The shared [`synth_optimizer_platform`](rust/crates/synth_optimizer_platform/)
|
|
48
49
|
crate is the substrate for optimizer implementations; GEPA is the first public
|
|
49
|
-
local algorithm; GELO
|
|
50
|
-
hosted optimizer infrastructure.
|
|
51
|
-
|
|
50
|
+
local algorithm; GELO and SFT are hosted-only in the public package and run on
|
|
51
|
+
Synth hosted optimizer infrastructure. Hosted GEPA, GELO, and SFT submission is
|
|
52
|
+
covered in [`docs/hosted-optimizers.md`](docs/hosted-optimizers.md).
|
|
53
|
+
|
|
54
|
+
## Future hosted-algorithm compatibility
|
|
55
|
+
|
|
56
|
+
MAPO, OHCO, Online Reflexion, and MARL prompt-optimization identifiers are retained
|
|
57
|
+
in [`future_algorithms.py`](src/synth_optimizers/future_algorithms.py) so clients can
|
|
58
|
+
parse hosted catalogs and historical runs. They are **not supported public optimizer
|
|
59
|
+
algorithms**: they carry no local executor, cookbook, or release commitment. New
|
|
60
|
+
public algorithms graduate into the table above only after their public API contract,
|
|
61
|
+
replay semantics, and end-to-end evidence are ready.
|
|
52
62
|
|
|
53
63
|
## Install
|
|
54
64
|
|
|
@@ -173,7 +183,7 @@ policy can stay on OpenAI. See [skills/gepa/SKILL.md](skills/gepa/SKILL.md) for
|
|
|
173
183
|
|
|
174
184
|
- **OpenAI API key proposer** — run-local Codex home; does not use your host `~/.codex` login.
|
|
175
185
|
- **OpenRouter proposer** — provider-aware Codex config and base URL; OpenRouter works for policy rollouts too.
|
|
176
|
-
- **ChatGPT subscription proposer** — `auth_mode = "chatgpt"` with required `codex_home` (OAuth via [Codex CLI](https://github.com/openai/codex) or [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth)); models include `gpt-5.4-mini`, `gpt-5.3-codex`, `gpt-5.3-codex-spark`, `gpt-5.5`; proposer usage is $0, policy rollouts still bill normally.
|
|
186
|
+
- **ChatGPT subscription proposer** — `auth_mode = "chatgpt"` with required `codex_home` (OAuth via [Codex CLI](https://github.com/openai/codex) or [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth)); models include `gpt-5.4-mini`, `gpt-5.4`, `gpt-5.3-codex`, `gpt-5.3-codex-spark`, `gpt-5.5`, `gpt-5.6-luna`, `gpt-5.6-sol`, and `gpt-5.6-terra`; proposer usage is $0, policy rollouts still bill normally.
|
|
177
187
|
- **Nano-Codex proposer harness** — explicit `[proposer.nano_codex]` opt-in keeps one ChatGPT-authenticated app-server session warm across compatible GEPA generations, caches static task/program context by content digest, records monotonic JSONL events and typed turn receipts, and can replay receipts with zero live model or tool calls. See [`dev_examples/nano_codex_gepa/`](dev_examples/nano_codex_gepa/).
|
|
178
188
|
- **Live usage** — `SYNTH_OPTIMIZERS_TERMINAL=1` prints running token and cost splits (`usage total=… policy=… proposer=…`).
|
|
179
189
|
- **Docker proposer** — `runtime_substrate = "docker"` with `[proposer.docker].image`; workspaces stage under `~/.cache/synth-gepa-docker-workspaces/`, sync back, then cleanup; image: `docker/codex-gepa-proposer/Dockerfile`.
|
|
@@ -21,12 +21,22 @@ contract.
|
|
|
21
21
|
| --- | --- | --- | --- |
|
|
22
22
|
| **GEPA** — reflective prompt evolution | Supported | [`rust/crates/synth_gepa/`](rust/crates/synth_gepa/) (Rust engine + service), [`src/synth_optimizers/gepa.py`](src/synth_optimizers/gepa.py) (Python API), [`skills/gepa/SKILL.md`](skills/gepa/SKILL.md) (agent runbook) | [Paper](https://arxiv.org/abs/2507.19457) · [gepa-ai docs](https://gepa-ai.github.io/gepa/) · bundled HTML via `gepa console` |
|
|
23
23
|
| **GELO** — Go-Explore in prompt space (hosted) | Hosted submit | [`src/synth_optimizers/gelo.py`](src/synth_optimizers/gelo.py), [`skills/gelo/SKILL.md`](skills/gelo/SKILL.md), [`GELO_HOSTED_SDK_CLI_SPEC.md`](GELO_HOSTED_SDK_CLI_SPEC.md) | Bundled HTML via `gelo console` — [`src/synth_optimizers/docs/gelo/`](src/synth_optimizers/docs/gelo/) |
|
|
24
|
+
| **SFT** — supervised fine-tuning (hosted) | Hosted submit | `HostedOptimizerClient.submit_sft()` / `submit_sft()` | Executed by the private Optimizers-beta runtime; the public client uses the shared hosted run API. |
|
|
24
25
|
|
|
25
26
|
The shared [`synth_optimizer_platform`](rust/crates/synth_optimizer_platform/)
|
|
26
27
|
crate is the substrate for optimizer implementations; GEPA is the first public
|
|
27
|
-
local algorithm; GELO
|
|
28
|
-
hosted optimizer infrastructure.
|
|
29
|
-
|
|
28
|
+
local algorithm; GELO and SFT are hosted-only in the public package and run on
|
|
29
|
+
Synth hosted optimizer infrastructure. Hosted GEPA, GELO, and SFT submission is
|
|
30
|
+
covered in [`docs/hosted-optimizers.md`](docs/hosted-optimizers.md).
|
|
31
|
+
|
|
32
|
+
## Future hosted-algorithm compatibility
|
|
33
|
+
|
|
34
|
+
MAPO, OHCO, Online Reflexion, and MARL prompt-optimization identifiers are retained
|
|
35
|
+
in [`future_algorithms.py`](src/synth_optimizers/future_algorithms.py) so clients can
|
|
36
|
+
parse hosted catalogs and historical runs. They are **not supported public optimizer
|
|
37
|
+
algorithms**: they carry no local executor, cookbook, or release commitment. New
|
|
38
|
+
public algorithms graduate into the table above only after their public API contract,
|
|
39
|
+
replay semantics, and end-to-end evidence are ready.
|
|
30
40
|
|
|
31
41
|
## Install
|
|
32
42
|
|
|
@@ -151,7 +161,7 @@ policy can stay on OpenAI. See [skills/gepa/SKILL.md](skills/gepa/SKILL.md) for
|
|
|
151
161
|
|
|
152
162
|
- **OpenAI API key proposer** — run-local Codex home; does not use your host `~/.codex` login.
|
|
153
163
|
- **OpenRouter proposer** — provider-aware Codex config and base URL; OpenRouter works for policy rollouts too.
|
|
154
|
-
- **ChatGPT subscription proposer** — `auth_mode = "chatgpt"` with required `codex_home` (OAuth via [Codex CLI](https://github.com/openai/codex) or [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth)); models include `gpt-5.4-mini`, `gpt-5.3-codex`, `gpt-5.3-codex-spark`, `gpt-5.5`; proposer usage is $0, policy rollouts still bill normally.
|
|
164
|
+
- **ChatGPT subscription proposer** — `auth_mode = "chatgpt"` with required `codex_home` (OAuth via [Codex CLI](https://github.com/openai/codex) or [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth)); models include `gpt-5.4-mini`, `gpt-5.4`, `gpt-5.3-codex`, `gpt-5.3-codex-spark`, `gpt-5.5`, `gpt-5.6-luna`, `gpt-5.6-sol`, and `gpt-5.6-terra`; proposer usage is $0, policy rollouts still bill normally.
|
|
155
165
|
- **Nano-Codex proposer harness** — explicit `[proposer.nano_codex]` opt-in keeps one ChatGPT-authenticated app-server session warm across compatible GEPA generations, caches static task/program context by content digest, records monotonic JSONL events and typed turn receipts, and can replay receipts with zero live model or tool calls. See [`dev_examples/nano_codex_gepa/`](dev_examples/nano_codex_gepa/).
|
|
156
166
|
- **Live usage** — `SYNTH_OPTIMIZERS_TERMINAL=1` prints running token and cost splits (`usage total=… policy=… proposer=…`).
|
|
157
167
|
- **Docker proposer** — `runtime_substrate = "docker"` with `[proposer.docker].image`; workspaces stage under `~/.cache/synth-gepa-docker-workspaces/`, sync back, then cleanup; image: `docker/codex-gepa-proposer/Dockerfile`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "synth-optimizers"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.11.dev20260816"
|
|
4
4
|
description = "Public Synth optimizer tooling with a Rust GEPA core."
|
|
5
5
|
authors = [{name = "Synth Laboratories", email = "josh@usesynth.ai"}]
|
|
6
6
|
readme = "README.md"
|
|
@@ -3799,7 +3799,7 @@ fn consume_async_lane_work(
|
|
|
3799
3799
|
| OptimizerJobStatus::Cancelled
|
|
3800
3800
|
| OptimizerJobStatus::Expired => {
|
|
3801
3801
|
if let Some(outcome) =
|
|
3802
|
-
|
|
3802
|
+
schedule_failed_runtime_retry_if_allowed(context, state, resources, &job)?
|
|
3803
3803
|
{
|
|
3804
3804
|
if let Some(updated) =
|
|
3805
3805
|
state.cursor.pipeline_state.lane_leases.get_mut(&lease_key)
|
|
@@ -6956,7 +6956,7 @@ fn advance_pending_runtime_job(
|
|
|
6956
6956
|
});
|
|
6957
6957
|
}
|
|
6958
6958
|
if updated_job.status.is_terminal() {
|
|
6959
|
-
if let Some(outcome) =
|
|
6959
|
+
if let Some(outcome) = schedule_failed_runtime_retry_if_allowed(
|
|
6960
6960
|
context,
|
|
6961
6961
|
state,
|
|
6962
6962
|
resources,
|
|
@@ -7078,7 +7078,7 @@ fn advance_pending_runtime_job(
|
|
|
7078
7078
|
| OptimizerJobStatus::Cancelled
|
|
7079
7079
|
| OptimizerJobStatus::Expired => {
|
|
7080
7080
|
if let Some(outcome) =
|
|
7081
|
-
|
|
7081
|
+
schedule_failed_runtime_retry_if_allowed(context, state, resources, &job)?
|
|
7082
7082
|
{
|
|
7083
7083
|
return Ok(outcome);
|
|
7084
7084
|
}
|
|
@@ -9354,14 +9354,16 @@ fn consume_failed_rollout_attempt(
|
|
|
9354
9354
|
Ok(())
|
|
9355
9355
|
}
|
|
9356
9356
|
|
|
9357
|
-
fn
|
|
9357
|
+
fn schedule_failed_runtime_retry_if_allowed(
|
|
9358
9358
|
context: &mut GepaRunContext,
|
|
9359
9359
|
state: &mut GepaRunState,
|
|
9360
9360
|
resources: &GepaStepResources,
|
|
9361
9361
|
job: &OptimizerJob,
|
|
9362
9362
|
) -> Result<Option<GepaAdvanceOutcome>> {
|
|
9363
|
-
if !matches!(
|
|
9364
|
-
|
|
9363
|
+
if !matches!(
|
|
9364
|
+
job.kind,
|
|
9365
|
+
OptimizerJobKind::Rollout | OptimizerJobKind::Proposer
|
|
9366
|
+
) || matches!(job.status, OptimizerJobStatus::Cancelled)
|
|
9365
9367
|
{
|
|
9366
9368
|
return Ok(None);
|
|
9367
9369
|
}
|
|
@@ -9391,7 +9393,7 @@ fn schedule_failed_rollout_retry_if_allowed(
|
|
|
9391
9393
|
resources,
|
|
9392
9394
|
state.cursor.phase.clone(),
|
|
9393
9395
|
"retry_scheduled",
|
|
9394
|
-
"scheduled GEPA failed
|
|
9396
|
+
"scheduled GEPA failed runtime job retry",
|
|
9395
9397
|
Map::new(),
|
|
9396
9398
|
)?;
|
|
9397
9399
|
Ok(Some(GepaAdvanceOutcome {
|
|
@@ -9399,8 +9401,9 @@ fn schedule_failed_rollout_retry_if_allowed(
|
|
|
9399
9401
|
terminal: false,
|
|
9400
9402
|
result: None,
|
|
9401
9403
|
message: format!(
|
|
9402
|
-
"scheduled GEPA failed
|
|
9404
|
+
"scheduled GEPA failed runtime job retry: {} kind={} attempt={}/{}",
|
|
9403
9405
|
updated.job_id,
|
|
9406
|
+
updated.kind.as_str(),
|
|
9404
9407
|
updated.attempt.saturating_add(1),
|
|
9405
9408
|
updated.retry_policy.max_attempts
|
|
9406
9409
|
),
|
|
@@ -20225,17 +20228,7 @@ fn record_runtime_effect_job(
|
|
|
20225
20228
|
let mut job = OptimizerJob::new(input.job_id, input.run_id, input.kind);
|
|
20226
20229
|
job.status = input.status;
|
|
20227
20230
|
job.candidate_id = input.candidate_id.map(str::to_string);
|
|
20228
|
-
|
|
20229
|
-
job.retry_policy = RetryPolicy {
|
|
20230
|
-
max_attempts: 3,
|
|
20231
|
-
backoff_seconds: 2,
|
|
20232
|
-
retryable_failure_types: vec![
|
|
20233
|
-
"synth_optimizer_http_error".to_string(),
|
|
20234
|
-
"synth_optimizer_container_error".to_string(),
|
|
20235
|
-
"synth_optimizer_failed".to_string(),
|
|
20236
|
-
],
|
|
20237
|
-
};
|
|
20238
|
-
}
|
|
20231
|
+
job.retry_policy = runtime_effect_retry_policy(&job.kind);
|
|
20239
20232
|
job.attempt = if matches!(job.status, OptimizerJobStatus::Pending) {
|
|
20240
20233
|
input.effect.attempt.saturating_sub(1)
|
|
20241
20234
|
} else {
|
|
@@ -20301,6 +20294,26 @@ fn record_runtime_effect_job(
|
|
|
20301
20294
|
workspace.record_optimizer_job(&job)
|
|
20302
20295
|
}
|
|
20303
20296
|
|
|
20297
|
+
fn runtime_effect_retry_policy(kind: &OptimizerJobKind) -> RetryPolicy {
|
|
20298
|
+
match kind {
|
|
20299
|
+
OptimizerJobKind::Rollout => RetryPolicy {
|
|
20300
|
+
max_attempts: 3,
|
|
20301
|
+
backoff_seconds: 2,
|
|
20302
|
+
retryable_failure_types: vec![
|
|
20303
|
+
"synth_optimizer_http_error".to_string(),
|
|
20304
|
+
"synth_optimizer_container_error".to_string(),
|
|
20305
|
+
"synth_optimizer_failed".to_string(),
|
|
20306
|
+
],
|
|
20307
|
+
},
|
|
20308
|
+
OptimizerJobKind::Proposer => RetryPolicy {
|
|
20309
|
+
max_attempts: 2,
|
|
20310
|
+
backoff_seconds: 2,
|
|
20311
|
+
retryable_failure_types: vec!["synth_optimizer_proposer_error".to_string()],
|
|
20312
|
+
},
|
|
20313
|
+
_ => RetryPolicy::default(),
|
|
20314
|
+
}
|
|
20315
|
+
}
|
|
20316
|
+
|
|
20304
20317
|
fn budget_exceeded_error(run_id: &str, breach: &BudgetLimitBreach) -> OptimizerError {
|
|
20305
20318
|
OptimizerError::BudgetExceeded {
|
|
20306
20319
|
run_id: run_id.to_string(),
|
|
@@ -21714,4 +21727,22 @@ mod run_loop_terminalization_tests {
|
|
|
21714
21727
|
None
|
|
21715
21728
|
);
|
|
21716
21729
|
}
|
|
21730
|
+
|
|
21731
|
+
#[test]
|
|
21732
|
+
fn proposer_runtime_jobs_get_one_bounded_retry() {
|
|
21733
|
+
let policy = runtime_effect_retry_policy(&OptimizerJobKind::Proposer);
|
|
21734
|
+
assert_eq!(policy.max_attempts, 2);
|
|
21735
|
+
assert_eq!(policy.backoff_seconds, 2);
|
|
21736
|
+
assert_eq!(
|
|
21737
|
+
policy.retryable_failure_types,
|
|
21738
|
+
vec!["synth_optimizer_proposer_error".to_string()]
|
|
21739
|
+
);
|
|
21740
|
+
}
|
|
21741
|
+
|
|
21742
|
+
#[test]
|
|
21743
|
+
fn unrelated_runtime_jobs_keep_the_fail_closed_default() {
|
|
21744
|
+
let policy = runtime_effect_retry_policy(&OptimizerJobKind::Annotation);
|
|
21745
|
+
assert_eq!(policy.max_attempts, 1);
|
|
21746
|
+
assert!(policy.retryable_failure_types.is_empty());
|
|
21747
|
+
}
|
|
21717
21748
|
}
|
|
@@ -468,7 +468,7 @@ impl<'a> GepaRuntimeExecutor<'a> {
|
|
|
468
468
|
Ok(outcome) => outcome,
|
|
469
469
|
Err(error) => {
|
|
470
470
|
if let Some(retry) =
|
|
471
|
-
self.
|
|
471
|
+
self.schedule_runtime_retry_if_allowed(&running_job, &lease_id, &error)?
|
|
472
472
|
{
|
|
473
473
|
return Err(retry);
|
|
474
474
|
}
|
|
@@ -528,14 +528,13 @@ impl<'a> GepaRuntimeExecutor<'a> {
|
|
|
528
528
|
Ok(outcome)
|
|
529
529
|
}
|
|
530
530
|
|
|
531
|
-
fn
|
|
531
|
+
fn schedule_runtime_retry_if_allowed(
|
|
532
532
|
&self,
|
|
533
533
|
job: &OptimizerJob,
|
|
534
534
|
lease_id: &str,
|
|
535
535
|
error: &OptimizerError,
|
|
536
536
|
) -> Result<Option<OptimizerError>> {
|
|
537
|
-
if !
|
|
538
|
-
|| !is_retryable_rollout_runtime_error(error)
|
|
537
|
+
if !is_retryable_runtime_job_error(job, error)
|
|
539
538
|
|| job.attempt >= job.retry_policy.max_attempts
|
|
540
539
|
{
|
|
541
540
|
return Ok(None);
|
|
@@ -556,8 +555,9 @@ impl<'a> GepaRuntimeExecutor<'a> {
|
|
|
556
555
|
return Ok(None);
|
|
557
556
|
};
|
|
558
557
|
Ok(Some(OptimizerError::Failed(format!(
|
|
559
|
-
"retryable
|
|
558
|
+
"retryable runtime failure scheduled for retry job_id={} kind={} attempt={}/{} next_retry_at={}",
|
|
560
559
|
updated.job_id,
|
|
560
|
+
updated.kind.as_str(),
|
|
561
561
|
updated.attempt.saturating_add(1),
|
|
562
562
|
updated.retry_policy.max_attempts,
|
|
563
563
|
updated.next_retry_at.unwrap_or_else(|| "now".to_string())
|
|
@@ -1097,6 +1097,32 @@ fn is_retryable_rollout_runtime_error(error: &OptimizerError) -> bool {
|
|
|
1097
1097
|
)
|
|
1098
1098
|
}
|
|
1099
1099
|
|
|
1100
|
+
fn is_retryable_runtime_job_error(job: &OptimizerJob, error: &OptimizerError) -> bool {
|
|
1101
|
+
match job.kind {
|
|
1102
|
+
OptimizerJobKind::Rollout => is_retryable_rollout_runtime_error(error),
|
|
1103
|
+
OptimizerJobKind::Proposer => matches!(error, OptimizerError::Proposer(_)),
|
|
1104
|
+
_ => false,
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
#[cfg(test)]
|
|
1109
|
+
mod runtime_job_retry_tests {
|
|
1110
|
+
use super::*;
|
|
1111
|
+
|
|
1112
|
+
#[test]
|
|
1113
|
+
fn proposer_errors_are_retryable_runtime_job_errors() {
|
|
1114
|
+
let job = OptimizerJob::new("proposer-job", "run", OptimizerJobKind::Proposer);
|
|
1115
|
+
assert!(is_retryable_runtime_job_error(
|
|
1116
|
+
&job,
|
|
1117
|
+
&OptimizerError::Proposer("app-server stalled".to_string())
|
|
1118
|
+
));
|
|
1119
|
+
assert!(!is_retryable_runtime_job_error(
|
|
1120
|
+
&job,
|
|
1121
|
+
&OptimizerError::Config("invalid proposer config".to_string())
|
|
1122
|
+
));
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1100
1126
|
fn dispatch_async_rollout(
|
|
1101
1127
|
client: &ContainerClient,
|
|
1102
1128
|
request: &Value,
|
|
@@ -1252,6 +1252,7 @@ pub const CHATGPT_PROPOSER_MODELS: &[&str] = &[
|
|
|
1252
1252
|
"gpt-5.5",
|
|
1253
1253
|
"gpt-5.6-luna",
|
|
1254
1254
|
"gpt-5.6-sol",
|
|
1255
|
+
"gpt-5.6-terra",
|
|
1255
1256
|
];
|
|
1256
1257
|
|
|
1257
1258
|
pub fn proposer_auth_mode_normalized(auth_mode: &str) -> String {
|
|
@@ -2895,8 +2896,8 @@ mod tests {
|
|
|
2895
2896
|
use super::*;
|
|
2896
2897
|
|
|
2897
2898
|
#[test]
|
|
2898
|
-
fn
|
|
2899
|
-
for model in ["gpt-5.6-luna", "gpt-5.6-sol"] {
|
|
2899
|
+
fn locked_5_6_chatgpt_proposers_are_allowed() {
|
|
2900
|
+
for model in ["gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-terra"] {
|
|
2900
2901
|
assert!(CHATGPT_PROPOSER_MODELS.contains(&model));
|
|
2901
2902
|
validate_chatgpt_proposer_model(model).expect("locked ChatGPT proposer model");
|
|
2902
2903
|
validate_chatgpt_proposer_model(&model.to_ascii_uppercase())
|
|
@@ -2911,6 +2912,7 @@ mod tests {
|
|
|
2911
2912
|
assert!(error.to_string().contains("not allowed"));
|
|
2912
2913
|
assert!(error.to_string().contains("gpt-5.6-luna"));
|
|
2913
2914
|
assert!(error.to_string().contains("gpt-5.6-sol"));
|
|
2915
|
+
assert!(error.to_string().contains("gpt-5.6-terra"));
|
|
2914
2916
|
}
|
|
2915
2917
|
|
|
2916
2918
|
#[test]
|
|
@@ -79,10 +79,16 @@ from .hosted import (
|
|
|
79
79
|
OptimizerStartupCatalog,
|
|
80
80
|
RunStatus as HostedRunStatus,
|
|
81
81
|
submit_mapo,
|
|
82
|
+
submit_sft,
|
|
82
83
|
submit_online_reflexion,
|
|
83
84
|
validate_online_reflexion_evidence_notes,
|
|
84
85
|
)
|
|
85
86
|
from .hosted_config import HostedOptimizerConfig
|
|
87
|
+
from .future_algorithms import (
|
|
88
|
+
FUTURE_HOSTED_ALGORITHMS,
|
|
89
|
+
FutureHostedAlgorithm,
|
|
90
|
+
FutureHostedAlgorithmSlug,
|
|
91
|
+
)
|
|
86
92
|
from .o11y import (
|
|
87
93
|
LiveProgress,
|
|
88
94
|
RegistryRecord,
|
|
@@ -220,6 +226,9 @@ __all__ = [
|
|
|
220
226
|
"HostedOptimizerClient",
|
|
221
227
|
"HostedOptimizerError",
|
|
222
228
|
"HostedOptimizerConfig",
|
|
229
|
+
"FUTURE_HOSTED_ALGORITHMS",
|
|
230
|
+
"FutureHostedAlgorithm",
|
|
231
|
+
"FutureHostedAlgorithmSlug",
|
|
223
232
|
"HostedRunStatus",
|
|
224
233
|
"InvariantError",
|
|
225
234
|
"InMemoryRunLog",
|
|
@@ -287,6 +296,7 @@ __all__ = [
|
|
|
287
296
|
"gepa_delete_run_storage",
|
|
288
297
|
"gepa_serve",
|
|
289
298
|
"submit_mapo",
|
|
299
|
+
"submit_sft",
|
|
290
300
|
"submit_online_reflexion",
|
|
291
301
|
"validate_online_reflexion_evidence_notes",
|
|
292
302
|
]
|
|
@@ -18,7 +18,7 @@ The proposer is a Codex app-server. Configure it under `[proposer]` (TOML) or
|
|
|
18
18
|
| `runtime_substrate` | `local` (host) or `docker` (`[proposer.docker].image`). |
|
|
19
19
|
| `provider` | `openai`, `openrouter`, `deepseek`. |
|
|
20
20
|
| `auth_mode` | `auto`, `api_key`, `chatgpt`, or `host`. |
|
|
21
|
-
| `model` | e.g. `gpt-5.4-
|
|
21
|
+
| `model` | e.g. `gpt-5.4-mini`, `gpt-5.5`, `gpt-5.6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`. |
|
|
22
22
|
| `reasoning_effort` | `none` / `low` / `medium` / `high`. |
|
|
23
23
|
| `execution_mode` | `local_process` / `stdio` (JSON-RPC over stdin/stdout) or `websocket` / `ws`. |
|
|
24
24
|
| `service_tier` | `default` or `fast` (Codex Fast mode; requires ChatGPT auth). |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""Compatibility identifiers for hosted algorithms not yet publicly supported.
|
|
2
|
+
|
|
3
|
+
These identifiers let the SDK parse a hosted catalog and preserve run history without
|
|
4
|
+
implying that the package provides a supported local executor, cookbook, or release
|
|
5
|
+
commitment. Promote an entry only when its public contract and end-to-end evidence
|
|
6
|
+
are ready.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from enum import StrEnum
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FutureHostedAlgorithmSlug(StrEnum):
|
|
16
|
+
MAPO = "mapo"
|
|
17
|
+
OHCO = "ohco"
|
|
18
|
+
ONLINE_REFLEXION = "online-reflexion"
|
|
19
|
+
MARL_PROMPTOPT = "marl-promptopt"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass(frozen=True, slots=True)
|
|
23
|
+
class FutureHostedAlgorithm:
|
|
24
|
+
slug: FutureHostedAlgorithmSlug
|
|
25
|
+
summary: str
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
FUTURE_HOSTED_ALGORITHMS: tuple[FutureHostedAlgorithm, ...] = (
|
|
29
|
+
FutureHostedAlgorithm(FutureHostedAlgorithmSlug.MAPO, "Private hosted compatibility lane."),
|
|
30
|
+
FutureHostedAlgorithm(FutureHostedAlgorithmSlug.OHCO, "Private hosted compatibility lane."),
|
|
31
|
+
FutureHostedAlgorithm(
|
|
32
|
+
FutureHostedAlgorithmSlug.ONLINE_REFLEXION,
|
|
33
|
+
"Gated hosted compatibility lane pending release evidence.",
|
|
34
|
+
),
|
|
35
|
+
FutureHostedAlgorithm(
|
|
36
|
+
FutureHostedAlgorithmSlug.MARL_PROMPTOPT,
|
|
37
|
+
"Research executable; not a public hosted product lane.",
|
|
38
|
+
),
|
|
39
|
+
)
|
|
@@ -85,6 +85,7 @@ _USAGE_REGISTRATION_TIMEOUT_SECONDS = 2.0
|
|
|
85
85
|
class OptimizerAlgorithmSlug(StrEnum):
|
|
86
86
|
GEPA = "gepa"
|
|
87
87
|
GELO = "go-ex"
|
|
88
|
+
SFT = "sft"
|
|
88
89
|
MAPO = "mapo"
|
|
89
90
|
OHCO = "ohco"
|
|
90
91
|
ONLINE_REFLEXION = "online-reflexion"
|
|
@@ -392,6 +393,14 @@ class HostedOptimizerClient:
|
|
|
392
393
|
) -> OptimizerRunSubmitResponse:
|
|
393
394
|
return self._submit(OptimizerAlgorithmSlug.GELO, config, **kwargs)
|
|
394
395
|
|
|
396
|
+
def submit_sft(
|
|
397
|
+
self,
|
|
398
|
+
config: Mapping[str, Any] | Any,
|
|
399
|
+
**kwargs: Any,
|
|
400
|
+
) -> OptimizerRunSubmitResponse:
|
|
401
|
+
"""Submit a hosted SFT run executed by the Optimizers-beta backend."""
|
|
402
|
+
return self._submit(OptimizerAlgorithmSlug.SFT, config, **kwargs)
|
|
403
|
+
|
|
395
404
|
def submit_mapo(
|
|
396
405
|
self,
|
|
397
406
|
config: Mapping[str, Any] | Any,
|
|
@@ -983,6 +992,17 @@ def submit_mapo(
|
|
|
983
992
|
return active_client.submit_mapo(config, **kwargs)
|
|
984
993
|
|
|
985
994
|
|
|
995
|
+
def submit_sft(
|
|
996
|
+
config: Mapping[str, Any] | Any,
|
|
997
|
+
*,
|
|
998
|
+
client: HostedOptimizerClient | None = None,
|
|
999
|
+
**kwargs: Any,
|
|
1000
|
+
) -> OptimizerRunSubmitResponse:
|
|
1001
|
+
"""Submit an SFT run through the public hosted Optimizers API."""
|
|
1002
|
+
active_client = client or HostedOptimizerClient()
|
|
1003
|
+
return active_client.submit_sft(config, **kwargs)
|
|
1004
|
+
|
|
1005
|
+
|
|
986
1006
|
def submit_online_reflexion(
|
|
987
1007
|
config: Mapping[str, Any] | Any,
|
|
988
1008
|
*,
|
|
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
|
|
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
|