prompture 1.13.11.dev1__tar.gz → 1.13.12.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (716) hide show
  1. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/PKG-INFO +42 -2
  2. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/README.md +40 -0
  3. prompture-1.13.12.dev2/VERSION +1 -0
  4. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/_version.py +2 -2
  5. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/async_conversation.py +25 -2
  6. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/conversation.py +25 -2
  7. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/live_events.py +3 -1
  8. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/cli.py +18 -1
  9. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/server.py +29 -1
  10. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_effort.py +10 -9
  11. prompture-1.13.12.dev2/prompture/drivers/_google_genai.py +205 -0
  12. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_base.py +2 -1
  13. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_claude_driver.py +16 -14
  14. prompture-1.13.12.dev2/prompture/drivers/async_google_driver.py +226 -0
  15. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_google_vertexai_driver.py +42 -76
  16. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_groq_driver.py +3 -1
  17. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_driver.py +3 -1
  18. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/base.py +2 -1
  19. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/claude_driver.py +50 -13
  20. prompture-1.13.12.dev2/prompture/drivers/google_driver.py +262 -0
  21. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/google_vertexai_driver.py +32 -182
  22. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/groq_driver.py +3 -1
  23. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_driver.py +3 -1
  24. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/vision_helpers.py +3 -1
  25. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/async_groups.py +13 -3
  26. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/pricing.py +35 -7
  27. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/google.json +22 -0
  28. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/google_vertexai.json +22 -0
  29. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/PKG-INFO +42 -2
  30. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/SOURCES.txt +1 -0
  31. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/requires.txt +1 -1
  32. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/scm_file_list.json +3 -0
  33. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/pyproject.toml +1 -1
  34. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/requirements.txt +2 -2
  35. prompture-1.13.11.dev1/VERSION +0 -1
  36. prompture-1.13.11.dev1/prompture/drivers/async_google_driver.py +0 -407
  37. prompture-1.13.11.dev1/prompture/drivers/google_driver.py +0 -520
  38. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-driver/SKILL.md +0 -0
  39. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-driver/references/driver-template.md +0 -0
  40. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-example/SKILL.md +0 -0
  41. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-field/SKILL.md +0 -0
  42. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-persona/SKILL.md +0 -0
  43. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-test/SKILL.md +0 -0
  44. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-tool/SKILL.md +0 -0
  45. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/create-pr/SKILL.md +0 -0
  46. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/run-tests/SKILL.md +0 -0
  47. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  48. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/update-pricing/SKILL.md +0 -0
  49. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.env.copy +0 -0
  50. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.gitattributes +0 -0
  51. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/FUNDING.yml +0 -0
  52. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  53. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  54. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  55. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  56. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/scripts/update_docs_version.py +0 -0
  57. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/scripts/update_wrapper_version.py +0 -0
  58. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/dev.yml +0 -0
  59. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/documentation.yml +0 -0
  60. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/pricing-freshness.yml +0 -0
  61. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/publish.yml +0 -0
  62. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/security.yml +0 -0
  63. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.safety-project.ini +0 -0
  64. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/AGENTS.md +0 -0
  65. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/BREAKING_CHANGES.md +0 -0
  66. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/CLAUDE.md +0 -0
  67. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/CONTRIBUTING.md +0 -0
  68. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/LICENSE +0 -0
  69. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/MANIFEST.in +0 -0
  70. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/ROADMAP.md +0 -0
  71. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/SECURITY.md +0 -0
  72. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/dev.ps1 +0 -0
  73. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/dev.sh +0 -0
  74. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/llms.txt +0 -0
  75. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/mypy_errors.txt +0 -0
  76. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/README.md +0 -0
  77. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/README.md +0 -0
  78. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  79. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/pyproject.toml +0 -0
  80. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/test.py +0 -0
  81. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/README.md +0 -0
  82. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  83. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/pyproject.toml +0 -0
  84. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/test.py +0 -0
  85. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/__init__.py +0 -0
  86. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/__main__.py +0 -0
  87. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/_internal/__init__.py +0 -0
  88. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/_internal/json_encoder.py +0 -0
  89. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/__init__.py +0 -0
  90. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/agent.py +0 -0
  91. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/assistant.py +0 -0
  92. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/async_agent.py +0 -0
  93. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/async_deep_agent.py +0 -0
  94. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/__init__.py +0 -0
  95. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/planner.py +0 -0
  96. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/subagents.py +0 -0
  97. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/summarizer.py +0 -0
  98. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/vfs.py +0 -0
  99. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep_agent.py +0 -0
  100. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep_prompts.py +0 -0
  101. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep_state.py +0 -0
  102. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/persona.py +0 -0
  103. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/review_loop.py +0 -0
  104. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/simulated_tools.py +0 -0
  105. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/skill_miner.py +0 -0
  106. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/skills.py +0 -0
  107. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/tool_context.py +0 -0
  108. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/tool_grammars.py +0 -0
  109. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/tools_schema.py +0 -0
  110. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/types.py +0 -0
  111. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/aio/__init__.py +0 -0
  112. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/bridges/__init__.py +0 -0
  113. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/bridges/tukuy_backend.py +0 -0
  114. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/__init__.py +0 -0
  115. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/backends.py +0 -0
  116. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/builtin_checks.py +0 -0
  117. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/challenge.py +0 -0
  118. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/errors.py +0 -0
  119. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/health.py +0 -0
  120. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/http.py +0 -0
  121. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/probe.py +0 -0
  122. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/url_safety.py +0 -0
  123. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/__init__.py +0 -0
  124. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/core.py +0 -0
  125. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/stores.py +0 -0
  126. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/types.py +0 -0
  127. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/citations/__init__.py +0 -0
  128. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/citations/core.py +0 -0
  129. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/citations/types.py +0 -0
  130. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/__init__.py +0 -0
  131. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/delegate_cmd.py +0 -0
  132. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/doctor_cmd.py +0 -0
  133. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/formatters.py +0 -0
  134. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/mcp_cmd.py +0 -0
  135. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/research_cmd.py +0 -0
  136. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/runner.py +0 -0
  137. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/server.py +0 -0
  138. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/setup_cmd.py +0 -0
  139. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/skill_cmd.py +0 -0
  140. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/transcribe_cmd.py +0 -0
  141. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/__init__.py +0 -0
  142. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/automations.py +0 -0
  143. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/calls.py +0 -0
  144. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/capacity.py +0 -0
  145. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/coding_tools.py +0 -0
  146. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/hook.py +0 -0
  147. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/live.py +0 -0
  148. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/local.py +0 -0
  149. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/memory.py +0 -0
  150. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/reuse.py +0 -0
  151. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/router.py +0 -0
  152. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/routing_policy.py +0 -0
  153. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/summary.py +0 -0
  154. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/tool_routing.py +0 -0
  155. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/__init__.py +0 -0
  156. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/dedup.py +0 -0
  157. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/evol.py +0 -0
  158. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/filters.py +0 -0
  159. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/formats.py +0 -0
  160. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/schemas.py +0 -0
  161. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/seed.py +0 -0
  162. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/synth.py +0 -0
  163. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/doctor/__init__.py +0 -0
  164. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/doctor/core.py +0 -0
  165. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/doctor/providers.py +0 -0
  166. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/__init__.py +0 -0
  167. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_media_usage.py +0 -0
  168. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_ollama_options.py +0 -0
  169. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_openai_compat.py +0 -0
  170. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_openai_compat_stream.py +0 -0
  171. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_openai_responses.py +0 -0
  172. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_prompt_cache.py +0 -0
  173. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_prompted_tool_stream.py +0 -0
  174. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_usage_reporting.py +0 -0
  175. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/aggregator_base.py +0 -0
  176. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/airllm_driver.py +0 -0
  177. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/assemblyai_stt_driver.py +0 -0
  178. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_aggregator_base.py +0 -0
  179. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_airllm_driver.py +0 -0
  180. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
  181. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_azure_driver.py +0 -0
  182. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_bedrock_driver.py +0 -0
  183. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  184. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cachibot_driver.py +0 -0
  185. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
  186. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_coding_agent_driver.py +0 -0
  187. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cohere_driver.py +0 -0
  188. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  189. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  190. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
  191. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
  192. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_deepseek_driver.py +0 -0
  193. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
  194. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
  195. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_embedding_base.py +0 -0
  196. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  197. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  198. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  199. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_grok_driver.py +0 -0
  200. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
  201. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  202. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_hugging_driver.py +0 -0
  203. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  204. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_img_gen_base.py +0 -0
  205. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  206. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  207. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_kev_decision_driver.py +0 -0
  208. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  209. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  210. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_laya_decision_driver.py +0 -0
  211. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_lmstudio_driver.py +0 -0
  212. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_local_http_driver.py +0 -0
  213. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  214. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_minimax_driver.py +0 -0
  215. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  216. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mistral_driver.py +0 -0
  217. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  218. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_modelscope_driver.py +0 -0
  219. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_moonshot_driver.py +0 -0
  220. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
  221. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  222. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  223. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  224. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_ollama_driver.py +0 -0
  225. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  226. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_compatible_driver.py +0 -0
  227. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_embedding_driver.py +0 -0
  228. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
  229. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  230. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_stt_driver.py +0 -0
  231. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_tts_driver.py +0 -0
  232. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openrouter_driver.py +0 -0
  233. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  234. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_registry.py +0 -0
  235. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  236. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_runway_tts_driver.py +0 -0
  237. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  238. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  239. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_stt_base.py +0 -0
  240. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_systemone_compatible_driver.py +0 -0
  241. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_tts_base.py +0 -0
  242. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_typesafe_decision_driver.py +0 -0
  243. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_video_gen_base.py +0 -0
  244. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  245. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  246. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_zai_driver.py +0 -0
  247. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/audio_registry.py +0 -0
  248. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/azure_config.py +0 -0
  249. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/azure_driver.py +0 -0
  250. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/bedrock_driver.py +0 -0
  251. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  252. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cachibot_driver.py +0 -0
  253. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cartesia_tts_driver.py +0 -0
  254. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/coding_agent_driver.py +0 -0
  255. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cohere_driver.py +0 -0
  256. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cohere_embedding_driver.py +0 -0
  257. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cohere_rerank_driver.py +0 -0
  258. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/decision_base.py +0 -0
  259. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/decision_registry.py +0 -0
  260. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/deepgram_stt_driver.py +0 -0
  261. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/deepgram_tts_driver.py +0 -0
  262. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/deepseek_driver.py +0 -0
  263. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/driver_registry.py +0 -0
  264. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
  265. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
  266. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/embedding_base.py +0 -0
  267. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/embedding_registry.py +0 -0
  268. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/fal_img_gen_driver.py +0 -0
  269. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/fal_video_gen_driver.py +0 -0
  270. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/google_img_gen_driver.py +0 -0
  271. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/grok_driver.py +0 -0
  272. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/grok_img_gen_driver.py +0 -0
  273. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/grok_video_gen_driver.py +0 -0
  274. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/hugging_driver.py +0 -0
  275. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  276. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/img_gen_base.py +0 -0
  277. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/img_gen_registry.py +0 -0
  278. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/jina_embedding_driver.py +0 -0
  279. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/jina_rerank_driver.py +0 -0
  280. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/job_runner.py +0 -0
  281. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/kev_decision_driver.py +0 -0
  282. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/kling_img_gen_driver.py +0 -0
  283. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/kling_video_gen_driver.py +0 -0
  284. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/laya_decision_driver.py +0 -0
  285. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/lipsync_base.py +0 -0
  286. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/lipsync_registry.py +0 -0
  287. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/lmstudio_driver.py +0 -0
  288. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/local_http_driver.py +0 -0
  289. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/luma_video_gen_driver.py +0 -0
  290. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/media_capabilities.py +0 -0
  291. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/minimax_driver.py +0 -0
  292. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  293. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mistral_driver.py +0 -0
  294. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mistral_moderation_driver.py +0 -0
  295. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/modelscope_driver.py +0 -0
  296. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/moderation_base.py +0 -0
  297. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/moderation_registry.py +0 -0
  298. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/moonshot_driver.py +0 -0
  299. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/muapi_aggregator_driver.py +0 -0
  300. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/music_base.py +0 -0
  301. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/music_registry.py +0 -0
  302. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  303. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  304. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/nomic_embedding_driver.py +0 -0
  305. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/ollama_driver.py +0 -0
  306. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/ollama_embedding_driver.py +0 -0
  307. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_compatible_driver.py +0 -0
  308. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_embedding_driver.py +0 -0
  309. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_img_gen_driver.py +0 -0
  310. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_moderation_driver.py +0 -0
  311. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_stt_driver.py +0 -0
  312. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_tts_driver.py +0 -0
  313. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openrouter_driver.py +0 -0
  314. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/pika_video_gen_driver.py +0 -0
  315. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/provider_branding.py +0 -0
  316. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/provider_descriptors.py +0 -0
  317. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/registry.py +0 -0
  318. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/rerank_base.py +0 -0
  319. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/rerank_registry.py +0 -0
  320. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  321. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_capabilities.py +0 -0
  322. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_img_gen_driver.py +0 -0
  323. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_tts_driver.py +0 -0
  324. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_video_gen_driver.py +0 -0
  325. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/stability_img_gen_driver.py +0 -0
  326. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/stt_base.py +0 -0
  327. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/systemone_compatible_driver.py +0 -0
  328. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/tts_base.py +0 -0
  329. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/typesafe_decision_driver.py +0 -0
  330. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/vertex_img_gen_driver.py +0 -0
  331. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/video_gen_base.py +0 -0
  332. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/video_gen_registry.py +0 -0
  333. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/voyage_embedding_driver.py +0 -0
  334. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/voyage_rerank_driver.py +0 -0
  335. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/zai_driver.py +0 -0
  336. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/__init__.py +0 -0
  337. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/base.py +0 -0
  338. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/faithfulness.py +0 -0
  339. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/judge.py +0 -0
  340. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/pairwise.py +0 -0
  341. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/self_consistency.py +0 -0
  342. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/exceptions.py +0 -0
  343. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/__init__.py +0 -0
  344. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/context.py +0 -0
  345. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/context_eval.py +0 -0
  346. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/data/document_qa_policies.json +0 -0
  347. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/data/extraction_contacts.json +0 -0
  348. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/data/tool_task_inventory.json +0 -0
  349. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/fixtures.py +0 -0
  350. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/gates.py +0 -0
  351. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/harness.py +0 -0
  352. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/__init__.py +0 -0
  353. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/candidates.py +0 -0
  354. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/feedback.py +0 -0
  355. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/optimizer.py +0 -0
  356. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/promotion.py +0 -0
  357. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/scorecard.py +0 -0
  358. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/integration.py +0 -0
  359. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/outcomes.py +0 -0
  360. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/policy.py +0 -0
  361. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/sandbox.py +0 -0
  362. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/scoring.py +0 -0
  363. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/__init__.py +0 -0
  364. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/base.py +0 -0
  365. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/critique.py +0 -0
  366. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/direct.py +0 -0
  367. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/registry.py +0 -0
  368. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/retrieve.py +0 -0
  369. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/types.py +0 -0
  370. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/__init__.py +0 -0
  371. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/_usage.py +0 -0
  372. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/async_core.py +0 -0
  373. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/code_extraction.py +0 -0
  374. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/core.py +0 -0
  375. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/few_shot.py +0 -0
  376. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/fields.py +0 -0
  377. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/reasoning.py +0 -0
  378. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/strategy.py +0 -0
  379. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/streaming.py +0 -0
  380. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/tools.py +0 -0
  381. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/tukuy_bridge.py +0 -0
  382. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/validator.py +0 -0
  383. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/__init__.py +0 -0
  384. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/base.py +0 -0
  385. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/__init__.py +0 -0
  386. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/exchange.py +0 -0
  387. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/fixtures.py +0 -0
  388. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/harness.py +0 -0
  389. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/motifs.py +0 -0
  390. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/puzzles.py +0 -0
  391. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/render.py +0 -0
  392. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/connect4.py +0 -0
  393. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/control.py +0 -0
  394. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/evaluation.py +0 -0
  395. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/fixtures.py +0 -0
  396. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/match.py +0 -0
  397. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/memory.py +0 -0
  398. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/othello.py +0 -0
  399. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/records.py +0 -0
  400. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/strategies.py +0 -0
  401. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/tournament.py +0 -0
  402. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/trace.py +0 -0
  403. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/__init__.py +0 -0
  404. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/anthropic_format.py +0 -0
  405. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/gemini_format.py +0 -0
  406. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/openai_format.py +0 -0
  407. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/reasoning_cache.py +0 -0
  408. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/responses_format.py +0 -0
  409. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/__init__.py +0 -0
  410. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/consensus.py +0 -0
  411. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/debate.py +0 -0
  412. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/fusion.py +0 -0
  413. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/groups.py +0 -0
  414. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/types.py +0 -0
  415. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/__init__.py +0 -0
  416. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/enhance.py +0 -0
  417. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/negative.py +0 -0
  418. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/set_planner.py +0 -0
  419. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/style_presets.py +0 -0
  420. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/__init__.py +0 -0
  421. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/accounts.py +0 -0
  422. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/billing.py +0 -0
  423. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/budget.py +0 -0
  424. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/cache.py +0 -0
  425. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/callbacks.py +0 -0
  426. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/capabilities.py +0 -0
  427. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_activity.py +0 -0
  428. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_events.py +0 -0
  429. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_readers.py +0 -0
  430. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_specs.py +0 -0
  431. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_usage.py +0 -0
  432. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agents.py +0 -0
  433. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/compression.py +0 -0
  434. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/cost_mixin.py +0 -0
  435. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/credentials.py +0 -0
  436. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/discovery.py +0 -0
  437. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/environment.py +0 -0
  438. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/ledger.py +0 -0
  439. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/local_servers.py +0 -0
  440. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/logging.py +0 -0
  441. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/media_pricing.py +0 -0
  442. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/media_rates.json +0 -0
  443. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/model_rates.py +0 -0
  444. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/otel.py +0 -0
  445. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/provider_env.py +0 -0
  446. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/provider_keys.py +0 -0
  447. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rate_limits.py +0 -0
  448. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/anthropic.json +0 -0
  449. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/azure.json +0 -0
  450. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/bedrock.json +0 -0
  451. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/cerebras.json +0 -0
  452. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/cohere.json +0 -0
  453. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/deepinfra.json +0 -0
  454. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/deepseek.json +0 -0
  455. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/fireworks.json +0 -0
  456. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/groq.json +0 -0
  457. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/jina.json +0 -0
  458. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/kev.json +0 -0
  459. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/laya.json +0 -0
  460. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/mistral.json +0 -0
  461. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/mixedbread.json +0 -0
  462. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/moonshot.json +0 -0
  463. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/nomic.json +0 -0
  464. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/nvidia.json +0 -0
  465. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/openai.json +0 -0
  466. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/openrouter.json +0 -0
  467. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/perplexity.json +0 -0
  468. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/sambanova.json +0 -0
  469. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/siliconflow.json +0 -0
  470. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/together.json +0 -0
  471. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/typesafe.json +0 -0
  472. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/voyage.json +0 -0
  473. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/xai.json +0 -0
  474. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/session.py +0 -0
  475. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/settings.py +0 -0
  476. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/token_counting.py +0 -0
  477. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/tracker.py +0 -0
  478. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/tukuy_backend.py +0 -0
  479. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/updates.py +0 -0
  480. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/__init__.py +0 -0
  481. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/chunking.py +0 -0
  482. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/detect.py +0 -0
  483. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/document.py +0 -0
  484. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/__init__.py +0 -0
  485. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/base.py +0 -0
  486. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/csv_parser.py +0 -0
  487. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/docx.py +0 -0
  488. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/html.py +0 -0
  489. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/markdown.py +0 -0
  490. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/pdf.py +0 -0
  491. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/xlsx.py +0 -0
  492. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/integrations/__init__.py +0 -0
  493. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/integrations/mcp_bridge.py +0 -0
  494. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/integrations/tukuy_bridge.py +0 -0
  495. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/jobs.py +0 -0
  496. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/__init__.py +0 -0
  497. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/core.py +0 -0
  498. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/stores.py +0 -0
  499. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/types.py +0 -0
  500. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/__init__.py +0 -0
  501. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/claims.py +0 -0
  502. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/context.py +0 -0
  503. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/generate.py +0 -0
  504. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/models.py +0 -0
  505. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/__init__.py +0 -0
  506. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/client.py +0 -0
  507. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/health.py +0 -0
  508. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/hub.py +0 -0
  509. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/importers.py +0 -0
  510. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/server.py +0 -0
  511. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/tools.py +0 -0
  512. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/__init__.py +0 -0
  513. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/agent_tools.py +0 -0
  514. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/audio.py +0 -0
  515. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/hosting.py +0 -0
  516. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/image.py +0 -0
  517. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/__init__.py +0 -0
  518. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/errors.py +0 -0
  519. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/ffmpeg.py +0 -0
  520. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/groq_stt.py +0 -0
  521. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/health.py +0 -0
  522. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/sources.py +0 -0
  523. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/summarize.py +0 -0
  524. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/tools.py +0 -0
  525. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/transcribe.py +0 -0
  526. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/video.py +0 -0
  527. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/01-why-prompture.md +0 -0
  528. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/02-installation.md +0 -0
  529. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/03-quickstart.md +0 -0
  530. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/04-toon-input.md +0 -0
  531. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/05-test-harness.md +0 -0
  532. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/06-stability.md +0 -0
  533. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/07-migration.md +0 -0
  534. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/__init__.py +0 -0
  535. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/history.py +0 -0
  536. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/serialization.py +0 -0
  537. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/store.py +0 -0
  538. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/__init__.py +0 -0
  539. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/pipeline.py +0 -0
  540. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/resolver.py +0 -0
  541. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/routing.py +0 -0
  542. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/__init__.py +0 -0
  543. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/base.py +0 -0
  544. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/__init__.py +0 -0
  545. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/_aliases.py +0 -0
  546. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  547. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/audio_plugin.py +0 -0
  548. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  549. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/coding_agent_plugin.py +0 -0
  550. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/decision_plugin.py +0 -0
  551. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  552. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/extras_plugin.py +0 -0
  553. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/google_plugin.py +0 -0
  554. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/image_plugin.py +0 -0
  555. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/local_plugin.py +0 -0
  556. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  557. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/openai_plugin.py +0 -0
  558. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/video_plugin.py +0 -0
  559. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/discovery.py +0 -0
  560. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/py.typed +0 -0
  561. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/__init__.py +0 -0
  562. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/__init__.py +0 -0
  563. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/base.py +0 -0
  564. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/character.py +0 -0
  565. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/chunker_registry.py +0 -0
  566. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/contextual.py +0 -0
  567. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/markdown.py +0 -0
  568. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/recursive.py +0 -0
  569. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/semantic.py +0 -0
  570. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/token.py +0 -0
  571. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/documents.py +0 -0
  572. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loader_registry.py +0 -0
  573. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/__init__.py +0 -0
  574. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/csv_loader.py +0 -0
  575. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/docx_loader.py +0 -0
  576. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/epub_loader.py +0 -0
  577. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/html_loader.py +0 -0
  578. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/json_loader.py +0 -0
  579. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/markdown_loader.py +0 -0
  580. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/pdf_loader.py +0 -0
  581. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/text_loader.py +0 -0
  582. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/xlsx_loader.py +0 -0
  583. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/pipeline.py +0 -0
  584. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/__init__.py +0 -0
  585. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/_fusion.py +0 -0
  586. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/base.py +0 -0
  587. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/hybrid.py +0 -0
  588. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/hyde.py +0 -0
  589. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/mmr.py +0 -0
  590. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/multi_query.py +0 -0
  591. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/retriever_registry.py +0 -0
  592. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/similarity.py +0 -0
  593. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/step_back.py +0 -0
  594. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/__init__.py +0 -0
  595. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/base.py +0 -0
  596. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/chroma.py +0 -0
  597. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/faiss.py +0 -0
  598. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/pgvector.py +0 -0
  599. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/pinecone.py +0 -0
  600. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/qdrant.py +0 -0
  601. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
  602. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/weaviate.py +0 -0
  603. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/__init__.py +0 -0
  604. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/detector.py +0 -0
  605. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/evaluator.py +0 -0
  606. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/markers.py +0 -0
  607. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/__init__.py +0 -0
  608. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/agent.py +0 -0
  609. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/budget.py +0 -0
  610. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/events.py +0 -0
  611. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/planner.py +0 -0
  612. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/ranking.py +0 -0
  613. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/report.py +0 -0
  614. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/synthesis.py +0 -0
  615. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/tools.py +0 -0
  616. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/__init__.py +0 -0
  617. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/async_driver.py +0 -0
  618. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/backoff.py +0 -0
  619. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/breaker.py +0 -0
  620. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/driver.py +0 -0
  621. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/errors.py +0 -0
  622. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/explain.py +0 -0
  623. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/headroom.py +0 -0
  624. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/keys.py +0 -0
  625. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/router.py +0 -0
  626. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/strategies.py +0 -0
  627. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/virtual.py +0 -0
  628. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/__init__.py +0 -0
  629. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/generator.py +0 -0
  630. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  631. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/README.md.j2 +0 -0
  632. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/config.py.j2 +0 -0
  633. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/env.example.j2 +0 -0
  634. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/main.py.j2 +0 -0
  635. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/models.py.j2 +0 -0
  636. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  637. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/security/__init__.py +0 -0
  638. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/security/injection.py +0 -0
  639. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/security/redaction.py +0 -0
  640. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/__init__.py +0 -0
  641. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/core.py +0 -0
  642. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/project.py +0 -0
  643. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/stores.py +0 -0
  644. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/types.py +0 -0
  645. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/__init__.py +0 -0
  646. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/SKILL.md +0 -0
  647. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/dev.md +0 -0
  648. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/finance.md +0 -0
  649. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/mcp.md +0 -0
  650. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/media.md +0 -0
  651. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/models.md +0 -0
  652. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/search.md +0 -0
  653. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/web.md +0 -0
  654. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/__init__.py +0 -0
  655. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/environment.py +0 -0
  656. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/memory.py +0 -0
  657. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/scheduler.py +0 -0
  658. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/swarm.py +0 -0
  659. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/swarm_agent.py +0 -0
  660. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/types.py +0 -0
  661. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/testing/__init__.py +0 -0
  662. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/testing/driver_contract.py +0 -0
  663. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/__init__.py +0 -0
  664. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/__init__.py +0 -0
  665. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/adapter.py +0 -0
  666. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/builtin.py +0 -0
  667. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/config.py +0 -0
  668. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/health.py +0 -0
  669. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/code_exec.py +0 -0
  670. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/named.py +0 -0
  671. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/packs.py +0 -0
  672. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/__init__.py +0 -0
  673. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/_common.py +0 -0
  674. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/_mcp_http.py +0 -0
  675. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/_types.py +0 -0
  676. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/cache.py +0 -0
  677. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/fetch.py +0 -0
  678. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/health.py +0 -0
  679. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/html2md.py +0 -0
  680. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/platform.py +0 -0
  681. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/__init__.py +0 -0
  682. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/_media.py +0 -0
  683. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/anilist.py +0 -0
  684. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/arxiv.py +0 -0
  685. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/base.py +0 -0
  686. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/feeds.py +0 -0
  687. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/github.py +0 -0
  688. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/hackernews.py +0 -0
  689. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/podcasts.py +0 -0
  690. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/wikipedia.py +0 -0
  691. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/youtube.py +0 -0
  692. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/search.py +0 -0
  693. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/toolkit.py +0 -0
  694. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web_search.py +0 -0
  695. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/__init__.py +0 -0
  696. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/architect.py +0 -0
  697. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/engine.py +0 -0
  698. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/errors.py +0 -0
  699. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/model.py +0 -0
  700. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/nodes.py +0 -0
  701. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/recovery.py +0 -0
  702. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/references.py +0 -0
  703. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/registry.py +0 -0
  704. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/scheduler.py +0 -0
  705. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/state.py +0 -0
  706. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/dependency_links.txt +0 -0
  707. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/entry_points.txt +0 -0
  708. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/top_level.txt +0 -0
  709. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture_cost_tracking.md +0 -0
  710. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/scripts/check_pricing_freshness.py +0 -0
  711. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/setup.cfg +0 -0
  712. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/specs/basic_extraction.json +0 -0
  713. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/specs/schema_validation.json +0 -0
  714. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/specs/strategy_comparison.json +0 -0
  715. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/test.py +0 -0
  716. {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/test_version_diagnosis.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.13.11.dev1
3
+ Version: 1.13.12.dev2
4
4
  Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
5
5
  Author-email: Juan Denis <juan@vene.co>
6
6
  License-Expression: MIT
@@ -24,7 +24,7 @@ Requires-Dist: openai>=1.55.0; extra == "openai"
24
24
  Provides-Extra: anthropic
25
25
  Requires-Dist: anthropic>=0.8.0; extra == "anthropic"
26
26
  Provides-Extra: google
27
- Requires-Dist: google-genai>=1.0.0; extra == "google"
27
+ Requires-Dist: google-genai>=1.56.0; extra == "google"
28
28
  Provides-Extra: groq
29
29
  Requires-Dist: groq>=0.4.0; extra == "groq"
30
30
  Provides-Extra: toon
@@ -1751,6 +1751,46 @@ if doc.found:
1751
1751
 
1752
1752
  Both helpers return plain dataclasses with no I/O of their own. See `examples/assistant_example.py` for the assistant + review-loop + extractor flow end-to-end.
1753
1753
 
1754
+ ### Gemini 4 Argon
1755
+
1756
+ Install or upgrade with `pip install -U "prompture[google]"` and set
1757
+ `GOOGLE_API_KEY` to a key for a billing-enabled Gemini API project.
1758
+
1759
+ ```python
1760
+ from prompture import Conversation
1761
+
1762
+ conv = Conversation(
1763
+ model_name="google/gemini-4-argon",
1764
+ options={"effort": "medium", "max_tokens": 32768},
1765
+ )
1766
+ print(conv.ask("Review this design and explain the tradeoffs: ..."))
1767
+ ```
1768
+
1769
+ Use `google_vertexai/gemini-4-argon` for Vertex AI, with
1770
+ `GOOGLE_VERTEX_PROJECT_ID`, Application Default Credentials, and
1771
+ `GOOGLE_VERTEX_LOCATION=global` (or a supported endpoint for your project).
1772
+ Both providers support synchronous and asynchronous conversations, tools,
1773
+ structured output, vision, and streaming. Prompture preserves signed Gemini
1774
+ response parts in conversation history; callers managing driver history directly
1775
+ must copy the response's `_google_parts` onto the corresponding assistant message.
1776
+
1777
+ Argon accepts `low`, `medium`, and `high` effort. Prompture maps `none` and
1778
+ `minimal` to `low`, and `xhigh` and `max` to `high`; it does not disable thinking.
1779
+ Explicit `generation_config.thinking_config` takes precedence. Sampling options
1780
+ (`temperature`, `top_p`, `top_k`) are omitted for this model.
1781
+
1782
+ `completion_tokens` includes billed thinking tokens; `reasoning_tokens` reports
1783
+ that subset. Cached input receives the implicit-cache discount. The local pricing
1784
+ catalog uses $2 input / $10 output / $0.10 cached input per million tokens through
1785
+ November 30, 2026, then switches to $4 / $20 / $0.20 on December 1 (UTC), without
1786
+ requiring a restart. There is no free API tier. See [Google's pricing](https://ai.google.dev/gemini-api/docs/pricing).
1787
+
1788
+ The catalog records the normal SDK output limit of 65,536 tokens, shared between
1789
+ thinking and the visible answer. The 1,048,576-token context includes input too.
1790
+ [Long decode](https://ai.google.dev/gemini-api/docs/generate-content/long-decode)
1791
+ requires `google-genai>=2.30.1` and a larger `max_tokens`; the baseline Google extra
1792
+ requires `>=1.56.0` for the thinking-level API.
1793
+
1754
1794
  ### Prompt Caching
1755
1795
 
1756
1796
  Prompt caching cuts input-token cost on the repeated prefix to ~10% of the
@@ -1632,6 +1632,46 @@ if doc.found:
1632
1632
 
1633
1633
  Both helpers return plain dataclasses with no I/O of their own. See `examples/assistant_example.py` for the assistant + review-loop + extractor flow end-to-end.
1634
1634
 
1635
+ ### Gemini 4 Argon
1636
+
1637
+ Install or upgrade with `pip install -U "prompture[google]"` and set
1638
+ `GOOGLE_API_KEY` to a key for a billing-enabled Gemini API project.
1639
+
1640
+ ```python
1641
+ from prompture import Conversation
1642
+
1643
+ conv = Conversation(
1644
+ model_name="google/gemini-4-argon",
1645
+ options={"effort": "medium", "max_tokens": 32768},
1646
+ )
1647
+ print(conv.ask("Review this design and explain the tradeoffs: ..."))
1648
+ ```
1649
+
1650
+ Use `google_vertexai/gemini-4-argon` for Vertex AI, with
1651
+ `GOOGLE_VERTEX_PROJECT_ID`, Application Default Credentials, and
1652
+ `GOOGLE_VERTEX_LOCATION=global` (or a supported endpoint for your project).
1653
+ Both providers support synchronous and asynchronous conversations, tools,
1654
+ structured output, vision, and streaming. Prompture preserves signed Gemini
1655
+ response parts in conversation history; callers managing driver history directly
1656
+ must copy the response's `_google_parts` onto the corresponding assistant message.
1657
+
1658
+ Argon accepts `low`, `medium`, and `high` effort. Prompture maps `none` and
1659
+ `minimal` to `low`, and `xhigh` and `max` to `high`; it does not disable thinking.
1660
+ Explicit `generation_config.thinking_config` takes precedence. Sampling options
1661
+ (`temperature`, `top_p`, `top_k`) are omitted for this model.
1662
+
1663
+ `completion_tokens` includes billed thinking tokens; `reasoning_tokens` reports
1664
+ that subset. Cached input receives the implicit-cache discount. The local pricing
1665
+ catalog uses $2 input / $10 output / $0.10 cached input per million tokens through
1666
+ November 30, 2026, then switches to $4 / $20 / $0.20 on December 1 (UTC), without
1667
+ requiring a restart. There is no free API tier. See [Google's pricing](https://ai.google.dev/gemini-api/docs/pricing).
1668
+
1669
+ The catalog records the normal SDK output limit of 65,536 tokens, shared between
1670
+ thinking and the visible answer. The 1,048,576-token context includes input too.
1671
+ [Long decode](https://ai.google.dev/gemini-api/docs/generate-content/long-decode)
1672
+ requires `google-genai>=2.30.1` and a larger `max_tokens`; the baseline Google extra
1673
+ requires `>=1.56.0` for the thinking-level API.
1674
+
1635
1675
  ### Prompt Caching
1636
1676
 
1637
1677
  Prompt caching cuts input-token cost on the repeated prefix to ~10% of the
@@ -0,0 +1 @@
1
+ 1.13.11
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.13.11.dev1'
22
- __version_tuple__ = version_tuple = (1, 13, 11, 'dev1')
21
+ __version__ = version = '1.13.12.dev2'
22
+ __version_tuple__ = version_tuple = (1, 13, 12, 'dev2')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -160,6 +160,7 @@ class AsyncConversation(ToolContextMixin):
160
160
 
161
161
  # Reasoning content from last response
162
162
  self._last_reasoning: str | None = None
163
+ self._last_google_parts: list[dict[str, Any]] | None = None
163
164
 
164
165
  # Optional before_turn hook (sync or async callable). Fires before
165
166
  # each driver call inside the tool loop.
@@ -208,6 +209,8 @@ class AsyncConversation(ToolContextMixin):
208
209
  msg: dict[str, Any] = {"role": "assistant", "content": content}
209
210
  if self._last_reasoning:
210
211
  msg["reasoning_content"] = self._last_reasoning
212
+ if self._last_google_parts is not None:
213
+ msg["_google_parts"] = self._last_google_parts
211
214
  return msg
212
215
 
213
216
  @property
@@ -550,6 +553,7 @@ class AsyncConversation(ToolContextMixin):
550
553
  resp = await self._driver.generate_messages_with_hooks(final_msgs, merged)
551
554
  text: str = resp.get("text", "")
552
555
  self._last_reasoning = resp.get("reasoning_content")
556
+ self._last_google_parts = resp.get("_google_parts")
553
557
  self._accumulate_usage(resp.get("meta", {}))
554
558
  self._messages.append(self._assistant_message(text))
555
559
  return text
@@ -601,8 +605,9 @@ class AsyncConversation(ToolContextMixin):
601
605
  self._usage["total_tokens"] += delta_tokens
602
606
  self._usage["cost"] += delta_cost
603
607
  self._usage["turns"] += 1
604
- if prompt_tokens:
605
- self._last_prompt_tokens = prompt_tokens
608
+ context_prompt_tokens = meta.get("initial_prompt_tokens", prompt_tokens)
609
+ if context_prompt_tokens:
610
+ self._last_prompt_tokens = context_prompt_tokens
606
611
  logger.debug(
607
612
  "[conversation] usage delta tokens=%d cost=%.6f | running total tokens=%d cost=%.6f turns=%d",
608
613
  delta_tokens,
@@ -627,6 +632,7 @@ class AsyncConversation(ToolContextMixin):
627
632
  dispatches to the async tool execution loop.
628
633
  """
629
634
  self._last_reasoning = None
635
+ self._last_google_parts = None
630
636
 
631
637
  # Route to appropriate tool handling
632
638
  if self._tools:
@@ -648,6 +654,7 @@ class AsyncConversation(ToolContextMixin):
648
654
  text: str = resp.get("text", "")
649
655
  meta = resp.get("meta", {})
650
656
  self._last_reasoning = resp.get("reasoning_content")
657
+ self._last_google_parts = resp.get("_google_parts")
651
658
 
652
659
  user_content = self._build_content_with_images(content, images)
653
660
  self._messages.append({"role": "user", "content": user_content})
@@ -689,6 +696,7 @@ class AsyncConversation(ToolContextMixin):
689
696
 
690
697
  if not tool_calls:
691
698
  self._last_reasoning = resp.get("reasoning_content")
699
+ self._last_google_parts = resp.get("_google_parts")
692
700
  self._messages.append(self._assistant_message(text))
693
701
  return text
694
702
 
@@ -711,6 +719,8 @@ class AsyncConversation(ToolContextMixin):
711
719
  # on subsequent requests (e.g. Moonshot reasoning models).
712
720
  if resp.get("reasoning_content") is not None:
713
721
  assistant_msg["reasoning_content"] = resp["reasoning_content"]
722
+ if resp.get("_google_parts") is not None:
723
+ assistant_msg["_google_parts"] = resp["_google_parts"]
714
724
 
715
725
  self._messages.append(assistant_msg)
716
726
  msgs.append(assistant_msg)
@@ -749,6 +759,7 @@ class AsyncConversation(ToolContextMixin):
749
759
  :meth:`Conversation.ask_with_tool_events`.
750
760
  """
751
761
  self._last_reasoning = None
762
+ self._last_google_parts = None
752
763
 
753
764
  if not self._tools:
754
765
  async for chunk in self.ask_stream(content, options, images=images):
@@ -790,6 +801,7 @@ class AsyncConversation(ToolContextMixin):
790
801
 
791
802
  if not tool_calls:
792
803
  self._last_reasoning = resp.get("reasoning_content")
804
+ self._last_google_parts = resp.get("_google_parts")
793
805
  self._messages.append(self._assistant_message(text))
794
806
  yield {"type": "text_delta", "text": text}
795
807
  return
@@ -811,6 +823,8 @@ class AsyncConversation(ToolContextMixin):
811
823
  ]
812
824
  if resp.get("reasoning_content") is not None:
813
825
  assistant_msg["reasoning_content"] = resp["reasoning_content"]
826
+ if resp.get("_google_parts") is not None:
827
+ assistant_msg["_google_parts"] = resp["_google_parts"]
814
828
 
815
829
  self._messages.append(assistant_msg)
816
830
  msgs.append(assistant_msg)
@@ -879,6 +893,7 @@ class AsyncConversation(ToolContextMixin):
879
893
  )
880
894
 
881
895
  self._last_reasoning = None
896
+ self._last_google_parts = None
882
897
 
883
898
  if not self._tools:
884
899
  async for chunk in self.ask_stream(content, options, images=images):
@@ -934,6 +949,7 @@ class AsyncConversation(ToolContextMixin):
934
949
  tool_calls_in_turn: list[dict[str, Any]] = []
935
950
  pending_tools: list[dict[str, Any]] = []
936
951
  turn_usage: dict[str, Any] = {}
952
+ google_parts: list[dict[str, Any]] | None = None
937
953
 
938
954
  tool_defs = self._active_tools().to_openai_format()
939
955
  stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
@@ -965,6 +981,7 @@ class AsyncConversation(ToolContextMixin):
965
981
  }
966
982
  )
967
983
  elif et == "message_stop":
984
+ google_parts = getattr(event, "provider_state", {}).get("_google_parts")
968
985
  turn_usage = dict(event.usage or {})
969
986
  self._driver._auto_record_usage(
970
987
  {"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
@@ -1014,6 +1031,9 @@ class AsyncConversation(ToolContextMixin):
1014
1031
  if full_thinking is not None:
1015
1032
  assistant_msg["reasoning_content"] = full_thinking
1016
1033
  self._last_reasoning = full_thinking
1034
+ if google_parts is not None:
1035
+ assistant_msg["_google_parts"] = google_parts
1036
+ self._last_google_parts = google_parts
1017
1037
 
1018
1038
  self._messages.append(assistant_msg)
1019
1039
  msgs.append(assistant_msg)
@@ -1296,6 +1316,7 @@ class AsyncConversation(ToolContextMixin):
1296
1316
  self._accumulate_usage(meta)
1297
1317
  if chunk.get("reasoning_content"):
1298
1318
  self._last_reasoning = chunk["reasoning_content"]
1319
+ self._last_google_parts = chunk.get("_google_parts")
1299
1320
  except Exception as exc:
1300
1321
  stream_error = exc
1301
1322
  elapsed_ms = (time.perf_counter() - t0) * 1000
@@ -1372,6 +1393,7 @@ class AsyncConversation(ToolContextMixin):
1372
1393
 
1373
1394
  self._check_budget()
1374
1395
  self._last_reasoning = None
1396
+ self._last_google_parts = None
1375
1397
 
1376
1398
  merged = {**self._options, **(options or {})}
1377
1399
 
@@ -1436,6 +1458,7 @@ class AsyncConversation(ToolContextMixin):
1436
1458
  text = resp.get("text", "")
1437
1459
  meta = resp.get("meta", {})
1438
1460
  self._last_reasoning = resp.get("reasoning_content")
1461
+ self._last_google_parts = resp.get("_google_parts")
1439
1462
 
1440
1463
  user_content = self._build_content_with_images(content, images)
1441
1464
  self._messages.append({"role": "user", "content": user_content})
@@ -160,6 +160,7 @@ class Conversation(ToolContextMixin):
160
160
 
161
161
  # Reasoning content from last response
162
162
  self._last_reasoning: str | None = None
163
+ self._last_google_parts: list[dict[str, Any]] | None = None
163
164
 
164
165
  # Optional callback fired before each driver call inside the tool
165
166
  # loop. Used by DeepAgent for summarization. The hook receives
@@ -210,6 +211,8 @@ class Conversation(ToolContextMixin):
210
211
  msg: dict[str, Any] = {"role": "assistant", "content": content}
211
212
  if self._last_reasoning:
212
213
  msg["reasoning_content"] = self._last_reasoning
214
+ if self._last_google_parts is not None:
215
+ msg["_google_parts"] = self._last_google_parts
213
216
  return msg
214
217
 
215
218
  @property
@@ -554,6 +557,7 @@ class Conversation(ToolContextMixin):
554
557
  resp = self._driver.generate_messages_with_hooks(final_msgs, merged)
555
558
  text: str = resp.get("text", "")
556
559
  self._last_reasoning = resp.get("reasoning_content")
560
+ self._last_google_parts = resp.get("_google_parts")
557
561
  self._accumulate_usage(resp.get("meta", {}))
558
562
  self._messages.append(self._assistant_message(text))
559
563
  return text
@@ -607,8 +611,9 @@ class Conversation(ToolContextMixin):
607
611
  self._usage["turns"] += 1
608
612
  # Track most recent prompt size so before_turn hooks know the
609
613
  # current context window without recomputing it.
610
- if prompt_tokens:
611
- self._last_prompt_tokens = prompt_tokens
614
+ context_prompt_tokens = meta.get("initial_prompt_tokens", prompt_tokens)
615
+ if context_prompt_tokens:
616
+ self._last_prompt_tokens = context_prompt_tokens
612
617
  logger.debug(
613
618
  "[conversation] usage delta tokens=%d cost=%.6f | running total tokens=%d cost=%.6f turns=%d",
614
619
  delta_tokens,
@@ -640,6 +645,7 @@ class Conversation(ToolContextMixin):
640
645
  base64 string, or :class:`ImageContent`).
641
646
  """
642
647
  self._last_reasoning = None
648
+ self._last_google_parts = None
643
649
 
644
650
  # Route to appropriate tool handling
645
651
  if self._tools:
@@ -661,6 +667,7 @@ class Conversation(ToolContextMixin):
661
667
  text: str = resp.get("text", "")
662
668
  meta = resp.get("meta", {})
663
669
  self._last_reasoning = resp.get("reasoning_content")
670
+ self._last_google_parts = resp.get("_google_parts")
664
671
 
665
672
  # Record in history — store content with images for context
666
673
  user_content = self._build_content_with_images(content, images)
@@ -705,6 +712,7 @@ class Conversation(ToolContextMixin):
705
712
  if not tool_calls:
706
713
  # No tool calls -> final response
707
714
  self._last_reasoning = resp.get("reasoning_content")
715
+ self._last_google_parts = resp.get("_google_parts")
708
716
  self._messages.append(self._assistant_message(text))
709
717
  return text
710
718
 
@@ -728,6 +736,8 @@ class Conversation(ToolContextMixin):
728
736
  # on subsequent requests (e.g. Moonshot reasoning models).
729
737
  if resp.get("reasoning_content") is not None:
730
738
  assistant_msg["reasoning_content"] = resp["reasoning_content"]
739
+ if resp.get("_google_parts") is not None:
740
+ assistant_msg["_google_parts"] = resp["_google_parts"]
731
741
 
732
742
  self._messages.append(assistant_msg)
733
743
  msgs.append(assistant_msg)
@@ -773,6 +783,7 @@ class Conversation(ToolContextMixin):
773
783
  provide real-time feedback when tools are registered.
774
784
  """
775
785
  self._last_reasoning = None
786
+ self._last_google_parts = None
776
787
 
777
788
  if not self._tools:
778
789
  # No tools — just stream directly
@@ -816,6 +827,7 @@ class Conversation(ToolContextMixin):
816
827
  if not tool_calls:
817
828
  # Final response — stream it if possible
818
829
  self._last_reasoning = resp.get("reasoning_content")
830
+ self._last_google_parts = resp.get("_google_parts")
819
831
  self._messages.append(self._assistant_message(text))
820
832
  # Yield final text as deltas (single chunk since we already have the full text)
821
833
  yield {"type": "text_delta", "text": text}
@@ -839,6 +851,8 @@ class Conversation(ToolContextMixin):
839
851
  ]
840
852
  if resp.get("reasoning_content") is not None:
841
853
  assistant_msg["reasoning_content"] = resp["reasoning_content"]
854
+ if resp.get("_google_parts") is not None:
855
+ assistant_msg["_google_parts"] = resp["_google_parts"]
842
856
 
843
857
  self._messages.append(assistant_msg)
844
858
  msgs.append(assistant_msg)
@@ -919,6 +933,7 @@ class Conversation(ToolContextMixin):
919
933
  )
920
934
 
921
935
  self._last_reasoning = None
936
+ self._last_google_parts = None
922
937
 
923
938
  if not self._tools:
924
939
  for chunk in self.ask_stream(content, options, images=images):
@@ -974,6 +989,7 @@ class Conversation(ToolContextMixin):
974
989
  tool_calls_in_turn: list[dict[str, Any]] = []
975
990
  pending_tools: list[dict[str, Any]] = []
976
991
  turn_usage: dict[str, Any] = {}
992
+ google_parts: list[dict[str, Any]] | None = None
977
993
  stop_reason: str = "end_turn"
978
994
 
979
995
  tool_defs = self._active_tools().to_openai_format()
@@ -1006,6 +1022,7 @@ class Conversation(ToolContextMixin):
1006
1022
  }
1007
1023
  )
1008
1024
  elif et == "message_stop":
1025
+ google_parts = getattr(event, "provider_state", {}).get("_google_parts")
1009
1026
  turn_usage = dict(event.usage or {})
1010
1027
  self._driver._auto_record_usage(
1011
1028
  {"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
@@ -1056,6 +1073,9 @@ class Conversation(ToolContextMixin):
1056
1073
  if full_thinking is not None:
1057
1074
  assistant_msg["reasoning_content"] = full_thinking
1058
1075
  self._last_reasoning = full_thinking
1076
+ if google_parts is not None:
1077
+ assistant_msg["_google_parts"] = google_parts
1078
+ self._last_google_parts = google_parts
1059
1079
 
1060
1080
  self._messages.append(assistant_msg)
1061
1081
  msgs.append(assistant_msg)
@@ -1331,6 +1351,7 @@ class Conversation(ToolContextMixin):
1331
1351
  self._accumulate_usage(meta)
1332
1352
  if chunk.get("reasoning_content"):
1333
1353
  self._last_reasoning = chunk["reasoning_content"]
1354
+ self._last_google_parts = chunk.get("_google_parts")
1334
1355
  except Exception as exc:
1335
1356
  stream_error = exc
1336
1357
  elapsed_ms = (time.perf_counter() - t0) * 1000
@@ -1496,6 +1517,7 @@ class Conversation(ToolContextMixin):
1496
1517
 
1497
1518
  self._check_budget()
1498
1519
  self._last_reasoning = None
1520
+ self._last_google_parts = None
1499
1521
 
1500
1522
  merged = {**self._options, **(options or {})}
1501
1523
 
@@ -1564,6 +1586,7 @@ class Conversation(ToolContextMixin):
1564
1586
  text = resp.get("text", "")
1565
1587
  meta = resp.get("meta", {})
1566
1588
  self._last_reasoning = resp.get("reasoning_content")
1589
+ self._last_google_parts = resp.get("_google_parts")
1567
1590
 
1568
1591
  # Store original content (without schema boilerplate) for cleaner context
1569
1592
  # Include images in history so subsequent turns can reference them
@@ -109,10 +109,12 @@ class MessageStop:
109
109
  """End of one assistant turn. ``stop_reason`` uses the shared vocabulary
110
110
  (``end_turn``, ``tool_use``, ``max_tokens``, ``content_filter``,
111
111
  ``error``); drivers preserve the provider's raw value in
112
- ``usage["raw_stop_reason"]``."""
112
+ ``usage["raw_stop_reason"]``. ``provider_state`` carries opaque, JSON-safe
113
+ response data that must survive in conversation history for the next turn."""
113
114
 
114
115
  stop_reason: str
115
116
  usage: dict[str, Any] = field(default_factory=dict)
117
+ provider_state: dict[str, Any] = field(default_factory=dict)
116
118
  event_type: Literal["message_stop"] = field(default="message_stop", init=False)
117
119
 
118
120
 
@@ -280,9 +280,11 @@ def companion(
280
280
  (their model traffic then passes through, or goes to any Prompture model),
281
281
  so the companion prefers the same port each time: 47811.
282
282
  """
283
+ import time
284
+
283
285
  from ..companion import Automations, CodingToolSource, CompanionServer, LedgerSource, running_instance
284
286
  from ..companion.memory import MemoryService
285
- from ..companion.server import DEFAULT_PORT
287
+ from ..companion.server import DEFAULT_PORT, instance_lock
286
288
  from ..companion.tool_routing import ToolRouting
287
289
 
288
290
  existing = running_instance()
@@ -297,6 +299,21 @@ def companion(
297
299
  if existing:
298
300
  click.echo(f"Prompture companion already running at {existing['url']} (pid {existing.get('pid')}).")
299
301
  return
302
+ # The quick check above misses a companion that is starting or too busy to
303
+ # answer in time; the lock doesn't, so two never run side by side.
304
+ lock = instance_lock()
305
+ deadline = time.monotonic() + 30
306
+ while lock is None:
307
+ existing = running_instance(timeout=5.0)
308
+ if existing:
309
+ click.echo(f"Prompture companion already running at {existing['url']} (pid {existing.get('pid')}).")
310
+ return
311
+ if time.monotonic() > deadline:
312
+ raise click.ClickException(
313
+ "Another Prompture companion is running but not answering; not starting a second one."
314
+ )
315
+ time.sleep(0.5)
316
+ lock = instance_lock()
300
317
 
301
318
  def make(on_port: int) -> CompanionServer:
302
319
  return CompanionServer(
@@ -47,7 +47,7 @@ import secrets
47
47
  import threading
48
48
  from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
49
49
  from pathlib import Path
50
- from typing import Any
50
+ from typing import IO, Any
51
51
  from urllib.parse import parse_qs, unquote, urlparse
52
52
 
53
53
  from .automations import AutomationError, Automations, roadmap_steps
@@ -63,6 +63,8 @@ from .tool_routing import RoutingError, ToolRouting
63
63
  logger = logging.getLogger("prompture.companion")
64
64
 
65
65
  STATE_FILE = Path.home() / ".prompture" / "companion.json"
66
+ #: Held by the running companion, so a second one never starts next to it.
67
+ LOCK_FILE = Path.home() / ".prompture" / "companion.lock"
66
68
  #: The port ``prompture companion`` asks for first, so routed CLIs find it at the same address.
67
69
  DEFAULT_PORT = 47811
68
70
  HEARTBEAT_SECONDS = 15.0
@@ -845,6 +847,32 @@ def running_instance(path: Path = STATE_FILE, timeout: float = 2.0) -> dict[str,
845
847
  conn.close()
846
848
 
847
849
 
850
+ def instance_lock(path: Path = LOCK_FILE) -> IO[bytes] | None:
851
+ """Claim the one-companion-per-user lock; ``None`` when another process holds it.
852
+
853
+ Keep the returned file open while serving. The OS drops the lock when the
854
+ process ends, however it ends, so a crash never leaves it stale. Unlike
855
+ :func:`running_instance` this doesn't depend on a busy companion answering
856
+ in time, so a slow one is never mistaken for a missing one.
857
+ """
858
+ path.parent.mkdir(parents=True, exist_ok=True)
859
+ fh = open(path, "a+b") # noqa: SIM115 - held open for the life of the process
860
+ try:
861
+ if os.name == "nt":
862
+ import msvcrt
863
+
864
+ fh.seek(0)
865
+ msvcrt.locking(fh.fileno(), msvcrt.LK_NBLCK, 1)
866
+ else:
867
+ import fcntl
868
+
869
+ fcntl.flock(fh.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
870
+ except OSError:
871
+ fh.close()
872
+ return None
873
+ return fh
874
+
875
+
848
876
  def process_alive(pid: int) -> bool:
849
877
  """Whether *pid* is a running process (best effort, no extra dependencies)."""
850
878
  if pid <= 0:
@@ -8,11 +8,10 @@ the same thing. Each driver family puts it where its API reads it:
8
8
  * ``"openai"``: ``reasoning_effort`` on Chat Completions style APIs (OpenAI, Azure, Groq, xAI,
9
9
  OpenAI-compatible servers).
10
10
  * ``"openrouter"``: ``reasoning.effort``.
11
- * ``"google"``: ``thinking_config.thinking_level``, which takes only ``low`` and ``high``.
11
+ * ``"google"``: ``thinking_config.thinking_level`` (model-dependent).
12
12
 
13
- The value is passed on as given, so a model that does not take a level answers with the
14
- provider's own error; the model catalogue lists the levels each model takes
15
- (``model_rates.get_model_info(...)["reasoning_options"]``).
13
+ Explicit provider-specific fields take precedence. Google maps generic effort to
14
+ the model's thinking levels; other providers validate the supplied value themselves.
16
15
  """
17
16
 
18
17
  from __future__ import annotations
@@ -30,12 +29,14 @@ def requested_effort(options: dict[str, Any] | None) -> str | None:
30
29
  return str(value) if value else None
31
30
 
32
31
 
33
- def google_thinking_level(effort: str) -> str:
34
- """Gemini's two thinking levels for an effort: up to medium is ``low``, above is ``high``."""
32
+ def google_thinking_level(effort: str, model: str = "") -> str:
33
+ """Map effort without sending unsupported levels to older Gemini models."""
34
+ if model.removeprefix("models/") == "gemini-4-argon" and effort == "medium":
35
+ return "medium"
35
36
  return "low" if effort in ("none", "minimal", "low", "medium") else "high"
36
37
 
37
38
 
38
- def apply_effort(request: dict[str, Any], options: dict[str, Any] | None, style: str) -> None:
39
+ def apply_effort(request: dict[str, Any], options: dict[str, Any] | None, style: str, *, model: str = "") -> None:
39
40
  """Put the requested effort into ``request`` the way ``style``'s API takes it."""
40
41
  effort = requested_effort(options)
41
42
  if effort is None:
@@ -48,7 +49,7 @@ def apply_effort(request: dict[str, Any], options: dict[str, Any] | None, style:
48
49
  reasoning.setdefault("effort", effort)
49
50
  elif style == "google":
50
51
  thinking = request.setdefault("thinking_config", {})
51
- if isinstance(thinking, dict):
52
- thinking.setdefault("thinking_level", google_thinking_level(effort))
52
+ if isinstance(thinking, dict) and "thinking_budget" not in thinking:
53
+ thinking.setdefault("thinking_level", google_thinking_level(effort, model))
53
54
  else:
54
55
  raise ValueError(f"Unknown effort style: {style!r}")