prompture 1.13.6.dev1__tar.gz → 1.13.7.dev1__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 (689) hide show
  1. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/PKG-INFO +52 -3
  2. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/README.md +48 -1
  3. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/_version.py +2 -2
  4. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/agent.py +21 -1
  5. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/async_agent.py +21 -1
  6. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/async_conversation.py +56 -70
  7. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/async_deep_agent.py +6 -4
  8. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/conversation.py +49 -65
  9. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/summarizer.py +88 -8
  10. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep_agent.py +6 -4
  11. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep_prompts.py +35 -12
  12. prompture-1.13.7.dev1/prompture/agents/tool_context.py +458 -0
  13. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/cli.py +1 -0
  14. prompture-1.13.7.dev1/prompture/cli/delegate_cmd.py +348 -0
  15. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/context.py +19 -0
  16. prompture-1.13.7.dev1/prompture/games/__init__.py +48 -0
  17. prompture-1.13.7.dev1/prompture/games/base.py +365 -0
  18. prompture-1.13.7.dev1/prompture/games/chess/__init__.py +41 -0
  19. prompture-1.13.7.dev1/prompture/games/chess/harness.py +190 -0
  20. prompture-1.13.7.dev1/prompture/games/chess/motifs.py +356 -0
  21. prompture-1.13.7.dev1/prompture/games/chess/puzzles.py +103 -0
  22. prompture-1.13.7.dev1/prompture/games/connect4.py +306 -0
  23. prompture-1.13.7.dev1/prompture/games/match.py +100 -0
  24. prompture-1.13.7.dev1/prompture/games/othello.py +307 -0
  25. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/PKG-INFO +52 -3
  26. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/SOURCES.txt +11 -0
  27. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/requires.txt +4 -1
  28. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/scm_file_list.json +15 -0
  29. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/pyproject.toml +3 -1
  30. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-driver/SKILL.md +0 -0
  31. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-driver/references/driver-template.md +0 -0
  32. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-example/SKILL.md +0 -0
  33. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-field/SKILL.md +0 -0
  34. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-persona/SKILL.md +0 -0
  35. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-test/SKILL.md +0 -0
  36. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-tool/SKILL.md +0 -0
  37. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/create-pr/SKILL.md +0 -0
  38. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/run-tests/SKILL.md +0 -0
  39. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  40. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/update-pricing/SKILL.md +0 -0
  41. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.env.copy +0 -0
  42. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.gitattributes +0 -0
  43. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/FUNDING.yml +0 -0
  44. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  45. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  46. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  47. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  48. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/scripts/update_docs_version.py +0 -0
  49. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/scripts/update_wrapper_version.py +0 -0
  50. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/dev.yml +0 -0
  51. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/documentation.yml +0 -0
  52. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/pricing-freshness.yml +0 -0
  53. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/publish.yml +0 -0
  54. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/security.yml +0 -0
  55. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.safety-project.ini +0 -0
  56. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/AGENTS.md +0 -0
  57. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/BREAKING_CHANGES.md +0 -0
  58. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/CLAUDE.md +0 -0
  59. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/CONTRIBUTING.md +0 -0
  60. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/LICENSE +0 -0
  61. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/MANIFEST.in +0 -0
  62. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/ROADMAP.md +0 -0
  63. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/SECURITY.md +0 -0
  64. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/VERSION +0 -0
  65. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/dev.ps1 +0 -0
  66. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/dev.sh +0 -0
  67. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/llms.txt +0 -0
  68. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/mypy_errors.txt +0 -0
  69. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/README.md +0 -0
  70. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/README.md +0 -0
  71. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  72. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/pyproject.toml +0 -0
  73. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/test.py +0 -0
  74. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/README.md +0 -0
  75. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  76. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/pyproject.toml +0 -0
  77. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/test.py +0 -0
  78. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/__init__.py +0 -0
  79. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/__main__.py +0 -0
  80. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/_internal/__init__.py +0 -0
  81. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/_internal/json_encoder.py +0 -0
  82. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/__init__.py +0 -0
  83. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/assistant.py +0 -0
  84. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/__init__.py +0 -0
  85. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/planner.py +0 -0
  86. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/subagents.py +0 -0
  87. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/vfs.py +0 -0
  88. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep_state.py +0 -0
  89. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/live_events.py +0 -0
  90. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/persona.py +0 -0
  91. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/review_loop.py +0 -0
  92. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/simulated_tools.py +0 -0
  93. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/skill_miner.py +0 -0
  94. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/skills.py +0 -0
  95. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/tool_grammars.py +0 -0
  96. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/tools_schema.py +0 -0
  97. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/types.py +0 -0
  98. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/aio/__init__.py +0 -0
  99. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/bridges/__init__.py +0 -0
  100. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/bridges/tukuy_backend.py +0 -0
  101. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/__init__.py +0 -0
  102. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/backends.py +0 -0
  103. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/builtin_checks.py +0 -0
  104. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/challenge.py +0 -0
  105. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/errors.py +0 -0
  106. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/health.py +0 -0
  107. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/http.py +0 -0
  108. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/probe.py +0 -0
  109. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/url_safety.py +0 -0
  110. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/__init__.py +0 -0
  111. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/core.py +0 -0
  112. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/stores.py +0 -0
  113. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/types.py +0 -0
  114. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/citations/__init__.py +0 -0
  115. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/citations/core.py +0 -0
  116. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/citations/types.py +0 -0
  117. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/__init__.py +0 -0
  118. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/doctor_cmd.py +0 -0
  119. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/formatters.py +0 -0
  120. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/mcp_cmd.py +0 -0
  121. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/research_cmd.py +0 -0
  122. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/runner.py +0 -0
  123. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/server.py +0 -0
  124. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/setup_cmd.py +0 -0
  125. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/skill_cmd.py +0 -0
  126. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/transcribe_cmd.py +0 -0
  127. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/__init__.py +0 -0
  128. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/automations.py +0 -0
  129. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/calls.py +0 -0
  130. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/capacity.py +0 -0
  131. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/coding_tools.py +0 -0
  132. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/hook.py +0 -0
  133. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/live.py +0 -0
  134. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/local.py +0 -0
  135. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/memory.py +0 -0
  136. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/reuse.py +0 -0
  137. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/router.py +0 -0
  138. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/routing_policy.py +0 -0
  139. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/server.py +0 -0
  140. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/summary.py +0 -0
  141. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/tool_routing.py +0 -0
  142. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/__init__.py +0 -0
  143. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/dedup.py +0 -0
  144. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/evol.py +0 -0
  145. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/filters.py +0 -0
  146. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/formats.py +0 -0
  147. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/schemas.py +0 -0
  148. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/seed.py +0 -0
  149. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/synth.py +0 -0
  150. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/doctor/__init__.py +0 -0
  151. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/doctor/core.py +0 -0
  152. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/doctor/providers.py +0 -0
  153. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/__init__.py +0 -0
  154. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_media_usage.py +0 -0
  155. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_ollama_options.py +0 -0
  156. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_openai_compat.py +0 -0
  157. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_openai_compat_stream.py +0 -0
  158. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_openai_responses.py +0 -0
  159. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_prompt_cache.py +0 -0
  160. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_prompted_tool_stream.py +0 -0
  161. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_usage_reporting.py +0 -0
  162. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/aggregator_base.py +0 -0
  163. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/airllm_driver.py +0 -0
  164. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/assemblyai_stt_driver.py +0 -0
  165. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_aggregator_base.py +0 -0
  166. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_airllm_driver.py +0 -0
  167. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
  168. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_azure_driver.py +0 -0
  169. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_base.py +0 -0
  170. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_bedrock_driver.py +0 -0
  171. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  172. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cachibot_driver.py +0 -0
  173. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
  174. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_claude_driver.py +0 -0
  175. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cohere_driver.py +0 -0
  176. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  177. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  178. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
  179. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
  180. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_deepseek_driver.py +0 -0
  181. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
  182. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
  183. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_embedding_base.py +0 -0
  184. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  185. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  186. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_google_driver.py +0 -0
  187. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  188. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_google_vertexai_driver.py +0 -0
  189. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_grok_driver.py +0 -0
  190. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
  191. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  192. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_groq_driver.py +0 -0
  193. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_hugging_driver.py +0 -0
  194. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  195. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_img_gen_base.py +0 -0
  196. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  197. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  198. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_kev_decision_driver.py +0 -0
  199. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  200. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  201. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_laya_decision_driver.py +0 -0
  202. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_lmstudio_driver.py +0 -0
  203. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_local_http_driver.py +0 -0
  204. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  205. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_minimax_driver.py +0 -0
  206. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  207. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mistral_driver.py +0 -0
  208. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  209. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_modelscope_driver.py +0 -0
  210. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_moonshot_driver.py +0 -0
  211. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
  212. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  213. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  214. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  215. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_ollama_driver.py +0 -0
  216. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  217. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_compatible_driver.py +0 -0
  218. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_driver.py +0 -0
  219. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_embedding_driver.py +0 -0
  220. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
  221. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  222. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_stt_driver.py +0 -0
  223. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_tts_driver.py +0 -0
  224. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openrouter_driver.py +0 -0
  225. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  226. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_registry.py +0 -0
  227. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  228. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_runway_tts_driver.py +0 -0
  229. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  230. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  231. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_stt_base.py +0 -0
  232. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_systemone_compatible_driver.py +0 -0
  233. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_tts_base.py +0 -0
  234. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_typesafe_decision_driver.py +0 -0
  235. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_video_gen_base.py +0 -0
  236. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  237. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  238. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_zai_driver.py +0 -0
  239. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/audio_registry.py +0 -0
  240. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/azure_config.py +0 -0
  241. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/azure_driver.py +0 -0
  242. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/base.py +0 -0
  243. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/bedrock_driver.py +0 -0
  244. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  245. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cachibot_driver.py +0 -0
  246. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cartesia_tts_driver.py +0 -0
  247. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/claude_driver.py +0 -0
  248. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cohere_driver.py +0 -0
  249. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cohere_embedding_driver.py +0 -0
  250. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cohere_rerank_driver.py +0 -0
  251. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/decision_base.py +0 -0
  252. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/decision_registry.py +0 -0
  253. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/deepgram_stt_driver.py +0 -0
  254. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/deepgram_tts_driver.py +0 -0
  255. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/deepseek_driver.py +0 -0
  256. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/driver_registry.py +0 -0
  257. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
  258. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
  259. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/embedding_base.py +0 -0
  260. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/embedding_registry.py +0 -0
  261. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/fal_img_gen_driver.py +0 -0
  262. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/fal_video_gen_driver.py +0 -0
  263. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/google_driver.py +0 -0
  264. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/google_img_gen_driver.py +0 -0
  265. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/google_vertexai_driver.py +0 -0
  266. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/grok_driver.py +0 -0
  267. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/grok_img_gen_driver.py +0 -0
  268. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/grok_video_gen_driver.py +0 -0
  269. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/groq_driver.py +0 -0
  270. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/hugging_driver.py +0 -0
  271. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  272. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/img_gen_base.py +0 -0
  273. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/img_gen_registry.py +0 -0
  274. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/jina_embedding_driver.py +0 -0
  275. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/jina_rerank_driver.py +0 -0
  276. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/job_runner.py +0 -0
  277. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/kev_decision_driver.py +0 -0
  278. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/kling_img_gen_driver.py +0 -0
  279. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/kling_video_gen_driver.py +0 -0
  280. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/laya_decision_driver.py +0 -0
  281. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/lipsync_base.py +0 -0
  282. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/lipsync_registry.py +0 -0
  283. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/lmstudio_driver.py +0 -0
  284. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/local_http_driver.py +0 -0
  285. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/luma_video_gen_driver.py +0 -0
  286. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/media_capabilities.py +0 -0
  287. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/minimax_driver.py +0 -0
  288. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  289. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mistral_driver.py +0 -0
  290. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mistral_moderation_driver.py +0 -0
  291. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/modelscope_driver.py +0 -0
  292. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/moderation_base.py +0 -0
  293. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/moderation_registry.py +0 -0
  294. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/moonshot_driver.py +0 -0
  295. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/muapi_aggregator_driver.py +0 -0
  296. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/music_base.py +0 -0
  297. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/music_registry.py +0 -0
  298. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  299. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  300. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/nomic_embedding_driver.py +0 -0
  301. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/ollama_driver.py +0 -0
  302. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/ollama_embedding_driver.py +0 -0
  303. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_compatible_driver.py +0 -0
  304. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_driver.py +0 -0
  305. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_embedding_driver.py +0 -0
  306. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_img_gen_driver.py +0 -0
  307. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_moderation_driver.py +0 -0
  308. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_stt_driver.py +0 -0
  309. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_tts_driver.py +0 -0
  310. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openrouter_driver.py +0 -0
  311. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/pika_video_gen_driver.py +0 -0
  312. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/provider_branding.py +0 -0
  313. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/provider_descriptors.py +0 -0
  314. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/registry.py +0 -0
  315. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/rerank_base.py +0 -0
  316. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/rerank_registry.py +0 -0
  317. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  318. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_capabilities.py +0 -0
  319. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_img_gen_driver.py +0 -0
  320. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_tts_driver.py +0 -0
  321. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_video_gen_driver.py +0 -0
  322. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/stability_img_gen_driver.py +0 -0
  323. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/stt_base.py +0 -0
  324. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/systemone_compatible_driver.py +0 -0
  325. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/tts_base.py +0 -0
  326. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/typesafe_decision_driver.py +0 -0
  327. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/vertex_img_gen_driver.py +0 -0
  328. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/video_gen_base.py +0 -0
  329. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/video_gen_registry.py +0 -0
  330. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/vision_helpers.py +0 -0
  331. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/voyage_embedding_driver.py +0 -0
  332. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/voyage_rerank_driver.py +0 -0
  333. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/zai_driver.py +0 -0
  334. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/__init__.py +0 -0
  335. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/base.py +0 -0
  336. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/faithfulness.py +0 -0
  337. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/judge.py +0 -0
  338. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/pairwise.py +0 -0
  339. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/self_consistency.py +0 -0
  340. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/exceptions.py +0 -0
  341. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/__init__.py +0 -0
  342. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/context_eval.py +0 -0
  343. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/data/document_qa_policies.json +0 -0
  344. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/data/extraction_contacts.json +0 -0
  345. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/data/tool_task_inventory.json +0 -0
  346. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/fixtures.py +0 -0
  347. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/gates.py +0 -0
  348. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/harness.py +0 -0
  349. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/__init__.py +0 -0
  350. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/candidates.py +0 -0
  351. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/optimizer.py +0 -0
  352. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/promotion.py +0 -0
  353. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/scorecard.py +0 -0
  354. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/integration.py +0 -0
  355. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/outcomes.py +0 -0
  356. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/policy.py +0 -0
  357. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/sandbox.py +0 -0
  358. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/scoring.py +0 -0
  359. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/__init__.py +0 -0
  360. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/base.py +0 -0
  361. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/critique.py +0 -0
  362. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/direct.py +0 -0
  363. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/registry.py +0 -0
  364. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/retrieve.py +0 -0
  365. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/types.py +0 -0
  366. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/__init__.py +0 -0
  367. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/_usage.py +0 -0
  368. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/async_core.py +0 -0
  369. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/code_extraction.py +0 -0
  370. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/core.py +0 -0
  371. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/few_shot.py +0 -0
  372. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/fields.py +0 -0
  373. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/reasoning.py +0 -0
  374. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/strategy.py +0 -0
  375. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/streaming.py +0 -0
  376. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/tools.py +0 -0
  377. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/tukuy_bridge.py +0 -0
  378. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/validator.py +0 -0
  379. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/__init__.py +0 -0
  380. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/anthropic_format.py +0 -0
  381. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/gemini_format.py +0 -0
  382. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/openai_format.py +0 -0
  383. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/reasoning_cache.py +0 -0
  384. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/responses_format.py +0 -0
  385. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/__init__.py +0 -0
  386. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/async_groups.py +0 -0
  387. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/consensus.py +0 -0
  388. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/debate.py +0 -0
  389. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/fusion.py +0 -0
  390. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/groups.py +0 -0
  391. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/types.py +0 -0
  392. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/__init__.py +0 -0
  393. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/enhance.py +0 -0
  394. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/negative.py +0 -0
  395. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/set_planner.py +0 -0
  396. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/style_presets.py +0 -0
  397. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/__init__.py +0 -0
  398. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/accounts.py +0 -0
  399. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/billing.py +0 -0
  400. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/budget.py +0 -0
  401. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/cache.py +0 -0
  402. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/callbacks.py +0 -0
  403. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/capabilities.py +0 -0
  404. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_activity.py +0 -0
  405. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_events.py +0 -0
  406. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_readers.py +0 -0
  407. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_specs.py +0 -0
  408. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_usage.py +0 -0
  409. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agents.py +0 -0
  410. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/compression.py +0 -0
  411. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/cost_mixin.py +0 -0
  412. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/credentials.py +0 -0
  413. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/discovery.py +0 -0
  414. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/environment.py +0 -0
  415. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/ledger.py +0 -0
  416. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/logging.py +0 -0
  417. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/media_pricing.py +0 -0
  418. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/media_rates.json +0 -0
  419. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/model_rates.py +0 -0
  420. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/otel.py +0 -0
  421. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/pricing.py +0 -0
  422. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/provider_env.py +0 -0
  423. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rate_limits.py +0 -0
  424. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/anthropic.json +0 -0
  425. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/azure.json +0 -0
  426. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/bedrock.json +0 -0
  427. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/cerebras.json +0 -0
  428. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/cohere.json +0 -0
  429. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/deepinfra.json +0 -0
  430. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/deepseek.json +0 -0
  431. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/fireworks.json +0 -0
  432. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/google.json +0 -0
  433. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/google_vertexai.json +0 -0
  434. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/groq.json +0 -0
  435. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/jina.json +0 -0
  436. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/kev.json +0 -0
  437. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/laya.json +0 -0
  438. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/mistral.json +0 -0
  439. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/mixedbread.json +0 -0
  440. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/moonshot.json +0 -0
  441. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/nomic.json +0 -0
  442. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/nvidia.json +0 -0
  443. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/openai.json +0 -0
  444. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/openrouter.json +0 -0
  445. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/perplexity.json +0 -0
  446. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/sambanova.json +0 -0
  447. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/siliconflow.json +0 -0
  448. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/together.json +0 -0
  449. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/typesafe.json +0 -0
  450. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/voyage.json +0 -0
  451. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/xai.json +0 -0
  452. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/session.py +0 -0
  453. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/settings.py +0 -0
  454. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/token_counting.py +0 -0
  455. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/tracker.py +0 -0
  456. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/tukuy_backend.py +0 -0
  457. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/updates.py +0 -0
  458. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/__init__.py +0 -0
  459. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/chunking.py +0 -0
  460. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/detect.py +0 -0
  461. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/document.py +0 -0
  462. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/__init__.py +0 -0
  463. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/base.py +0 -0
  464. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/csv_parser.py +0 -0
  465. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/docx.py +0 -0
  466. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/html.py +0 -0
  467. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/markdown.py +0 -0
  468. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/pdf.py +0 -0
  469. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/xlsx.py +0 -0
  470. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/integrations/__init__.py +0 -0
  471. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/integrations/mcp_bridge.py +0 -0
  472. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/integrations/tukuy_bridge.py +0 -0
  473. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/jobs.py +0 -0
  474. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/__init__.py +0 -0
  475. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/core.py +0 -0
  476. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/stores.py +0 -0
  477. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/types.py +0 -0
  478. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/__init__.py +0 -0
  479. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/client.py +0 -0
  480. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/health.py +0 -0
  481. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/hub.py +0 -0
  482. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/importers.py +0 -0
  483. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/server.py +0 -0
  484. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/tools.py +0 -0
  485. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/__init__.py +0 -0
  486. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/agent_tools.py +0 -0
  487. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/audio.py +0 -0
  488. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/hosting.py +0 -0
  489. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/image.py +0 -0
  490. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/__init__.py +0 -0
  491. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/errors.py +0 -0
  492. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/ffmpeg.py +0 -0
  493. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/groq_stt.py +0 -0
  494. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/health.py +0 -0
  495. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/sources.py +0 -0
  496. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/summarize.py +0 -0
  497. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/tools.py +0 -0
  498. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/transcribe.py +0 -0
  499. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/video.py +0 -0
  500. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/01-why-prompture.md +0 -0
  501. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/02-installation.md +0 -0
  502. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/03-quickstart.md +0 -0
  503. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/04-toon-input.md +0 -0
  504. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/05-test-harness.md +0 -0
  505. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/06-stability.md +0 -0
  506. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/07-migration.md +0 -0
  507. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/__init__.py +0 -0
  508. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/history.py +0 -0
  509. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/serialization.py +0 -0
  510. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/store.py +0 -0
  511. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/__init__.py +0 -0
  512. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/pipeline.py +0 -0
  513. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/resolver.py +0 -0
  514. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/routing.py +0 -0
  515. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/__init__.py +0 -0
  516. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/base.py +0 -0
  517. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/__init__.py +0 -0
  518. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/_aliases.py +0 -0
  519. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  520. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/audio_plugin.py +0 -0
  521. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  522. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/decision_plugin.py +0 -0
  523. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  524. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/extras_plugin.py +0 -0
  525. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/google_plugin.py +0 -0
  526. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/image_plugin.py +0 -0
  527. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/local_plugin.py +0 -0
  528. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  529. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/openai_plugin.py +0 -0
  530. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/video_plugin.py +0 -0
  531. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/discovery.py +0 -0
  532. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/py.typed +0 -0
  533. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/__init__.py +0 -0
  534. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/__init__.py +0 -0
  535. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/base.py +0 -0
  536. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/character.py +0 -0
  537. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/chunker_registry.py +0 -0
  538. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/contextual.py +0 -0
  539. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/markdown.py +0 -0
  540. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/recursive.py +0 -0
  541. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/semantic.py +0 -0
  542. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/token.py +0 -0
  543. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/documents.py +0 -0
  544. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loader_registry.py +0 -0
  545. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/__init__.py +0 -0
  546. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/csv_loader.py +0 -0
  547. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/docx_loader.py +0 -0
  548. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/epub_loader.py +0 -0
  549. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/html_loader.py +0 -0
  550. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/json_loader.py +0 -0
  551. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/markdown_loader.py +0 -0
  552. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/pdf_loader.py +0 -0
  553. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/text_loader.py +0 -0
  554. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/xlsx_loader.py +0 -0
  555. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/pipeline.py +0 -0
  556. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/__init__.py +0 -0
  557. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/_fusion.py +0 -0
  558. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/base.py +0 -0
  559. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/hybrid.py +0 -0
  560. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/hyde.py +0 -0
  561. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/mmr.py +0 -0
  562. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/multi_query.py +0 -0
  563. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/retriever_registry.py +0 -0
  564. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/similarity.py +0 -0
  565. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/step_back.py +0 -0
  566. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/__init__.py +0 -0
  567. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/base.py +0 -0
  568. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/chroma.py +0 -0
  569. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/faiss.py +0 -0
  570. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/pgvector.py +0 -0
  571. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/pinecone.py +0 -0
  572. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/qdrant.py +0 -0
  573. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
  574. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/weaviate.py +0 -0
  575. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/__init__.py +0 -0
  576. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/detector.py +0 -0
  577. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/evaluator.py +0 -0
  578. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/markers.py +0 -0
  579. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/__init__.py +0 -0
  580. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/agent.py +0 -0
  581. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/budget.py +0 -0
  582. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/events.py +0 -0
  583. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/planner.py +0 -0
  584. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/ranking.py +0 -0
  585. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/report.py +0 -0
  586. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/synthesis.py +0 -0
  587. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/tools.py +0 -0
  588. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/__init__.py +0 -0
  589. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/async_driver.py +0 -0
  590. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/backoff.py +0 -0
  591. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/breaker.py +0 -0
  592. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/driver.py +0 -0
  593. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/errors.py +0 -0
  594. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/explain.py +0 -0
  595. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/headroom.py +0 -0
  596. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/keys.py +0 -0
  597. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/router.py +0 -0
  598. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/strategies.py +0 -0
  599. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/virtual.py +0 -0
  600. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/__init__.py +0 -0
  601. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/generator.py +0 -0
  602. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  603. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/README.md.j2 +0 -0
  604. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/config.py.j2 +0 -0
  605. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/env.example.j2 +0 -0
  606. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/main.py.j2 +0 -0
  607. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/models.py.j2 +0 -0
  608. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  609. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/security/__init__.py +0 -0
  610. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/security/injection.py +0 -0
  611. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/security/redaction.py +0 -0
  612. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/__init__.py +0 -0
  613. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/core.py +0 -0
  614. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/project.py +0 -0
  615. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/stores.py +0 -0
  616. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/types.py +0 -0
  617. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/__init__.py +0 -0
  618. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/SKILL.md +0 -0
  619. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/dev.md +0 -0
  620. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/finance.md +0 -0
  621. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/mcp.md +0 -0
  622. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/media.md +0 -0
  623. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/models.md +0 -0
  624. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/search.md +0 -0
  625. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/web.md +0 -0
  626. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/__init__.py +0 -0
  627. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/environment.py +0 -0
  628. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/memory.py +0 -0
  629. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/scheduler.py +0 -0
  630. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/swarm.py +0 -0
  631. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/swarm_agent.py +0 -0
  632. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/types.py +0 -0
  633. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/testing/__init__.py +0 -0
  634. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/testing/driver_contract.py +0 -0
  635. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/__init__.py +0 -0
  636. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/__init__.py +0 -0
  637. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/adapter.py +0 -0
  638. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/builtin.py +0 -0
  639. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/config.py +0 -0
  640. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/health.py +0 -0
  641. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/code_exec.py +0 -0
  642. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/named.py +0 -0
  643. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/packs.py +0 -0
  644. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/__init__.py +0 -0
  645. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/_common.py +0 -0
  646. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/_mcp_http.py +0 -0
  647. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/_types.py +0 -0
  648. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/cache.py +0 -0
  649. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/fetch.py +0 -0
  650. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/health.py +0 -0
  651. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/html2md.py +0 -0
  652. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/platform.py +0 -0
  653. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/__init__.py +0 -0
  654. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/_media.py +0 -0
  655. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/anilist.py +0 -0
  656. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/arxiv.py +0 -0
  657. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/base.py +0 -0
  658. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/feeds.py +0 -0
  659. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/github.py +0 -0
  660. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/hackernews.py +0 -0
  661. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/podcasts.py +0 -0
  662. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/wikipedia.py +0 -0
  663. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/youtube.py +0 -0
  664. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/search.py +0 -0
  665. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/toolkit.py +0 -0
  666. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web_search.py +0 -0
  667. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/__init__.py +0 -0
  668. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/architect.py +0 -0
  669. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/engine.py +0 -0
  670. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/errors.py +0 -0
  671. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/model.py +0 -0
  672. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/nodes.py +0 -0
  673. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/recovery.py +0 -0
  674. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/references.py +0 -0
  675. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/registry.py +0 -0
  676. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/scheduler.py +0 -0
  677. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/state.py +0 -0
  678. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/dependency_links.txt +0 -0
  679. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/entry_points.txt +0 -0
  680. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/top_level.txt +0 -0
  681. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture_cost_tracking.md +0 -0
  682. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/requirements.txt +0 -0
  683. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/scripts/check_pricing_freshness.py +0 -0
  684. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/setup.cfg +0 -0
  685. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/specs/basic_extraction.json +0 -0
  686. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/specs/schema_validation.json +0 -0
  687. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/specs/strategy_comparison.json +0 -0
  688. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/test.py +0 -0
  689. {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/test_version_diagnosis.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.13.6.dev1
3
+ Version: 1.13.7.dev1
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
@@ -42,8 +42,10 @@ Requires-Dist: youtube-transcript-api>=1.0; extra == "web"
42
42
  Requires-Dist: trafilatura>=1.8; extra == "web"
43
43
  Provides-Extra: media
44
44
  Requires-Dist: yt-dlp>=2024.8.6; extra == "media"
45
+ Provides-Extra: chess
46
+ Requires-Dist: chess>=1.10; extra == "chess"
45
47
  Provides-Extra: all
46
- Requires-Dist: prompture[anthropic,google,groq,mcp,media,openai,pandas,sandbox,toon,web]; extra == "all"
48
+ Requires-Dist: prompture[anthropic,chess,google,groq,mcp,media,openai,pandas,sandbox,toon,web]; extra == "all"
47
49
  Provides-Extra: test
48
50
  Requires-Dist: pytest>=7.0; extra == "test"
49
51
  Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
@@ -1417,6 +1419,28 @@ conv = Conversation("openai/gpt-4", tools=registry, simulated_tools=False)
1417
1419
 
1418
1420
  The simulation loop describes tools in the system prompt, asks the model to respond with JSON (`tool_call` or `final_answer`), executes tools, and feeds results back — all transparent to the caller.
1419
1421
 
1422
+ #### Keeping tools from filling the context window
1423
+
1424
+ Two defaults keep large tool setups cheap, in both `Conversation` and `Agent`:
1425
+
1426
+ - **Large results are stored, not cut.** A result over ~4k tokens, or a round of parallel results over ~12k tokens together (largest first), is stored and replaced by a short preview and an `artifact://` handle. The model reads what it needs with the built-in `read_tool_result(handle, query=..., offset=...)` tool, which is only offered once something has been stored. Error results are never stored.
1427
+ - **Tool schemas load on demand.** When the full schemas would cost more than ~8k tokens, the model gets `search_tools` and `load_tools` instead; loaded tools stay available for the rest of the conversation.
1428
+
1429
+ ```python
1430
+ from prompture import Conversation
1431
+ from prompture.agents.tool_context import ToolResultPolicy
1432
+
1433
+ conv = Conversation(
1434
+ "openai/gpt-4o",
1435
+ tools=registry,
1436
+ tool_result_policy=ToolResultPolicy(per_call_tokens=4000, batch_tokens=8000),
1437
+ defer_tools="auto", # True / False to force
1438
+ preload_tools=["get_weather"], # always sent, even when deferring
1439
+ )
1440
+ ```
1441
+
1442
+ `max_tool_result_length=None` keeps results whole, and `ToolResultPolicy(offload=False)` restores plain truncation. Stored results live in memory and do not survive `save()` / `load()`. A tool call left without a result (for example a live stream closed mid-round) gets a placeholder result on the next call, so the provider does not reject the history.
1443
+
1420
1444
  ### Live Streaming Tool Calls (any model, including local Ollama)
1421
1445
 
1422
1446
  `Conversation.ask_live` / `Agent.run_live` yields an interleaved event stream — text deltas, tool calls, tool results — *as the model produces them*. This is the "Claude Code feel" where the model narrates between actions instead of buffering everything into one chunk per turn.
@@ -1592,7 +1616,7 @@ agent = create_deep_agent(
1592
1616
  model="openai/gpt-4o",
1593
1617
  tools=[...],
1594
1618
  enable_summarization=True, # default
1595
- summarize_at_tokens=80_000, # default
1619
+ summarize_at_tokens="auto", # default: min(80k, 75% of window, window - max output)
1596
1620
  summarize_keep_last_n=6, # default
1597
1621
  summarizer_model="openai/gpt-4o-mini", # optional, falls back to main model
1598
1622
  )
@@ -2036,6 +2060,31 @@ prompture code-agent codex --auto-approve "Add tests for the pricing cache"
2036
2060
  prompture code-agent aider --auto-approve --model gpt-4o "Rename foo to bar across the package"
2037
2061
  ```
2038
2062
 
2063
+ #### Delegating a task
2064
+
2065
+ `prompture delegate` hands a task to the companion's automation queue instead
2066
+ of running the agent in your terminal: the companion (`prompture companion`,
2067
+ started for you if it's not running) drives Claude Code or Codex unattended —
2068
+ permission prompts skipped, model access from this machine's Prompture setup,
2069
+ so the caller needs no provider key. The agent's work streams to stdout, and
2070
+ the queue keeps going in the background if you stop watching. This is the
2071
+ entry point to give other agents: a delegating LLM can run
2072
+ `prompture delegate "…"` and read the result, instead of reaching for its own
2073
+ API keys.
2074
+
2075
+ ```bash
2076
+ prompture delegate "Translate docs/guide.md to Spanish"
2077
+ prompture delegate --agent codex --cost-cap 2 "Add tests for the pricing cache"
2078
+ prompture delegate-status # what's the queue doing now
2079
+ prompture delegate-answer "Use SQLite" # reply when a run ends on a question
2080
+ prompture delegate-resume # carry on after a failure or cost cap
2081
+ ```
2082
+
2083
+ Exit codes: `0` finished, `1` failed, `3` waiting for an answer, `4` stopped
2084
+ or still running in the background. `--json` prints the final run as JSON,
2085
+ `--no-wait` returns at once, and companion apps (like Prompture Desk) show the
2086
+ same queue live.
2087
+
2039
2088
  #### From the server
2040
2089
 
2041
2090
  `prompture serve` exposes coding-agent discovery and execution as HTTP
@@ -1300,6 +1300,28 @@ conv = Conversation("openai/gpt-4", tools=registry, simulated_tools=False)
1300
1300
 
1301
1301
  The simulation loop describes tools in the system prompt, asks the model to respond with JSON (`tool_call` or `final_answer`), executes tools, and feeds results back — all transparent to the caller.
1302
1302
 
1303
+ #### Keeping tools from filling the context window
1304
+
1305
+ Two defaults keep large tool setups cheap, in both `Conversation` and `Agent`:
1306
+
1307
+ - **Large results are stored, not cut.** A result over ~4k tokens, or a round of parallel results over ~12k tokens together (largest first), is stored and replaced by a short preview and an `artifact://` handle. The model reads what it needs with the built-in `read_tool_result(handle, query=..., offset=...)` tool, which is only offered once something has been stored. Error results are never stored.
1308
+ - **Tool schemas load on demand.** When the full schemas would cost more than ~8k tokens, the model gets `search_tools` and `load_tools` instead; loaded tools stay available for the rest of the conversation.
1309
+
1310
+ ```python
1311
+ from prompture import Conversation
1312
+ from prompture.agents.tool_context import ToolResultPolicy
1313
+
1314
+ conv = Conversation(
1315
+ "openai/gpt-4o",
1316
+ tools=registry,
1317
+ tool_result_policy=ToolResultPolicy(per_call_tokens=4000, batch_tokens=8000),
1318
+ defer_tools="auto", # True / False to force
1319
+ preload_tools=["get_weather"], # always sent, even when deferring
1320
+ )
1321
+ ```
1322
+
1323
+ `max_tool_result_length=None` keeps results whole, and `ToolResultPolicy(offload=False)` restores plain truncation. Stored results live in memory and do not survive `save()` / `load()`. A tool call left without a result (for example a live stream closed mid-round) gets a placeholder result on the next call, so the provider does not reject the history.
1324
+
1303
1325
  ### Live Streaming Tool Calls (any model, including local Ollama)
1304
1326
 
1305
1327
  `Conversation.ask_live` / `Agent.run_live` yields an interleaved event stream — text deltas, tool calls, tool results — *as the model produces them*. This is the "Claude Code feel" where the model narrates between actions instead of buffering everything into one chunk per turn.
@@ -1475,7 +1497,7 @@ agent = create_deep_agent(
1475
1497
  model="openai/gpt-4o",
1476
1498
  tools=[...],
1477
1499
  enable_summarization=True, # default
1478
- summarize_at_tokens=80_000, # default
1500
+ summarize_at_tokens="auto", # default: min(80k, 75% of window, window - max output)
1479
1501
  summarize_keep_last_n=6, # default
1480
1502
  summarizer_model="openai/gpt-4o-mini", # optional, falls back to main model
1481
1503
  )
@@ -1919,6 +1941,31 @@ prompture code-agent codex --auto-approve "Add tests for the pricing cache"
1919
1941
  prompture code-agent aider --auto-approve --model gpt-4o "Rename foo to bar across the package"
1920
1942
  ```
1921
1943
 
1944
+ #### Delegating a task
1945
+
1946
+ `prompture delegate` hands a task to the companion's automation queue instead
1947
+ of running the agent in your terminal: the companion (`prompture companion`,
1948
+ started for you if it's not running) drives Claude Code or Codex unattended —
1949
+ permission prompts skipped, model access from this machine's Prompture setup,
1950
+ so the caller needs no provider key. The agent's work streams to stdout, and
1951
+ the queue keeps going in the background if you stop watching. This is the
1952
+ entry point to give other agents: a delegating LLM can run
1953
+ `prompture delegate "…"` and read the result, instead of reaching for its own
1954
+ API keys.
1955
+
1956
+ ```bash
1957
+ prompture delegate "Translate docs/guide.md to Spanish"
1958
+ prompture delegate --agent codex --cost-cap 2 "Add tests for the pricing cache"
1959
+ prompture delegate-status # what's the queue doing now
1960
+ prompture delegate-answer "Use SQLite" # reply when a run ends on a question
1961
+ prompture delegate-resume # carry on after a failure or cost cap
1962
+ ```
1963
+
1964
+ Exit codes: `0` finished, `1` failed, `3` waiting for an answer, `4` stopped
1965
+ or still running in the background. `--json` prints the final run as JSON,
1966
+ `--no-wait` returns at once, and companion apps (like Prompture Desk) show the
1967
+ same queue live.
1968
+
1922
1969
  #### From the server
1923
1970
 
1924
1971
  `prompture serve` exposes coding-agent discovery and execution as HTTP
@@ -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.6.dev1'
22
- __version_tuple__ = version_tuple = (1, 13, 6, 'dev1')
21
+ __version__ = version = '1.13.7.dev1'
22
+ __version_tuple__ = version_tuple = (1, 13, 7, 'dev1')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -35,7 +35,7 @@ import logging
35
35
  import time
36
36
  import typing
37
37
  from collections.abc import Callable, Generator
38
- from typing import Any, Generic
38
+ from typing import Any, Generic, Literal
39
39
 
40
40
  from pydantic import BaseModel
41
41
 
@@ -47,6 +47,7 @@ from ..infra.provider_env import ProviderEnvironment
47
47
  from ..infra.session import UsageSession
48
48
  from .conversation import Conversation
49
49
  from .persona import Persona
50
+ from .tool_context import ToolResultPolicy
50
51
  from .tools_schema import ToolDefinition, ToolRegistry
51
52
  from .types import (
52
53
  AgentCallbacks,
@@ -256,6 +257,14 @@ class Agent(Generic[DepsType]):
256
257
  instead of wedging the run forever. ``None`` (default) means
257
258
  no timeout. Can be overridden per call via
258
259
  ``options={"tool_timeout": ...}``.
260
+ tool_result_policy: When a tool result is moved out of context
261
+ instead of inlined (see :class:`ToolResultPolicy`). Defaults
262
+ to offloading results over ~4k tokens, or ~12k per round.
263
+ defer_tools: Send tool schemas on demand via ``search_tools`` /
264
+ ``load_tools``. ``"auto"`` (default) defers once the full
265
+ schemas would cost more than ~8k tokens.
266
+ preload_tools: Tools whose schemas are always sent, even when
267
+ deferring.
259
268
  """
260
269
 
261
270
  def __init__(
@@ -286,6 +295,9 @@ class Agent(Generic[DepsType]):
286
295
  skill_config: dict[str, Any] | None = None,
287
296
  max_tool_result_length: int | None = None,
288
297
  tool_timeout: float | None = None,
298
+ tool_result_policy: ToolResultPolicy | None = None,
299
+ defer_tools: bool | Literal["auto"] = "auto",
300
+ preload_tools: list[str] | None = None,
289
301
  max_depth: int = _DEFAULT_MAX_AGENT_DEPTH,
290
302
  env: ProviderEnvironment | None = None,
291
303
  ) -> None:
@@ -317,6 +329,9 @@ class Agent(Generic[DepsType]):
317
329
  self._auto_approve_safe_only = auto_approve_safe_only
318
330
  self._skill_config = skill_config
319
331
  self._max_tool_result_length = max_tool_result_length
332
+ self._tool_result_policy = tool_result_policy
333
+ self._defer_tools = defer_tools
334
+ self._preload_tools = list(preload_tools) if preload_tools else None
320
335
  self._tool_timeout = tool_timeout
321
336
  self._conversation: Conversation | None = None
322
337
  # The conversation driving the current run. Tracked separately from
@@ -965,6 +980,11 @@ class Agent(Generic[DepsType]):
965
980
  kwargs["before_turn"] = hook
966
981
  if self._max_tool_result_length is not None:
967
982
  kwargs["max_tool_result_length"] = self._max_tool_result_length
983
+ if self._tool_result_policy is not None:
984
+ kwargs["tool_result_policy"] = self._tool_result_policy
985
+ kwargs["defer_tools"] = self._defer_tools
986
+ if self._preload_tools:
987
+ kwargs["preload_tools"] = self._preload_tools
968
988
  if self._tool_timeout is not None:
969
989
  kwargs["tool_timeout"] = self._tool_timeout
970
990
  if self._options:
@@ -23,7 +23,7 @@ import logging
23
23
  import time
24
24
  import typing
25
25
  from collections.abc import AsyncGenerator, Callable
26
- from typing import Any, Generic
26
+ from typing import Any, Generic, Literal
27
27
 
28
28
  from pydantic import BaseModel
29
29
 
@@ -33,6 +33,7 @@ from ..infra.callbacks import DriverCallbacks
33
33
  from ..infra.provider_env import ProviderEnvironment
34
34
  from ..infra.session import UsageSession
35
35
  from .persona import Persona
36
+ from .tool_context import ToolResultPolicy
36
37
  from .tools_schema import ToolDefinition, ToolRegistry
37
38
  from .types import (
38
39
  AgentCallbacks,
@@ -193,6 +194,14 @@ class AsyncAgent(Generic[DepsType]):
193
194
  instead of wedging the run forever. ``None`` (default) means
194
195
  no timeout. Can be overridden per call via
195
196
  ``options={"tool_timeout": ...}``.
197
+ tool_result_policy: When a tool result is moved out of context
198
+ instead of inlined (see :class:`ToolResultPolicy`). Defaults
199
+ to offloading results over ~4k tokens, or ~12k per round.
200
+ defer_tools: Send tool schemas on demand via ``search_tools`` /
201
+ ``load_tools``. ``"auto"`` (default) defers once the full
202
+ schemas would cost more than ~8k tokens.
203
+ preload_tools: Tools whose schemas are always sent, even when
204
+ deferring.
196
205
  """
197
206
 
198
207
  def __init__(
@@ -223,6 +232,9 @@ class AsyncAgent(Generic[DepsType]):
223
232
  skill_config: dict[str, Any] | None = None,
224
233
  max_tool_result_length: int | None = None,
225
234
  tool_timeout: float | None = None,
235
+ tool_result_policy: ToolResultPolicy | None = None,
236
+ defer_tools: bool | Literal["auto"] = "auto",
237
+ preload_tools: list[str] | None = None,
226
238
  max_depth: int = _DEFAULT_MAX_AGENT_DEPTH,
227
239
  env: ProviderEnvironment | None = None,
228
240
  ) -> None:
@@ -254,6 +266,9 @@ class AsyncAgent(Generic[DepsType]):
254
266
  self._auto_approve_safe_only = auto_approve_safe_only
255
267
  self._skill_config = skill_config
256
268
  self._max_tool_result_length = max_tool_result_length
269
+ self._tool_result_policy = tool_result_policy
270
+ self._defer_tools = defer_tools
271
+ self._preload_tools = list(preload_tools) if preload_tools else None
257
272
  self._tool_timeout = tool_timeout
258
273
  self._conversation: Any = None
259
274
  # The conversation driving the current run. Tracked separately from
@@ -993,6 +1008,11 @@ class AsyncAgent(Generic[DepsType]):
993
1008
  kwargs["before_turn"] = hook
994
1009
  if self._max_tool_result_length is not None:
995
1010
  kwargs["max_tool_result_length"] = self._max_tool_result_length
1011
+ if self._tool_result_policy is not None:
1012
+ kwargs["tool_result_policy"] = self._tool_result_policy
1013
+ kwargs["defer_tools"] = self._defer_tools
1014
+ if self._preload_tools:
1015
+ kwargs["preload_tools"] = self._preload_tools
996
1016
  if self._tool_timeout is not None:
997
1017
  kwargs["tool_timeout"] = self._tool_timeout
998
1018
  if self._options:
@@ -32,12 +32,13 @@ from ..media.image import ImageInput, make_image
32
32
  from ..persistence.serialization import export_conversation, import_conversation
33
33
  from ..persistence.store import load_from_file, save_to_file
34
34
  from .persona import Persona, get_persona
35
+ from .tool_context import ToolContextMixin, ToolResultPolicy, repair_tool_pairs
35
36
  from .tools_schema import ToolRegistry
36
37
 
37
38
  logger = logging.getLogger("prompture.async_conversation")
38
39
 
39
40
 
40
- class AsyncConversation:
41
+ class AsyncConversation(ToolContextMixin):
41
42
  """Async stateful multi-turn conversation with an LLM.
42
43
 
43
44
  Mirrors :class:`Conversation` but all methods are ``async``.
@@ -75,6 +76,9 @@ class AsyncConversation:
75
76
  on_model_fallback: Callable[[str, str, Any], None] | None = None,
76
77
  env: ProviderEnvironment | None = None,
77
78
  before_turn: Callable[[AsyncConversation, int], Any] | None = None,
79
+ tool_result_policy: ToolResultPolicy | None = None,
80
+ defer_tools: bool | Literal["auto"] = "auto",
81
+ preload_tools: list[str] | None = None,
78
82
  ) -> None:
79
83
  if system_prompt is not None and persona is not None:
80
84
  raise ValueError("Cannot provide both 'system_prompt' and 'persona'. Use one or the other.")
@@ -127,6 +131,12 @@ class AsyncConversation:
127
131
  self._tools = tools or ToolRegistry()
128
132
  self._max_tool_rounds = max_tool_rounds
129
133
  self._max_tool_result_length = max_tool_result_length
134
+ self._init_tool_context(
135
+ max_tool_result_length=max_tool_result_length,
136
+ tool_result_policy=tool_result_policy,
137
+ defer_tools=defer_tools,
138
+ preload_tools=preload_tools,
139
+ )
130
140
  self._simulated_tools = simulated_tools
131
141
  self._max_history_messages = max_history_messages
132
142
  self._tool_timeout = tool_timeout
@@ -214,6 +224,7 @@ class AsyncConversation:
214
224
  """Reset message history (keeps system_prompt and driver)."""
215
225
  self._messages.clear()
216
226
  self._full_tool_results.clear()
227
+ self._reset_tool_context()
217
228
 
218
229
  def request_stop(self) -> None:
219
230
  """Request a cooperative stop of the tool loop.
@@ -442,26 +453,6 @@ class AsyncConversation:
442
453
  blocks.append({"type": "image", "source": ic})
443
454
  return blocks
444
455
 
445
- def _truncate_tool_result(self, result_str: str) -> str:
446
- """Truncate a tool result string if it exceeds the configured limit.
447
-
448
- Returns the original string when no limit is set or the string is
449
- within bounds. Otherwise returns a truncated version with a note
450
- indicating the original length.
451
- """
452
- if self._max_tool_result_length is None:
453
- return result_str
454
- if len(result_str) <= self._max_tool_result_length:
455
- return result_str
456
- logger.debug(
457
- "Truncating tool result from %d to %d chars",
458
- len(result_str),
459
- self._max_tool_result_length,
460
- )
461
- return (
462
- result_str[: self._max_tool_result_length] + f"\n\n[... result truncated ({len(result_str):,} chars total)]"
463
- )
464
-
465
456
  def _trim_history(self) -> None:
466
457
  """Trim history to the sliding window without orphaning tool pairs.
467
458
 
@@ -507,11 +498,12 @@ class AsyncConversation:
507
498
  from ..extraction.tukuy_bridge import current_tool_call_id
508
499
 
509
500
  token = current_tool_call_id.set(tc["id"])
501
+ registry = self._dispatch_registry(tc["name"])
510
502
  try:
511
503
  if timeout is not None:
512
- result = await asyncio.wait_for(self._tools.aexecute(tc["name"], tc["arguments"]), timeout)
504
+ result = await asyncio.wait_for(registry.aexecute(tc["name"], tc["arguments"]), timeout)
513
505
  else:
514
- result = await self._tools.aexecute(tc["name"], tc["arguments"])
506
+ result = await registry.aexecute(tc["name"], tc["arguments"])
515
507
  return (json.dumps(result) if not isinstance(result, str) else result), False
516
508
  except (TimeoutError, asyncio.TimeoutError):
517
509
  return f"Error: tool '{tc['name']}' timed out after {timeout}s", True
@@ -588,6 +580,7 @@ class AsyncConversation:
588
580
 
589
581
  def _build_messages(self, user_content: str, images: list[ImageInput] | None = None) -> list[dict[str, Any]]:
590
582
  """Build the full messages array for an API call."""
583
+ repair_tool_pairs(self._messages)
591
584
  msgs: list[dict[str, Any]] = []
592
585
  if self._system_prompt:
593
586
  msgs.append({"role": "system", "content": self._system_prompt})
@@ -673,7 +666,6 @@ class AsyncConversation:
673
666
  self._stop_requested = False
674
667
  self._max_rounds_reached = False
675
668
  merged = {**self._options, **(options or {})}
676
- tool_defs = self._tools.to_openai_format()
677
669
 
678
670
  user_content = self._build_content_with_images(content, images)
679
671
  self._messages.append({"role": "user", "content": user_content})
@@ -686,6 +678,7 @@ class AsyncConversation:
686
678
  self._check_budget()
687
679
  if await self._run_before_turn():
688
680
  msgs = self._build_messages_raw()
681
+ tool_defs = self._active_tools().to_openai_format()
689
682
  resp = await self._driver.generate_messages_with_tools_with_hooks(msgs, tool_defs, merged)
690
683
 
691
684
  meta = resp.get("meta", {})
@@ -723,15 +716,14 @@ class AsyncConversation:
723
716
  msgs.append(assistant_msg)
724
717
 
725
718
  results = await self._run_tool_calls(tool_calls, merged)
726
- for tc, (result_str, _is_error) in zip(tool_calls, results, strict=True):
727
- # Preserve full result for step extraction before truncating
719
+ batch: list[tuple[str, str, bool]] = []
720
+ for tc, (result_str, is_error) in zip(tool_calls, results, strict=True):
721
+ # Preserve full result for step extraction before shaping
728
722
  self._full_tool_results[tc["id"]] = result_str
723
+ batch.append((tc["name"], result_str, is_error))
729
724
 
730
- tool_result_msg: dict[str, Any] = {
731
- "role": "tool",
732
- "tool_call_id": tc["id"],
733
- "content": self._truncate_tool_result(result_str),
734
- }
725
+ for tc, content in zip(tool_calls, self._shape_tool_results(batch), strict=True):
726
+ tool_result_msg: dict[str, Any] = {"role": "tool", "tool_call_id": tc["id"], "content": content}
735
727
  self._messages.append(tool_result_msg)
736
728
  msgs.append(tool_result_msg)
737
729
 
@@ -773,7 +765,6 @@ class AsyncConversation:
773
765
  self._stop_requested = False
774
766
  self._max_rounds_reached = False
775
767
  merged = {**self._options, **(options or {})}
776
- tool_defs = self._tools.to_openai_format()
777
768
 
778
769
  user_content = self._build_content_with_images(content, images)
779
770
  self._messages.append({"role": "user", "content": user_content})
@@ -788,6 +779,7 @@ class AsyncConversation:
788
779
  self._check_budget()
789
780
  if await self._run_before_turn():
790
781
  msgs = self._build_messages_raw()
782
+ tool_defs = self._active_tools().to_openai_format()
791
783
  resp = await self._driver.generate_messages_with_tools_with_hooks(msgs, tool_defs, merged)
792
784
 
793
785
  meta = resp.get("meta", {})
@@ -834,9 +826,11 @@ class AsyncConversation:
834
826
  # Independent calls run concurrently; results stay in call order
835
827
  # so tool_call_id <-> result matching holds.
836
828
  results = await self._run_tool_calls(tool_calls, merged)
837
- for tc, (result_str, _is_error) in zip(tool_calls, results, strict=True):
838
- # Preserve full result for step extraction before truncating
829
+ batch: list[tuple[str, str, bool]] = []
830
+ for tc, (result_str, is_error) in zip(tool_calls, results, strict=True):
831
+ # Preserve full result for step extraction before shaping
839
832
  self._full_tool_results[tc["id"]] = result_str
833
+ batch.append((tc["name"], result_str, is_error))
840
834
 
841
835
  # Yield the FULL result for UI consumers
842
836
  yield {
@@ -846,12 +840,9 @@ class AsyncConversation:
846
840
  "id": tc["id"],
847
841
  }
848
842
 
849
- # Truncate before adding to conversation to avoid token overflow
850
- tool_result_msg: dict[str, Any] = {
851
- "role": "tool",
852
- "tool_call_id": tc["id"],
853
- "content": self._truncate_tool_result(result_str),
854
- }
843
+ # Shape the round as a whole before it enters history
844
+ for tc, content in zip(tool_calls, self._shape_tool_results(batch), strict=True):
845
+ tool_result_msg: dict[str, Any] = {"role": "tool", "tool_call_id": tc["id"], "content": content}
855
846
  self._messages.append(tool_result_msg)
856
847
  msgs.append(tool_result_msg)
857
848
 
@@ -920,7 +911,6 @@ class AsyncConversation:
920
911
  self._stop_requested = False
921
912
  self._max_rounds_reached = False
922
913
  merged = {**self._options, **(options or {})}
923
- tool_defs = self._tools.to_openai_format()
924
914
 
925
915
  user_content = self._build_content_with_images(content, images)
926
916
  self._messages.append({"role": "user", "content": user_content})
@@ -945,6 +935,7 @@ class AsyncConversation:
945
935
  pending_tools: list[dict[str, Any]] = []
946
936
  turn_usage: dict[str, Any] = {}
947
937
 
938
+ tool_defs = self._active_tools().to_openai_format()
948
939
  stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
949
940
  stream_started = time.perf_counter()
950
941
  recorded = False
@@ -1034,16 +1025,14 @@ class AsyncConversation:
1034
1025
  # Independent calls run concurrently; results stay in call order
1035
1026
  # so tool_call_id <-> result matching holds.
1036
1027
  results = await self._run_tool_calls(pending_tools, merged)
1028
+ batch: list[tuple[str, str, bool]] = []
1037
1029
  for tc, (result_str, is_error) in zip(pending_tools, results, strict=True):
1038
1030
  self._full_tool_results[tc["id"]] = result_str
1031
+ batch.append((tc["name"], result_str, is_error))
1039
1032
  yield ToolResult(id=tc["id"], name=tc["name"], output=result_str, is_error=is_error)
1040
1033
 
1041
- truncated_result = self._truncate_tool_result(result_str)
1042
- tool_result_msg: dict[str, Any] = {
1043
- "role": "tool",
1044
- "tool_call_id": tc["id"],
1045
- "content": truncated_result,
1046
- }
1034
+ for tc, content in zip(pending_tools, self._shape_tool_results(batch), strict=True):
1035
+ tool_result_msg: dict[str, Any] = {"role": "tool", "tool_call_id": tc["id"], "content": content}
1047
1036
  self._messages.append(tool_result_msg)
1048
1037
  msgs.append(tool_result_msg)
1049
1038
 
@@ -1064,16 +1053,12 @@ class AsyncConversation:
1064
1053
  images: list[ImageInput] | None = None,
1065
1054
  ) -> AsyncIterator[dict[str, Any]]:
1066
1055
  """Async simulated tool calling with event emission."""
1067
- from .simulated_tools import build_tool_prompt, format_tool_result, parse_simulated_response
1056
+ from .simulated_tools import format_tool_result, parse_simulated_response
1068
1057
 
1069
1058
  self._stop_requested = False
1070
1059
  self._max_rounds_reached = False
1071
1060
  merged = {**self._options, **(options or {})}
1072
- tool_prompt = build_tool_prompt(self._tools)
1073
-
1074
- augmented_system = tool_prompt
1075
- if self._system_prompt:
1076
- augmented_system = f"{self._system_prompt}\n\n{tool_prompt}"
1061
+ augmented_system = self._simulated_system_prompt()
1077
1062
 
1078
1063
  user_content = self._build_content_with_images(content, images)
1079
1064
  self._messages.append({"role": "user", "content": user_content})
@@ -1086,6 +1071,7 @@ class AsyncConversation:
1086
1071
  return
1087
1072
  self._check_budget()
1088
1073
  await self._run_before_turn()
1074
+ augmented_system = self._simulated_system_prompt()
1089
1075
  msgs: list[dict[str, Any]] = []
1090
1076
  msgs.append({"role": "system", "content": augmented_system})
1091
1077
  msgs.extend(self._messages)
@@ -1095,7 +1081,7 @@ class AsyncConversation:
1095
1081
  meta = resp.get("meta", {})
1096
1082
  self._accumulate_usage(meta)
1097
1083
 
1098
- parsed = parse_simulated_response(text, self._tools)
1084
+ parsed = parse_simulated_response(text, self._all_callable_tools())
1099
1085
 
1100
1086
  if parsed["type"] == "final_answer":
1101
1087
  answer = parsed["content"]
@@ -1115,10 +1101,11 @@ class AsyncConversation:
1115
1101
 
1116
1102
  _sim_token = _sim_tc_id.set("")
1117
1103
  try:
1104
+ registry = self._dispatch_registry(tool_name)
1118
1105
  if timeout is not None:
1119
- result = await asyncio.wait_for(self._tools.aexecute(tool_name, tool_args), timeout)
1106
+ result = await asyncio.wait_for(registry.aexecute(tool_name, tool_args), timeout)
1120
1107
  else:
1121
- result = await self._tools.aexecute(tool_name, tool_args)
1108
+ result = await registry.aexecute(tool_name, tool_args)
1122
1109
  result_msg = format_tool_result(tool_name, result)
1123
1110
  except (TimeoutError, asyncio.TimeoutError):
1124
1111
  result_msg = format_tool_result(tool_name, f"Error: tool '{tool_name}' timed out after {timeout}s")
@@ -1129,7 +1116,8 @@ class AsyncConversation:
1129
1116
 
1130
1117
  yield {"type": "tool_result", "name": tool_name, "result": result_msg, "id": ""}
1131
1118
 
1132
- self._messages.append({"role": "user", "content": self._truncate_tool_result(result_msg)})
1119
+ (shaped,) = self._shape_tool_results([(tool_name, result_msg, False)])
1120
+ self._messages.append({"role": "user", "content": shaped})
1133
1121
 
1134
1122
  # Max rounds exhausted — graceful final answer without tools (C4).
1135
1123
  logger.warning(
@@ -1147,17 +1135,12 @@ class AsyncConversation:
1147
1135
  images: list[ImageInput] | None = None,
1148
1136
  ) -> str:
1149
1137
  """Async prompt-based tool calling for drivers without native tool use."""
1150
- from .simulated_tools import build_tool_prompt, format_tool_result, parse_simulated_response
1138
+ from .simulated_tools import format_tool_result, parse_simulated_response
1151
1139
 
1152
1140
  self._stop_requested = False
1153
1141
  self._max_rounds_reached = False
1154
1142
  merged = {**self._options, **(options or {})}
1155
- tool_prompt = build_tool_prompt(self._tools)
1156
-
1157
- # Augment system prompt with tool descriptions
1158
- augmented_system = tool_prompt
1159
- if self._system_prompt:
1160
- augmented_system = f"{self._system_prompt}\n\n{tool_prompt}"
1143
+ augmented_system = self._simulated_system_prompt()
1161
1144
 
1162
1145
  # Record user message in history
1163
1146
  user_content = self._build_content_with_images(content, images)
@@ -1169,7 +1152,7 @@ class AsyncConversation:
1169
1152
  return await self._final_answer_simulated(augmented_system, merged)
1170
1153
  self._check_budget()
1171
1154
  await self._run_before_turn()
1172
- # Build messages with the augmented system prompt
1155
+ augmented_system = self._simulated_system_prompt()
1173
1156
  msgs: list[dict[str, Any]] = []
1174
1157
  msgs.append({"role": "system", "content": augmented_system})
1175
1158
  msgs.extend(self._messages)
@@ -1179,7 +1162,7 @@ class AsyncConversation:
1179
1162
  meta = resp.get("meta", {})
1180
1163
  self._accumulate_usage(meta)
1181
1164
 
1182
- parsed = parse_simulated_response(text, self._tools)
1165
+ parsed = parse_simulated_response(text, self._all_callable_tools())
1183
1166
 
1184
1167
  if parsed["type"] == "final_answer":
1185
1168
  answer: str = parsed["content"]
@@ -1195,18 +1178,20 @@ class AsyncConversation:
1195
1178
 
1196
1179
  timeout = merged.get("tool_timeout", self._tool_timeout)
1197
1180
  try:
1181
+ registry = self._dispatch_registry(tool_name)
1198
1182
  if timeout is not None:
1199
- result = await asyncio.wait_for(self._tools.aexecute(tool_name, tool_args), timeout)
1183
+ result = await asyncio.wait_for(registry.aexecute(tool_name, tool_args), timeout)
1200
1184
  else:
1201
- result = await self._tools.aexecute(tool_name, tool_args)
1185
+ result = await registry.aexecute(tool_name, tool_args)
1202
1186
  result_msg = format_tool_result(tool_name, result)
1203
1187
  except (TimeoutError, asyncio.TimeoutError):
1204
1188
  result_msg = format_tool_result(tool_name, f"Error: tool '{tool_name}' timed out after {timeout}s")
1205
1189
  except Exception as exc:
1206
1190
  result_msg = format_tool_result(tool_name, f"Error: {exc}")
1207
1191
 
1208
- # Record tool result as a user message (truncated for the LLM)
1209
- self._messages.append({"role": "user", "content": self._truncate_tool_result(result_msg)})
1192
+ # Record tool result as a user message (shaped for the LLM)
1193
+ (shaped,) = self._shape_tool_results([(tool_name, result_msg, False)])
1194
+ self._messages.append({"role": "user", "content": shaped})
1210
1195
 
1211
1196
  # Max rounds exhausted — graceful final answer without tools (C4).
1212
1197
  logger.warning(
@@ -1218,6 +1203,7 @@ class AsyncConversation:
1218
1203
 
1219
1204
  def _build_messages_raw(self) -> list[dict[str, Any]]:
1220
1205
  """Build messages array from system prompt + full history (including tool messages)."""
1206
+ repair_tool_pairs(self._messages)
1221
1207
  msgs: list[dict[str, Any]] = []
1222
1208
  if self._system_prompt:
1223
1209
  msgs.append({"role": "system", "content": self._system_prompt})