prompture 1.13.5.dev2__tar.gz → 1.13.5.dev3__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 (677) hide show
  1. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/PKG-INFO +6 -4
  2. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/README.md +5 -3
  3. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/_version.py +2 -2
  4. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/http.py +146 -2
  5. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/logging.py +11 -0
  6. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/agent.py +23 -13
  7. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/SKILL.md +6 -3
  8. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/adapter.py +43 -1
  9. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/config.py +14 -1
  10. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/PKG-INFO +6 -4
  11. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-driver/SKILL.md +0 -0
  12. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-driver/references/driver-template.md +0 -0
  13. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-example/SKILL.md +0 -0
  14. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-field/SKILL.md +0 -0
  15. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-persona/SKILL.md +0 -0
  16. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-test/SKILL.md +0 -0
  17. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-tool/SKILL.md +0 -0
  18. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/create-pr/SKILL.md +0 -0
  19. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/run-tests/SKILL.md +0 -0
  20. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  21. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/update-pricing/SKILL.md +0 -0
  22. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.env.copy +0 -0
  23. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.gitattributes +0 -0
  24. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/FUNDING.yml +0 -0
  25. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  26. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  27. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  28. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  29. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/scripts/update_docs_version.py +0 -0
  30. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/scripts/update_wrapper_version.py +0 -0
  31. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/dev.yml +0 -0
  32. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/documentation.yml +0 -0
  33. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/pricing-freshness.yml +0 -0
  34. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/publish.yml +0 -0
  35. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/security.yml +0 -0
  36. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.safety-project.ini +0 -0
  37. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/AGENTS.md +0 -0
  38. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/BREAKING_CHANGES.md +0 -0
  39. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/CLAUDE.md +0 -0
  40. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/CONTRIBUTING.md +0 -0
  41. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/LICENSE +0 -0
  42. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/MANIFEST.in +0 -0
  43. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/ROADMAP.md +0 -0
  44. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/SECURITY.md +0 -0
  45. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/VERSION +0 -0
  46. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/dev.ps1 +0 -0
  47. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/dev.sh +0 -0
  48. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/llms.txt +0 -0
  49. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/mypy_errors.txt +0 -0
  50. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/README.md +0 -0
  51. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/README.md +0 -0
  52. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  53. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/pyproject.toml +0 -0
  54. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/test.py +0 -0
  55. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/README.md +0 -0
  56. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  57. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/pyproject.toml +0 -0
  58. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/test.py +0 -0
  59. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/__init__.py +0 -0
  60. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/__main__.py +0 -0
  61. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/_internal/__init__.py +0 -0
  62. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/_internal/json_encoder.py +0 -0
  63. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/__init__.py +0 -0
  64. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/agent.py +0 -0
  65. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/assistant.py +0 -0
  66. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/async_agent.py +0 -0
  67. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/async_conversation.py +0 -0
  68. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/async_deep_agent.py +0 -0
  69. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/conversation.py +0 -0
  70. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/__init__.py +0 -0
  71. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/planner.py +0 -0
  72. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/subagents.py +0 -0
  73. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/summarizer.py +0 -0
  74. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/vfs.py +0 -0
  75. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep_agent.py +0 -0
  76. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep_prompts.py +0 -0
  77. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep_state.py +0 -0
  78. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/live_events.py +0 -0
  79. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/persona.py +0 -0
  80. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/review_loop.py +0 -0
  81. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/simulated_tools.py +0 -0
  82. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/skill_miner.py +0 -0
  83. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/skills.py +0 -0
  84. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/tool_grammars.py +0 -0
  85. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/tools_schema.py +0 -0
  86. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/types.py +0 -0
  87. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/aio/__init__.py +0 -0
  88. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/bridges/__init__.py +0 -0
  89. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/bridges/tukuy_backend.py +0 -0
  90. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/__init__.py +0 -0
  91. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/backends.py +0 -0
  92. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/builtin_checks.py +0 -0
  93. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/challenge.py +0 -0
  94. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/errors.py +0 -0
  95. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/health.py +0 -0
  96. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/probe.py +0 -0
  97. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/url_safety.py +0 -0
  98. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/__init__.py +0 -0
  99. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/core.py +0 -0
  100. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/stores.py +0 -0
  101. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/types.py +0 -0
  102. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/citations/__init__.py +0 -0
  103. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/citations/core.py +0 -0
  104. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/citations/types.py +0 -0
  105. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/__init__.py +0 -0
  106. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/cli.py +0 -0
  107. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/doctor_cmd.py +0 -0
  108. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/formatters.py +0 -0
  109. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/mcp_cmd.py +0 -0
  110. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/research_cmd.py +0 -0
  111. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/runner.py +0 -0
  112. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/server.py +0 -0
  113. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/setup_cmd.py +0 -0
  114. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/skill_cmd.py +0 -0
  115. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/transcribe_cmd.py +0 -0
  116. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/__init__.py +0 -0
  117. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/automations.py +0 -0
  118. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/calls.py +0 -0
  119. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/capacity.py +0 -0
  120. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/coding_tools.py +0 -0
  121. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/hook.py +0 -0
  122. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/live.py +0 -0
  123. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/local.py +0 -0
  124. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/memory.py +0 -0
  125. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/reuse.py +0 -0
  126. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/router.py +0 -0
  127. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/routing_policy.py +0 -0
  128. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/server.py +0 -0
  129. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/summary.py +0 -0
  130. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/tool_routing.py +0 -0
  131. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/__init__.py +0 -0
  132. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/dedup.py +0 -0
  133. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/evol.py +0 -0
  134. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/filters.py +0 -0
  135. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/formats.py +0 -0
  136. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/schemas.py +0 -0
  137. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/seed.py +0 -0
  138. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/synth.py +0 -0
  139. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/doctor/__init__.py +0 -0
  140. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/doctor/core.py +0 -0
  141. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/doctor/providers.py +0 -0
  142. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/__init__.py +0 -0
  143. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_media_usage.py +0 -0
  144. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_ollama_options.py +0 -0
  145. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_openai_compat.py +0 -0
  146. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_openai_compat_stream.py +0 -0
  147. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_openai_responses.py +0 -0
  148. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_prompt_cache.py +0 -0
  149. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_prompted_tool_stream.py +0 -0
  150. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_usage_reporting.py +0 -0
  151. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/aggregator_base.py +0 -0
  152. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/airllm_driver.py +0 -0
  153. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/assemblyai_stt_driver.py +0 -0
  154. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_aggregator_base.py +0 -0
  155. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_airllm_driver.py +0 -0
  156. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
  157. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_azure_driver.py +0 -0
  158. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_base.py +0 -0
  159. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_bedrock_driver.py +0 -0
  160. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  161. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cachibot_driver.py +0 -0
  162. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
  163. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_claude_driver.py +0 -0
  164. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cohere_driver.py +0 -0
  165. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  166. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  167. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
  168. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
  169. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_deepseek_driver.py +0 -0
  170. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
  171. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
  172. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_embedding_base.py +0 -0
  173. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  174. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  175. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_google_driver.py +0 -0
  176. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  177. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_google_vertexai_driver.py +0 -0
  178. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_grok_driver.py +0 -0
  179. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
  180. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  181. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_groq_driver.py +0 -0
  182. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_hugging_driver.py +0 -0
  183. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  184. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_img_gen_base.py +0 -0
  185. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  186. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  187. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_kev_decision_driver.py +0 -0
  188. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  189. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  190. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_laya_decision_driver.py +0 -0
  191. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_lmstudio_driver.py +0 -0
  192. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_local_http_driver.py +0 -0
  193. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  194. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_minimax_driver.py +0 -0
  195. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  196. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mistral_driver.py +0 -0
  197. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  198. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_modelscope_driver.py +0 -0
  199. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_moonshot_driver.py +0 -0
  200. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
  201. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  202. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  203. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  204. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_ollama_driver.py +0 -0
  205. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  206. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_compatible_driver.py +0 -0
  207. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_driver.py +0 -0
  208. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_embedding_driver.py +0 -0
  209. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
  210. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  211. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_stt_driver.py +0 -0
  212. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_tts_driver.py +0 -0
  213. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openrouter_driver.py +0 -0
  214. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  215. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_registry.py +0 -0
  216. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  217. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_runway_tts_driver.py +0 -0
  218. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  219. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  220. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_stt_base.py +0 -0
  221. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_systemone_compatible_driver.py +0 -0
  222. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_tts_base.py +0 -0
  223. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_typesafe_decision_driver.py +0 -0
  224. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_video_gen_base.py +0 -0
  225. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  226. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  227. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_zai_driver.py +0 -0
  228. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/audio_registry.py +0 -0
  229. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/azure_config.py +0 -0
  230. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/azure_driver.py +0 -0
  231. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/base.py +0 -0
  232. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/bedrock_driver.py +0 -0
  233. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  234. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cachibot_driver.py +0 -0
  235. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cartesia_tts_driver.py +0 -0
  236. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/claude_driver.py +0 -0
  237. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cohere_driver.py +0 -0
  238. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cohere_embedding_driver.py +0 -0
  239. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cohere_rerank_driver.py +0 -0
  240. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/decision_base.py +0 -0
  241. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/decision_registry.py +0 -0
  242. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/deepgram_stt_driver.py +0 -0
  243. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/deepgram_tts_driver.py +0 -0
  244. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/deepseek_driver.py +0 -0
  245. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/driver_registry.py +0 -0
  246. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
  247. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
  248. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/embedding_base.py +0 -0
  249. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/embedding_registry.py +0 -0
  250. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/fal_img_gen_driver.py +0 -0
  251. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/fal_video_gen_driver.py +0 -0
  252. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/google_driver.py +0 -0
  253. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/google_img_gen_driver.py +0 -0
  254. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/google_vertexai_driver.py +0 -0
  255. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/grok_driver.py +0 -0
  256. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/grok_img_gen_driver.py +0 -0
  257. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/grok_video_gen_driver.py +0 -0
  258. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/groq_driver.py +0 -0
  259. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/hugging_driver.py +0 -0
  260. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  261. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/img_gen_base.py +0 -0
  262. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/img_gen_registry.py +0 -0
  263. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/jina_embedding_driver.py +0 -0
  264. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/jina_rerank_driver.py +0 -0
  265. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/job_runner.py +0 -0
  266. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/kev_decision_driver.py +0 -0
  267. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/kling_img_gen_driver.py +0 -0
  268. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/kling_video_gen_driver.py +0 -0
  269. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/laya_decision_driver.py +0 -0
  270. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/lipsync_base.py +0 -0
  271. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/lipsync_registry.py +0 -0
  272. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/lmstudio_driver.py +0 -0
  273. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/local_http_driver.py +0 -0
  274. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/luma_video_gen_driver.py +0 -0
  275. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/media_capabilities.py +0 -0
  276. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/minimax_driver.py +0 -0
  277. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  278. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mistral_driver.py +0 -0
  279. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mistral_moderation_driver.py +0 -0
  280. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/modelscope_driver.py +0 -0
  281. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/moderation_base.py +0 -0
  282. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/moderation_registry.py +0 -0
  283. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/moonshot_driver.py +0 -0
  284. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/muapi_aggregator_driver.py +0 -0
  285. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/music_base.py +0 -0
  286. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/music_registry.py +0 -0
  287. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  288. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  289. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/nomic_embedding_driver.py +0 -0
  290. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/ollama_driver.py +0 -0
  291. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/ollama_embedding_driver.py +0 -0
  292. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_compatible_driver.py +0 -0
  293. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_driver.py +0 -0
  294. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_embedding_driver.py +0 -0
  295. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_img_gen_driver.py +0 -0
  296. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_moderation_driver.py +0 -0
  297. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_stt_driver.py +0 -0
  298. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_tts_driver.py +0 -0
  299. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openrouter_driver.py +0 -0
  300. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/pika_video_gen_driver.py +0 -0
  301. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/provider_branding.py +0 -0
  302. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/provider_descriptors.py +0 -0
  303. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/registry.py +0 -0
  304. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/rerank_base.py +0 -0
  305. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/rerank_registry.py +0 -0
  306. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  307. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_capabilities.py +0 -0
  308. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_img_gen_driver.py +0 -0
  309. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_tts_driver.py +0 -0
  310. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_video_gen_driver.py +0 -0
  311. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/stability_img_gen_driver.py +0 -0
  312. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/stt_base.py +0 -0
  313. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/systemone_compatible_driver.py +0 -0
  314. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/tts_base.py +0 -0
  315. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/typesafe_decision_driver.py +0 -0
  316. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/vertex_img_gen_driver.py +0 -0
  317. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/video_gen_base.py +0 -0
  318. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/video_gen_registry.py +0 -0
  319. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/vision_helpers.py +0 -0
  320. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/voyage_embedding_driver.py +0 -0
  321. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/voyage_rerank_driver.py +0 -0
  322. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/zai_driver.py +0 -0
  323. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/__init__.py +0 -0
  324. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/base.py +0 -0
  325. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/faithfulness.py +0 -0
  326. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/judge.py +0 -0
  327. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/pairwise.py +0 -0
  328. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/self_consistency.py +0 -0
  329. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/exceptions.py +0 -0
  330. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/__init__.py +0 -0
  331. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/context.py +0 -0
  332. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/context_eval.py +0 -0
  333. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/data/document_qa_policies.json +0 -0
  334. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/data/extraction_contacts.json +0 -0
  335. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/data/tool_task_inventory.json +0 -0
  336. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/fixtures.py +0 -0
  337. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/gates.py +0 -0
  338. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/harness.py +0 -0
  339. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/__init__.py +0 -0
  340. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/candidates.py +0 -0
  341. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/optimizer.py +0 -0
  342. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/promotion.py +0 -0
  343. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/scorecard.py +0 -0
  344. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/integration.py +0 -0
  345. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/outcomes.py +0 -0
  346. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/policy.py +0 -0
  347. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/sandbox.py +0 -0
  348. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/scoring.py +0 -0
  349. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/__init__.py +0 -0
  350. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/base.py +0 -0
  351. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/critique.py +0 -0
  352. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/direct.py +0 -0
  353. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/registry.py +0 -0
  354. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/retrieve.py +0 -0
  355. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/types.py +0 -0
  356. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/__init__.py +0 -0
  357. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/_usage.py +0 -0
  358. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/async_core.py +0 -0
  359. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/code_extraction.py +0 -0
  360. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/core.py +0 -0
  361. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/few_shot.py +0 -0
  362. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/fields.py +0 -0
  363. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/reasoning.py +0 -0
  364. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/strategy.py +0 -0
  365. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/streaming.py +0 -0
  366. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/tools.py +0 -0
  367. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/tukuy_bridge.py +0 -0
  368. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/validator.py +0 -0
  369. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/__init__.py +0 -0
  370. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/anthropic_format.py +0 -0
  371. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/gemini_format.py +0 -0
  372. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/openai_format.py +0 -0
  373. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/reasoning_cache.py +0 -0
  374. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/responses_format.py +0 -0
  375. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/__init__.py +0 -0
  376. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/async_groups.py +0 -0
  377. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/consensus.py +0 -0
  378. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/debate.py +0 -0
  379. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/fusion.py +0 -0
  380. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/groups.py +0 -0
  381. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/types.py +0 -0
  382. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/__init__.py +0 -0
  383. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/enhance.py +0 -0
  384. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/negative.py +0 -0
  385. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/set_planner.py +0 -0
  386. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/style_presets.py +0 -0
  387. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/__init__.py +0 -0
  388. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/accounts.py +0 -0
  389. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/billing.py +0 -0
  390. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/budget.py +0 -0
  391. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/cache.py +0 -0
  392. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/callbacks.py +0 -0
  393. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/capabilities.py +0 -0
  394. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_activity.py +0 -0
  395. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_events.py +0 -0
  396. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_readers.py +0 -0
  397. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_specs.py +0 -0
  398. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_usage.py +0 -0
  399. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agents.py +0 -0
  400. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/compression.py +0 -0
  401. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/cost_mixin.py +0 -0
  402. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/credentials.py +0 -0
  403. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/discovery.py +0 -0
  404. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/environment.py +0 -0
  405. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/ledger.py +0 -0
  406. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/media_pricing.py +0 -0
  407. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/media_rates.json +0 -0
  408. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/model_rates.py +0 -0
  409. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/otel.py +0 -0
  410. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/pricing.py +0 -0
  411. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/provider_env.py +0 -0
  412. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rate_limits.py +0 -0
  413. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/anthropic.json +0 -0
  414. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/azure.json +0 -0
  415. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/bedrock.json +0 -0
  416. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/cerebras.json +0 -0
  417. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/cohere.json +0 -0
  418. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/deepinfra.json +0 -0
  419. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/deepseek.json +0 -0
  420. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/fireworks.json +0 -0
  421. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/google.json +0 -0
  422. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/google_vertexai.json +0 -0
  423. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/groq.json +0 -0
  424. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/jina.json +0 -0
  425. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/kev.json +0 -0
  426. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/laya.json +0 -0
  427. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/mistral.json +0 -0
  428. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/mixedbread.json +0 -0
  429. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/moonshot.json +0 -0
  430. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/nomic.json +0 -0
  431. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/nvidia.json +0 -0
  432. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/openai.json +0 -0
  433. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/openrouter.json +0 -0
  434. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/perplexity.json +0 -0
  435. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/sambanova.json +0 -0
  436. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/siliconflow.json +0 -0
  437. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/together.json +0 -0
  438. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/typesafe.json +0 -0
  439. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/voyage.json +0 -0
  440. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/xai.json +0 -0
  441. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/session.py +0 -0
  442. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/settings.py +0 -0
  443. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/token_counting.py +0 -0
  444. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/tracker.py +0 -0
  445. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/tukuy_backend.py +0 -0
  446. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/updates.py +0 -0
  447. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/__init__.py +0 -0
  448. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/chunking.py +0 -0
  449. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/detect.py +0 -0
  450. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/document.py +0 -0
  451. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/__init__.py +0 -0
  452. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/base.py +0 -0
  453. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/csv_parser.py +0 -0
  454. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/docx.py +0 -0
  455. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/html.py +0 -0
  456. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/markdown.py +0 -0
  457. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/pdf.py +0 -0
  458. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/xlsx.py +0 -0
  459. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/integrations/__init__.py +0 -0
  460. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/integrations/mcp_bridge.py +0 -0
  461. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/integrations/tukuy_bridge.py +0 -0
  462. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/jobs.py +0 -0
  463. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/__init__.py +0 -0
  464. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/core.py +0 -0
  465. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/stores.py +0 -0
  466. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/types.py +0 -0
  467. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/__init__.py +0 -0
  468. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/client.py +0 -0
  469. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/health.py +0 -0
  470. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/hub.py +0 -0
  471. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/importers.py +0 -0
  472. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/server.py +0 -0
  473. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/tools.py +0 -0
  474. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/__init__.py +0 -0
  475. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/agent_tools.py +0 -0
  476. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/audio.py +0 -0
  477. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/hosting.py +0 -0
  478. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/image.py +0 -0
  479. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/__init__.py +0 -0
  480. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/errors.py +0 -0
  481. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/ffmpeg.py +0 -0
  482. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/groq_stt.py +0 -0
  483. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/health.py +0 -0
  484. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/sources.py +0 -0
  485. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/summarize.py +0 -0
  486. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/tools.py +0 -0
  487. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/transcribe.py +0 -0
  488. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/video.py +0 -0
  489. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/01-why-prompture.md +0 -0
  490. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/02-installation.md +0 -0
  491. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/03-quickstart.md +0 -0
  492. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/04-toon-input.md +0 -0
  493. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/05-test-harness.md +0 -0
  494. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/06-stability.md +0 -0
  495. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/07-migration.md +0 -0
  496. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/__init__.py +0 -0
  497. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/history.py +0 -0
  498. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/serialization.py +0 -0
  499. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/store.py +0 -0
  500. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/__init__.py +0 -0
  501. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/pipeline.py +0 -0
  502. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/resolver.py +0 -0
  503. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/routing.py +0 -0
  504. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/__init__.py +0 -0
  505. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/base.py +0 -0
  506. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/__init__.py +0 -0
  507. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/_aliases.py +0 -0
  508. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  509. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/audio_plugin.py +0 -0
  510. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  511. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/decision_plugin.py +0 -0
  512. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  513. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/extras_plugin.py +0 -0
  514. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/google_plugin.py +0 -0
  515. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/image_plugin.py +0 -0
  516. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/local_plugin.py +0 -0
  517. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  518. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/openai_plugin.py +0 -0
  519. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/video_plugin.py +0 -0
  520. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/discovery.py +0 -0
  521. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/py.typed +0 -0
  522. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/__init__.py +0 -0
  523. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/__init__.py +0 -0
  524. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/base.py +0 -0
  525. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/character.py +0 -0
  526. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/chunker_registry.py +0 -0
  527. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/contextual.py +0 -0
  528. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/markdown.py +0 -0
  529. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/recursive.py +0 -0
  530. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/semantic.py +0 -0
  531. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/token.py +0 -0
  532. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/documents.py +0 -0
  533. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loader_registry.py +0 -0
  534. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/__init__.py +0 -0
  535. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/csv_loader.py +0 -0
  536. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/docx_loader.py +0 -0
  537. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/epub_loader.py +0 -0
  538. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/html_loader.py +0 -0
  539. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/json_loader.py +0 -0
  540. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/markdown_loader.py +0 -0
  541. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/pdf_loader.py +0 -0
  542. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/text_loader.py +0 -0
  543. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/xlsx_loader.py +0 -0
  544. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/pipeline.py +0 -0
  545. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/__init__.py +0 -0
  546. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/_fusion.py +0 -0
  547. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/base.py +0 -0
  548. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/hybrid.py +0 -0
  549. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/hyde.py +0 -0
  550. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/mmr.py +0 -0
  551. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/multi_query.py +0 -0
  552. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/retriever_registry.py +0 -0
  553. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/similarity.py +0 -0
  554. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/step_back.py +0 -0
  555. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/__init__.py +0 -0
  556. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/base.py +0 -0
  557. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/chroma.py +0 -0
  558. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/faiss.py +0 -0
  559. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/pgvector.py +0 -0
  560. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/pinecone.py +0 -0
  561. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/qdrant.py +0 -0
  562. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
  563. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/weaviate.py +0 -0
  564. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/__init__.py +0 -0
  565. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/detector.py +0 -0
  566. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/evaluator.py +0 -0
  567. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/markers.py +0 -0
  568. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/__init__.py +0 -0
  569. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/budget.py +0 -0
  570. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/events.py +0 -0
  571. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/planner.py +0 -0
  572. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/ranking.py +0 -0
  573. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/report.py +0 -0
  574. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/synthesis.py +0 -0
  575. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/tools.py +0 -0
  576. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/__init__.py +0 -0
  577. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/async_driver.py +0 -0
  578. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/backoff.py +0 -0
  579. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/breaker.py +0 -0
  580. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/driver.py +0 -0
  581. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/errors.py +0 -0
  582. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/explain.py +0 -0
  583. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/headroom.py +0 -0
  584. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/keys.py +0 -0
  585. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/router.py +0 -0
  586. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/strategies.py +0 -0
  587. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/virtual.py +0 -0
  588. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/__init__.py +0 -0
  589. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/generator.py +0 -0
  590. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  591. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/README.md.j2 +0 -0
  592. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/config.py.j2 +0 -0
  593. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/env.example.j2 +0 -0
  594. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/main.py.j2 +0 -0
  595. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/models.py.j2 +0 -0
  596. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  597. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/security/__init__.py +0 -0
  598. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/security/injection.py +0 -0
  599. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/security/redaction.py +0 -0
  600. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/__init__.py +0 -0
  601. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/core.py +0 -0
  602. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/project.py +0 -0
  603. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/stores.py +0 -0
  604. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/types.py +0 -0
  605. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/__init__.py +0 -0
  606. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/dev.md +0 -0
  607. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/finance.md +0 -0
  608. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/mcp.md +0 -0
  609. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/media.md +0 -0
  610. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/models.md +0 -0
  611. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/search.md +0 -0
  612. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/web.md +0 -0
  613. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/__init__.py +0 -0
  614. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/environment.py +0 -0
  615. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/memory.py +0 -0
  616. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/scheduler.py +0 -0
  617. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/swarm.py +0 -0
  618. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/swarm_agent.py +0 -0
  619. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/types.py +0 -0
  620. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/testing/__init__.py +0 -0
  621. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/testing/driver_contract.py +0 -0
  622. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/__init__.py +0 -0
  623. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/__init__.py +0 -0
  624. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/builtin.py +0 -0
  625. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/health.py +0 -0
  626. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/code_exec.py +0 -0
  627. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/named.py +0 -0
  628. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/packs.py +0 -0
  629. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/__init__.py +0 -0
  630. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/_common.py +0 -0
  631. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/_mcp_http.py +0 -0
  632. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/_types.py +0 -0
  633. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/cache.py +0 -0
  634. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/fetch.py +0 -0
  635. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/health.py +0 -0
  636. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/html2md.py +0 -0
  637. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/platform.py +0 -0
  638. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/__init__.py +0 -0
  639. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/_media.py +0 -0
  640. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/arxiv.py +0 -0
  641. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/base.py +0 -0
  642. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/feeds.py +0 -0
  643. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/github.py +0 -0
  644. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/hackernews.py +0 -0
  645. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/podcasts.py +0 -0
  646. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/wikipedia.py +0 -0
  647. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/youtube.py +0 -0
  648. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/search.py +0 -0
  649. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/toolkit.py +0 -0
  650. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web_search.py +0 -0
  651. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/__init__.py +0 -0
  652. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/architect.py +0 -0
  653. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/engine.py +0 -0
  654. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/errors.py +0 -0
  655. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/model.py +0 -0
  656. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/nodes.py +0 -0
  657. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/recovery.py +0 -0
  658. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/references.py +0 -0
  659. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/registry.py +0 -0
  660. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/scheduler.py +0 -0
  661. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/state.py +0 -0
  662. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/SOURCES.txt +0 -0
  663. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/dependency_links.txt +0 -0
  664. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/entry_points.txt +0 -0
  665. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/requires.txt +0 -0
  666. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/scm_file_list.json +0 -0
  667. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/top_level.txt +0 -0
  668. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture_cost_tracking.md +0 -0
  669. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/pyproject.toml +0 -0
  670. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/requirements.txt +0 -0
  671. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/scripts/check_pricing_freshness.py +0 -0
  672. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/setup.cfg +0 -0
  673. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/specs/basic_extraction.json +0 -0
  674. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/specs/schema_validation.json +0 -0
  675. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/specs/strategy_comparison.json +0 -0
  676. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/test.py +0 -0
  677. {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/test_version_diagnosis.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.13.5.dev2
3
+ Version: 1.13.5.dev3
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
@@ -164,8 +164,10 @@ print(person.name) # Maria
164
164
 
165
165
  ## Agents That Can Search, Read, Watch and Listen
166
166
 
167
- Prompture also gives agents working capabilities, and **none of them need an
168
- API key to start**. Keys only raise limits and quality.
167
+ Prompture also gives agents working capabilities. **Web search and reading
168
+ need no API key at all**; keys only raise their limits and quality. Model
169
+ calls, transcription and some packs use the keys you already have, and
170
+ `prompture doctor` tells you exactly what's missing.
169
171
 
170
172
  ```python
171
173
  from prompture import Agent
@@ -187,7 +189,7 @@ prompture skill install # teach your coding agent all of
187
189
  ```
188
190
 
189
191
  - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
190
- - **Fails over, never just fails:** every capability tries the next backend on auth, quota or rate-limit errors and tells you which one served the result
192
+ - **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
191
193
  - **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
192
194
  - **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
193
195
 
@@ -47,8 +47,10 @@ print(person.name) # Maria
47
47
 
48
48
  ## Agents That Can Search, Read, Watch and Listen
49
49
 
50
- Prompture also gives agents working capabilities, and **none of them need an
51
- API key to start**. Keys only raise limits and quality.
50
+ Prompture also gives agents working capabilities. **Web search and reading
51
+ need no API key at all**; keys only raise their limits and quality. Model
52
+ calls, transcription and some packs use the keys you already have, and
53
+ `prompture doctor` tells you exactly what's missing.
52
54
 
53
55
  ```python
54
56
  from prompture import Agent
@@ -70,7 +72,7 @@ prompture skill install # teach your coding agent all of
70
72
  ```
71
73
 
72
74
  - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
73
- - **Fails over, never just fails:** every capability tries the next backend on auth, quota or rate-limit errors and tells you which one served the result
75
+ - **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
74
76
  - **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
75
77
  - **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
76
78
 
@@ -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.5.dev2'
22
- __version_tuple__ = version_tuple = (1, 13, 5, 'dev2')
21
+ __version__ = version = '1.13.5.dev3'
22
+ __version_tuple__ = version_tuple = (1, 13, 5, 'dev3')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -5,19 +5,31 @@
5
5
  ``max_bytes``, detects challenge interstitials, and raises typed errors that
6
6
  ``classify_error`` understands. Proxies come from ``PROMPTURE_<BACKEND>_PROXY``
7
7
  or ``PROMPTURE_PROXY``.
8
+
9
+ Validating a hostname and then connecting to it resolves DNS twice, and a
10
+ hostile DNS server can answer with a public address the first time and a
11
+ private one the second (DNS rebinding). :class:`GuardedHTTPAdapter` closes that
12
+ gap: it checks the address the socket *actually connected to*, before any
13
+ request bytes are sent. Connections to a configured proxy are exempt, since
14
+ the peer is then the proxy itself.
8
15
  """
9
16
 
10
17
  from __future__ import annotations
11
18
 
19
+ import threading
20
+ from contextvars import ContextVar
12
21
  from dataclasses import dataclass, field
13
22
  from typing import Any
14
23
  from urllib.parse import urljoin
15
24
 
16
25
  import requests
26
+ from requests.adapters import HTTPAdapter
27
+ from urllib3.connection import HTTPConnection, HTTPSConnection
28
+ from urllib3.connectionpool import HTTPConnectionPool, HTTPSConnectionPool
17
29
 
18
30
  from .challenge import is_challenge_page
19
31
  from .errors import ChallengePageError, HTTPStatusError, ResponseTooLargeError, UnsafeURLError
20
- from .url_safety import normalize_public_http_url
32
+ from .url_safety import allow_private_default, is_public_ip, normalize_public_http_url
21
33
 
22
34
  BROWSER_USER_AGENT = (
23
35
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
@@ -54,6 +66,92 @@ def proxies_for(backend: str | None = None) -> dict[str, str] | None:
54
66
  return {"http": proxy, "https": proxy} if proxy else None
55
67
 
56
68
 
69
+ # ---------------------------------------------------------------------------
70
+ # Connect-time address check (DNS rebinding)
71
+ # ---------------------------------------------------------------------------
72
+
73
+ # Per-request override of PROMPTURE_WEB_ALLOW_PRIVATE, set by safe_get.
74
+ _allow_private: ContextVar[bool | None] = ContextVar("prompture_allow_private", default=None)
75
+
76
+
77
+ def _check_peer(conn: Any, sock: Any) -> None:
78
+ """Refuse a socket that ended up connected to a non-public address."""
79
+ if getattr(conn, "proxy", None) is not None or getattr(conn, "_tunnel_host", None):
80
+ return # the peer is the configured proxy, not the target
81
+ allow = _allow_private.get()
82
+ if allow is None:
83
+ allow = allow_private_default()
84
+ if allow:
85
+ return
86
+ try:
87
+ peer = sock.getpeername()[0]
88
+ except (OSError, IndexError):
89
+ return # not an inet socket; nothing to check
90
+ if not is_public_ip(peer):
91
+ sock.close()
92
+ raise UnsafeURLError(f"{getattr(conn, 'host', 'host')} connected to non-public address {peer}")
93
+
94
+
95
+ class _GuardedHTTPConnection(HTTPConnection):
96
+ def _new_conn(self) -> Any:
97
+ sock = super()._new_conn()
98
+ _check_peer(self, sock)
99
+ return sock
100
+
101
+
102
+ class _GuardedHTTPSConnection(HTTPSConnection):
103
+ def _new_conn(self) -> Any:
104
+ sock = super()._new_conn()
105
+ _check_peer(self, sock)
106
+ return sock
107
+
108
+
109
+ class _GuardedHTTPConnectionPool(HTTPConnectionPool):
110
+ ConnectionCls = _GuardedHTTPConnection
111
+
112
+
113
+ class _GuardedHTTPSConnectionPool(HTTPSConnectionPool):
114
+ ConnectionCls = _GuardedHTTPSConnection # type: ignore[assignment]
115
+
116
+
117
+ class GuardedHTTPAdapter(HTTPAdapter):
118
+ """``requests`` adapter that refuses connections to non-public addresses.
119
+
120
+ The check runs on the connected socket, so it holds even when DNS answers
121
+ differently between validation and connection.
122
+ """
123
+
124
+ def init_poolmanager(self, *args: Any, **kwargs: Any) -> None:
125
+ super().init_poolmanager(*args, **kwargs)
126
+ self.poolmanager.pool_classes_by_scheme = { # type: ignore[attr-defined]
127
+ "http": _GuardedHTTPConnectionPool,
128
+ "https": _GuardedHTTPSConnectionPool,
129
+ }
130
+
131
+
132
+ def guard_session(session: requests.Session) -> requests.Session:
133
+ """Mount :class:`GuardedHTTPAdapter` on *session* (keeping its retry policy); returns it."""
134
+ for prefix in ("http://", "https://"):
135
+ current = session.get_adapter(prefix)
136
+ if not isinstance(current, GuardedHTTPAdapter):
137
+ retries = getattr(current, "max_retries", 0)
138
+ session.mount(prefix, GuardedHTTPAdapter(max_retries=retries))
139
+ return session
140
+
141
+
142
+ _shared: requests.Session | None = None
143
+ _shared_lock = threading.Lock()
144
+
145
+
146
+ def guarded_session() -> requests.Session:
147
+ """Process-wide guarded session used when :func:`safe_get` gets none."""
148
+ global _shared
149
+ with _shared_lock:
150
+ if _shared is None:
151
+ _shared = guard_session(requests.Session())
152
+ return _shared
153
+
154
+
57
155
  @dataclass
58
156
  class SafeResponse:
59
157
  """Body and metadata of a completed :func:`safe_get`."""
@@ -122,10 +220,56 @@ def safe_get(
122
220
  backend: Backend name used to pick a per-backend proxy.
123
221
  raise_for_status: Raise :class:`HTTPStatusError` on non-2xx.
124
222
  """
125
- http = session or requests.Session()
223
+ if allow_private is None:
224
+ allow_private = allow_private_default()
225
+ if isinstance(session, requests.Session):
226
+ http: Any = guard_session(session)
227
+ elif session is not None:
228
+ http = session # a duck-typed client (tests); URL checks still apply
229
+ elif allow_private:
230
+ # Keep private-network connections out of the shared pool.
231
+ http = guard_session(requests.Session())
232
+ else:
233
+ http = guarded_session()
126
234
  merged = {**DEFAULT_HEADERS, **(headers or {})}
127
235
  proxies = proxies_for(backend)
128
236
  current = normalize_public_http_url(url, allow_private=allow_private)
237
+ token = _allow_private.set(allow_private)
238
+ try:
239
+ return _get_with_redirects(
240
+ http,
241
+ current,
242
+ headers=merged,
243
+ params=params,
244
+ timeout=timeout,
245
+ proxies=proxies,
246
+ max_bytes=max_bytes,
247
+ max_redirects=max_redirects,
248
+ allow_private=allow_private,
249
+ check_challenge=check_challenge,
250
+ truncate=truncate,
251
+ raise_for_status=raise_for_status,
252
+ )
253
+ finally:
254
+ _allow_private.reset(token)
255
+
256
+
257
+ def _get_with_redirects(
258
+ http: Any,
259
+ current: str,
260
+ *,
261
+ headers: dict[str, str],
262
+ params: dict[str, Any] | None,
263
+ timeout: float,
264
+ proxies: dict[str, str] | None,
265
+ max_bytes: int,
266
+ max_redirects: int,
267
+ allow_private: bool,
268
+ check_challenge: bool,
269
+ truncate: bool,
270
+ raise_for_status: bool,
271
+ ) -> SafeResponse:
272
+ merged = headers
129
273
  history: list[str] = []
130
274
  query = params
131
275
 
@@ -21,6 +21,7 @@ Usage::
21
21
 
22
22
  from __future__ import annotations
23
23
 
24
+ import contextlib
24
25
  import json
25
26
  import logging
26
27
  from datetime import datetime, timezone
@@ -43,6 +44,16 @@ class SecretScrubbingFilter(logging.Filter):
43
44
  if scrubbed != message:
44
45
  record.msg = scrubbed
45
46
  record.args = None
47
+ # Formatters append the traceback after the message, and exception
48
+ # text often carries the very URL or key we just scrubbed. Render it
49
+ # now and store the scrubbed copy; formatters reuse ``exc_text``.
50
+ if record.exc_info and not record.exc_text:
51
+ with contextlib.suppress(Exception):
52
+ record.exc_text = logging.Formatter().formatException(record.exc_info)
53
+ if record.exc_text:
54
+ record.exc_text = scrub_secrets(record.exc_text)
55
+ if record.stack_info:
56
+ record.stack_info = scrub_secrets(record.stack_info)
46
57
  return True
47
58
 
48
59
 
@@ -86,8 +86,11 @@ def default_research_model() -> str | None:
86
86
  cheap model of the first configured provider in
87
87
  :data:`DEFAULT_MODEL_CANDIDATES`. ``None`` when nothing is configured.
88
88
  """
89
+ from ..infra.credentials import get_config_value
90
+
89
91
  for var in ("PROMPTURE_RESEARCH_MODEL", "PROMPTURE_DEFAULT_MODEL"):
90
- value = os.environ.get(var, "").strip()
92
+ # Env first, then the credential store, where `prompture setup` saves the default model.
93
+ value = (get_config_value(var) or "").strip()
91
94
  if value:
92
95
  return value
93
96
  try:
@@ -364,6 +367,10 @@ class _ResearchRun:
364
367
  self.fetched: dict[str, _Fetched] = {}
365
368
  self._lock = threading.Lock()
366
369
  self._emit_lock = threading.Lock()
370
+ # Packs run in parallel, but under a token/cost budget their LLM calls
371
+ # take turns: checking the budget and recording usage happen under this
372
+ # lock, so concurrent calls can't all pass the check and overshoot.
373
+ self._llm_budget_lock = threading.Lock()
367
374
  self.search_ok = 0
368
375
  self.search_failed = 0
369
376
 
@@ -494,18 +501,21 @@ class _ResearchRun:
494
501
  )
495
502
 
496
503
  def _pack_one(self, pack: str) -> None:
497
- if not self.tracker.llm_budget_left():
498
- return
499
- try:
500
- text, usage = _call_with_deadline(
501
- lambda: self.agent._run_pack(pack, self.question), self.tracker.gather_remaining()
502
- )
503
- except Exception as exc:
504
- with self._lock:
505
- self.routes.append({"op": "pack", "target": pack, "ok": False, "error": _short_error(exc)})
506
- self.emit("search", f"Pack {pack} unavailable", pack=pack, ok=False)
507
- return
508
- self.tracker.record_usage(usage)
504
+ budgeted = self.tracker.budget.max_tokens is not None or self.tracker.budget.max_cost is not None
505
+ guard = self._llm_budget_lock if budgeted else contextlib.nullcontext()
506
+ with guard:
507
+ if not self.tracker.llm_budget_left():
508
+ return
509
+ try:
510
+ text, usage = _call_with_deadline(
511
+ lambda: self.agent._run_pack(pack, self.question), self.tracker.gather_remaining()
512
+ )
513
+ except Exception as exc:
514
+ with self._lock:
515
+ self.routes.append({"op": "pack", "target": pack, "ok": False, "error": _short_error(exc)})
516
+ self.emit("search", f"Pack {pack} unavailable", pack=pack, ok=False)
517
+ return
518
+ self.tracker.record_usage(usage)
509
519
  text = (text or "").strip()
510
520
  with self._lock:
511
521
  self.routes.append({"op": "pack", "target": pack, "ok": bool(text), "served_by": f"pack:{pack}"})
@@ -7,9 +7,12 @@ description: Use when you need to search the web, read a URL (pages, PDFs, YouTu
7
7
 
8
8
  Prompture gives agents working capabilities — search, read, watch, listen,
9
9
  call models and external tools — and tells you exactly what works on this
10
- machine and how to fix what doesn't. Everything has a keyless default; keys
11
- only raise limits or quality. Every capability fails over to the next backend
12
- instead of failing, and says which backend served it.
10
+ machine and how to fix what doesn't. Web search and URL reading have keyless
11
+ defaults; keys only raise their limits or quality. Model calls, transcription,
12
+ packs and MCP servers need the provider, key, package or binary that doctor
13
+ names. Where a capability has more than one permitted backend, it fails over
14
+ and reports which one served the request and whether a fallback happened.
15
+ Transcription never moves audio to a second provider without explicit consent.
13
16
 
14
17
  Install: `pip install prompture` (extras: `prompture[web]`, `prompture[media]`,
15
18
  `prompture[mcp]`, `prompture[all]`).
@@ -580,6 +580,10 @@ class CLITool:
580
580
  secrets never have to live in a config file. Values are never logged.
581
581
  install_hint: Fix hint when the binary is missing.
582
582
  prefix: Tool-name prefix (defaults to *name* with ``-`` → ``_``).
583
+ trusted: Whether health checks may execute the binary. Tools from a
584
+ project's ``.prompture/tools.*`` are untrusted: a repository could
585
+ point ``command`` / ``version_args`` at arbitrary code, so doctor
586
+ and ``cli:all`` only locate their executable and never run it.
583
587
  """
584
588
 
585
589
  name: str
@@ -593,6 +597,7 @@ class CLITool:
593
597
  env: dict[str, str] = field(default_factory=dict)
594
598
  install_hint: str | None = None
595
599
  prefix: str | None = None
600
+ trusted: bool = True
596
601
 
597
602
  def __post_init__(self) -> None:
598
603
  if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_.-]{0,40}", self.name or ""):
@@ -730,10 +735,16 @@ class CLITool:
730
735
  return _ON_WINDOWS and path.lower().endswith((".bat", ".cmd"))
731
736
 
732
737
  def is_active(self) -> bool:
733
- """True when the binary exists and its version probe succeeds."""
738
+ """True when the binary exists and (for trusted tools) its version probe succeeds.
739
+
740
+ Untrusted, project-defined tools are never executed here; finding the
741
+ executable is enough.
742
+ """
734
743
  path = self._resolve()
735
744
  if path is None or self._is_batch_launcher(path):
736
745
  return False
746
+ if not self.trusted:
747
+ return True
737
748
  return cached_probe(self.command, self.version_args, hint=self.install_hint).ok
738
749
 
739
750
  def check(self, live: bool = False) -> HealthStatus:
@@ -750,6 +761,8 @@ class CLITool:
750
761
  fix_hint=f"Point `command` at the real executable for {self.name}.",
751
762
  details={**details, "path": path},
752
763
  )
764
+ if not self.trusted:
765
+ return self._untrusted_check(row_name, path, details)
753
766
  probe = cached_probe(self.command, self.version_args, hint=self.install_hint or install_hint(self.command))
754
767
  details.update(path=probe.path, version=probe.version if probe.ok else None, exit_code=probe.exit_code)
755
768
  if not probe.ok:
@@ -789,6 +802,35 @@ class CLITool:
789
802
  details=details,
790
803
  ) # type: ignore[arg-type]
791
804
 
805
+ def _untrusted_check(self, row_name: str, path: str | None, details: dict[str, Any]) -> HealthStatus:
806
+ """Health row for a project-defined tool: locate the executable, never run it."""
807
+ details.update(path=path, trusted=False)
808
+ if path is None:
809
+ return HealthStatus(
810
+ row_name,
811
+ "missing",
812
+ category="tools",
813
+ message=f"`{self.command}` not found on PATH",
814
+ fix_hint=self.install_hint or install_hint(self.command),
815
+ details=details,
816
+ )
817
+ _, missing = self._injected_env()
818
+ fix = None
819
+ status = "ok"
820
+ if missing:
821
+ status = "degraded"
822
+ fix = "Set " + ", ".join(sorted(set(missing))) + f" (referenced by {self.name} env)."
823
+ details["missing_env"] = sorted(set(missing))
824
+ return HealthStatus(
825
+ row_name,
826
+ status, # type: ignore[arg-type]
827
+ category="tools",
828
+ active_backend=path,
829
+ message=f"found at {path}; project-defined, so not executed by health checks",
830
+ fix_hint=fix,
831
+ details=details,
832
+ )
833
+
792
834
  # -- execution ------------------------------------------------------
793
835
 
794
836
  def run(self, command: str, **params: Any) -> CLIResult:
@@ -133,7 +133,9 @@ def load_cli_tools(
133
133
 
134
134
  Returns:
135
135
  Valid tools, earlier files winning on name collisions. Problems are
136
- logged and kept for :func:`config_errors`; this never raises.
136
+ logged and kept for :func:`config_errors`; this never raises. Tools
137
+ found by the default search outside ``~/.prompture`` (i.e. in a
138
+ project) are marked untrusted, so health checks never execute them.
137
139
  """
138
140
  if paths is None:
139
141
  files = config_paths(cwd, include_home=include_home)
@@ -155,7 +157,9 @@ def load_cli_tools(
155
157
  continue
156
158
  parsed, errs = parse_cli_tools(data, source=str(path))
157
159
  errors.extend(errs)
160
+ trusted = paths is not None or _is_user_config(path)
158
161
  for tool in parsed:
162
+ tool.trusted = trusted
159
163
  tools.setdefault(tool.name, tool)
160
164
  for err in errors:
161
165
  logger.warning("CLI tool config: %s", err)
@@ -164,6 +168,15 @@ def load_cli_tools(
164
168
  return list(tools.values())
165
169
 
166
170
 
171
+ def _is_user_config(path: Path) -> bool:
172
+ """True for files under the user's own ``~/.prompture`` directory."""
173
+ try:
174
+ user_dir = (Path.home() / ".prompture").resolve()
175
+ return path.resolve().is_relative_to(user_dir)
176
+ except (OSError, ValueError):
177
+ return False
178
+
179
+
167
180
  def config_errors() -> list[str]:
168
181
  """Problems found by the last :func:`load_cli_tools` call."""
169
182
  with _errors_lock:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.13.5.dev2
3
+ Version: 1.13.5.dev3
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
@@ -164,8 +164,10 @@ print(person.name) # Maria
164
164
 
165
165
  ## Agents That Can Search, Read, Watch and Listen
166
166
 
167
- Prompture also gives agents working capabilities, and **none of them need an
168
- API key to start**. Keys only raise limits and quality.
167
+ Prompture also gives agents working capabilities. **Web search and reading
168
+ need no API key at all**; keys only raise their limits and quality. Model
169
+ calls, transcription and some packs use the keys you already have, and
170
+ `prompture doctor` tells you exactly what's missing.
169
171
 
170
172
  ```python
171
173
  from prompture import Agent
@@ -187,7 +189,7 @@ prompture skill install # teach your coding agent all of
187
189
  ```
188
190
 
189
191
  - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
190
- - **Fails over, never just fails:** every capability tries the next backend on auth, quota or rate-limit errors and tells you which one served the result
192
+ - **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
191
193
  - **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
192
194
  - **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
193
195
 
File without changes
File without changes
File without changes
File without changes