synth-ai 0.3.1.dev3__tar.gz → 0.3.1.dev5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {synth_ai-0.3.1.dev3/synth_ai.egg-info → synth_ai-0.3.1.dev5}/PKG-INFO +1 -1
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/pyproject.toml +1 -1
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/validators.py +84 -24
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/in_process.py +12 -16
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/in_process_runner.py +1 -1
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5/synth_ai.egg-info}/PKG-INFO +1 -1
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/LICENSE +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/MANIFEST.in +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/README.md +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/setup.cfg +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/__main__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/__main__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/modal_wrapper.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/storage.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/typer_patch.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/validate_task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/claude.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/codex.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/opencode.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/download.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/export.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/list.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/parsing.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/show.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/baseline/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/baseline/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/baseline/list.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/demo/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/demo/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/errors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/validation.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/errors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/validation.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/help/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/help/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/cloudflare_scanner.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/health_checker.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/local_scanner.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/models.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/smoke/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/smoke/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/errors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/formatters.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/files.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/jobs.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/models.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/pricing.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/runs.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/session.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/summary.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/usage.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/utils.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/errors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/judge_schemas.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/judge_validation.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/validation.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/core/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/core/cli.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/crafter_fft_4b.toml +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/grpo_crafter_task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/rl_from_base_qwen4b.toml +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_registry.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/crafter/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/crafter/configs/crafter_fft_4b.toml +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/crafter/configs/rl_from_base_qwen4b.toml +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/crafter/grpo_crafter_task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/_common.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/config.toml +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/deploy_modal.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/modal_task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/task_app_entry.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/_common.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/config.toml +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/deploy_modal.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/modal_task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/task_app_entry.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/mipro/main.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/mipro/task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/mipro/train_cfg.toml +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demos/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demos/demo.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demos/rl_demo.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/deploy.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/balance.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/mcp.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/modal_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/setup.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/status.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/turso.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/agents.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/apps/modal_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/apps/task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/bin.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/env.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/errors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/modal.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/plotting.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/prompt_args.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/prompts.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/sqld.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/task_app_discovery.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/task_app_env.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/train_cfgs.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/tunnel_records.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/api_schemas.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/celery_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/config_utils.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/database.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/dispatcher.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/models.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/progress_info.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/results.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/schemas.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/service.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/status.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/status_tracker.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/tasks.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/trace_storage.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/validation.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/constants.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/exceptions.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/manager.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/models.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/query.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/root.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/commands.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/deploy.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/list.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/main.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/modal_serve.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/serve.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/train.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/train_cfg.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/watch.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/turso.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/experiments.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/queue.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/recent.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/traces.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/contracts/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/base_url.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/http.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/prompts.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/task_app_state.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/user_config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/apps/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/apps/common.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/auth.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/cfgs.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/config/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/config/base.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/config/resolver.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/env.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/errors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/http.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/cloudflare.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/__main__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/claude.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/main.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/setup.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/modal.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/json.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/log_filter.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/logging.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/paths.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/pricing.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/process.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/ssl.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/storage/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/task_app_state.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/telemetry.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/abstractions.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/constants.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/db_config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/decorators.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/examples/basic_usage.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/hooks.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/llm_call_record_helpers.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/lm_call_record_abstractions.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/migration_helper.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/replica_sync.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/serialization.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/session_tracer.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/base.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/exceptions.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/factory.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/types.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/utils.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/trace_utils.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/daemon.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/models.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/native_manager.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/utils.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/urls.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/user_config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/uvicorn.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/enums.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/rewards.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/specs.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/traces.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/py.typed +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/models/supported.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/research_agent/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/research_agent/cli.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/research_agent/job.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/builders.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/cli.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/config_finder.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/prompt_learning.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/rl.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/sft.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/shared.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/env_resolver.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/pollers.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/prompt_learning.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/rl.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/sft.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/summary.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/supported_algos.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/task_app.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/utils.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/discovery.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/execution.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/inference/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/inference/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/jobs/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/jobs/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/base.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/schemas.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/types.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/algorithms.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/constants.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/core.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/ft_client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/gateway.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/health.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/jobs.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/prompt_extraction.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/prompt_learning_client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/prompt_learning_types.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/contracts.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/env_keys.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/secrets.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl_client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/data.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sse.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/validators.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/container_builder.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/container_spec.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/defaults.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/results_collector.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/dataclasses.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/loader.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/serializer.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/validation.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/handlers.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/streamer.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/types.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/apps/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/auth.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/client.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/config.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/contracts.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/datasets.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/errors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/health.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/inference_api.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/json.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/proxy.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/loaders.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/models.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/scoring.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/strict.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/server.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/trace_correlation_helpers.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/tracing_utils.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/validators.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/vendors.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/tracing/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/training/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/utils/__init__.py +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/SOURCES.txt +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/dependency_links.txt +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/entry_points.txt +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/requires.txt +0 -0
- {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/top_level.txt +0 -0
|
@@ -2143,36 +2143,62 @@ def validate_mipro_config_from_file(config_path: Path) -> Tuple[bool, List[str]]
|
|
|
2143
2143
|
f"❌ mipro.modules[{module_idx}].stages[{stage_idx}].max_demo_slots must be an integer"
|
|
2144
2144
|
)
|
|
2145
2145
|
|
|
2146
|
-
# Validate per-stage policy config
|
|
2146
|
+
# Validate per-stage policy config
|
|
2147
|
+
# Policy is OPTIONAL if top-level [prompt_learning.policy] has model+provider
|
|
2148
|
+
# Policy is REQUIRED if no valid top-level policy exists
|
|
2147
2149
|
stage_policy = stage_entry.get("policy")
|
|
2150
|
+
has_top_level_policy = (
|
|
2151
|
+
isinstance(policy_section, dict) and
|
|
2152
|
+
policy_section.get("model") and
|
|
2153
|
+
policy_section.get("provider")
|
|
2154
|
+
)
|
|
2155
|
+
|
|
2148
2156
|
if stage_policy is None:
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2157
|
+
# No per-stage policy - only error if no top-level fallback
|
|
2158
|
+
if not has_top_level_policy:
|
|
2159
|
+
errors.append(
|
|
2160
|
+
f"❌ mipro.modules[{module_idx}].stages[{stage_idx}]: [policy] is required. "
|
|
2161
|
+
f"Either add [prompt_learning.policy] with model+provider (applies to all stages), "
|
|
2162
|
+
f"OR add [prompt_learning.mipro.modules.stages.policy] for this stage."
|
|
2163
|
+
)
|
|
2153
2164
|
elif not isinstance(stage_policy, dict):
|
|
2154
2165
|
errors.append(
|
|
2155
2166
|
f"❌ mipro.modules[{module_idx}].stages[{stage_idx}]: [policy] must be a table/dict, got {type(stage_policy).__name__}"
|
|
2156
2167
|
)
|
|
2157
2168
|
else:
|
|
2158
|
-
#
|
|
2159
|
-
if not stage_policy.get("model"):
|
|
2160
|
-
errors.append(
|
|
2161
|
-
f"❌ mipro.modules[{module_idx}].stages[{stage_idx}]: [policy].model is required"
|
|
2162
|
-
)
|
|
2163
|
-
if not stage_policy.get("provider"):
|
|
2164
|
-
errors.append(
|
|
2165
|
-
f"❌ mipro.modules[{module_idx}].stages[{stage_idx}]: [policy].provider is required"
|
|
2166
|
-
)
|
|
2167
|
-
# Validate model/provider combination
|
|
2169
|
+
# Per-stage policy exists - validate it (model/provider can inherit from top-level)
|
|
2168
2170
|
stage_model = stage_policy.get("model")
|
|
2169
2171
|
stage_provider = stage_policy.get("provider")
|
|
2170
|
-
|
|
2172
|
+
|
|
2173
|
+
# If stage specifies model, it must also specify provider (and vice versa)
|
|
2174
|
+
# Unless inheriting from top-level
|
|
2175
|
+
if stage_model and not stage_provider:
|
|
2176
|
+
if has_top_level_policy:
|
|
2177
|
+
# Inherit provider from top-level
|
|
2178
|
+
stage_provider = policy_section.get("provider")
|
|
2179
|
+
else:
|
|
2180
|
+
errors.append(
|
|
2181
|
+
f"❌ mipro.modules[{module_idx}].stages[{stage_idx}]: [policy].provider is required when model is specified"
|
|
2182
|
+
)
|
|
2183
|
+
elif stage_provider and not stage_model:
|
|
2184
|
+
if has_top_level_policy:
|
|
2185
|
+
# Inherit model from top-level
|
|
2186
|
+
stage_model = policy_section.get("model")
|
|
2187
|
+
else:
|
|
2188
|
+
errors.append(
|
|
2189
|
+
f"❌ mipro.modules[{module_idx}].stages[{stage_idx}]: [policy].model is required when provider is specified"
|
|
2190
|
+
)
|
|
2191
|
+
|
|
2192
|
+
# Validate model/provider combination if both are available
|
|
2193
|
+
effective_model = stage_model or (policy_section.get("model") if has_top_level_policy else None)
|
|
2194
|
+
effective_provider = stage_provider or (policy_section.get("provider") if has_top_level_policy else None)
|
|
2195
|
+
if effective_model and effective_provider:
|
|
2171
2196
|
errors.extend(_validate_model_for_provider(
|
|
2172
|
-
|
|
2197
|
+
effective_model, effective_provider,
|
|
2173
2198
|
f"prompt_learning.mipro.modules[{module_idx}].stages[{stage_idx}].policy.model",
|
|
2174
2199
|
allow_nano=True, # Policy models can be nano
|
|
2175
2200
|
))
|
|
2201
|
+
|
|
2176
2202
|
# Reject inference_url in stage policy (trainer provides it)
|
|
2177
2203
|
if "inference_url" in stage_policy:
|
|
2178
2204
|
errors.append(
|
|
@@ -2243,14 +2269,48 @@ def validate_mipro_config_from_file(config_path: Path) -> Tuple[bool, List[str]]
|
|
|
2243
2269
|
elif len(initial_prompt.get("messages", [])) == 0:
|
|
2244
2270
|
errors.append("❌ [prompt_learning.initial_prompt].messages cannot be empty")
|
|
2245
2271
|
|
|
2246
|
-
# Check policy section
|
|
2247
|
-
if
|
|
2248
|
-
|
|
2272
|
+
# Check policy section - EITHER top-level OR per-stage policies required
|
|
2273
|
+
# First, check if all stages have their own policy
|
|
2274
|
+
all_stages_have_policy = True
|
|
2275
|
+
if isinstance(modules_config, list):
|
|
2276
|
+
for module_entry in modules_config:
|
|
2277
|
+
if isinstance(module_entry, dict):
|
|
2278
|
+
stages = module_entry.get("stages")
|
|
2279
|
+
if isinstance(stages, list):
|
|
2280
|
+
for stage_entry in stages:
|
|
2281
|
+
if isinstance(stage_entry, dict):
|
|
2282
|
+
stage_policy = stage_entry.get("policy")
|
|
2283
|
+
if not isinstance(stage_policy, dict) or not stage_policy.get("model") or not stage_policy.get("provider"):
|
|
2284
|
+
all_stages_have_policy = False
|
|
2285
|
+
break
|
|
2286
|
+
if not all_stages_have_policy:
|
|
2287
|
+
break
|
|
2249
2288
|
else:
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2289
|
+
all_stages_have_policy = False # No modules means we need top-level policy
|
|
2290
|
+
|
|
2291
|
+
has_valid_top_level_policy = (
|
|
2292
|
+
isinstance(policy_section, dict) and
|
|
2293
|
+
policy_section.get("model") and
|
|
2294
|
+
policy_section.get("provider")
|
|
2295
|
+
)
|
|
2296
|
+
|
|
2297
|
+
# Only require top-level policy if NOT all stages have their own
|
|
2298
|
+
if not has_valid_top_level_policy and not all_stages_have_policy:
|
|
2299
|
+
if not isinstance(policy_section, dict):
|
|
2300
|
+
errors.append(
|
|
2301
|
+
"❌ [prompt_learning.policy] section is missing. "
|
|
2302
|
+
"Either add [prompt_learning.policy] with model+provider (applies to all stages), "
|
|
2303
|
+
"OR add [policy] to each stage in [prompt_learning.mipro.modules.stages]."
|
|
2304
|
+
)
|
|
2305
|
+
else:
|
|
2306
|
+
if not policy_section.get("model"):
|
|
2307
|
+
errors.append(
|
|
2308
|
+
"❌ [prompt_learning.policy].model is required (unless all stages have their own [policy].model)"
|
|
2309
|
+
)
|
|
2310
|
+
if not policy_section.get("provider"):
|
|
2311
|
+
errors.append(
|
|
2312
|
+
"❌ [prompt_learning.policy].provider is required (unless all stages have their own [policy].provider)"
|
|
2313
|
+
)
|
|
2254
2314
|
|
|
2255
2315
|
# Validate proxy_models section (can be at top-level or mipro-specific)
|
|
2256
2316
|
proxy_models_section = pl_section.get("proxy_models") or mipro_section.get("proxy_models")
|
|
@@ -230,12 +230,12 @@ async def _verify_preconfigured_url_ready(
|
|
|
230
230
|
Verify that a preconfigured tunnel URL is routing traffic.
|
|
231
231
|
|
|
232
232
|
This is similar to _verify_tunnel_ready but designed for external tunnel
|
|
233
|
-
providers (
|
|
233
|
+
providers (ngrok, etc.) where we don't control the tunnel setup.
|
|
234
234
|
|
|
235
235
|
Args:
|
|
236
236
|
tunnel_url: The external tunnel URL to verify
|
|
237
237
|
api_key: API key for task app authentication
|
|
238
|
-
extra_headers: Additional headers for the tunnel (e.g.,
|
|
238
|
+
extra_headers: Additional headers for the tunnel (e.g., auth tokens)
|
|
239
239
|
max_retries: Number of retry attempts
|
|
240
240
|
retry_delay: Delay between retries in seconds
|
|
241
241
|
timeout_per_request: Timeout for each HTTP request
|
|
@@ -249,23 +249,19 @@ async def _verify_preconfigured_url_ready(
|
|
|
249
249
|
"Authorization": f"Bearer {api_key}",
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
# Add any extra headers (e.g.,
|
|
252
|
+
# Add any extra headers (e.g., custom auth tokens)
|
|
253
253
|
if extra_headers:
|
|
254
254
|
headers.update(extra_headers)
|
|
255
255
|
|
|
256
|
-
# Also add Daytona skip warning header by default for convenience
|
|
257
|
-
headers["X-Daytona-Skip-Preview-Warning"] = "true"
|
|
258
|
-
|
|
259
256
|
logger.info(f"Verifying preconfigured URL is accessible (max {max_retries} attempts)...")
|
|
260
257
|
|
|
261
258
|
for attempt in range(max_retries):
|
|
262
259
|
try:
|
|
263
|
-
|
|
264
|
-
async with httpx.AsyncClient(timeout=timeout_per_request, verify=False) as client:
|
|
260
|
+
async with httpx.AsyncClient(timeout=timeout_per_request) as client:
|
|
265
261
|
health = await client.get(f"{base}/health", headers=headers)
|
|
266
262
|
|
|
267
|
-
#
|
|
268
|
-
if health.status_code
|
|
263
|
+
# Only accept 200 for health checks - other codes may indicate misrouting
|
|
264
|
+
if health.status_code == 200:
|
|
269
265
|
logger.info(
|
|
270
266
|
f"Preconfigured URL ready after {attempt + 1} attempt(s): "
|
|
271
267
|
f"health={health.status_code}"
|
|
@@ -314,7 +310,7 @@ class InProcessTaskApp:
|
|
|
314
310
|
- "named": Cloudflare named/managed tunnel
|
|
315
311
|
- "local": No tunnel, use localhost URL directly
|
|
316
312
|
- "preconfigured": Use externally-provided URL (set via preconfigured_url param or
|
|
317
|
-
SYNTH_TASK_APP_URL env var). Useful for
|
|
313
|
+
SYNTH_TASK_APP_URL env var). Useful for ngrok or other external tunnel providers.
|
|
318
314
|
|
|
319
315
|
Example:
|
|
320
316
|
```python
|
|
@@ -328,12 +324,12 @@ class InProcessTaskApp:
|
|
|
328
324
|
) as task_app:
|
|
329
325
|
print(f"Task app running at: {task_app.url}")
|
|
330
326
|
|
|
331
|
-
# Use preconfigured URL (e.g., from
|
|
327
|
+
# Use preconfigured URL (e.g., from ngrok, localtunnel, etc.)
|
|
332
328
|
async with InProcessTaskApp(
|
|
333
329
|
config_factory=build_config,
|
|
334
330
|
port=8000,
|
|
335
331
|
tunnel_mode="preconfigured",
|
|
336
|
-
preconfigured_url="https://
|
|
332
|
+
preconfigured_url="https://abc123.ngrok.io",
|
|
337
333
|
) as task_app:
|
|
338
334
|
print(f"Task app running at: {task_app.url}")
|
|
339
335
|
```
|
|
@@ -373,7 +369,7 @@ class InProcessTaskApp:
|
|
|
373
369
|
preconfigured_url: External tunnel URL to use when tunnel_mode="preconfigured".
|
|
374
370
|
Can also be set via SYNTH_TASK_APP_URL env var.
|
|
375
371
|
preconfigured_auth_header: Optional auth header name for preconfigured URL
|
|
376
|
-
(e.g., "x-
|
|
372
|
+
(e.g., "x-custom-auth-token")
|
|
377
373
|
preconfigured_auth_token: Optional auth token value for preconfigured URL
|
|
378
374
|
api_key: API key for health checks (defaults to ENVIRONMENT_API_KEY env var)
|
|
379
375
|
health_check_timeout: Max time to wait for health check in seconds
|
|
@@ -398,7 +394,7 @@ class InProcessTaskApp:
|
|
|
398
394
|
if not (1024 <= port <= 65535):
|
|
399
395
|
raise ValueError(f"Port must be in range [1024, 65535], got {port}")
|
|
400
396
|
|
|
401
|
-
# Validate host (allow 0.0.0.0 for container environments
|
|
397
|
+
# Validate host (allow 0.0.0.0 for container environments)
|
|
402
398
|
allowed_hosts = ("127.0.0.1", "localhost", "0.0.0.0")
|
|
403
399
|
if host not in allowed_hosts:
|
|
404
400
|
raise ValueError(
|
|
@@ -567,7 +563,7 @@ class InProcessTaskApp:
|
|
|
567
563
|
override_host = os.getenv("SYNTH_TUNNEL_HOSTNAME")
|
|
568
564
|
|
|
569
565
|
if mode == "preconfigured":
|
|
570
|
-
# Preconfigured mode: use externally-provided URL (e.g.,
|
|
566
|
+
# Preconfigured mode: use externally-provided URL (e.g., ngrok, localtunnel)
|
|
571
567
|
# This bypasses Cloudflare entirely - the caller is responsible for the tunnel
|
|
572
568
|
if not self.preconfigured_url:
|
|
573
569
|
raise ValueError(
|
|
@@ -12,7 +12,7 @@ Tunnel Modes:
|
|
|
12
12
|
- "named": Uses Cloudflare managed tunnel (requires setup)
|
|
13
13
|
- "local": No tunnel, uses localhost URL directly
|
|
14
14
|
- "preconfigured": Uses externally-provided URL - for container environments
|
|
15
|
-
(
|
|
15
|
+
(ngrok, etc.) where Cloudflare tunnels don't work
|
|
16
16
|
|
|
17
17
|
Environment Variables:
|
|
18
18
|
- SYNTH_TASK_APP_URL: If set, auto-enables preconfigured mode with this URL
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/cloudflare_scanner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/__init__.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/files.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/jobs.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/models.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/pricing.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/runs.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/session.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/summary.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/usage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/crafter_fft_4b.toml
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/grpo_crafter_task_app.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/rl_from_base_qwen4b.toml
RENAMED
|
File without changes
|
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/__init__.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/_common.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/app.py
RENAMED
|
File without changes
|
{synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/math/config.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|