synth-ai 0.2.6.dev6__tar.gz → 0.2.8__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.

Potentially problematic release.


This version of synth-ai might be problematic. Click here for more details.

Files changed (427) hide show
  1. {synth_ai-0.2.6.dev6/synth_ai.egg-info → synth_ai-0.2.8}/PKG-INFO +30 -6
  2. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/README.md +27 -4
  3. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/pyproject.toml +3 -2
  4. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/demo.py +55 -42
  5. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/rl_demo.py +51 -5
  6. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/root.py +12 -0
  7. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/core/cli.py +635 -294
  8. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/core.py +20 -10
  9. synth_ai-0.2.8/synth_ai/demos/demo_task_apps/math/config.toml +129 -0
  10. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/math/modal_task_app.py +9 -3
  11. synth_ai-0.2.8/synth_ai/handshake.py +107 -0
  12. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8/synth_ai.egg-info}/PKG-INFO +30 -6
  13. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai.egg-info/SOURCES.txt +1 -0
  14. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai.egg-info/requires.txt +2 -1
  15. synth_ai-0.2.6.dev6/synth_ai/demos/demo_task_apps/math/config.toml +0 -44
  16. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/LICENSE +0 -0
  17. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/MANIFEST.in +0 -0
  18. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/setup.cfg +0 -0
  19. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/__init__.py +0 -0
  20. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/__main__.py +0 -0
  21. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/__init__.py +0 -0
  22. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/balance.py +0 -0
  23. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/calc.py +0 -0
  24. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/legacy_root_backup.py +0 -0
  25. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/man.py +0 -0
  26. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/recent.py +0 -0
  27. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/status.py +0 -0
  28. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/traces.py +0 -0
  29. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/cli/watch.py +0 -0
  30. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/compound/cais.py +0 -0
  31. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/config/base_url.py +0 -0
  32. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/core/experiment.py +0 -0
  33. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/core/system.py +0 -0
  34. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/core/__init__.py +0 -0
  35. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/__init__.py +0 -0
  36. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/math/__init__.py +0 -0
  37. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/math/_common.py +0 -0
  38. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/math/app.py +0 -0
  39. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/math/deploy_modal.py +0 -0
  40. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/demos/demo_task_apps/math/deploy_task_app.sh +0 -0
  41. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/__init__.py +0 -0
  42. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/__init__.py +0 -0
  43. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/artifacts/__init__.py +0 -0
  44. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/artifacts/base.py +0 -0
  45. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/core.py +0 -0
  46. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/db/__init__.py +0 -0
  47. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/db/sqlite.py +0 -0
  48. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/registry.py +0 -0
  49. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/resources/sqlite.py +0 -0
  50. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/results.py +0 -0
  51. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/rewards/__init__.py +0 -0
  52. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/rewards/core.py +0 -0
  53. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/shared_engine.py +0 -0
  54. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/environment/tools/__init__.py +0 -0
  55. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/__init__.py +0 -0
  56. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/bandit/__init__.py +0 -0
  57. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/bandit/engine.py +0 -0
  58. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/bandit/environment.py +0 -0
  59. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/bandit/taskset.py +0 -0
  60. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/__init__.py +0 -0
  61. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/analyze_semantic_words_markdown.py +0 -0
  62. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_comprehensive_evaluation.py +0 -0
  63. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_browser.py +0 -0
  64. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_config.toml +0 -0
  65. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_framework.py +0 -0
  66. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/crafter_synth_config.toml +0 -0
  67. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/filter_config_modal.toml +0 -0
  68. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/filter_traces_sft_turso.py +0 -0
  69. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/kick_off_ft_modal.py +0 -0
  70. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_action_results.py +0 -0
  71. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_agent_actions.py +0 -0
  72. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_latest_run.py +0 -0
  73. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_lm_traces.py +0 -0
  74. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_no_rewards.py +0 -0
  75. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_trace_issue.py +0 -0
  76. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/check_db_schema.py +0 -0
  77. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/check_latest_results.py +0 -0
  78. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/debug_agent_responses.py +0 -0
  79. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/quick_trace_check.py +0 -0
  80. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/compare_experiments.py +0 -0
  81. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/filter_traces_sft_turso.py +0 -0
  82. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/kick_off_ft_oai.py +0 -0
  83. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/multi_model_config.toml +0 -0
  84. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_enhanced_hooks.py +0 -0
  85. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_hook_events.py +0 -0
  86. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_hook_results.py +0 -0
  87. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/check_hook_storage.py +0 -0
  88. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/check_seeds.py +0 -0
  89. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/compare_seed_performance.py +0 -0
  90. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/custom_eval_pipelines.py +0 -0
  91. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/plot_hook_frequency.py +0 -0
  92. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/seed_analysis_summary.py +0 -0
  93. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/run_rollouts_for_models_and_compare_v3.py +0 -0
  94. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_quick_evaluation.py +0 -0
  95. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_react_agent.py +0 -0
  96. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_trace_evaluation.py +0 -0
  97. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/example_v3_usage.py +0 -0
  98. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/compare_traces.py +0 -0
  99. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_comprehensive_evaluation.py +0 -0
  100. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_env_serialization.py +0 -0
  101. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_evaluation_browser.py +0 -0
  102. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_quick_evaluation.py +0 -0
  103. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_trace_evaluation.py +0 -0
  104. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/debug_player_loss.py +0 -0
  105. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/diagnose_service.py +0 -0
  106. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/diagnose_slowness.py +0 -0
  107. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/eval_by_difficulty.py +0 -0
  108. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/eval_example.py +0 -0
  109. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/explore_saved_states.py +0 -0
  110. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/filter_traces_sft.py +0 -0
  111. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/filter_traces_sft_OLD.py +0 -0
  112. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_data_gemini.py +0 -0
  113. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_data_modal.py +0 -0
  114. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_metadata.py +0 -0
  115. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/kick_off_ft_gemini.py +0 -0
  116. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/kick_off_ft_modal.py +0 -0
  117. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/prepare_vertex_ft.py +0 -0
  118. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/profile_env_slowness.py +0 -0
  119. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/replicate_issue.py +0 -0
  120. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/run_and_eval.py +0 -0
  121. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/run_comparison.py +0 -0
  122. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/run_qwen_rollouts.py +0 -0
  123. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/trace_eval_OLD.py +0 -0
  124. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/agent_demos/old/validate_openai_format.py +0 -0
  125. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/config_logging.py +0 -0
  126. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/debug_translation.py +0 -0
  127. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/engine.py +0 -0
  128. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/engine_deterministic_patch.py +0 -0
  129. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/engine_helpers/action_map.py +0 -0
  130. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/engine_helpers/serialization.py +0 -0
  131. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/engine_serialization_patch_v3.py +0 -0
  132. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/environment.py +0 -0
  133. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/taskset.py +0 -0
  134. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/trace_hooks_v3.py +0 -0
  135. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_classic/world_config_patch_simple.py +0 -0
  136. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/__init__.py +0 -0
  137. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/agent_demos/__init__.py +0 -0
  138. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/agent_demos/trace_eval.py +0 -0
  139. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/__init__.py +0 -0
  140. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/config.py +0 -0
  141. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/constants.py +0 -0
  142. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/engine.py +0 -0
  143. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/env.py +0 -0
  144. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/objects.py +0 -0
  145. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/recorder.py +0 -0
  146. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/crafter/worldgen.py +0 -0
  147. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/dataset_builder.py +0 -0
  148. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/environment.py +0 -0
  149. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/old/analyze_diamond_issue.py +0 -0
  150. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/old/analyze_diamond_spawning.py +0 -0
  151. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/old/compare_worlds.py +0 -0
  152. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/old/dataset_stats.py +0 -0
  153. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/old/diamond_spawning_summary.py +0 -0
  154. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/old/example_dataset_usage.py +0 -0
  155. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/crafter_custom/run_dataset.py +0 -0
  156. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/enron/art_helpers/email_search_tools.py +0 -0
  157. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/enron/art_helpers/local_email_db.py +0 -0
  158. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/enron/art_helpers/types_enron.py +0 -0
  159. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/enron/engine.py +0 -0
  160. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/enron/environment.py +0 -0
  161. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/enron/taskset.py +0 -0
  162. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/enron/units/keyword_stats.py +0 -0
  163. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/__init__.py +0 -0
  164. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_evaluation_framework.py +0 -0
  165. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_quick_evaluation.py +0 -0
  166. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_react_agent.py +0 -0
  167. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_trace_evaluation.py +0 -0
  168. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/engine.py +0 -0
  169. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/environment.py +0 -0
  170. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/environment_mapping.py +0 -0
  171. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/puzzle_loader.py +0 -0
  172. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/minigrid/taskset.py +0 -0
  173. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/__init__.py +0 -0
  174. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/achievements.py +0 -0
  175. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/agent_demos/nethack_evaluation_framework.py +0 -0
  176. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/agent_demos/nethack_quick_evaluation.py +0 -0
  177. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/agent_demos/nethack_react_agent.py +0 -0
  178. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/engine.py +0 -0
  179. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/environment.py +0 -0
  180. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/__init__.py +0 -0
  181. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/action_mapping.py +0 -0
  182. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/nle_wrapper.py +0 -0
  183. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/observation_utils.py +0 -0
  184. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/recording_wrapper.py +0 -0
  185. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/trajectory_recorder.py +0 -0
  186. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/visualization/replay_viewer.py +0 -0
  187. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/helpers/visualization/visualizer.py +0 -0
  188. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/nethack/taskset.py +0 -0
  189. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/__init__.py +0 -0
  190. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/agent_demos/__init__.py +0 -0
  191. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/config_logging.py +0 -0
  192. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine.py +0 -0
  193. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/__init__.py +0 -0
  194. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/memory_map.py +0 -0
  195. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_components.py +0 -0
  196. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/__init__.py +0 -0
  197. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/adaptive_rewards.py +0 -0
  198. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/battle_rewards.py +0 -0
  199. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/composite_rewards.py +0 -0
  200. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/economy_rewards.py +0 -0
  201. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/efficiency_rewards.py +0 -0
  202. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/exploration_rewards.py +0 -0
  203. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/novelty_rewards.py +0 -0
  204. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/pallet_town_rewards.py +0 -0
  205. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/pokemon_rewards.py +0 -0
  206. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/social_rewards.py +0 -0
  207. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/reward_library/story_rewards.py +0 -0
  208. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/screen_analysis.py +0 -0
  209. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/engine_helpers/state_extraction.py +0 -0
  210. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/environment.py +0 -0
  211. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/taskset.py +0 -0
  212. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/red/units/__init__.py +0 -0
  213. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/__init__.py +0 -0
  214. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/agent_demos/sokoban_full_eval.py +0 -0
  215. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine.py +0 -0
  216. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/__init__.py +0 -0
  217. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/room_utils.py +0 -0
  218. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/__init__.py +0 -0
  219. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/__init__.py +0 -0
  220. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/boxoban_env.py +0 -0
  221. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/render_utils.py +0 -0
  222. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/room_utils.py +0 -0
  223. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env.py +0 -0
  224. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_fixed_targets.py +0 -0
  225. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_pull.py +0 -0
  226. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_two_player.py +0 -0
  227. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_variations.py +0 -0
  228. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/environment.py +0 -0
  229. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/generate_verified_puzzles.py +0 -0
  230. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/puzzle_loader.py +0 -0
  231. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/taskset.py +0 -0
  232. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/sokoban/units/astar_common.py +0 -0
  233. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/tictactoe/__init__.py +0 -0
  234. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/tictactoe/engine.py +0 -0
  235. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/tictactoe/environment.py +0 -0
  236. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/tictactoe/taskset.py +0 -0
  237. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/verilog/__init__.py +0 -0
  238. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/verilog/engine.py +0 -0
  239. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/verilog/environment.py +0 -0
  240. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/verilog/taskset.py +0 -0
  241. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/wordle/__init__.py +0 -0
  242. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/wordle/engine.py +0 -0
  243. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/wordle/environment.py +0 -0
  244. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/wordle/helpers/generate_instances_wordfreq.py +0 -0
  245. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/examples/wordle/taskset.py +0 -0
  246. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/reproducibility/core.py +0 -0
  247. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/reproducibility/helpers.py +0 -0
  248. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/reproducibility/tree.py +0 -0
  249. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/service/app.py +0 -0
  250. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/service/core_routes.py +0 -0
  251. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/service/external_registry.py +0 -0
  252. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/service/registry.py +0 -0
  253. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/stateful/__init__.py +0 -0
  254. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/stateful/core.py +0 -0
  255. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/stateful/engine.py +0 -0
  256. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/stateful/state.py +0 -0
  257. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/tasks/api.py +0 -0
  258. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/tasks/core.py +0 -0
  259. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/tasks/filters.py +0 -0
  260. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/tasks/utils.py +0 -0
  261. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/v0_observability/history.py +0 -0
  262. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/environments/v0_observability/log.py +0 -0
  263. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/evals/base.py +0 -0
  264. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/experimental/synth_oss.py +0 -0
  265. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/http.py +0 -0
  266. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/http_client.py +0 -0
  267. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/inference/__init__.py +0 -0
  268. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/inference/client.py +0 -0
  269. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/install_sqld.sh +0 -0
  270. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/jobs/client.py +0 -0
  271. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/__init__.py +0 -0
  272. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/client.py +0 -0
  273. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/config.py +0 -0
  274. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/constants.py +0 -0
  275. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/core.py +0 -0
  276. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/filtering.py +0 -0
  277. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/ft_client.py +0 -0
  278. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/gateway.py +0 -0
  279. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/health.py +0 -0
  280. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/jobs.py +0 -0
  281. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/offline/dpo.py +0 -0
  282. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/offline/providers.py +0 -0
  283. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/offline/sft.py +0 -0
  284. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/offline/shared.py +0 -0
  285. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/online/grpo.py +0 -0
  286. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/online/irft.py +0 -0
  287. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/prompts/banking77_injection_eval.py +0 -0
  288. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/prompts/gepa.py +0 -0
  289. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/prompts/hello_world_in_context_injection_ex.py +0 -0
  290. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/prompts/mipro.py +0 -0
  291. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/prompts/random_search.py +0 -0
  292. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/prompts/run_mipro_banking77.py +0 -0
  293. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/prompts/run_random_search_banking77.py +0 -0
  294. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/rl_client.py +0 -0
  295. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/sse.py +0 -0
  296. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/learning/validators.py +0 -0
  297. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/__init__.py +0 -0
  298. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/caching/__init__.py +0 -0
  299. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/caching/constants.py +0 -0
  300. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/caching/dbs.py +0 -0
  301. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/caching/ephemeral.py +0 -0
  302. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/caching/handler.py +0 -0
  303. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/caching/initialize.py +0 -0
  304. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/caching/persistent.py +0 -0
  305. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/config.py +0 -0
  306. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/constants.py +0 -0
  307. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/core/__init__.py +0 -0
  308. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/core/all.py +0 -0
  309. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/core/exceptions.py +0 -0
  310. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/core/main.py +0 -0
  311. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/core/main_v3.py +0 -0
  312. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/core/synth_models.py +0 -0
  313. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/core/vendor_clients.py +0 -0
  314. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/cost/__init__.py +0 -0
  315. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/cost/monitor.py +0 -0
  316. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/cost/statefulness.py +0 -0
  317. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/injection.py +0 -0
  318. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/overrides.py +0 -0
  319. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/provider_support/__init__.py +0 -0
  320. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/provider_support/anthropic.py +0 -0
  321. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/provider_support/openai.py +0 -0
  322. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/provider_support/suppress_logging.py +0 -0
  323. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/structured_outputs/__init__.py +0 -0
  324. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/structured_outputs/handler.py +0 -0
  325. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/structured_outputs/inject.py +0 -0
  326. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/structured_outputs/rehabilitate.py +0 -0
  327. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/tools/__init__.py +0 -0
  328. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/tools/base.py +0 -0
  329. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/unified_interface.py +0 -0
  330. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/__init__.py +0 -0
  331. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/base.py +0 -0
  332. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/core/__init__.py +0 -0
  333. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/core/anthropic_api.py +0 -0
  334. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/core/gemini_api.py +0 -0
  335. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/core/mistral_api.py +0 -0
  336. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/core/openai_api.py +0 -0
  337. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/core/synth_dev_api.py +0 -0
  338. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/local/__init__.py +0 -0
  339. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/local/ollama.py +0 -0
  340. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/openai_standard.py +0 -0
  341. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/openai_standard_responses.py +0 -0
  342. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/retries.py +0 -0
  343. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/__init__.py +0 -0
  344. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/custom_endpoint.py +0 -0
  345. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/deepseek.py +0 -0
  346. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/grok.py +0 -0
  347. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/groq.py +0 -0
  348. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/ollama.py +0 -0
  349. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/openrouter.py +0 -0
  350. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/supported/together.py +0 -0
  351. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/vendors/synth_client.py +0 -0
  352. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/lm/warmup.py +0 -0
  353. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/rl/__init__.py +0 -0
  354. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/rl/contracts.py +0 -0
  355. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/rl/env_keys.py +0 -0
  356. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/rl/secrets.py +0 -0
  357. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/scripts/verify_rewards.py +0 -0
  358. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/task/__init__.py +0 -0
  359. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/task/contracts.py +0 -0
  360. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/task/health.py +0 -0
  361. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/task/validators.py +0 -0
  362. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing/__init__.py +0 -0
  363. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v1/__init__.py +0 -0
  364. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/__init__.py +0 -0
  365. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/abstractions.py +0 -0
  366. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/config.py +0 -0
  367. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/db_config.py +0 -0
  368. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/decorators.py +0 -0
  369. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/examples/basic_usage.py +0 -0
  370. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/hooks.py +0 -0
  371. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/llm_call_record_helpers.py +0 -0
  372. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/lm_call_record_abstractions.py +0 -0
  373. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/migration_helper.py +0 -0
  374. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/replica_sync.py +0 -0
  375. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/session_tracer.py +0 -0
  376. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/storage/__init__.py +0 -0
  377. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/storage/base.py +0 -0
  378. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/storage/config.py +0 -0
  379. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/storage/exceptions.py +0 -0
  380. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/storage/factory.py +0 -0
  381. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/storage/types.py +0 -0
  382. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/storage/utils.py +0 -0
  383. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/turso/__init__.py +0 -0
  384. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/turso/daemon.py +0 -0
  385. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/turso/manager.py +0 -0
  386. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/turso/models.py +0 -0
  387. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/tracing_v3/utils.py +0 -0
  388. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/__init__.py +0 -0
  389. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/abstractions.py +0 -0
  390. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/base_client.py +0 -0
  391. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/client_manager.py +0 -0
  392. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/config.py +0 -0
  393. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/context.py +0 -0
  394. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/decorators.py +0 -0
  395. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/events/__init__.py +0 -0
  396. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/events/manage.py +0 -0
  397. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/events/scope.py +0 -0
  398. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/events/store.py +0 -0
  399. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/immediate_client.py +0 -0
  400. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/local.py +0 -0
  401. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/log_client_base.py +0 -0
  402. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/retry_queue.py +0 -0
  403. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/trackers.py +0 -0
  404. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/upload.py +0 -0
  405. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing/utils.py +0 -0
  406. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/__init__.py +0 -0
  407. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/abstractions.py +0 -0
  408. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/base_client.py +0 -0
  409. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/client_manager.py +0 -0
  410. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/config.py +0 -0
  411. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/context.py +0 -0
  412. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/decorators.py +0 -0
  413. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/events/__init__.py +0 -0
  414. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/events/manage.py +0 -0
  415. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/events/scope.py +0 -0
  416. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/events/store.py +0 -0
  417. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/immediate_client.py +0 -0
  418. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/local.py +0 -0
  419. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/log_client_base.py +0 -0
  420. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/retry_queue.py +0 -0
  421. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/trackers.py +0 -0
  422. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/upload.py +0 -0
  423. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/v0/tracing_v1/utils.py +0 -0
  424. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai/zyk/__init__.py +0 -0
  425. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai.egg-info/dependency_links.txt +0 -0
  426. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/synth_ai.egg-info/entry_points.txt +0 -0
  427. {synth_ai-0.2.6.dev6 → synth_ai-0.2.8}/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.2.6.dev6
3
+ Version: 0.2.8
4
4
  Summary: RL as a service SDK - Core AI functionality and tracing
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
@@ -14,6 +14,7 @@ Requires-Dist: pydantic>=2.0.0
14
14
  Requires-Dist: python-dotenv>=1.0.1
15
15
  Requires-Dist: requests>=2.32.3
16
16
  Requires-Dist: urllib3>=2.3.0
17
+ Requires-Dist: certifi>=2024.8.30
17
18
  Requires-Dist: tqdm>=4.66.4
18
19
  Requires-Dist: jsonschema>=4.23.0
19
20
  Requires-Dist: backoff>=2.0.0
@@ -52,7 +53,7 @@ Requires-Dist: asyncpg>=0.30.0
52
53
  Requires-Dist: aiohttp>=3.8.0
53
54
  Requires-Dist: datasets>=4.0.0
54
55
  Requires-Dist: transformers>=4.56.1
55
- Requires-Dist: modal>=1.1.4
56
+ Requires-Dist: modal>=1.1.0
56
57
  Provides-Extra: dev
57
58
  Requires-Dist: build>=1.2.2.post1; extra == "dev"
58
59
  Requires-Dist: twine>=4.0.0; extra == "dev"
@@ -97,10 +98,33 @@ synth-ai comes with a built-in RL example tailored for training Qwen/Qwen3-0.6B
97
98
  Please create an account at [Synth](https://usesynth.ai) and [Modal](https://modal.com) for the Math hello‑world test run. Then run:
98
99
 
99
100
  ```bash
100
- uvx synth-ai rl_demo check
101
- uvx synth-ai rl_demo deploy
102
- uvx synth-ai rl_demo configure
103
- uvx synth-ai rl_demo run
101
+ uvx synth-ai demo
102
+ uvx synth-ai setup
103
+ uvx synth-ai deploy
104
+ uvx synth-ai run
104
105
  ```
105
106
 
106
107
  To walk through kicking off your first RL run, see the [Synth‑AI Documentation](https://docs.usesynth.ai/synth-ai/introduction).
108
+
109
+ ### What `setup` does now
110
+
111
+ When you run `uvx synth-ai setup` (or the legacy `uvx synth-ai rl_demo setup`), the SDK opens your browser to the Synth dashboard for a one‑time pairing (handshake) with your signed‑in session. The SDK will automatically:
112
+
113
+ - Detect your current user and organization
114
+ - Ensure both API keys exist for that user+org
115
+ - Write the keys to your project’s `.env` file as `SYNTH_API_KEY` and `ENVIRONMENT_API_KEY`
116
+
117
+ No keys are printed or requested interactively. You’ll see a confirmation like:
118
+
119
+ ```
120
+ Connecting SDK to your browser session…
121
+ Connected to Acme Labs via browser.
122
+ ```
123
+
124
+ If your browser isn’t already signed in, sign in when prompted and the pairing completes automatically. The dashboard’s welcome modal will reflect a successful pairing.
125
+
126
+ Environment variables:
127
+
128
+ - `SYNTH_CANONICAL_ORIGIN` (optional): override the dashboard base URL the SDK uses for the handshake (defaults to `https://www.usesynth.ai/dashboard`).
129
+ - `SYNTH_CANONICAL_DEV` (optional): set to `1`, `true`, `yes`, or `on` to target the local dashboard at `http://localhost:3000`.
130
+ - Keys are stored only in your project’s `.env` file, not exported to your shell.
@@ -24,10 +24,33 @@ synth-ai comes with a built-in RL example tailored for training Qwen/Qwen3-0.6B
24
24
  Please create an account at [Synth](https://usesynth.ai) and [Modal](https://modal.com) for the Math hello‑world test run. Then run:
25
25
 
26
26
  ```bash
27
- uvx synth-ai rl_demo check
28
- uvx synth-ai rl_demo deploy
29
- uvx synth-ai rl_demo configure
30
- uvx synth-ai rl_demo run
27
+ uvx synth-ai demo
28
+ uvx synth-ai setup
29
+ uvx synth-ai deploy
30
+ uvx synth-ai run
31
31
  ```
32
32
 
33
33
  To walk through kicking off your first RL run, see the [Synth‑AI Documentation](https://docs.usesynth.ai/synth-ai/introduction).
34
+
35
+ ### What `setup` does now
36
+
37
+ When you run `uvx synth-ai setup` (or the legacy `uvx synth-ai rl_demo setup`), the SDK opens your browser to the Synth dashboard for a one‑time pairing (handshake) with your signed‑in session. The SDK will automatically:
38
+
39
+ - Detect your current user and organization
40
+ - Ensure both API keys exist for that user+org
41
+ - Write the keys to your project’s `.env` file as `SYNTH_API_KEY` and `ENVIRONMENT_API_KEY`
42
+
43
+ No keys are printed or requested interactively. You’ll see a confirmation like:
44
+
45
+ ```
46
+ Connecting SDK to your browser session…
47
+ Connected to Acme Labs via browser.
48
+ ```
49
+
50
+ If your browser isn’t already signed in, sign in when prompted and the pairing completes automatically. The dashboard’s welcome modal will reflect a successful pairing.
51
+
52
+ Environment variables:
53
+
54
+ - `SYNTH_CANONICAL_ORIGIN` (optional): override the dashboard base URL the SDK uses for the handshake (defaults to `https://www.usesynth.ai/dashboard`).
55
+ - `SYNTH_CANONICAL_DEV` (optional): set to `1`, `true`, `yes`, or `on` to target the local dashboard at `http://localhost:3000`.
56
+ - Keys are stored only in your project’s `.env` file, not exported to your shell.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "synth-ai"
3
- version = "0.2.6.dev6"
3
+ version = "0.2.8"
4
4
  description = "RL as a service SDK - Core AI functionality and tracing"
5
5
  authors = [{name = "Synth AI", email = "josh@usesynth.ai"}]
6
6
  license = "MIT"
@@ -12,6 +12,7 @@ dependencies = [
12
12
  "python-dotenv>=1.0.1",
13
13
  "requests>=2.32.3",
14
14
  "urllib3>=2.3.0",
15
+ "certifi>=2024.8.30",
15
16
  "tqdm>=4.66.4",
16
17
  "jsonschema>=4.23.0",
17
18
  "backoff>=2.0.0",
@@ -54,7 +55,7 @@ dependencies = [
54
55
  "aiohttp>=3.8.0", # For async HTTP requests in Harmony integration
55
56
  "datasets>=4.0.0",
56
57
  "transformers>=4.56.1",
57
- "modal>=1.1.4",
58
+ "modal>=1.1.0",
58
59
  ]
59
60
 
60
61
  [project.scripts]
@@ -35,64 +35,73 @@ def _forward_to_new(args: list[str]) -> None:
35
35
 
36
36
  def register(cli):
37
37
  @cli.group("demo", invoke_without_command=True)
38
+ @click.option("--force", is_flag=True, help="Overwrite existing files in CWD when initializing demo")
38
39
  @click.option("--list", "list_only", is_flag=True, help="List available legacy demos and exit")
39
40
  @click.option("-f", "filter_term", default="", help="Filter legacy demos by substring")
40
41
  @click.pass_context
41
- def demo(ctx: click.Context, list_only: bool, filter_term: str):
42
+ def demo(ctx: click.Context, force: bool, list_only: bool, filter_term: str):
42
43
  """Demo helpers.
43
44
 
44
- - Legacy mode (no subcommand): find and run examples/*/run_demo.sh
45
+ - Default (no subcommand): initialize RL demo files into ./synth_demo/ (alias of rl_demo init)
46
+ - Legacy mode: with --list, find and run examples/*/run_demo.sh
45
47
  - New RL demo subcommands: deploy, configure, run
46
48
  """
47
49
  if ctx.invoked_subcommand is not None:
48
50
  return
49
- # Legacy behavior: interactive examples runner
50
- repo_root = Path(os.getcwd())
51
- examples_dir = repo_root / "examples"
52
- demos = _find_demo_scripts(examples_dir)
53
- if filter_term:
54
- demos = [p for p in demos if filter_term.lower() in str(p).lower()]
55
-
56
- if not demos:
57
- click.echo("No run_demo.sh scripts found under examples/.")
58
- return
59
51
 
52
+ # If explicitly asked to list legacy demos, show interactive picker
60
53
  if list_only:
54
+ repo_root = Path(os.getcwd())
55
+ examples_dir = repo_root / "examples"
56
+ demos = _find_demo_scripts(examples_dir)
57
+ if filter_term:
58
+ demos = [p for p in demos if filter_term.lower() in str(p).lower()]
59
+
60
+ if not demos:
61
+ click.echo("No run_demo.sh scripts found under examples/.")
62
+ return
63
+
61
64
  click.echo("Available demos:")
62
- for p in demos:
63
- click.echo(f" - {p.relative_to(repo_root)}")
64
- return
65
+ for idx, p in enumerate(demos, start=1):
66
+ click.echo(f" {idx}. {p.relative_to(repo_root)}")
67
+ click.echo("")
68
+
69
+ def _validate_choice(val: str) -> int:
70
+ try:
71
+ i = int(val)
72
+ except Exception as err:
73
+ raise click.BadParameter("Enter a number from the list") from err
74
+ if i < 1 or i > len(demos):
75
+ raise click.BadParameter(f"Choose a number between 1 and {len(demos)}")
76
+ return i
77
+
78
+ choice = click.prompt("Select a demo to run", value_proc=_validate_choice)
79
+ script = demos[choice - 1]
65
80
 
66
- click.echo("Available demos:")
67
- for idx, p in enumerate(demos, start=1):
68
- click.echo(f" {idx}. {p.relative_to(repo_root)}")
69
- click.echo("")
81
+ click.echo("")
82
+ click.echo(f"🚀 Running {script.relative_to(repo_root)}\n")
70
83
 
71
- def _validate_choice(val: str) -> int:
72
84
  try:
73
- i = int(val)
74
- except Exception as err:
75
- raise click.BadParameter("Enter a number from the list") from err
76
- if i < 1 or i > len(demos):
77
- raise click.BadParameter(f"Choose a number between 1 and {len(demos)}")
78
- return i
79
-
80
- choice = click.prompt("Select a demo to run", value_proc=_validate_choice)
81
- script = demos[choice - 1]
82
-
83
- click.echo("")
84
- click.echo(f"🚀 Running {script.relative_to(repo_root)}\n")
85
-
86
- try:
87
- subprocess.run(["bash", str(script)], check=True)
88
- except subprocess.CalledProcessError as e:
89
- click.echo(f"❌ Demo exited with non-zero status: {e.returncode}")
90
- except KeyboardInterrupt:
91
- click.echo("\n🛑 Demo interrupted by user")
85
+ subprocess.run(["bash", str(script)], check=True)
86
+ except subprocess.CalledProcessError as e:
87
+ click.echo(f" Demo exited with non-zero status: {e.returncode}")
88
+ except KeyboardInterrupt:
89
+ click.echo("\n🛑 Demo interrupted by user")
90
+ return
91
+
92
+ # Default: forward to RL demo init behavior, optionally with --force
93
+ args: list[str] = ["rl_demo.init"]
94
+ if force:
95
+ args.append("--force")
96
+ _forward_to_new(args)
92
97
 
93
98
  # (prepare command removed; configure now prepares baseline TOML)
94
99
 
95
- @demo.command("deploy")
100
+ # Help pyright understand dynamic Click group attributes
101
+ from typing import Any, cast as _cast
102
+ _dg = _cast(Any, demo)
103
+
104
+ @_dg.command("deploy")
96
105
  @click.option("--local", is_flag=True, help="Run local FastAPI instead of Modal deploy")
97
106
  @click.option("--app", type=click.Path(), default=None, help="Path to Modal app.py for uv run modal deploy")
98
107
  @click.option("--name", type=str, default="synth-math-demo", help="Modal app name")
@@ -109,11 +118,15 @@ def register(cli):
109
118
  args.extend(["--script", script])
110
119
  _forward_to_new(args)
111
120
 
112
- @demo.command("configure")
121
+ @_dg.command("configure")
113
122
  def demo_configure():
114
123
  _forward_to_new(["rl_demo.configure"])
115
124
 
116
- @demo.command("run")
125
+ @_dg.command("setup")
126
+ def demo_setup():
127
+ _forward_to_new(["rl_demo.setup"])
128
+
129
+ @_dg.command("run")
117
130
  @click.option("--batch-size", type=int, default=None)
118
131
  @click.option("--group-size", type=int, default=None)
119
132
  @click.option("--model", type=str, default=None)
@@ -7,6 +7,7 @@ Usage examples:
7
7
  uvx synth-ai rl_demo deploy --app /path/to/math_task_app.py --name synth-math-demo
8
8
  uvx synth-ai rl_demo configure
9
9
  uvx synth-ai rl_demo run --batch-size 4 --group-size 16 --model Qwen/Qwen3-0.6B
10
+ uvx synth-ai run --config demo_config.toml
10
11
 
11
12
  For convenience, dotted aliases are also exposed:
12
13
  uvx synth-ai rl_demo.check
@@ -38,9 +39,9 @@ def register(cli):
38
39
  from typing import Any, cast as _cast
39
40
  _rlg = _cast(Any, rl_demo)
40
41
 
41
- @_rlg.command("check")
42
- def rl_check():
43
- _forward(["rl_demo.check"]) # reuse same implementation
42
+ @_rlg.command("setup")
43
+ def rl_setup():
44
+ _forward(["rl_demo.setup"]) # primary setup command
44
45
 
45
46
  # (prepare command removed; consolidated into configure)
46
47
 
@@ -96,10 +97,14 @@ def register(cli):
96
97
  args.append("--dry-run")
97
98
  _forward(args)
98
99
 
99
- # Dotted aliases (top-level) for convenience: rl_demo.check etc.
100
+ # Dotted aliases (top-level): legacy check → setup
100
101
  @cli.command("rl_demo.check")
101
102
  def rl_check_alias():
102
- _forward(["rl_demo.check"])
103
+ _forward(["rl_demo.setup"])
104
+
105
+ @cli.command("rl_demo.setup")
106
+ def rl_setup_alias():
107
+ _forward(["rl_demo.setup"])
103
108
 
104
109
  # (prepare alias removed)
105
110
 
@@ -154,3 +159,44 @@ def register(cli):
154
159
  if dry_run:
155
160
  args.append("--dry-run")
156
161
  _forward(args)
162
+
163
+ # Top-level convenience alias: `synth-ai deploy`
164
+ @cli.command("deploy")
165
+ @click.option("--local", is_flag=True, help="Run local FastAPI instead of Modal deploy")
166
+ @click.option("--app", type=click.Path(), default=None, help="Path to Modal app.py for uv run modal deploy")
167
+ @click.option("--name", type=str, default="synth-math-demo", help="Modal app name")
168
+ @click.option("--script", type=click.Path(), default=None, help="Path to deploy_task_app.sh (optional legacy)")
169
+ def deploy_top(local: bool, app: str | None, name: str, script: str | None):
170
+ args: list[str] = ["rl_demo.deploy"]
171
+ if local:
172
+ args.append("--local")
173
+ if app:
174
+ args.extend(["--app", app])
175
+ if name:
176
+ args.extend(["--name", name])
177
+ if script:
178
+ args.extend(["--script", script])
179
+ _forward(args)
180
+
181
+ @cli.command("run")
182
+ @click.option("--config", type=click.Path(), default=None, help="Path to TOML config (skip prompt)")
183
+ @click.option("--batch-size", type=int, default=None)
184
+ @click.option("--group-size", type=int, default=None)
185
+ @click.option("--model", type=str, default=None)
186
+ @click.option("--timeout", type=int, default=600)
187
+ @click.option("--dry-run", is_flag=True, help="Print request body and exit")
188
+ def run_top(config: str | None, batch_size: int | None, group_size: int | None, model: str | None, timeout: int, dry_run: bool):
189
+ args = ["run"]
190
+ if config:
191
+ args.extend(["--config", config])
192
+ if batch_size is not None:
193
+ args.extend(["--batch-size", str(batch_size)])
194
+ if group_size is not None:
195
+ args.extend(["--group-size", str(group_size)])
196
+ if model:
197
+ args.extend(["--model", model])
198
+ if timeout is not None:
199
+ args.extend(["--timeout", str(timeout)])
200
+ if dry_run:
201
+ args.append("--dry-run")
202
+ _forward(args)
@@ -117,6 +117,12 @@ def configure():
117
117
  _forward_to_demo(["rl_demo.configure"])
118
118
 
119
119
 
120
+ @demo.command()
121
+ def setup():
122
+ """Perform SDK handshake and write keys to .env."""
123
+ _forward_to_demo(["rl_demo.setup"])
124
+
125
+
120
126
  @demo.command()
121
127
  @click.option("--batch-size", type=int, default=None)
122
128
  @click.option("--group-size", type=int, default=None)
@@ -136,6 +142,12 @@ def run(batch_size: int | None, group_size: int | None, model: str | None, timeo
136
142
  _forward_to_demo(args)
137
143
 
138
144
 
145
+ @cli.command()
146
+ def setup():
147
+ """Perform SDK handshake and write keys to .env."""
148
+ _forward_to_demo(["rl_demo.setup"])
149
+
150
+
139
151
  @cli.command()
140
152
  @click.option("--db-file", default="traces/v3/synth_ai.db", help="Database file path")
141
153
  @click.option("--sqld-port", default=8080, type=int, help="Port for sqld HTTP interface")