synth-ai 0.2.8.dev2__py3-none-any.whl → 0.4.3__py3-none-any.whl
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_ai/__init__.py +44 -24
- synth_ai/__main__.py +30 -3
- synth_ai/cli/__init__.py +103 -48
- synth_ai/cli/__main__.py +42 -0
- synth_ai/cli/_internal/__init__.py +5 -0
- synth_ai/cli/_internal/modal_wrapper.py +31 -0
- synth_ai/cli/_internal/storage.py +20 -0
- synth_ai/cli/_internal/typer_patch.py +47 -0
- synth_ai/cli/_internal/validate_task_app.py +29 -0
- synth_ai/cli/agents/__init__.py +17 -0
- synth_ai/cli/agents/claude.py +77 -0
- synth_ai/cli/agents/codex.py +265 -0
- synth_ai/cli/agents/opencode.py +253 -0
- synth_ai/cli/commands/__init__.py +18 -0
- synth_ai/cli/commands/artifacts/__init__.py +13 -0
- synth_ai/cli/commands/artifacts/client.py +119 -0
- synth_ai/cli/commands/artifacts/config.py +57 -0
- synth_ai/cli/commands/artifacts/core.py +24 -0
- synth_ai/cli/commands/artifacts/download.py +188 -0
- synth_ai/cli/commands/artifacts/export.py +186 -0
- synth_ai/cli/commands/artifacts/list.py +156 -0
- synth_ai/cli/commands/artifacts/parsing.py +250 -0
- synth_ai/cli/commands/artifacts/show.py +336 -0
- synth_ai/cli/commands/demo/__init__.py +3 -0
- synth_ai/cli/commands/demo/core.py +153 -0
- synth_ai/cli/commands/eval/__init__.py +10 -0
- synth_ai/cli/commands/eval/config.py +338 -0
- synth_ai/cli/commands/eval/core.py +256 -0
- synth_ai/cli/commands/eval/runner.py +704 -0
- synth_ai/cli/commands/eval/validation.py +60 -0
- synth_ai/cli/commands/filter/__init__.py +12 -0
- synth_ai/cli/commands/filter/core.py +424 -0
- synth_ai/cli/commands/filter/errors.py +55 -0
- synth_ai/cli/commands/filter/validation.py +77 -0
- synth_ai/cli/commands/help/__init__.py +185 -0
- synth_ai/cli/commands/help/core.py +72 -0
- synth_ai/cli/commands/scan/__init__.py +19 -0
- synth_ai/cli/commands/scan/cloudflare_scanner.py +403 -0
- synth_ai/cli/commands/scan/core.py +344 -0
- synth_ai/cli/commands/scan/health_checker.py +242 -0
- synth_ai/cli/commands/scan/local_scanner.py +278 -0
- synth_ai/cli/commands/scan/models.py +83 -0
- synth_ai/cli/commands/smoke/__init__.py +7 -0
- synth_ai/cli/commands/smoke/core.py +1428 -0
- synth_ai/cli/commands/status/__init__.py +3 -0
- synth_ai/cli/commands/status/client.py +91 -0
- synth_ai/cli/commands/status/config.py +12 -0
- synth_ai/cli/commands/status/errors.py +11 -0
- synth_ai/cli/commands/status/subcommands/__init__.py +3 -0
- synth_ai/cli/commands/status/subcommands/config.py +13 -0
- synth_ai/cli/commands/status/subcommands/files.py +34 -0
- synth_ai/cli/commands/status/subcommands/jobs.py +51 -0
- synth_ai/cli/commands/status/subcommands/models.py +35 -0
- synth_ai/cli/commands/status/subcommands/runs.py +34 -0
- synth_ai/cli/commands/status/subcommands/session.py +77 -0
- synth_ai/cli/commands/status/subcommands/summary.py +39 -0
- synth_ai/cli/commands/status/subcommands/utils.py +41 -0
- synth_ai/cli/commands/status/utils.py +23 -0
- synth_ai/cli/commands/train/__init__.py +53 -0
- synth_ai/cli/commands/train/core.py +22 -0
- synth_ai/cli/commands/train/errors.py +117 -0
- synth_ai/cli/commands/train/judge_schemas.py +201 -0
- synth_ai/cli/commands/train/judge_validation.py +305 -0
- synth_ai/cli/commands/train/prompt_learning_validation.py +633 -0
- synth_ai/cli/commands/train/validation.py +392 -0
- synth_ai/cli/demo_apps/__init__.py +10 -0
- synth_ai/cli/demo_apps/core/__init__.py +28 -0
- synth_ai/{demos → cli/demo_apps}/core/cli.py +783 -441
- synth_ai/cli/demo_apps/crafter/__init__.py +1 -0
- synth_ai/cli/demo_apps/crafter/crafter_fft_4b.toml +55 -0
- synth_ai/cli/demo_apps/crafter/grpo_crafter_task_app.py +186 -0
- synth_ai/cli/demo_apps/crafter/rl_from_base_qwen4b.toml +74 -0
- synth_ai/cli/demo_apps/demo_registry.py +176 -0
- synth_ai/cli/demo_apps/demo_task_apps/__init__.py +7 -0
- synth_ai/{demos → cli/demo_apps}/demo_task_apps/core.py +75 -37
- synth_ai/cli/demo_apps/demo_task_apps/crafter/__init__.py +1 -0
- synth_ai/cli/demo_apps/demo_task_apps/crafter/configs/crafter_fft_4b.toml +53 -0
- synth_ai/cli/demo_apps/demo_task_apps/crafter/configs/rl_from_base_qwen4b.toml +73 -0
- synth_ai/cli/demo_apps/demo_task_apps/crafter/grpo_crafter_task_app.py +185 -0
- synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/_common.py +1 -2
- synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/app.py +2 -1
- synth_ai/cli/demo_apps/demo_task_apps/math/config.toml +73 -0
- synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/deploy_modal.py +3 -6
- synth_ai/cli/demo_apps/demo_task_apps/math/modal_task_app.py +738 -0
- synth_ai/cli/demo_apps/demo_task_apps/math/task_app_entry.py +39 -0
- synth_ai/cli/demo_apps/math/__init__.py +1 -0
- synth_ai/cli/demo_apps/math/_common.py +16 -0
- synth_ai/cli/demo_apps/math/app.py +38 -0
- synth_ai/cli/demo_apps/math/config.toml +75 -0
- synth_ai/cli/demo_apps/math/deploy_modal.py +54 -0
- synth_ai/cli/demo_apps/math/modal_task_app.py +698 -0
- synth_ai/cli/demo_apps/math/task_app_entry.py +53 -0
- synth_ai/cli/demo_apps/mipro/main.py +271 -0
- synth_ai/cli/demo_apps/mipro/task_app.py +922 -0
- synth_ai/cli/demo_apps/mipro/train_cfg.toml +92 -0
- synth_ai/cli/demos/__init__.py +12 -0
- synth_ai/cli/demos/demo.py +32 -0
- synth_ai/cli/demos/rl_demo.py +254 -0
- synth_ai/cli/deploy.py +216 -0
- synth_ai/cli/infra/__init__.py +14 -0
- synth_ai/cli/{balance.py → infra/balance.py} +16 -4
- synth_ai/cli/infra/mcp.py +35 -0
- synth_ai/cli/infra/modal_app.py +36 -0
- synth_ai/cli/infra/setup.py +69 -0
- synth_ai/cli/infra/status.py +16 -0
- synth_ai/cli/infra/turso.py +77 -0
- synth_ai/cli/lib/__init__.py +10 -0
- synth_ai/cli/lib/agents.py +76 -0
- synth_ai/cli/lib/apps/modal_app.py +101 -0
- synth_ai/cli/lib/apps/task_app.py +642 -0
- synth_ai/cli/lib/bin.py +39 -0
- synth_ai/cli/lib/env.py +375 -0
- synth_ai/cli/lib/errors.py +85 -0
- synth_ai/cli/lib/modal.py +315 -0
- synth_ai/cli/lib/plotting.py +126 -0
- synth_ai/cli/lib/prompt_args.py +39 -0
- synth_ai/cli/lib/prompts.py +284 -0
- synth_ai/cli/lib/sqld.py +122 -0
- synth_ai/cli/lib/task_app_discovery.py +884 -0
- synth_ai/cli/lib/task_app_env.py +295 -0
- synth_ai/cli/lib/train_cfgs.py +300 -0
- synth_ai/cli/lib/tunnel_records.py +207 -0
- synth_ai/cli/local/__init__.py +14 -0
- synth_ai/cli/local/experiment_queue/__init__.py +72 -0
- synth_ai/cli/local/experiment_queue/api_schemas.py +221 -0
- synth_ai/cli/local/experiment_queue/celery_app.py +208 -0
- synth_ai/cli/local/experiment_queue/config.py +128 -0
- synth_ai/cli/local/experiment_queue/config_utils.py +272 -0
- synth_ai/cli/local/experiment_queue/database.py +175 -0
- synth_ai/cli/local/experiment_queue/dispatcher.py +119 -0
- synth_ai/cli/local/experiment_queue/models.py +231 -0
- synth_ai/cli/local/experiment_queue/progress_info.py +160 -0
- synth_ai/cli/local/experiment_queue/results.py +373 -0
- synth_ai/cli/local/experiment_queue/schemas.py +131 -0
- synth_ai/cli/local/experiment_queue/service.py +344 -0
- synth_ai/cli/local/experiment_queue/status.py +372 -0
- synth_ai/cli/local/experiment_queue/status_tracker.py +360 -0
- synth_ai/cli/local/experiment_queue/tasks.py +1984 -0
- synth_ai/cli/local/experiment_queue/trace_storage.py +65 -0
- synth_ai/cli/local/experiment_queue/validation.py +157 -0
- synth_ai/cli/local/session/__init__.py +92 -0
- synth_ai/cli/local/session/client.py +383 -0
- synth_ai/cli/local/session/constants.py +63 -0
- synth_ai/cli/local/session/exceptions.py +105 -0
- synth_ai/cli/local/session/manager.py +139 -0
- synth_ai/cli/local/session/models.py +89 -0
- synth_ai/cli/local/session/query.py +110 -0
- synth_ai/cli/root.py +150 -108
- synth_ai/cli/task_apps/__init__.py +37 -0
- synth_ai/cli/task_apps/commands.py +3145 -0
- synth_ai/cli/task_apps/deploy.py +7 -0
- synth_ai/cli/task_apps/list.py +26 -0
- synth_ai/cli/task_apps/main.py +36 -0
- synth_ai/cli/task_apps/modal_serve.py +11 -0
- synth_ai/cli/task_apps/serve.py +11 -0
- synth_ai/cli/training/__init__.py +8 -0
- synth_ai/cli/training/train.py +5 -0
- synth_ai/cli/training/train_cfg.py +34 -0
- synth_ai/cli/{watch.py → training/watch.py} +13 -18
- synth_ai/cli/turso.py +52 -0
- synth_ai/cli/utils/__init__.py +8 -0
- synth_ai/cli/utils/experiments.py +235 -0
- synth_ai/cli/utils/queue.py +504 -0
- synth_ai/cli/{recent.py → utils/recent.py} +13 -7
- synth_ai/cli/{traces.py → utils/traces.py} +9 -5
- synth_ai/contracts/__init__.py +67 -0
- synth_ai/core/__init__.py +100 -0
- synth_ai/core/_utils/__init__.py +54 -0
- synth_ai/core/_utils/base_url.py +10 -0
- synth_ai/core/_utils/http.py +10 -0
- synth_ai/core/_utils/prompts.py +14 -0
- synth_ai/core/_utils/task_app_state.py +12 -0
- synth_ai/core/_utils/user_config.py +10 -0
- synth_ai/core/apps/common.py +116 -0
- synth_ai/core/auth.py +95 -0
- synth_ai/core/cfgs.py +240 -0
- synth_ai/core/config/__init__.py +16 -0
- synth_ai/core/config/base.py +168 -0
- synth_ai/core/config/resolver.py +89 -0
- synth_ai/core/env.py +231 -0
- synth_ai/core/errors.py +126 -0
- synth_ai/core/http.py +230 -0
- synth_ai/core/integrations/__init__.py +11 -0
- synth_ai/core/integrations/cloudflare.py +1710 -0
- synth_ai/core/integrations/mcp/__init__.py +6 -0
- synth_ai/core/integrations/mcp/__main__.py +8 -0
- synth_ai/core/integrations/mcp/claude.py +36 -0
- synth_ai/core/integrations/mcp/main.py +254 -0
- synth_ai/core/integrations/mcp/setup.py +100 -0
- synth_ai/core/integrations/modal.py +277 -0
- synth_ai/core/json.py +72 -0
- synth_ai/core/log_filter.py +99 -0
- synth_ai/core/logging.py +82 -0
- synth_ai/core/paths.py +107 -0
- synth_ai/core/pricing.py +109 -0
- synth_ai/core/process.py +233 -0
- synth_ai/core/ssl.py +25 -0
- synth_ai/core/storage/__init__.py +71 -0
- synth_ai/core/task_app_state.py +318 -0
- synth_ai/core/telemetry.py +282 -0
- synth_ai/{tracing_v3 → core/tracing_v3}/__init__.py +5 -1
- synth_ai/{tracing_v3 → core/tracing_v3}/abstractions.py +21 -4
- synth_ai/core/tracing_v3/config.py +229 -0
- synth_ai/core/tracing_v3/constants.py +21 -0
- synth_ai/{tracing_v3 → core/tracing_v3}/db_config.py +42 -29
- synth_ai/{tracing_v3 → core/tracing_v3}/decorators.py +80 -45
- synth_ai/{tracing_v3 → core/tracing_v3}/examples/basic_usage.py +15 -9
- synth_ai/{tracing_v3 → core/tracing_v3}/hooks.py +6 -4
- synth_ai/{tracing_v3 → core/tracing_v3}/llm_call_record_helpers.py +161 -61
- synth_ai/{tracing_v3 → core/tracing_v3}/migration_helper.py +1 -2
- synth_ai/{tracing_v3 → core/tracing_v3}/replica_sync.py +12 -7
- synth_ai/core/tracing_v3/serialization.py +130 -0
- synth_ai/{tracing_v3 → core/tracing_v3}/session_tracer.py +88 -21
- synth_ai/{tracing_v3 → core/tracing_v3}/storage/base.py +99 -12
- synth_ai/core/tracing_v3/storage/config.py +109 -0
- synth_ai/{tracing_v3 → core/tracing_v3}/storage/factory.py +11 -9
- synth_ai/{tracing_v3 → core/tracing_v3}/storage/utils.py +15 -11
- synth_ai/core/tracing_v3/trace_utils.py +326 -0
- synth_ai/core/tracing_v3/turso/__init__.py +12 -0
- synth_ai/core/tracing_v3/turso/daemon.py +278 -0
- synth_ai/{tracing_v3 → core/tracing_v3}/turso/models.py +7 -3
- synth_ai/core/tracing_v3/turso/native_manager.py +1385 -0
- synth_ai/{tracing_v3 → core/tracing_v3}/utils.py +5 -4
- synth_ai/core/urls.py +18 -0
- synth_ai/core/user_config.py +137 -0
- synth_ai/core/uvicorn.py +222 -0
- synth_ai/data/__init__.py +83 -0
- synth_ai/data/enums.py +123 -0
- synth_ai/data/rewards.py +152 -0
- synth_ai/data/traces.py +35 -0
- synth_ai/products/__init__.py +6 -0
- synth_ai/products/graph_evolve/__init__.py +46 -0
- synth_ai/products/graph_evolve/client.py +226 -0
- synth_ai/products/graph_evolve/config.py +591 -0
- synth_ai/products/graph_evolve/converters/__init__.py +42 -0
- synth_ai/products/graph_evolve/converters/openai_sft.py +484 -0
- synth_ai/products/graph_evolve/examples/hotpotqa/config.toml +109 -0
- synth_ai/products/graph_evolve/run.py +222 -0
- synth_ai/products/graph_gepa/__init__.py +23 -0
- synth_ai/products/graph_gepa/converters/__init__.py +19 -0
- synth_ai/products/graph_gepa/converters/openai_sft.py +29 -0
- synth_ai/sdk/__init__.py +123 -0
- synth_ai/sdk/api/__init__.py +1 -0
- synth_ai/sdk/api/models/supported.py +514 -0
- synth_ai/sdk/api/research_agent/__init__.py +296 -0
- synth_ai/sdk/api/train/__init__.py +85 -0
- synth_ai/sdk/api/train/builders.py +895 -0
- synth_ai/sdk/api/train/cli.py +2199 -0
- synth_ai/sdk/api/train/config_finder.py +267 -0
- synth_ai/sdk/api/train/configs/__init__.py +65 -0
- synth_ai/sdk/api/train/configs/prompt_learning.py +1706 -0
- synth_ai/sdk/api/train/configs/rl.py +187 -0
- synth_ai/sdk/api/train/configs/sft.py +99 -0
- synth_ai/sdk/api/train/configs/shared.py +81 -0
- synth_ai/sdk/api/train/context_learning.py +312 -0
- synth_ai/sdk/api/train/env_resolver.py +418 -0
- synth_ai/sdk/api/train/graph_validators.py +216 -0
- synth_ai/sdk/api/train/graphgen.py +984 -0
- synth_ai/sdk/api/train/graphgen_models.py +823 -0
- synth_ai/sdk/api/train/graphgen_validators.py +109 -0
- synth_ai/sdk/api/train/local_api.py +10 -0
- synth_ai/sdk/api/train/pollers.py +124 -0
- synth_ai/sdk/api/train/progress/__init__.py +97 -0
- synth_ai/sdk/api/train/progress/dataclasses.py +569 -0
- synth_ai/sdk/api/train/progress/events.py +326 -0
- synth_ai/sdk/api/train/progress/results.py +428 -0
- synth_ai/sdk/api/train/progress/tracker.py +641 -0
- synth_ai/sdk/api/train/prompt_learning.py +469 -0
- synth_ai/sdk/api/train/rl.py +441 -0
- synth_ai/sdk/api/train/sft.py +396 -0
- synth_ai/sdk/api/train/summary.py +522 -0
- synth_ai/sdk/api/train/supported_algos.py +147 -0
- synth_ai/sdk/api/train/task_app.py +351 -0
- synth_ai/sdk/api/train/utils.py +279 -0
- synth_ai/sdk/api/train/validators.py +2424 -0
- synth_ai/sdk/graphs/__init__.py +15 -0
- synth_ai/sdk/graphs/completions.py +570 -0
- synth_ai/{inference → sdk/inference}/__init__.py +0 -1
- synth_ai/sdk/inference/client.py +128 -0
- synth_ai/sdk/jobs/__init__.py +16 -0
- synth_ai/sdk/jobs/client.py +371 -0
- synth_ai/sdk/judging/__init__.py +14 -0
- synth_ai/sdk/judging/base.py +24 -0
- synth_ai/sdk/judging/client.py +40 -0
- synth_ai/sdk/judging/schemas.py +222 -0
- synth_ai/sdk/judging/types.py +42 -0
- synth_ai/sdk/learning/__init__.py +99 -0
- synth_ai/sdk/learning/algorithms.py +14 -0
- synth_ai/{learning → sdk/learning}/client.py +121 -30
- synth_ai/sdk/learning/config.py +5 -0
- synth_ai/{learning → sdk/learning}/constants.py +0 -2
- synth_ai/sdk/learning/context_learning_client.py +531 -0
- synth_ai/sdk/learning/context_learning_types.py +292 -0
- synth_ai/sdk/learning/ft_client.py +7 -0
- synth_ai/{learning → sdk/learning}/health.py +15 -9
- synth_ai/{learning → sdk/learning}/jobs.py +44 -47
- synth_ai/sdk/learning/prompt_extraction.py +334 -0
- synth_ai/sdk/learning/prompt_learning_client.py +455 -0
- synth_ai/sdk/learning/prompt_learning_types.py +186 -0
- synth_ai/{rl → sdk/learning/rl}/__init__.py +13 -8
- synth_ai/{learning/rl_client.py → sdk/learning/rl/client.py} +89 -77
- synth_ai/sdk/learning/rl/config.py +31 -0
- synth_ai/{rl → sdk/learning/rl}/contracts.py +5 -14
- synth_ai/{rl → sdk/learning/rl}/env_keys.py +45 -16
- synth_ai/sdk/learning/rl/secrets.py +13 -0
- synth_ai/sdk/learning/rl_client.py +5 -0
- synth_ai/sdk/learning/sft/__init__.py +29 -0
- synth_ai/sdk/learning/sft/client.py +95 -0
- synth_ai/sdk/learning/sft/config.py +270 -0
- synth_ai/sdk/learning/sft/data.py +698 -0
- synth_ai/sdk/learning/sse.py +57 -0
- synth_ai/sdk/learning/validators.py +52 -0
- synth_ai/sdk/localapi/__init__.py +40 -0
- synth_ai/sdk/localapi/apps/__init__.py +28 -0
- synth_ai/sdk/localapi/client.py +10 -0
- synth_ai/sdk/localapi/contracts.py +10 -0
- synth_ai/sdk/localapi/helpers.py +519 -0
- synth_ai/sdk/localapi/rollouts.py +87 -0
- synth_ai/sdk/localapi/server.py +29 -0
- synth_ai/sdk/localapi/template.py +70 -0
- synth_ai/sdk/streaming/__init__.py +35 -0
- synth_ai/sdk/streaming/config.py +94 -0
- synth_ai/sdk/streaming/handlers.py +1997 -0
- synth_ai/sdk/streaming/streamer.py +713 -0
- synth_ai/sdk/streaming/types.py +112 -0
- synth_ai/sdk/task/__init__.py +164 -0
- synth_ai/sdk/task/apps/__init__.py +169 -0
- synth_ai/sdk/task/auth.py +165 -0
- synth_ai/sdk/task/client.py +175 -0
- synth_ai/sdk/task/config.py +257 -0
- synth_ai/sdk/task/contracts.py +219 -0
- synth_ai/sdk/task/datasets.py +108 -0
- synth_ai/sdk/task/errors.py +50 -0
- synth_ai/sdk/task/health.py +34 -0
- synth_ai/sdk/task/in_process.py +1190 -0
- synth_ai/sdk/task/in_process_runner.py +314 -0
- synth_ai/sdk/task/inference_api.py +299 -0
- synth_ai/sdk/task/json.py +111 -0
- synth_ai/sdk/task/proxy.py +287 -0
- synth_ai/sdk/task/rubrics/__init__.py +55 -0
- synth_ai/sdk/task/rubrics/loaders.py +156 -0
- synth_ai/sdk/task/rubrics/models.py +57 -0
- synth_ai/sdk/task/rubrics/scoring.py +116 -0
- synth_ai/sdk/task/rubrics/strict.py +149 -0
- synth_ai/sdk/task/rubrics.py +219 -0
- synth_ai/sdk/task/server.py +631 -0
- synth_ai/sdk/task/trace_correlation_helpers.py +539 -0
- synth_ai/sdk/task/tracing_utils.py +95 -0
- synth_ai/sdk/task/validators.py +441 -0
- synth_ai/sdk/task/vendors.py +59 -0
- synth_ai/sdk/training/__init__.py +102 -0
- synth_ai/sdk/tunnels/__init__.py +83 -0
- synth_ai/sdk/tunnels/cleanup.py +83 -0
- synth_ai/sdk/tunnels/ports.py +120 -0
- synth_ai/utils/__init__.py +213 -0
- synth_ai-0.4.3.dist-info/METADATA +262 -0
- synth_ai-0.4.3.dist-info/RECORD +370 -0
- {synth_ai-0.2.8.dev2.dist-info → synth_ai-0.4.3.dist-info}/entry_points.txt +0 -1
- synth_ai/cli/calc.py +0 -69
- synth_ai/cli/demo.py +0 -144
- synth_ai/cli/legacy_root_backup.py +0 -470
- synth_ai/cli/man.py +0 -106
- synth_ai/cli/rl_demo.py +0 -202
- synth_ai/cli/status.py +0 -133
- synth_ai/config/base_url.py +0 -107
- synth_ai/core/experiment.py +0 -15
- synth_ai/core/system.py +0 -15
- synth_ai/demos/core/__init__.py +0 -1
- synth_ai/demos/demo_task_apps/__init__.py +0 -1
- synth_ai/demos/demo_task_apps/math/config.toml +0 -129
- synth_ai/demos/demo_task_apps/math/deploy_task_app.sh +0 -22
- synth_ai/demos/demo_task_apps/math/modal_task_app.py +0 -415
- synth_ai/environments/__init__.py +0 -31
- synth_ai/environments/environment/__init__.py +0 -1
- synth_ai/environments/environment/artifacts/__init__.py +0 -1
- synth_ai/environments/environment/artifacts/base.py +0 -52
- synth_ai/environments/environment/core.py +0 -67
- synth_ai/environments/environment/db/__init__.py +0 -1
- synth_ai/environments/environment/db/sqlite.py +0 -45
- synth_ai/environments/environment/registry.py +0 -233
- synth_ai/environments/environment/resources/sqlite.py +0 -45
- synth_ai/environments/environment/results.py +0 -1
- synth_ai/environments/environment/rewards/__init__.py +0 -1
- synth_ai/environments/environment/rewards/core.py +0 -29
- synth_ai/environments/environment/shared_engine.py +0 -26
- synth_ai/environments/environment/tools/__init__.py +0 -200
- synth_ai/environments/examples/__init__.py +0 -1
- synth_ai/environments/examples/bandit/__init__.py +0 -33
- synth_ai/environments/examples/bandit/engine.py +0 -294
- synth_ai/environments/examples/bandit/environment.py +0 -194
- synth_ai/environments/examples/bandit/taskset.py +0 -200
- synth_ai/environments/examples/crafter_classic/__init__.py +0 -8
- synth_ai/environments/examples/crafter_classic/agent_demos/analyze_semantic_words_markdown.py +0 -250
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_comprehensive_evaluation.py +0 -59
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_browser.py +0 -152
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_config.toml +0 -24
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_framework.py +0 -1194
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/crafter_synth_config.toml +0 -56
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/filter_config_modal.toml +0 -32
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/filter_traces_sft_turso.py +0 -738
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/kick_off_ft_modal.py +0 -384
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_action_results.py +0 -53
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_agent_actions.py +0 -178
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_latest_run.py +0 -222
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_lm_traces.py +0 -183
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_no_rewards.py +0 -210
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_trace_issue.py +0 -206
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/check_db_schema.py +0 -49
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/check_latest_results.py +0 -64
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/debug_agent_responses.py +0 -88
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/quick_trace_check.py +0 -77
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/compare_experiments.py +0 -324
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/filter_traces_sft_turso.py +0 -580
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/kick_off_ft_oai.py +0 -362
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/multi_model_config.toml +0 -49
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_enhanced_hooks.py +0 -332
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_hook_events.py +0 -97
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_hook_results.py +0 -217
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/check_hook_storage.py +0 -87
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/check_seeds.py +0 -88
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/compare_seed_performance.py +0 -195
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/custom_eval_pipelines.py +0 -400
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/plot_hook_frequency.py +0 -195
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/seed_analysis_summary.py +0 -56
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/run_rollouts_for_models_and_compare_v3.py +0 -858
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_quick_evaluation.py +0 -52
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_react_agent.py +0 -874
- synth_ai/environments/examples/crafter_classic/agent_demos/crafter_trace_evaluation.py +0 -1412
- synth_ai/environments/examples/crafter_classic/agent_demos/example_v3_usage.py +0 -216
- synth_ai/environments/examples/crafter_classic/agent_demos/old/compare_traces.py +0 -296
- synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_comprehensive_evaluation.py +0 -58
- synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_env_serialization.py +0 -464
- synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_evaluation_browser.py +0 -152
- synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_quick_evaluation.py +0 -51
- synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_trace_evaluation.py +0 -1412
- synth_ai/environments/examples/crafter_classic/agent_demos/old/debug_player_loss.py +0 -112
- synth_ai/environments/examples/crafter_classic/agent_demos/old/diagnose_service.py +0 -203
- synth_ai/environments/examples/crafter_classic/agent_demos/old/diagnose_slowness.py +0 -305
- synth_ai/environments/examples/crafter_classic/agent_demos/old/eval_by_difficulty.py +0 -126
- synth_ai/environments/examples/crafter_classic/agent_demos/old/eval_example.py +0 -94
- synth_ai/environments/examples/crafter_classic/agent_demos/old/explore_saved_states.py +0 -142
- synth_ai/environments/examples/crafter_classic/agent_demos/old/filter_traces_sft.py +0 -26
- synth_ai/environments/examples/crafter_classic/agent_demos/old/filter_traces_sft_OLD.py +0 -984
- synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_data_gemini.py +0 -724
- synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_data_modal.py +0 -386
- synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_metadata.py +0 -205
- synth_ai/environments/examples/crafter_classic/agent_demos/old/kick_off_ft_gemini.py +0 -150
- synth_ai/environments/examples/crafter_classic/agent_demos/old/kick_off_ft_modal.py +0 -283
- synth_ai/environments/examples/crafter_classic/agent_demos/old/prepare_vertex_ft.py +0 -280
- synth_ai/environments/examples/crafter_classic/agent_demos/old/profile_env_slowness.py +0 -456
- synth_ai/environments/examples/crafter_classic/agent_demos/old/replicate_issue.py +0 -166
- synth_ai/environments/examples/crafter_classic/agent_demos/old/run_and_eval.py +0 -102
- synth_ai/environments/examples/crafter_classic/agent_demos/old/run_comparison.py +0 -128
- synth_ai/environments/examples/crafter_classic/agent_demos/old/run_qwen_rollouts.py +0 -655
- synth_ai/environments/examples/crafter_classic/agent_demos/old/trace_eval_OLD.py +0 -202
- synth_ai/environments/examples/crafter_classic/agent_demos/old/validate_openai_format.py +0 -166
- synth_ai/environments/examples/crafter_classic/config_logging.py +0 -111
- synth_ai/environments/examples/crafter_classic/debug_translation.py +0 -0
- synth_ai/environments/examples/crafter_classic/engine.py +0 -579
- synth_ai/environments/examples/crafter_classic/engine_deterministic_patch.py +0 -64
- synth_ai/environments/examples/crafter_classic/engine_helpers/action_map.py +0 -6
- synth_ai/environments/examples/crafter_classic/engine_helpers/serialization.py +0 -75
- synth_ai/environments/examples/crafter_classic/engine_serialization_patch_v3.py +0 -267
- synth_ai/environments/examples/crafter_classic/environment.py +0 -404
- synth_ai/environments/examples/crafter_classic/taskset.py +0 -233
- synth_ai/environments/examples/crafter_classic/trace_hooks_v3.py +0 -228
- synth_ai/environments/examples/crafter_classic/world_config_patch_simple.py +0 -299
- synth_ai/environments/examples/crafter_custom/__init__.py +0 -4
- synth_ai/environments/examples/crafter_custom/agent_demos/__init__.py +0 -1
- synth_ai/environments/examples/crafter_custom/agent_demos/trace_eval.py +0 -202
- synth_ai/environments/examples/crafter_custom/crafter/__init__.py +0 -7
- synth_ai/environments/examples/crafter_custom/crafter/config.py +0 -182
- synth_ai/environments/examples/crafter_custom/crafter/constants.py +0 -8
- synth_ai/environments/examples/crafter_custom/crafter/engine.py +0 -269
- synth_ai/environments/examples/crafter_custom/crafter/env.py +0 -262
- synth_ai/environments/examples/crafter_custom/crafter/objects.py +0 -417
- synth_ai/environments/examples/crafter_custom/crafter/recorder.py +0 -187
- synth_ai/environments/examples/crafter_custom/crafter/worldgen.py +0 -118
- synth_ai/environments/examples/crafter_custom/dataset_builder.py +0 -373
- synth_ai/environments/examples/crafter_custom/environment.py +0 -312
- synth_ai/environments/examples/crafter_custom/old/analyze_diamond_issue.py +0 -159
- synth_ai/environments/examples/crafter_custom/old/analyze_diamond_spawning.py +0 -158
- synth_ai/environments/examples/crafter_custom/old/compare_worlds.py +0 -71
- synth_ai/environments/examples/crafter_custom/old/dataset_stats.py +0 -105
- synth_ai/environments/examples/crafter_custom/old/diamond_spawning_summary.py +0 -119
- synth_ai/environments/examples/crafter_custom/old/example_dataset_usage.py +0 -52
- synth_ai/environments/examples/crafter_custom/run_dataset.py +0 -305
- synth_ai/environments/examples/enron/art_helpers/email_search_tools.py +0 -156
- synth_ai/environments/examples/enron/art_helpers/local_email_db.py +0 -281
- synth_ai/environments/examples/enron/art_helpers/types_enron.py +0 -25
- synth_ai/environments/examples/enron/engine.py +0 -295
- synth_ai/environments/examples/enron/environment.py +0 -166
- synth_ai/environments/examples/enron/taskset.py +0 -112
- synth_ai/environments/examples/enron/units/keyword_stats.py +0 -112
- synth_ai/environments/examples/minigrid/__init__.py +0 -48
- synth_ai/environments/examples/minigrid/agent_demos/minigrid_evaluation_framework.py +0 -1188
- synth_ai/environments/examples/minigrid/agent_demos/minigrid_quick_evaluation.py +0 -48
- synth_ai/environments/examples/minigrid/agent_demos/minigrid_react_agent.py +0 -562
- synth_ai/environments/examples/minigrid/agent_demos/minigrid_trace_evaluation.py +0 -221
- synth_ai/environments/examples/minigrid/engine.py +0 -589
- synth_ai/environments/examples/minigrid/environment.py +0 -274
- synth_ai/environments/examples/minigrid/environment_mapping.py +0 -242
- synth_ai/environments/examples/minigrid/puzzle_loader.py +0 -417
- synth_ai/environments/examples/minigrid/taskset.py +0 -583
- synth_ai/environments/examples/nethack/__init__.py +0 -7
- synth_ai/environments/examples/nethack/achievements.py +0 -337
- synth_ai/environments/examples/nethack/agent_demos/nethack_evaluation_framework.py +0 -981
- synth_ai/environments/examples/nethack/agent_demos/nethack_quick_evaluation.py +0 -74
- synth_ai/environments/examples/nethack/agent_demos/nethack_react_agent.py +0 -831
- synth_ai/environments/examples/nethack/engine.py +0 -739
- synth_ai/environments/examples/nethack/environment.py +0 -256
- synth_ai/environments/examples/nethack/helpers/__init__.py +0 -41
- synth_ai/environments/examples/nethack/helpers/action_mapping.py +0 -301
- synth_ai/environments/examples/nethack/helpers/nle_wrapper.py +0 -402
- synth_ai/environments/examples/nethack/helpers/observation_utils.py +0 -433
- synth_ai/environments/examples/nethack/helpers/recording_wrapper.py +0 -200
- synth_ai/environments/examples/nethack/helpers/trajectory_recorder.py +0 -269
- synth_ai/environments/examples/nethack/helpers/visualization/replay_viewer.py +0 -308
- synth_ai/environments/examples/nethack/helpers/visualization/visualizer.py +0 -431
- synth_ai/environments/examples/nethack/taskset.py +0 -323
- synth_ai/environments/examples/red/__init__.py +0 -7
- synth_ai/environments/examples/red/agent_demos/__init__.py +0 -1
- synth_ai/environments/examples/red/config_logging.py +0 -110
- synth_ai/environments/examples/red/engine.py +0 -694
- synth_ai/environments/examples/red/engine_helpers/__init__.py +0 -1
- synth_ai/environments/examples/red/engine_helpers/memory_map.py +0 -28
- synth_ai/environments/examples/red/engine_helpers/reward_components.py +0 -276
- synth_ai/environments/examples/red/engine_helpers/reward_library/__init__.py +0 -142
- synth_ai/environments/examples/red/engine_helpers/reward_library/adaptive_rewards.py +0 -57
- synth_ai/environments/examples/red/engine_helpers/reward_library/battle_rewards.py +0 -284
- synth_ai/environments/examples/red/engine_helpers/reward_library/composite_rewards.py +0 -150
- synth_ai/environments/examples/red/engine_helpers/reward_library/economy_rewards.py +0 -138
- synth_ai/environments/examples/red/engine_helpers/reward_library/efficiency_rewards.py +0 -57
- synth_ai/environments/examples/red/engine_helpers/reward_library/exploration_rewards.py +0 -331
- synth_ai/environments/examples/red/engine_helpers/reward_library/novelty_rewards.py +0 -121
- synth_ai/environments/examples/red/engine_helpers/reward_library/pallet_town_rewards.py +0 -559
- synth_ai/environments/examples/red/engine_helpers/reward_library/pokemon_rewards.py +0 -313
- synth_ai/environments/examples/red/engine_helpers/reward_library/social_rewards.py +0 -148
- synth_ai/environments/examples/red/engine_helpers/reward_library/story_rewards.py +0 -247
- synth_ai/environments/examples/red/engine_helpers/screen_analysis.py +0 -368
- synth_ai/environments/examples/red/engine_helpers/state_extraction.py +0 -140
- synth_ai/environments/examples/red/environment.py +0 -238
- synth_ai/environments/examples/red/taskset.py +0 -79
- synth_ai/environments/examples/red/units/__init__.py +0 -1
- synth_ai/environments/examples/sokoban/__init__.py +0 -1
- synth_ai/environments/examples/sokoban/agent_demos/sokoban_full_eval.py +0 -899
- synth_ai/environments/examples/sokoban/engine.py +0 -678
- synth_ai/environments/examples/sokoban/engine_helpers/__init__.py +0 -1
- synth_ai/environments/examples/sokoban/engine_helpers/room_utils.py +0 -657
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/__init__.py +0 -18
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/__init__.py +0 -3
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/boxoban_env.py +0 -131
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/render_utils.py +0 -370
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/room_utils.py +0 -332
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env.py +0 -306
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_fixed_targets.py +0 -67
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_pull.py +0 -115
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_two_player.py +0 -123
- synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_variations.py +0 -394
- synth_ai/environments/examples/sokoban/environment.py +0 -229
- synth_ai/environments/examples/sokoban/generate_verified_puzzles.py +0 -440
- synth_ai/environments/examples/sokoban/puzzle_loader.py +0 -312
- synth_ai/environments/examples/sokoban/taskset.py +0 -428
- synth_ai/environments/examples/sokoban/units/astar_common.py +0 -95
- synth_ai/environments/examples/tictactoe/__init__.py +0 -1
- synth_ai/environments/examples/tictactoe/engine.py +0 -368
- synth_ai/environments/examples/tictactoe/environment.py +0 -240
- synth_ai/environments/examples/tictactoe/taskset.py +0 -215
- synth_ai/environments/examples/verilog/__init__.py +0 -10
- synth_ai/environments/examples/verilog/engine.py +0 -329
- synth_ai/environments/examples/verilog/environment.py +0 -350
- synth_ai/environments/examples/verilog/taskset.py +0 -420
- synth_ai/environments/examples/wordle/__init__.py +0 -29
- synth_ai/environments/examples/wordle/engine.py +0 -398
- synth_ai/environments/examples/wordle/environment.py +0 -159
- synth_ai/environments/examples/wordle/helpers/generate_instances_wordfreq.py +0 -75
- synth_ai/environments/examples/wordle/taskset.py +0 -230
- synth_ai/environments/reproducibility/core.py +0 -42
- synth_ai/environments/reproducibility/helpers.py +0 -0
- synth_ai/environments/reproducibility/tree.py +0 -364
- synth_ai/environments/service/app.py +0 -98
- synth_ai/environments/service/core_routes.py +0 -1020
- synth_ai/environments/service/external_registry.py +0 -56
- synth_ai/environments/service/registry.py +0 -9
- synth_ai/environments/stateful/__init__.py +0 -1
- synth_ai/environments/stateful/core.py +0 -163
- synth_ai/environments/stateful/engine.py +0 -21
- synth_ai/environments/stateful/state.py +0 -7
- synth_ai/environments/tasks/api.py +0 -19
- synth_ai/environments/tasks/core.py +0 -80
- synth_ai/environments/tasks/filters.py +0 -41
- synth_ai/environments/tasks/utils.py +0 -91
- synth_ai/environments/v0_observability/history.py +0 -3
- synth_ai/environments/v0_observability/log.py +0 -2
- synth_ai/evals/base.py +0 -15
- synth_ai/experimental/synth_oss.py +0 -446
- synth_ai/handshake.py +0 -63
- synth_ai/http.py +0 -26
- synth_ai/http_client.py +0 -104
- synth_ai/inference/client.py +0 -20
- synth_ai/install_sqld.sh +0 -40
- synth_ai/jobs/client.py +0 -246
- synth_ai/learning/__init__.py +0 -24
- synth_ai/learning/config.py +0 -43
- synth_ai/learning/filtering.py +0 -0
- synth_ai/learning/ft_client.py +0 -59
- synth_ai/learning/offline/dpo.py +0 -0
- synth_ai/learning/offline/providers.py +0 -7
- synth_ai/learning/offline/sft.py +0 -0
- synth_ai/learning/offline/shared.py +0 -0
- synth_ai/learning/online/grpo.py +0 -0
- synth_ai/learning/online/irft.py +0 -0
- synth_ai/learning/prompts/banking77_injection_eval.py +0 -168
- synth_ai/learning/prompts/gepa.py +0 -0
- synth_ai/learning/prompts/hello_world_in_context_injection_ex.py +0 -213
- synth_ai/learning/prompts/mipro.py +0 -289
- synth_ai/learning/prompts/random_search.py +0 -246
- synth_ai/learning/prompts/run_mipro_banking77.py +0 -172
- synth_ai/learning/prompts/run_random_search_banking77.py +0 -324
- synth_ai/learning/sse.py +0 -58
- synth_ai/learning/validators.py +0 -48
- synth_ai/lm/__init__.py +0 -51
- synth_ai/lm/caching/constants.py +0 -6
- synth_ai/lm/caching/dbs.py +0 -0
- synth_ai/lm/caching/ephemeral.py +0 -102
- synth_ai/lm/caching/handler.py +0 -137
- synth_ai/lm/caching/initialize.py +0 -11
- synth_ai/lm/caching/persistent.py +0 -114
- synth_ai/lm/config.py +0 -110
- synth_ai/lm/constants.py +0 -32
- synth_ai/lm/core/__init__.py +0 -8
- synth_ai/lm/core/all.py +0 -73
- synth_ai/lm/core/exceptions.py +0 -7
- synth_ai/lm/core/main.py +0 -319
- synth_ai/lm/core/main_v3.py +0 -594
- synth_ai/lm/core/synth_models.py +0 -48
- synth_ai/lm/core/vendor_clients.py +0 -188
- synth_ai/lm/cost/__init__.py +0 -0
- synth_ai/lm/cost/monitor.py +0 -1
- synth_ai/lm/cost/statefulness.py +0 -1
- synth_ai/lm/injection.py +0 -80
- synth_ai/lm/overrides.py +0 -206
- synth_ai/lm/provider_support/__init__.py +0 -8
- synth_ai/lm/provider_support/anthropic.py +0 -972
- synth_ai/lm/provider_support/openai.py +0 -1139
- synth_ai/lm/provider_support/suppress_logging.py +0 -31
- synth_ai/lm/structured_outputs/__init__.py +0 -0
- synth_ai/lm/structured_outputs/handler.py +0 -440
- synth_ai/lm/structured_outputs/inject.py +0 -297
- synth_ai/lm/structured_outputs/rehabilitate.py +0 -185
- synth_ai/lm/tools/__init__.py +0 -3
- synth_ai/lm/tools/base.py +0 -172
- synth_ai/lm/unified_interface.py +0 -202
- synth_ai/lm/vendors/__init__.py +0 -0
- synth_ai/lm/vendors/base.py +0 -81
- synth_ai/lm/vendors/core/__init__.py +0 -0
- synth_ai/lm/vendors/core/anthropic_api.py +0 -387
- synth_ai/lm/vendors/core/gemini_api.py +0 -292
- synth_ai/lm/vendors/core/mistral_api.py +0 -322
- synth_ai/lm/vendors/core/openai_api.py +0 -225
- synth_ai/lm/vendors/core/synth_dev_api.py +0 -0
- synth_ai/lm/vendors/local/__init__.py +0 -0
- synth_ai/lm/vendors/local/ollama.py +0 -0
- synth_ai/lm/vendors/openai_standard.py +0 -780
- synth_ai/lm/vendors/openai_standard_responses.py +0 -256
- synth_ai/lm/vendors/retries.py +0 -22
- synth_ai/lm/vendors/supported/__init__.py +0 -0
- synth_ai/lm/vendors/supported/custom_endpoint.py +0 -417
- synth_ai/lm/vendors/supported/deepseek.py +0 -69
- synth_ai/lm/vendors/supported/grok.py +0 -75
- synth_ai/lm/vendors/supported/groq.py +0 -16
- synth_ai/lm/vendors/supported/ollama.py +0 -15
- synth_ai/lm/vendors/supported/openrouter.py +0 -74
- synth_ai/lm/vendors/supported/together.py +0 -11
- synth_ai/lm/vendors/synth_client.py +0 -808
- synth_ai/lm/warmup.py +0 -186
- synth_ai/rl/secrets.py +0 -19
- synth_ai/scripts/verify_rewards.py +0 -100
- synth_ai/task/__init__.py +0 -10
- synth_ai/task/contracts.py +0 -120
- synth_ai/task/health.py +0 -28
- synth_ai/task/validators.py +0 -12
- synth_ai/tracing/__init__.py +0 -30
- synth_ai/tracing_v1/__init__.py +0 -33
- synth_ai/tracing_v3/config.py +0 -84
- synth_ai/tracing_v3/storage/config.py +0 -62
- synth_ai/tracing_v3/turso/__init__.py +0 -25
- synth_ai/tracing_v3/turso/daemon.py +0 -144
- synth_ai/tracing_v3/turso/manager.py +0 -760
- synth_ai/v0/tracing/__init__.py +0 -0
- synth_ai/v0/tracing/abstractions.py +0 -224
- synth_ai/v0/tracing/base_client.py +0 -91
- synth_ai/v0/tracing/client_manager.py +0 -131
- synth_ai/v0/tracing/config.py +0 -142
- synth_ai/v0/tracing/context.py +0 -146
- synth_ai/v0/tracing/decorators.py +0 -682
- synth_ai/v0/tracing/events/__init__.py +0 -0
- synth_ai/v0/tracing/events/manage.py +0 -147
- synth_ai/v0/tracing/events/scope.py +0 -86
- synth_ai/v0/tracing/events/store.py +0 -228
- synth_ai/v0/tracing/immediate_client.py +0 -151
- synth_ai/v0/tracing/local.py +0 -18
- synth_ai/v0/tracing/log_client_base.py +0 -73
- synth_ai/v0/tracing/retry_queue.py +0 -186
- synth_ai/v0/tracing/trackers.py +0 -515
- synth_ai/v0/tracing/upload.py +0 -512
- synth_ai/v0/tracing/utils.py +0 -9
- synth_ai/v0/tracing_v1/__init__.py +0 -16
- synth_ai/v0/tracing_v1/abstractions.py +0 -224
- synth_ai/v0/tracing_v1/base_client.py +0 -91
- synth_ai/v0/tracing_v1/client_manager.py +0 -131
- synth_ai/v0/tracing_v1/config.py +0 -142
- synth_ai/v0/tracing_v1/context.py +0 -146
- synth_ai/v0/tracing_v1/decorators.py +0 -703
- synth_ai/v0/tracing_v1/events/__init__.py +0 -0
- synth_ai/v0/tracing_v1/events/manage.py +0 -147
- synth_ai/v0/tracing_v1/events/scope.py +0 -86
- synth_ai/v0/tracing_v1/events/store.py +0 -228
- synth_ai/v0/tracing_v1/immediate_client.py +0 -151
- synth_ai/v0/tracing_v1/local.py +0 -18
- synth_ai/v0/tracing_v1/log_client_base.py +0 -73
- synth_ai/v0/tracing_v1/retry_queue.py +0 -186
- synth_ai/v0/tracing_v1/trackers.py +0 -515
- synth_ai/v0/tracing_v1/upload.py +0 -527
- synth_ai/v0/tracing_v1/utils.py +0 -9
- synth_ai/zyk/__init__.py +0 -30
- synth_ai-0.2.8.dev2.dist-info/METADATA +0 -129
- synth_ai-0.2.8.dev2.dist-info/RECORD +0 -420
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/__init__.py +0 -0
- /synth_ai/{lm/caching → core/apps}/__init__.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/lm_call_record_abstractions.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/storage/__init__.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/storage/exceptions.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/storage/types.py +0 -0
- /synth_ai/{compound/cais.py → py.typed} +0 -0
- /synth_ai/{learning → sdk/learning}/core.py +0 -0
- /synth_ai/{learning → sdk/learning}/gateway.py +0 -0
- {synth_ai-0.2.8.dev2.dist-info → synth_ai-0.4.3.dist-info}/WHEEL +0 -0
- {synth_ai-0.2.8.dev2.dist-info → synth_ai-0.4.3.dist-info}/licenses/LICENSE +0 -0
- {synth_ai-0.2.8.dev2.dist-info → synth_ai-0.4.3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,823 @@
|
|
|
1
|
+
"""GraphGen (Automated Design of Agentic Systems) data models.
|
|
2
|
+
|
|
3
|
+
This module provides Pydantic models for defining GraphGen datasets and job configurations.
|
|
4
|
+
GraphGen is a simplified "Workflows API" for prompt optimization that wraps GEPA with
|
|
5
|
+
auto-generated task apps and built-in judge configurations.
|
|
6
|
+
|
|
7
|
+
Example:
|
|
8
|
+
from synth_ai.sdk.api.train.graphgen_models import (
|
|
9
|
+
GraphGenTaskSet,
|
|
10
|
+
GraphGenTask,
|
|
11
|
+
GraphGenGoldOutput,
|
|
12
|
+
GraphGenRubric,
|
|
13
|
+
GraphGenJobConfig,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# Create a dataset
|
|
17
|
+
dataset = GraphGenTaskSet(
|
|
18
|
+
metadata=GraphGenTaskSetMetadata(name="My Dataset"),
|
|
19
|
+
tasks=[
|
|
20
|
+
GraphGenTask(id="task1", input={"question": "What is 2+2?"}),
|
|
21
|
+
GraphGenTask(id="task2", input={"question": "What is the capital of France?"}),
|
|
22
|
+
],
|
|
23
|
+
gold_outputs=[
|
|
24
|
+
GraphGenGoldOutput(output={"answer": "4"}, task_id="task1"),
|
|
25
|
+
GraphGenGoldOutput(output={"answer": "Paris"}, task_id="task2"),
|
|
26
|
+
],
|
|
27
|
+
judge_config=GraphGenJudgeConfig(mode="rubric"),
|
|
28
|
+
)
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
from __future__ import annotations
|
|
32
|
+
|
|
33
|
+
import json
|
|
34
|
+
from datetime import datetime
|
|
35
|
+
from pathlib import Path
|
|
36
|
+
from typing import Any, Dict, List, Literal, Optional, Union
|
|
37
|
+
|
|
38
|
+
from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, field_validator, model_validator
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# =============================================================================
|
|
42
|
+
# Output Configuration (Improvement 1)
|
|
43
|
+
# =============================================================================
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class OutputConfig(BaseModel):
|
|
47
|
+
"""Configuration for graph output extraction + validation.
|
|
48
|
+
|
|
49
|
+
This model defines how graph outputs should be extracted and validated.
|
|
50
|
+
It supports JSON Schema validation, multiple output formats, and
|
|
51
|
+
configurable extraction paths.
|
|
52
|
+
|
|
53
|
+
Example:
|
|
54
|
+
config = OutputConfig(
|
|
55
|
+
schema={"type": "object", "properties": {"answer": {"type": "string"}}},
|
|
56
|
+
format="json",
|
|
57
|
+
strict=True,
|
|
58
|
+
extract_from=["response", "output"],
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
Attributes:
|
|
62
|
+
schema_: JSON Schema (draft-07) for output validation. Use alias "schema" in JSON.
|
|
63
|
+
format: Expected output format - "json", "text", "tool_calls", or "image".
|
|
64
|
+
strict: If True, validation failures fail the run; if False, log warnings and continue.
|
|
65
|
+
extract_from: Ordered list of dot-paths/keys to try when extracting output from final_state.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
69
|
+
|
|
70
|
+
schema_: Optional[Dict[str, Any]] = Field(
|
|
71
|
+
default=None,
|
|
72
|
+
alias="schema",
|
|
73
|
+
description="JSON Schema (draft-07) for output validation",
|
|
74
|
+
)
|
|
75
|
+
format: Literal["json", "text", "tool_calls", "image"] = Field(
|
|
76
|
+
default="json",
|
|
77
|
+
description="Expected output format.",
|
|
78
|
+
)
|
|
79
|
+
strict: bool = Field(
|
|
80
|
+
default=True,
|
|
81
|
+
description="If true, validation failures fail the run; if false, log warnings and continue.",
|
|
82
|
+
)
|
|
83
|
+
extract_from: Optional[List[str]] = Field(
|
|
84
|
+
default=None,
|
|
85
|
+
description=(
|
|
86
|
+
"Ordered list of dot-paths/keys to try when extracting output from a final_state dict. "
|
|
87
|
+
"If omitted/empty, uses the entire provided value."
|
|
88
|
+
),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class GraphGenTaskSetMetadata(BaseModel):
|
|
93
|
+
"""Metadata about the dataset."""
|
|
94
|
+
|
|
95
|
+
name: str
|
|
96
|
+
description: Optional[str] = None
|
|
97
|
+
created_at: Optional[str] = None
|
|
98
|
+
version: Optional[str] = "1.0"
|
|
99
|
+
# Optional schemas (graph-first).
|
|
100
|
+
input_schema: Optional[Dict[str, Any]] = Field(
|
|
101
|
+
default=None, description="JSON Schema for task inputs / initial_state"
|
|
102
|
+
)
|
|
103
|
+
output_schema: Optional[Dict[str, Any]] = Field(
|
|
104
|
+
default=None, description="JSON Schema for expected graph output / final_state"
|
|
105
|
+
)
|
|
106
|
+
# Improvement 3: Changed from Optional[Any] to Optional[Union[str, List[str]]]
|
|
107
|
+
select_output: Optional[Union[str, List[str]]] = Field(
|
|
108
|
+
default=None,
|
|
109
|
+
description=(
|
|
110
|
+
"Optional selector for the public output model. "
|
|
111
|
+
"Can be a string (single key) or list of keys to extract from final_state."
|
|
112
|
+
),
|
|
113
|
+
)
|
|
114
|
+
# Improvement 1: Added typed OutputConfig instead of Dict[str, Any]
|
|
115
|
+
output_config: Optional[OutputConfig] = Field(
|
|
116
|
+
default=None,
|
|
117
|
+
description=(
|
|
118
|
+
"Configuration for graph output extraction and validation. "
|
|
119
|
+
"Defines JSON Schema, output format, and extraction paths."
|
|
120
|
+
),
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
@field_validator("select_output", mode="before")
|
|
124
|
+
@classmethod
|
|
125
|
+
def validate_select_output(
|
|
126
|
+
cls, v: Any
|
|
127
|
+
) -> Optional[Union[str, List[str]]]:
|
|
128
|
+
"""Validate select_output is a string or list of strings."""
|
|
129
|
+
if v is None:
|
|
130
|
+
return None
|
|
131
|
+
if isinstance(v, str):
|
|
132
|
+
return v
|
|
133
|
+
if isinstance(v, list):
|
|
134
|
+
if all(isinstance(item, str) for item in v):
|
|
135
|
+
return v
|
|
136
|
+
raise ValueError("select_output list must contain only strings")
|
|
137
|
+
raise ValueError(
|
|
138
|
+
f"select_output must be a string or list of strings, got {type(v).__name__}"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
@field_validator("output_config", mode="before")
|
|
142
|
+
@classmethod
|
|
143
|
+
def validate_output_config(cls, v: Any) -> Optional[OutputConfig]:
|
|
144
|
+
"""Convert dict to OutputConfig for backward compatibility."""
|
|
145
|
+
if v is None:
|
|
146
|
+
return None
|
|
147
|
+
if isinstance(v, OutputConfig):
|
|
148
|
+
return v
|
|
149
|
+
if isinstance(v, dict):
|
|
150
|
+
return OutputConfig.model_validate(v)
|
|
151
|
+
raise ValueError(
|
|
152
|
+
f"output_config must be a dict or OutputConfig, got {type(v).__name__}"
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class GraphGenRubricCriterion(BaseModel):
|
|
157
|
+
"""A single rubric criterion for evaluation."""
|
|
158
|
+
|
|
159
|
+
name: str
|
|
160
|
+
description: str
|
|
161
|
+
expected_answer: Optional[str] = None
|
|
162
|
+
weight: float = 1.0
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class GraphGenRubricOutcome(BaseModel):
|
|
166
|
+
"""Outcome-level rubric (evaluates final output)."""
|
|
167
|
+
|
|
168
|
+
criteria: List[GraphGenRubricCriterion] = Field(default_factory=list)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class GraphGenRubricEvents(BaseModel):
|
|
172
|
+
"""Event-level rubric (evaluates intermediate steps)."""
|
|
173
|
+
|
|
174
|
+
criteria: List[GraphGenRubricCriterion] = Field(default_factory=list)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class GraphGenRubric(BaseModel):
|
|
178
|
+
"""Rubric for evaluating task outputs."""
|
|
179
|
+
|
|
180
|
+
outcome: Optional[GraphGenRubricOutcome] = None
|
|
181
|
+
events: Optional[GraphGenRubricEvents] = None
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class GraphGenTask(BaseModel):
|
|
185
|
+
"""A single task in the dataset.
|
|
186
|
+
|
|
187
|
+
Tasks have arbitrary JSON inputs and optional task-specific rubrics.
|
|
188
|
+
Gold outputs are stored separately and linked via task_id.
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
id: str
|
|
192
|
+
input: Dict[str, Any] = Field(
|
|
193
|
+
..., description="Arbitrary JSON input for the task"
|
|
194
|
+
)
|
|
195
|
+
rubric: Optional[GraphGenRubric] = Field(
|
|
196
|
+
default=None, description="Task-specific rubric (merged with default_rubric)"
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class GraphGenGoldOutput(BaseModel):
|
|
201
|
+
"""A gold/reference output.
|
|
202
|
+
|
|
203
|
+
Can be linked to a specific task via task_id, or standalone (for reference examples).
|
|
204
|
+
Standalone gold outputs (no task_id) are used as reference pool for contrastive judging.
|
|
205
|
+
"""
|
|
206
|
+
|
|
207
|
+
output: Dict[str, Any] = Field(
|
|
208
|
+
..., description="The gold/reference output (arbitrary JSON)"
|
|
209
|
+
)
|
|
210
|
+
task_id: Optional[str] = Field(
|
|
211
|
+
default=None,
|
|
212
|
+
description="ID of the task this gold output belongs to (None = standalone reference)",
|
|
213
|
+
)
|
|
214
|
+
note: Optional[str] = Field(
|
|
215
|
+
default=None, description="Optional note about this gold output"
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
# Improvement 4: Define supported providers as a Literal type
|
|
220
|
+
JudgeProviderType = Literal["groq", "openai", "google", "anthropic"]
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
class GraphGenJudgeConfig(BaseModel):
|
|
224
|
+
"""Configuration for the judge used during optimization."""
|
|
225
|
+
|
|
226
|
+
mode: Literal["rubric", "contrastive", "gold_examples"] = Field(
|
|
227
|
+
default="rubric",
|
|
228
|
+
description=(
|
|
229
|
+
"Judge mode: "
|
|
230
|
+
"'rubric' = evaluate against criteria, "
|
|
231
|
+
"'contrastive' = compare to gold output, "
|
|
232
|
+
"'gold_examples' = use gold examples as few-shot context"
|
|
233
|
+
),
|
|
234
|
+
)
|
|
235
|
+
model: str = Field(
|
|
236
|
+
default="llama-3.3-70b-versatile",
|
|
237
|
+
description="Model to use for judging",
|
|
238
|
+
)
|
|
239
|
+
# Improvement 4: Changed from str to Literal type for better type safety
|
|
240
|
+
provider: JudgeProviderType = Field(
|
|
241
|
+
default="groq",
|
|
242
|
+
description="Provider for judge model (groq, openai, google, anthropic)",
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
class GraphGenTaskSet(BaseModel):
|
|
247
|
+
"""The complete GraphGen dataset format.
|
|
248
|
+
|
|
249
|
+
Contains tasks with arbitrary JSON inputs, gold outputs (optionally linked to tasks),
|
|
250
|
+
rubrics (task-specific and/or default), and judge configuration.
|
|
251
|
+
|
|
252
|
+
Example:
|
|
253
|
+
dataset = GraphGenTaskSet(
|
|
254
|
+
metadata=GraphGenTaskSetMetadata(name="QA Dataset"),
|
|
255
|
+
tasks=[
|
|
256
|
+
GraphGenTask(id="q1", input={"question": "What is 2+2?"}),
|
|
257
|
+
],
|
|
258
|
+
gold_outputs=[
|
|
259
|
+
GraphGenGoldOutput(output={"answer": "4"}, task_id="q1"),
|
|
260
|
+
],
|
|
261
|
+
)
|
|
262
|
+
"""
|
|
263
|
+
|
|
264
|
+
version: str = "1.0"
|
|
265
|
+
metadata: GraphGenTaskSetMetadata
|
|
266
|
+
tasks: List[GraphGenTask] = Field(
|
|
267
|
+
..., min_length=1, description="List of tasks to evaluate"
|
|
268
|
+
)
|
|
269
|
+
gold_outputs: List[GraphGenGoldOutput] = Field(
|
|
270
|
+
default_factory=list,
|
|
271
|
+
description="Gold/reference outputs (linked to tasks or standalone)",
|
|
272
|
+
)
|
|
273
|
+
default_rubric: Optional[GraphGenRubric] = Field(
|
|
274
|
+
default=None,
|
|
275
|
+
description="Default rubric applied to all tasks (merged with task-specific rubrics)",
|
|
276
|
+
)
|
|
277
|
+
judge_config: GraphGenJudgeConfig = Field(
|
|
278
|
+
default_factory=GraphGenJudgeConfig,
|
|
279
|
+
description="Configuration for the judge",
|
|
280
|
+
)
|
|
281
|
+
# Optional schemas (also accepted at top-level for backward/forward compatibility).
|
|
282
|
+
input_schema: Optional[Dict[str, Any]] = Field(
|
|
283
|
+
default=None, description="JSON Schema for task inputs / initial_state"
|
|
284
|
+
)
|
|
285
|
+
output_schema: Optional[Dict[str, Any]] = Field(
|
|
286
|
+
default=None, description="JSON Schema for expected graph output / final_state"
|
|
287
|
+
)
|
|
288
|
+
# Improvement 3: Changed from Optional[Any] to Optional[Union[str, List[str]]]
|
|
289
|
+
select_output: Optional[Union[str, List[str]]] = Field(
|
|
290
|
+
default=None,
|
|
291
|
+
description=(
|
|
292
|
+
"Optional selector for the public output model. "
|
|
293
|
+
"Can be a string (single key) or list of keys to extract from final_state."
|
|
294
|
+
),
|
|
295
|
+
)
|
|
296
|
+
# Improvement 1: Added typed OutputConfig instead of Dict[str, Any]
|
|
297
|
+
output_config: Optional[OutputConfig] = Field(
|
|
298
|
+
default=None,
|
|
299
|
+
description=(
|
|
300
|
+
"Configuration for graph output extraction and validation. "
|
|
301
|
+
"Defines JSON Schema, output format, and extraction paths."
|
|
302
|
+
),
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
@field_validator("tasks")
|
|
306
|
+
@classmethod
|
|
307
|
+
def validate_unique_task_ids(cls, v: List[GraphGenTask]) -> List[GraphGenTask]:
|
|
308
|
+
"""Ensure all task IDs are unique."""
|
|
309
|
+
ids = [task.id for task in v]
|
|
310
|
+
if len(ids) != len(set(ids)):
|
|
311
|
+
duplicates = [id for id in ids if ids.count(id) > 1]
|
|
312
|
+
raise ValueError(f"Duplicate task IDs found: {set(duplicates)}")
|
|
313
|
+
return v
|
|
314
|
+
|
|
315
|
+
# Improvement 2: Added ValidationInfo type hint
|
|
316
|
+
@field_validator("gold_outputs")
|
|
317
|
+
@classmethod
|
|
318
|
+
def validate_gold_output_task_ids(
|
|
319
|
+
cls, v: List[GraphGenGoldOutput], info: ValidationInfo
|
|
320
|
+
) -> List[GraphGenGoldOutput]:
|
|
321
|
+
"""Ensure gold output task_ids reference valid tasks.
|
|
322
|
+
|
|
323
|
+
Args:
|
|
324
|
+
v: The list of gold outputs being validated.
|
|
325
|
+
info: Pydantic ValidationInfo providing access to other fields via info.data.
|
|
326
|
+
|
|
327
|
+
Returns:
|
|
328
|
+
The validated list of gold outputs.
|
|
329
|
+
|
|
330
|
+
Raises:
|
|
331
|
+
ValueError: If a gold output references a non-existent task ID.
|
|
332
|
+
"""
|
|
333
|
+
tasks = info.data.get("tasks", [])
|
|
334
|
+
if tasks:
|
|
335
|
+
# Improvement 8: Handle both GraphGenTask objects and raw dicts during validation
|
|
336
|
+
valid_task_ids: set[str] = set()
|
|
337
|
+
for task in tasks:
|
|
338
|
+
if isinstance(task, GraphGenTask):
|
|
339
|
+
valid_task_ids.add(task.id)
|
|
340
|
+
elif isinstance(task, dict):
|
|
341
|
+
# During validation, tasks might still be raw dicts
|
|
342
|
+
task_id = task.get("id")
|
|
343
|
+
if task_id:
|
|
344
|
+
valid_task_ids.add(task_id)
|
|
345
|
+
|
|
346
|
+
for gold in v:
|
|
347
|
+
if gold.task_id and gold.task_id not in valid_task_ids:
|
|
348
|
+
raise ValueError(
|
|
349
|
+
f"Gold output references invalid task_id: {gold.task_id}"
|
|
350
|
+
)
|
|
351
|
+
return v
|
|
352
|
+
|
|
353
|
+
# Improvement 3: Validator for select_output type
|
|
354
|
+
@field_validator("select_output", mode="before")
|
|
355
|
+
@classmethod
|
|
356
|
+
def validate_select_output(
|
|
357
|
+
cls, v: Any
|
|
358
|
+
) -> Optional[Union[str, List[str]]]:
|
|
359
|
+
"""Validate select_output is a string or list of strings."""
|
|
360
|
+
if v is None:
|
|
361
|
+
return None
|
|
362
|
+
if isinstance(v, str):
|
|
363
|
+
return v
|
|
364
|
+
if isinstance(v, list):
|
|
365
|
+
if all(isinstance(item, str) for item in v):
|
|
366
|
+
return v
|
|
367
|
+
raise ValueError("select_output list must contain only strings")
|
|
368
|
+
raise ValueError(
|
|
369
|
+
f"select_output must be a string or list of strings, got {type(v).__name__}"
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
# Improvement 1: Validator for backward-compatible OutputConfig
|
|
373
|
+
@field_validator("output_config", mode="before")
|
|
374
|
+
@classmethod
|
|
375
|
+
def validate_output_config(cls, v: Any) -> Optional[OutputConfig]:
|
|
376
|
+
"""Convert dict to OutputConfig for backward compatibility."""
|
|
377
|
+
if v is None:
|
|
378
|
+
return None
|
|
379
|
+
if isinstance(v, OutputConfig):
|
|
380
|
+
return v
|
|
381
|
+
if isinstance(v, dict):
|
|
382
|
+
return OutputConfig.model_validate(v)
|
|
383
|
+
raise ValueError(
|
|
384
|
+
f"output_config must be a dict or OutputConfig, got {type(v).__name__}"
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
def get_task_by_id(self, task_id: str) -> Optional[GraphGenTask]:
|
|
388
|
+
"""Get a task by its ID."""
|
|
389
|
+
for task in self.tasks:
|
|
390
|
+
if task.id == task_id:
|
|
391
|
+
return task
|
|
392
|
+
return None
|
|
393
|
+
|
|
394
|
+
# Improvement 9: Clarified docstring for get_task_by_index
|
|
395
|
+
def get_task_by_index(self, index: int) -> Optional[GraphGenTask]:
|
|
396
|
+
"""Get a task by zero-based index.
|
|
397
|
+
|
|
398
|
+
Args:
|
|
399
|
+
index: Zero-based index into tasks list (0 to len(tasks)-1).
|
|
400
|
+
|
|
401
|
+
Returns:
|
|
402
|
+
Task at the specified index, or None if index is out of range.
|
|
403
|
+
|
|
404
|
+
Note:
|
|
405
|
+
This method does NOT wrap around. For seed-based lookup that wraps
|
|
406
|
+
around, use get_task_by_seed() in GraphGenTaskAppState instead.
|
|
407
|
+
"""
|
|
408
|
+
if 0 <= index < len(self.tasks):
|
|
409
|
+
return self.tasks[index]
|
|
410
|
+
return None
|
|
411
|
+
|
|
412
|
+
def get_gold_output_for_task(self, task_id: str) -> Optional[GraphGenGoldOutput]:
|
|
413
|
+
"""Get the gold output linked to a specific task."""
|
|
414
|
+
for gold in self.gold_outputs:
|
|
415
|
+
if gold.task_id == task_id:
|
|
416
|
+
return gold
|
|
417
|
+
return None
|
|
418
|
+
|
|
419
|
+
def get_standalone_gold_outputs(self) -> List[GraphGenGoldOutput]:
|
|
420
|
+
"""Get gold outputs not linked to any task (reference pool for contrastive judge)."""
|
|
421
|
+
return [gold for gold in self.gold_outputs if gold.task_id is None]
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
# Supported policy models (same as prompt opt)
|
|
425
|
+
SUPPORTED_POLICY_MODELS = {
|
|
426
|
+
# Groq (fast, free tier friendly)
|
|
427
|
+
"llama-3.1-8b-instant",
|
|
428
|
+
"llama-3.3-70b-versatile",
|
|
429
|
+
"llama-3.1-70b-versatile",
|
|
430
|
+
# OpenAI
|
|
431
|
+
"gpt-4o-mini",
|
|
432
|
+
"gpt-4o",
|
|
433
|
+
"gpt-4-turbo",
|
|
434
|
+
# OpenAI - GPT-4.1 series
|
|
435
|
+
"gpt-4.1",
|
|
436
|
+
"gpt-4.1-mini",
|
|
437
|
+
"gpt-4.1-nano",
|
|
438
|
+
# Gemini
|
|
439
|
+
"gemini-1.5-flash",
|
|
440
|
+
"gemini-1.5-pro",
|
|
441
|
+
"gemini-2.0-flash",
|
|
442
|
+
"gemini-2.5-flash-image", # Nano Banana - image generation model
|
|
443
|
+
# Claude
|
|
444
|
+
"claude-3-5-sonnet-latest",
|
|
445
|
+
"claude-3-5-haiku-latest",
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
# Supported judge models
|
|
449
|
+
SUPPORTED_JUDGE_MODELS = {
|
|
450
|
+
# Groq (fast, cheap)
|
|
451
|
+
"llama-3.3-70b-versatile",
|
|
452
|
+
"llama-3.1-70b-versatile",
|
|
453
|
+
# OpenAI (higher quality)
|
|
454
|
+
"gpt-4o-mini",
|
|
455
|
+
"gpt-4o",
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
# Default models
|
|
459
|
+
DEFAULT_POLICY_MODEL = "gpt-4o-mini"
|
|
460
|
+
DEFAULT_JUDGE_MODEL = "llama-3.3-70b-versatile"
|
|
461
|
+
DEFAULT_JUDGE_PROVIDER = "groq"
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
class EventInput(BaseModel):
|
|
465
|
+
"""V3-compatible event input for verifier evaluation."""
|
|
466
|
+
|
|
467
|
+
model_config = ConfigDict(extra="allow")
|
|
468
|
+
|
|
469
|
+
event_id: int = Field(..., description="Unique integer event ID")
|
|
470
|
+
event_type: str = Field(..., description="Type of event (e.g., 'runtime', 'environment', 'llm')")
|
|
471
|
+
metadata: Optional[Dict[str, Any]] = Field(default=None, description="Arbitrary event metadata")
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
class SessionTimeStepInput(BaseModel):
|
|
475
|
+
"""V3-compatible session time step input."""
|
|
476
|
+
|
|
477
|
+
model_config = ConfigDict(extra="allow")
|
|
478
|
+
|
|
479
|
+
step_id: str = Field(..., description="Unique step identifier")
|
|
480
|
+
step_index: int = Field(..., description="Zero-based index of the step")
|
|
481
|
+
turn_number: Optional[int] = Field(default=None, description="Optional turn/round number")
|
|
482
|
+
events: List[EventInput] = Field(..., description="List of events in this timestep")
|
|
483
|
+
step_metadata: Optional[Dict[str, Any]] = Field(default=None, description="Optional step-level metadata")
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
class SessionTraceInput(BaseModel):
|
|
487
|
+
"""V3-compatible session trace input for judge evaluation."""
|
|
488
|
+
|
|
489
|
+
model_config = ConfigDict(extra="allow")
|
|
490
|
+
|
|
491
|
+
session_id: str = Field(..., description="Unique session/trace ID")
|
|
492
|
+
session_time_steps: List[SessionTimeStepInput] = Field(..., description="List of steps in the trajectory")
|
|
493
|
+
metadata: Optional[Dict[str, Any]] = Field(default=None, description="Global trace metadata")
|
|
494
|
+
|
|
495
|
+
@model_validator(mode="before")
|
|
496
|
+
@classmethod
|
|
497
|
+
def _reject_demo_trace_format(cls, data: Any) -> Any:
|
|
498
|
+
if not isinstance(data, dict):
|
|
499
|
+
return data
|
|
500
|
+
if "timesteps" in data and "session_time_steps" not in data:
|
|
501
|
+
raise ValueError(
|
|
502
|
+
"Invalid trace format. Expected V3 SessionTrace with 'session_time_steps', "
|
|
503
|
+
"got demo format with 'timesteps'. Please convert to V3 format."
|
|
504
|
+
)
|
|
505
|
+
return data
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
class GraphGenGraphJudgeRequest(BaseModel):
|
|
509
|
+
"""Request for verifier graph inference."""
|
|
510
|
+
|
|
511
|
+
model_config = ConfigDict(extra="forbid")
|
|
512
|
+
|
|
513
|
+
job_id: str = Field(..., description="GraphGen or GEPA job ID (must be a verifier graph)")
|
|
514
|
+
session_trace: SessionTraceInput = Field(
|
|
515
|
+
..., description="V3 session trace to evaluate (must include event_ids for reward linking)"
|
|
516
|
+
)
|
|
517
|
+
context: Optional[Dict[str, Any]] = Field(
|
|
518
|
+
default=None, description="Additional context for evaluation (rubric, task description, etc.)"
|
|
519
|
+
)
|
|
520
|
+
prompt_snapshot_id: Optional[str] = Field(
|
|
521
|
+
default=None, description="Specific snapshot to use (default: best)"
|
|
522
|
+
)
|
|
523
|
+
|
|
524
|
+
@model_validator(mode="before")
|
|
525
|
+
@classmethod
|
|
526
|
+
def _accept_legacy_trace_key(cls, data: Any) -> Any:
|
|
527
|
+
if not isinstance(data, dict):
|
|
528
|
+
return data
|
|
529
|
+
if "session_trace" not in data and "trace" in data:
|
|
530
|
+
data = dict(data)
|
|
531
|
+
data["session_trace"] = data.pop("trace")
|
|
532
|
+
return data
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
class GraphGenGraphCompletionsModelUsage(BaseModel):
|
|
536
|
+
"""Token usage and cost for a single model in a graph completion."""
|
|
537
|
+
|
|
538
|
+
model: str = Field(..., description="Model identifier")
|
|
539
|
+
provider: Optional[str] = Field(default=None, description="Provider (openai, anthropic, etc.)")
|
|
540
|
+
elapsed_ms: int = Field(default=0, description="LLM request time in milliseconds")
|
|
541
|
+
prompt_tokens: int = Field(default=0, description="Input tokens used")
|
|
542
|
+
completion_tokens: int = Field(default=0, description="Output tokens used")
|
|
543
|
+
total_tokens: int = Field(default=0, description="Total tokens used")
|
|
544
|
+
estimated_cost_usd: Optional[float] = Field(default=None, description="Estimated cost in USD")
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
class EventRewardResponse(BaseModel):
|
|
548
|
+
"""Event-level reward from verifier evaluation."""
|
|
549
|
+
|
|
550
|
+
model_config = ConfigDict(extra="forbid")
|
|
551
|
+
|
|
552
|
+
event_id: int = Field(..., description="Integer event id (FK to synth-ai events table)")
|
|
553
|
+
session_id: str = Field(..., description="Session/trace ID this event belongs to")
|
|
554
|
+
reward_value: float = Field(..., description="Reward value for this event")
|
|
555
|
+
reward_type: Optional[
|
|
556
|
+
Literal["shaped", "sparse", "achievement", "penalty", "evaluator", "human"]
|
|
557
|
+
] = Field(default="evaluator", description="Type of reward")
|
|
558
|
+
key: Optional[str] = Field(default=None, description="Optional key/label for the reward")
|
|
559
|
+
turn_number: Optional[int] = Field(default=None, description="Turn/timestep number in the trace")
|
|
560
|
+
source: Optional[Literal["environment", "runner", "evaluator", "human"]] = Field(
|
|
561
|
+
default="evaluator", description="Reward source"
|
|
562
|
+
)
|
|
563
|
+
annotation: Optional[Dict[str, Any]] = Field(default=None, description="Additional annotations (feedback, etc.)")
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
class OutcomeRewardResponse(BaseModel):
|
|
567
|
+
"""Outcome-level reward from verifier evaluation."""
|
|
568
|
+
|
|
569
|
+
model_config = ConfigDict(extra="forbid")
|
|
570
|
+
|
|
571
|
+
session_id: str = Field(..., description="Session/trace ID")
|
|
572
|
+
total_reward: float = Field(..., description="Overall reward/score for the episode (0-1)")
|
|
573
|
+
achievements_count: int = Field(default=0, description="Number of achievements unlocked")
|
|
574
|
+
total_steps: int = Field(default=0, description="Total timesteps in the trace")
|
|
575
|
+
metadata: Optional[Dict[str, Any]] = Field(default=None, description="Additional metadata (feedback, etc.)")
|
|
576
|
+
annotation: Optional[Dict[str, Any]] = Field(default=None, description="Additional annotations (free-form)")
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
class GraphGenGraphJudgeResponse(BaseModel):
|
|
580
|
+
"""Response from verifier graph inference."""
|
|
581
|
+
|
|
582
|
+
started_at: datetime = Field(..., description="When inference request started (UTC)")
|
|
583
|
+
ended_at: datetime = Field(..., description="When inference request completed (UTC)")
|
|
584
|
+
elapsed_ms: int = Field(..., description="Total elapsed time in milliseconds")
|
|
585
|
+
job_id: str = Field(..., description="GEPA job ID")
|
|
586
|
+
snapshot_id: str = Field(..., description="Snapshot ID used for inference")
|
|
587
|
+
|
|
588
|
+
# Structured reward outputs (synth-ai compatible)
|
|
589
|
+
event_rewards: List[EventRewardResponse] = Field(default_factory=list, description="Per-event rewards")
|
|
590
|
+
outcome_reward: Optional[OutcomeRewardResponse] = Field(default=None, description="Episode-level outcome reward")
|
|
591
|
+
|
|
592
|
+
# Legacy fields (kept for backward compatibility)
|
|
593
|
+
score: float = Field(..., ge=0.0, le=1.0, description="Evaluation score (0-1)")
|
|
594
|
+
reasoning: Optional[str] = Field(default=None, description="Explanation for the score")
|
|
595
|
+
sub_scores: Optional[Dict[str, float]] = Field(default=None, description="Breakdown scores by criteria")
|
|
596
|
+
raw_output: Optional[Dict[str, Any]] = Field(default=None, description="Full raw output from the verifier graph")
|
|
597
|
+
|
|
598
|
+
usage: List[GraphGenGraphCompletionsModelUsage] = Field(default_factory=list, description="Token usage per model")
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
class GraphGenGraphVerifierRequest(GraphGenGraphJudgeRequest):
|
|
602
|
+
"""Alias for GraphGenGraphJudgeRequest with verifier terminology."""
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
class GraphGenGraphVerifierResponse(GraphGenGraphJudgeResponse):
|
|
606
|
+
"""Alias for GraphGenGraphJudgeResponse with verifier terminology."""
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
class GraphGenJobConfig(BaseModel):
|
|
610
|
+
"""Configuration for an GraphGen optimization job.
|
|
611
|
+
|
|
612
|
+
Example:
|
|
613
|
+
config = GraphGenJobConfig(
|
|
614
|
+
policy_model="gpt-4o-mini",
|
|
615
|
+
rollout_budget=100,
|
|
616
|
+
proposer_effort="medium",
|
|
617
|
+
)
|
|
618
|
+
"""
|
|
619
|
+
|
|
620
|
+
# Graph type
|
|
621
|
+
graph_type: Literal["policy", "verifier", "rlm"] = Field(
|
|
622
|
+
default="policy",
|
|
623
|
+
description=(
|
|
624
|
+
"Type of graph to train: "
|
|
625
|
+
"'policy' (input->output), "
|
|
626
|
+
"'verifier' (trace->score), "
|
|
627
|
+
"'rlm' (massive context via tool-using RLM-style execution)"
|
|
628
|
+
),
|
|
629
|
+
)
|
|
630
|
+
|
|
631
|
+
# Policy model (what the prompt runs on)
|
|
632
|
+
policy_model: str = Field(
|
|
633
|
+
default=DEFAULT_POLICY_MODEL,
|
|
634
|
+
description="Model to use for policy inference",
|
|
635
|
+
)
|
|
636
|
+
policy_provider: Optional[str] = Field(
|
|
637
|
+
default=None,
|
|
638
|
+
description="Provider for policy model (auto-detected if not specified)",
|
|
639
|
+
)
|
|
640
|
+
|
|
641
|
+
# Optimization budget
|
|
642
|
+
rollout_budget: int = Field(
|
|
643
|
+
default=100,
|
|
644
|
+
ge=10,
|
|
645
|
+
le=10000,
|
|
646
|
+
description="Total number of rollouts for optimization",
|
|
647
|
+
)
|
|
648
|
+
|
|
649
|
+
# Proposer settings (controls prompt mutation quality/cost)
|
|
650
|
+
proposer_effort: Literal["low", "medium", "high"] = Field(
|
|
651
|
+
default="medium",
|
|
652
|
+
description=(
|
|
653
|
+
"Proposer effort level (affects mutation quality and cost). "
|
|
654
|
+
"Note: 'low' is not allowed by the backend as gpt-4.1-mini is too weak for graph generation. "
|
|
655
|
+
"Use 'medium' (gpt-4.1) or 'high' (gpt-5.2)."
|
|
656
|
+
),
|
|
657
|
+
)
|
|
658
|
+
|
|
659
|
+
# Judge settings (if not specified in dataset)
|
|
660
|
+
judge_model: Optional[str] = Field(
|
|
661
|
+
default=None,
|
|
662
|
+
description="Override judge model from dataset",
|
|
663
|
+
)
|
|
664
|
+
judge_provider: Optional[str] = Field(
|
|
665
|
+
default=None,
|
|
666
|
+
description="Override judge provider from dataset",
|
|
667
|
+
)
|
|
668
|
+
|
|
669
|
+
# Advanced settings
|
|
670
|
+
population_size: int = Field(
|
|
671
|
+
default=4,
|
|
672
|
+
ge=2,
|
|
673
|
+
le=20,
|
|
674
|
+
description="Population size for GEPA",
|
|
675
|
+
)
|
|
676
|
+
num_generations: Optional[int] = Field(
|
|
677
|
+
default=None,
|
|
678
|
+
ge=1,
|
|
679
|
+
le=50,
|
|
680
|
+
description="Number of generations for GEPA (auto-calculated from budget if not specified)",
|
|
681
|
+
)
|
|
682
|
+
num_parents: int = Field(
|
|
683
|
+
default=2,
|
|
684
|
+
ge=1,
|
|
685
|
+
le=10,
|
|
686
|
+
description="Number of parents for selection",
|
|
687
|
+
)
|
|
688
|
+
evaluation_seeds: Optional[List[int]] = Field(
|
|
689
|
+
default=None,
|
|
690
|
+
description="Specific seeds to use for evaluation (auto-generated if not specified)",
|
|
691
|
+
)
|
|
692
|
+
problem_spec: Optional[str] = Field(
|
|
693
|
+
default=None,
|
|
694
|
+
description=(
|
|
695
|
+
"Detailed problem specification for the graph proposer. "
|
|
696
|
+
"Include domain-specific information like valid output labels for classification, "
|
|
697
|
+
"constraints, format requirements, or any other info needed to generate correct graphs. "
|
|
698
|
+
"This is combined with the dataset's task_description to form the full proposer context."
|
|
699
|
+
),
|
|
700
|
+
)
|
|
701
|
+
target_llm_calls: Optional[int] = Field(
|
|
702
|
+
default=None,
|
|
703
|
+
ge=1,
|
|
704
|
+
le=10,
|
|
705
|
+
description=(
|
|
706
|
+
"Target number of LLM calls for the graph (1-10). "
|
|
707
|
+
"Controls max_llm_calls_per_run in the graph_evolve proposer. "
|
|
708
|
+
"If not specified, defaults to 5."
|
|
709
|
+
),
|
|
710
|
+
)
|
|
711
|
+
configured_tools: Optional[List[Dict[str, Any]]] = Field(
|
|
712
|
+
default=None,
|
|
713
|
+
description=(
|
|
714
|
+
"Optional job-bound tool allowlist for graph optimization (required for RLM graphs). "
|
|
715
|
+
"Each tool binding should look like: "
|
|
716
|
+
"{'name': 'materialize_context', 'kind': 'rlm_materialize', 'stateful': True} or "
|
|
717
|
+
"{'name': 'local_grep', 'kind': 'rlm_local_grep', 'stateful': False}. "
|
|
718
|
+
"See backend/graphs/tooling/catalog.py for available tool kinds."
|
|
719
|
+
),
|
|
720
|
+
)
|
|
721
|
+
|
|
722
|
+
def get_policy_provider(self) -> str:
|
|
723
|
+
"""Get the policy provider (auto-detect if not specified)."""
|
|
724
|
+
if self.policy_provider:
|
|
725
|
+
return self.policy_provider
|
|
726
|
+
return _detect_provider(self.policy_model)
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
def _detect_provider(model: str) -> str:
|
|
730
|
+
"""Detect provider from model name."""
|
|
731
|
+
model_lower = model.lower()
|
|
732
|
+
if model_lower.startswith("gpt-") or model_lower.startswith("o1"):
|
|
733
|
+
return "openai"
|
|
734
|
+
elif model_lower.startswith("gemini"):
|
|
735
|
+
return "google"
|
|
736
|
+
elif model_lower.startswith("claude"):
|
|
737
|
+
return "anthropic"
|
|
738
|
+
elif "llama" in model_lower or "mixtral" in model_lower:
|
|
739
|
+
return "groq"
|
|
740
|
+
else:
|
|
741
|
+
# Default to OpenAI for unknown models
|
|
742
|
+
return "openai"
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
def parse_graphgen_taskset(data: Dict[str, Any]) -> GraphGenTaskSet:
|
|
746
|
+
"""Parse a dictionary into an GraphGenTaskSet.
|
|
747
|
+
|
|
748
|
+
Args:
|
|
749
|
+
data: Dictionary containing the taskset data (from JSON)
|
|
750
|
+
|
|
751
|
+
Returns:
|
|
752
|
+
Validated GraphGenTaskSet
|
|
753
|
+
|
|
754
|
+
Raises:
|
|
755
|
+
ValueError: If validation fails
|
|
756
|
+
"""
|
|
757
|
+
try:
|
|
758
|
+
return GraphGenTaskSet.model_validate(data)
|
|
759
|
+
except Exception as e:
|
|
760
|
+
raise ValueError(f"Invalid GraphGenTaskSet format: {e}") from e
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
def load_graphgen_taskset(path: str | Path) -> GraphGenTaskSet:
|
|
764
|
+
"""Load an GraphGenTaskSet from a JSON file.
|
|
765
|
+
|
|
766
|
+
Args:
|
|
767
|
+
path: Path to JSON file
|
|
768
|
+
|
|
769
|
+
Returns:
|
|
770
|
+
Validated GraphGenTaskSet
|
|
771
|
+
|
|
772
|
+
Raises:
|
|
773
|
+
FileNotFoundError: If file doesn't exist
|
|
774
|
+
ValueError: If validation fails
|
|
775
|
+
"""
|
|
776
|
+
path = Path(path)
|
|
777
|
+
if not path.exists():
|
|
778
|
+
raise FileNotFoundError(f"Dataset file not found: {path}")
|
|
779
|
+
|
|
780
|
+
with open(path, "r", encoding="utf-8") as f:
|
|
781
|
+
data = json.load(f)
|
|
782
|
+
|
|
783
|
+
return parse_graphgen_taskset(data)
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
# GraphGen aliases (preferred names)
|
|
787
|
+
GraphGenTaskSet = GraphGenTaskSet
|
|
788
|
+
GraphGenTaskSetMetadata = GraphGenTaskSetMetadata
|
|
789
|
+
GraphGenTask = GraphGenTask
|
|
790
|
+
GraphGenGoldOutput = GraphGenGoldOutput
|
|
791
|
+
GraphGenRubric = GraphGenRubric
|
|
792
|
+
GraphGenRubricCriterion = GraphGenRubricCriterion
|
|
793
|
+
GraphGenRubricOutcome = GraphGenRubricOutcome
|
|
794
|
+
GraphGenRubricEvents = GraphGenRubricEvents
|
|
795
|
+
GraphGenJudgeConfig = GraphGenJudgeConfig
|
|
796
|
+
GraphGenJobConfig = GraphGenJobConfig
|
|
797
|
+
parse_graphgen_taskset = parse_graphgen_taskset
|
|
798
|
+
load_graphgen_taskset = load_graphgen_taskset
|
|
799
|
+
|
|
800
|
+
__all__ = [
|
|
801
|
+
# Core types (new)
|
|
802
|
+
"OutputConfig",
|
|
803
|
+
"JudgeProviderType",
|
|
804
|
+
# GraphGen names (preferred)
|
|
805
|
+
"GraphGenTaskSet",
|
|
806
|
+
"GraphGenTaskSetMetadata",
|
|
807
|
+
"GraphGenTask",
|
|
808
|
+
"GraphGenGoldOutput",
|
|
809
|
+
"GraphGenRubric",
|
|
810
|
+
"GraphGenRubricCriterion",
|
|
811
|
+
"GraphGenRubricOutcome",
|
|
812
|
+
"GraphGenRubricEvents",
|
|
813
|
+
"GraphGenJudgeConfig",
|
|
814
|
+
"GraphGenJobConfig",
|
|
815
|
+
"parse_graphgen_taskset",
|
|
816
|
+
"load_graphgen_taskset",
|
|
817
|
+
# Constants
|
|
818
|
+
"SUPPORTED_POLICY_MODELS",
|
|
819
|
+
"SUPPORTED_JUDGE_MODELS",
|
|
820
|
+
"DEFAULT_POLICY_MODEL",
|
|
821
|
+
"DEFAULT_JUDGE_MODEL",
|
|
822
|
+
"DEFAULT_JUDGE_PROVIDER",
|
|
823
|
+
]
|