synth-ai 0.2.4.dev8__tar.gz → 0.2.5__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 (426) hide show
  1. synth_ai-0.2.5/PKG-INFO +106 -0
  2. synth_ai-0.2.5/README.md +33 -0
  3. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/pyproject.toml +10 -2
  4. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/__init__.py +1 -1
  5. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/__init__.py +6 -0
  6. synth_ai-0.2.5/synth_ai/cli/demo.py +131 -0
  7. synth_ai-0.2.5/synth_ai/cli/rl_demo.py +137 -0
  8. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/root.py +65 -0
  9. synth_ai-0.2.5/synth_ai/demos/core/__init__.py +1 -0
  10. synth_ai-0.2.5/synth_ai/demos/core/cli.py +685 -0
  11. synth_ai-0.2.5/synth_ai/demos/demo_task_apps/__init__.py +1 -0
  12. synth_ai-0.2.5/synth_ai/demos/demo_task_apps/core.py +374 -0
  13. synth_ai-0.2.5/synth_ai/demos/demo_task_apps/math/__init__.py +1 -0
  14. synth_ai-0.2.5/synth_ai/demos/demo_task_apps/math/app.py +37 -0
  15. synth_ai-0.2.5/synth_ai/demos/demo_task_apps/math/config.toml +44 -0
  16. synth_ai-0.2.5/synth_ai/demos/demo_task_apps/math/deploy_modal.py +60 -0
  17. synth_ai-0.2.5/synth_ai/demos/demo_task_apps/math/deploy_task_app.sh +22 -0
  18. synth_ai-0.2.5/synth_ai/environments/examples/bandit/__init__.py +33 -0
  19. synth_ai-0.2.5/synth_ai/environments/examples/bandit/engine.py +294 -0
  20. synth_ai-0.2.5/synth_ai/environments/examples/bandit/environment.py +194 -0
  21. synth_ai-0.2.5/synth_ai/environments/examples/bandit/taskset.py +200 -0
  22. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/environment.py +41 -2
  23. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/service/app.py +8 -0
  24. synth_ai-0.2.5/synth_ai.egg-info/PKG-INFO +106 -0
  25. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai.egg-info/SOURCES.txt +14 -0
  26. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai.egg-info/entry_points.txt +1 -0
  27. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai.egg-info/requires.txt +1 -0
  28. synth_ai-0.2.4.dev8/PKG-INFO +0 -635
  29. synth_ai-0.2.4.dev8/README.md +0 -563
  30. synth_ai-0.2.4.dev8/synth_ai/cli/demo.py +0 -72
  31. synth_ai-0.2.4.dev8/synth_ai.egg-info/PKG-INFO +0 -635
  32. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/LICENSE +0 -0
  33. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/MANIFEST.in +0 -0
  34. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/setup.cfg +0 -0
  35. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/__main__.py +0 -0
  36. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/balance.py +0 -0
  37. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/calc.py +0 -0
  38. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/legacy_root_backup.py +0 -0
  39. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/man.py +0 -0
  40. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/recent.py +0 -0
  41. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/status.py +0 -0
  42. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/traces.py +0 -0
  43. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/cli/watch.py +0 -0
  44. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/compound/cais.py +0 -0
  45. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/config/base_url.py +0 -0
  46. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/core/experiment.py +0 -0
  47. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/core/system.py +0 -0
  48. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/__init__.py +0 -0
  49. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/__init__.py +0 -0
  50. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/artifacts/__init__.py +0 -0
  51. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/artifacts/base.py +0 -0
  52. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/core.py +0 -0
  53. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/db/__init__.py +0 -0
  54. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/db/sqlite.py +0 -0
  55. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/registry.py +0 -0
  56. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/resources/sqlite.py +0 -0
  57. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/results.py +0 -0
  58. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/rewards/__init__.py +0 -0
  59. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/rewards/core.py +0 -0
  60. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/shared_engine.py +0 -0
  61. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/environment/tools/__init__.py +0 -0
  62. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/__init__.py +0 -0
  63. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/__init__.py +0 -0
  64. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/analyze_semantic_words_markdown.py +0 -0
  65. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_comprehensive_evaluation.py +0 -0
  66. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_browser.py +0 -0
  67. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_config.toml +0 -0
  68. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_evaluation_framework.py +0 -0
  69. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/crafter_synth_config.toml +0 -0
  70. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/filter_config_modal.toml +0 -0
  71. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/filter_traces_sft_turso.py +0 -0
  72. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/kick_off_ft_modal.py +0 -0
  73. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_action_results.py +0 -0
  74. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_agent_actions.py +0 -0
  75. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_latest_run.py +0 -0
  76. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_lm_traces.py +0 -0
  77. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_no_rewards.py +0 -0
  78. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/analyze_trace_issue.py +0 -0
  79. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/check_db_schema.py +0 -0
  80. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/check_latest_results.py +0 -0
  81. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/debug_agent_responses.py +0 -0
  82. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/old/quick_trace_check.py +0 -0
  83. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/compare_experiments.py +0 -0
  84. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/filter_traces_sft_turso.py +0 -0
  85. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/kick_off_ft_oai.py +0 -0
  86. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/multi_model_config.toml +0 -0
  87. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_enhanced_hooks.py +0 -0
  88. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_hook_events.py +0 -0
  89. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/analyze_hook_results.py +0 -0
  90. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/check_hook_storage.py +0 -0
  91. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/check_seeds.py +0 -0
  92. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/compare_seed_performance.py +0 -0
  93. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/custom_eval_pipelines.py +0 -0
  94. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/plot_hook_frequency.py +0 -0
  95. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/old/seed_analysis_summary.py +0 -0
  96. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/run_rollouts_for_models_and_compare_v3.py +0 -0
  97. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_quick_evaluation.py +0 -0
  98. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_react_agent.py +0 -0
  99. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/crafter_trace_evaluation.py +0 -0
  100. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/example_v3_usage.py +0 -0
  101. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/compare_traces.py +0 -0
  102. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_comprehensive_evaluation.py +0 -0
  103. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_env_serialization.py +0 -0
  104. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_evaluation_browser.py +0 -0
  105. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_quick_evaluation.py +0 -0
  106. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/crafter_trace_evaluation.py +0 -0
  107. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/debug_player_loss.py +0 -0
  108. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/diagnose_service.py +0 -0
  109. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/diagnose_slowness.py +0 -0
  110. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/eval_by_difficulty.py +0 -0
  111. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/eval_example.py +0 -0
  112. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/explore_saved_states.py +0 -0
  113. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/filter_traces_sft.py +0 -0
  114. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/filter_traces_sft_OLD.py +0 -0
  115. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_data_gemini.py +0 -0
  116. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_data_modal.py +0 -0
  117. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/generate_ft_metadata.py +0 -0
  118. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/kick_off_ft_gemini.py +0 -0
  119. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/kick_off_ft_modal.py +0 -0
  120. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/prepare_vertex_ft.py +0 -0
  121. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/profile_env_slowness.py +0 -0
  122. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/replicate_issue.py +0 -0
  123. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/run_and_eval.py +0 -0
  124. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/run_comparison.py +0 -0
  125. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/run_qwen_rollouts.py +0 -0
  126. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/trace_eval_OLD.py +0 -0
  127. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/agent_demos/old/validate_openai_format.py +0 -0
  128. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/config_logging.py +0 -0
  129. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/debug_translation.py +0 -0
  130. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/engine.py +0 -0
  131. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/engine_deterministic_patch.py +0 -0
  132. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/engine_helpers/action_map.py +0 -0
  133. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/engine_helpers/serialization.py +0 -0
  134. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/engine_serialization_patch_v3.py +0 -0
  135. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/taskset.py +0 -0
  136. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/trace_hooks_v3.py +0 -0
  137. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_classic/world_config_patch_simple.py +0 -0
  138. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/__init__.py +0 -0
  139. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/agent_demos/__init__.py +0 -0
  140. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/agent_demos/trace_eval.py +0 -0
  141. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/__init__.py +0 -0
  142. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/config.py +0 -0
  143. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/constants.py +0 -0
  144. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/engine.py +0 -0
  145. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/env.py +0 -0
  146. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/objects.py +0 -0
  147. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/recorder.py +0 -0
  148. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/crafter/worldgen.py +0 -0
  149. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/dataset_builder.py +0 -0
  150. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/environment.py +0 -0
  151. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/old/analyze_diamond_issue.py +0 -0
  152. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/old/analyze_diamond_spawning.py +0 -0
  153. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/old/compare_worlds.py +0 -0
  154. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/old/dataset_stats.py +0 -0
  155. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/old/diamond_spawning_summary.py +0 -0
  156. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/old/example_dataset_usage.py +0 -0
  157. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/crafter_custom/run_dataset.py +0 -0
  158. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/enron/art_helpers/email_search_tools.py +0 -0
  159. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/enron/art_helpers/local_email_db.py +0 -0
  160. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/enron/art_helpers/types_enron.py +0 -0
  161. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/enron/engine.py +0 -0
  162. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/enron/environment.py +0 -0
  163. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/enron/taskset.py +0 -0
  164. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/enron/units/keyword_stats.py +0 -0
  165. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/__init__.py +0 -0
  166. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_evaluation_framework.py +0 -0
  167. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_quick_evaluation.py +0 -0
  168. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_react_agent.py +0 -0
  169. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/agent_demos/minigrid_trace_evaluation.py +0 -0
  170. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/engine.py +0 -0
  171. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/environment.py +0 -0
  172. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/environment_mapping.py +0 -0
  173. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/puzzle_loader.py +0 -0
  174. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/minigrid/taskset.py +0 -0
  175. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/__init__.py +0 -0
  176. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/achievements.py +0 -0
  177. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/agent_demos/nethack_evaluation_framework.py +0 -0
  178. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/agent_demos/nethack_quick_evaluation.py +0 -0
  179. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/agent_demos/nethack_react_agent.py +0 -0
  180. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/engine.py +0 -0
  181. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/environment.py +0 -0
  182. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/__init__.py +0 -0
  183. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/action_mapping.py +0 -0
  184. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/nle_wrapper.py +0 -0
  185. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/observation_utils.py +0 -0
  186. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/recording_wrapper.py +0 -0
  187. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/trajectory_recorder.py +0 -0
  188. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/visualization/replay_viewer.py +0 -0
  189. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/helpers/visualization/visualizer.py +0 -0
  190. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/nethack/taskset.py +0 -0
  191. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/__init__.py +0 -0
  192. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/agent_demos/__init__.py +0 -0
  193. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/config_logging.py +0 -0
  194. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine.py +0 -0
  195. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/__init__.py +0 -0
  196. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/memory_map.py +0 -0
  197. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_components.py +0 -0
  198. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/__init__.py +0 -0
  199. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/adaptive_rewards.py +0 -0
  200. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/battle_rewards.py +0 -0
  201. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/composite_rewards.py +0 -0
  202. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/economy_rewards.py +0 -0
  203. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/efficiency_rewards.py +0 -0
  204. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/exploration_rewards.py +0 -0
  205. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/novelty_rewards.py +0 -0
  206. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/pallet_town_rewards.py +0 -0
  207. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/pokemon_rewards.py +0 -0
  208. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/social_rewards.py +0 -0
  209. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/reward_library/story_rewards.py +0 -0
  210. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/screen_analysis.py +0 -0
  211. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/engine_helpers/state_extraction.py +0 -0
  212. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/environment.py +0 -0
  213. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/taskset.py +0 -0
  214. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/red/units/__init__.py +0 -0
  215. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/__init__.py +0 -0
  216. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/agent_demos/sokoban_full_eval.py +0 -0
  217. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine.py +0 -0
  218. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/__init__.py +0 -0
  219. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/room_utils.py +0 -0
  220. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/__init__.py +0 -0
  221. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/__init__.py +0 -0
  222. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/boxoban_env.py +0 -0
  223. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/render_utils.py +0 -0
  224. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/room_utils.py +0 -0
  225. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env.py +0 -0
  226. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_fixed_targets.py +0 -0
  227. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_pull.py +0 -0
  228. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_two_player.py +0 -0
  229. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/engine_helpers/vendored/envs/sokoban_env_variations.py +0 -0
  230. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/environment.py +0 -0
  231. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/generate_verified_puzzles.py +0 -0
  232. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/puzzle_loader.py +0 -0
  233. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/taskset.py +0 -0
  234. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/sokoban/units/astar_common.py +0 -0
  235. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/tictactoe/__init__.py +0 -0
  236. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/tictactoe/engine.py +0 -0
  237. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/tictactoe/environment.py +0 -0
  238. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/tictactoe/taskset.py +0 -0
  239. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/verilog/__init__.py +0 -0
  240. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/verilog/engine.py +0 -0
  241. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/verilog/environment.py +0 -0
  242. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/verilog/taskset.py +0 -0
  243. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/wordle/__init__.py +0 -0
  244. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/wordle/engine.py +0 -0
  245. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/wordle/environment.py +0 -0
  246. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/wordle/helpers/generate_instances_wordfreq.py +0 -0
  247. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/examples/wordle/taskset.py +0 -0
  248. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/reproducibility/core.py +0 -0
  249. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/reproducibility/helpers.py +0 -0
  250. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/reproducibility/tree.py +0 -0
  251. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/service/core_routes.py +0 -0
  252. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/service/external_registry.py +0 -0
  253. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/service/registry.py +0 -0
  254. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/stateful/__init__.py +0 -0
  255. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/stateful/core.py +0 -0
  256. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/stateful/engine.py +0 -0
  257. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/stateful/state.py +0 -0
  258. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/tasks/api.py +0 -0
  259. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/tasks/core.py +0 -0
  260. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/tasks/filters.py +0 -0
  261. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/tasks/utils.py +0 -0
  262. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/v0_observability/history.py +0 -0
  263. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/environments/v0_observability/log.py +0 -0
  264. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/evals/base.py +0 -0
  265. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/experimental/synth_oss.py +0 -0
  266. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/http.py +0 -0
  267. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/inference/__init__.py +0 -0
  268. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/inference/client.py +0 -0
  269. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/install_sqld.sh +0 -0
  270. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/jobs/client.py +0 -0
  271. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/__init__.py +0 -0
  272. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/client.py +0 -0
  273. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/config.py +0 -0
  274. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/constants.py +0 -0
  275. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/core.py +0 -0
  276. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/filtering.py +0 -0
  277. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/ft_client.py +0 -0
  278. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/gateway.py +0 -0
  279. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/health.py +0 -0
  280. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/jobs.py +0 -0
  281. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/offline/dpo.py +0 -0
  282. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/offline/providers.py +0 -0
  283. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/offline/sft.py +0 -0
  284. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/offline/shared.py +0 -0
  285. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/online/grpo.py +0 -0
  286. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/online/irft.py +0 -0
  287. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/prompts/banking77_injection_eval.py +0 -0
  288. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/prompts/gepa.py +0 -0
  289. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/prompts/hello_world_in_context_injection_ex.py +0 -0
  290. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/prompts/mipro.py +0 -0
  291. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/prompts/random_search.py +0 -0
  292. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/prompts/run_mipro_banking77.py +0 -0
  293. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/prompts/run_random_search_banking77.py +0 -0
  294. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/rl_client.py +0 -0
  295. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/sse.py +0 -0
  296. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/learning/validators.py +0 -0
  297. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/__init__.py +0 -0
  298. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/caching/__init__.py +0 -0
  299. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/caching/constants.py +0 -0
  300. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/caching/dbs.py +0 -0
  301. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/caching/ephemeral.py +0 -0
  302. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/caching/handler.py +0 -0
  303. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/caching/initialize.py +0 -0
  304. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/caching/persistent.py +0 -0
  305. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/config.py +0 -0
  306. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/constants.py +0 -0
  307. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/core/__init__.py +0 -0
  308. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/core/all.py +0 -0
  309. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/core/exceptions.py +0 -0
  310. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/core/main.py +0 -0
  311. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/core/main_v3.py +0 -0
  312. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/core/synth_models.py +0 -0
  313. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/core/vendor_clients.py +0 -0
  314. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/cost/__init__.py +0 -0
  315. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/cost/monitor.py +0 -0
  316. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/cost/statefulness.py +0 -0
  317. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/injection.py +0 -0
  318. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/overrides.py +0 -0
  319. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/provider_support/__init__.py +0 -0
  320. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/provider_support/anthropic.py +0 -0
  321. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/provider_support/openai.py +0 -0
  322. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/provider_support/suppress_logging.py +0 -0
  323. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/structured_outputs/__init__.py +0 -0
  324. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/structured_outputs/handler.py +0 -0
  325. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/structured_outputs/inject.py +0 -0
  326. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/structured_outputs/rehabilitate.py +0 -0
  327. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/tools/__init__.py +0 -0
  328. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/tools/base.py +0 -0
  329. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/unified_interface.py +0 -0
  330. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/__init__.py +0 -0
  331. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/base.py +0 -0
  332. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/core/__init__.py +0 -0
  333. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/core/anthropic_api.py +0 -0
  334. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/core/gemini_api.py +0 -0
  335. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/core/mistral_api.py +0 -0
  336. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/core/openai_api.py +0 -0
  337. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/core/synth_dev_api.py +0 -0
  338. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/local/__init__.py +0 -0
  339. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/local/ollama.py +0 -0
  340. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/openai_standard.py +0 -0
  341. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/openai_standard_responses.py +0 -0
  342. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/retries.py +0 -0
  343. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/__init__.py +0 -0
  344. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/custom_endpoint.py +0 -0
  345. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/deepseek.py +0 -0
  346. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/grok.py +0 -0
  347. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/groq.py +0 -0
  348. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/ollama.py +0 -0
  349. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/openrouter.py +0 -0
  350. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/supported/together.py +0 -0
  351. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/vendors/synth_client.py +0 -0
  352. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/lm/warmup.py +0 -0
  353. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/rl/__init__.py +0 -0
  354. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/rl/contracts.py +0 -0
  355. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/rl/env_keys.py +0 -0
  356. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/rl/secrets.py +0 -0
  357. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/scripts/verify_rewards.py +0 -0
  358. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/task/__init__.py +0 -0
  359. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/task/contracts.py +0 -0
  360. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/task/health.py +0 -0
  361. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/task/validators.py +0 -0
  362. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing/__init__.py +0 -0
  363. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v1/__init__.py +0 -0
  364. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/__init__.py +0 -0
  365. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/abstractions.py +0 -0
  366. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/config.py +0 -0
  367. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/db_config.py +0 -0
  368. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/decorators.py +0 -0
  369. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/examples/basic_usage.py +0 -0
  370. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/hooks.py +0 -0
  371. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/llm_call_record_helpers.py +0 -0
  372. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/lm_call_record_abstractions.py +0 -0
  373. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/migration_helper.py +0 -0
  374. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/replica_sync.py +0 -0
  375. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/session_tracer.py +0 -0
  376. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/storage/__init__.py +0 -0
  377. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/storage/base.py +0 -0
  378. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/storage/config.py +0 -0
  379. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/storage/exceptions.py +0 -0
  380. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/storage/factory.py +0 -0
  381. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/storage/types.py +0 -0
  382. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/storage/utils.py +0 -0
  383. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/turso/__init__.py +0 -0
  384. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/turso/daemon.py +0 -0
  385. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/turso/manager.py +0 -0
  386. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/turso/models.py +0 -0
  387. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/tracing_v3/utils.py +0 -0
  388. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/__init__.py +0 -0
  389. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/abstractions.py +0 -0
  390. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/base_client.py +0 -0
  391. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/client_manager.py +0 -0
  392. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/config.py +0 -0
  393. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/context.py +0 -0
  394. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/decorators.py +0 -0
  395. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/events/__init__.py +0 -0
  396. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/events/manage.py +0 -0
  397. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/events/scope.py +0 -0
  398. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/events/store.py +0 -0
  399. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/immediate_client.py +0 -0
  400. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/local.py +0 -0
  401. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/log_client_base.py +0 -0
  402. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/retry_queue.py +0 -0
  403. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/trackers.py +0 -0
  404. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/upload.py +0 -0
  405. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing/utils.py +0 -0
  406. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/__init__.py +0 -0
  407. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/abstractions.py +0 -0
  408. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/base_client.py +0 -0
  409. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/client_manager.py +0 -0
  410. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/config.py +0 -0
  411. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/context.py +0 -0
  412. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/decorators.py +0 -0
  413. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/events/__init__.py +0 -0
  414. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/events/manage.py +0 -0
  415. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/events/scope.py +0 -0
  416. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/events/store.py +0 -0
  417. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/immediate_client.py +0 -0
  418. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/local.py +0 -0
  419. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/log_client_base.py +0 -0
  420. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/retry_queue.py +0 -0
  421. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/trackers.py +0 -0
  422. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/upload.py +0 -0
  423. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/v0/tracing_v1/utils.py +0 -0
  424. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai/zyk/__init__.py +0 -0
  425. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai.egg-info/dependency_links.txt +0 -0
  426. {synth_ai-0.2.4.dev8 → synth_ai-0.2.5}/synth_ai.egg-info/top_level.txt +0 -0
@@ -0,0 +1,106 @@
1
+ Metadata-Version: 2.4
2
+ Name: synth-ai
3
+ Version: 0.2.5
4
+ Summary: Software for aiding the best and multiplying the will - Core AI functionality and tracing
5
+ Author-email: Synth AI <josh@usesynth.ai>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/synth-laboratories/synth-ai
8
+ Project-URL: Repository, https://github.com/synth-laboratories/synth-ai
9
+ Project-URL: Issues, https://github.com/synth-laboratories/synth-ai/issues
10
+ Requires-Python: >=3.11
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: pydantic>=2.0.0
14
+ Requires-Dist: python-dotenv>=1.0.1
15
+ Requires-Dist: requests>=2.32.3
16
+ Requires-Dist: urllib3>=2.3.0
17
+ Requires-Dist: tqdm>=4.66.4
18
+ Requires-Dist: jsonschema>=4.23.0
19
+ Requires-Dist: backoff>=2.0.0
20
+ Requires-Dist: typing_extensions>=4.0.0
21
+ Requires-Dist: openai>=1.99.0
22
+ Requires-Dist: anthropic>=0.42.0
23
+ Requires-Dist: langfuse<3.0.0,>=2.53.9
24
+ Requires-Dist: opentelemetry-api<1.27.0,>=1.26.0
25
+ Requires-Dist: opentelemetry-sdk<1.27.0,>=1.26.0
26
+ Requires-Dist: diskcache>=5.6.3
27
+ Requires-Dist: groq>=0.30.0
28
+ Requires-Dist: google-genai>=1.26.0
29
+ Requires-Dist: together>=1.5.21
30
+ Requires-Dist: mistralai>=1.9.2
31
+ Requires-Dist: fastapi>=0.115.12
32
+ Requires-Dist: uvicorn>=0.34.2
33
+ Requires-Dist: numpy>=2.2.3
34
+ Requires-Dist: networkx>=3.4.2
35
+ Requires-Dist: redis>=6.2.0
36
+ Requires-Dist: duckdb>=1.0.0
37
+ Requires-Dist: pandas>=2.2.3
38
+ Requires-Dist: ty>=0.0.1a5
39
+ Requires-Dist: toml>=0.10.2
40
+ Requires-Dist: sqlalchemy>=2.0.42
41
+ Requires-Dist: aiosqlite>=0.21.0
42
+ Requires-Dist: greenlet>=3.2.3
43
+ Requires-Dist: libsql>=0.1.8
44
+ Requires-Dist: pynacl>=1.5.0
45
+ Requires-Dist: google-api-core>=2.25.1
46
+ Requires-Dist: google-generativeai>=0.8.5
47
+ Requires-Dist: crafter>=1.8.3
48
+ Requires-Dist: click>=8.1.0
49
+ Requires-Dist: textual>=1.1.0
50
+ Requires-Dist: openai-harmony>=0.0.1
51
+ Requires-Dist: asyncpg>=0.30.0
52
+ Requires-Dist: aiohttp>=3.8.0
53
+ Requires-Dist: datasets>=4.0.0
54
+ Requires-Dist: transformers>=4.56.1
55
+ Requires-Dist: modal>=1.1.4
56
+ Provides-Extra: dev
57
+ Requires-Dist: build>=1.2.2.post1; extra == "dev"
58
+ Requires-Dist: twine>=4.0.0; extra == "dev"
59
+ Requires-Dist: keyring>=24.0.0; extra == "dev"
60
+ Requires-Dist: pytest>=8.3.3; extra == "dev"
61
+ Requires-Dist: pytest-asyncio>=0.24.0; extra == "dev"
62
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
63
+ Requires-Dist: pyright>=1.1.350; extra == "dev"
64
+ Requires-Dist: coverage[toml]>=7.3.0; extra == "dev"
65
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
66
+ Provides-Extra: research
67
+ Requires-Dist: crafter>=1.8.3; extra == "research"
68
+ Requires-Dist: datasets>=4.0.0; extra == "research"
69
+ Provides-Extra: all
70
+ Requires-Dist: crafter>=1.8.3; extra == "all"
71
+ Requires-Dist: datasets>=4.0.0; extra == "all"
72
+ Dynamic: license-file
73
+
74
+ # Synth-AI
75
+
76
+ [![Python](https://img.shields.io/badge/python-3.11+-blue)](https://www.python.org/)
77
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
78
+ [![PyPI](https://img.shields.io/badge/PyPI-0.2.4.dev9-orange)](https://pypi.org/project/synth-ai/)
79
+ ![Coverage](https://img.shields.io/badge/coverage-0.0%25-red)
80
+ ![Tests](https://img.shields.io/badge/tests-17%2F17%20passing-brightgreen)
81
+
82
+ Docs: [Synth‑AI Documentation](https://docs.usesynth.ai/synth-ai/introduction)
83
+
84
+ Fast and effective reinforcement learning for agents, via an API
85
+
86
+ ## Highlights
87
+
88
+ - Easily scale gpu topologies - train on 3 a10gs or 8 H100s (multi-node available upon request)
89
+ - Requires only a thin fastapi wrapper to integrate with existing agent software.
90
+ - Supports the best OSS models like Qwen3. (gpt-oss available upon request, GA soon)
91
+ - Own your trained models
92
+
93
+ ## Getting Started
94
+
95
+ synth-ai comes with a built-in RL example tailored for training Qwen/Qwen3-0.6B to succeed at Math.
96
+
97
+ 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
+ ```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
104
+ ```
105
+
106
+ To walk through kicking off your first RL run, see the [Synth‑AI Documentation](https://docs.usesynth.ai/synth-ai/introduction).
@@ -0,0 +1,33 @@
1
+ # Synth-AI
2
+
3
+ [![Python](https://img.shields.io/badge/python-3.11+-blue)](https://www.python.org/)
4
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
5
+ [![PyPI](https://img.shields.io/badge/PyPI-0.2.4.dev9-orange)](https://pypi.org/project/synth-ai/)
6
+ ![Coverage](https://img.shields.io/badge/coverage-0.0%25-red)
7
+ ![Tests](https://img.shields.io/badge/tests-17%2F17%20passing-brightgreen)
8
+
9
+ Docs: [Synth‑AI Documentation](https://docs.usesynth.ai/synth-ai/introduction)
10
+
11
+ Fast and effective reinforcement learning for agents, via an API
12
+
13
+ ## Highlights
14
+
15
+ - Easily scale gpu topologies - train on 3 a10gs or 8 H100s (multi-node available upon request)
16
+ - Requires only a thin fastapi wrapper to integrate with existing agent software.
17
+ - Supports the best OSS models like Qwen3. (gpt-oss available upon request, GA soon)
18
+ - Own your trained models
19
+
20
+ ## Getting Started
21
+
22
+ synth-ai comes with a built-in RL example tailored for training Qwen/Qwen3-0.6B to succeed at Math.
23
+
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
+
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
31
+ ```
32
+
33
+ To walk through kicking off your first RL run, see the [Synth‑AI Documentation](https://docs.usesynth.ai/synth-ai/introduction).
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "synth-ai"
3
- version = "0.2.4.dev8"
3
+ version = "0.2.5"
4
4
  description = "Software for aiding the best and multiplying the will - Core AI functionality and tracing"
5
5
  authors = [{name = "Synth AI", email = "josh@usesynth.ai"}]
6
6
  license = "MIT"
@@ -54,10 +54,12 @@ dependencies = [
54
54
  "aiohttp>=3.8.0", # For async HTTP requests in Harmony integration
55
55
  "datasets>=4.0.0",
56
56
  "transformers>=4.56.1",
57
+ "modal>=1.1.4",
57
58
  ]
58
59
 
59
60
  [project.scripts]
60
61
  synth-ai = "synth_ai.cli:cli"
62
+ synth-ai-demo = "synth_ai.demos.core.cli:main"
61
63
 
62
64
  [project.optional-dependencies]
63
65
  dev = [
@@ -107,7 +109,7 @@ exclude = [
107
109
  ]
108
110
 
109
111
  [tool.setuptools]
110
- include-package-data = false
112
+ include-package-data = true
111
113
 
112
114
  [tool.setuptools.exclude-package-data]
113
115
  "synth_ai" = [
@@ -118,6 +120,12 @@ include-package-data = false
118
120
  "**/units/**",
119
121
  ]
120
122
 
123
+ [tool.setuptools.package-data]
124
+ "synth_ai" = [
125
+ "demos/demo_task_apps/math/config.toml",
126
+ "demos/demo_task_apps/math/deploy_task_app.sh",
127
+ ]
128
+
121
129
  [tool.pytest.ini_options]
122
130
  testpaths = ["tests", "private_tests"]
123
131
  python_files = "test_*.py"
@@ -23,7 +23,7 @@ from synth_ai.tracing_v1.abstractions import (
23
23
  from synth_ai.tracing_v1.decorators import trace_event_async, trace_event_sync
24
24
  from synth_ai.tracing_v1.upload import upload
25
25
 
26
- __version__ = "0.2.4.dev8"
26
+ __version__ = "0.2.5"
27
27
  __all__ = [
28
28
  "LM",
29
29
  "tracing",
@@ -69,3 +69,9 @@ try:
69
69
  _demo.register(cli)
70
70
  except Exception:
71
71
  pass
72
+ try:
73
+ from . import rl_demo as _rl_demo
74
+
75
+ _rl_demo.register(cli)
76
+ except Exception:
77
+ pass
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ CLI: interactive launcher for example demos and forwarders for new RL demo.
4
+
5
+ - `synth-ai demo` (no subcommand) -> legacy examples/ runner (run_demo.sh picker)
6
+ - `synth-ai demo deploy|configure|run` -> forwards to synth_ai.demos.core.cli
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import os
12
+ import subprocess
13
+ from pathlib import Path
14
+
15
+ import click
16
+
17
+
18
+ def _find_demo_scripts(root: Path) -> list[Path]:
19
+ if not root.exists():
20
+ return []
21
+ return sorted([p for p in root.rglob("run_demo.sh") if p.is_file()])
22
+
23
+
24
+ def _forward_to_new(args: list[str]) -> None:
25
+ import sys
26
+ try:
27
+ from synth_ai.demos.core import cli as demo_cli # type: ignore
28
+ except Exception as e: # pragma: no cover
29
+ click.echo(f"Failed to import demo CLI: {e}")
30
+ sys.exit(1)
31
+ rc = int(demo_cli.main(args) or 0)
32
+ if rc != 0:
33
+ sys.exit(rc)
34
+
35
+
36
+ def register(cli):
37
+ @cli.group("demo", invoke_without_command=True)
38
+ @click.option("--list", "list_only", is_flag=True, help="List available legacy demos and exit")
39
+ @click.option("-f", "filter_term", default="", help="Filter legacy demos by substring")
40
+ @click.pass_context
41
+ def demo(ctx: click.Context, list_only: bool, filter_term: str):
42
+ """Demo helpers.
43
+
44
+ - Legacy mode (no subcommand): find and run examples/*/run_demo.sh
45
+ - New RL demo subcommands: deploy, configure, run
46
+ """
47
+ if ctx.invoked_subcommand is not None:
48
+ 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
+
60
+ if list_only:
61
+ click.echo("Available demos:")
62
+ for p in demos:
63
+ click.echo(f" - {p.relative_to(repo_root)}")
64
+ return
65
+
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("")
70
+
71
+ def _validate_choice(val: str) -> int:
72
+ 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")
92
+
93
+ # (prepare command removed; configure now prepares baseline TOML)
94
+
95
+ @demo.command("deploy")
96
+ @click.option("--local", is_flag=True, help="Run local FastAPI instead of Modal deploy")
97
+ @click.option("--app", type=click.Path(), default=None, help="Path to Modal app.py for uv run modal deploy")
98
+ @click.option("--name", type=str, default="synth-math-demo", help="Modal app name")
99
+ @click.option("--script", type=click.Path(), default=None, help="Path to deploy_task_app.sh (optional legacy)")
100
+ def demo_deploy(local: bool, app: str | None, name: str, script: str | None):
101
+ args: list[str] = ["rl_demo.deploy"]
102
+ if local:
103
+ args.append("--local")
104
+ if app:
105
+ args.extend(["--app", app])
106
+ if name:
107
+ args.extend(["--name", name])
108
+ if script:
109
+ args.extend(["--script", script])
110
+ _forward_to_new(args)
111
+
112
+ @demo.command("configure")
113
+ def demo_configure():
114
+ _forward_to_new(["rl_demo.configure"])
115
+
116
+ @demo.command("run")
117
+ @click.option("--batch-size", type=int, default=None)
118
+ @click.option("--group-size", type=int, default=None)
119
+ @click.option("--model", type=str, default=None)
120
+ @click.option("--timeout", type=int, default=600)
121
+ def demo_run(batch_size: int | None, group_size: int | None, model: str | None, timeout: int):
122
+ args = ["rl_demo.run"]
123
+ if batch_size is not None:
124
+ args.extend(["--batch-size", str(batch_size)])
125
+ if group_size is not None:
126
+ args.extend(["--group-size", str(group_size)])
127
+ if model:
128
+ args.extend(["--model", model])
129
+ if timeout:
130
+ args.extend(["--timeout", str(timeout)])
131
+ _forward_to_new(args)
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ New RL demo command group kept fully separate from legacy demo.
4
+
5
+ Usage examples:
6
+ uvx synth-ai rl_demo check
7
+ uvx synth-ai rl_demo deploy --app /path/to/math_task_app.py --name synth-math-demo
8
+ uvx synth-ai rl_demo configure
9
+ uvx synth-ai rl_demo run --batch-size 4 --group-size 16 --model Qwen/Qwen3-0.6B
10
+
11
+ For convenience, dotted aliases are also exposed:
12
+ uvx synth-ai rl_demo.check
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import click
18
+
19
+
20
+ def _forward(args: list[str]) -> None:
21
+ import sys
22
+ try:
23
+ from synth_ai.demos.core import cli as demo_cli # type: ignore
24
+ except Exception as e: # pragma: no cover
25
+ click.echo(f"Failed to import RL demo CLI: {e}")
26
+ sys.exit(1)
27
+ rc = int(demo_cli.main(args) or 0)
28
+ if rc != 0:
29
+ sys.exit(rc)
30
+
31
+
32
+ def register(cli):
33
+ @cli.group("rl_demo")
34
+ def rl_demo():
35
+ """RL Demo commands (separate from legacy demo)."""
36
+
37
+ @rl_demo.command("check")
38
+ def rl_check():
39
+ _forward(["rl_demo.check"]) # reuse same implementation
40
+
41
+ # (prepare command removed; consolidated into configure)
42
+
43
+ @rl_demo.command("deploy")
44
+ @click.option("--local", is_flag=True, help="Run local FastAPI instead of Modal deploy")
45
+ @click.option("--app", type=click.Path(), default=None, help="Path to Modal app.py for uv run modal deploy")
46
+ @click.option("--name", type=str, default="synth-math-demo", help="Modal app name")
47
+ @click.option("--script", type=click.Path(), default=None, help="Path to deploy_task_app.sh (optional legacy)")
48
+ def rl_deploy(local: bool, app: str | None, name: str, script: str | None):
49
+ args: list[str] = ["rl_demo.deploy"]
50
+ if local:
51
+ args.append("--local")
52
+ if app:
53
+ args.extend(["--app", app])
54
+ if name:
55
+ args.extend(["--name", name])
56
+ if script:
57
+ args.extend(["--script", script])
58
+ _forward(args)
59
+
60
+ @rl_demo.command("configure")
61
+ def rl_configure():
62
+ _forward(["rl_demo.configure"])
63
+
64
+ @rl_demo.command("run")
65
+ @click.option("--config", type=click.Path(), default=None, help="Path to TOML config (skip prompt)")
66
+ @click.option("--batch-size", type=int, default=None)
67
+ @click.option("--group-size", type=int, default=None)
68
+ @click.option("--model", type=str, default=None)
69
+ @click.option("--timeout", type=int, default=600)
70
+ @click.option("--dry-run", is_flag=True, help="Print request body and exit")
71
+ def rl_run(config: str | None, batch_size: int | None, group_size: int | None, model: str | None, timeout: int, dry_run: bool):
72
+ args = ["rl_demo.run"]
73
+ if config:
74
+ args.extend(["--config", config])
75
+ if batch_size is not None:
76
+ args.extend(["--batch-size", str(batch_size)])
77
+ if group_size is not None:
78
+ args.extend(["--group-size", str(group_size)])
79
+ if model:
80
+ args.extend(["--model", model])
81
+ if timeout is not None:
82
+ args.extend(["--timeout", str(timeout)])
83
+ if dry_run:
84
+ args.append("--dry-run")
85
+ _forward(args)
86
+
87
+ # Dotted aliases (top-level) for convenience: rl_demo.check etc.
88
+ @cli.command("rl_demo.check")
89
+ def rl_check_alias():
90
+ _forward(["rl_demo.check"])
91
+
92
+ # (prepare alias removed)
93
+
94
+ @cli.command("rl_demo.deploy")
95
+ @click.option("--local", is_flag=True, help="Run local FastAPI instead of Modal deploy")
96
+ @click.option("--app", type=click.Path(), default=None, help="Path to Modal app.py for uv run modal deploy")
97
+ @click.option("--name", type=str, default="synth-math-demo", help="Modal app name")
98
+ @click.option("--script", type=click.Path(), default=None, help="Path to deploy_task_app.sh (optional legacy)")
99
+ def rl_deploy_alias(local: bool, app: str | None, name: str, script: str | None):
100
+ args: list[str] = ["rl_demo.deploy"]
101
+ if local:
102
+ args.append("--local")
103
+ if app:
104
+ args.extend(["--app", app])
105
+ if name:
106
+ args.extend(["--name", name])
107
+ if script:
108
+ args.extend(["--script", script])
109
+ _forward(args)
110
+
111
+ @cli.command("rl_demo.configure")
112
+ def rl_configure_alias():
113
+ _forward(["rl_demo.configure"])
114
+
115
+ @cli.command("rl_demo.run")
116
+ @click.option("--config", type=click.Path(), default=None, help="Path to TOML config (skip prompt)")
117
+ @click.option("--batch-size", type=int, default=None)
118
+ @click.option("--group-size", type=int, default=None)
119
+ @click.option("--model", type=str, default=None)
120
+ @click.option("--timeout", type=int, default=600)
121
+ @click.option("--dry-run", is_flag=True, help="Print request body and exit")
122
+ def rl_run_alias(config: str | None, batch_size: int | None, group_size: int | None, model: str | None, timeout: int, dry_run: bool):
123
+ args = ["rl_demo.run"]
124
+ if config:
125
+ args.extend(["--config", config])
126
+ if batch_size is not None:
127
+ args.extend(["--batch-size", str(batch_size)])
128
+ if group_size is not None:
129
+ args.extend(["--group-size", str(group_size)])
130
+ if model:
131
+ args.extend(["--model", model])
132
+ if timeout is not None:
133
+ args.extend(["--timeout", str(timeout)])
134
+ if dry_run:
135
+ args.append("--dry-run")
136
+ _forward(args)
137
+
@@ -71,6 +71,71 @@ def cli():
71
71
  """Synth AI - Software for aiding the best and multiplying the will."""
72
72
 
73
73
 
74
+ # === Legacy demo command group (aliases new rl_demo implementation) ===
75
+ @cli.group()
76
+ def demo():
77
+ """Demo helpers (deploy, configure, run)."""
78
+
79
+
80
+ def _forward_to_demo(args: list[str]) -> None:
81
+ # Lazy import to avoid loading demo deps unless needed
82
+ try:
83
+ from synth_ai.demos.core import cli as demo_cli # type: ignore
84
+ except Exception as e: # pragma: no cover
85
+ click.echo(f"Failed to import demo CLI: {e}")
86
+ sys.exit(1)
87
+ rc = int(demo_cli.main(args) or 0)
88
+ if rc != 0:
89
+ sys.exit(rc)
90
+
91
+
92
+ # (prepare command removed; handled by configure)
93
+
94
+
95
+ @demo.command()
96
+ @click.option("--local", is_flag=True, help="Run local FastAPI instead of Modal deploy")
97
+ @click.option("--app", type=click.Path(), default=None, help="Path to Modal app.py for uv run modal deploy")
98
+ @click.option("--name", type=str, default="synth-math-demo", help="Modal app name")
99
+ @click.option("--script", type=click.Path(), default=None, help="Path to deploy_task_app.sh (optional legacy)")
100
+ def deploy(local: bool, app: str | None, name: str, script: str | None):
101
+ """Deploy the Math Task App (Modal by default)."""
102
+ args: list[str] = ["rl_demo.deploy"]
103
+ if local:
104
+ args.append("--local")
105
+ if app:
106
+ args.extend(["--app", app])
107
+ if name:
108
+ args.extend(["--name", name])
109
+ if script:
110
+ args.extend(["--script", script])
111
+ _forward_to_demo(args)
112
+
113
+
114
+ @demo.command()
115
+ def configure():
116
+ """Print resolved environment and config path."""
117
+ _forward_to_demo(["rl_demo.configure"])
118
+
119
+
120
+ @demo.command()
121
+ @click.option("--batch-size", type=int, default=None)
122
+ @click.option("--group-size", type=int, default=None)
123
+ @click.option("--model", type=str, default=None)
124
+ @click.option("--timeout", type=int, default=600)
125
+ def run(batch_size: int | None, group_size: int | None, model: str | None, timeout: int):
126
+ """Kick off a short RL job using the prepared TOML."""
127
+ args = ["rl_demo.run"]
128
+ if batch_size is not None:
129
+ args.extend(["--batch-size", str(batch_size)])
130
+ if group_size is not None:
131
+ args.extend(["--group-size", str(group_size)])
132
+ if model:
133
+ args.extend(["--model", model])
134
+ if timeout:
135
+ args.extend(["--timeout", str(timeout)])
136
+ _forward_to_demo(args)
137
+
138
+
74
139
  @cli.command()
75
140
  @click.option("--db-file", default="traces/v3/synth_ai.db", help="Database file path")
76
141
  @click.option("--sqld-port", default=8080, type=int, help="Port for sqld HTTP interface")
@@ -0,0 +1 @@
1
+ # Core demo CLI and helpers package