synth-ai 0.2.9.dev7__py3-none-any.whl → 0.2.9.dev9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (327) hide show
  1. examples/__init__.py +16 -0
  2. examples/crafter_debug_render.py +8 -11
  3. examples/qwen_coder/README.md +102 -0
  4. examples/qwen_coder/_shared.py +113 -0
  5. examples/qwen_coder/configs/coder_lora_30b.toml +61 -0
  6. examples/qwen_coder/configs/coder_lora_4b.toml +57 -0
  7. examples/qwen_coder/configs/coder_lora_small.toml +58 -0
  8. examples/qwen_coder/generate_dataset.py +98 -0
  9. examples/qwen_coder/infer_ft_smoke.py +64 -0
  10. examples/qwen_coder/infer_prod_proxy.py +73 -0
  11. examples/qwen_coder/infer_via_synth.py +87 -0
  12. examples/qwen_coder/scripts/infer_coder.sh +18 -0
  13. examples/qwen_coder/scripts/train_coder_30b.sh +21 -0
  14. examples/qwen_coder/sft_full_17b.py +103 -0
  15. examples/qwen_coder/sft_lora_30b.py +110 -0
  16. examples/qwen_coder/subset_jsonl.py +38 -0
  17. examples/qwen_coder/validate_jsonl.py +59 -0
  18. examples/rl/run_eval.py +36 -37
  19. examples/rl/run_rl_and_save.py +5 -5
  20. examples/rl/task_app/math_single_step.py +65 -43
  21. examples/rl/task_app/math_task_app.py +3 -3
  22. examples/sft/README.md +139 -0
  23. examples/sft/configs/crafter_fft_qwen0p6b.toml +44 -0
  24. examples/sft/configs/crafter_lora_qwen0p6b.toml +45 -0
  25. examples/sft/evaluate.py +117 -0
  26. examples/sft/export_dataset.py +117 -0
  27. examples/sft/generate_traces.py +162 -0
  28. examples/swe/__init__.py +12 -0
  29. examples/swe/task_app/README.md +105 -0
  30. examples/swe/task_app/__init__.py +2 -0
  31. examples/swe/task_app/grpo_swe_mini.py +571 -0
  32. examples/swe/task_app/grpo_swe_mini_task_app.py +136 -0
  33. examples/swe/task_app/hosted/README.md +173 -0
  34. examples/swe/task_app/hosted/__init__.py +5 -0
  35. examples/swe/task_app/hosted/branching.py +143 -0
  36. examples/swe/task_app/hosted/environment_routes.py +1289 -0
  37. examples/swe/task_app/hosted/envs/__init__.py +1 -0
  38. examples/swe/task_app/hosted/envs/crafter/__init__.py +6 -0
  39. examples/swe/task_app/hosted/envs/crafter/app.py +1 -0
  40. examples/swe/task_app/hosted/envs/crafter/environment.py +522 -0
  41. examples/swe/task_app/hosted/envs/crafter/policy.py +478 -0
  42. examples/swe/task_app/hosted/envs/crafter/react_agent.py +108 -0
  43. examples/swe/task_app/hosted/envs/crafter/shared.py +305 -0
  44. examples/swe/task_app/hosted/envs/crafter/tools.py +47 -0
  45. examples/swe/task_app/hosted/envs/mini_swe/__init__.py +8 -0
  46. examples/swe/task_app/hosted/envs/mini_swe/environment.py +1164 -0
  47. examples/swe/task_app/hosted/envs/mini_swe/policy.py +355 -0
  48. examples/swe/task_app/hosted/envs/mini_swe/shared.py +83 -0
  49. examples/swe/task_app/hosted/envs/mini_swe/tools.py +96 -0
  50. examples/swe/task_app/hosted/hosted_app.py +204 -0
  51. examples/swe/task_app/hosted/inference/__init__.py +5 -0
  52. examples/swe/task_app/hosted/inference/openai_client.py +618 -0
  53. examples/swe/task_app/hosted/main.py +100 -0
  54. examples/swe/task_app/hosted/policy_routes.py +1079 -0
  55. examples/swe/task_app/hosted/registry.py +195 -0
  56. examples/swe/task_app/hosted/rollout.py +1869 -0
  57. examples/swe/task_app/hosted/storage/__init__.py +5 -0
  58. examples/swe/task_app/hosted/storage/volume.py +211 -0
  59. examples/swe/task_app/hosted/test_agents.py +161 -0
  60. examples/swe/task_app/hosted/test_service.py +137 -0
  61. examples/swe/task_app/hosted/utils.py +62 -0
  62. examples/vlm/README.md +68 -0
  63. examples/vlm/configs/crafter_vlm_gpt4o.toml +44 -0
  64. examples/vlm/crafter_image_only_agent.py +207 -0
  65. examples/vlm/crafter_openai_vlm_agent.py +277 -0
  66. examples/vlm/filter_image_rows.py +63 -0
  67. examples/vlm/run_crafter_vlm_benchmark.py +316 -0
  68. examples/warming_up_to_rl/analyze_trace_db.py +5 -5
  69. examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml +11 -1
  70. examples/warming_up_to_rl/export_trace_sft.py +78 -21
  71. examples/warming_up_to_rl/groq_test.py +4 -4
  72. examples/warming_up_to_rl/manage_secrets.py +13 -18
  73. examples/warming_up_to_rl/run_eval.py +42 -44
  74. examples/warming_up_to_rl/run_fft_and_save.py +11 -16
  75. examples/warming_up_to_rl/run_local_rollout.py +1 -3
  76. examples/warming_up_to_rl/run_local_rollout_modal.py +2 -4
  77. examples/warming_up_to_rl/run_local_rollout_parallel.py +1 -4
  78. examples/warming_up_to_rl/run_local_rollout_traced.py +3 -5
  79. examples/warming_up_to_rl/run_rl_and_save.py +5 -6
  80. examples/warming_up_to_rl/run_rollout_remote.py +8 -10
  81. examples/warming_up_to_rl/task_app/README.md +6 -2
  82. examples/warming_up_to_rl/task_app/grpo_crafter.py +234 -35
  83. examples/warming_up_to_rl/task_app/grpo_crafter_task_app.py +2 -3
  84. examples/warming_up_to_rl/task_app/synth_envs_hosted/__init__.py +1 -1
  85. examples/warming_up_to_rl/task_app/synth_envs_hosted/branching.py +9 -11
  86. examples/warming_up_to_rl/task_app/synth_envs_hosted/environment_routes.py +131 -114
  87. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/environment.py +101 -41
  88. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/policy.py +73 -51
  89. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/react_agent.py +14 -6
  90. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/shared.py +16 -16
  91. examples/warming_up_to_rl/task_app/synth_envs_hosted/hosted_app.py +32 -34
  92. examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py +94 -31
  93. examples/warming_up_to_rl/task_app/synth_envs_hosted/main.py +0 -2
  94. examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py +303 -203
  95. examples/warming_up_to_rl/task_app/synth_envs_hosted/registry.py +21 -23
  96. examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py +328 -225
  97. examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/volume.py +13 -13
  98. examples/warming_up_to_rl/task_app/synth_envs_hosted/test_agents.py +1 -0
  99. examples/warming_up_to_rl/task_app/synth_envs_hosted/test_service.py +1 -0
  100. examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py +4 -3
  101. synth/__init__.py +14 -0
  102. synth_ai/__init__.py +26 -4
  103. synth_ai/api/models/supported.py +376 -0
  104. synth_ai/api/train/builders.py +128 -21
  105. synth_ai/api/train/cli.py +80 -64
  106. synth_ai/api/train/config_finder.py +7 -2
  107. synth_ai/api/train/env_resolver.py +1 -1
  108. synth_ai/api/train/pollers.py +2 -1
  109. synth_ai/api/train/supported_algos.py +139 -0
  110. synth_ai/api/train/task_app.py +1 -2
  111. synth_ai/api/train/utils.py +13 -44
  112. synth_ai/cli/__init__.py +8 -0
  113. synth_ai/cli/_modal_wrapper.py +28 -0
  114. synth_ai/cli/_typer_patch.py +49 -0
  115. synth_ai/cli/balance.py +1 -2
  116. synth_ai/cli/calc.py +1 -1
  117. synth_ai/cli/demo.py +2 -1
  118. synth_ai/cli/recent.py +2 -2
  119. synth_ai/cli/rl_demo.py +2 -1
  120. synth_ai/cli/root.py +11 -13
  121. synth_ai/cli/status.py +2 -2
  122. synth_ai/cli/task_apps.py +529 -179
  123. synth_ai/cli/traces.py +6 -4
  124. synth_ai/cli/watch.py +12 -18
  125. synth_ai/demo_registry.py +1 -1
  126. synth_ai/demos/core/cli.py +36 -43
  127. synth_ai/demos/demo_task_apps/__init__.py +3 -3
  128. synth_ai/demos/demo_task_apps/core.py +17 -25
  129. synth_ai/demos/demo_task_apps/crafter/grpo_crafter_task_app.py +3 -4
  130. synth_ai/demos/demo_task_apps/math/app.py +2 -1
  131. synth_ai/demos/demo_task_apps/math/deploy_modal.py +3 -4
  132. synth_ai/demos/demo_task_apps/math/modal_task_app.py +16 -18
  133. synth_ai/demos/demo_task_apps/math/task_app_entry.py +0 -1
  134. synth_ai/environments/examples/crafter_classic/environment.py +76 -1
  135. synth_ai/environments/reproducibility/tree.py +2 -5
  136. synth_ai/environments/service/app.py +11 -12
  137. synth_ai/environments/service/core_routes.py +4 -7
  138. synth_ai/environments/stateful/engine.py +1 -1
  139. synth_ai/environments/tasks/core.py +1 -0
  140. synth_ai/environments/tasks/filters.py +5 -6
  141. synth_ai/environments/tasks/utils.py +4 -5
  142. synth_ai/handshake.py +9 -9
  143. synth_ai/http.py +1 -1
  144. synth_ai/http_client.py +18 -10
  145. synth_ai/inference/client.py +15 -5
  146. synth_ai/jobs/client.py +78 -83
  147. synth_ai/learning/__init__.py +41 -6
  148. synth_ai/learning/algorithms.py +14 -0
  149. synth_ai/learning/client.py +91 -24
  150. synth_ai/learning/config.py +2 -38
  151. synth_ai/learning/ft_client.py +4 -59
  152. synth_ai/learning/health.py +5 -6
  153. synth_ai/learning/jobs.py +31 -47
  154. synth_ai/{rl → learning/rl}/__init__.py +14 -4
  155. synth_ai/learning/rl/client.py +267 -0
  156. synth_ai/learning/rl/config.py +31 -0
  157. synth_ai/{rl → learning/rl}/contracts.py +5 -8
  158. synth_ai/{rl → learning/rl}/env_keys.py +39 -15
  159. synth_ai/learning/rl/secrets.py +13 -0
  160. synth_ai/learning/rl_client.py +2 -281
  161. synth_ai/learning/sft/__init__.py +29 -0
  162. synth_ai/learning/sft/client.py +68 -0
  163. synth_ai/learning/sft/config.py +270 -0
  164. synth_ai/learning/sft/data.py +295 -0
  165. synth_ai/learning/sse.py +25 -24
  166. synth_ai/learning/validators.py +25 -28
  167. synth_ai/lm/__init__.py +21 -47
  168. synth_ai/main.py +6 -0
  169. synth_ai/task/__init__.py +25 -27
  170. synth_ai/task/apps/__init__.py +7 -8
  171. synth_ai/task/auth.py +8 -8
  172. synth_ai/task/client.py +14 -14
  173. synth_ai/task/contracts.py +36 -35
  174. synth_ai/task/datasets.py +6 -5
  175. synth_ai/task/errors.py +10 -10
  176. synth_ai/task/health.py +17 -9
  177. synth_ai/task/json.py +58 -23
  178. synth_ai/task/proxy.py +13 -9
  179. synth_ai/task/rubrics.py +16 -15
  180. synth_ai/task/server.py +12 -12
  181. synth_ai/task/tracing_utils.py +4 -4
  182. synth_ai/task/vendors.py +5 -6
  183. synth_ai/tracing_v3/__init__.py +2 -0
  184. synth_ai/tracing_v3/abstractions.py +21 -4
  185. synth_ai/tracing_v3/decorators.py +18 -16
  186. synth_ai/tracing_v3/hooks.py +5 -5
  187. synth_ai/tracing_v3/llm_call_record_helpers.py +6 -6
  188. synth_ai/tracing_v3/session_tracer.py +40 -14
  189. synth_ai/tracing_v3/storage/base.py +85 -0
  190. synth_ai/tracing_v3/storage/config.py +21 -8
  191. synth_ai/tracing_v3/storage/factory.py +10 -7
  192. synth_ai/tracing_v3/storage/utils.py +4 -2
  193. synth_ai/tracing_v3/turso/daemon.py +7 -2
  194. synth_ai/tracing_v3/turso/models.py +2 -2
  195. synth_ai/tracing_v3/turso/native_manager.py +1173 -0
  196. synth_ai/tracing_v3/utils.py +4 -4
  197. synth_ai/v0/api/__init__.py +8 -0
  198. synth_ai/v0/api/models/__init__.py +8 -0
  199. synth_ai/v0/api/models/supported.py +8 -0
  200. synth_ai/v0/config/__init__.py +15 -0
  201. synth_ai/v0/config/base_url.py +12 -0
  202. synth_ai/v0/lm/__init__.py +51 -0
  203. synth_ai/{lm → v0/lm}/caching/ephemeral.py +2 -2
  204. synth_ai/{lm → v0/lm}/caching/handler.py +4 -4
  205. synth_ai/{lm → v0/lm}/caching/initialize.py +1 -1
  206. synth_ai/{lm → v0/lm}/caching/persistent.py +1 -1
  207. synth_ai/{lm → v0/lm}/config.py +6 -1
  208. synth_ai/{lm → v0/lm}/core/all.py +9 -9
  209. synth_ai/{lm → v0/lm}/core/main.py +6 -6
  210. synth_ai/{lm → v0/lm}/core/main_v3.py +10 -10
  211. synth_ai/{lm → v0/lm}/core/synth_models.py +2 -14
  212. synth_ai/{lm → v0/lm}/core/vendor_clients.py +2 -2
  213. synth_ai/{lm → v0/lm}/overrides.py +2 -2
  214. synth_ai/{lm → v0/lm}/provider_support/anthropic.py +4 -4
  215. synth_ai/{lm → v0/lm}/provider_support/openai.py +5 -5
  216. synth_ai/{lm → v0/lm}/structured_outputs/handler.py +5 -5
  217. synth_ai/{lm → v0/lm}/structured_outputs/rehabilitate.py +1 -1
  218. synth_ai/{lm → v0/lm}/vendors/core/anthropic_api.py +9 -9
  219. synth_ai/{lm → v0/lm}/vendors/core/gemini_api.py +5 -5
  220. synth_ai/{lm → v0/lm}/vendors/core/mistral_api.py +5 -5
  221. synth_ai/{lm → v0/lm}/vendors/core/openai_api.py +10 -10
  222. synth_ai/{lm → v0/lm}/vendors/openai_standard.py +8 -8
  223. synth_ai/{lm → v0/lm}/vendors/openai_standard_responses.py +2 -2
  224. synth_ai/{lm → v0/lm}/vendors/supported/custom_endpoint.py +3 -3
  225. synth_ai/{lm → v0/lm}/vendors/supported/deepseek.py +2 -2
  226. synth_ai/{lm → v0/lm}/vendors/supported/grok.py +2 -2
  227. synth_ai/{lm → v0/lm}/vendors/supported/groq.py +1 -1
  228. synth_ai/{lm → v0/lm}/vendors/supported/ollama.py +1 -1
  229. synth_ai/{lm → v0/lm}/vendors/supported/openrouter.py +3 -3
  230. synth_ai/{lm → v0/lm}/vendors/supported/together.py +1 -1
  231. synth_ai/{lm → v0/lm}/vendors/synth_client.py +1 -1
  232. synth_ai/v0/tracing_v3/__init__.py +10 -0
  233. synth_ai/v0/tracing_v3/abstractions.py +3 -0
  234. synth_ai/v0/tracing_v3/decorators.py +3 -0
  235. synth_ai/v0/tracing_v3/llm_call_record_helpers.py +3 -0
  236. synth_ai/v0/tracing_v3/session_tracer.py +3 -0
  237. synth_ai-0.2.9.dev9.dist-info/METADATA +191 -0
  238. {synth_ai-0.2.9.dev7.dist-info → synth_ai-0.2.9.dev9.dist-info}/RECORD +268 -238
  239. {synth_ai-0.2.9.dev7.dist-info → synth_ai-0.2.9.dev9.dist-info}/top_level.txt +1 -0
  240. examples/common_old/backend.py +0 -20
  241. examples/evals_old/README.md +0 -98
  242. examples/evals_old/__init__.py +0 -6
  243. examples/evals_old/compare_models.py +0 -1038
  244. examples/evals_old/example_log.md +0 -145
  245. examples/evals_old/run_demo.sh +0 -126
  246. examples/evals_old/trace_analysis.py +0 -270
  247. examples/finetuning_old/_backup_synth_qwen/config.toml +0 -29
  248. examples/finetuning_old/_backup_synth_qwen/example_log.md +0 -324
  249. examples/finetuning_old/_backup_synth_qwen/filter_traces.py +0 -60
  250. examples/finetuning_old/_backup_synth_qwen/filter_traces_achievements.py +0 -243
  251. examples/finetuning_old/_backup_synth_qwen/purge_v3_traces.py +0 -109
  252. examples/finetuning_old/_backup_synth_qwen/react_agent_lm.py +0 -1924
  253. examples/finetuning_old/_backup_synth_qwen/readme.md +0 -49
  254. examples/finetuning_old/_backup_synth_qwen/run_crafter_qwen4b.py +0 -114
  255. examples/finetuning_old/_backup_synth_qwen/run_demo.sh +0 -195
  256. examples/finetuning_old/_backup_synth_qwen/sft_kickoff.py +0 -119
  257. examples/finetuning_old/synth_qwen_v1/README.md +0 -68
  258. examples/finetuning_old/synth_qwen_v1/filter_traces.py +0 -60
  259. examples/finetuning_old/synth_qwen_v1/filter_traces_achievements.py +0 -243
  260. examples/finetuning_old/synth_qwen_v1/finetune.py +0 -46
  261. examples/finetuning_old/synth_qwen_v1/hello_ft_model.py +0 -71
  262. examples/finetuning_old/synth_qwen_v1/infer.py +0 -36
  263. examples/finetuning_old/synth_qwen_v1/poll.py +0 -46
  264. examples/finetuning_old/synth_qwen_v1/prepare_data.py +0 -35
  265. examples/finetuning_old/synth_qwen_v1/purge_v3_traces.py +0 -109
  266. examples/finetuning_old/synth_qwen_v1/react_agent_lm.py +0 -1933
  267. examples/finetuning_old/synth_qwen_v1/run_crafter_sft_job.py +0 -210
  268. examples/finetuning_old/synth_qwen_v1/run_ft_job.py +0 -237
  269. examples/finetuning_old/synth_qwen_v1/upload_data.py +0 -34
  270. examples/finetuning_old/synth_qwen_v1/util.py +0 -152
  271. examples/rl_old/task_app.py +0 -1131
  272. examples/warming_up_to_rl/old/event_rewards.md +0 -234
  273. examples/warming_up_to_rl/old/notes.md +0 -73
  274. synth_ai/environments/examples/crafter_classic/agent_demos/crafter_modal_ft/filter_traces_sft_turso.py +0 -738
  275. synth_ai/environments/examples/crafter_classic/agent_demos/crafter_openai_ft/filter_traces_sft_turso.py +0 -580
  276. synth_ai/experimental/synth_oss.py +0 -445
  277. synth_ai/learning/filtering.py +0 -0
  278. synth_ai/learning/offline/dpo.py +0 -0
  279. synth_ai/learning/offline/providers.py +0 -7
  280. synth_ai/learning/offline/sft.py +0 -0
  281. synth_ai/learning/offline/shared.py +0 -0
  282. synth_ai/learning/online/grpo.py +0 -0
  283. synth_ai/learning/online/irft.py +0 -0
  284. synth_ai/learning/prompts/banking77_injection_eval.py +0 -168
  285. synth_ai/learning/prompts/gepa.py +0 -0
  286. synth_ai/learning/prompts/hello_world_in_context_injection_ex.py +0 -211
  287. synth_ai/learning/prompts/mipro.py +0 -289
  288. synth_ai/learning/prompts/random_search.py +0 -249
  289. synth_ai/learning/prompts/run_mipro_banking77.py +0 -172
  290. synth_ai/learning/prompts/run_random_search_banking77.py +0 -329
  291. synth_ai/rl/secrets.py +0 -19
  292. synth_ai/scripts/verify_rewards.py +0 -100
  293. synth_ai/tracing/__init__.py +0 -30
  294. synth_ai/tracing_v1/__init__.py +0 -33
  295. synth_ai/tracing_v3/turso/__init__.py +0 -25
  296. synth_ai/tracing_v3/turso/manager.py +0 -838
  297. synth_ai/zyk/__init__.py +0 -30
  298. synth_ai-0.2.9.dev7.dist-info/METADATA +0 -131
  299. /synth_ai/{lm → v0/lm}/caching/__init__.py +0 -0
  300. /synth_ai/{lm → v0/lm}/caching/constants.py +0 -0
  301. /synth_ai/{lm → v0/lm}/caching/dbs.py +0 -0
  302. /synth_ai/{lm → v0/lm}/constants.py +0 -0
  303. /synth_ai/{lm → v0/lm}/core/__init__.py +0 -0
  304. /synth_ai/{lm → v0/lm}/core/exceptions.py +0 -0
  305. /synth_ai/{lm → v0/lm}/cost/__init__.py +0 -0
  306. /synth_ai/{lm → v0/lm}/cost/monitor.py +0 -0
  307. /synth_ai/{lm → v0/lm}/cost/statefulness.py +0 -0
  308. /synth_ai/{lm → v0/lm}/injection.py +0 -0
  309. /synth_ai/{lm → v0/lm}/provider_support/__init__.py +0 -0
  310. /synth_ai/{lm → v0/lm}/provider_support/suppress_logging.py +0 -0
  311. /synth_ai/{lm → v0/lm}/structured_outputs/__init__.py +0 -0
  312. /synth_ai/{lm → v0/lm}/structured_outputs/inject.py +0 -0
  313. /synth_ai/{lm → v0/lm}/tools/__init__.py +0 -0
  314. /synth_ai/{lm → v0/lm}/tools/base.py +0 -0
  315. /synth_ai/{lm → v0/lm}/unified_interface.py +0 -0
  316. /synth_ai/{lm → v0/lm}/vendors/__init__.py +0 -0
  317. /synth_ai/{lm → v0/lm}/vendors/base.py +0 -0
  318. /synth_ai/{lm → v0/lm}/vendors/core/__init__.py +0 -0
  319. /synth_ai/{lm → v0/lm}/vendors/core/synth_dev_api.py +0 -0
  320. /synth_ai/{lm → v0/lm}/vendors/local/__init__.py +0 -0
  321. /synth_ai/{lm → v0/lm}/vendors/local/ollama.py +0 -0
  322. /synth_ai/{lm → v0/lm}/vendors/retries.py +0 -0
  323. /synth_ai/{lm → v0/lm}/vendors/supported/__init__.py +0 -0
  324. /synth_ai/{lm → v0/lm}/warmup.py +0 -0
  325. {synth_ai-0.2.9.dev7.dist-info → synth_ai-0.2.9.dev9.dist-info}/WHEEL +0 -0
  326. {synth_ai-0.2.9.dev7.dist-info → synth_ai-0.2.9.dev9.dist-info}/entry_points.txt +0 -0
  327. {synth_ai-0.2.9.dev7.dist-info → synth_ai-0.2.9.dev9.dist-info}/licenses/LICENSE +0 -0
@@ -1,17 +1,17 @@
1
- from __future__ import annotations
2
-
3
1
  """Utility functions for tracing v3."""
4
2
 
3
+ from __future__ import annotations
4
+
5
5
  import hashlib
6
6
  import json
7
7
  import uuid
8
- from datetime import datetime
8
+ from datetime import UTC, datetime
9
9
  from typing import Any
10
10
 
11
11
 
12
12
  def iso_now() -> str:
13
13
  """Get current UTC time as ISO format string."""
14
- return datetime.utcnow().isoformat()
14
+ return datetime.now(UTC).isoformat()
15
15
 
16
16
 
17
17
  def json_dumps(obj: Any) -> str:
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ # Legacy shim package to preserve old import paths like `synth_ai.v0.api.*`.
4
+ # New code should import from `synth_ai.api.*` directly.
5
+
6
+ __all__: list[str] = []
7
+
8
+
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ try:
4
+ from synth_ai.api.models.supported import * # type: ignore # re-export
5
+ except Exception: # pragma: no cover
6
+ pass
7
+
8
+
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ # Backward-compat shim: old path `synth_ai.v0.api.models.supported`
4
+ # now maps to the canonical module `synth_ai.api.models.supported`.
5
+
6
+ from synth_ai.api.models.supported import * # type: ignore[F401,F403]
7
+
8
+
@@ -0,0 +1,15 @@
1
+ from __future__ import annotations
2
+
3
+ # Compatibility package to mirror historical import paths.
4
+ # Re-export constants from the modern location under synth_ai.config.
5
+
6
+ try:
7
+ from synth_ai.config.base_url import PROD_BASE_URL_DEFAULT as _PROD
8
+ except Exception: # pragma: no cover
9
+ _PROD = None
10
+
11
+ __all__ = [
12
+ "_PROD",
13
+ ]
14
+
15
+
@@ -0,0 +1,12 @@
1
+ from __future__ import annotations
2
+
3
+ try:
4
+ # Prefer the modern constant
5
+ from synth_ai.config.base_url import PROD_BASE_URL_DEFAULT as PROD_BASE_URL_DEFAULT # type: ignore
6
+ except Exception: # pragma: no cover
7
+ # Fallback if the modern module moves; provide a safe default
8
+ PROD_BASE_URL_DEFAULT = "https://agent-learning.onrender.com"
9
+
10
+ __all__ = ["PROD_BASE_URL_DEFAULT"]
11
+
12
+
@@ -0,0 +1,51 @@
1
+ """Synth AI Language Model Interface (legacy)."""
2
+
3
+ import sys as _sys
4
+
5
+ _sys.modules.setdefault("synth_ai.v0.lm", _sys.modules.get(__name__))
6
+
7
+ from .config import OpenAIConfig, SynthConfig
8
+ from .core.main_v3 import LM
9
+ from .unified_interface import (
10
+ OpenAIProvider,
11
+ SynthProvider,
12
+ UnifiedLMClient,
13
+ UnifiedLMProvider,
14
+ create_provider,
15
+ )
16
+ from .vendors.synth_client import (
17
+ AsyncSynthClient,
18
+ SyncSynthClient,
19
+ create_async_client,
20
+ create_chat_completion_async,
21
+ create_chat_completion_sync,
22
+ create_sync_client,
23
+ )
24
+ from .warmup import get_warmup_status, warmup_synth_model
25
+
26
+ __all__ = [
27
+ # Configuration
28
+ "SynthConfig",
29
+ "OpenAIConfig",
30
+ # Warmup utilities
31
+ "warmup_synth_model",
32
+ "get_warmup_status",
33
+ # Unified interface
34
+ "UnifiedLMProvider",
35
+ "OpenAIProvider",
36
+ "SynthProvider",
37
+ "UnifiedLMClient",
38
+ "create_provider",
39
+ # Synth client
40
+ "AsyncSynthClient",
41
+ "SyncSynthClient",
42
+ "create_async_client",
43
+ "create_sync_client",
44
+ "create_chat_completion_async",
45
+ "create_chat_completion_sync",
46
+ # Core LM class
47
+ "LM",
48
+ ]
49
+
50
+ # Version info
51
+ __version__ = "0.1.0"
@@ -11,8 +11,8 @@ from dataclasses import dataclass
11
11
  from diskcache import Cache
12
12
  from pydantic import BaseModel
13
13
 
14
- from synth_ai.lm.caching.constants import DISKCACHE_SIZE_LIMIT
15
- from synth_ai.lm.vendors.base import BaseLMResponse
14
+ from synth_ai.v0.lm.caching.constants import DISKCACHE_SIZE_LIMIT
15
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse
16
16
 
17
17
 
18
18
  @dataclass
@@ -3,10 +3,10 @@ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel
5
5
 
6
- from synth_ai.lm.caching.ephemeral import EphemeralCache
7
- from synth_ai.lm.caching.persistent import PersistentCache
8
- from synth_ai.lm.tools.base import BaseTool
9
- from synth_ai.lm.vendors.base import BaseLMResponse
6
+ from synth_ai.v0.lm.caching.ephemeral import EphemeralCache
7
+ from synth_ai.v0.lm.caching.persistent import PersistentCache
8
+ from synth_ai.v0.lm.tools.base import BaseTool
9
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse
10
10
 
11
11
  persistent_cache = PersistentCache()
12
12
  ephemeral_cache = EphemeralCache()
@@ -1,4 +1,4 @@
1
- from synth_ai.lm.caching.handler import CacheHandler
1
+ from synth_ai.v0.lm.caching.handler import CacheHandler
2
2
 
3
3
  cache_handler = CacheHandler(use_ephemeral_store=True, use_persistent_store=True)
4
4
  ephemeral_cache_handler = CacheHandler(use_ephemeral_store=True, use_persistent_store=False)
@@ -12,7 +12,7 @@ from dataclasses import dataclass
12
12
 
13
13
  from pydantic import BaseModel
14
14
 
15
- from synth_ai.lm.vendors.base import BaseLMResponse
15
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse
16
16
 
17
17
 
18
18
  @dataclass
@@ -6,7 +6,12 @@ Loads sensitive configuration from environment variables.
6
6
  import os
7
7
  from dataclasses import dataclass
8
8
 
9
- from dotenv import load_dotenv
9
+ try:
10
+ # Optional dependency during tests; fallback to no-op if missing
11
+ from dotenv import load_dotenv # type: ignore
12
+ except Exception: # pragma: no cover - best-effort fallback
13
+ def load_dotenv(*args, **kwargs): # type: ignore
14
+ return False
10
15
 
11
16
  # Load environment variables from .env file
12
17
  load_dotenv()
@@ -1,15 +1,15 @@
1
- from synth_ai.lm.vendors.core.anthropic_api import AnthropicAPI
2
- from synth_ai.lm.vendors.core.gemini_api import GeminiAPI
3
- from synth_ai.lm.vendors.core.openai_api import (
1
+ from synth_ai.v0.lm.vendors.core.anthropic_api import AnthropicAPI
2
+ from synth_ai.v0.lm.vendors.core.gemini_api import GeminiAPI
3
+ from synth_ai.v0.lm.vendors.core.openai_api import (
4
4
  OpenAIPrivate,
5
5
  OpenAIStructuredOutputClient,
6
6
  )
7
- from synth_ai.lm.vendors.supported.custom_endpoint import CustomEndpointAPI
8
- from synth_ai.lm.vendors.supported.deepseek import DeepSeekAPI
9
- from synth_ai.lm.vendors.supported.grok import GrokAPI
10
- from synth_ai.lm.vendors.supported.groq import GroqAPI
11
- from synth_ai.lm.vendors.supported.openrouter import OpenRouterAPI
12
- from synth_ai.lm.vendors.supported.together import TogetherAPI
7
+ from synth_ai.v0.lm.vendors.supported.custom_endpoint import CustomEndpointAPI
8
+ from synth_ai.v0.lm.vendors.supported.deepseek import DeepSeekAPI
9
+ from synth_ai.v0.lm.vendors.supported.grok import GrokAPI
10
+ from synth_ai.v0.lm.vendors.supported.groq import GroqAPI
11
+ from synth_ai.v0.lm.vendors.supported.openrouter import OpenRouterAPI
12
+ from synth_ai.v0.lm.vendors.supported.together import TogetherAPI
13
13
 
14
14
 
15
15
  class OpenAIClient(OpenAIPrivate):
@@ -3,16 +3,16 @@ from typing import Any, Literal
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
6
- from synth_ai.lm.config import reasoning_models
7
- from synth_ai.lm.core.exceptions import StructuredOutputCoercionFailureException
8
- from synth_ai.lm.core.vendor_clients import (
6
+ from synth_ai.v0.lm.config import reasoning_models
7
+ from synth_ai.v0.lm.core.exceptions import StructuredOutputCoercionFailureException
8
+ from synth_ai.v0.lm.core.vendor_clients import (
9
9
  anthropic_naming_regexes,
10
10
  get_client,
11
11
  openai_naming_regexes,
12
12
  )
13
- from synth_ai.lm.structured_outputs.handler import StructuredOutputHandler
14
- from synth_ai.lm.tools.base import BaseTool
15
- from synth_ai.lm.vendors.base import VendorBase
13
+ from synth_ai.v0.lm.structured_outputs.handler import StructuredOutputHandler
14
+ from synth_ai.v0.lm.tools.base import BaseTool
15
+ from synth_ai.v0.lm.vendors.base import VendorBase
16
16
 
17
17
 
18
18
  def build_messages(
@@ -11,24 +11,24 @@ from typing import Any, Literal
11
11
 
12
12
  from pydantic import BaseModel
13
13
 
14
- from synth_ai.lm.config import reasoning_models
15
- from synth_ai.lm.core.vendor_clients import (
14
+ from synth_ai.v0.lm.config import reasoning_models
15
+ from synth_ai.v0.lm.core.vendor_clients import (
16
16
  anthropic_naming_regexes,
17
17
  get_client,
18
18
  openai_naming_regexes,
19
19
  )
20
- from synth_ai.lm.structured_outputs.handler import StructuredOutputHandler
21
- from synth_ai.lm.tools.base import BaseTool
22
- from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
20
+ from synth_ai.v0.lm.structured_outputs.handler import StructuredOutputHandler
21
+ from synth_ai.v0.lm.tools.base import BaseTool
22
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse, VendorBase
23
23
 
24
24
  # V3 tracing imports
25
- from synth_ai.tracing_v3.abstractions import LMCAISEvent, TimeRecord
26
- from synth_ai.tracing_v3.decorators import set_turn_number
27
- from synth_ai.tracing_v3.llm_call_record_helpers import (
25
+ from synth_ai.v0.tracing_v3.abstractions import LMCAISEvent, TimeRecord
26
+ from synth_ai.v0.tracing_v3.decorators import set_turn_number
27
+ from synth_ai.v0.tracing_v3.llm_call_record_helpers import (
28
28
  compute_aggregates_from_call_records,
29
29
  create_llm_call_record_from_response,
30
30
  )
31
- from synth_ai.tracing_v3.session_tracer import SessionTracer
31
+ from synth_ai.v0.tracing_v3.session_tracer import SessionTracer
32
32
 
33
33
 
34
34
  def build_messages(
@@ -124,7 +124,7 @@ class LM:
124
124
  # But only if no explicit provider was given
125
125
  if vendor is None and model is not None:
126
126
  # Import vendor detection logic
127
- from synth_ai.lm.core.vendor_clients import (
127
+ from synth_ai.v0.lm.core.vendor_clients import (
128
128
  anthropic_naming_regexes,
129
129
  custom_endpoint_naming_regexes,
130
130
  deepseek_naming_regexes,
@@ -5,7 +5,7 @@ This module defines the specific models that are supported by Synth's infrastruc
5
5
  Models are organized by family and size for easy maintenance and extension.
6
6
 
7
7
  MAINTENANCE GUIDE:
8
- 1. Add new model families to the appropriate lists (QWEN_MODELS, OTHER_SYNTH_MODELS)
8
+ 1. Add new base models to synth_ai.v0.api.models.supported.QWEN3_MODELS
9
9
  2. Fine-tuned models (ft:) are automatically detected by regex
10
10
  3. Update SYNTH_SUPPORTED_MODELS set when adding new models
11
11
  4. Test changes with: pytest tests/lms/test_qwen_chat_completions.py
@@ -18,19 +18,7 @@ WHY THIS EXISTS:
18
18
 
19
19
  from typing import List, Set
20
20
 
21
- # Qwen3 model families supported by Synth
22
- QWEN3_MODELS: List[str] = [
23
- # Qwen3 base models
24
- "Qwen/Qwen3-0.6B",
25
- "Qwen/Qwen3-1.7B",
26
- "Qwen/Qwen3-4B",
27
- "Qwen/Qwen3-8B",
28
- "Qwen/Qwen3-14B",
29
- "Qwen/Qwen3-32B",
30
- # Qwen3 specialized variants
31
- "Qwen/Qwen3-4B-2507",
32
- "Qwen/Qwen3-4B-Thinking-2507",
33
- ]
21
+ from synth_ai.v0.api.models.supported import QWEN3_MODELS
34
22
 
35
23
  # Fine-tuned models pattern - any model starting with "ft:" is considered Synth-compatible
36
24
  # These are dynamically detected, but we can add specific known ones here
@@ -9,7 +9,7 @@ import re
9
9
  from re import Pattern
10
10
  from typing import Any
11
11
 
12
- from synth_ai.lm.core.all import (
12
+ from synth_ai.v0.lm.core.all import (
13
13
  AnthropicClient,
14
14
  CustomEndpointClient,
15
15
  DeepSeekClient,
@@ -21,7 +21,7 @@ from synth_ai.lm.core.all import (
21
21
  OpenRouterClient,
22
22
  TogetherClient,
23
23
  )
24
- from synth_ai.lm.core.synth_models import SYNTH_SUPPORTED_MODELS
24
+ from synth_ai.v0.lm.core.synth_models import SYNTH_SUPPORTED_MODELS
25
25
 
26
26
  # Regular expressions to match model names to their respective providers
27
27
  openai_naming_regexes: list[Pattern] = [
@@ -4,10 +4,10 @@ import contextvars
4
4
  from contextlib import contextmanager
5
5
  from typing import Any
6
6
 
7
- from synth_ai.lm.injection import (
7
+ from synth_ai.v0.lm.injection import (
8
8
  apply_injection as _apply_injection,
9
9
  )
10
- from synth_ai.lm.injection import (
10
+ from synth_ai.v0.lm.injection import (
11
11
  clear_injection_rules,
12
12
  set_injection_rules,
13
13
  )
@@ -27,16 +27,16 @@ from langfuse.utils import _get_timestamp
27
27
  from langfuse.utils.langfuse_singleton import LangfuseSingleton
28
28
  from wrapt import wrap_function_wrapper
29
29
 
30
- from synth_ai.lm.overrides import (
30
+ from synth_ai.v0.lm.overrides import (
31
31
  apply_injection as apply_injection_overrides,
32
32
  )
33
- from synth_ai.lm.overrides import (
33
+ from synth_ai.v0.lm.overrides import (
34
34
  apply_param_overrides,
35
35
  apply_tool_overrides,
36
36
  use_overrides_for_messages,
37
37
  )
38
- from synth_ai.lm.provider_support.suppress_logging import *
39
- from synth_ai.tracing_v1.trackers import (
38
+ from synth_ai.v0.lm.provider_support.suppress_logging import *
39
+ from synth_ai.v0.v0.tracing_v1.trackers import (
40
40
  synth_tracker_async,
41
41
  synth_tracker_sync,
42
42
  )
@@ -15,17 +15,17 @@ from packaging.version import Version
15
15
  from pydantic import BaseModel
16
16
  from wrapt import wrap_function_wrapper
17
17
 
18
- from synth_ai.lm.overrides import (
18
+ from synth_ai.v0.lm.overrides import (
19
19
  apply_injection as apply_injection_overrides,
20
20
  )
21
- from synth_ai.lm.overrides import (
21
+ from synth_ai.v0.lm.overrides import (
22
22
  apply_param_overrides,
23
23
  apply_tool_overrides,
24
24
  use_overrides_for_messages,
25
25
  )
26
- from synth_ai.lm.provider_support.suppress_logging import *
27
- from synth_ai.tracing_v1.abstractions import MessageInputs
28
- from synth_ai.tracing_v1.trackers import synth_tracker_async, synth_tracker_sync
26
+ from synth_ai.v0.lm.provider_support.suppress_logging import *
27
+ from synth_ai.v0.v0.tracing_v1.abstractions import MessageInputs
28
+ from synth_ai.v0.v0.tracing_v1.trackers import synth_tracker_async, synth_tracker_sync
29
29
 
30
30
  try:
31
31
  import openai
@@ -13,17 +13,17 @@ from typing import Any, Literal
13
13
 
14
14
  from pydantic import BaseModel
15
15
 
16
- from synth_ai.lm.constants import SPECIAL_BASE_TEMPS
17
- from synth_ai.lm.core.exceptions import StructuredOutputCoercionFailureException
18
- from synth_ai.lm.structured_outputs.inject import (
16
+ from synth_ai.v0.lm.constants import SPECIAL_BASE_TEMPS
17
+ from synth_ai.v0.lm.core.exceptions import StructuredOutputCoercionFailureException
18
+ from synth_ai.v0.lm.structured_outputs.inject import (
19
19
  inject_structured_output_instructions,
20
20
  )
21
- from synth_ai.lm.structured_outputs.rehabilitate import (
21
+ from synth_ai.v0.lm.structured_outputs.rehabilitate import (
22
22
  fix_errant_forced_async,
23
23
  fix_errant_forced_sync,
24
24
  pull_out_structured_output,
25
25
  )
26
- from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
26
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse, VendorBase
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
29
 
@@ -5,7 +5,7 @@ import re
5
5
 
6
6
  from pydantic import BaseModel
7
7
 
8
- from synth_ai.lm.vendors.core.openai_api import OpenAIStructuredOutputClient
8
+ from synth_ai.v0.lm.vendors.core.openai_api import OpenAIStructuredOutputClient
9
9
 
10
10
 
11
11
  def pull_out_structured_output(response_raw: str, response_model: type[BaseModel]) -> BaseModel:
@@ -5,20 +5,20 @@ import anthropic
5
5
  import pydantic
6
6
  from pydantic import BaseModel
7
7
 
8
- from synth_ai.lm.caching.initialize import (
8
+ from synth_ai.v0.lm.caching.initialize import (
9
9
  get_cache_handler,
10
10
  )
11
- from synth_ai.lm.constants import CLAUDE_REASONING_MODELS, SONNET_37_BUDGETS, SPECIAL_BASE_TEMPS
12
- from synth_ai.lm.overrides import (
11
+ from synth_ai.v0.lm.constants import CLAUDE_REASONING_MODELS, SONNET_37_BUDGETS, SPECIAL_BASE_TEMPS
12
+ from synth_ai.v0.lm.overrides import (
13
13
  apply_injection as apply_injection_overrides,
14
14
  )
15
- from synth_ai.lm.overrides import (
15
+ from synth_ai.v0.lm.overrides import (
16
16
  apply_param_overrides,
17
17
  use_overrides_for_messages,
18
18
  )
19
- from synth_ai.lm.tools.base import BaseTool
20
- from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
21
- from synth_ai.lm.vendors.core.openai_api import OpenAIStructuredOutputClient
19
+ from synth_ai.v0.lm.tools.base import BaseTool
20
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse, VendorBase
21
+ from synth_ai.v0.lm.vendors.core.openai_api import OpenAIStructuredOutputClient
22
22
 
23
23
  ANTHROPIC_EXCEPTIONS_TO_RETRY: tuple[type[Exception], ...] = (anthropic.APIError,)
24
24
 
@@ -81,7 +81,7 @@ class AnthropicAPI(VendorBase):
81
81
  "temperature": lm_config.get("temperature", SPECIAL_BASE_TEMPS.get(model, 0)),
82
82
  }
83
83
  with use_overrides_for_messages(messages):
84
- from synth_ai.lm.overrides import apply_tool_overrides
84
+ from synth_ai.v0.lm.overrides import apply_tool_overrides
85
85
 
86
86
  api_params = apply_tool_overrides(api_params)
87
87
  api_params = apply_param_overrides(api_params)
@@ -183,7 +183,7 @@ class AnthropicAPI(VendorBase):
183
183
  "temperature": lm_config.get("temperature", SPECIAL_BASE_TEMPS.get(model, 0)),
184
184
  }
185
185
  with use_overrides_for_messages(messages):
186
- from synth_ai.lm.overrides import apply_tool_overrides
186
+ from synth_ai.v0.lm.overrides import apply_tool_overrides
187
187
 
188
188
  api_params = apply_tool_overrides(api_params)
189
189
  api_params = apply_param_overrides(api_params)
@@ -8,15 +8,15 @@ import google.genai as genai
8
8
  from google.api_core.exceptions import ResourceExhausted
9
9
  from google.genai import types
10
10
 
11
- from synth_ai.lm.caching.initialize import get_cache_handler
12
- from synth_ai.lm.constants import (
11
+ from synth_ai.v0.lm.caching.initialize import get_cache_handler
12
+ from synth_ai.v0.lm.constants import (
13
13
  GEMINI_REASONING_MODELS,
14
14
  GEMINI_THINKING_BUDGETS,
15
15
  SPECIAL_BASE_TEMPS,
16
16
  )
17
- from synth_ai.lm.tools.base import BaseTool
18
- from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
19
- from synth_ai.lm.vendors.retries import BACKOFF_TOLERANCE, MAX_BACKOFF, backoff
17
+ from synth_ai.v0.lm.tools.base import BaseTool
18
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse, VendorBase
19
+ from synth_ai.v0.lm.vendors.retries import BACKOFF_TOLERANCE, MAX_BACKOFF, backoff
20
20
 
21
21
  ALIASES = {
22
22
  "gemini-2.5-flash": "gemini-2.5-flash-preview-04-17",
@@ -6,11 +6,11 @@ import pydantic
6
6
  from mistralai import Mistral # use Mistral as both sync and async client
7
7
  from pydantic import BaseModel
8
8
 
9
- from synth_ai.lm.caching.initialize import get_cache_handler
10
- from synth_ai.lm.constants import SPECIAL_BASE_TEMPS
11
- from synth_ai.lm.tools.base import BaseTool
12
- from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
13
- from synth_ai.lm.vendors.core.openai_api import OpenAIStructuredOutputClient
9
+ from synth_ai.v0.lm.caching.initialize import get_cache_handler
10
+ from synth_ai.v0.lm.constants import SPECIAL_BASE_TEMPS
11
+ from synth_ai.v0.lm.tools.base import BaseTool
12
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse, VendorBase
13
+ from synth_ai.v0.lm.vendors.core.openai_api import OpenAIStructuredOutputClient
14
14
 
15
15
  # Since the mistralai package doesn't expose an exceptions module,
16
16
  # we fallback to catching all Exceptions for retry.
@@ -15,12 +15,12 @@ import pydantic_core
15
15
  # from openai import AsyncOpenAI, OpenAI
16
16
  from pydantic import BaseModel
17
17
 
18
- from synth_ai.config.base_url import PROD_BASE_URL_DEFAULT
19
- from synth_ai.lm.caching.initialize import get_cache_handler
20
- from synth_ai.lm.constants import OPENAI_REASONING_MODELS, SPECIAL_BASE_TEMPS
21
- from synth_ai.lm.tools.base import BaseTool
22
- from synth_ai.lm.vendors.base import BaseLMResponse
23
- from synth_ai.lm.vendors.openai_standard import OpenAIStandard
18
+ from synth_ai.v0.config.base_url import PROD_BASE_URL_DEFAULT
19
+ from synth_ai.v0.lm.caching.initialize import get_cache_handler
20
+ from synth_ai.v0.lm.constants import OPENAI_REASONING_MODELS, SPECIAL_BASE_TEMPS
21
+ from synth_ai.v0.lm.tools.base import BaseTool
22
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse
23
+ from synth_ai.v0.lm.vendors.openai_standard import OpenAIStandard
24
24
 
25
25
  # Exceptions that should trigger retry logic for OpenAI API calls
26
26
  OPENAI_EXCEPTIONS_TO_RETRY: tuple[type[Exception], ...] = (
@@ -56,8 +56,8 @@ class OpenAIStructuredOutputClient(OpenAIStandard):
56
56
 
57
57
  if use_synth:
58
58
  # Use Synth clients for Synth endpoints
59
- from synth_ai.lm.vendors.synth_client import AsyncSynthClient, SyncSynthClient
60
- from synth_ai.lm.config import SynthConfig
59
+ from synth_ai.v0.lm.vendors.synth_client import AsyncSynthClient, SyncSynthClient
60
+ from synth_ai.v0.lm.config import SynthConfig
61
61
 
62
62
  # Create config from OPENAI_* environment variables if available
63
63
  openai_base = os.getenv("OPENAI_API_BASE")
@@ -73,7 +73,7 @@ class OpenAIStructuredOutputClient(OpenAIStandard):
73
73
  async_client = AsyncSynthClient()
74
74
  elif synth_logging:
75
75
  # print("Using synth logging - OpenAIStructuredOutputClient")
76
- from synth_ai.lm.provider_support.openai import AsyncOpenAI, OpenAI
76
+ from synth_ai.v0.lm.provider_support.openai import AsyncOpenAI, OpenAI
77
77
 
78
78
  sync_client = OpenAI()
79
79
  async_client = AsyncOpenAI()
@@ -198,7 +198,7 @@ class OpenAIPrivate(OpenAIStandard):
198
198
  def __init__(self, synth_logging: bool = True):
199
199
  if synth_logging:
200
200
  # print("Using synth logging - OpenAIPrivate")
201
- from synth_ai.lm.provider_support.openai import AsyncOpenAI, OpenAI
201
+ from synth_ai.v0.lm.provider_support.openai import AsyncOpenAI, OpenAI
202
202
  else:
203
203
  # print("Not using synth logging - OpenAIPrivate")
204
204
  from openai import AsyncOpenAI, OpenAI
@@ -9,20 +9,20 @@ import openai
9
9
  import pydantic_core
10
10
  from pydantic import BaseModel
11
11
 
12
- from synth_ai.lm.caching.initialize import (
12
+ from synth_ai.v0.lm.caching.initialize import (
13
13
  get_cache_handler,
14
14
  )
15
- from synth_ai.lm.constants import SPECIAL_BASE_TEMPS
16
- from synth_ai.lm.injection import apply_injection
17
- from synth_ai.lm.overrides import (
15
+ from synth_ai.v0.lm.constants import SPECIAL_BASE_TEMPS
16
+ from synth_ai.v0.lm.injection import apply_injection
17
+ from synth_ai.v0.lm.overrides import (
18
18
  apply_param_overrides,
19
19
  apply_tool_overrides,
20
20
  use_overrides_for_messages,
21
21
  )
22
- from synth_ai.lm.tools.base import BaseTool
23
- from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
24
- from synth_ai.lm.vendors.openai_standard_responses import OpenAIResponsesAPIMixin
25
- from synth_ai.lm.vendors.retries import MAX_BACKOFF
22
+ from synth_ai.v0.lm.tools.base import BaseTool
23
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse, VendorBase
24
+ from synth_ai.v0.lm.vendors.openai_standard_responses import OpenAIResponsesAPIMixin
25
+ from synth_ai.v0.lm.vendors.retries import MAX_BACKOFF
26
26
 
27
27
  DEFAULT_EXCEPTIONS_TO_RETRY = (
28
28
  pydantic_core._pydantic_core.ValidationError,
@@ -8,8 +8,8 @@ that extend the OpenAIStandard class functionality.
8
8
  import uuid
9
9
  from typing import Any
10
10
 
11
- from synth_ai.lm.tools.base import BaseTool
12
- from synth_ai.lm.vendors.base import BaseLMResponse
11
+ from synth_ai.v0.lm.tools.base import BaseTool
12
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse
13
13
 
14
14
 
15
15
  def _silent_backoff_handler(_details):
@@ -11,9 +11,9 @@ import requests
11
11
  from requests.adapters import HTTPAdapter
12
12
  from urllib3.util.retry import Retry
13
13
 
14
- from synth_ai.lm.caching.initialize import get_cache_handler
15
- from synth_ai.lm.tools.base import BaseTool
16
- from synth_ai.lm.vendors.base import BaseLMResponse, VendorBase
14
+ from synth_ai.v0.lm.caching.initialize import get_cache_handler
15
+ from synth_ai.v0.lm.tools.base import BaseTool
16
+ from synth_ai.v0.lm.vendors.base import BaseLMResponse, VendorBase
17
17
 
18
18
  # Exception types for retry
19
19
  CUSTOM_ENDPOINT_EXCEPTIONS_TO_RETRY: tuple[type[Exception], ...] = (
@@ -3,8 +3,8 @@ from typing import Any
3
3
 
4
4
  from openai import AsyncOpenAI, OpenAI
5
5
 
6
- from synth_ai.lm.tools.base import BaseTool
7
- from synth_ai.lm.vendors.openai_standard import OpenAIStandard
6
+ from synth_ai.v0.lm.tools.base import BaseTool
7
+ from synth_ai.v0.lm.vendors.openai_standard import OpenAIStandard
8
8
 
9
9
 
10
10
  class DeepSeekAPI(OpenAIStandard):
@@ -3,8 +3,8 @@ from typing import Any
3
3
 
4
4
  from openai import AsyncOpenAI, OpenAI
5
5
 
6
- from synth_ai.lm.tools.base import BaseTool
7
- from synth_ai.lm.vendors.openai_standard import OpenAIStandard
6
+ from synth_ai.v0.lm.tools.base import BaseTool
7
+ from synth_ai.v0.lm.vendors.openai_standard import OpenAIStandard
8
8
 
9
9
 
10
10
  class GrokAPI(OpenAIStandard):
@@ -3,7 +3,7 @@ import os
3
3
  from dotenv import load_dotenv
4
4
  from groq import AsyncGroq, Groq
5
5
 
6
- from synth_ai.lm.vendors.openai_standard import OpenAIStandard
6
+ from synth_ai.v0.lm.vendors.openai_standard import OpenAIStandard
7
7
 
8
8
  load_dotenv()
9
9