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.
Files changed (358) hide show
  1. {synth_ai-0.3.1.dev3/synth_ai.egg-info → synth_ai-0.3.1.dev5}/PKG-INFO +1 -1
  2. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/pyproject.toml +1 -1
  3. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/validators.py +84 -24
  4. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/in_process.py +12 -16
  5. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/in_process_runner.py +1 -1
  6. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5/synth_ai.egg-info}/PKG-INFO +1 -1
  7. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/LICENSE +0 -0
  8. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/MANIFEST.in +0 -0
  9. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/README.md +0 -0
  10. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/setup.cfg +0 -0
  11. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/__init__.py +0 -0
  12. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/__main__.py +0 -0
  13. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/__init__.py +0 -0
  14. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/__main__.py +0 -0
  15. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/__init__.py +0 -0
  16. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/modal_wrapper.py +0 -0
  17. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/storage.py +0 -0
  18. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/typer_patch.py +0 -0
  19. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/_internal/validate_task_app.py +0 -0
  20. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/__init__.py +0 -0
  21. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/claude.py +0 -0
  22. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/codex.py +0 -0
  23. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/agents/opencode.py +0 -0
  24. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/__init__.py +0 -0
  25. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/__init__.py +0 -0
  26. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/client.py +0 -0
  27. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/config.py +0 -0
  28. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/core.py +0 -0
  29. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/download.py +0 -0
  30. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/export.py +0 -0
  31. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/list.py +0 -0
  32. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/parsing.py +0 -0
  33. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/artifacts/show.py +0 -0
  34. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/baseline/__init__.py +0 -0
  35. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/baseline/core.py +0 -0
  36. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/baseline/list.py +0 -0
  37. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/demo/__init__.py +0 -0
  38. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/demo/core.py +0 -0
  39. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/__init__.py +0 -0
  40. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/core.py +0 -0
  41. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/errors.py +0 -0
  42. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/eval/validation.py +0 -0
  43. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/__init__.py +0 -0
  44. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/core.py +0 -0
  45. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/errors.py +0 -0
  46. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/filter/validation.py +0 -0
  47. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/help/__init__.py +0 -0
  48. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/help/core.py +0 -0
  49. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/__init__.py +0 -0
  50. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/cloudflare_scanner.py +0 -0
  51. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/core.py +0 -0
  52. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/health_checker.py +0 -0
  53. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/local_scanner.py +0 -0
  54. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/scan/models.py +0 -0
  55. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/smoke/__init__.py +0 -0
  56. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/smoke/core.py +0 -0
  57. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/__init__.py +0 -0
  58. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/client.py +0 -0
  59. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/config.py +0 -0
  60. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/errors.py +0 -0
  61. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/formatters.py +0 -0
  62. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/__init__.py +0 -0
  63. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/files.py +0 -0
  64. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/jobs.py +0 -0
  65. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/models.py +0 -0
  66. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/pricing.py +0 -0
  67. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/runs.py +0 -0
  68. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/session.py +0 -0
  69. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/summary.py +0 -0
  70. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/subcommands/usage.py +0 -0
  71. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/status/utils.py +0 -0
  72. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/__init__.py +0 -0
  73. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/core.py +0 -0
  74. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/errors.py +0 -0
  75. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/judge_schemas.py +0 -0
  76. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/judge_validation.py +0 -0
  77. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/commands/train/validation.py +0 -0
  78. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/__init__.py +0 -0
  79. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/core/__init__.py +0 -0
  80. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/core/cli.py +0 -0
  81. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/__init__.py +0 -0
  82. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/crafter/crafter_fft_4b.toml +0 -0
  83. {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
  84. {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
  85. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_registry.py +0 -0
  86. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/__init__.py +0 -0
  87. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/demo_task_apps/core.py +0 -0
  88. {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
  89. {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
  90. {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
  91. {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
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {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
  98. {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
  99. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/__init__.py +0 -0
  100. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/_common.py +0 -0
  101. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/app.py +0 -0
  102. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/config.toml +0 -0
  103. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/deploy_modal.py +0 -0
  104. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/modal_task_app.py +0 -0
  105. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/math/task_app_entry.py +0 -0
  106. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/mipro/main.py +0 -0
  107. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/mipro/task_app.py +0 -0
  108. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demo_apps/mipro/train_cfg.toml +0 -0
  109. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demos/__init__.py +0 -0
  110. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demos/demo.py +0 -0
  111. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/demos/rl_demo.py +0 -0
  112. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/deploy.py +0 -0
  113. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/__init__.py +0 -0
  114. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/balance.py +0 -0
  115. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/mcp.py +0 -0
  116. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/modal_app.py +0 -0
  117. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/setup.py +0 -0
  118. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/status.py +0 -0
  119. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/infra/turso.py +0 -0
  120. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/__init__.py +0 -0
  121. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/agents.py +0 -0
  122. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/apps/modal_app.py +0 -0
  123. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/apps/task_app.py +0 -0
  124. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/bin.py +0 -0
  125. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/env.py +0 -0
  126. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/errors.py +0 -0
  127. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/modal.py +0 -0
  128. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/plotting.py +0 -0
  129. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/prompt_args.py +0 -0
  130. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/prompts.py +0 -0
  131. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/sqld.py +0 -0
  132. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/task_app_discovery.py +0 -0
  133. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/task_app_env.py +0 -0
  134. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/train_cfgs.py +0 -0
  135. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/lib/tunnel_records.py +0 -0
  136. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/__init__.py +0 -0
  137. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/__init__.py +0 -0
  138. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/api_schemas.py +0 -0
  139. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/celery_app.py +0 -0
  140. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/config.py +0 -0
  141. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/config_utils.py +0 -0
  142. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/database.py +0 -0
  143. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/dispatcher.py +0 -0
  144. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/models.py +0 -0
  145. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/progress_info.py +0 -0
  146. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/results.py +0 -0
  147. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/schemas.py +0 -0
  148. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/service.py +0 -0
  149. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/status.py +0 -0
  150. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/status_tracker.py +0 -0
  151. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/tasks.py +0 -0
  152. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/trace_storage.py +0 -0
  153. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/experiment_queue/validation.py +0 -0
  154. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/__init__.py +0 -0
  155. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/client.py +0 -0
  156. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/constants.py +0 -0
  157. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/exceptions.py +0 -0
  158. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/manager.py +0 -0
  159. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/models.py +0 -0
  160. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/local/session/query.py +0 -0
  161. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/root.py +0 -0
  162. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/__init__.py +0 -0
  163. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/commands.py +0 -0
  164. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/deploy.py +0 -0
  165. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/list.py +0 -0
  166. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/main.py +0 -0
  167. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/modal_serve.py +0 -0
  168. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/task_apps/serve.py +0 -0
  169. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/__init__.py +0 -0
  170. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/train.py +0 -0
  171. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/train_cfg.py +0 -0
  172. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/training/watch.py +0 -0
  173. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/turso.py +0 -0
  174. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/__init__.py +0 -0
  175. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/experiments.py +0 -0
  176. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/queue.py +0 -0
  177. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/recent.py +0 -0
  178. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/cli/utils/traces.py +0 -0
  179. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/contracts/__init__.py +0 -0
  180. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/__init__.py +0 -0
  181. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/__init__.py +0 -0
  182. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/base_url.py +0 -0
  183. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/http.py +0 -0
  184. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/prompts.py +0 -0
  185. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/task_app_state.py +0 -0
  186. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/_utils/user_config.py +0 -0
  187. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/apps/__init__.py +0 -0
  188. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/apps/common.py +0 -0
  189. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/auth.py +0 -0
  190. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/cfgs.py +0 -0
  191. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/config/__init__.py +0 -0
  192. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/config/base.py +0 -0
  193. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/config/resolver.py +0 -0
  194. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/env.py +0 -0
  195. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/errors.py +0 -0
  196. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/http.py +0 -0
  197. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/__init__.py +0 -0
  198. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/cloudflare.py +0 -0
  199. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/__init__.py +0 -0
  200. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/__main__.py +0 -0
  201. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/claude.py +0 -0
  202. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/main.py +0 -0
  203. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/mcp/setup.py +0 -0
  204. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/integrations/modal.py +0 -0
  205. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/json.py +0 -0
  206. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/log_filter.py +0 -0
  207. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/logging.py +0 -0
  208. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/paths.py +0 -0
  209. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/pricing.py +0 -0
  210. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/process.py +0 -0
  211. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/ssl.py +0 -0
  212. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/storage/__init__.py +0 -0
  213. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/task_app_state.py +0 -0
  214. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/telemetry.py +0 -0
  215. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/__init__.py +0 -0
  216. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/abstractions.py +0 -0
  217. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/config.py +0 -0
  218. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/constants.py +0 -0
  219. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/db_config.py +0 -0
  220. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/decorators.py +0 -0
  221. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/examples/basic_usage.py +0 -0
  222. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/hooks.py +0 -0
  223. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/llm_call_record_helpers.py +0 -0
  224. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/lm_call_record_abstractions.py +0 -0
  225. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/migration_helper.py +0 -0
  226. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/replica_sync.py +0 -0
  227. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/serialization.py +0 -0
  228. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/session_tracer.py +0 -0
  229. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/__init__.py +0 -0
  230. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/base.py +0 -0
  231. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/config.py +0 -0
  232. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/exceptions.py +0 -0
  233. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/factory.py +0 -0
  234. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/types.py +0 -0
  235. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/storage/utils.py +0 -0
  236. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/trace_utils.py +0 -0
  237. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/__init__.py +0 -0
  238. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/daemon.py +0 -0
  239. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/models.py +0 -0
  240. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/turso/native_manager.py +0 -0
  241. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/tracing_v3/utils.py +0 -0
  242. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/urls.py +0 -0
  243. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/user_config.py +0 -0
  244. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/core/uvicorn.py +0 -0
  245. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/__init__.py +0 -0
  246. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/enums.py +0 -0
  247. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/rewards.py +0 -0
  248. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/specs.py +0 -0
  249. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/data/traces.py +0 -0
  250. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/py.typed +0 -0
  251. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/__init__.py +0 -0
  252. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/models/supported.py +0 -0
  253. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/research_agent/__init__.py +0 -0
  254. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/research_agent/cli.py +0 -0
  255. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/research_agent/job.py +0 -0
  256. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/__init__.py +0 -0
  257. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/builders.py +0 -0
  258. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/cli.py +0 -0
  259. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/config_finder.py +0 -0
  260. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/__init__.py +0 -0
  261. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/prompt_learning.py +0 -0
  262. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/rl.py +0 -0
  263. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/sft.py +0 -0
  264. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/configs/shared.py +0 -0
  265. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/env_resolver.py +0 -0
  266. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/pollers.py +0 -0
  267. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/prompt_learning.py +0 -0
  268. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/rl.py +0 -0
  269. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/sft.py +0 -0
  270. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/summary.py +0 -0
  271. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/supported_algos.py +0 -0
  272. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/task_app.py +0 -0
  273. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/api/train/utils.py +0 -0
  274. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/__init__.py +0 -0
  275. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/config.py +0 -0
  276. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/discovery.py +0 -0
  277. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/baseline/execution.py +0 -0
  278. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/inference/__init__.py +0 -0
  279. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/inference/client.py +0 -0
  280. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/jobs/__init__.py +0 -0
  281. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/jobs/client.py +0 -0
  282. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/__init__.py +0 -0
  283. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/base.py +0 -0
  284. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/client.py +0 -0
  285. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/schemas.py +0 -0
  286. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/judging/types.py +0 -0
  287. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/__init__.py +0 -0
  288. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/algorithms.py +0 -0
  289. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/client.py +0 -0
  290. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/config.py +0 -0
  291. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/constants.py +0 -0
  292. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/core.py +0 -0
  293. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/ft_client.py +0 -0
  294. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/gateway.py +0 -0
  295. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/health.py +0 -0
  296. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/jobs.py +0 -0
  297. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/prompt_extraction.py +0 -0
  298. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/prompt_learning_client.py +0 -0
  299. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/prompt_learning_types.py +0 -0
  300. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/__init__.py +0 -0
  301. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/client.py +0 -0
  302. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/config.py +0 -0
  303. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/contracts.py +0 -0
  304. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/env_keys.py +0 -0
  305. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl/secrets.py +0 -0
  306. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/rl_client.py +0 -0
  307. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/__init__.py +0 -0
  308. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/client.py +0 -0
  309. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/config.py +0 -0
  310. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sft/data.py +0 -0
  311. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/sse.py +0 -0
  312. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/learning/validators.py +0 -0
  313. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/__init__.py +0 -0
  314. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/container_builder.py +0 -0
  315. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/container_spec.py +0 -0
  316. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/defaults.py +0 -0
  317. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/research_agent/results_collector.py +0 -0
  318. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/__init__.py +0 -0
  319. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/dataclasses.py +0 -0
  320. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/loader.py +0 -0
  321. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/serializer.py +0 -0
  322. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/specs/validation.py +0 -0
  323. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/__init__.py +0 -0
  324. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/config.py +0 -0
  325. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/handlers.py +0 -0
  326. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/streamer.py +0 -0
  327. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/streaming/types.py +0 -0
  328. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/__init__.py +0 -0
  329. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/apps/__init__.py +0 -0
  330. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/auth.py +0 -0
  331. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/client.py +0 -0
  332. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/config.py +0 -0
  333. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/contracts.py +0 -0
  334. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/datasets.py +0 -0
  335. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/errors.py +0 -0
  336. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/health.py +0 -0
  337. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/inference_api.py +0 -0
  338. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/json.py +0 -0
  339. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/proxy.py +0 -0
  340. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/__init__.py +0 -0
  341. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/loaders.py +0 -0
  342. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/models.py +0 -0
  343. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/scoring.py +0 -0
  344. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics/strict.py +0 -0
  345. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/rubrics.py +0 -0
  346. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/server.py +0 -0
  347. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/trace_correlation_helpers.py +0 -0
  348. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/tracing_utils.py +0 -0
  349. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/validators.py +0 -0
  350. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/task/vendors.py +0 -0
  351. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/tracing/__init__.py +0 -0
  352. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/sdk/training/__init__.py +0 -0
  353. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai/utils/__init__.py +0 -0
  354. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/SOURCES.txt +0 -0
  355. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/dependency_links.txt +0 -0
  356. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/entry_points.txt +0 -0
  357. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/requires.txt +0 -0
  358. {synth_ai-0.3.1.dev3 → synth_ai-0.3.1.dev5}/synth_ai.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.3.1.dev3
3
+ Version: 0.3.1.dev5
4
4
  Summary: Serverless Posttraining for Agents - Core AI functionality and tracing
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "synth-ai"
3
- version = "0.3.1.dev3"
3
+ version = "0.3.1.dev5"
4
4
  description = "Serverless Posttraining for Agents - Core AI functionality and tracing"
5
5
  authors = [{name = "Synth AI", email = "josh@usesynth.ai"}]
6
6
  license = "MIT"
@@ -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 (REQUIRED)
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
- errors.append(
2150
- f"❌ mipro.modules[{module_idx}].stages[{stage_idx}]: [policy] table is REQUIRED. "
2151
- f"Each stage must have its own policy configuration with 'model' and 'provider' fields."
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
- # Validate required fields in stage policy
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
- if stage_model and stage_provider:
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
- stage_model, stage_provider,
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 not isinstance(policy_section, dict):
2248
- errors.append("❌ [prompt_learning.policy] section is missing or invalid")
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
- if not policy_section.get("model"):
2251
- errors.append("❌ [prompt_learning.policy].model is required")
2252
- if not policy_section.get("provider"):
2253
- errors.append("❌ [prompt_learning.policy].provider is required")
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 (Daytona, ngrok, etc.) where we don't control the tunnel setup.
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., Daytona preview token)
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., x-daytona-preview-token)
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
- # Use verify=False since external tunnels may have different certs
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
- # Accept various success codes - the tunnel is working if we get any response
268
- if health.status_code in (200, 400, 401, 403, 404, 405):
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 Daytona, ngrok, or other tunnel providers.
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 Daytona preview, ngrok, etc.)
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://8000-sandbox123.proxy.daytona.work",
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-daytona-preview-token")
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 like Daytona)
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., Daytona preview, ngrok)
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
- (Daytona, ngrok, etc.) where Cloudflare tunnels don't work
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.3.1.dev3
3
+ Version: 0.3.1.dev5
4
4
  Summary: Serverless Posttraining for Agents - Core AI functionality and tracing
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes