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
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Environment Registry Module
|
|
3
|
-
|
|
4
|
-
This module provides a global registry system for environment types in the Synth AI framework.
|
|
5
|
-
The registry allows environments to be registered by name and retrieved dynamically,
|
|
6
|
-
enabling flexible environment management and discovery.
|
|
7
|
-
|
|
8
|
-
The registry supports:
|
|
9
|
-
- Dynamic environment registration at runtime
|
|
10
|
-
- Type-safe environment retrieval
|
|
11
|
-
- Environment discovery and listing
|
|
12
|
-
- Centralized environment management
|
|
13
|
-
|
|
14
|
-
Example:
|
|
15
|
-
>>> from synth_ai.environments.environment.registry import register_environment
|
|
16
|
-
>>> from myproject.environments import MyCustomEnvironment
|
|
17
|
-
|
|
18
|
-
>>> # Register a custom environment
|
|
19
|
-
>>> register_environment("my_env", MyCustomEnvironment)
|
|
20
|
-
|
|
21
|
-
>>> # List available environments
|
|
22
|
-
>>> available_envs = list_supported_env_types()
|
|
23
|
-
>>> print("Available environments:", available_envs)
|
|
24
|
-
|
|
25
|
-
>>> # Get environment class for instantiation
|
|
26
|
-
>>> env_cls = get_environment_cls("my_env")
|
|
27
|
-
>>> env_instance = env_cls(task_config)
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
import importlib.metadata
|
|
31
|
-
import logging
|
|
32
|
-
|
|
33
|
-
from synth_ai.environments.stateful.core import StatefulEnvironment
|
|
34
|
-
|
|
35
|
-
logger = logging.getLogger(__name__)
|
|
36
|
-
|
|
37
|
-
# Global registry for environment types
|
|
38
|
-
ENV_REGISTRY: dict[str, type[StatefulEnvironment]] = {}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def register_environment(name: str, cls: type[StatefulEnvironment]) -> None:
|
|
42
|
-
"""
|
|
43
|
-
Register an environment class under a unique name.
|
|
44
|
-
|
|
45
|
-
This function adds an environment class to the global registry, making it
|
|
46
|
-
available for dynamic instantiation by name. This is particularly useful
|
|
47
|
-
for building flexible systems where environment types are determined at
|
|
48
|
-
runtime or configured through external settings.
|
|
49
|
-
|
|
50
|
-
Args:
|
|
51
|
-
name: Unique identifier for the environment. This name will be used
|
|
52
|
-
to retrieve the environment class later. Names should be descriptive
|
|
53
|
-
and follow a consistent naming convention (e.g., "CartPole", "Sokoban").
|
|
54
|
-
cls: The environment class to register. Must be a subclass of
|
|
55
|
-
StatefulEnvironment and implement all required abstract methods.
|
|
56
|
-
|
|
57
|
-
Raises:
|
|
58
|
-
TypeError: If cls is not a subclass of StatefulEnvironment
|
|
59
|
-
ValueError: If name is empty or None
|
|
60
|
-
|
|
61
|
-
Example:
|
|
62
|
-
>>> class MyGameEnvironment(StatefulEnvironment):
|
|
63
|
-
... # Implementation of abstract methods
|
|
64
|
-
... pass
|
|
65
|
-
|
|
66
|
-
>>> register_environment("my_game", MyGameEnvironment)
|
|
67
|
-
>>>
|
|
68
|
-
>>> # Now the environment can be retrieved by name
|
|
69
|
-
>>> env_cls = get_environment_cls("my_game")
|
|
70
|
-
>>> env = env_cls(task_config)
|
|
71
|
-
|
|
72
|
-
Note:
|
|
73
|
-
Environment names are case-sensitive. It's recommended to use
|
|
74
|
-
consistent naming conventions (e.g., lowercase with underscores
|
|
75
|
-
or CamelCase) across your application.
|
|
76
|
-
"""
|
|
77
|
-
ENV_REGISTRY[name] = cls
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def get_environment_cls(env_type: str) -> type[StatefulEnvironment]:
|
|
81
|
-
"""
|
|
82
|
-
Retrieve a registered environment class by name.
|
|
83
|
-
|
|
84
|
-
This function looks up an environment class in the global registry
|
|
85
|
-
and returns it for instantiation. This enables dynamic environment
|
|
86
|
-
creation based on string identifiers, which is useful for:
|
|
87
|
-
- Configuration-driven environment selection
|
|
88
|
-
- API endpoints that accept environment type parameters
|
|
89
|
-
- Plugin systems and modular architectures
|
|
90
|
-
- Testing frameworks that need to test multiple environment types
|
|
91
|
-
|
|
92
|
-
Args:
|
|
93
|
-
env_type: The name of the environment type to retrieve. Must match
|
|
94
|
-
a name that was previously registered using register_environment().
|
|
95
|
-
|
|
96
|
-
Returns:
|
|
97
|
-
Type[StatefulEnvironment]: The environment class that can be instantiated
|
|
98
|
-
with appropriate task parameters.
|
|
99
|
-
|
|
100
|
-
Raises:
|
|
101
|
-
ValueError: If env_type is not found in the registry. The error message
|
|
102
|
-
will include the invalid type name and suggest checking available types.
|
|
103
|
-
|
|
104
|
-
Example:
|
|
105
|
-
>>> # Retrieve and instantiate an environment
|
|
106
|
-
>>> env_cls = get_environment_cls("CartPole")
|
|
107
|
-
>>> environment = env_cls(task_instance)
|
|
108
|
-
>>>
|
|
109
|
-
>>> # Use in configuration-driven scenarios
|
|
110
|
-
>>> config = {"environment_type": "Sokoban", "difficulty": "easy"}
|
|
111
|
-
>>> env_cls = get_environment_cls(config["environment_type"])
|
|
112
|
-
>>> env = env_cls(create_task(config))
|
|
113
|
-
|
|
114
|
-
See Also:
|
|
115
|
-
list_supported_env_types(): Get all available environment type names
|
|
116
|
-
register_environment(): Register new environment types
|
|
117
|
-
"""
|
|
118
|
-
try:
|
|
119
|
-
return ENV_REGISTRY[env_type]
|
|
120
|
-
except KeyError:
|
|
121
|
-
available_types = list(ENV_REGISTRY.keys())
|
|
122
|
-
raise ValueError(
|
|
123
|
-
f"Unsupported environment type: '{env_type}'. Available types: {available_types}"
|
|
124
|
-
) from None
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def list_supported_env_types() -> list[str]:
|
|
128
|
-
"""
|
|
129
|
-
List all registered environment type names.
|
|
130
|
-
|
|
131
|
-
This function returns a list of all environment names that have been
|
|
132
|
-
registered in the global registry. It's useful for:
|
|
133
|
-
- Displaying available options to users
|
|
134
|
-
- Validating environment type parameters
|
|
135
|
-
- Building dynamic UIs or configuration tools
|
|
136
|
-
- Debugging and development
|
|
137
|
-
|
|
138
|
-
Returns:
|
|
139
|
-
List[str]: Sorted list of all registered environment type names.
|
|
140
|
-
Returns an empty list if no environments have been registered.
|
|
141
|
-
|
|
142
|
-
Example:
|
|
143
|
-
>>> # Check what environments are available
|
|
144
|
-
>>> available_envs = list_supported_env_types()
|
|
145
|
-
>>> print("Supported environments:")
|
|
146
|
-
>>> for env_type in available_envs:
|
|
147
|
-
... print(f" - {env_type}")
|
|
148
|
-
|
|
149
|
-
>>> # Validate user input
|
|
150
|
-
>>> user_choice = input("Choose environment: ")
|
|
151
|
-
>>> if user_choice not in list_supported_env_types():
|
|
152
|
-
... print(f"Error: {user_choice} not available")
|
|
153
|
-
|
|
154
|
-
>>> # Build configuration options
|
|
155
|
-
>>> config_schema = {
|
|
156
|
-
... "environment_type": {
|
|
157
|
-
... "enum": list_supported_env_types(),
|
|
158
|
-
... "description": "Type of environment to use"
|
|
159
|
-
... }
|
|
160
|
-
... }
|
|
161
|
-
|
|
162
|
-
Note:
|
|
163
|
-
The returned list is sorted alphabetically for consistent ordering.
|
|
164
|
-
This function returns a copy of the environment names, so modifying
|
|
165
|
-
the returned list will not affect the registry.
|
|
166
|
-
"""
|
|
167
|
-
return sorted(ENV_REGISTRY.keys())
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
def discover_entry_point_environments() -> None:
|
|
171
|
-
"""
|
|
172
|
-
Discover and register environments from entry points.
|
|
173
|
-
|
|
174
|
-
This function scans for environments registered via setuptools entry points
|
|
175
|
-
under the group 'synth_ai.environments'. This allows third-party packages
|
|
176
|
-
to register environments by declaring them in their pyproject.toml:
|
|
177
|
-
|
|
178
|
-
[project.entry-points."synth_ai.environments"]
|
|
179
|
-
my_env = "my_package.my_env:MyEnvironment"
|
|
180
|
-
another_env = "my_package.other:AnotherEnv"
|
|
181
|
-
|
|
182
|
-
The function will automatically import and register all discovered environments.
|
|
183
|
-
"""
|
|
184
|
-
try:
|
|
185
|
-
entry_points = importlib.metadata.entry_points()
|
|
186
|
-
if hasattr(entry_points, "select"):
|
|
187
|
-
# Python 3.10+
|
|
188
|
-
env_entry_points = entry_points.select(group="synth_ai.environments")
|
|
189
|
-
else:
|
|
190
|
-
# Python 3.9 and below
|
|
191
|
-
env_entry_points = entry_points.get("synth_ai.environments", [])
|
|
192
|
-
|
|
193
|
-
for entry_point in env_entry_points:
|
|
194
|
-
try:
|
|
195
|
-
env_cls = entry_point.load()
|
|
196
|
-
|
|
197
|
-
# Validate that it's a StatefulEnvironment subclass
|
|
198
|
-
if not issubclass(env_cls, StatefulEnvironment):
|
|
199
|
-
logger.warning(
|
|
200
|
-
f"Entry point '{entry_point.name}' from '{entry_point.value}' "
|
|
201
|
-
f"is not a StatefulEnvironment subclass. Skipping."
|
|
202
|
-
)
|
|
203
|
-
continue
|
|
204
|
-
|
|
205
|
-
register_environment(entry_point.name, env_cls)
|
|
206
|
-
logger.info(f"Registered environment '{entry_point.name}' from entry point")
|
|
207
|
-
|
|
208
|
-
except Exception as e:
|
|
209
|
-
logger.error(
|
|
210
|
-
f"Failed to load environment entry point '{entry_point.name}' "
|
|
211
|
-
f"from '{entry_point.value}': {e}"
|
|
212
|
-
)
|
|
213
|
-
except Exception as e:
|
|
214
|
-
logger.debug(f"Entry point discovery failed (this is normal if no entry points exist): {e}")
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
def auto_discover_environments() -> None:
|
|
218
|
-
"""
|
|
219
|
-
Automatically discover and register environments from multiple sources.
|
|
220
|
-
|
|
221
|
-
This function combines multiple discovery mechanisms:
|
|
222
|
-
1. Entry points (setuptools plugins)
|
|
223
|
-
2. Could be extended with more discovery methods in the future
|
|
224
|
-
|
|
225
|
-
This should be called once at application startup to populate the registry
|
|
226
|
-
with all available environments.
|
|
227
|
-
"""
|
|
228
|
-
discover_entry_point_environments()
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
# Auto-discover environments when the registry module is imported
|
|
232
|
-
# This ensures third-party environments are available as soon as the registry is used
|
|
233
|
-
auto_discover_environments()
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import contextlib
|
|
2
|
-
import sqlite3
|
|
3
|
-
import threading
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class SQLiteManager:
|
|
8
|
-
def __init__(self, db_path: Path, read_only: bool = True, ephemeral: bool = False):
|
|
9
|
-
"""Initializes SQLiteManager with optional read-only or ephemeral mode."""
|
|
10
|
-
self.db_path = db_path
|
|
11
|
-
self.read_only = read_only
|
|
12
|
-
self.ephemeral = ephemeral
|
|
13
|
-
self._lock = threading.RLock()
|
|
14
|
-
self._conn: sqlite3.Connection | None = None
|
|
15
|
-
|
|
16
|
-
@contextlib.contextmanager
|
|
17
|
-
def connection(self):
|
|
18
|
-
with self._lock:
|
|
19
|
-
if self._conn is None:
|
|
20
|
-
uri = f"file:{self.db_path}?mode=ro" if self.read_only else str(self.db_path)
|
|
21
|
-
self._conn = sqlite3.connect(uri, uri=self.read_only, isolation_level="DEFERRED")
|
|
22
|
-
self._conn.execute("PRAGMA foreign_keys=ON;")
|
|
23
|
-
self._conn.execute("PRAGMA journal_mode=WAL;")
|
|
24
|
-
try:
|
|
25
|
-
yield self._conn
|
|
26
|
-
self._conn.commit()
|
|
27
|
-
except:
|
|
28
|
-
self._conn.rollback()
|
|
29
|
-
raise
|
|
30
|
-
|
|
31
|
-
def close(self):
|
|
32
|
-
"""Closes the underlying connection for cleanup at environment teardown."""
|
|
33
|
-
with self._lock:
|
|
34
|
-
if self._conn:
|
|
35
|
-
self._conn.close()
|
|
36
|
-
self._conn = None
|
|
37
|
-
|
|
38
|
-
def reset(self, new_db_path: Path | None = None):
|
|
39
|
-
"""Resets the connection, optionally switching to a new database path for a fresh session."""
|
|
40
|
-
with self._lock:
|
|
41
|
-
if self._conn:
|
|
42
|
-
self._conn.close()
|
|
43
|
-
if new_db_path:
|
|
44
|
-
self.db_path = new_db_path
|
|
45
|
-
self._conn = None
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# EnvHistory, EnvRecord, EnvironmentCheckpointObservation (customer supplied, not for agent but only designer)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# rewards package
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class RewardComponent(ABC):
|
|
8
|
-
"""Interface for a component contributing to stepwise reward."""
|
|
9
|
-
|
|
10
|
-
weight: float = 1.0
|
|
11
|
-
|
|
12
|
-
@abstractmethod
|
|
13
|
-
async def score(self, state: Any, action: Any) -> float:
|
|
14
|
-
"""Compute the component's reward given current state and action."""
|
|
15
|
-
...
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class RewardStack:
|
|
19
|
-
"""Aggregates multiple RewardComponent instances to compute a total reward."""
|
|
20
|
-
|
|
21
|
-
def __init__(self, components: list[RewardComponent]):
|
|
22
|
-
self.components = components
|
|
23
|
-
|
|
24
|
-
async def step_reward(self, state: Any, action: Any) -> float:
|
|
25
|
-
"""Compute the sum of weighted component rewards for a single step."""
|
|
26
|
-
total = 0.0
|
|
27
|
-
for comp in self.components:
|
|
28
|
-
total += comp.weight * await comp.score(state, action)
|
|
29
|
-
return total
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class InternalObservation:
|
|
6
|
-
public_observation: Any
|
|
7
|
-
private_observation: Any
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class GetObservationCallable:
|
|
11
|
-
@abstractmethod
|
|
12
|
-
async def get_observation(self) -> InternalObservation:
|
|
13
|
-
pass
|
|
14
|
-
|
|
15
|
-
pass
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class Engine:
|
|
19
|
-
async def initialize(self):
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
|
-
async def terminate(self):
|
|
23
|
-
pass
|
|
24
|
-
|
|
25
|
-
async def _step_engine(self):
|
|
26
|
-
pass
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
from pydantic import BaseModel, Field
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class EnvToolCall(BaseModel):
|
|
10
|
-
"""
|
|
11
|
-
Represents an agent-requested call to an environment tool.
|
|
12
|
-
|
|
13
|
-
This class encapsulates an action that an AI agent wants to perform
|
|
14
|
-
in an environment. Tool calls consist of a tool name and a dictionary
|
|
15
|
-
of arguments that will be passed to the tool for execution.
|
|
16
|
-
|
|
17
|
-
The tool call system provides a standardized way for agents to interact
|
|
18
|
-
with environments, making it easy to:
|
|
19
|
-
- Validate agent actions before execution
|
|
20
|
-
- Log and trace agent behavior
|
|
21
|
-
- Implement complex multi-step actions
|
|
22
|
-
- Handle errors and provide feedback
|
|
23
|
-
|
|
24
|
-
Attributes:
|
|
25
|
-
tool: The name of the tool to invoke (must be registered in environment)
|
|
26
|
-
args: Arguments to pass to the tool, with argument names as keys
|
|
27
|
-
|
|
28
|
-
Example:
|
|
29
|
-
>>> # Simple movement action
|
|
30
|
-
>>> move_call = EnvToolCall(tool="move", args={"direction": "north"})
|
|
31
|
-
|
|
32
|
-
>>> # Complex action with multiple parameters
|
|
33
|
-
>>> craft_call = EnvToolCall(
|
|
34
|
-
... tool="craft_item",
|
|
35
|
-
... args={"item": "sword", "materials": ["iron", "wood"], "quantity": 1}
|
|
36
|
-
... )
|
|
37
|
-
|
|
38
|
-
>>> # Action with no arguments
|
|
39
|
-
>>> look_call = EnvToolCall(tool="look", args={})
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
tool: str
|
|
43
|
-
args: dict[str, Any] = Field(default_factory=dict)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
class ToolResult(BaseModel):
|
|
47
|
-
"""
|
|
48
|
-
Represents the result of executing an environment tool.
|
|
49
|
-
|
|
50
|
-
This class standardizes the response format for all tool executions,
|
|
51
|
-
providing a consistent interface for success/failure status, return
|
|
52
|
-
values, and error information. This makes it easy for agents and
|
|
53
|
-
environment systems to handle tool execution results uniformly.
|
|
54
|
-
|
|
55
|
-
Attributes:
|
|
56
|
-
ok: Whether the tool execution was successful
|
|
57
|
-
payload: The return value from the tool (None if failed or no return value)
|
|
58
|
-
error: Error message if execution failed (None if successful)
|
|
59
|
-
|
|
60
|
-
Example:
|
|
61
|
-
>>> # Successful tool execution
|
|
62
|
-
>>> success_result = ToolResult(
|
|
63
|
-
... ok=True,
|
|
64
|
-
... payload={"new_position": [5, 3], "items_collected": ["key"]},
|
|
65
|
-
... error=None
|
|
66
|
-
... )
|
|
67
|
-
|
|
68
|
-
>>> # Failed tool execution
|
|
69
|
-
>>> error_result = ToolResult(
|
|
70
|
-
... ok=False,
|
|
71
|
-
... payload=None,
|
|
72
|
-
... error="Cannot move north: wall blocking path"
|
|
73
|
-
... )
|
|
74
|
-
|
|
75
|
-
>>> # Success with no return value
|
|
76
|
-
>>> simple_success = ToolResult(ok=True)
|
|
77
|
-
"""
|
|
78
|
-
|
|
79
|
-
ok: bool
|
|
80
|
-
payload: Any | None = None
|
|
81
|
-
error: str | None = None
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
class AbstractTool(ABC):
|
|
85
|
-
"""
|
|
86
|
-
Abstract base class for all environment tools.
|
|
87
|
-
|
|
88
|
-
Tools are the primary mechanism for agents to interact with environments.
|
|
89
|
-
Each tool represents a specific action or capability that an agent can
|
|
90
|
-
invoke, such as moving, picking up items, or examining objects.
|
|
91
|
-
|
|
92
|
-
Tools define their own call and result schemas using Pydantic models,
|
|
93
|
-
enabling automatic validation and documentation generation. This ensures
|
|
94
|
-
that agents provide valid inputs and receive structured outputs.
|
|
95
|
-
|
|
96
|
-
The tool system supports:
|
|
97
|
-
- Type-safe argument validation
|
|
98
|
-
- Automatic error handling and reporting
|
|
99
|
-
- Consistent result formatting
|
|
100
|
-
- Dynamic tool registration and discovery
|
|
101
|
-
|
|
102
|
-
Attributes:
|
|
103
|
-
name: Unique identifier for this tool (used in EnvToolCall.tool)
|
|
104
|
-
call_schema: Pydantic model defining valid arguments for this tool
|
|
105
|
-
result_schema: Pydantic model defining the structure of results
|
|
106
|
-
|
|
107
|
-
Example:
|
|
108
|
-
>>> class MoveTool(AbstractTool):
|
|
109
|
-
... name = "move"
|
|
110
|
-
... call_schema = MoveArgs # Pydantic model with 'direction' field
|
|
111
|
-
...
|
|
112
|
-
... async def __call__(self, call: EnvToolCall) -> ToolResult:
|
|
113
|
-
... direction = call.args['direction']
|
|
114
|
-
... # Perform movement logic
|
|
115
|
-
... if valid_move:
|
|
116
|
-
... return ToolResult(ok=True, payload=new_position)
|
|
117
|
-
... else:
|
|
118
|
-
... return ToolResult(ok=False, error="Invalid move")
|
|
119
|
-
|
|
120
|
-
>>> # Register and use the tool
|
|
121
|
-
>>> move_tool = MoveTool()
|
|
122
|
-
>>> register_tool(move_tool)
|
|
123
|
-
>>> call = EnvToolCall(tool="move", args={"direction": "north"})
|
|
124
|
-
>>> result = await move_tool(call)
|
|
125
|
-
"""
|
|
126
|
-
|
|
127
|
-
name: str
|
|
128
|
-
call_schema: type[BaseModel]
|
|
129
|
-
result_schema: type[BaseModel] = ToolResult
|
|
130
|
-
|
|
131
|
-
@abstractmethod
|
|
132
|
-
async def __call__(self, call: EnvToolCall) -> ToolResult:
|
|
133
|
-
"""
|
|
134
|
-
Execute the tool with the given tool call.
|
|
135
|
-
|
|
136
|
-
This method contains the core logic for the tool's functionality.
|
|
137
|
-
It should:
|
|
138
|
-
1. Validate the tool call arguments (using call_schema)
|
|
139
|
-
2. Perform the requested action
|
|
140
|
-
3. Return a ToolResult with appropriate success/failure status
|
|
141
|
-
|
|
142
|
-
Args:
|
|
143
|
-
call: The tool call containing the tool name and arguments
|
|
144
|
-
|
|
145
|
-
Returns:
|
|
146
|
-
ToolResult: Result of tool execution with success status,
|
|
147
|
-
payload data, and any error messages
|
|
148
|
-
|
|
149
|
-
Raises:
|
|
150
|
-
ValidationError: If call arguments don't match call_schema
|
|
151
|
-
EnvironmentError: If tool execution fails due to environment state
|
|
152
|
-
|
|
153
|
-
Example:
|
|
154
|
-
>>> call = EnvToolCall(tool="move", args={"direction": "east"})
|
|
155
|
-
>>> result = await tool(call)
|
|
156
|
-
>>> if result.ok:
|
|
157
|
-
... print(f"Moved to: {result.payload['position']}")
|
|
158
|
-
... else:
|
|
159
|
-
... print(f"Move failed: {result.error}")
|
|
160
|
-
"""
|
|
161
|
-
...
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
TOOL_REGISTRY: dict[str, AbstractTool] = {}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
def register_tool(tool: AbstractTool) -> None:
|
|
168
|
-
"""
|
|
169
|
-
Register a tool instance for use in environments.
|
|
170
|
-
|
|
171
|
-
This function adds a tool to the global registry, making it available
|
|
172
|
-
for environments to use when processing agent tool calls. Tools must
|
|
173
|
-
be registered before they can be invoked by agents.
|
|
174
|
-
|
|
175
|
-
The registry uses the tool's name attribute as the key, so tool names
|
|
176
|
-
must be unique across all registered tools.
|
|
177
|
-
|
|
178
|
-
Args:
|
|
179
|
-
tool: The tool instance to register. Must have a unique name.
|
|
180
|
-
|
|
181
|
-
Raises:
|
|
182
|
-
ValueError: If a tool with the same name is already registered
|
|
183
|
-
TypeError: If tool is not an instance of AbstractTool
|
|
184
|
-
|
|
185
|
-
Example:
|
|
186
|
-
>>> class LookTool(AbstractTool):
|
|
187
|
-
... name = "look"
|
|
188
|
-
... # ... implementation
|
|
189
|
-
|
|
190
|
-
>>> look_tool = LookTool()
|
|
191
|
-
>>> register_tool(look_tool)
|
|
192
|
-
>>>
|
|
193
|
-
>>> # Now agents can use: EnvToolCall(tool="look", args={})
|
|
194
|
-
|
|
195
|
-
Note:
|
|
196
|
-
Tools are typically registered during environment initialization
|
|
197
|
-
or module import. Once registered, tools remain available for
|
|
198
|
-
the duration of the application session.
|
|
199
|
-
"""
|
|
200
|
-
TOOL_REGISTRY[tool.name] = tool
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Environment examples and demos."""
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"""Multi-armed bandit example environment."""
|
|
2
|
-
|
|
3
|
-
from .engine import (
|
|
4
|
-
BanditEngine,
|
|
5
|
-
BanditEngineSnapshot,
|
|
6
|
-
BanditPrivateState,
|
|
7
|
-
BanditPublicState,
|
|
8
|
-
SynthBanditCheckpointObservationCallable,
|
|
9
|
-
SynthBanditObservationCallable,
|
|
10
|
-
)
|
|
11
|
-
from .environment import BanditActionInput, BanditEnvironment, BanditInteractTool
|
|
12
|
-
from .taskset import (
|
|
13
|
-
BanditTaskInstance,
|
|
14
|
-
BanditTaskInstanceMetadata,
|
|
15
|
-
create_bandit_taskset,
|
|
16
|
-
taskset,
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
__all__ = [
|
|
20
|
-
"BanditEngine",
|
|
21
|
-
"BanditPublicState",
|
|
22
|
-
"BanditPrivateState",
|
|
23
|
-
"BanditEngineSnapshot",
|
|
24
|
-
"SynthBanditObservationCallable",
|
|
25
|
-
"SynthBanditCheckpointObservationCallable",
|
|
26
|
-
"BanditEnvironment",
|
|
27
|
-
"BanditInteractTool",
|
|
28
|
-
"BanditActionInput",
|
|
29
|
-
"BanditTaskInstance",
|
|
30
|
-
"BanditTaskInstanceMetadata",
|
|
31
|
-
"create_bandit_taskset",
|
|
32
|
-
"taskset",
|
|
33
|
-
]
|