synth-ai 0.2.14__py3-none-any.whl → 0.4.4__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.
Potentially problematic release.
This version of synth-ai might be problematic. Click here for more details.
- synth_ai/__init__.py +25 -46
- synth_ai/__main__.py +30 -3
- synth_ai/cli/__init__.py +98 -72
- 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 +258 -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 +51 -0
- synth_ai/cli/commands/train/core.py +22 -0
- synth_ai/cli/commands/train/errors.py +117 -0
- synth_ai/cli/commands/train/prompt_learning_validation.py +632 -0
- synth_ai/cli/commands/train/validation.py +392 -0
- synth_ai/cli/commands/train/verifier_schemas.py +200 -0
- synth_ai/cli/commands/train/verifier_validation.py +235 -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/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/core.py +440 -0
- synth_ai/cli/demo_apps/demo_task_apps/crafter/__init__.py +1 -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/config.toml +73 -0
- 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 +911 -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/infra/balance.py +216 -0
- 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 +30 -6
- 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/training/watch.py +506 -0
- synth_ai/cli/turso.py +34 -55
- 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/utils/recent.py +133 -0
- synth_ai/cli/utils/traces.py +164 -0
- 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 +125 -0
- synth_ai/core/http.py +230 -0
- synth_ai/core/integrations/__init__.py +11 -0
- synth_ai/core/integrations/cloudflare.py +1886 -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/core/tracing_v3/__init__.py +99 -0
- synth_ai/core/tracing_v3/abstractions.py +348 -0
- synth_ai/core/tracing_v3/config.py +229 -0
- synth_ai/core/tracing_v3/constants.py +21 -0
- synth_ai/core/tracing_v3/db_config.py +182 -0
- synth_ai/core/tracing_v3/decorators.py +401 -0
- synth_ai/core/tracing_v3/llm_call_record_helpers.py +437 -0
- synth_ai/core/tracing_v3/migration_helper.py +119 -0
- synth_ai/core/tracing_v3/session_tracer.py +542 -0
- synth_ai/core/tracing_v3/storage/base.py +211 -0
- synth_ai/core/tracing_v3/storage/config.py +109 -0
- synth_ai/core/tracing_v3/storage/factory.py +39 -0
- synth_ai/core/tracing_v3/trace_utils.py +326 -0
- synth_ai/core/tracing_v3/turso/daemon.py +278 -0
- synth_ai/core/tracing_v3/turso/models.py +470 -0
- synth_ai/core/tracing_v3/turso/native_manager.py +1385 -0
- synth_ai/core/tracing_v3/utils.py +108 -0
- 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 +122 -0
- synth_ai/data/rewards.py +249 -0
- synth_ai/data/traces.py +35 -0
- synth_ai/products/__init__.py +6 -0
- synth_ai/products/graph_evolve/__init__.py +45 -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 +129 -0
- synth_ai/sdk/api/__init__.py +1 -0
- synth_ai/sdk/api/eval/__init__.py +33 -0
- synth_ai/sdk/api/eval/job.py +732 -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 +1076 -0
- synth_ai/sdk/api/train/cli.py +2196 -0
- synth_ai/sdk/api/train/config_finder.py +267 -0
- synth_ai/sdk/api/train/configs/__init__.py +67 -0
- synth_ai/sdk/api/train/configs/prompt_learning.py +1800 -0
- synth_ai/sdk/api/train/configs/rl.py +436 -0
- synth_ai/sdk/api/train/configs/sft.py +263 -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 +1102 -0
- synth_ai/sdk/api/train/graphgen_models.py +873 -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 +160 -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 +800 -0
- synth_ai/sdk/api/train/rl.py +478 -0
- synth_ai/sdk/api/train/sft.py +398 -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 +776 -0
- synth_ai/sdk/graphs/verifier_schemas.py +222 -0
- synth_ai/sdk/inference/__init__.py +6 -0
- 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/learning/__init__.py +99 -0
- synth_ai/sdk/learning/client.py +240 -0
- synth_ai/sdk/learning/context_learning_client.py +531 -0
- synth_ai/sdk/learning/context_learning_types.py +294 -0
- synth_ai/sdk/learning/ft_client.py +7 -0
- synth_ai/sdk/learning/health.py +49 -0
- synth_ai/sdk/learning/jobs.py +202 -0
- 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/sdk/learning/rl/__init__.py +35 -0
- synth_ai/sdk/learning/rl/client.py +268 -0
- synth_ai/sdk/learning/rl/contracts.py +23 -0
- synth_ai/sdk/learning/rl/env_keys.py +166 -0
- synth_ai/sdk/learning/rl/secrets.py +13 -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/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 +93 -0
- synth_ai/sdk/localapi/server.py +29 -0
- synth_ai/sdk/localapi/template.py +49 -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 +708 -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/client.py +175 -0
- synth_ai/sdk/task/config.py +256 -0
- synth_ai/sdk/task/contracts.py +340 -0
- synth_ai/sdk/task/datasets.py +108 -0
- synth_ai/sdk/task/in_process.py +1200 -0
- synth_ai/sdk/task/in_process_runner.py +314 -0
- synth_ai/sdk/task/inference_api.py +299 -0
- synth_ai/sdk/task/proxy.py +287 -0
- synth_ai/sdk/task/rubrics/__init__.py +54 -0
- synth_ai/sdk/task/rubrics/loaders.py +156 -0
- synth_ai/sdk/task/rubrics/strict.py +148 -0
- synth_ai/sdk/task/rubrics.py +219 -0
- synth_ai/sdk/task/server.py +640 -0
- synth_ai/sdk/task/trace_correlation_helpers.py +557 -0
- synth_ai/sdk/task/tracing_utils.py +95 -0
- synth_ai/sdk/task/validators.py +441 -0
- synth_ai/sdk/training/__init__.py +93 -0
- synth_ai/sdk/tunnels/__init__.py +118 -0
- synth_ai/sdk/tunnels/cleanup.py +83 -0
- synth_ai/sdk/tunnels/ports.py +120 -0
- synth_ai/sdk/tunnels/tunneled_api.py +363 -0
- synth_ai/utils/__init__.py +213 -0
- synth_ai-0.4.4.dist-info/METADATA +262 -0
- synth_ai-0.4.4.dist-info/RECORD +369 -0
- synth_ai-0.4.4.dist-info/top_level.txt +1 -0
- examples/__init__.py +0 -16
- examples/analyze_semantic_words.sh +0 -17
- examples/crafter_debug_render.py +0 -186
- examples/dev/qwen3_32b_qlora_4xh100.toml +0 -40
- examples/multi_step/configs/README_verilog_rl.md +0 -77
- examples/multi_step/configs/VERILOG_REWARDS.md +0 -90
- examples/multi_step/configs/VERILOG_RL_CHECKLIST.md +0 -183
- examples/multi_step/configs/crafter_eval_synth_qwen4b.toml +0 -35
- examples/multi_step/configs/crafter_eval_text_only_groq_qwen32b.toml +0 -36
- examples/multi_step/configs/crafter_rl_outcome.toml +0 -74
- examples/multi_step/configs/crafter_rl_stepwise_hosted_judge.toml +0 -187
- examples/multi_step/configs/crafter_rl_stepwise_shaped.toml +0 -83
- examples/multi_step/configs/crafter_rl_stepwise_simple.toml +0 -78
- examples/multi_step/configs/crafter_synth_backend.md +0 -40
- examples/multi_step/configs/verilog_eval_groq_qwen32b.toml +0 -31
- examples/multi_step/configs/verilog_eval_synth_qwen8b.toml +0 -33
- examples/multi_step/configs/verilog_rl_lora.toml +0 -190
- examples/multi_step/crafter_rl_lora.md +0 -70
- examples/multi_step/judges/crafter_backend_judge.py +0 -220
- examples/multi_step/judges/verilog_backend_judge.py +0 -234
- examples/multi_step/readme.md +0 -48
- examples/multi_step/sse_metrics_streaming_notes.md +0 -357
- examples/multi_step/task_app_config_notes.md +0 -494
- examples/multi_step/verilog_rl_lora.md +0 -218
- examples/qwen_coder/README.md +0 -102
- examples/qwen_coder/_shared.py +0 -113
- examples/qwen_coder/configs/coder_lora_30b.toml +0 -61
- examples/qwen_coder/configs/coder_lora_4b.toml +0 -57
- examples/qwen_coder/configs/coder_lora_small.toml +0 -58
- examples/qwen_coder/generate_dataset.py +0 -98
- examples/qwen_coder/infer_ft_smoke.py +0 -65
- examples/qwen_coder/infer_prod_proxy.py +0 -73
- examples/qwen_coder/infer_via_synth.py +0 -87
- examples/qwen_coder/scripts/infer_coder.sh +0 -19
- examples/qwen_coder/scripts/train_coder_30b.sh +0 -22
- examples/qwen_coder/sft_full_17b.py +0 -103
- examples/qwen_coder/sft_lora_30b.py +0 -110
- examples/qwen_coder/subset_jsonl.py +0 -39
- examples/qwen_coder/todos.md +0 -38
- examples/qwen_coder/validate_jsonl.py +0 -60
- examples/rl/README.md +0 -169
- examples/rl/download_dataset.py +0 -80
- examples/run_crafter_demo.sh +0 -10
- examples/sft/README.md +0 -139
- examples/sft/configs/crafter_fft_qwen0p6b.toml +0 -44
- examples/sft/configs/crafter_lora_qwen0p6b.toml +0 -45
- examples/sft/evaluate.py +0 -119
- examples/sft/export_dataset.py +0 -117
- examples/sft/generate_traces.py +0 -164
- examples/swe/__init__.py +0 -12
- examples/swe/task_app/README.md +0 -105
- examples/swe/task_app/__init__.py +0 -2
- examples/swe/task_app/grpo_swe_mini.py +0 -601
- examples/swe/task_app/grpo_swe_mini_task_app.py +0 -136
- examples/swe/task_app/hosted/README.md +0 -173
- examples/swe/task_app/hosted/__init__.py +0 -5
- examples/swe/task_app/hosted/branching.py +0 -143
- examples/swe/task_app/hosted/environment_routes.py +0 -1289
- examples/swe/task_app/hosted/envs/__init__.py +0 -1
- examples/swe/task_app/hosted/envs/crafter/__init__.py +0 -6
- examples/swe/task_app/hosted/envs/crafter/app.py +0 -1
- examples/swe/task_app/hosted/envs/crafter/environment.py +0 -522
- examples/swe/task_app/hosted/envs/crafter/policy.py +0 -478
- examples/swe/task_app/hosted/envs/crafter/react_agent.py +0 -108
- examples/swe/task_app/hosted/envs/crafter/shared.py +0 -305
- examples/swe/task_app/hosted/envs/crafter/tools.py +0 -47
- examples/swe/task_app/hosted/envs/mini_swe/__init__.py +0 -8
- examples/swe/task_app/hosted/envs/mini_swe/environment.py +0 -1164
- examples/swe/task_app/hosted/envs/mini_swe/policy.py +0 -355
- examples/swe/task_app/hosted/envs/mini_swe/shared.py +0 -83
- examples/swe/task_app/hosted/envs/mini_swe/tools.py +0 -96
- examples/swe/task_app/hosted/hosted_app.py +0 -204
- examples/swe/task_app/hosted/inference/__init__.py +0 -5
- examples/swe/task_app/hosted/inference/openai_client.py +0 -618
- examples/swe/task_app/hosted/main.py +0 -100
- examples/swe/task_app/hosted/policy_routes.py +0 -1079
- examples/swe/task_app/hosted/registry.py +0 -195
- examples/swe/task_app/hosted/rollout.py +0 -1911
- examples/swe/task_app/hosted/storage/__init__.py +0 -5
- examples/swe/task_app/hosted/storage/volume.py +0 -211
- examples/swe/task_app/hosted/test_agents.py +0 -161
- examples/swe/task_app/hosted/test_service.py +0 -136
- examples/swe/task_app/hosted/utils.py +0 -62
- examples/task_apps/IMAGE_ONLY_EVAL_QUICKSTART.md +0 -258
- examples/task_apps/TESTING.md +0 -275
- examples/task_apps/crafter/CREATE_SFT_DATASET.md +0 -273
- examples/task_apps/crafter/EVAL_IMAGE_ONLY_RESULTS.md +0 -152
- examples/task_apps/crafter/FILTER_COMMAND_STATUS.md +0 -174
- examples/task_apps/crafter/FILTER_COMMAND_SUCCESS.md +0 -268
- examples/task_apps/crafter/QUERY_EXAMPLES.md +0 -203
- examples/task_apps/crafter/README_IMAGE_ONLY_EVAL.md +0 -316
- examples/task_apps/crafter/__init__.py +0 -0
- examples/task_apps/crafter/eval_image_only_gpt4o.toml +0 -28
- examples/task_apps/crafter/eval_text_only_groq_llama.toml +0 -36
- examples/task_apps/crafter/filter_sft_dataset.toml +0 -16
- examples/task_apps/crafter/task_app/README.md +0 -42
- examples/task_apps/crafter/task_app/__init__.py +0 -5
- examples/task_apps/crafter/task_app/grpo_crafter.py +0 -973
- examples/task_apps/crafter/task_app/grpo_crafter_task_app.py +0 -146
- examples/task_apps/crafter/task_app/synth_envs_hosted/README.md +0 -173
- examples/task_apps/crafter/task_app/synth_envs_hosted/__init__.py +0 -5
- examples/task_apps/crafter/task_app/synth_envs_hosted/branching.py +0 -143
- examples/task_apps/crafter/task_app/synth_envs_hosted/environment_routes.py +0 -1226
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/__init__.py +0 -1
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/__init__.py +0 -6
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/app.py +0 -1
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/environment.py +0 -532
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/policy.py +0 -547
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/react_agent.py +0 -123
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/shared.py +0 -305
- examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/tools.py +0 -47
- examples/task_apps/crafter/task_app/synth_envs_hosted/hosted_app.py +0 -204
- examples/task_apps/crafter/task_app/synth_envs_hosted/inference/__init__.py +0 -5
- examples/task_apps/crafter/task_app/synth_envs_hosted/inference/openai_client.py +0 -704
- examples/task_apps/crafter/task_app/synth_envs_hosted/main.py +0 -100
- examples/task_apps/crafter/task_app/synth_envs_hosted/policy_routes.py +0 -1152
- examples/task_apps/crafter/task_app/synth_envs_hosted/registry.py +0 -195
- examples/task_apps/crafter/task_app/synth_envs_hosted/rollout.py +0 -2160
- examples/task_apps/crafter/task_app/synth_envs_hosted/storage/__init__.py +0 -5
- examples/task_apps/crafter/task_app/synth_envs_hosted/storage/volume.py +0 -211
- examples/task_apps/crafter/task_app/synth_envs_hosted/test_agents.py +0 -161
- examples/task_apps/crafter/task_app/synth_envs_hosted/test_service.py +0 -136
- examples/task_apps/crafter/task_app/synth_envs_hosted/utils.py +0 -218
- examples/task_apps/dev/pokemon_emerald/__init__.py +0 -2
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/README.md +0 -811
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/__init__.py +0 -120
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/action.py +0 -160
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/memory.py +0 -155
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/perception.py +0 -69
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/planning.py +0 -96
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/simple.py +0 -1502
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/system_prompt.py +0 -4
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/grab_map.py +0 -68
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/manual.py +0 -216
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/__init__.py +0 -35
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/emerald_utils.py +0 -631
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/emulator.py +0 -1544
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/enums.py +0 -1428
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/memory_reader.py +0 -4848
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/types.py +0 -41
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/utils.py +0 -298
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pyproject.toml +0 -95
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/run.py +0 -204
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/__init__.py +0 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/app.py +0 -2152
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/client.py +0 -429
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/frame_server.py +0 -155
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/README.md +0 -78
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/__init__.py +0 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/run_tests.py +0 -122
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_agent_direct.py +0 -76
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_agent_prompts.py +0 -413
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_battle_state_formatting.py +0 -204
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_dialogue_detection.py +0 -133
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_dialogue_detection_comprehensive.py +0 -229
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_direct_agent_emulator.py +0 -300
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_fps_adjustment_pytest.py +0 -205
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_house_to_outside_direct.py +0 -200
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_house_to_outside_transition.py +0 -284
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_map_ground_truth_comparison.py +0 -468
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_memory_map.py +0 -575
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_server_map_validation.py +0 -311
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_torchic_state.py +0 -259
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/__init__.py +0 -0
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/anticheat.py +0 -372
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/checkpoint.py +0 -296
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/error_handler.py +0 -275
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/get_local_ip.py +0 -22
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/helpers.py +0 -44
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/llm_logger.py +0 -514
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_formatter.py +0 -415
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_stitcher.py +0 -1763
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_stitcher_singleton.py +0 -33
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_trimmer.py +0 -106
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_visualizer.py +0 -334
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/ocr_dialogue.py +0 -1020
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/recording.py +0 -188
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/state_formatter.py +0 -1481
- examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/vlm.py +0 -862
- examples/task_apps/dev/pokemon_emerald/modal_app.py +0 -114
- examples/task_apps/dev/pokemon_emerald/task_app/README.md +0 -81
- examples/task_apps/dev/pokemon_emerald/task_app/__init__.py +0 -6
- examples/task_apps/dev/pokemon_emerald/task_app/pokemon_emerald.py +0 -685
- examples/task_apps/enron/__init__.py +0 -1
- examples/task_apps/enron/eval_groq_qwen32.toml +0 -16
- examples/task_apps/enron/filter_sft.toml +0 -5
- examples/task_apps/enron/task_app/README.md +0 -14
- examples/task_apps/enron/task_app/__init__.py +0 -1
- examples/task_apps/enron/task_app/grpo_enron.py +0 -906
- examples/task_apps/enron/task_app/grpo_enron_task_app.py +0 -146
- examples/task_apps/enron/tests/__init__.py +0 -4
- examples/task_apps/enron/tests/conftest.py +0 -115
- examples/task_apps/enron/tests/integration/__init__.py +0 -4
- examples/task_apps/enron/tests/integration/test_enron_eval.py +0 -179
- examples/task_apps/enron/tests/integration/test_enron_rollout.py +0 -135
- examples/task_apps/enron/tests/unit/__init__.py +0 -4
- examples/task_apps/enron/tests/unit/test_enron_environment.py +0 -126
- examples/task_apps/math/README.md +0 -22
- examples/task_apps/math/__init__.py +0 -0
- examples/task_apps/math/math_single_step.py +0 -1000
- examples/task_apps/math/math_task_app.py +0 -115
- examples/task_apps/pokemon_battle/__init__.py +0 -2
- examples/task_apps/pokemon_battle/modal_app.py +0 -104
- examples/task_apps/pokemon_battle/task_app/README.md +0 -68
- examples/task_apps/pokemon_battle/task_app/__init__.py +0 -6
- examples/task_apps/pokemon_battle/task_app/pokemon_showdown.py +0 -932
- examples/task_apps/pokemon_red/EVAL_IMAGE_ONLY_COMPLETE.md +0 -283
- examples/task_apps/pokemon_red/EVAL_IMAGE_ONLY_STATUS.md +0 -155
- examples/task_apps/pokemon_red/README.md +0 -357
- examples/task_apps/pokemon_red/README_IMAGE_ONLY_EVAL.md +0 -415
- examples/task_apps/pokemon_red/__init__.py +0 -3
- examples/task_apps/pokemon_red/eval_image_only_gpt4o.toml +0 -29
- examples/task_apps/pokemon_red/eval_pokemon_red_policy.py +0 -225
- examples/task_apps/pokemon_red/pallet_town_rl_config.toml +0 -75
- examples/task_apps/pokemon_red/task_app.py +0 -799
- examples/task_apps/pokemon_red/test_pallet_town_rewards.py +0 -193
- examples/task_apps/sokoban/README.md +0 -307
- examples/task_apps/sokoban/__init__.py +0 -3
- examples/task_apps/sokoban/eval_groq_qwen32.toml +0 -16
- examples/task_apps/sokoban/eval_openai_gpt5.toml +0 -16
- examples/task_apps/sokoban/filter_sft.toml +0 -5
- examples/task_apps/sokoban/task_app.py +0 -1058
- examples/task_apps/sokoban/tests/__init__.py +0 -4
- examples/task_apps/sokoban/tests/conftest.py +0 -113
- examples/task_apps/sokoban/tests/integration/__init__.py +0 -4
- examples/task_apps/sokoban/tests/integration/test_sokoban_eval.py +0 -57
- examples/task_apps/sokoban/tests/integration/test_sokoban_rollout.py +0 -198
- examples/task_apps/sokoban/tests/unit/__init__.py +0 -4
- examples/task_apps/sokoban/tests/unit/test_sokoban_environment.py +0 -114
- examples/task_apps/verilog/__init__.py +0 -1
- examples/task_apps/verilog/eval_groq_qwen32b.toml +0 -24
- examples/task_apps/verilog/filter_sft.toml +0 -5
- examples/task_apps/verilog/task_app/README.md +0 -12
- examples/task_apps/verilog/task_app/__init__.py +0 -1
- examples/task_apps/verilog/task_app/grpo_verilog.py +0 -1166
- examples/task_apps/verilog/task_app/grpo_verilog_task_app.py +0 -145
- examples/task_apps/verilog/tests/__init__.py +0 -4
- examples/task_apps/verilog/tests/conftest.py +0 -115
- examples/task_apps/verilog/tests/integration/__init__.py +0 -4
- examples/task_apps/verilog/tests/integration/test_verilog_eval.py +0 -181
- examples/task_apps/verilog/tests/integration/test_verilog_rollout.py +0 -55
- examples/task_apps/verilog/tests/unit/__init__.py +0 -4
- examples/task_apps/verilog/tests/unit/test_verilog_scoring.py +0 -118
- examples/vlm/PROPOSAL.md +0 -53
- examples/vlm/README.md +0 -68
- examples/vlm/configs/crafter_vlm_gpt4o.toml +0 -44
- examples/vlm/crafter_image_only_agent.py +0 -207
- examples/vlm/crafter_openai_vlm_agent.py +0 -277
- examples/vlm/filter_image_rows.py +0 -63
- examples/vlm/run_crafter_vlm_benchmark.py +0 -316
- examples/warming_up_to_rl/analyze_trace_db.py +0 -422
- examples/warming_up_to_rl/configs/crafter_fft.toml +0 -48
- examples/warming_up_to_rl/configs/crafter_fft_4b.toml +0 -54
- examples/warming_up_to_rl/configs/eval_fft_qwen4b.toml +0 -20
- examples/warming_up_to_rl/configs/eval_groq_qwen32b.toml +0 -13
- examples/warming_up_to_rl/configs/eval_modal_qwen4b.toml +0 -23
- examples/warming_up_to_rl/configs/eval_stepwise_complex.toml +0 -35
- examples/warming_up_to_rl/configs/eval_stepwise_consistent.toml +0 -26
- examples/warming_up_to_rl/configs/eval_stepwise_per_achievement.toml +0 -36
- examples/warming_up_to_rl/configs/eval_stepwise_simple.toml +0 -32
- examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml +0 -83
- examples/warming_up_to_rl/configs/rl_from_ft.toml +0 -56
- examples/warming_up_to_rl/export_trace_sft.py +0 -723
- examples/warming_up_to_rl/groq_test.py +0 -97
- examples/warming_up_to_rl/manage_secrets.py +0 -131
- examples/warming_up_to_rl/old/event_rewards.md +0 -234
- examples/warming_up_to_rl/old/notes.md +0 -73
- examples/warming_up_to_rl/readme.md +0 -179
- examples/warming_up_to_rl/run_eval.py +0 -736
- examples/warming_up_to_rl/run_fft_and_save.py +0 -380
- examples/warming_up_to_rl/run_local_rollout.py +0 -239
- examples/warming_up_to_rl/run_local_rollout_modal.py +0 -248
- examples/warming_up_to_rl/run_local_rollout_parallel.py +0 -405
- examples/warming_up_to_rl/run_local_rollout_traced.py +0 -477
- examples/warming_up_to_rl/run_rl_and_save.py +0 -124
- examples/warming_up_to_rl/run_rollout_remote.py +0 -156
- examples/workflows/__init__.py +0 -0
- examples/workflows/math_rl/__init__.py +0 -0
- examples/workflows/math_rl/configs/eval_base_qwen.toml +0 -15
- examples/workflows/math_rl/configs/eval_rl_qwen.toml +0 -11
- examples/workflows/math_rl/configs/rl_from_base_qwen.toml +0 -35
- examples/workflows/math_rl/configs/rl_from_base_qwen17.toml +0 -74
- examples/workflows/math_rl/configs/rl_from_ft_qwen.toml +0 -35
- examples/workflows/math_rl/download_dataset.py +0 -80
- examples/workflows/math_rl/run_eval.py +0 -436
- examples/workflows/math_rl/run_rl_and_save.py +0 -111
- synth_ai/api/models/supported.py +0 -377
- synth_ai/api/train/__init__.py +0 -5
- synth_ai/api/train/builders.py +0 -351
- synth_ai/api/train/cli.py +0 -635
- synth_ai/api/train/config_finder.py +0 -228
- synth_ai/api/train/configs/__init__.py +0 -44
- synth_ai/api/train/configs/rl.py +0 -134
- synth_ai/api/train/configs/sft.py +0 -95
- synth_ai/api/train/configs/shared.py +0 -24
- synth_ai/api/train/env_resolver.py +0 -349
- synth_ai/api/train/pollers.py +0 -75
- synth_ai/api/train/supported_algos.py +0 -147
- synth_ai/api/train/task_app.py +0 -195
- synth_ai/api/train/utils.py +0 -225
- synth_ai/cli/_modal_wrapper.py +0 -29
- synth_ai/cli/_storage.py +0 -20
- synth_ai/cli/_typer_patch.py +0 -49
- synth_ai/cli/_validate_task_app.py +0 -11
- synth_ai/cli/balance.py +0 -216
- synth_ai/cli/calc.py +0 -84
- synth_ai/cli/demo.py +0 -165
- synth_ai/cli/legacy_root_backup.py +0 -468
- synth_ai/cli/man.py +0 -106
- synth_ai/cli/recent.py +0 -132
- synth_ai/cli/rl_demo.py +0 -254
- synth_ai/cli/status.py +0 -134
- synth_ai/cli/task_apps.py +0 -4523
- synth_ai/cli/traces.py +0 -164
- synth_ai/cli/tui.py +0 -57
- synth_ai/cli/watch.py +0 -506
- synth_ai/compound/cais.py +0 -0
- synth_ai/config/base_url.py +0 -107
- synth_ai/core/experiment.py +0 -13
- synth_ai/core/system.py +0 -15
- synth_ai/demo_registry.py +0 -295
- synth_ai/demos/core/__init__.py +0 -1
- synth_ai/demos/core/cli.py +0 -1718
- synth_ai/demos/demo_task_apps/core.py +0 -440
- synth_ai/demos/demo_task_apps/crafter/grpo_crafter_task_app.py +0 -184
- synth_ai/demos/demo_task_apps/math/config.toml +0 -74
- 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 -739
- synth_ai/demos/demo_task_apps/math/task_app_entry.py +0 -37
- 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 -302
- 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 -495
- 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 -300
- synth_ai/environments/examples/enron/environment.py +0 -234
- 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 -721
- synth_ai/environments/examples/red/engine_helpers/__init__.py +0 -1
- synth_ai/environments/examples/red/engine_helpers/memory_map.py +0 -35
- 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_progression.py +0 -477
- 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 -172
- synth_ai/environments/examples/red/environment.py +0 -298
- 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 -544
- 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 -421
- 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 -363
- synth_ai/environments/service/app.py +0 -97
- synth_ai/environments/service/core_routes.py +0 -1021
- 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 -81
- synth_ai/environments/tasks/filters.py +0 -40
- synth_ai/environments/tasks/utils.py +0 -90
- synth_ai/environments/v0_observability/history.py +0 -3
- synth_ai/environments/v0_observability/log.py +0 -2
- synth_ai/evals/__init__.py +0 -15
- synth_ai/evals/base.py +0 -13
- synth_ai/evals/client.py +0 -82
- synth_ai/evals/types.py +0 -42
- synth_ai/handshake.py +0 -109
- synth_ai/http.py +0 -26
- synth_ai/http_client.py +0 -136
- synth_ai/inference/__init__.py +0 -5
- synth_ai/inference/client.py +0 -34
- synth_ai/jobs/client.py +0 -295
- synth_ai/judge_schemas.py +0 -127
- synth_ai/learning/__init__.py +0 -59
- synth_ai/learning/client.py +0 -241
- synth_ai/learning/ft_client.py +0 -7
- synth_ai/learning/health.py +0 -49
- synth_ai/learning/jobs.py +0 -201
- synth_ai/learning/rl/__init__.py +0 -39
- synth_ai/learning/rl/client.py +0 -267
- synth_ai/learning/rl/contracts.py +0 -27
- synth_ai/learning/rl/env_keys.py +0 -166
- synth_ai/learning/rl/secrets.py +0 -13
- synth_ai/learning/sft/client.py +0 -68
- synth_ai/learning/sft/config.py +0 -270
- synth_ai/learning/sft/data.py +0 -295
- synth_ai/learning/validators.py +0 -49
- synth_ai/lm/__init__.py +0 -25
- synth_ai/task/__init__.py +0 -121
- synth_ai/task/apps/__init__.py +0 -129
- synth_ai/task/client.py +0 -167
- synth_ai/task/config.py +0 -257
- synth_ai/task/contracts.py +0 -236
- synth_ai/task/datasets.py +0 -108
- synth_ai/task/proxy.py +0 -251
- synth_ai/task/rubrics/__init__.py +0 -56
- synth_ai/task/rubrics/loaders.py +0 -152
- synth_ai/task/rubrics/strict.py +0 -149
- synth_ai/task/server.py +0 -432
- synth_ai/task/trace_correlation_helpers.py +0 -315
- synth_ai/task/tracing_utils.py +0 -84
- synth_ai/task/validators.py +0 -418
- synth_ai/tracing_v3/__init__.py +0 -97
- synth_ai/tracing_v3/abstractions.py +0 -302
- synth_ai/tracing_v3/config.py +0 -84
- synth_ai/tracing_v3/db_config.py +0 -194
- synth_ai/tracing_v3/decorators.py +0 -398
- synth_ai/tracing_v3/llm_call_record_helpers.py +0 -391
- synth_ai/tracing_v3/migration_helper.py +0 -120
- synth_ai/tracing_v3/session_tracer.py +0 -540
- synth_ai/tracing_v3/storage/base.py +0 -210
- synth_ai/tracing_v3/storage/config.py +0 -75
- synth_ai/tracing_v3/storage/factory.py +0 -39
- synth_ai/tracing_v3/trace_utils.py +0 -317
- synth_ai/tracing_v3/turso/daemon.py +0 -151
- synth_ai/tracing_v3/turso/models.py +0 -469
- synth_ai/tracing_v3/turso/native_manager.py +0 -1209
- synth_ai/tracing_v3/utils.py +0 -108
- synth_ai/tui/__init__.py +0 -5
- synth_ai/tui/__main__.py +0 -13
- synth_ai/tui/cli/__init__.py +0 -1
- synth_ai/tui/cli/query_experiments.py +0 -164
- synth_ai/tui/cli/query_experiments_v3.py +0 -164
- synth_ai/tui/dashboard.py +0 -906
- synth_ai/v0/api/__init__.py +0 -8
- synth_ai/v0/api/models/__init__.py +0 -8
- synth_ai/v0/api/models/supported.py +0 -8
- synth_ai/v0/config/__init__.py +0 -15
- synth_ai/v0/config/base_url.py +0 -12
- synth_ai/v0/lm/__init__.py +0 -51
- synth_ai/v0/lm/caching/__init__.py +0 -0
- synth_ai/v0/lm/caching/constants.py +0 -6
- synth_ai/v0/lm/caching/dbs.py +0 -0
- synth_ai/v0/lm/caching/ephemeral.py +0 -100
- synth_ai/v0/lm/caching/handler.py +0 -137
- synth_ai/v0/lm/caching/initialize.py +0 -11
- synth_ai/v0/lm/caching/persistent.py +0 -114
- synth_ai/v0/lm/config.py +0 -115
- synth_ai/v0/lm/constants.py +0 -32
- synth_ai/v0/lm/core/__init__.py +0 -8
- synth_ai/v0/lm/core/all.py +0 -73
- synth_ai/v0/lm/core/exceptions.py +0 -5
- synth_ai/v0/lm/core/main.py +0 -331
- synth_ai/v0/lm/core/main_v3.py +0 -594
- synth_ai/v0/lm/core/synth_models.py +0 -35
- synth_ai/v0/lm/core/vendor_clients.py +0 -190
- synth_ai/v0/lm/cost/__init__.py +0 -0
- synth_ai/v0/lm/cost/monitor.py +0 -1
- synth_ai/v0/lm/cost/statefulness.py +0 -1
- synth_ai/v0/lm/injection.py +0 -80
- synth_ai/v0/lm/overrides.py +0 -206
- synth_ai/v0/lm/provider_support/__init__.py +0 -8
- synth_ai/v0/lm/provider_support/anthropic.py +0 -972
- synth_ai/v0/lm/provider_support/openai.py +0 -1139
- synth_ai/v0/lm/provider_support/suppress_logging.py +0 -31
- synth_ai/v0/lm/structured_outputs/__init__.py +0 -0
- synth_ai/v0/lm/structured_outputs/handler.py +0 -440
- synth_ai/v0/lm/structured_outputs/inject.py +0 -297
- synth_ai/v0/lm/structured_outputs/rehabilitate.py +0 -185
- synth_ai/v0/lm/tools/__init__.py +0 -3
- synth_ai/v0/lm/tools/base.py +0 -172
- synth_ai/v0/lm/unified_interface.py +0 -202
- synth_ai/v0/lm/vendors/__init__.py +0 -0
- synth_ai/v0/lm/vendors/base.py +0 -81
- synth_ai/v0/lm/vendors/core/__init__.py +0 -0
- synth_ai/v0/lm/vendors/core/anthropic_api.py +0 -387
- synth_ai/v0/lm/vendors/core/gemini_api.py +0 -292
- synth_ai/v0/lm/vendors/core/mistral_api.py +0 -322
- synth_ai/v0/lm/vendors/core/openai_api.py +0 -227
- synth_ai/v0/lm/vendors/core/synth_dev_api.py +0 -0
- synth_ai/v0/lm/vendors/local/__init__.py +0 -0
- synth_ai/v0/lm/vendors/local/ollama.py +0 -0
- synth_ai/v0/lm/vendors/openai_standard.py +0 -782
- synth_ai/v0/lm/vendors/openai_standard_responses.py +0 -259
- synth_ai/v0/lm/vendors/retries.py +0 -22
- synth_ai/v0/lm/vendors/supported/__init__.py +0 -0
- synth_ai/v0/lm/vendors/supported/custom_endpoint.py +0 -415
- synth_ai/v0/lm/vendors/supported/deepseek.py +0 -69
- synth_ai/v0/lm/vendors/supported/grok.py +0 -75
- synth_ai/v0/lm/vendors/supported/groq.py +0 -16
- synth_ai/v0/lm/vendors/supported/ollama.py +0 -15
- synth_ai/v0/lm/vendors/supported/openrouter.py +0 -74
- synth_ai/v0/lm/vendors/supported/together.py +0 -11
- synth_ai/v0/lm/vendors/synth_client.py +0 -835
- synth_ai/v0/lm/warmup.py +0 -186
- 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 -409
- 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/v0/tracing_v3/__init__.py +0 -10
- synth_ai/v0/tracing_v3/abstractions.py +0 -3
- synth_ai/v0/tracing_v3/decorators.py +0 -3
- synth_ai/v0/tracing_v3/llm_call_record_helpers.py +0 -3
- synth_ai/v0/tracing_v3/session_tracer.py +0 -3
- synth_ai-0.2.14.dist-info/METADATA +0 -139
- synth_ai-0.2.14.dist-info/RECORD +0 -762
- synth_ai-0.2.14.dist-info/top_level.txt +0 -2
- /synth_ai/{demos/demo_task_apps → cli/demo_apps}/crafter/__init__.py +0 -0
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/__init__.py +0 -0
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/crafter/configs/crafter_fft_4b.toml +0 -0
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/crafter/configs/rl_from_base_qwen4b.toml +0 -0
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/__init__.py +0 -0
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/_common.py +0 -0
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/app.py +0 -0
- /synth_ai/{demos → cli/demo_apps}/demo_task_apps/math/deploy_modal.py +0 -0
- {examples/task_apps → synth_ai/core/apps}/__init__.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/examples/basic_usage.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/hooks.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/lm_call_record_abstractions.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/replica_sync.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/serialization.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/{tracing_v3 → core/tracing_v3}/storage/utils.py +0 -0
- /synth_ai/{tracing_v3 → core/tracing_v3}/turso/__init__.py +0 -0
- /synth_ai/{learning → sdk/learning}/algorithms.py +0 -0
- /synth_ai/{learning → sdk/learning}/config.py +0 -0
- /synth_ai/{learning → sdk/learning}/constants.py +0 -0
- /synth_ai/{learning → sdk/learning}/core.py +0 -0
- /synth_ai/{learning → sdk/learning}/gateway.py +0 -0
- /synth_ai/{learning → sdk/learning}/rl/config.py +0 -0
- /synth_ai/{learning → sdk/learning}/rl_client.py +0 -0
- /synth_ai/{learning → sdk/learning}/sft/__init__.py +0 -0
- /synth_ai/{learning → sdk/learning}/sse.py +0 -0
- /synth_ai/{task → sdk/task}/auth.py +0 -0
- /synth_ai/{task → sdk/task}/errors.py +0 -0
- /synth_ai/{task → sdk/task}/health.py +0 -0
- /synth_ai/{task → sdk/task}/json.py +0 -0
- /synth_ai/{task → sdk/task}/rubrics/models.py +0 -0
- /synth_ai/{task → sdk/task}/rubrics/scoring.py +0 -0
- /synth_ai/{task → sdk/task}/vendors.py +0 -0
- {synth_ai-0.2.14.dist-info → synth_ai-0.4.4.dist-info}/WHEEL +0 -0
- {synth_ai-0.2.14.dist-info → synth_ai-0.4.4.dist-info}/entry_points.txt +0 -0
- {synth_ai-0.2.14.dist-info → synth_ai-0.4.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Tracing v3 - Turso/sqld based tracing implementation.
|
|
2
|
+
|
|
3
|
+
This module provides a modern, async-first tracing system for capturing and storing
|
|
4
|
+
detailed execution traces from AI systems. It's designed to handle high-throughput
|
|
5
|
+
scenarios with proper async/await patterns throughout.
|
|
6
|
+
|
|
7
|
+
Architecture Overview:
|
|
8
|
+
---------------------
|
|
9
|
+
The v3 tracing system is built on several key components:
|
|
10
|
+
|
|
11
|
+
1. **Data Abstractions** (`abstractions.py`):
|
|
12
|
+
- Dataclass-based models for traces, events, and messages
|
|
13
|
+
- Type-safe representations of session data
|
|
14
|
+
- Support for multiple event types (Runtime, Environment, LM/CAIS)
|
|
15
|
+
|
|
16
|
+
2. **Session Tracer** (`session_tracer.py`):
|
|
17
|
+
- Main interface for creating and managing trace sessions
|
|
18
|
+
- Async context managers for session and timestep management
|
|
19
|
+
- Automatic event and message recording with proper ordering
|
|
20
|
+
|
|
21
|
+
3. **Async Storage** (`turso/manager.py`):
|
|
22
|
+
- SQLAlchemy async engine with Turso/sqld backend
|
|
23
|
+
- Batch insert capabilities for high-throughput scenarios
|
|
24
|
+
- Analytics views for querying trace data
|
|
25
|
+
|
|
26
|
+
4. **Decorators** (`decorators.py`):
|
|
27
|
+
- Context-aware decorators using asyncio's ContextVar
|
|
28
|
+
- Automatic LLM call tracing with token/cost tracking
|
|
29
|
+
- Session and turn number propagation across async boundaries
|
|
30
|
+
|
|
31
|
+
5. **Hook System** (`hooks.py`):
|
|
32
|
+
- Extensible hook points throughout the tracing lifecycle
|
|
33
|
+
- Support for both sync and async hook callbacks
|
|
34
|
+
- Pre/post processing of events and messages
|
|
35
|
+
|
|
36
|
+
6. **Replica Sync** (`replica_sync.py`):
|
|
37
|
+
- Optional background sync with remote Turso database
|
|
38
|
+
- Local embedded SQLite for low-latency writes
|
|
39
|
+
- Configurable sync intervals
|
|
40
|
+
|
|
41
|
+
Key Features:
|
|
42
|
+
------------
|
|
43
|
+
- **Async-First**: All database operations are async, preventing blocking
|
|
44
|
+
- **Context Propagation**: Session/turn info flows through async call chains
|
|
45
|
+
- **Type Safety**: Full typing support with dataclasses and type hints
|
|
46
|
+
- **Extensibility**: Hook system allows custom processing logic
|
|
47
|
+
- **Performance**: Batch operations and connection pooling for efficiency
|
|
48
|
+
|
|
49
|
+
Usage Example:
|
|
50
|
+
-------------
|
|
51
|
+
from synth_ai.core.tracing_v3 import SessionTracer
|
|
52
|
+
|
|
53
|
+
tracer = SessionTracer()
|
|
54
|
+
await tracer.initialize()
|
|
55
|
+
|
|
56
|
+
async with tracer.session() as session_id:
|
|
57
|
+
async with tracer.timestep("step1", turn_number=1):
|
|
58
|
+
# Record events during execution
|
|
59
|
+
await tracer.record_event(RuntimeEvent(...))
|
|
60
|
+
await tracer.record_message("User input", "user")
|
|
61
|
+
|
|
62
|
+
Configuration:
|
|
63
|
+
-------------
|
|
64
|
+
The system uses environment variables for configuration:
|
|
65
|
+
- TURSO_LOCAL_DB_URL: Local SQLite database URL
|
|
66
|
+
- TURSO_POOL_SIZE: Connection pool size (default: 8)
|
|
67
|
+
- TURSO_ECHO_SQL: Enable SQL logging (default: false)
|
|
68
|
+
- SQLD_DB_PATH: Path to SQLite database file
|
|
69
|
+
|
|
70
|
+
See `config.py` for full configuration options.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
from .abstractions import (
|
|
74
|
+
BaseEvent,
|
|
75
|
+
EnvironmentEvent,
|
|
76
|
+
RuntimeEvent,
|
|
77
|
+
SessionEventMarkovBlanketMessage,
|
|
78
|
+
SessionMessageContent,
|
|
79
|
+
SessionTimeStep,
|
|
80
|
+
SessionTrace,
|
|
81
|
+
TimeRecord,
|
|
82
|
+
)
|
|
83
|
+
from .config import TursoConfig
|
|
84
|
+
from .llm_call_record_helpers import BaseLMResponse
|
|
85
|
+
from .session_tracer import SessionTracer
|
|
86
|
+
|
|
87
|
+
__all__ = [
|
|
88
|
+
"SessionTracer",
|
|
89
|
+
"SessionTrace",
|
|
90
|
+
"SessionTimeStep",
|
|
91
|
+
"BaseEvent",
|
|
92
|
+
"RuntimeEvent",
|
|
93
|
+
"EnvironmentEvent",
|
|
94
|
+
"SessionEventMarkovBlanketMessage",
|
|
95
|
+
"SessionMessageContent",
|
|
96
|
+
"TimeRecord",
|
|
97
|
+
"TursoConfig",
|
|
98
|
+
"BaseLMResponse",
|
|
99
|
+
]
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
"""Core data structures for tracing v3.
|
|
2
|
+
|
|
3
|
+
This module defines the fundamental data structures used throughout the tracing system.
|
|
4
|
+
All structures are implemented as frozen dataclasses for immutability and type safety.
|
|
5
|
+
|
|
6
|
+
The hierarchy is designed to support different types of events while maintaining
|
|
7
|
+
a consistent interface for storage and processing.
|
|
8
|
+
|
|
9
|
+
Event Type Hierarchy:
|
|
10
|
+
-------------------
|
|
11
|
+
- BaseEvent: Common fields for all events
|
|
12
|
+
- RuntimeEvent: Events from the runtime system (e.g., actions taken)
|
|
13
|
+
- EnvironmentEvent: Events from the environment (e.g., rewards, termination)
|
|
14
|
+
- LMCAISEvent: Language model events with token/cost tracking
|
|
15
|
+
|
|
16
|
+
Session Structure:
|
|
17
|
+
-----------------
|
|
18
|
+
- SessionTrace: Top-level container for a complete session
|
|
19
|
+
- SessionTimeStep: Logical steps within a session (e.g., conversation turns)
|
|
20
|
+
- Events: Individual events that occurred during the timestep
|
|
21
|
+
- Messages: Information passed between subsystems (user, agent, runtime, environments)
|
|
22
|
+
|
|
23
|
+
Concepts:
|
|
24
|
+
---------
|
|
25
|
+
- Events capture something that happened inside a subsystem. They may or may not be externally
|
|
26
|
+
visible. Examples include an LLM API call (LMCAISEvent), a tool selection (RuntimeEvent), or
|
|
27
|
+
a tool execution outcome (EnvironmentEvent).
|
|
28
|
+
|
|
29
|
+
- Messages represent information transmitted between subsystems within the session.
|
|
30
|
+
Messages are used to record communications like: a user sending input to the agent,
|
|
31
|
+
the agent/runtime sending a tool invocation to an environment, the environment sending a
|
|
32
|
+
tool result back, and the agent sending a reply to the user. Do not confuse these with
|
|
33
|
+
provider-specific LLM API "messages" (prompt formatting) — those belong inside an LMCAISEvent
|
|
34
|
+
as part of its input/output content, not as SessionEventMessages.
|
|
35
|
+
|
|
36
|
+
Example usage:
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from synth_ai.core.tracing_v3.abstractions import (
|
|
40
|
+
SessionTrace,
|
|
41
|
+
SessionTimeStep,
|
|
42
|
+
LMCAISEvent,
|
|
43
|
+
EnvironmentEvent,
|
|
44
|
+
TimeRecord,
|
|
45
|
+
)
|
|
46
|
+
import time
|
|
47
|
+
|
|
48
|
+
# Create a simple trace with one turn
|
|
49
|
+
trace = SessionTrace(
|
|
50
|
+
session_id="sess_example",
|
|
51
|
+
session_time_steps=[
|
|
52
|
+
SessionTimeStep(
|
|
53
|
+
step_id="turn_1",
|
|
54
|
+
step_index=0,
|
|
55
|
+
events=[
|
|
56
|
+
LMCAISEvent(
|
|
57
|
+
system_instance_id="llm",
|
|
58
|
+
time_record=TimeRecord(event_time=time.time()),
|
|
59
|
+
model_name="gpt-4o",
|
|
60
|
+
input_tokens=150,
|
|
61
|
+
output_tokens=50,
|
|
62
|
+
),
|
|
63
|
+
EnvironmentEvent(
|
|
64
|
+
system_instance_id="tool_executor",
|
|
65
|
+
time_record=TimeRecord(event_time=time.time()),
|
|
66
|
+
reward=1.0,
|
|
67
|
+
terminated=True,
|
|
68
|
+
),
|
|
69
|
+
],
|
|
70
|
+
)
|
|
71
|
+
],
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Convert to dict for serialization
|
|
75
|
+
trace_dict = trace.to_dict()
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
See Also:
|
|
79
|
+
- V3 Traces SDK guide: /sdk/tracing/v3-traces
|
|
80
|
+
- Event rewards: /sdk/tracing/rewards/event-rewards
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
from __future__ import annotations
|
|
84
|
+
|
|
85
|
+
from dataclasses import asdict, dataclass, field
|
|
86
|
+
from datetime import UTC, datetime
|
|
87
|
+
from typing import Any
|
|
88
|
+
|
|
89
|
+
from .lm_call_record_abstractions import LLMCallRecord
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@dataclass
|
|
93
|
+
class TimeRecord:
|
|
94
|
+
"""Time information for events and messages.
|
|
95
|
+
|
|
96
|
+
This class captures timing information with microsecond precision for event
|
|
97
|
+
correlation and performance analysis.
|
|
98
|
+
|
|
99
|
+
Attributes:
|
|
100
|
+
event_time: Unix timestamp (float) when the event occurred. This is the
|
|
101
|
+
primary timestamp used for ordering and correlation.
|
|
102
|
+
message_time: Optional integer timestamp for message-specific timing.
|
|
103
|
+
Can be used for external message IDs or sequence numbers.
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
event_time: float
|
|
107
|
+
message_time: int | None = None
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
@dataclass(frozen=True)
|
|
111
|
+
class SessionMessageContent:
|
|
112
|
+
"""Normalized payload stored alongside session messages."""
|
|
113
|
+
|
|
114
|
+
text: str | None = None
|
|
115
|
+
json_payload: str | None = None
|
|
116
|
+
|
|
117
|
+
def as_text(self) -> str:
|
|
118
|
+
return self.text or (self.json_payload or "")
|
|
119
|
+
|
|
120
|
+
def has_json(self) -> bool:
|
|
121
|
+
return self.json_payload is not None
|
|
122
|
+
|
|
123
|
+
def __str__(self) -> str: # pragma: no cover - convenience for logging
|
|
124
|
+
return self.as_text()
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@dataclass
|
|
128
|
+
class SessionEventMarkovBlanketMessage:
|
|
129
|
+
"""Message crossing Markov blanket boundaries between systems in a session.
|
|
130
|
+
|
|
131
|
+
IMPORTANT: This represents information transfer BETWEEN distinct systems/subsystems,
|
|
132
|
+
where each system is conceptualized as having a Markov blanket that separates its
|
|
133
|
+
internal states from the external environment. These messages cross those boundaries.
|
|
134
|
+
|
|
135
|
+
This is NOT for chat messages within an LLM conversation (those belong in LLMCallRecord).
|
|
136
|
+
Instead, this captures inter-system communication such as:
|
|
137
|
+
- Human -> Agent system (user providing instructions)
|
|
138
|
+
- Agent -> Runtime (agent deciding on an action)
|
|
139
|
+
- Runtime -> Environment (executing a tool/action)
|
|
140
|
+
- Environment -> Runtime (returning results)
|
|
141
|
+
- Runtime -> Agent (passing back results)
|
|
142
|
+
- Agent -> Human (final response)
|
|
143
|
+
|
|
144
|
+
Each system maintains its own internal state and processing, but can only influence
|
|
145
|
+
other systems through these explicit boundary-crossing messages. This follows the
|
|
146
|
+
Free Energy Principle where systems minimize surprise by maintaining boundaries.
|
|
147
|
+
|
|
148
|
+
Attributes:
|
|
149
|
+
content: The actual message content crossing the boundary (text, JSON, etc.)
|
|
150
|
+
message_type: Type of boundary crossing (e.g., 'observation', 'action', 'result')
|
|
151
|
+
time_record: Timing information for the boundary crossing
|
|
152
|
+
metadata: Boundary crossing metadata. Recommended keys:
|
|
153
|
+
- 'step_id': Timestep identifier
|
|
154
|
+
- 'from_system_instance_id': UUID of the sending system
|
|
155
|
+
- 'to_system_instance_id': UUID of the receiving system
|
|
156
|
+
- 'from_system_role': Role of sender (e.g., 'human', 'agent', 'runtime', 'environment')
|
|
157
|
+
- 'to_system_role': Role of receiver
|
|
158
|
+
- 'boundary_type': Type of Markov blanket boundary being crossed
|
|
159
|
+
- 'call_id': Correlate request/response pairs across boundaries
|
|
160
|
+
- 'causal_influence': Direction of causal flow
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
content: SessionMessageContent
|
|
164
|
+
message_type: str
|
|
165
|
+
time_record: TimeRecord
|
|
166
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@dataclass
|
|
170
|
+
class BaseEvent:
|
|
171
|
+
"""Base class for all event types.
|
|
172
|
+
|
|
173
|
+
This is the foundation for all events in the tracing system. Every event must
|
|
174
|
+
have a system identifier and timing information. Events are intra-system facts
|
|
175
|
+
(they occur within a subsystem) and are not necessarily direct communications.
|
|
176
|
+
|
|
177
|
+
Attributes:
|
|
178
|
+
system_instance_id: Identifier for the system/component that generated
|
|
179
|
+
this event (e.g., 'llm', 'environment', 'tool_executor')
|
|
180
|
+
time_record: Timing information for the event
|
|
181
|
+
metadata: Flexible dictionary for event-specific data. Common keys include:
|
|
182
|
+
- 'step_id': Associated timestep identifier
|
|
183
|
+
- 'error': Error information if event failed
|
|
184
|
+
- 'duration_ms': Event duration in milliseconds
|
|
185
|
+
event_metadata: Optional list for structured metadata that doesn't fit
|
|
186
|
+
in the dictionary format (e.g., tensor data, embeddings)
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
system_instance_id: str
|
|
190
|
+
time_record: TimeRecord
|
|
191
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
192
|
+
event_metadata: list[Any] | None = None
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
@dataclass
|
|
196
|
+
class RuntimeEvent(BaseEvent):
|
|
197
|
+
"""Event from runtime system.
|
|
198
|
+
|
|
199
|
+
Captures events from the AI system's runtime, typically representing decisions
|
|
200
|
+
or actions taken by the system (e.g., selecting a tool with arguments).
|
|
201
|
+
Use paired SessionEventMessages to record the communication of this choice to
|
|
202
|
+
the environment.
|
|
203
|
+
|
|
204
|
+
Attributes:
|
|
205
|
+
actions: List of action identifiers or indices. The interpretation
|
|
206
|
+
depends on the system (e.g., discrete action indices for RL,
|
|
207
|
+
tool selection IDs for agents, etc.)
|
|
208
|
+
"""
|
|
209
|
+
|
|
210
|
+
actions: list[int] = field(default_factory=list)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
@dataclass
|
|
214
|
+
class EnvironmentEvent(BaseEvent):
|
|
215
|
+
"""Event from environment.
|
|
216
|
+
|
|
217
|
+
Captures feedback from the environment in response to system actions (e.g.,
|
|
218
|
+
command output, exit codes, observations). Use a paired SessionEventMessage
|
|
219
|
+
to record the environment-to-agent communication of the result.
|
|
220
|
+
Follows the Gymnasium/OpenAI Gym convention for compatibility.
|
|
221
|
+
|
|
222
|
+
Attributes:
|
|
223
|
+
reward: Scalar reward signal from the environment
|
|
224
|
+
terminated: Whether the episode ended due to reaching a terminal state
|
|
225
|
+
truncated: Whether the episode ended due to a time/step limit
|
|
226
|
+
system_state_before: System state before the action (for debugging)
|
|
227
|
+
system_state_after: System state after the action (observations)
|
|
228
|
+
"""
|
|
229
|
+
|
|
230
|
+
reward: float = 0.0
|
|
231
|
+
terminated: bool = False
|
|
232
|
+
truncated: bool = False
|
|
233
|
+
system_state_before: dict[str, Any] | None = None
|
|
234
|
+
system_state_after: dict[str, Any] | None = None
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
@dataclass
|
|
238
|
+
class LMCAISEvent(BaseEvent):
|
|
239
|
+
"""Extended CAIS event for language model interactions.
|
|
240
|
+
|
|
241
|
+
CAIS (Claude AI System) events capture detailed information about LLM calls,
|
|
242
|
+
including performance metrics, cost tracking, and distributed tracing support.
|
|
243
|
+
Treat provider-specific prompt/completion structures as part of this event's
|
|
244
|
+
data. Do not emit them as SessionEventMessages.
|
|
245
|
+
|
|
246
|
+
Attributes:
|
|
247
|
+
model_name: The specific model used (e.g., 'gpt-4', 'claude-3-opus')
|
|
248
|
+
provider: LLM provider (e.g., 'openai', 'anthropic', 'local')
|
|
249
|
+
input_tokens: Number of tokens in the prompt/input
|
|
250
|
+
output_tokens: Number of tokens in the completion/output
|
|
251
|
+
total_tokens: Total tokens used (input + output)
|
|
252
|
+
cost_usd: Estimated cost in US dollars for this call
|
|
253
|
+
latency_ms: End-to-end latency in milliseconds
|
|
254
|
+
span_id: OpenTelemetry compatible span identifier
|
|
255
|
+
trace_id: OpenTelemetry compatible trace identifier
|
|
256
|
+
system_state_before: State snapshot before the LLM call
|
|
257
|
+
system_state_after: State snapshot after the LLM call
|
|
258
|
+
call_records: List of normalized LLM call records capturing request/response
|
|
259
|
+
details (messages, tool calls/results, usage, params, etc.).
|
|
260
|
+
"""
|
|
261
|
+
|
|
262
|
+
model_name: str = ""
|
|
263
|
+
provider: str | None = None
|
|
264
|
+
input_tokens: int | None = None
|
|
265
|
+
output_tokens: int | None = None
|
|
266
|
+
total_tokens: int | None = None
|
|
267
|
+
cost_usd: float | None = None
|
|
268
|
+
latency_ms: int | None = None
|
|
269
|
+
span_id: str | None = None
|
|
270
|
+
trace_id: str | None = None
|
|
271
|
+
system_state_before: dict[str, Any] | None = None
|
|
272
|
+
system_state_after: dict[str, Any] | None = None
|
|
273
|
+
call_records: list[LLMCallRecord] = field(default_factory=list)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
@dataclass
|
|
277
|
+
class SessionTimeStep:
|
|
278
|
+
"""A logical timestep within a session.
|
|
279
|
+
|
|
280
|
+
Represents a discrete step in the session timeline. In conversational AI,
|
|
281
|
+
this often corresponds to a single turn of dialogue. In RL systems, it
|
|
282
|
+
might represent a single environment step.
|
|
283
|
+
|
|
284
|
+
Attributes:
|
|
285
|
+
step_id: Unique identifier for this step (e.g., 'turn_1', 'step_42')
|
|
286
|
+
step_index: Sequential index of this step within the session
|
|
287
|
+
timestamp: When this timestep started (UTC)
|
|
288
|
+
turn_number: Optional turn number for conversational contexts
|
|
289
|
+
events: All events that occurred during this timestep
|
|
290
|
+
step_messages: Messages exchanged during this timestep
|
|
291
|
+
step_metadata: Additional metadata specific to this step (e.g.,
|
|
292
|
+
'user_feedback', 'context_switches', 'tool_calls')
|
|
293
|
+
completed_at: When this timestep was completed (None if still active)
|
|
294
|
+
"""
|
|
295
|
+
|
|
296
|
+
step_id: str = ""
|
|
297
|
+
step_index: int = 0
|
|
298
|
+
timestamp: datetime = field(default_factory=lambda: datetime.now(UTC))
|
|
299
|
+
turn_number: int | None = None
|
|
300
|
+
events: list[BaseEvent] = field(default_factory=list)
|
|
301
|
+
markov_blanket_messages: list[SessionEventMarkovBlanketMessage] = field(default_factory=list)
|
|
302
|
+
step_metadata: dict[str, Any] = field(default_factory=dict)
|
|
303
|
+
completed_at: datetime | None = None
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
@dataclass
|
|
307
|
+
class SessionTrace:
|
|
308
|
+
"""Complete trace of a session.
|
|
309
|
+
|
|
310
|
+
The top-level container that holds all data for a single execution session.
|
|
311
|
+
This could represent a complete conversation, an RL episode, or any other
|
|
312
|
+
bounded interaction sequence.
|
|
313
|
+
|
|
314
|
+
Attributes:
|
|
315
|
+
session_id: Unique identifier for this session
|
|
316
|
+
created_at: When the session started (UTC)
|
|
317
|
+
session_time_steps: Ordered list of timesteps in this session
|
|
318
|
+
event_history: Complete chronological list of all events
|
|
319
|
+
message_history: Complete chronological list of all messages
|
|
320
|
+
metadata: Session-level metadata (e.g., 'user_id', 'experiment_id',
|
|
321
|
+
'model_config', 'environment_name')
|
|
322
|
+
session_metadata: Optional list of structured metadata entries that
|
|
323
|
+
don't fit the dictionary format
|
|
324
|
+
|
|
325
|
+
Note:
|
|
326
|
+
Both event_history and message_history contain the complete record,
|
|
327
|
+
while individual timesteps also reference their specific events/messages.
|
|
328
|
+
This redundancy enables both efficient queries and complete reconstruction.
|
|
329
|
+
"""
|
|
330
|
+
|
|
331
|
+
session_id: str = ""
|
|
332
|
+
created_at: datetime = field(default_factory=lambda: datetime.now(UTC))
|
|
333
|
+
session_time_steps: list[SessionTimeStep] = field(default_factory=list)
|
|
334
|
+
event_history: list[BaseEvent] = field(default_factory=list)
|
|
335
|
+
markov_blanket_message_history: list[SessionEventMarkovBlanketMessage] = field(
|
|
336
|
+
default_factory=list
|
|
337
|
+
)
|
|
338
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
339
|
+
session_metadata: list[dict[str, Any]] | None = None
|
|
340
|
+
|
|
341
|
+
def to_dict(self) -> dict[str, Any]:
|
|
342
|
+
"""Convert to dictionary representation.
|
|
343
|
+
|
|
344
|
+
Returns:
|
|
345
|
+
A dictionary containing all session data, suitable for
|
|
346
|
+
JSON serialization or database storage.
|
|
347
|
+
"""
|
|
348
|
+
return asdict(self)
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"""Configuration helpers for tracing v3.
|
|
2
|
+
|
|
3
|
+
This module centralises the logic for discovering which datastore the tracer
|
|
4
|
+
should use. Historically the project defaulted to a local SQLite file which
|
|
5
|
+
breaks under parallel load. The new resolver inspects environment variables
|
|
6
|
+
and defaults to Turso/libSQL whenever credentials are supplied, while keeping a
|
|
7
|
+
SQLite fallback for contributors without remote access.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import Any
|
|
16
|
+
from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
|
|
17
|
+
|
|
18
|
+
from synth_ai.core.tracing_v3.constants import canonical_trace_db_path
|
|
19
|
+
|
|
20
|
+
# STARTUP DIAGNOSTIC - Commented out to reduce noise
|
|
21
|
+
# print(f"[TRACING_V3_CONFIG_LOADED] Python={sys.version_info.major}.{sys.version_info.minor} MODAL_IS_REMOTE={os.getenv('MODAL_IS_REMOTE')}", flush=True)
|
|
22
|
+
|
|
23
|
+
# ---------------------------------------------------------------------------
|
|
24
|
+
# DSN resolution helpers
|
|
25
|
+
# ---------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
_CANONICAL_DB_PATH = canonical_trace_db_path()
|
|
28
|
+
_DEFAULT_TRACE_DIR = Path(os.getenv("SYNTH_TRACES_DIR", _CANONICAL_DB_PATH.parent))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _normalise_path(path: Path) -> Path:
|
|
32
|
+
"""Resolve relative paths and expand user/home markers."""
|
|
33
|
+
path = path.expanduser()
|
|
34
|
+
if not path.is_absolute():
|
|
35
|
+
path = (Path.cwd() / path).resolve()
|
|
36
|
+
return path
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _is_modal_environment() -> bool:
|
|
40
|
+
"""Detect if running in Modal container.
|
|
41
|
+
|
|
42
|
+
Modal automatically sets MODAL_IS_REMOTE=1 in all deployed containers.
|
|
43
|
+
We check this first, then fall back to other Modal env vars.
|
|
44
|
+
"""
|
|
45
|
+
# Modal sets this in all deployed containers
|
|
46
|
+
if os.getenv("MODAL_IS_REMOTE") == "1":
|
|
47
|
+
return True
|
|
48
|
+
|
|
49
|
+
# Additional Modal env vars as fallback
|
|
50
|
+
return bool(
|
|
51
|
+
os.getenv("MODAL_TASK_ID")
|
|
52
|
+
or os.getenv("MODAL_ENVIRONMENT")
|
|
53
|
+
or os.getenv("SERVICE", "").upper() == "MODAL"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _split_auth_from_url(url: str) -> tuple[str, str | None]:
|
|
58
|
+
"""Strip any auth_token query parameter from a DSN."""
|
|
59
|
+
parsed = urlparse(url)
|
|
60
|
+
if not parsed.query:
|
|
61
|
+
return url, None
|
|
62
|
+
|
|
63
|
+
params = dict(parse_qsl(parsed.query, keep_blank_values=True))
|
|
64
|
+
token = params.pop("auth_token", None)
|
|
65
|
+
query = urlencode(params, doseq=True)
|
|
66
|
+
# urlunparse will omit the '?' automatically when query is empty
|
|
67
|
+
sanitised = urlunparse(parsed._replace(query=query))
|
|
68
|
+
return sanitised, token
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _default_sqlite_url(*, ensure_dir: bool = True) -> tuple[str, str | None]:
|
|
72
|
+
"""Generate a SQLite URL from SYNTH_TRACES_DIR if set, otherwise raise."""
|
|
73
|
+
traces_dir = os.getenv("SYNTH_TRACES_DIR")
|
|
74
|
+
if traces_dir:
|
|
75
|
+
dir_path = _normalise_path(Path(traces_dir))
|
|
76
|
+
if ensure_dir:
|
|
77
|
+
dir_path.mkdir(parents=True, exist_ok=True)
|
|
78
|
+
db_path = dir_path / "synth_traces.db"
|
|
79
|
+
sqlite_url = f"sqlite+aiosqlite:///{db_path}"
|
|
80
|
+
return sqlite_url, None
|
|
81
|
+
raise RuntimeError("SQLite fallback is disabled; configure LIBSQL_URL or run sqld locally.")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def resolve_trace_db_settings(*, ensure_dir: bool = True) -> tuple[str, str | None]:
|
|
85
|
+
"""Resolve the tracing database URL and optional auth token.
|
|
86
|
+
|
|
87
|
+
Resolution order:
|
|
88
|
+
1. `SYNTH_TRACES_DB` (explicit DSN override)
|
|
89
|
+
2. `LIBSQL_URL` / `TURSO_DATABASE_URL` (remote libSQL endpoints)
|
|
90
|
+
3. `TURSO_LOCAL_DB_URL` (legacy env for local sqld)
|
|
91
|
+
4. Modal environment: plain SQLite file (no sqld, no auth)
|
|
92
|
+
5. Local dev: sqld default
|
|
93
|
+
"""
|
|
94
|
+
import logging
|
|
95
|
+
logger = logging.getLogger(__name__)
|
|
96
|
+
|
|
97
|
+
explicit = os.getenv("SYNTH_TRACES_DB")
|
|
98
|
+
if explicit:
|
|
99
|
+
logger.info(f"[TRACE_CONFIG] Using explicit SYNTH_TRACES_DB: {explicit}")
|
|
100
|
+
return _split_auth_from_url(explicit)
|
|
101
|
+
|
|
102
|
+
remote = os.getenv("LIBSQL_URL") or os.getenv("TURSO_DATABASE_URL")
|
|
103
|
+
if remote:
|
|
104
|
+
logger.info(f"[TRACE_CONFIG] Using remote Turso: {remote}")
|
|
105
|
+
url, token = _split_auth_from_url(remote)
|
|
106
|
+
if token:
|
|
107
|
+
return url, token
|
|
108
|
+
env_token = os.getenv("LIBSQL_AUTH_TOKEN") or os.getenv("TURSO_AUTH_TOKEN")
|
|
109
|
+
return url, env_token
|
|
110
|
+
|
|
111
|
+
local_override = os.getenv("TURSO_LOCAL_DB_URL")
|
|
112
|
+
if local_override:
|
|
113
|
+
logger.info(f"[TRACE_CONFIG] Using TURSO_LOCAL_DB_URL: {local_override}")
|
|
114
|
+
url, token = _split_auth_from_url(local_override)
|
|
115
|
+
if token:
|
|
116
|
+
return url, token
|
|
117
|
+
env_token = os.getenv("LIBSQL_AUTH_TOKEN") or os.getenv("TURSO_AUTH_TOKEN")
|
|
118
|
+
return url, env_token
|
|
119
|
+
|
|
120
|
+
# Check for SYNTH_TRACES_DIR to generate SQLite URL
|
|
121
|
+
traces_dir = os.getenv("SYNTH_TRACES_DIR")
|
|
122
|
+
if traces_dir:
|
|
123
|
+
try:
|
|
124
|
+
sqlite_url, _ = _default_sqlite_url(ensure_dir=ensure_dir)
|
|
125
|
+
logger.info(f"[TRACE_CONFIG] Using SQLite from SYNTH_TRACES_DIR: {sqlite_url}")
|
|
126
|
+
return sqlite_url, None
|
|
127
|
+
except RuntimeError:
|
|
128
|
+
pass # Fall through to other options
|
|
129
|
+
|
|
130
|
+
# Modal environment: use plain SQLite file (no sqld daemon, no auth required)
|
|
131
|
+
is_modal = _is_modal_environment()
|
|
132
|
+
logger.info(f"[TRACE_CONFIG] Modal detection: {is_modal} (MODAL_IS_REMOTE={os.getenv('MODAL_IS_REMOTE')})")
|
|
133
|
+
if is_modal:
|
|
134
|
+
logger.info("[TRACE_CONFIG] Using Modal SQLite: file:/tmp/synth_traces.db")
|
|
135
|
+
return "file:/tmp/synth_traces.db", None
|
|
136
|
+
|
|
137
|
+
# Local dev: default to sqld HTTP API
|
|
138
|
+
default_url = os.getenv("LIBSQL_DEFAULT_URL", "http://127.0.0.1:8081")
|
|
139
|
+
logger.info(f"[TRACE_CONFIG] Using local sqld: {default_url}")
|
|
140
|
+
return default_url, None
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def resolve_trace_db_url(*, ensure_dir: bool = True) -> str:
|
|
144
|
+
"""Return just the DSN, discarding any auth token."""
|
|
145
|
+
url, _ = resolve_trace_db_settings(ensure_dir=ensure_dir)
|
|
146
|
+
return url
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def resolve_trace_db_auth_token() -> str | None:
|
|
150
|
+
"""Return the resolved auth token for the tracing datastore."""
|
|
151
|
+
_, token = resolve_trace_db_settings()
|
|
152
|
+
return token
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
# ---------------------------------------------------------------------------
|
|
156
|
+
# Config dataclasses
|
|
157
|
+
# ---------------------------------------------------------------------------
|
|
158
|
+
|
|
159
|
+
DEFAULT_DB_FILE = str(_normalise_path(_DEFAULT_TRACE_DIR) / _CANONICAL_DB_PATH.name)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
@dataclass
|
|
163
|
+
class TursoConfig:
|
|
164
|
+
"""Configuration for Turso/sqld connection."""
|
|
165
|
+
|
|
166
|
+
# Default values matching serve.sh
|
|
167
|
+
DEFAULT_DB_FILE = DEFAULT_DB_FILE
|
|
168
|
+
DEFAULT_HTTP_PORT = 8080
|
|
169
|
+
|
|
170
|
+
# Resolve DB URL and auth token from environment (libSQL preferred)
|
|
171
|
+
db_url: str = field(default_factory=resolve_trace_db_url)
|
|
172
|
+
|
|
173
|
+
# Remote database sync configuration
|
|
174
|
+
sync_url: str = os.getenv("LIBSQL_SYNC_URL") or os.getenv("TURSO_SYNC_URL", "")
|
|
175
|
+
auth_token: str = resolve_trace_db_auth_token() or ""
|
|
176
|
+
sync_interval: int = int(
|
|
177
|
+
os.getenv("TURSO_SYNC_SECONDS", "2")
|
|
178
|
+
) # 2 seconds for responsive local development
|
|
179
|
+
|
|
180
|
+
# Connection pool settings
|
|
181
|
+
pool_size: int = int(os.getenv("TURSO_POOL_SIZE", "8"))
|
|
182
|
+
max_overflow: int = int(os.getenv("TURSO_MAX_OVERFLOW", "16"))
|
|
183
|
+
pool_timeout: float = float(os.getenv("TURSO_POOL_TIMEOUT", "30.0"))
|
|
184
|
+
pool_recycle: int = int(os.getenv("TURSO_POOL_RECYCLE", "3600"))
|
|
185
|
+
|
|
186
|
+
# SQLite settings
|
|
187
|
+
foreign_keys: bool = os.getenv("TURSO_FOREIGN_KEYS", "true").lower() == "true"
|
|
188
|
+
journal_mode: str = os.getenv("TURSO_JOURNAL_MODE", "WAL")
|
|
189
|
+
|
|
190
|
+
# Performance settings
|
|
191
|
+
echo_sql: bool = os.getenv("TURSO_ECHO_SQL", "false").lower() == "true"
|
|
192
|
+
batch_size: int = int(os.getenv("TURSO_BATCH_SIZE", "1000"))
|
|
193
|
+
|
|
194
|
+
# Daemon settings (for local sqld) - match serve.sh defaults
|
|
195
|
+
sqld_binary: str = os.getenv("SQLD_BINARY", "sqld")
|
|
196
|
+
sqld_db_path: str = os.getenv("SQLD_DB_PATH", DEFAULT_DB_FILE)
|
|
197
|
+
sqld_http_port: int = int(os.getenv("SQLD_HTTP_PORT", "8080"))
|
|
198
|
+
sqld_idle_shutdown: int = int(os.getenv("SQLD_IDLE_SHUTDOWN", "0")) # 0 = no idle shutdown
|
|
199
|
+
|
|
200
|
+
def get_connect_args(self) -> dict[str, str]:
|
|
201
|
+
"""Get SQLAlchemy connection arguments."""
|
|
202
|
+
args: dict[str, str] = {}
|
|
203
|
+
if self.auth_token:
|
|
204
|
+
args["auth_token"] = self.auth_token
|
|
205
|
+
return args
|
|
206
|
+
|
|
207
|
+
def get_engine_kwargs(self) -> dict[str, Any]:
|
|
208
|
+
"""Get SQLAlchemy engine creation kwargs."""
|
|
209
|
+
kwargs: dict[str, Any] = {
|
|
210
|
+
"echo": self.echo_sql,
|
|
211
|
+
"future": True,
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
# Only add pool settings for non-SQLite URLs
|
|
215
|
+
if not (self.db_url.startswith("sqlite") or ":memory:" in self.db_url):
|
|
216
|
+
kwargs.update(
|
|
217
|
+
{
|
|
218
|
+
"pool_size": self.pool_size,
|
|
219
|
+
"max_overflow": self.max_overflow,
|
|
220
|
+
"pool_timeout": self.pool_timeout,
|
|
221
|
+
"pool_recycle": self.pool_recycle,
|
|
222
|
+
}
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
return kwargs
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
# Global config instance
|
|
229
|
+
CONFIG = TursoConfig()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
TRACE_DB_DIR = Path("traces")
|
|
7
|
+
TRACE_DB_BASENAME = "turso_task_app_traces"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def canonical_trace_db_name(*, timestamp: datetime | None = None) -> str:
|
|
11
|
+
"""Return the canonical trace database filename (with optional timestamp suffix)."""
|
|
12
|
+
|
|
13
|
+
if timestamp is None:
|
|
14
|
+
return f"{TRACE_DB_BASENAME}.db"
|
|
15
|
+
return f"{TRACE_DB_BASENAME}_{timestamp.strftime('%Y-%m-%d_%H-%M-%S')}.db"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def canonical_trace_db_path(*, timestamp: datetime | None = None) -> Path:
|
|
19
|
+
"""Return the canonical trace database path within the default trace directory."""
|
|
20
|
+
|
|
21
|
+
return TRACE_DB_DIR / canonical_trace_db_name(timestamp=timestamp)
|