prompture 1.11.1.dev1__tar.gz → 1.11.2.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 (537) hide show
  1. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.env.copy +4 -0
  2. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/PKG-INFO +1 -1
  3. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/__init__.py +1 -0
  4. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/_version.py +2 -2
  5. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/assistant.py +55 -0
  6. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/async_conversation.py +100 -27
  7. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/conversation.py +101 -28
  8. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_openai_compat_stream.py +48 -4
  9. prompture-1.11.2.dev2/prompture/drivers/_openai_responses.py +288 -0
  10. prompture-1.11.2.dev2/prompture/drivers/_usage_reporting.py +175 -0
  11. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_base.py +19 -4
  12. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_claude_driver.py +34 -80
  13. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_driver.py +73 -33
  14. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/base.py +19 -4
  15. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/claude_driver.py +50 -85
  16. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_driver.py +66 -28
  17. prompture-1.11.2.dev2/prompture/execution/__init__.py +259 -0
  18. prompture-1.11.2.dev2/prompture/execution/context.py +1016 -0
  19. prompture-1.11.2.dev2/prompture/execution/context_eval.py +294 -0
  20. prompture-1.11.2.dev2/prompture/execution/data/document_qa_policies.json +320 -0
  21. prompture-1.11.2.dev2/prompture/execution/data/extraction_contacts.json +314 -0
  22. prompture-1.11.2.dev2/prompture/execution/data/tool_task_inventory.json +277 -0
  23. prompture-1.11.2.dev2/prompture/execution/fixtures.py +294 -0
  24. prompture-1.11.2.dev2/prompture/execution/gates.py +360 -0
  25. prompture-1.11.2.dev2/prompture/execution/harness.py +577 -0
  26. prompture-1.11.2.dev2/prompture/execution/improve/__init__.py +92 -0
  27. prompture-1.11.2.dev2/prompture/execution/improve/candidates.py +344 -0
  28. prompture-1.11.2.dev2/prompture/execution/improve/optimizer.py +292 -0
  29. prompture-1.11.2.dev2/prompture/execution/improve/promotion.py +332 -0
  30. prompture-1.11.2.dev2/prompture/execution/improve/scorecard.py +252 -0
  31. prompture-1.11.2.dev2/prompture/execution/integration.py +295 -0
  32. prompture-1.11.2.dev2/prompture/execution/outcomes.py +550 -0
  33. prompture-1.11.2.dev2/prompture/execution/policy.py +835 -0
  34. prompture-1.11.2.dev2/prompture/execution/sandbox.py +527 -0
  35. prompture-1.11.2.dev2/prompture/execution/scoring.py +276 -0
  36. prompture-1.11.2.dev2/prompture/execution/strategies/__init__.py +55 -0
  37. prompture-1.11.2.dev2/prompture/execution/strategies/base.py +499 -0
  38. prompture-1.11.2.dev2/prompture/execution/strategies/critique.py +383 -0
  39. prompture-1.11.2.dev2/prompture/execution/strategies/direct.py +210 -0
  40. prompture-1.11.2.dev2/prompture/execution/strategies/registry.py +83 -0
  41. prompture-1.11.2.dev2/prompture/execution/strategies/retrieve.py +354 -0
  42. prompture-1.11.2.dev2/prompture/execution/types.py +561 -0
  43. prompture-1.11.2.dev2/prompture/extraction/_usage.py +107 -0
  44. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/async_core.py +10 -2
  45. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/core.py +7 -1
  46. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/__init__.py +30 -0
  47. prompture-1.11.2.dev2/prompture/infra/billing.py +412 -0
  48. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/budget.py +66 -31
  49. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/cost_mixin.py +159 -42
  50. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/pricing.py +42 -1
  51. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/session.py +33 -3
  52. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/settings.py +5 -0
  53. prompture-1.11.2.dev2/prompture/infra/token_counting.py +220 -0
  54. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/tracker.py +256 -23
  55. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/serialization.py +10 -2
  56. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/__init__.py +37 -0
  57. prompture-1.11.2.dev2/prompture/workflow/recovery.py +1098 -0
  58. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/PKG-INFO +1 -1
  59. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/SOURCES.txt +32 -0
  60. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture_cost_tracking.md +120 -9
  61. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/pyproject.toml +2 -0
  62. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-driver/SKILL.md +0 -0
  63. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-driver/references/driver-template.md +0 -0
  64. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-example/SKILL.md +0 -0
  65. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-field/SKILL.md +0 -0
  66. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-persona/SKILL.md +0 -0
  67. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-test/SKILL.md +0 -0
  68. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-tool/SKILL.md +0 -0
  69. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/create-pr/SKILL.md +0 -0
  70. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/run-tests/SKILL.md +0 -0
  71. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  72. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/update-pricing/SKILL.md +0 -0
  73. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/FUNDING.yml +0 -0
  74. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  75. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  76. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  77. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  78. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/scripts/update_docs_version.py +0 -0
  79. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/scripts/update_wrapper_version.py +0 -0
  80. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/dev.yml +0 -0
  81. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/documentation.yml +0 -0
  82. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/pricing-freshness.yml +0 -0
  83. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/publish.yml +0 -0
  84. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/security.yml +0 -0
  85. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.safety-project.ini +0 -0
  86. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/AGENTS.md +0 -0
  87. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/BREAKING_CHANGES.md +0 -0
  88. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/CLAUDE.md +0 -0
  89. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/CONTRIBUTING.md +0 -0
  90. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/LICENSE +0 -0
  91. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/MANIFEST.in +0 -0
  92. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/README.md +0 -0
  93. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/ROADMAP.md +0 -0
  94. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/SECURITY.md +0 -0
  95. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/VERSION +0 -0
  96. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/dev.ps1 +0 -0
  97. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/dev.sh +0 -0
  98. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/mypy_errors.txt +0 -0
  99. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/README.md +0 -0
  100. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/README.md +0 -0
  101. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  102. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/pyproject.toml +0 -0
  103. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/test.py +0 -0
  104. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/README.md +0 -0
  105. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  106. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/pyproject.toml +0 -0
  107. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/test.py +0 -0
  108. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/_internal/__init__.py +0 -0
  109. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/_internal/json_encoder.py +0 -0
  110. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/__init__.py +0 -0
  111. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/agent.py +0 -0
  112. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/async_agent.py +0 -0
  113. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/async_deep_agent.py +0 -0
  114. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/__init__.py +0 -0
  115. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/planner.py +0 -0
  116. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/subagents.py +0 -0
  117. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/summarizer.py +0 -0
  118. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/vfs.py +0 -0
  119. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep_agent.py +0 -0
  120. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep_prompts.py +0 -0
  121. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep_state.py +0 -0
  122. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/live_events.py +0 -0
  123. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/persona.py +0 -0
  124. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/review_loop.py +0 -0
  125. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/simulated_tools.py +0 -0
  126. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/skill_miner.py +0 -0
  127. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/skills.py +0 -0
  128. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/tool_grammars.py +0 -0
  129. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/tools_schema.py +0 -0
  130. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/types.py +0 -0
  131. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/aio/__init__.py +0 -0
  132. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/bridges/__init__.py +0 -0
  133. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/bridges/tukuy_backend.py +0 -0
  134. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/__init__.py +0 -0
  135. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/core.py +0 -0
  136. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/stores.py +0 -0
  137. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/types.py +0 -0
  138. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/citations/__init__.py +0 -0
  139. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/citations/core.py +0 -0
  140. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/citations/types.py +0 -0
  141. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/__init__.py +0 -0
  142. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/cli.py +0 -0
  143. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/formatters.py +0 -0
  144. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/runner.py +0 -0
  145. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/server.py +0 -0
  146. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/__init__.py +0 -0
  147. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/dedup.py +0 -0
  148. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/evol.py +0 -0
  149. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/filters.py +0 -0
  150. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/formats.py +0 -0
  151. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/schemas.py +0 -0
  152. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/seed.py +0 -0
  153. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/synth.py +0 -0
  154. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/__init__.py +0 -0
  155. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_media_usage.py +0 -0
  156. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_openai_compat.py +0 -0
  157. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_prompt_cache.py +0 -0
  158. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_prompted_tool_stream.py +0 -0
  159. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/aggregator_base.py +0 -0
  160. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/airllm_driver.py +0 -0
  161. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/assemblyai_stt_driver.py +0 -0
  162. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_aggregator_base.py +0 -0
  163. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_airllm_driver.py +0 -0
  164. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
  165. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_azure_driver.py +0 -0
  166. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_bedrock_driver.py +0 -0
  167. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  168. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cachibot_driver.py +0 -0
  169. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
  170. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cohere_driver.py +0 -0
  171. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  172. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  173. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
  174. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
  175. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_deepseek_driver.py +0 -0
  176. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
  177. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
  178. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_embedding_base.py +0 -0
  179. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  180. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  181. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_google_driver.py +0 -0
  182. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  183. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_google_vertexai_driver.py +0 -0
  184. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_grok_driver.py +0 -0
  185. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
  186. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  187. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_groq_driver.py +0 -0
  188. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_hugging_driver.py +0 -0
  189. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  190. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_img_gen_base.py +0 -0
  191. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  192. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  193. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  194. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  195. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_lmstudio_driver.py +0 -0
  196. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_local_http_driver.py +0 -0
  197. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  198. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_minimax_driver.py +0 -0
  199. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  200. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mistral_driver.py +0 -0
  201. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  202. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_modelscope_driver.py +0 -0
  203. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_moonshot_driver.py +0 -0
  204. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
  205. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  206. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  207. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  208. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_ollama_driver.py +0 -0
  209. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  210. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_compatible_driver.py +0 -0
  211. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_embedding_driver.py +0 -0
  212. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
  213. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  214. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_stt_driver.py +0 -0
  215. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_tts_driver.py +0 -0
  216. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openrouter_driver.py +0 -0
  217. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  218. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_registry.py +0 -0
  219. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  220. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_runway_tts_driver.py +0 -0
  221. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  222. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  223. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_stt_base.py +0 -0
  224. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_tts_base.py +0 -0
  225. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_video_gen_base.py +0 -0
  226. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  227. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  228. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_zai_driver.py +0 -0
  229. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/audio_registry.py +0 -0
  230. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/azure_config.py +0 -0
  231. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/azure_driver.py +0 -0
  232. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/bedrock_driver.py +0 -0
  233. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  234. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cachibot_driver.py +0 -0
  235. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cartesia_tts_driver.py +0 -0
  236. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cohere_driver.py +0 -0
  237. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cohere_embedding_driver.py +0 -0
  238. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cohere_rerank_driver.py +0 -0
  239. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/deepgram_stt_driver.py +0 -0
  240. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/deepgram_tts_driver.py +0 -0
  241. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/deepseek_driver.py +0 -0
  242. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/driver_registry.py +0 -0
  243. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
  244. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
  245. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/embedding_base.py +0 -0
  246. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/embedding_registry.py +0 -0
  247. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/fal_img_gen_driver.py +0 -0
  248. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/fal_video_gen_driver.py +0 -0
  249. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/google_driver.py +0 -0
  250. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/google_img_gen_driver.py +0 -0
  251. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/google_vertexai_driver.py +0 -0
  252. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/grok_driver.py +0 -0
  253. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/grok_img_gen_driver.py +0 -0
  254. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/grok_video_gen_driver.py +0 -0
  255. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/groq_driver.py +0 -0
  256. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/hugging_driver.py +0 -0
  257. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  258. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/img_gen_base.py +0 -0
  259. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/img_gen_registry.py +0 -0
  260. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/jina_embedding_driver.py +0 -0
  261. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/jina_rerank_driver.py +0 -0
  262. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/job_runner.py +0 -0
  263. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/kling_img_gen_driver.py +0 -0
  264. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/kling_video_gen_driver.py +0 -0
  265. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/lipsync_base.py +0 -0
  266. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/lipsync_registry.py +0 -0
  267. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/lmstudio_driver.py +0 -0
  268. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/local_http_driver.py +0 -0
  269. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/luma_video_gen_driver.py +0 -0
  270. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/media_capabilities.py +0 -0
  271. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/minimax_driver.py +0 -0
  272. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  273. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mistral_driver.py +0 -0
  274. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mistral_moderation_driver.py +0 -0
  275. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/modelscope_driver.py +0 -0
  276. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/moderation_base.py +0 -0
  277. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/moderation_registry.py +0 -0
  278. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/moonshot_driver.py +0 -0
  279. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/muapi_aggregator_driver.py +0 -0
  280. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/music_base.py +0 -0
  281. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/music_registry.py +0 -0
  282. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  283. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  284. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/nomic_embedding_driver.py +0 -0
  285. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/ollama_driver.py +0 -0
  286. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/ollama_embedding_driver.py +0 -0
  287. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_compatible_driver.py +0 -0
  288. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_embedding_driver.py +0 -0
  289. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_img_gen_driver.py +0 -0
  290. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_moderation_driver.py +0 -0
  291. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_stt_driver.py +0 -0
  292. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_tts_driver.py +0 -0
  293. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openrouter_driver.py +0 -0
  294. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/pika_video_gen_driver.py +0 -0
  295. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/provider_branding.py +0 -0
  296. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/provider_descriptors.py +0 -0
  297. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/registry.py +0 -0
  298. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/rerank_base.py +0 -0
  299. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/rerank_registry.py +0 -0
  300. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  301. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_capabilities.py +0 -0
  302. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_img_gen_driver.py +0 -0
  303. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_tts_driver.py +0 -0
  304. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_video_gen_driver.py +0 -0
  305. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/stability_img_gen_driver.py +0 -0
  306. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/stt_base.py +0 -0
  307. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/tts_base.py +0 -0
  308. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/vertex_img_gen_driver.py +0 -0
  309. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/video_gen_base.py +0 -0
  310. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/video_gen_registry.py +0 -0
  311. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/vision_helpers.py +0 -0
  312. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/voyage_embedding_driver.py +0 -0
  313. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/voyage_rerank_driver.py +0 -0
  314. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/zai_driver.py +0 -0
  315. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/__init__.py +0 -0
  316. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/base.py +0 -0
  317. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/faithfulness.py +0 -0
  318. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/judge.py +0 -0
  319. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/pairwise.py +0 -0
  320. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/self_consistency.py +0 -0
  321. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/exceptions.py +0 -0
  322. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/__init__.py +0 -0
  323. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/code_extraction.py +0 -0
  324. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/few_shot.py +0 -0
  325. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/fields.py +0 -0
  326. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/reasoning.py +0 -0
  327. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/strategy.py +0 -0
  328. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/streaming.py +0 -0
  329. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/tools.py +0 -0
  330. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/tukuy_bridge.py +0 -0
  331. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/validator.py +0 -0
  332. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/__init__.py +0 -0
  333. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/async_groups.py +0 -0
  334. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/consensus.py +0 -0
  335. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/debate.py +0 -0
  336. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/groups.py +0 -0
  337. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/types.py +0 -0
  338. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/__init__.py +0 -0
  339. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/enhance.py +0 -0
  340. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/negative.py +0 -0
  341. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/set_planner.py +0 -0
  342. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/style_presets.py +0 -0
  343. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/cache.py +0 -0
  344. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/callbacks.py +0 -0
  345. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/capabilities.py +0 -0
  346. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/coding_agent_events.py +0 -0
  347. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/coding_agent_specs.py +0 -0
  348. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/coding_agents.py +0 -0
  349. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/discovery.py +0 -0
  350. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/ledger.py +0 -0
  351. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/logging.py +0 -0
  352. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/media_pricing.py +0 -0
  353. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/media_rates.json +0 -0
  354. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/model_rates.py +0 -0
  355. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/provider_env.py +0 -0
  356. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/anthropic.json +0 -0
  357. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/azure.json +0 -0
  358. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/bedrock.json +0 -0
  359. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/cerebras.json +0 -0
  360. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/cohere.json +0 -0
  361. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/deepinfra.json +0 -0
  362. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/deepseek.json +0 -0
  363. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/fireworks.json +0 -0
  364. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/google.json +0 -0
  365. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/google_vertexai.json +0 -0
  366. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/groq.json +0 -0
  367. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/jina.json +0 -0
  368. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/mistral.json +0 -0
  369. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/mixedbread.json +0 -0
  370. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/moonshot.json +0 -0
  371. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/nomic.json +0 -0
  372. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/nvidia.json +0 -0
  373. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/openai.json +0 -0
  374. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/openrouter.json +0 -0
  375. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/perplexity.json +0 -0
  376. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/sambanova.json +0 -0
  377. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/siliconflow.json +0 -0
  378. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/together.json +0 -0
  379. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/voyage.json +0 -0
  380. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/xai.json +0 -0
  381. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/tukuy_backend.py +0 -0
  382. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/__init__.py +0 -0
  383. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/chunking.py +0 -0
  384. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/detect.py +0 -0
  385. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/document.py +0 -0
  386. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/__init__.py +0 -0
  387. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/base.py +0 -0
  388. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/csv_parser.py +0 -0
  389. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/docx.py +0 -0
  390. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/html.py +0 -0
  391. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/markdown.py +0 -0
  392. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/pdf.py +0 -0
  393. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/xlsx.py +0 -0
  394. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/integrations/__init__.py +0 -0
  395. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/integrations/mcp_bridge.py +0 -0
  396. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/integrations/tukuy_bridge.py +0 -0
  397. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/jobs.py +0 -0
  398. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/__init__.py +0 -0
  399. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/core.py +0 -0
  400. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/stores.py +0 -0
  401. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/types.py +0 -0
  402. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/__init__.py +0 -0
  403. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/client.py +0 -0
  404. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/server.py +0 -0
  405. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/tools.py +0 -0
  406. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/__init__.py +0 -0
  407. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/agent_tools.py +0 -0
  408. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/audio.py +0 -0
  409. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/hosting.py +0 -0
  410. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/image.py +0 -0
  411. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/video.py +0 -0
  412. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/01-why-prompture.md +0 -0
  413. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/02-installation.md +0 -0
  414. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/03-quickstart.md +0 -0
  415. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/04-toon-input.md +0 -0
  416. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/05-test-harness.md +0 -0
  417. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/06-stability.md +0 -0
  418. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/07-migration.md +0 -0
  419. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/__init__.py +0 -0
  420. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/history.py +0 -0
  421. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/store.py +0 -0
  422. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/__init__.py +0 -0
  423. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/pipeline.py +0 -0
  424. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/resolver.py +0 -0
  425. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/routing.py +0 -0
  426. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/__init__.py +0 -0
  427. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/base.py +0 -0
  428. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/__init__.py +0 -0
  429. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/_aliases.py +0 -0
  430. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  431. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/audio_plugin.py +0 -0
  432. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  433. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  434. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/extras_plugin.py +0 -0
  435. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/google_plugin.py +0 -0
  436. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/image_plugin.py +0 -0
  437. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/local_plugin.py +0 -0
  438. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  439. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/openai_plugin.py +0 -0
  440. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/video_plugin.py +0 -0
  441. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/discovery.py +0 -0
  442. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/py.typed +0 -0
  443. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/__init__.py +0 -0
  444. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/__init__.py +0 -0
  445. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/base.py +0 -0
  446. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/character.py +0 -0
  447. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/chunker_registry.py +0 -0
  448. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/contextual.py +0 -0
  449. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/markdown.py +0 -0
  450. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/recursive.py +0 -0
  451. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/semantic.py +0 -0
  452. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/token.py +0 -0
  453. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/documents.py +0 -0
  454. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loader_registry.py +0 -0
  455. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/__init__.py +0 -0
  456. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/csv_loader.py +0 -0
  457. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/docx_loader.py +0 -0
  458. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/epub_loader.py +0 -0
  459. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/html_loader.py +0 -0
  460. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/json_loader.py +0 -0
  461. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/markdown_loader.py +0 -0
  462. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/pdf_loader.py +0 -0
  463. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/text_loader.py +0 -0
  464. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/xlsx_loader.py +0 -0
  465. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/pipeline.py +0 -0
  466. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/__init__.py +0 -0
  467. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/_fusion.py +0 -0
  468. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/base.py +0 -0
  469. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/hybrid.py +0 -0
  470. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/hyde.py +0 -0
  471. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/mmr.py +0 -0
  472. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/multi_query.py +0 -0
  473. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/retriever_registry.py +0 -0
  474. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/similarity.py +0 -0
  475. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/step_back.py +0 -0
  476. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/__init__.py +0 -0
  477. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/base.py +0 -0
  478. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/chroma.py +0 -0
  479. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/faiss.py +0 -0
  480. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/pgvector.py +0 -0
  481. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/pinecone.py +0 -0
  482. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/qdrant.py +0 -0
  483. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
  484. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/weaviate.py +0 -0
  485. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/__init__.py +0 -0
  486. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/detector.py +0 -0
  487. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/evaluator.py +0 -0
  488. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/markers.py +0 -0
  489. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/__init__.py +0 -0
  490. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/generator.py +0 -0
  491. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  492. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/README.md.j2 +0 -0
  493. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/config.py.j2 +0 -0
  494. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/env.example.j2 +0 -0
  495. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/main.py.j2 +0 -0
  496. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/models.py.j2 +0 -0
  497. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  498. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/security/__init__.py +0 -0
  499. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/security/injection.py +0 -0
  500. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/security/redaction.py +0 -0
  501. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/__init__.py +0 -0
  502. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/core.py +0 -0
  503. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/stores.py +0 -0
  504. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/types.py +0 -0
  505. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/__init__.py +0 -0
  506. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/environment.py +0 -0
  507. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/memory.py +0 -0
  508. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/scheduler.py +0 -0
  509. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/swarm.py +0 -0
  510. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/swarm_agent.py +0 -0
  511. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/types.py +0 -0
  512. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/testing/__init__.py +0 -0
  513. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/testing/driver_contract.py +0 -0
  514. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/tools/__init__.py +0 -0
  515. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/tools/code_exec.py +0 -0
  516. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/tools/web_search.py +0 -0
  517. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/architect.py +0 -0
  518. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/engine.py +0 -0
  519. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/errors.py +0 -0
  520. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/model.py +0 -0
  521. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/nodes.py +0 -0
  522. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/references.py +0 -0
  523. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/registry.py +0 -0
  524. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/scheduler.py +0 -0
  525. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/state.py +0 -0
  526. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/dependency_links.txt +0 -0
  527. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/entry_points.txt +0 -0
  528. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/requires.txt +0 -0
  529. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/top_level.txt +0 -0
  530. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/requirements.txt +0 -0
  531. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/scripts/check_pricing_freshness.py +0 -0
  532. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/setup.cfg +0 -0
  533. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/specs/basic_extraction.json +0 -0
  534. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/specs/schema_validation.json +0 -0
  535. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/specs/strategy_comparison.json +0 -0
  536. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/test.py +0 -0
  537. {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/test_version_diagnosis.py +0 -0
@@ -9,10 +9,14 @@ AI_PROVIDER=ollama
9
9
  # ─── OpenAI ──────────────────────────────────────────────────────────────────
10
10
  OPENAI_API_KEY=your-openai-api-key
11
11
  OPENAI_MODEL=gpt-4o-mini
12
+ # Optional: only used by explicit BillingClient report requests.
13
+ OPENAI_ADMIN_KEY=
12
14
 
13
15
  # ─── Claude (Anthropic) ─────────────────────────────────────────────────────
14
16
  CLAUDE_API_KEY=your-claude-api-key
15
17
  CLAUDE_MODEL=claude-haiku-4-5-20251001
18
+ # Optional organization reporting credential, separate from CLAUDE_API_KEY.
19
+ ANTHROPIC_ADMIN_KEY=
16
20
 
17
21
  # ─── Ollama (local) ─────────────────────────────────────────────────────────
18
22
  OLLAMA_ENDPOINT=http://localhost:11434
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.11.1.dev1
3
+ Version: 1.11.2.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
@@ -11,6 +11,7 @@ except ImportError: # tukuy not installed
11
11
  create_tukuy_backend = None # type: ignore[assignment]
12
12
  from . import eval as eval
13
13
  from . import (
14
+ execution,
14
15
  jobs,
15
16
  mcp,
16
17
  plugins,
@@ -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.11.1.dev1'
22
- __version_tuple__ = version_tuple = (1, 11, 1, 'dev1')
21
+ __version__ = version = '1.11.2.dev2'
22
+ __version_tuple__ = version_tuple = (1, 11, 2, 'dev2')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -464,6 +464,61 @@ class Assistant:
464
464
  raw=result,
465
465
  )
466
466
 
467
+ # ----- execution strategies -----------------------------------------
468
+
469
+ def execution_request(self, prompt: str, **kwargs: Any) -> Any:
470
+ """Build an :class:`~prompture.execution.types.ExecutionRequest` from this bundle.
471
+
472
+ Use it when you want to inspect or adjust the request before running a
473
+ strategy. See :func:`prompture.execution.integration.request_from_assistant`
474
+ for the accepted keyword arguments (``category``, ``output_model``,
475
+ ``passages``, ``retriever``, ``limits``, ``allowed_tools``, ``variables``).
476
+ """
477
+ from ..execution.integration import request_from_assistant
478
+
479
+ return request_from_assistant(self, prompt, **kwargs)
480
+
481
+ def run_strategy(self, prompt: str, strategy: Any = "direct", **kwargs: Any) -> Any:
482
+ """Run this assistant's persona/skills/tools through an execution strategy.
483
+
484
+ This is an opt-in alternative to :meth:`arun`, not a replacement:
485
+ :meth:`arun` keeps returning an :class:`AssistantResult` from the agent
486
+ loop, while this returns an
487
+ :class:`~prompture.execution.types.ExecutionResult` with validation,
488
+ evidence, step records and full usage accounting.
489
+
490
+ Args:
491
+ prompt: The task.
492
+ strategy: A registered strategy name (``"direct"``,
493
+ ``"retrieve_verify"``, ``"draft_critique"``) or a pre-built
494
+ :class:`~prompture.execution.strategies.base.ExecutionStrategy`.
495
+ **kwargs: Forwarded to
496
+ :func:`~prompture.execution.integration.request_from_assistant`.
497
+
498
+ Example::
499
+
500
+ result = assistant.run_strategy("Summarise the policy", strategy="direct")
501
+ print(result.termination.value, result.usage.cost_complete)
502
+ """
503
+ from ..execution.integration import resolve_strategy_instance
504
+
505
+ request = self.execution_request(prompt, **kwargs)
506
+ instance = resolve_strategy_instance(strategy)
507
+ if instance.model is None and not request.model:
508
+ raise ValueError(
509
+ f"Assistant {self.name!r} has no model and the strategy has no default; "
510
+ "set `model=` on one of them."
511
+ )
512
+ return instance.run(request)
513
+
514
+ async def arun_strategy(self, prompt: str, strategy: Any = "direct", **kwargs: Any) -> Any:
515
+ """Async counterpart to :meth:`run_strategy`."""
516
+ from ..execution.integration import resolve_strategy_instance
517
+
518
+ request = self.execution_request(prompt, **kwargs)
519
+ instance = resolve_strategy_instance(strategy)
520
+ return await instance.arun(request)
521
+
467
522
  # ----- sync convenience --------------------------------------------
468
523
 
469
524
  def run(self, prompt: str, **kwargs: Any) -> AssistantResult:
@@ -597,6 +597,9 @@ class AsyncConversation:
597
597
  return msgs
598
598
 
599
599
  def _accumulate_usage(self, meta: dict[str, Any]) -> None:
600
+ from ..infra.tracker import accumulate_usage_details
601
+
602
+ accumulate_usage_details(self._usage, meta)
600
603
  delta_tokens = meta.get("total_tokens", 0)
601
604
  delta_cost = meta.get("cost", 0.0)
602
605
  prompt_tokens = meta.get("prompt_tokens", 0)
@@ -943,32 +946,73 @@ class AsyncConversation:
943
946
  turn_usage: dict[str, Any] = {}
944
947
 
945
948
  stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
946
- async for event in stream:
947
- yield event
948
- et = getattr(event, "event_type", None)
949
- if et == "text_delta":
950
- assistant_text_parts.append(event.text)
951
- elif et == "thinking_delta":
952
- assistant_thinking_parts.append(event.text)
953
- elif et == "tool_use_stop":
954
- tool_use_id = event.id or f"call_{uuid.uuid4().hex}"
955
- pending_tools.append(
956
- {
957
- "id": tool_use_id,
958
- "name": event.name,
959
- "arguments": event.input,
960
- "truncated": getattr(event, "truncated", False),
961
- }
962
- )
963
- tool_calls_in_turn.append(
964
- {
965
- "id": tool_use_id,
966
- "type": "function",
967
- "function": {"name": event.name, "arguments": json.dumps(event.input)},
968
- }
949
+ stream_started = time.perf_counter()
950
+ recorded = False
951
+ stream_error = None
952
+ try:
953
+ async for event in stream:
954
+ et = getattr(event, "event_type", None)
955
+ if et == "text_delta":
956
+ assistant_text_parts.append(event.text)
957
+ elif et == "thinking_delta":
958
+ assistant_thinking_parts.append(event.text)
959
+ elif et == "tool_use_stop":
960
+ tool_use_id = event.id or f"call_{uuid.uuid4().hex}"
961
+ pending_tools.append(
962
+ {
963
+ "id": tool_use_id,
964
+ "name": event.name,
965
+ "arguments": event.input,
966
+ "truncated": getattr(event, "truncated", False),
967
+ }
968
+ )
969
+ tool_calls_in_turn.append(
970
+ {
971
+ "id": tool_use_id,
972
+ "type": "function",
973
+ "function": {"name": event.name, "arguments": json.dumps(event.input)},
974
+ }
975
+ )
976
+ elif et == "message_stop":
977
+ turn_usage = dict(event.usage or {})
978
+ self._driver._auto_record_usage(
979
+ {"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
980
+ )
981
+ self._driver._fire_callback(
982
+ "on_response",
983
+ {
984
+ "meta": turn_usage,
985
+ "driver": self._model_name,
986
+ "elapsed_ms": (time.perf_counter() - stream_started) * 1000,
987
+ },
988
+ )
989
+ self._accumulate_usage(turn_usage)
990
+ recorded = True
991
+ yield event
992
+ except Exception as exc:
993
+ stream_error = exc
994
+ self._driver._fire_callback("on_error", {"error": exc, "driver": self._model_name})
995
+ raise
996
+ finally:
997
+ if not recorded:
998
+ incomplete = {"usage_complete": False, "cost_status": "unknown"}
999
+ self._driver._auto_record_usage(
1000
+ {"meta": incomplete},
1001
+ (time.perf_counter() - stream_started) * 1000,
1002
+ status="error" if stream_error is not None else "incomplete",
1003
+ error=stream_error,
969
1004
  )
970
- elif et == "message_stop":
971
- turn_usage = dict(event.usage or {})
1005
+ if stream_error is None:
1006
+ self._driver._fire_callback(
1007
+ "on_response",
1008
+ {
1009
+ "meta": incomplete,
1010
+ "driver": self._model_name,
1011
+ "status": "incomplete",
1012
+ "elapsed_ms": (time.perf_counter() - stream_started) * 1000,
1013
+ },
1014
+ )
1015
+ self._accumulate_usage(incomplete)
972
1016
 
973
1017
  full_text = "".join(assistant_text_parts)
974
1018
  full_thinking = "".join(assistant_thinking_parts) or None
@@ -982,8 +1026,6 @@ class AsyncConversation:
982
1026
 
983
1027
  self._messages.append(assistant_msg)
984
1028
  msgs.append(assistant_msg)
985
- if turn_usage:
986
- self._accumulate_usage(turn_usage)
987
1029
 
988
1030
  if not pending_tools:
989
1031
  yield TurnComplete(usage=dict(self._usage))
@@ -1237,6 +1279,8 @@ class AsyncConversation:
1237
1279
 
1238
1280
  t0 = time.perf_counter()
1239
1281
  full_text = ""
1282
+ recorded = False
1283
+ stream_error = None
1240
1284
  try:
1241
1285
  async for chunk in self._driver.generate_messages_stream(messages, merged):
1242
1286
  chunk_type = chunk["type"]
@@ -1261,10 +1305,13 @@ class AsyncConversation:
1261
1305
  "elapsed_ms": elapsed_ms,
1262
1306
  },
1263
1307
  )
1308
+ self._driver._auto_record_usage({"meta": meta}, elapsed_ms)
1309
+ recorded = True
1264
1310
  self._accumulate_usage(meta)
1265
1311
  if chunk.get("reasoning_content"):
1266
1312
  self._last_reasoning = chunk["reasoning_content"]
1267
1313
  except Exception as exc:
1314
+ stream_error = exc
1268
1315
  elapsed_ms = (time.perf_counter() - t0) * 1000
1269
1316
  self._driver._fire_callback(
1270
1317
  "on_error",
@@ -1272,6 +1319,32 @@ class AsyncConversation:
1272
1319
  )
1273
1320
  raise
1274
1321
 
1322
+ finally:
1323
+ if not recorded:
1324
+ elapsed_ms = (time.perf_counter() - t0) * 1000
1325
+ incomplete = {
1326
+ "usage_complete": False,
1327
+ "cost_status": "unknown",
1328
+ "requested_model": merged.get("model", driver_name),
1329
+ }
1330
+ self._driver._auto_record_usage(
1331
+ {"meta": incomplete},
1332
+ elapsed_ms,
1333
+ status="error" if stream_error is not None else "incomplete",
1334
+ error=stream_error,
1335
+ )
1336
+ if stream_error is None:
1337
+ self._driver._fire_callback(
1338
+ "on_response",
1339
+ {
1340
+ "meta": incomplete,
1341
+ "driver": driver_name,
1342
+ "status": "incomplete",
1343
+ "elapsed_ms": elapsed_ms,
1344
+ },
1345
+ )
1346
+ self._accumulate_usage(incomplete)
1347
+
1275
1348
  self._messages.append(self._assistant_message(full_text))
1276
1349
 
1277
1350
  async def ask_stream(
@@ -601,6 +601,9 @@ class Conversation:
601
601
  return msgs
602
602
 
603
603
  def _accumulate_usage(self, meta: dict[str, Any]) -> None:
604
+ from ..infra.tracker import accumulate_usage_details
605
+
606
+ accumulate_usage_details(self._usage, meta)
604
607
  delta_tokens = meta.get("total_tokens", 0)
605
608
  delta_cost = meta.get("cost", 0.0)
606
609
  prompt_tokens = meta.get("prompt_tokens", 0)
@@ -984,33 +987,74 @@ class Conversation:
984
987
  stop_reason: str = "end_turn"
985
988
 
986
989
  stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
987
- for event in stream:
988
- yield event
989
- et = getattr(event, "event_type", None)
990
- if et == "text_delta":
991
- assistant_text_parts.append(event.text)
992
- elif et == "thinking_delta":
993
- assistant_thinking_parts.append(event.text)
994
- elif et == "tool_use_stop":
995
- tool_use_id = event.id or f"call_{uuid.uuid4().hex}"
996
- pending_tools.append(
997
- {
998
- "id": tool_use_id,
999
- "name": event.name,
1000
- "arguments": event.input,
1001
- "truncated": getattr(event, "truncated", False),
1002
- }
1003
- )
1004
- tool_calls_in_turn.append(
1005
- {
1006
- "id": tool_use_id,
1007
- "type": "function",
1008
- "function": {"name": event.name, "arguments": json.dumps(event.input)},
1009
- }
990
+ stream_started = time.perf_counter()
991
+ recorded = False
992
+ stream_error = None
993
+ try:
994
+ for event in stream:
995
+ et = getattr(event, "event_type", None)
996
+ if et == "text_delta":
997
+ assistant_text_parts.append(event.text)
998
+ elif et == "thinking_delta":
999
+ assistant_thinking_parts.append(event.text)
1000
+ elif et == "tool_use_stop":
1001
+ tool_use_id = event.id or f"call_{uuid.uuid4().hex}"
1002
+ pending_tools.append(
1003
+ {
1004
+ "id": tool_use_id,
1005
+ "name": event.name,
1006
+ "arguments": event.input,
1007
+ "truncated": getattr(event, "truncated", False),
1008
+ }
1009
+ )
1010
+ tool_calls_in_turn.append(
1011
+ {
1012
+ "id": tool_use_id,
1013
+ "type": "function",
1014
+ "function": {"name": event.name, "arguments": json.dumps(event.input)},
1015
+ }
1016
+ )
1017
+ elif et == "message_stop":
1018
+ turn_usage = dict(event.usage or {})
1019
+ self._driver._auto_record_usage(
1020
+ {"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
1021
+ )
1022
+ self._driver._fire_callback(
1023
+ "on_response",
1024
+ {
1025
+ "meta": turn_usage,
1026
+ "driver": self._model_name,
1027
+ "elapsed_ms": (time.perf_counter() - stream_started) * 1000,
1028
+ },
1029
+ )
1030
+ self._accumulate_usage(turn_usage)
1031
+ recorded = True
1032
+ stop_reason = event.stop_reason
1033
+ yield event
1034
+ except Exception as exc:
1035
+ stream_error = exc
1036
+ self._driver._fire_callback("on_error", {"error": exc, "driver": self._model_name})
1037
+ raise
1038
+ finally:
1039
+ if not recorded:
1040
+ incomplete = {"usage_complete": False, "cost_status": "unknown"}
1041
+ self._driver._auto_record_usage(
1042
+ {"meta": incomplete},
1043
+ (time.perf_counter() - stream_started) * 1000,
1044
+ status="error" if stream_error is not None else "incomplete",
1045
+ error=stream_error,
1010
1046
  )
1011
- elif et == "message_stop":
1012
- turn_usage = dict(event.usage or {})
1013
- stop_reason = event.stop_reason
1047
+ if stream_error is None:
1048
+ self._driver._fire_callback(
1049
+ "on_response",
1050
+ {
1051
+ "meta": incomplete,
1052
+ "driver": self._model_name,
1053
+ "status": "incomplete",
1054
+ "elapsed_ms": (time.perf_counter() - stream_started) * 1000,
1055
+ },
1056
+ )
1057
+ self._accumulate_usage(incomplete)
1014
1058
 
1015
1059
  full_text = "".join(assistant_text_parts)
1016
1060
  full_thinking = "".join(assistant_thinking_parts) or None
@@ -1024,8 +1068,6 @@ class Conversation:
1024
1068
 
1025
1069
  self._messages.append(assistant_msg)
1026
1070
  msgs.append(assistant_msg)
1027
- if turn_usage:
1028
- self._accumulate_usage(turn_usage)
1029
1071
 
1030
1072
  if not pending_tools:
1031
1073
  yield TurnComplete(usage=dict(self._usage))
@@ -1274,6 +1316,8 @@ class Conversation:
1274
1316
 
1275
1317
  t0 = time.perf_counter()
1276
1318
  full_text = ""
1319
+ recorded = False
1320
+ stream_error = None
1277
1321
  try:
1278
1322
  for chunk in self._driver.generate_messages_stream(messages, merged):
1279
1323
  chunk_type = chunk["type"]
@@ -1298,10 +1342,13 @@ class Conversation:
1298
1342
  "elapsed_ms": elapsed_ms,
1299
1343
  },
1300
1344
  )
1345
+ self._driver._auto_record_usage({"meta": meta}, elapsed_ms)
1346
+ recorded = True
1301
1347
  self._accumulate_usage(meta)
1302
1348
  if chunk.get("reasoning_content"):
1303
1349
  self._last_reasoning = chunk["reasoning_content"]
1304
1350
  except Exception as exc:
1351
+ stream_error = exc
1305
1352
  elapsed_ms = (time.perf_counter() - t0) * 1000
1306
1353
  self._driver._fire_callback(
1307
1354
  "on_error",
@@ -1309,6 +1356,32 @@ class Conversation:
1309
1356
  )
1310
1357
  raise
1311
1358
 
1359
+ finally:
1360
+ if not recorded:
1361
+ elapsed_ms = (time.perf_counter() - t0) * 1000
1362
+ incomplete = {
1363
+ "usage_complete": False,
1364
+ "cost_status": "unknown",
1365
+ "requested_model": merged.get("model", driver_name),
1366
+ }
1367
+ self._driver._auto_record_usage(
1368
+ {"meta": incomplete},
1369
+ elapsed_ms,
1370
+ status="error" if stream_error is not None else "incomplete",
1371
+ error=stream_error,
1372
+ )
1373
+ if stream_error is None:
1374
+ self._driver._fire_callback(
1375
+ "on_response",
1376
+ {
1377
+ "meta": incomplete,
1378
+ "driver": driver_name,
1379
+ "status": "incomplete",
1380
+ "elapsed_ms": elapsed_ms,
1381
+ },
1382
+ )
1383
+ self._accumulate_usage(incomplete)
1384
+
1312
1385
  self._messages.append(self._assistant_message(full_text))
1313
1386
 
1314
1387
  def ask_stream(
@@ -85,7 +85,11 @@ def _process_chunk(
85
85
  """
86
86
  from ..agents.live_events import TextDelta, ThinkingDelta, ToolInputDelta, ToolUseStart
87
87
 
88
+ for key in ("id", "model", "service_tier"):
89
+ if isinstance(getattr(chunk, key, None), str):
90
+ state.setdefault("response_info", {})[key] = getattr(chunk, key)
88
91
  if getattr(chunk, "usage", None):
92
+ state["reported_usage"] = chunk.usage
89
93
  state["prompt_tokens"] = chunk.usage.prompt_tokens or 0
90
94
  state["completion_tokens"] = chunk.usage.completion_tokens or 0
91
95
  state["cached_prompt_tokens"] = _extract_cached_tokens(chunk.usage)
@@ -235,6 +239,7 @@ def iter_openai_compat_live_events(
235
239
  *,
236
240
  model: str,
237
241
  cost_fn: CostFn,
242
+ meta_fn: Callable[[dict[str, Any]], dict[str, Any]] | None = None,
238
243
  ) -> Iterator[Any]:
239
244
  """Consume a sync OpenAI-compat ``chat.completions`` stream with tools
240
245
  and yield :class:`~prompture.agents.live_events.LiveEvent`.
@@ -259,7 +264,10 @@ def iter_openai_compat_live_events(
259
264
  state["completion_tokens"],
260
265
  state["cached_prompt_tokens"],
261
266
  )
262
- yield _build_message_stop(state, model, cost)
267
+ stop = _build_message_stop(state, model, cost)
268
+ if meta_fn is not None:
269
+ stop.usage.update(meta_fn(state))
270
+ yield stop
263
271
 
264
272
 
265
273
  async def aiter_openai_compat_live_events(
@@ -267,6 +275,7 @@ async def aiter_openai_compat_live_events(
267
275
  *,
268
276
  model: str,
269
277
  cost_fn: AsyncCostFn,
278
+ meta_fn: Callable[[dict[str, Any]], dict[str, Any]] | None = None,
270
279
  ) -> AsyncIterator[Any]:
271
280
  """Async sibling of :func:`iter_openai_compat_live_events`.
272
281
 
@@ -286,7 +295,10 @@ async def aiter_openai_compat_live_events(
286
295
  state["cached_prompt_tokens"],
287
296
  )
288
297
  cost = await raw_cost if inspect.isawaitable(raw_cost) else raw_cost
289
- yield _build_message_stop(state, model, cost)
298
+ stop = _build_message_stop(state, model, cost)
299
+ if meta_fn is not None:
300
+ stop.usage.update(meta_fn(state))
301
+ yield stop
290
302
 
291
303
 
292
304
  # ----------------------------------------------------------------------
@@ -348,12 +360,28 @@ def stream_openai_compat_tool_call(
348
360
  )
349
361
  _apply_openai_tool_options(kwargs, options)
350
362
 
363
+ if provider == "openai":
364
+ from .openai_driver import _apply_openai_reporting_options
365
+
366
+ _apply_openai_reporting_options(kwargs, options)
351
367
  stream = driver.client.chat.completions.create(**kwargs)
352
368
 
353
369
  def cost_fn(prompt_tokens: int, completion_tokens: int, cached_tokens: int) -> float:
354
370
  return driver._calculate_cost(provider, model, prompt_tokens, completion_tokens, cached_tokens=cached_tokens)
355
371
 
356
- yield from iter_openai_compat_live_events(stream, model=model, cost_fn=cost_fn)
372
+ def meta_fn(state: dict[str, Any]) -> dict[str, Any]:
373
+ from ._usage_reporting import usage_meta
374
+
375
+ return usage_meta(
376
+ driver, provider, model, state.get("reported_usage"), response=state.get("response_info"), options=options
377
+ )
378
+
379
+ yield from iter_openai_compat_live_events(
380
+ stream,
381
+ model=model,
382
+ cost_fn=cost_fn,
383
+ meta_fn=meta_fn if provider == "openai" else None,
384
+ )
357
385
 
358
386
 
359
387
  async def astream_openai_compat_tool_call(
@@ -399,12 +427,28 @@ async def astream_openai_compat_tool_call(
399
427
  )
400
428
  _apply_openai_tool_options(kwargs, options)
401
429
 
430
+ if provider == "openai":
431
+ from .openai_driver import _apply_openai_reporting_options
432
+
433
+ _apply_openai_reporting_options(kwargs, options)
402
434
  stream = await driver.client.chat.completions.create(**kwargs)
403
435
 
404
436
  def cost_fn(prompt_tokens: int, completion_tokens: int, cached_tokens: int) -> float:
405
437
  return driver._calculate_cost(provider, model, prompt_tokens, completion_tokens, cached_tokens=cached_tokens)
406
438
 
407
- async for ev in aiter_openai_compat_live_events(stream, model=model, cost_fn=cost_fn):
439
+ def meta_fn(state: dict[str, Any]) -> dict[str, Any]:
440
+ from ._usage_reporting import usage_meta
441
+
442
+ return usage_meta(
443
+ driver, provider, model, state.get("reported_usage"), response=state.get("response_info"), options=options
444
+ )
445
+
446
+ async for ev in aiter_openai_compat_live_events(
447
+ stream,
448
+ model=model,
449
+ cost_fn=cost_fn,
450
+ meta_fn=meta_fn if provider == "openai" else None,
451
+ ):
408
452
  yield ev
409
453
 
410
454