synth-ai 0.2.6.dev1__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/cli/demo_apps/core/cli.py +1735 -0
- 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 +117 -51
- 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/cli/demo_apps/demo_task_apps/math/_common.py +16 -0
- 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} +21 -3
- 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 -102
- 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.6.dev1.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 -131
- synth_ai/cli/legacy_root_backup.py +0 -470
- synth_ai/cli/man.py +0 -106
- synth_ai/cli/rl_demo.py +0 -137
- synth_ai/cli/status.py +0 -133
- synth_ai/config/base_url.py +0 -98
- 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/core/cli.py +0 -685
- synth_ai/demos/demo_task_apps/__init__.py +0 -1
- synth_ai/demos/demo_task_apps/math/config.toml +0 -44
- synth_ai/demos/demo_task_apps/math/deploy_task_app.sh +0 -22
- 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 -724
- 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 -91
- 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/http.py +0 -102
- 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 -220
- 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 -140
- synth_ai/v0/tracing/context.py +0 -146
- synth_ai/v0/tracing/decorators.py +0 -680
- 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 -510
- 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 -140
- synth_ai/v0/tracing_v1/context.py +0 -146
- synth_ai/v0/tracing_v1/decorators.py +0 -701
- 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 -525
- synth_ai/v0/tracing_v1/utils.py +0 -9
- synth_ai/zyk/__init__.py +0 -30
- synth_ai-0.2.6.dev1.dist-info/METADATA +0 -106
- synth_ai-0.2.6.dev1.dist-info/RECORD +0 -416
- /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.6.dev1.dist-info → synth_ai-0.4.3.dist-info}/WHEEL +0 -0
- {synth_ai-0.2.6.dev1.dist-info → synth_ai-0.4.3.dist-info}/licenses/LICENSE +0 -0
- {synth_ai-0.2.6.dev1.dist-info → synth_ai-0.4.3.dist-info}/top_level.txt +0 -0
synth_ai/__init__.py
CHANGED
|
@@ -1,36 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
Synth AI - Software for aiding the best and multiplying the will.
|
|
3
|
-
"""
|
|
1
|
+
from __future__ import annotations
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
from
|
|
7
|
-
|
|
8
|
-
try:
|
|
9
|
-
from synth_ai.lm.core.main import LM # Moved from zyk to lm for better organization
|
|
10
|
-
except Exception: # allow minimal imports (e.g., tracing) without LM stack
|
|
11
|
-
LM = None # type: ignore
|
|
12
|
-
try:
|
|
13
|
-
from synth_ai.lm.provider_support.anthropic import Anthropic, AsyncAnthropic
|
|
14
|
-
except Exception: # optional in minimal environments
|
|
15
|
-
Anthropic = AsyncAnthropic = None # type: ignore
|
|
3
|
+
from importlib import metadata as _metadata
|
|
4
|
+
from importlib.metadata import PackageNotFoundError
|
|
5
|
+
from pathlib import Path
|
|
16
6
|
|
|
17
|
-
#
|
|
7
|
+
# Install log filter as early as possible to suppress noisy codex_otel logs
|
|
18
8
|
try:
|
|
19
|
-
from synth_ai.
|
|
9
|
+
from synth_ai.core.log_filter import install_log_filter
|
|
10
|
+
install_log_filter()
|
|
20
11
|
except Exception:
|
|
21
|
-
|
|
12
|
+
# Silently fail if log filter can't be installed
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
# Judge schemas moved to sdk/judging/schemas.py
|
|
16
|
+
from synth_ai.sdk.judging.schemas import (
|
|
17
|
+
CriterionScorePayload,
|
|
18
|
+
JudgeOptions,
|
|
19
|
+
JudgeScoreRequest,
|
|
20
|
+
JudgeScoreResponse,
|
|
21
|
+
JudgeTaskApp,
|
|
22
|
+
JudgeTracePayload,
|
|
23
|
+
ReviewPayload,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
try: # Prefer the installed package metadata when available
|
|
27
|
+
__version__ = _metadata.version("synth-ai")
|
|
28
|
+
except PackageNotFoundError: # Fallback to pyproject version for editable installs
|
|
29
|
+
try:
|
|
30
|
+
import tomllib as _toml # Python 3.11+
|
|
31
|
+
except ModuleNotFoundError: # pragma: no cover - legacy interpreter guard
|
|
32
|
+
import tomli as _toml # type: ignore[no-redef]
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
pyproject_path = Path(__file__).resolve().parents[1] / "pyproject.toml"
|
|
36
|
+
with pyproject_path.open("rb") as fh:
|
|
37
|
+
_pyproject = _toml.load(fh)
|
|
38
|
+
__version__ = str(_pyproject["project"]["version"])
|
|
39
|
+
except Exception:
|
|
40
|
+
__version__ = "0.0.0.dev0"
|
|
22
41
|
|
|
23
42
|
# Legacy tracing v1 is not required for v3 usage and can be unavailable in minimal envs.
|
|
24
43
|
tracing = None # type: ignore
|
|
25
44
|
EventPartitionElement = RewardSignal = SystemTrace = TrainingQuestion = None # type: ignore
|
|
26
45
|
trace_event_async = trace_event_sync = upload = None # type: ignore
|
|
27
46
|
|
|
28
|
-
__version__ = "0.2.6.dev1"
|
|
29
47
|
__all__ = [
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
48
|
+
# Judge API contracts
|
|
49
|
+
"JudgeScoreRequest",
|
|
50
|
+
"JudgeScoreResponse",
|
|
51
|
+
"JudgeOptions",
|
|
52
|
+
"JudgeTaskApp",
|
|
53
|
+
"JudgeTracePayload",
|
|
54
|
+
"ReviewPayload",
|
|
55
|
+
"CriterionScorePayload",
|
|
36
56
|
] # Explicitly define public API (v1 tracing omitted in minimal env)
|
synth_ai/__main__.py
CHANGED
|
@@ -3,7 +3,34 @@
|
|
|
3
3
|
Allow running synth_ai as a module: python -m synth_ai
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import sys
|
|
7
|
+
import traceback
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
# Log CLI invocation immediately
|
|
10
|
+
if "train" in sys.argv:
|
|
11
|
+
sys.stderr.write(f"[SYNTH_AI_MAIN] Module invoked with args: {sys.argv}\n")
|
|
12
|
+
sys.stderr.flush()
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
from .cli import cli
|
|
16
|
+
|
|
17
|
+
if "train" in sys.argv:
|
|
18
|
+
sys.stderr.write("[SYNTH_AI_MAIN] CLI imported successfully\n")
|
|
19
|
+
sys.stderr.flush()
|
|
20
|
+
|
|
21
|
+
if __name__ == "__main__":
|
|
22
|
+
if "train" in sys.argv:
|
|
23
|
+
sys.stderr.write("[SYNTH_AI_MAIN] About to call cli()\n")
|
|
24
|
+
sys.stderr.flush()
|
|
25
|
+
try:
|
|
26
|
+
cli()
|
|
27
|
+
except Exception as e:
|
|
28
|
+
sys.stderr.write(f"[SYNTH_AI_MAIN] CLI call failed: {type(e).__name__}: {e}\n")
|
|
29
|
+
sys.stderr.flush()
|
|
30
|
+
traceback.print_exc(file=sys.stderr)
|
|
31
|
+
raise
|
|
32
|
+
except Exception as e:
|
|
33
|
+
sys.stderr.write(f"[SYNTH_AI_MAIN] Import failed: {type(e).__name__}: {e}\n")
|
|
34
|
+
sys.stderr.flush()
|
|
35
|
+
traceback.print_exc(file=sys.stderr)
|
|
36
|
+
raise
|
synth_ai/cli/__init__.py
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
"""CLI subcommands for Synth AI.
|
|
2
2
|
|
|
3
|
-
This package hosts modular commands
|
|
4
|
-
|
|
5
|
-
pyproject entry point `synth_ai.cli:cli`.
|
|
3
|
+
This package hosts modular commands and exposes a top-level Click group
|
|
4
|
+
named `cli` compatible with the pyproject entry point `synth_ai.cli:cli`.
|
|
6
5
|
"""
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
import importlib
|
|
8
|
+
import sys
|
|
9
|
+
from collections.abc import Callable
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from synth_ai.cli.agents import claude_cmd, codex_cmd, opencode_cmd
|
|
13
|
+
from synth_ai.cli.demos.demo import demo_cmd
|
|
14
|
+
from synth_ai.cli.deploy import deploy_cmd
|
|
15
|
+
from synth_ai.cli.infra.mcp import mcp_cmd
|
|
16
|
+
from synth_ai.cli.infra.modal_app import modal_app_cmd
|
|
17
|
+
from synth_ai.cli.infra.setup import setup_cmd
|
|
18
|
+
from synth_ai.cli.task_apps import task_app_cmd
|
|
19
|
+
from synth_ai.cli.training.train_cfg import train_cfg_cmd
|
|
9
20
|
|
|
10
21
|
# Load environment variables from a local .env if present (repo root)
|
|
11
22
|
try:
|
|
@@ -17,61 +28,105 @@ except Exception:
|
|
|
17
28
|
# dotenv is optional at runtime; proceed if unavailable
|
|
18
29
|
pass
|
|
19
30
|
|
|
31
|
+
def _callable_from(module: Any, attr: str) -> Callable[..., Any] | None:
|
|
32
|
+
candidate = getattr(module, attr, None)
|
|
33
|
+
return candidate if callable(candidate) else None
|
|
20
34
|
|
|
21
|
-
from .root import cli # new canonical CLI entrypoint
|
|
22
35
|
|
|
23
|
-
|
|
24
|
-
try:
|
|
25
|
-
|
|
36
|
+
def _maybe_import(module_path: str) -> Any | None:
|
|
37
|
+
try:
|
|
38
|
+
return importlib.import_module(module_path)
|
|
39
|
+
except Exception:
|
|
40
|
+
return None
|
|
26
41
|
|
|
27
|
-
_watch.register(cli)
|
|
28
|
-
except Exception:
|
|
29
|
-
pass
|
|
30
|
-
try:
|
|
31
|
-
from . import balance as _balance
|
|
32
42
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
def _maybe_call(module_path: str, attr: str, *args: Any, **kwargs: Any) -> None:
|
|
44
|
+
module = _maybe_import(module_path)
|
|
45
|
+
if not module:
|
|
46
|
+
return
|
|
47
|
+
fn = _callable_from(module, attr)
|
|
48
|
+
if fn:
|
|
49
|
+
fn(*args, **kwargs)
|
|
38
50
|
|
|
39
|
-
_man.register(cli)
|
|
40
|
-
except Exception:
|
|
41
|
-
pass
|
|
42
|
-
try:
|
|
43
|
-
from . import traces as _traces
|
|
44
51
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
pass
|
|
48
|
-
try:
|
|
49
|
-
from . import recent as _recent
|
|
52
|
+
# Apply Typer patch if available
|
|
53
|
+
_maybe_call("synth_ai.cli._internal.typer_patch", "patch_typer_make_metavar")
|
|
50
54
|
|
|
51
|
-
_recent.register(cli)
|
|
52
|
-
except Exception:
|
|
53
|
-
pass
|
|
54
|
-
try:
|
|
55
|
-
from . import calc as _calc
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
from . import status as _status
|
|
56
|
+
_cli_module = _maybe_import("synth_ai.cli.root")
|
|
57
|
+
if not _cli_module:
|
|
58
|
+
raise ImportError("synth_ai.cli.root is required for CLI entrypoint")
|
|
59
|
+
cli = _cli_module.cli # type: ignore[attr-defined]
|
|
62
60
|
|
|
63
|
-
_status.register(cli)
|
|
64
|
-
except Exception:
|
|
65
|
-
pass
|
|
66
|
-
try:
|
|
67
|
-
from . import demo as _demo
|
|
68
61
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
|
|
63
|
+
# Register core commands implemented as standalone modules
|
|
64
|
+
|
|
65
|
+
cli.add_command(claude_cmd, name="claude")
|
|
66
|
+
cli.add_command(codex_cmd, name="codex")
|
|
67
|
+
cli.add_command(demo_cmd, name="demo")
|
|
68
|
+
cli.add_command(deploy_cmd, name="deploy")
|
|
69
|
+
cli.add_command(mcp_cmd, name="mcp")
|
|
70
|
+
cli.add_command(modal_app_cmd, name="modal-app")
|
|
71
|
+
cli.add_command(opencode_cmd, name="opencode")
|
|
72
|
+
cli.add_command(setup_cmd, name="setup")
|
|
73
|
+
cli.add_command(task_app_cmd, name="task-app")
|
|
74
|
+
cli.add_command(train_cfg_cmd, name="train-cfg")
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
# Register optional subcommands packaged under synth_ai.cli.*
|
|
78
|
+
for _module_path in ("synth_ai.cli.commands.demo", "synth_ai.cli.infra.turso"):
|
|
79
|
+
module = _maybe_import(_module_path)
|
|
80
|
+
if not module:
|
|
81
|
+
continue
|
|
82
|
+
sub_name = _module_path.rsplit(".", 1)[-1]
|
|
83
|
+
setattr(sys.modules[__name__], sub_name, module)
|
|
84
|
+
fn = _callable_from(module, "register")
|
|
85
|
+
if fn:
|
|
86
|
+
fn(cli)
|
|
87
|
+
|
|
88
|
+
# Smoke command registration (CLI-only helper)
|
|
72
89
|
try:
|
|
73
|
-
from . import
|
|
90
|
+
from synth_ai.cli.commands.smoke import register as register_smoke
|
|
74
91
|
|
|
75
|
-
|
|
92
|
+
register_smoke(cli)
|
|
76
93
|
except Exception:
|
|
77
94
|
pass
|
|
95
|
+
|
|
96
|
+
# Register help command
|
|
97
|
+
_maybe_call("synth_ai.cli.commands.help.core", "register", cli)
|
|
98
|
+
|
|
99
|
+
# Register scan command
|
|
100
|
+
_maybe_call("synth_ai.cli.commands.scan", "register", cli)
|
|
101
|
+
|
|
102
|
+
# Register eval command
|
|
103
|
+
_maybe_call("synth_ai.cli.commands.eval", "register", cli)
|
|
104
|
+
|
|
105
|
+
# Train CLI lives under synth_ai.sdk.api.train
|
|
106
|
+
_maybe_call("synth_ai.sdk.api.train", "register", cli)
|
|
107
|
+
|
|
108
|
+
# Task app group/commands are optional and have richer API surface
|
|
109
|
+
_task_apps_module = _maybe_import("synth_ai.cli.task_apps")
|
|
110
|
+
#if _task_apps_module:
|
|
111
|
+
task_app_group = getattr(_task_apps_module, "task_app_group", None)
|
|
112
|
+
if task_app_group is not None:
|
|
113
|
+
cli.add_command(task_app_group, name="task-app-group")
|
|
114
|
+
# Expose common aliases when present
|
|
115
|
+
commands = getattr(task_app_group, "commands", None)
|
|
116
|
+
if isinstance(commands, dict):
|
|
117
|
+
for alias, name in (("serve", "serve"), ("deploy", "deploy"), ("modal-serve", "modal-serve")):
|
|
118
|
+
command = commands.get(name)
|
|
119
|
+
if command is not None:
|
|
120
|
+
cli.add_command(command, name=alias)
|
|
121
|
+
register_task_apps = _callable_from(_task_apps_module, "register")
|
|
122
|
+
if register_task_apps:
|
|
123
|
+
register_task_apps(cli)
|
|
124
|
+
|
|
125
|
+
# Top-level 'info' alias removed; use `synth-ai task-app info` instead
|
|
126
|
+
|
|
127
|
+
# Experiment queue commands
|
|
128
|
+
_maybe_call("synth_ai.cli.utils.experiments", "register", cli)
|
|
129
|
+
_maybe_call("synth_ai.cli.utils.queue", "register", cli)
|
|
130
|
+
|
|
131
|
+
# Artifacts commands
|
|
132
|
+
_maybe_call("synth_ai.cli.commands.artifacts", "register", cli)
|
synth_ai/cli/__main__.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Allow running synth_ai.cli as a module: python -m synth_ai.cli
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
import traceback
|
|
8
|
+
|
|
9
|
+
# Log CLI invocation immediately
|
|
10
|
+
if "train" in sys.argv:
|
|
11
|
+
sys.stderr.write(f"[CLI_MAIN] Module synth_ai.cli invoked with args: {sys.argv}\n")
|
|
12
|
+
sys.stderr.flush()
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
from . import cli
|
|
16
|
+
|
|
17
|
+
if "train" in sys.argv:
|
|
18
|
+
sys.stderr.write("[CLI_MAIN] CLI imported successfully\n")
|
|
19
|
+
sys.stderr.flush()
|
|
20
|
+
|
|
21
|
+
if __name__ == "__main__":
|
|
22
|
+
if "train" in sys.argv:
|
|
23
|
+
sys.stderr.write("[CLI_MAIN] About to call cli()\n")
|
|
24
|
+
sys.stderr.flush()
|
|
25
|
+
try:
|
|
26
|
+
cli()
|
|
27
|
+
except Exception as e:
|
|
28
|
+
sys.stderr.write(f"[CLI_MAIN] CLI call failed: {type(e).__name__}: {e}\n")
|
|
29
|
+
sys.stderr.flush()
|
|
30
|
+
traceback.print_exc(file=sys.stderr)
|
|
31
|
+
raise
|
|
32
|
+
except Exception as e:
|
|
33
|
+
sys.stderr.write(f"[CLI_MAIN] Import failed: {type(e).__name__}: {e}\n")
|
|
34
|
+
sys.stderr.flush()
|
|
35
|
+
traceback.print_exc(file=sys.stderr)
|
|
36
|
+
raise
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import importlib
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def main() -> int:
|
|
8
|
+
# Apply Typer compatibility patch before Modal CLI bootstraps Click/Typer internals.
|
|
9
|
+
try:
|
|
10
|
+
module = importlib.import_module("synth_ai.cli._typer_patch")
|
|
11
|
+
except Exception:
|
|
12
|
+
module = None
|
|
13
|
+
if module is not None:
|
|
14
|
+
patch = getattr(module, "patch_typer_make_metavar", None)
|
|
15
|
+
if callable(patch):
|
|
16
|
+
patch()
|
|
17
|
+
|
|
18
|
+
from modal.__main__ import main as modal_main
|
|
19
|
+
|
|
20
|
+
# Present ourselves as the upstream `modal` CLI so Typer/Click parsing stays intact.
|
|
21
|
+
if sys.argv:
|
|
22
|
+
sys.argv[0] = "modal"
|
|
23
|
+
else:
|
|
24
|
+
sys.argv = ["modal"]
|
|
25
|
+
|
|
26
|
+
result = modal_main()
|
|
27
|
+
return result if result is not None else 0
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if __name__ == "__main__":
|
|
31
|
+
sys.exit(main())
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""Dynamic loader for tracing storage components.
|
|
2
|
+
|
|
3
|
+
This avoids hard dependencies on the tracing_v3 storage package during import
|
|
4
|
+
time, which keeps CLI modules usable in constrained environments while still
|
|
5
|
+
allowing type checkers to resolve the symbols dynamically.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import importlib
|
|
11
|
+
from collections.abc import Callable
|
|
12
|
+
from typing import Any, cast
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def load_storage() -> tuple[Any, Any]:
|
|
16
|
+
"""Return (create_storage, StorageConfig) from tracing_v3.storage."""
|
|
17
|
+
storage_module = cast(Any, importlib.import_module("synth_ai.core.tracing_v3.storage"))
|
|
18
|
+
create_storage = cast(Callable[..., Any], storage_module.create_storage)
|
|
19
|
+
storage_config = storage_module.StorageConfig
|
|
20
|
+
return create_storage, storage_config
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from click import Parameter
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def patch_typer_make_metavar() -> None:
|
|
5
|
+
try:
|
|
6
|
+
from typer.main import TyperArgument, TyperOption # type: ignore[import-untyped]
|
|
7
|
+
except Exception:
|
|
8
|
+
return
|
|
9
|
+
|
|
10
|
+
def _call_get_metavar(param_type: object, param: Parameter) -> str | None:
|
|
11
|
+
getter = getattr(param_type, "get_metavar", None)
|
|
12
|
+
if getter is None:
|
|
13
|
+
return None
|
|
14
|
+
try:
|
|
15
|
+
return getter(param)
|
|
16
|
+
except TypeError:
|
|
17
|
+
try:
|
|
18
|
+
return getter(param, None)
|
|
19
|
+
except TypeError:
|
|
20
|
+
return None
|
|
21
|
+
|
|
22
|
+
def _patched_argument_make_metavar(self, ctx=None) -> str:
|
|
23
|
+
if self.metavar is not None:
|
|
24
|
+
return self.metavar
|
|
25
|
+
var = (self.name or "").upper()
|
|
26
|
+
if not self.required:
|
|
27
|
+
var = f"[{var}]"
|
|
28
|
+
type_var = _call_get_metavar(self.type, self)
|
|
29
|
+
if type_var:
|
|
30
|
+
var += f":{type_var}"
|
|
31
|
+
if self.nargs != 1:
|
|
32
|
+
var += "..."
|
|
33
|
+
return var
|
|
34
|
+
|
|
35
|
+
def _patched_option_make_metavar(self, ctx=None) -> str:
|
|
36
|
+
if self.metavar is not None:
|
|
37
|
+
return self.metavar
|
|
38
|
+
metavar = _call_get_metavar(self.type, self)
|
|
39
|
+
if not metavar:
|
|
40
|
+
name = getattr(self.type, "name", "") or ""
|
|
41
|
+
metavar = name.upper()
|
|
42
|
+
if self.nargs != 1:
|
|
43
|
+
metavar += "..."
|
|
44
|
+
return metavar
|
|
45
|
+
|
|
46
|
+
TyperArgument.make_metavar = _patched_argument_make_metavar # type: ignore[assignment]
|
|
47
|
+
TyperOption.make_metavar = _patched_option_make_metavar # type: ignore[assignment]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Task app validation utilities - imported by task_apps.py"""
|
|
2
|
+
|
|
3
|
+
# This module provides the validate_task_app function for CLI use
|
|
4
|
+
# The actual implementation is imported from the task module
|
|
5
|
+
|
|
6
|
+
import importlib
|
|
7
|
+
from collections.abc import Callable
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
_validators_module: Any | None = None
|
|
11
|
+
validate_task_app: Callable[..., Any] | None = None
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
_validators_module = importlib.import_module("synth_ai.sdk.task.validators")
|
|
15
|
+
except Exception:
|
|
16
|
+
_validators_module = None
|
|
17
|
+
|
|
18
|
+
if _validators_module is not None:
|
|
19
|
+
candidate = getattr(_validators_module, "validate_task_app_endpoint", None)
|
|
20
|
+
if callable(candidate):
|
|
21
|
+
validate_task_app = candidate
|
|
22
|
+
|
|
23
|
+
if validate_task_app is None:
|
|
24
|
+
def _missing_validate_task_app(*_args: Any, **_kwargs: Any) -> None:
|
|
25
|
+
raise RuntimeError("task validation utilities are unavailable in this environment")
|
|
26
|
+
|
|
27
|
+
validate_task_app = _missing_validate_task_app
|
|
28
|
+
|
|
29
|
+
__all__ = ["validate_task_app"]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Coding agent integrations (Claude Code, Codex, OpenCode).
|
|
2
|
+
|
|
3
|
+
These commands launch coding agents with Synth backend configuration
|
|
4
|
+
and optional session management for spending limits.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from synth_ai.cli.agents.claude import claude_cmd
|
|
8
|
+
from synth_ai.cli.agents.codex import codex_cmd
|
|
9
|
+
from synth_ai.cli.agents.opencode import opencode_cmd
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"claude_cmd",
|
|
13
|
+
"codex_cmd",
|
|
14
|
+
"opencode_cmd",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import subprocess
|
|
3
|
+
|
|
4
|
+
import click
|
|
5
|
+
|
|
6
|
+
from synth_ai.cli.lib.agents import write_agents_md
|
|
7
|
+
from synth_ai.cli.lib.bin import install_bin, verify_bin
|
|
8
|
+
from synth_ai.cli.lib.env import resolve_env_var
|
|
9
|
+
from synth_ai.core.paths import get_bin_path
|
|
10
|
+
from synth_ai.core.urls import BACKEND_URL_SYNTH_RESEARCH_ANTHROPIC
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@click.command("claude")
|
|
14
|
+
@click.option(
|
|
15
|
+
"--model",
|
|
16
|
+
"model_name",
|
|
17
|
+
type=str,
|
|
18
|
+
default=None,
|
|
19
|
+
help="Model name to use (Claude Code uses Anthropic models directly)"
|
|
20
|
+
)
|
|
21
|
+
@click.option(
|
|
22
|
+
"--force",
|
|
23
|
+
is_flag=True,
|
|
24
|
+
help="Prompt for API keys even if cached values exist."
|
|
25
|
+
)
|
|
26
|
+
@click.option(
|
|
27
|
+
"--url",
|
|
28
|
+
"override_url",
|
|
29
|
+
type=str,
|
|
30
|
+
default=None,
|
|
31
|
+
)
|
|
32
|
+
def claude_cmd(
|
|
33
|
+
model_name: str | None = None,
|
|
34
|
+
force: bool = False,
|
|
35
|
+
override_url: str | None = None
|
|
36
|
+
) -> None:
|
|
37
|
+
"""Launch Claude Code with optional Synth backend routing.
|
|
38
|
+
|
|
39
|
+
Note: Claude Code uses Anthropic models directly. The --model option
|
|
40
|
+
is for routing through Synth's Anthropic-compatible backend.
|
|
41
|
+
"""
|
|
42
|
+
while True:
|
|
43
|
+
bin_path = get_bin_path("claude")
|
|
44
|
+
if bin_path:
|
|
45
|
+
break
|
|
46
|
+
if not install_bin(
|
|
47
|
+
"Claude Code",
|
|
48
|
+
["curl -fsSL https://claude.ai/install.sh | bash"]
|
|
49
|
+
):
|
|
50
|
+
print("Failed to find your installed Claude Code")
|
|
51
|
+
print("Please install from: https://claude.com/claude-code")
|
|
52
|
+
return
|
|
53
|
+
print(f"Using Claude at {bin_path}")
|
|
54
|
+
|
|
55
|
+
if not verify_bin(bin_path):
|
|
56
|
+
print("Failed to verify Claude Code is runnable")
|
|
57
|
+
return
|
|
58
|
+
|
|
59
|
+
write_agents_md()
|
|
60
|
+
env = os.environ.copy()
|
|
61
|
+
|
|
62
|
+
if model_name is not None:
|
|
63
|
+
# Route through Synth's Anthropic-compatible backend
|
|
64
|
+
if override_url:
|
|
65
|
+
url = f"{override_url.rstrip('/')}/{model_name}"
|
|
66
|
+
print(f"Using override URL with model: {url}")
|
|
67
|
+
else:
|
|
68
|
+
url = f"{BACKEND_URL_SYNTH_RESEARCH_ANTHROPIC}/{model_name}"
|
|
69
|
+
env["ANTHROPIC_BASE_URL"] = url
|
|
70
|
+
api_key = resolve_env_var("SYNTH_API_KEY", override_process_env=force)
|
|
71
|
+
env["ANTHROPIC_AUTH_TOKEN"] = api_key
|
|
72
|
+
env["SYNTH_API_KEY"] = api_key
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
subprocess.run(["claude"], check=True, env=env)
|
|
76
|
+
except subprocess.CalledProcessError:
|
|
77
|
+
print("Failed to launch Claude Code")
|