prompture 1.1.3.dev1__tar.gz → 1.1.3.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 (418) hide show
  1. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/PKG-INFO +203 -226
  2. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/README.md +202 -225
  3. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/_version.py +2 -2
  4. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/__init__.py +20 -0
  5. prompture-1.1.3.dev3/prompture/agents/assistant.py +455 -0
  6. prompture-1.1.3.dev3/prompture/agents/review_loop.py +242 -0
  7. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/__init__.py +10 -0
  8. prompture-1.1.3.dev3/prompture/extraction/code_extraction.py +159 -0
  9. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/__init__.py +2 -0
  10. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/coding_agent_specs.py +23 -1
  11. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/discovery.py +75 -1
  12. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture.egg-info/PKG-INFO +203 -226
  13. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture.egg-info/SOURCES.txt +3 -0
  14. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/add-driver/SKILL.md +0 -0
  15. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/add-driver/references/driver-template.md +0 -0
  16. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/add-example/SKILL.md +0 -0
  17. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/add-field/SKILL.md +0 -0
  18. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/add-persona/SKILL.md +0 -0
  19. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/add-test/SKILL.md +0 -0
  20. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/add-tool/SKILL.md +0 -0
  21. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/create-pr/SKILL.md +0 -0
  22. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/run-tests/SKILL.md +0 -0
  23. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  24. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.claude/skills/update-pricing/SKILL.md +0 -0
  25. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.env.copy +0 -0
  26. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/FUNDING.yml +0 -0
  27. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  28. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  29. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  30. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  31. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/scripts/update_docs_version.py +0 -0
  32. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/scripts/update_wrapper_version.py +0 -0
  33. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/workflows/dev.yml +0 -0
  34. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/workflows/documentation.yml +0 -0
  35. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/workflows/pricing-freshness.yml +0 -0
  36. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/workflows/publish.yml +0 -0
  37. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.github/workflows/security.yml +0 -0
  38. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/.safety-project.ini +0 -0
  39. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/AGENTS.md +0 -0
  40. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/BREAKING_CHANGES.md +0 -0
  41. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/CLAUDE.md +0 -0
  42. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/CONTRIBUTING.md +0 -0
  43. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/LICENSE +0 -0
  44. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/MANIFEST.in +0 -0
  45. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/ROADMAP.md +0 -0
  46. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/SECURITY.md +0 -0
  47. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/dev.ps1 +0 -0
  48. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/dev.sh +0 -0
  49. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/mypy_errors.txt +0 -0
  50. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/README.md +0 -0
  51. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_json/README.md +0 -0
  52. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  53. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_json/pyproject.toml +0 -0
  54. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_json/test.py +0 -0
  55. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_toon/README.md +0 -0
  56. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  57. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_toon/pyproject.toml +0 -0
  58. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/packages/llm_to_toon/test.py +0 -0
  59. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/__init__.py +0 -0
  60. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/agent.py +0 -0
  61. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/async_agent.py +0 -0
  62. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/async_conversation.py +0 -0
  63. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/async_deep_agent.py +0 -0
  64. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/conversation.py +0 -0
  65. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep/__init__.py +0 -0
  66. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep/planner.py +0 -0
  67. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep/subagents.py +0 -0
  68. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep/summarizer.py +0 -0
  69. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep/vfs.py +0 -0
  70. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep_agent.py +0 -0
  71. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep_prompts.py +0 -0
  72. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/deep_state.py +0 -0
  73. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/persona.py +0 -0
  74. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/simulated_tools.py +0 -0
  75. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/skills.py +0 -0
  76. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/tools_schema.py +0 -0
  77. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/agents/types.py +0 -0
  78. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/aio/__init__.py +0 -0
  79. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/bridges/__init__.py +0 -0
  80. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/bridges/tukuy_backend.py +0 -0
  81. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/cli/__init__.py +0 -0
  82. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/cli/cli.py +0 -0
  83. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/cli/formatters.py +0 -0
  84. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/cli/runner.py +0 -0
  85. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/cli/server.py +0 -0
  86. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/dataset/__init__.py +0 -0
  87. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/dataset/formats.py +0 -0
  88. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/dataset/schemas.py +0 -0
  89. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/dataset/synth.py +0 -0
  90. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/__init__.py +0 -0
  91. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/airllm_driver.py +0 -0
  92. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/assemblyai_stt_driver.py +0 -0
  93. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_airllm_driver.py +0 -0
  94. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
  95. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_azure_driver.py +0 -0
  96. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_base.py +0 -0
  97. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_bedrock_driver.py +0 -0
  98. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  99. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_cachibot_driver.py +0 -0
  100. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
  101. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_claude_driver.py +0 -0
  102. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_cohere_driver.py +0 -0
  103. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  104. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  105. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
  106. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
  107. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_deepseek_driver.py +0 -0
  108. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
  109. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
  110. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_embedding_base.py +0 -0
  111. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  112. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  113. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_google_driver.py +0 -0
  114. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  115. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_google_vertexai_driver.py +0 -0
  116. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_grok_driver.py +0 -0
  117. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
  118. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  119. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_groq_driver.py +0 -0
  120. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_hugging_driver.py +0 -0
  121. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  122. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_img_gen_base.py +0 -0
  123. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  124. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  125. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  126. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  127. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_lmstudio_driver.py +0 -0
  128. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_local_http_driver.py +0 -0
  129. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  130. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_minimax_driver.py +0 -0
  131. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  132. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_mistral_driver.py +0 -0
  133. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  134. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_modelscope_driver.py +0 -0
  135. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_moonshot_driver.py +0 -0
  136. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  137. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  138. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  139. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_ollama_driver.py +0 -0
  140. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  141. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openai_compatible_driver.py +0 -0
  142. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openai_driver.py +0 -0
  143. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openai_embedding_driver.py +0 -0
  144. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
  145. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  146. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openai_stt_driver.py +0 -0
  147. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openai_tts_driver.py +0 -0
  148. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_openrouter_driver.py +0 -0
  149. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  150. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_registry.py +0 -0
  151. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  152. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_runway_tts_driver.py +0 -0
  153. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  154. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  155. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_stt_base.py +0 -0
  156. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_tts_base.py +0 -0
  157. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_video_gen_base.py +0 -0
  158. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  159. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  160. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/async_zai_driver.py +0 -0
  161. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/audio_registry.py +0 -0
  162. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/azure_config.py +0 -0
  163. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/azure_driver.py +0 -0
  164. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/base.py +0 -0
  165. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/bedrock_driver.py +0 -0
  166. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  167. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/cachibot_driver.py +0 -0
  168. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/cartesia_tts_driver.py +0 -0
  169. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/claude_driver.py +0 -0
  170. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/cohere_driver.py +0 -0
  171. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/cohere_embedding_driver.py +0 -0
  172. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/cohere_rerank_driver.py +0 -0
  173. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/deepgram_stt_driver.py +0 -0
  174. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/deepgram_tts_driver.py +0 -0
  175. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/deepseek_driver.py +0 -0
  176. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/driver_registry.py +0 -0
  177. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
  178. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
  179. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/embedding_base.py +0 -0
  180. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/embedding_registry.py +0 -0
  181. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/fal_img_gen_driver.py +0 -0
  182. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/fal_video_gen_driver.py +0 -0
  183. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/google_driver.py +0 -0
  184. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/google_img_gen_driver.py +0 -0
  185. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/google_vertexai_driver.py +0 -0
  186. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/grok_driver.py +0 -0
  187. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/grok_img_gen_driver.py +0 -0
  188. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/grok_video_gen_driver.py +0 -0
  189. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/groq_driver.py +0 -0
  190. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/hugging_driver.py +0 -0
  191. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  192. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/img_gen_base.py +0 -0
  193. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/img_gen_registry.py +0 -0
  194. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/jina_embedding_driver.py +0 -0
  195. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/jina_rerank_driver.py +0 -0
  196. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/kling_img_gen_driver.py +0 -0
  197. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/kling_video_gen_driver.py +0 -0
  198. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/lmstudio_driver.py +0 -0
  199. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/local_http_driver.py +0 -0
  200. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/luma_video_gen_driver.py +0 -0
  201. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/minimax_driver.py +0 -0
  202. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  203. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/mistral_driver.py +0 -0
  204. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/mistral_moderation_driver.py +0 -0
  205. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/modelscope_driver.py +0 -0
  206. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/moderation_base.py +0 -0
  207. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/moderation_registry.py +0 -0
  208. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/moonshot_driver.py +0 -0
  209. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  210. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  211. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/nomic_embedding_driver.py +0 -0
  212. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/ollama_driver.py +0 -0
  213. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/ollama_embedding_driver.py +0 -0
  214. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openai_compatible_driver.py +0 -0
  215. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openai_driver.py +0 -0
  216. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openai_embedding_driver.py +0 -0
  217. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openai_img_gen_driver.py +0 -0
  218. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openai_moderation_driver.py +0 -0
  219. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openai_stt_driver.py +0 -0
  220. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openai_tts_driver.py +0 -0
  221. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/openrouter_driver.py +0 -0
  222. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/pika_video_gen_driver.py +0 -0
  223. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/provider_descriptors.py +0 -0
  224. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/registry.py +0 -0
  225. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/rerank_base.py +0 -0
  226. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/rerank_registry.py +0 -0
  227. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  228. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/runway_capabilities.py +0 -0
  229. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/runway_img_gen_driver.py +0 -0
  230. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/runway_tts_driver.py +0 -0
  231. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/runway_video_gen_driver.py +0 -0
  232. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/stability_img_gen_driver.py +0 -0
  233. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/stt_base.py +0 -0
  234. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/tts_base.py +0 -0
  235. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/video_gen_base.py +0 -0
  236. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/video_gen_registry.py +0 -0
  237. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/vision_helpers.py +0 -0
  238. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/voyage_embedding_driver.py +0 -0
  239. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/voyage_rerank_driver.py +0 -0
  240. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/drivers/zai_driver.py +0 -0
  241. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/exceptions.py +0 -0
  242. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/async_core.py +0 -0
  243. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/core.py +0 -0
  244. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/fields.py +0 -0
  245. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/reasoning.py +0 -0
  246. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/strategy.py +0 -0
  247. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/tools.py +0 -0
  248. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/tukuy_bridge.py +0 -0
  249. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/extraction/validator.py +0 -0
  250. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/groups/__init__.py +0 -0
  251. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/groups/async_groups.py +0 -0
  252. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/groups/consensus.py +0 -0
  253. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/groups/debate.py +0 -0
  254. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/groups/groups.py +0 -0
  255. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/groups/types.py +0 -0
  256. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/budget.py +0 -0
  257. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/cache.py +0 -0
  258. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/callbacks.py +0 -0
  259. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/capabilities.py +0 -0
  260. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/coding_agent_events.py +0 -0
  261. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/coding_agents.py +0 -0
  262. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/cost_mixin.py +0 -0
  263. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/ledger.py +0 -0
  264. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/logging.py +0 -0
  265. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/model_rates.py +0 -0
  266. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/pricing.py +0 -0
  267. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/provider_env.py +0 -0
  268. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/anthropic.json +0 -0
  269. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/azure.json +0 -0
  270. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/bedrock.json +0 -0
  271. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/cerebras.json +0 -0
  272. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/cohere.json +0 -0
  273. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/deepinfra.json +0 -0
  274. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/deepseek.json +0 -0
  275. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/fireworks.json +0 -0
  276. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/google.json +0 -0
  277. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/google_vertexai.json +0 -0
  278. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/groq.json +0 -0
  279. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/jina.json +0 -0
  280. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/mistral.json +0 -0
  281. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/mixedbread.json +0 -0
  282. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/moonshot.json +0 -0
  283. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/nomic.json +0 -0
  284. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/nvidia.json +0 -0
  285. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/openai.json +0 -0
  286. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/openrouter.json +0 -0
  287. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/perplexity.json +0 -0
  288. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/sambanova.json +0 -0
  289. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/siliconflow.json +0 -0
  290. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/together.json +0 -0
  291. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/voyage.json +0 -0
  292. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/rates/xai.json +0 -0
  293. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/session.py +0 -0
  294. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/settings.py +0 -0
  295. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/tracker.py +0 -0
  296. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/infra/tukuy_backend.py +0 -0
  297. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/__init__.py +0 -0
  298. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/chunking.py +0 -0
  299. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/detect.py +0 -0
  300. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/document.py +0 -0
  301. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/__init__.py +0 -0
  302. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/base.py +0 -0
  303. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/csv_parser.py +0 -0
  304. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/docx.py +0 -0
  305. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/html.py +0 -0
  306. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/markdown.py +0 -0
  307. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/pdf.py +0 -0
  308. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/ingestion/parsers/xlsx.py +0 -0
  309. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/integrations/__init__.py +0 -0
  310. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/integrations/tukuy_bridge.py +0 -0
  311. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/media/__init__.py +0 -0
  312. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/media/audio.py +0 -0
  313. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/media/image.py +0 -0
  314. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/media/video.py +0 -0
  315. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pages/01-why-prompture.md +0 -0
  316. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pages/02-installation.md +0 -0
  317. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pages/03-quickstart.md +0 -0
  318. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pages/04-toon-input.md +0 -0
  319. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pages/05-test-harness.md +0 -0
  320. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pages/06-stability.md +0 -0
  321. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pages/07-migration.md +0 -0
  322. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/persistence/__init__.py +0 -0
  323. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/persistence/history.py +0 -0
  324. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/persistence/serialization.py +0 -0
  325. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/persistence/store.py +0 -0
  326. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pipeline/__init__.py +0 -0
  327. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pipeline/pipeline.py +0 -0
  328. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pipeline/resolver.py +0 -0
  329. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/pipeline/routing.py +0 -0
  330. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/__init__.py +0 -0
  331. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/base.py +0 -0
  332. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/__init__.py +0 -0
  333. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/_aliases.py +0 -0
  334. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  335. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/audio_plugin.py +0 -0
  336. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  337. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  338. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/extras_plugin.py +0 -0
  339. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/google_plugin.py +0 -0
  340. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/image_plugin.py +0 -0
  341. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/local_plugin.py +0 -0
  342. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  343. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/openai_plugin.py +0 -0
  344. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/builtins/video_plugin.py +0 -0
  345. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/plugins/discovery.py +0 -0
  346. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/py.typed +0 -0
  347. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/__init__.py +0 -0
  348. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/__init__.py +0 -0
  349. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/base.py +0 -0
  350. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/character.py +0 -0
  351. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/chunker_registry.py +0 -0
  352. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/markdown.py +0 -0
  353. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/recursive.py +0 -0
  354. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/semantic.py +0 -0
  355. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/chunkers/token.py +0 -0
  356. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/documents.py +0 -0
  357. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loader_registry.py +0 -0
  358. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/__init__.py +0 -0
  359. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/csv_loader.py +0 -0
  360. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/docx_loader.py +0 -0
  361. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/epub_loader.py +0 -0
  362. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/html_loader.py +0 -0
  363. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/json_loader.py +0 -0
  364. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/markdown_loader.py +0 -0
  365. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/pdf_loader.py +0 -0
  366. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/text_loader.py +0 -0
  367. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/loaders/xlsx_loader.py +0 -0
  368. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/pipeline.py +0 -0
  369. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/retrievers/__init__.py +0 -0
  370. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/retrievers/base.py +0 -0
  371. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/retrievers/hybrid.py +0 -0
  372. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/retrievers/mmr.py +0 -0
  373. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/retrievers/retriever_registry.py +0 -0
  374. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/retrievers/similarity.py +0 -0
  375. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/__init__.py +0 -0
  376. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/base.py +0 -0
  377. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/chroma.py +0 -0
  378. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/faiss.py +0 -0
  379. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/pgvector.py +0 -0
  380. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/pinecone.py +0 -0
  381. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/qdrant.py +0 -0
  382. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
  383. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/rag/vectorstores/weaviate.py +0 -0
  384. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/refusal/__init__.py +0 -0
  385. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/refusal/detector.py +0 -0
  386. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/refusal/evaluator.py +0 -0
  387. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/refusal/markers.py +0 -0
  388. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/__init__.py +0 -0
  389. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/generator.py +0 -0
  390. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  391. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/templates/README.md.j2 +0 -0
  392. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/templates/config.py.j2 +0 -0
  393. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/templates/env.example.j2 +0 -0
  394. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/templates/main.py.j2 +0 -0
  395. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/templates/models.py.j2 +0 -0
  396. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  397. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/security/__init__.py +0 -0
  398. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/security/injection.py +0 -0
  399. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/security/redaction.py +0 -0
  400. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/testing/__init__.py +0 -0
  401. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/testing/driver_contract.py +0 -0
  402. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/tools/__init__.py +0 -0
  403. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/tools/code_exec.py +0 -0
  404. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture/tools/web_search.py +0 -0
  405. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture.egg-info/dependency_links.txt +0 -0
  406. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture.egg-info/entry_points.txt +0 -0
  407. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture.egg-info/requires.txt +0 -0
  408. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture.egg-info/top_level.txt +0 -0
  409. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/prompture_cost_tracking.md +0 -0
  410. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/pyproject.toml +0 -0
  411. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/requirements.txt +0 -0
  412. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/scripts/check_pricing_freshness.py +0 -0
  413. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/setup.cfg +0 -0
  414. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/specs/basic_extraction.json +0 -0
  415. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/specs/schema_validation.json +0 -0
  416. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/specs/strategy_comparison.json +0 -0
  417. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/test.py +0 -0
  418. {prompture-1.1.3.dev1 → prompture-1.1.3.dev3}/test_version_diagnosis.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.1.3.dev1
3
+ Version: 1.1.3.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
@@ -134,29 +134,37 @@ print(person.name) # Maria
134
134
 
135
135
  ## Key Features
136
136
 
137
- - **Structured output** — JSON schema enforcement and direct Pydantic model population
138
- - **36+ providers** — OpenAI, Claude, Google, Groq, Grok, Azure, AWS Bedrock, Ollama, LM Studio, OpenRouter, HuggingFace, Moonshot, ModelScope, Z.ai, Vertex AI, AirLLM, CachiBot, Runway, MiniMax/Hailuo, Kling AI, Luma AI, Pika Labs, Fal.ai, Ideogram, Black Forest Labs (Flux), Mistral AI, DeepSeek, Cohere, Voyage AI, Jina AI, Nomic, Mixedbread (mxbai), Cartesia, Deepgram, AssemblyAI, generic OpenAI-compatible (Fireworks, Together, Cerebras, SambaNova, Perplexity, NVIDIA, DeepInfra, SiliconFlow, GitHub Models), and generic HTTP
139
- - **Multi-modal** — Drivers for embeddings (OpenAI, Cohere, Voyage, Jina, Nomic, Mixedbread, Ollama), rerank (Cohere, Voyage, Jina, Mixedbread), moderation (OpenAI, Mistral), image generation (DALL-E, Imagen, Grok, Stability, Runway, Kling, Fal, Ideogram, Black Forest Labs / Flux), video generation (Grok Imagine Video, Runway text/image/video → video, MiniMax/Hailuo, Kling, Luma Dream Machine, Pika, Fal), text-to-speech (OpenAI, ElevenLabs, Cartesia Sonic, Deepgram Aura, Runway), sound effects, voice dubbing / isolation / conversion (Runway), and speech-to-text (Whisper, ElevenLabs, Deepgram Nova-3, AssemblyAI Universal-2)
140
- - **RAG stack** — Document loaders (PDF, DOCX, HTML, Markdown, JSON/JSONL, CSV, EPUB, XLSX), chunkers (character, recursive, token-aware via tiktoken, semantic, markdown-aware), vector stores (Chroma, Pinecone, Qdrant, pgvector, FAISS, Weaviate), retrievers (similarity, MMR, hybrid dense+BM25 via RRF), and an end-to-end `RAGPipeline` that composes loader → chunker → embedder → store → retriever → optional reranker → LLM
141
- - **Multi-model fallback** — Try a list of models in sequence with per-attempt cost, token, and capability accounting
142
- - **Strategy cascade** — Auto-selects between provider-native JSON mode, tool-call extraction, and prompted repair so extraction works on any model
143
- - **TOON input conversion** — 45-60% token savings when sending structured data via [Token-Oriented Object Notation](https://github.com/jhd3197/python-toon)
144
- - **Stepwise extraction** — Per-field prompts with smart type coercion (shorthand numbers, multilingual booleans, dates)
145
- - **Field registry** — 50+ predefined extraction fields with template variables and Pydantic integration
146
- - **Conversations** — Stateful multi-turn sessions with sync and async support
147
- - **Tool use** — Function calling and streaming across supported providers, with automatic prompt-based simulation for models without native tool support
148
- - **Sandboxed Python execution** — Drop-in `python_execute` tool backed by Tukuy's `PythonSandbox` (import whitelist, path restrictions, timeout, memory limit, AST risk gate)
149
- - **Web search** — Drop-in `web_search` tool with Tavily, Serper, Brave, and SearXNG backends; returns Markdown so the LLM can cite by URL
150
- - **OpenAI-compatible server** — `prompture serve` exposes `/v1/chat/completions`, `/v1/completions`, `/v1/embeddings`, `/v1/models`, and `/v1/coding-agents`; point Claude Code, Codex, Cursor, Aider, or any OpenAI SDK at it and route to any of the 36+ providers
151
- - **Synthetic datasets** — `generate_qa_dataset()` turns documents into fine-tuning JSONL (Q&A, ShareGPT, or Alpaca) ready for Unsloth, Axolotl, or TRL
152
- - **Refusal detection** — `RefusalDetector` + `RefusalEvaluator` flag and score LLM refusals (5 categories, en/es markers, position-weighted confidence); useful for cross-provider alignment comparison and validating abliterated models
153
- - **Input safety** — `PromptInjectionDetector` (jailbreak, role-hijack, delimiter attacks, encoded payloads) + `PIIRedactor` (emails, phones, Luhn-checked cards, SSN, IBAN, IPs, API keys, embedded URL credentials)
154
- - **Deep agents** — Drop-in `DeepAgent` with planning (`write_todos`), virtual filesystem (`read_file` / `write_file` / `edit_file` / `ls` / `glob` / `grep`), sub-agent delegation (`task`), and automatic context summarization — no LangChain or LangGraph required
155
- - **Caching** — Built-in response cache with memory, SQLite, and Redis backends
156
- - **Plugin system** — Register custom drivers via entry points
157
- - **Usage tracking** — Token counts and cost calculation on every call
158
- - **Auto-repair** — Optional second LLM pass to fix malformed JSON
159
- - **Batch testing** — Spec-driven suites to compare models side by side
137
+ **Structured extraction**
138
+ - JSON schema enforcement and direct Pydantic model population
139
+ - Stepwise per-field extraction with smart type coercion (shorthand numbers, multilingual booleans, dates)
140
+ - Field registry — 50+ predefined fields with template variables and Pydantic integration
141
+ - Strategy cascade — auto-selects provider-native JSON mode, tool-call extraction, or prompted repair
142
+ - Multi-model fallback with per-attempt cost, token, and capability accounting
143
+ - Optional auto-repair pass for malformed JSON
144
+
145
+ **Providers & modalities**
146
+ - 36+ providers under a unified `provider/model` string — see [Providers](#providers)
147
+ - Multi-modal drivers for embeddings, rerank, moderation, image, video, TTS, STT, and audio transforms — see [Multi-Modal](#multi-modal)
148
+ - TOON input conversion for 45–60% token savings on structured input ([python-toon](https://github.com/jhd3197/python-toon))
149
+
150
+ **Agents, tools, RAG**
151
+ - Stateful conversations with sync + async support
152
+ - Function calling and streaming across providers, with prompt-based simulation for models without native tool use
153
+ - Drop-in tools: sandboxed `python_execute` (Tukuy), `web_search` (Tavily / Serper / Brave / SearXNG)
154
+ - `DeepAgent` with planning, virtual filesystem, sub-agents, and auto-summarization — no LangChain
155
+ - Full RAG stack — loaders, chunkers, vector stores, hybrid dense+BM25 retrieval, end-to-end `RAGPipeline` — see [RAG](#rag)
156
+
157
+ **Safety & evaluation**
158
+ - `PromptInjectionDetector` + `PIIRedactor` for input-side defense
159
+ - `RefusalDetector` / `RefusalEvaluator` for cross-provider alignment scoring
160
+ - `generate_qa_dataset()` — synthetic JSONL datasets ready for Unsloth, Axolotl, TRL
161
+
162
+ **Ops**
163
+ - `prompture serve` — OpenAI-compatible server (`/v1/chat/completions`, `/v1/embeddings`, `/v1/coding-agents`, …) routes any client to any provider
164
+ - Usage tracking — tokens + cost on every call
165
+ - Response cache — memory, SQLite, Redis backends
166
+ - Plugin system — register custom drivers via entry points
167
+ - Spec-driven batch testing for cross-model comparison
160
168
 
161
169
  ## Built With Prompture
162
170
 
@@ -171,34 +179,70 @@ Projects powered by Prompture at their core:
171
179
  pip install prompture
172
180
  ```
173
181
 
174
- Optional extras:
182
+ That's all you need for the core driver system, structured extraction, and
183
+ agent loop. Everything below is **opt-in** — install only what you'll actually
184
+ use.
185
+
186
+ > **TL;DR** — Building a RAG app? `pip install prompture[rag]` and skip the
187
+ > rest of this section. Just doing structured extraction or agents? You don't
188
+ > need any extras.
189
+
190
+ ### Core extras
191
+
192
+ | Extra | Adds | Install |
193
+ |---|---|---|
194
+ | `redis` | Redis cache backend | `pip install prompture[redis]` |
195
+ | `serve` | FastAPI server mode (`prompture serve`) | `pip install prompture[serve]` |
196
+ | `airllm` | AirLLM local inference | `pip install prompture[airllm]` |
197
+ | `bedrock` | AWS Bedrock driver (`boto3`) | `pip install prompture[bedrock]` |
198
+ | `sandbox` | Sandboxed Python execution tool (`tukuy`) | `pip install prompture[sandbox]` |
199
+
200
+ ### RAG — the easy path
175
201
 
176
202
  ```bash
177
- pip install prompture[redis] # Redis cache backend
178
- pip install prompture[serve] # FastAPI server mode
179
- pip install prompture[airllm] # AirLLM local inference
180
- pip install prompture[bedrock] # AWS Bedrock driver (boto3)
181
- pip install prompture[sandbox] # Sandboxed Python execution tool (tukuy)
182
- pip install prompture[rag] # Full RAG stack (all loaders, chunkers, vector stores, hybrid retrieval)
203
+ pip install prompture[rag]
183
204
  ```
184
205
 
185
- Fine-grained RAG extras (install only what you need):
206
+ Pulls in every loader, chunker, hybrid retrieval, and all vector-store
207
+ backends. Use this unless you need to keep the dependency footprint small.
208
+
209
+ ### RAG — à la carte
210
+
211
+ Pick only the pieces you need.
212
+
213
+ **Loaders** — one per document format:
214
+
215
+ | Extra | Format | Backed by |
216
+ |---|---|---|
217
+ | `rag-pdf` | PDF | `pypdf` |
218
+ | `rag-docx` | DOCX | `python-docx` |
219
+ | `rag-html` | HTML | `beautifulsoup4` + `markdownify` + `lxml` |
220
+ | `rag-epub` | EPUB | `ebooklib` |
221
+ | `rag-xlsx` | XLSX | `openpyxl` |
222
+
223
+ **Chunking & retrieval:**
224
+
225
+ | Extra | What it adds | Backed by |
226
+ |---|---|---|
227
+ | `rag-token` | Token-aware chunker | `tiktoken` |
228
+ | `rag-semantic` | Semantic chunker | `numpy` |
229
+ | `rag-hybrid` | Hybrid retriever (BM25 + vectors) | `rank-bm25` |
230
+
231
+ **Vector stores** — pick whichever you deploy against:
232
+
233
+ | Extra | Vector store |
234
+ |---|---|
235
+ | `rag-vs-chroma` | Chroma |
236
+ | `rag-vs-pinecone` | Pinecone |
237
+ | `rag-vs-qdrant` | Qdrant |
238
+ | `rag-vs-pgvector` | pgvector / PostgreSQL |
239
+ | `rag-vs-faiss` | FAISS (CPU build) |
240
+ | `rag-vs-weaviate` | Weaviate |
241
+
242
+ Combine them as needed, e.g.:
186
243
 
187
244
  ```bash
188
- pip install prompture[rag-pdf] # PDF loader (pypdf)
189
- pip install prompture[rag-docx] # DOCX loader (python-docx)
190
- pip install prompture[rag-html] # HTML loader (beautifulsoup4 + markdownify + lxml)
191
- pip install prompture[rag-epub] # EPUB loader (ebooklib)
192
- pip install prompture[rag-xlsx] # XLSX loader (openpyxl)
193
- pip install prompture[rag-token] # Token-aware chunker (tiktoken)
194
- pip install prompture[rag-semantic] # Semantic chunker (numpy)
195
- pip install prompture[rag-hybrid] # Hybrid retriever with BM25 (rank-bm25)
196
- pip install prompture[rag-vs-chroma] # Chroma vector store
197
- pip install prompture[rag-vs-pinecone] # Pinecone vector store
198
- pip install prompture[rag-vs-qdrant] # Qdrant vector store
199
- pip install prompture[rag-vs-pgvector] # pgvector / PostgreSQL
200
- pip install prompture[rag-vs-faiss] # FAISS vector store (CPU build)
201
- pip install prompture[rag-vs-weaviate] # Weaviate vector store
245
+ pip install "prompture[rag-pdf,rag-token,rag-vs-qdrant]"
202
246
  ```
203
247
 
204
248
  ## Configuration
@@ -247,17 +291,23 @@ Model strings use `"provider/model"` format. The provider prefix routes to the c
247
291
  | `openai` | `openai/gpt-4` | Automatic |
248
292
  | `claude` | `claude/claude-3` | Automatic |
249
293
  | `google` | `google/gemini-1.5-pro` | Automatic |
250
- | `google_vertexai` | `google_vertexai/gemini-1.5-pro` | Automatic |
251
294
  | `groq` | `groq/llama2-70b-4096` | Automatic |
295
+ | `openrouter` | `openrouter/anthropic/claude-2` | Automatic |
296
+ | `ollama` | `ollama/llama3.1:8b` | Free (local) |
297
+
298
+ <details>
299
+ <summary><b>Show all 30+ providers</b></summary>
300
+
301
+ | Provider | Example Model | Cost |
302
+ |---|---|---|
303
+ | `google_vertexai` | `google_vertexai/gemini-1.5-pro` | Automatic |
252
304
  | `grok` | `grok/grok-4-fast-reasoning` | Automatic |
253
305
  | `azure` | `azure/deployed-name` | Automatic |
254
306
  | `bedrock` | `bedrock/anthropic.claude-3-5-haiku-20241022-v1:0` (requires `pip install prompture[bedrock]`) | Automatic |
255
- | `openrouter` | `openrouter/anthropic/claude-2` | Automatic |
256
307
  | `moonshot` | `moonshot/kimi-k2` | Automatic |
257
308
  | `modelscope` | `modelscope/Qwen2.5-72B-Instruct` | Automatic |
258
309
  | `zai` | `zai/glm-4` | Automatic |
259
310
  | `cachibot` | `cachibot/openai/gpt-4o-mini` | Automatic |
260
- | `ollama` | `ollama/llama3.1:8b` | Free (local) |
261
311
  | `lmstudio` | `lmstudio/local-model` | Free (local) |
262
312
  | `huggingface` | `hf/model-name` | Free (local) |
263
313
  | `airllm` | `airllm/Qwen2-7B` | Free (local) |
@@ -277,6 +327,8 @@ Model strings use `"provider/model"` format. The provider prefix routes to the c
277
327
  | `mixedbread` | `mixedbread/mxbai-embed-large-v1` (embedding), `mixedbread/mxbai-rerank-large-v1` (rerank) | Automatic |
278
328
  | `openai_compatible` | `openai_compatible/<profile>/<model>` — 9 curated profiles: `fireworks`, `together`, `cerebras`, `sambanova`, `perplexity`, `nvidia`, `deepinfra`, `siliconflow`, `github_models` (or pass an explicit `endpoint=` for anything else) | Automatic where pricing is known |
279
329
 
330
+ </details>
331
+
280
332
  Aliases (`anthropic`, `gemini`, `chatgpt`, `xai`, `lm_studio`, `zhipu`, `hf`, `dalle`, `runwayml`, `hailuo`, `mistralai`, `flux`, `mxbai`) route to their canonical providers.
281
333
 
282
334
  ## Multi-Modal
@@ -1226,6 +1278,105 @@ agent = create_deep_agent(
1226
1278
 
1227
1279
  `AsyncDeepAgent` / `create_async_deep_agent` mirror the sync API for async use. State lives on `agent.deep_state` (the `state` attribute is reserved for lifecycle on the underlying `Agent`). Reserved tool names (`write_todos`, `task`, `read_file`, `write_file`, `edit_file`, `ls`, `glob`, `grep`) take precedence over user tools; collisions emit a warning. See `examples/deep_agent_example.py` for a complete walkthrough.
1228
1280
 
1281
+ ### Assistants
1282
+
1283
+ An `Assistant` bundles a `Persona`, optional `Skill`s, optional `tools`, and exactly one execution backend (an LLM `model` id or a `coding_agent` CLI id) into a reusable unit. Consumers register an assistant once and reuse it everywhere, swapping the backend without changing call-sites.
1284
+
1285
+ ```python
1286
+ from prompture import Assistant, Persona, SkillInfo
1287
+
1288
+ web_dev = Assistant(
1289
+ name="web-developer",
1290
+ persona=Persona(
1291
+ name="web_dev",
1292
+ system_prompt="You are a senior {{role}} building {{page_type}} pages.",
1293
+ ),
1294
+ skills=[SkillInfo(
1295
+ name="semantic-html5",
1296
+ description="Always prefer semantic HTML5 tags.",
1297
+ instructions="Use <header>/<main>/<section>; avoid <div> when a semantic tag fits.",
1298
+ )],
1299
+ model="openai/gpt-4o",
1300
+ variables={"role": "developer"},
1301
+ ).register() # store in the assistant registry
1302
+
1303
+ # Later, anywhere:
1304
+ a = Assistant.from_registry("web-developer")
1305
+ result = await a.arun("Build /about.html.", role="senior", page_type="about")
1306
+ print(result.output, result.cost_usd)
1307
+ ```
1308
+
1309
+ Both backends return a uniform `AssistantResult` with `output`, `cost_usd`, `input_tokens`, `output_tokens`, `session_id` (coding-agent only), and `raw` (the underlying `AgentResult` / `CodingAgentRunResult`). Swap an LLM for a CLI by replacing `model="…"` with `coding_agent="claude"` (or `"auto"` for capability-aware auto-selection — see *Picking a coding-agent CLI* below).
1310
+
1311
+ Set `enable_planning=True` to route the LLM backend through `AsyncDeepAgent` and gain `write_todos` + streaming plan updates.
1312
+
1313
+ ### Review Loops
1314
+
1315
+ `AsyncReviewLoop` wraps the "do work → critique it → optionally revise" pattern as a single async call. Works with anything exposing an awaitable `arun(prompt, **kwargs)` that returns an object with `.output` — typically two `Assistant`s.
1316
+
1317
+ ```python
1318
+ from prompture import Assistant, AsyncReviewLoop, Persona
1319
+
1320
+ coder = Assistant(name="c", persona=Persona(name="c", system_prompt="Write Python."), model="openai/gpt-4o-mini")
1321
+ reviewer = Assistant(
1322
+ name="r",
1323
+ persona=Persona(
1324
+ name="r",
1325
+ system_prompt="Critique the code. End with one line: SCORE: <0-10>",
1326
+ ),
1327
+ model="openai/gpt-4o-mini",
1328
+ )
1329
+
1330
+ loop = AsyncReviewLoop(
1331
+ coder=coder,
1332
+ reviewer=reviewer,
1333
+ max_iters=3,
1334
+ approve_when=lambda r: "SCORE: 9" in r.output or "SCORE: 10" in r.output,
1335
+ )
1336
+ result = await loop.arun("Write a function that reverses a string.")
1337
+ print(result.output, "approved=", result.approved, "iters=", result.iterations)
1338
+ ```
1339
+
1340
+ Customise the review framing with `review_prompt=` and the retry framing with `feedback_prompt=` if the defaults don't fit. Every iteration is preserved in `result.history` as a `ReviewLoopIteration` with the raw coder / reviewer results attached.
1341
+
1342
+ ### Picking a coding-agent CLI
1343
+
1344
+ `pick_best_coding_agent` combines discovery with the capability flags on each `CodingAgentSpec`, so callers can ask for *"any installed CLI that supports X"* without hardcoding agent ids.
1345
+
1346
+ ```python
1347
+ from prompture import pick_best_coding_agent
1348
+
1349
+ chosen = pick_best_coding_agent(
1350
+ prefer=["claude", "codex"],
1351
+ require_session_resume=True,
1352
+ verify=True,
1353
+ )
1354
+ if chosen:
1355
+ print(f"Will use {chosen.id} from {chosen.binary}")
1356
+ ```
1357
+
1358
+ Capability flags exposed today: `supports_tool_use`, `supports_structured_output`, `supports_questions` (clarifying-question events), `supports_session_resume`.
1359
+
1360
+ ### Salvaging code from text responses
1361
+
1362
+ When an LLM should have called your `write_file` tool but instead dumped code into its final response (common with weaker models or providers without tool-calling), use `extract_fenced_blocks` and `extract_html_document` to recover it:
1363
+
1364
+ ```python
1365
+ from prompture import extract_fenced_blocks, extract_html_document
1366
+
1367
+ for block in extract_fenced_blocks(text, languages=["html", "css", "js"]):
1368
+ write_file(f"{block.language}.txt", block.content)
1369
+
1370
+ doc = extract_html_document(text)
1371
+ if doc.found:
1372
+ write_file("index.html", doc.html)
1373
+ # inline <style> / <script> blocks are also split out:
1374
+ write_file("styles.css", "\n\n".join(doc.styles))
1375
+ write_file("script.js", "\n\n".join(doc.scripts))
1376
+ ```
1377
+
1378
+ Both helpers return plain dataclasses with no I/O of their own. See `examples/assistant_example.py` for the assistant + review-loop + extractor flow end-to-end.
1379
+
1229
1380
  ### Cost Pre-flight
1230
1381
 
1231
1382
  Forecast the cost of a call **before** making it. Accepts either text
@@ -1592,184 +1743,10 @@ Selected flags:
1592
1743
 
1593
1744
  Full example walkthrough: [`examples/openai_server_example.md`](examples/openai_server_example.md).
1594
1745
 
1595
- ## Integrating Prompture into Your Project
1596
-
1597
- ### FastAPI + AsyncAgent with Tools
1598
-
1599
- The most common integration pattern — an AI chat endpoint with database-backed tools:
1600
-
1601
- ```python
1602
- from fastapi import APIRouter, Depends
1603
- from prompture import AsyncAgent, ToolRegistry, ProviderEnvironment, BudgetExceededError
1604
-
1605
- router = APIRouter()
1606
-
1607
- def build_tools(db) -> ToolRegistry:
1608
- registry = ToolRegistry()
1609
-
1610
- @registry.tool
1611
- async def search_records(query: str) -> str:
1612
- """Search the database for matching records."""
1613
- results = await db.execute(...)
1614
- return format_results(results)
1615
-
1616
- return registry
1617
-
1618
- @router.post("/chat")
1619
- async def chat(message: str, db=Depends(get_db)):
1620
- env = ProviderEnvironment(openai_api_key=get_api_key_from_db(db))
1621
-
1622
- agent = AsyncAgent(
1623
- "openai/gpt-4o",
1624
- env=env,
1625
- tools=build_tools(db),
1626
- system_prompt="You are a helpful assistant with database access.",
1627
- max_cost=0.25,
1628
- budget_policy="hard_stop",
1629
- )
1630
-
1631
- try:
1632
- result = await agent.run(message)
1633
- return {"reply": result.output_text, "usage": result.usage}
1634
- except BudgetExceededError:
1635
- return {"error": "Cost limit exceeded"}, 429
1636
- ```
1637
-
1638
- ### SSE Streaming Endpoint
1639
-
1640
- Stream responses via Server-Sent Events:
1641
-
1642
- ```python
1643
- from fastapi.responses import StreamingResponse
1644
- from prompture import AsyncAgent, StreamEventType
1645
-
1646
- @router.post("/chat/stream")
1647
- async def chat_stream(message: str):
1648
- agent = AsyncAgent("claude/claude-sonnet-4-6", env=env, system_prompt="...")
1649
-
1650
- async def event_stream():
1651
- async for event in agent.run_stream(message):
1652
- match event.event_type:
1653
- case StreamEventType.text_delta:
1654
- yield f"data: {json.dumps({'type': 'text', 'content': event.data})}\n\n"
1655
- case StreamEventType.tool_call:
1656
- yield f"data: {json.dumps({'type': 'tool_call', 'name': event.data['name']})}\n\n"
1657
- case StreamEventType.output:
1658
- yield f"data: {json.dumps({'type': 'done'})}\n\n"
1746
+ ## Integrating & Extending
1659
1747
 
1660
- return StreamingResponse(event_stream(), media_type="text/event-stream")
1661
- ```
1662
-
1663
- ### Structured Extraction in Endpoints
1664
-
1665
- Use `AsyncConversation.ask_for_json()` for one-shot structured data extraction:
1666
-
1667
- ```python
1668
- from prompture import AsyncConversation
1669
-
1670
- @router.get("/insights")
1671
- async def get_insights():
1672
- conv = AsyncConversation("openai/gpt-4o", system_prompt="You analyze data.")
1673
- result = await conv.ask_for_json(
1674
- f"Analyze this data and produce insights:\n\n{context}",
1675
- {"type": "object", "properties": {
1676
- "insights": {"type": "array", "items": {"type": "object", ...}},
1677
- "summary": {"type": "string"},
1678
- }},
1679
- )
1680
- return result["json_object"]
1681
- ```
1682
-
1683
- ### Error Handling
1684
-
1685
- Key exceptions to catch in production:
1686
-
1687
- ```python
1688
- from prompture import BudgetExceededError, DriverError, ExtractionError, ValidationError
1689
-
1690
- try:
1691
- result = await agent.run(message)
1692
- except BudgetExceededError:
1693
- # Cost or token limit exceeded — return 429
1694
- pass
1695
- except DriverError:
1696
- # Provider API error (auth, rate limit, network) — return 502
1697
- pass
1698
- except ExtractionError:
1699
- # JSON parsing/validation failed — return 422
1700
- pass
1701
- except ValidationError:
1702
- # Schema validation failed — return 422
1703
- pass
1704
- ```
1705
-
1706
- ## Extending Prompture
1707
-
1708
- Prompture's provider registry is plugin-based. Every built-in provider
1709
- (OpenAI, Claude, Google, etc.) is contributed by a `ProviderPlugin`
1710
- instance registered in `prompture.plugins.builtins`. Third-party packages
1711
- can register their own providers via the `prompture.providers` Python
1712
- entry-point group — no fork required.
1713
-
1714
- ### Plugin Architecture
1715
-
1716
- At import time, `prompture` discovers plugins from two sources:
1717
-
1718
- 1. **Built-in plugins** — loaded from `prompture.plugins.builtins` directly.
1719
- 2. **External plugins** — discovered through the `prompture.providers`
1720
- entry-point group via `importlib.metadata.entry_points()`.
1721
-
1722
- Each plugin returns one or more `ProviderDescriptor` instances. Prompture
1723
- then wires them up to the LLM, audio, image, video, embedding, rerank,
1724
- and moderation driver registries.
1725
-
1726
- ### Writing a Plugin
1727
-
1728
- Create a Python file that subclasses `ProviderPlugin`:
1729
-
1730
- ```python
1731
- # my_package/plugin.py
1732
- from prompture.plugins import ProviderPlugin
1733
- from prompture.drivers.provider_descriptors import (
1734
- ProviderDescriptor,
1735
- DriverSpec,
1736
- )
1737
-
1738
-
1739
- class MyProviderPlugin(ProviderPlugin):
1740
- name = "my_provider"
1741
- version = "0.1.0"
1742
-
1743
- def descriptors(self):
1744
- return [
1745
- ProviderDescriptor(
1746
- name="my_provider",
1747
- llm_sync=DriverSpec(
1748
- cls_path="my_package.driver.MyDriver",
1749
- kwarg_map={"api_key": "my_provider_api_key"},
1750
- default_model="my-model-1",
1751
- ),
1752
- display_name="My Provider",
1753
- is_configured_check="my_provider_api_key",
1754
- ),
1755
- ]
1756
- ```
1757
-
1758
- Then declare the entry point in your package's `pyproject.toml`:
1759
-
1760
- ```toml
1761
- [project.entry-points."prompture.providers"]
1762
- my_provider = "my_package.plugin:MyProviderPlugin"
1763
- ```
1764
-
1765
- Once `pip install`-ed alongside Prompture, your provider becomes
1766
- available automatically:
1767
-
1768
- ```python
1769
- from prompture import get_driver_for_model
1770
-
1771
- driver = get_driver_for_model("my_provider/my-model-1")
1772
- ```
1748
+ - **FastAPI integration patterns** (AsyncAgent + tools, SSE streaming, structured endpoints, error handling) — see [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md#integrating-prompture-into-your-project)
1749
+ - **Custom provider plugins** (architecture + a complete `ProviderPlugin` walkthrough) — see [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md#extending-prompture)
1773
1750
 
1774
1751
  ## Development
1775
1752