prompture 1.1.3.dev3__tar.gz → 1.1.4.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/PKG-INFO +1 -1
  2. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/_version.py +2 -2
  3. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/__init__.py +9 -1
  4. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/assistant.py +89 -18
  5. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/review_loop.py +129 -11
  6. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/coding_agent_events.py +4 -4
  7. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/coding_agents.py +1 -0
  8. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/PKG-INFO +1 -1
  9. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-driver/SKILL.md +0 -0
  10. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-driver/references/driver-template.md +0 -0
  11. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-example/SKILL.md +0 -0
  12. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-field/SKILL.md +0 -0
  13. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-persona/SKILL.md +0 -0
  14. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-test/SKILL.md +0 -0
  15. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-tool/SKILL.md +0 -0
  16. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/create-pr/SKILL.md +0 -0
  17. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/run-tests/SKILL.md +0 -0
  18. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  19. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/update-pricing/SKILL.md +0 -0
  20. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.env.copy +0 -0
  21. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/FUNDING.yml +0 -0
  22. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  23. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  24. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  25. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  26. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/scripts/update_docs_version.py +0 -0
  27. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/scripts/update_wrapper_version.py +0 -0
  28. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/dev.yml +0 -0
  29. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/documentation.yml +0 -0
  30. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/pricing-freshness.yml +0 -0
  31. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/publish.yml +0 -0
  32. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/security.yml +0 -0
  33. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.safety-project.ini +0 -0
  34. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/AGENTS.md +0 -0
  35. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/BREAKING_CHANGES.md +0 -0
  36. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/CLAUDE.md +0 -0
  37. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/CONTRIBUTING.md +0 -0
  38. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/LICENSE +0 -0
  39. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/MANIFEST.in +0 -0
  40. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/README.md +0 -0
  41. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/ROADMAP.md +0 -0
  42. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/SECURITY.md +0 -0
  43. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/dev.ps1 +0 -0
  44. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/dev.sh +0 -0
  45. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/mypy_errors.txt +0 -0
  46. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/README.md +0 -0
  47. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/README.md +0 -0
  48. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  49. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/pyproject.toml +0 -0
  50. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/test.py +0 -0
  51. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/README.md +0 -0
  52. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  53. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/pyproject.toml +0 -0
  54. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/test.py +0 -0
  55. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/__init__.py +0 -0
  56. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/agent.py +0 -0
  57. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/async_agent.py +0 -0
  58. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/async_conversation.py +0 -0
  59. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/async_deep_agent.py +0 -0
  60. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/conversation.py +0 -0
  61. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/__init__.py +0 -0
  62. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/planner.py +0 -0
  63. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/subagents.py +0 -0
  64. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/summarizer.py +0 -0
  65. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/vfs.py +0 -0
  66. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep_agent.py +0 -0
  67. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep_prompts.py +0 -0
  68. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep_state.py +0 -0
  69. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/persona.py +0 -0
  70. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/simulated_tools.py +0 -0
  71. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/skills.py +0 -0
  72. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/tools_schema.py +0 -0
  73. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/types.py +0 -0
  74. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/aio/__init__.py +0 -0
  75. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/bridges/__init__.py +0 -0
  76. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/bridges/tukuy_backend.py +0 -0
  77. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/__init__.py +0 -0
  78. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/cli.py +0 -0
  79. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/formatters.py +0 -0
  80. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/runner.py +0 -0
  81. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/server.py +0 -0
  82. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/__init__.py +0 -0
  83. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/formats.py +0 -0
  84. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/schemas.py +0 -0
  85. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/synth.py +0 -0
  86. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/__init__.py +0 -0
  87. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/airllm_driver.py +0 -0
  88. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/assemblyai_stt_driver.py +0 -0
  89. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_airllm_driver.py +0 -0
  90. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
  91. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_azure_driver.py +0 -0
  92. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_base.py +0 -0
  93. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_bedrock_driver.py +0 -0
  94. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  95. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cachibot_driver.py +0 -0
  96. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
  97. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_claude_driver.py +0 -0
  98. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cohere_driver.py +0 -0
  99. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  100. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  101. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
  102. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
  103. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_deepseek_driver.py +0 -0
  104. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
  105. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
  106. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_embedding_base.py +0 -0
  107. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  108. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  109. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_google_driver.py +0 -0
  110. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  111. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_google_vertexai_driver.py +0 -0
  112. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_grok_driver.py +0 -0
  113. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
  114. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  115. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_groq_driver.py +0 -0
  116. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_hugging_driver.py +0 -0
  117. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  118. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_img_gen_base.py +0 -0
  119. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  120. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  121. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  122. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  123. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_lmstudio_driver.py +0 -0
  124. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_local_http_driver.py +0 -0
  125. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  126. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_minimax_driver.py +0 -0
  127. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  128. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mistral_driver.py +0 -0
  129. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  130. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_modelscope_driver.py +0 -0
  131. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_moonshot_driver.py +0 -0
  132. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  133. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  134. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  135. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_ollama_driver.py +0 -0
  136. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  137. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_compatible_driver.py +0 -0
  138. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_driver.py +0 -0
  139. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_embedding_driver.py +0 -0
  140. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
  141. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  142. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_stt_driver.py +0 -0
  143. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_tts_driver.py +0 -0
  144. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openrouter_driver.py +0 -0
  145. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  146. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_registry.py +0 -0
  147. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  148. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_runway_tts_driver.py +0 -0
  149. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  150. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  151. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_stt_base.py +0 -0
  152. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_tts_base.py +0 -0
  153. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_video_gen_base.py +0 -0
  154. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  155. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  156. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_zai_driver.py +0 -0
  157. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/audio_registry.py +0 -0
  158. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/azure_config.py +0 -0
  159. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/azure_driver.py +0 -0
  160. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/base.py +0 -0
  161. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/bedrock_driver.py +0 -0
  162. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  163. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cachibot_driver.py +0 -0
  164. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cartesia_tts_driver.py +0 -0
  165. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/claude_driver.py +0 -0
  166. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cohere_driver.py +0 -0
  167. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cohere_embedding_driver.py +0 -0
  168. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cohere_rerank_driver.py +0 -0
  169. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/deepgram_stt_driver.py +0 -0
  170. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/deepgram_tts_driver.py +0 -0
  171. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/deepseek_driver.py +0 -0
  172. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/driver_registry.py +0 -0
  173. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
  174. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
  175. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/embedding_base.py +0 -0
  176. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/embedding_registry.py +0 -0
  177. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/fal_img_gen_driver.py +0 -0
  178. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/fal_video_gen_driver.py +0 -0
  179. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/google_driver.py +0 -0
  180. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/google_img_gen_driver.py +0 -0
  181. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/google_vertexai_driver.py +0 -0
  182. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/grok_driver.py +0 -0
  183. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/grok_img_gen_driver.py +0 -0
  184. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/grok_video_gen_driver.py +0 -0
  185. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/groq_driver.py +0 -0
  186. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/hugging_driver.py +0 -0
  187. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  188. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/img_gen_base.py +0 -0
  189. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/img_gen_registry.py +0 -0
  190. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/jina_embedding_driver.py +0 -0
  191. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/jina_rerank_driver.py +0 -0
  192. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/kling_img_gen_driver.py +0 -0
  193. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/kling_video_gen_driver.py +0 -0
  194. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/lmstudio_driver.py +0 -0
  195. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/local_http_driver.py +0 -0
  196. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/luma_video_gen_driver.py +0 -0
  197. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/minimax_driver.py +0 -0
  198. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  199. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mistral_driver.py +0 -0
  200. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mistral_moderation_driver.py +0 -0
  201. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/modelscope_driver.py +0 -0
  202. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/moderation_base.py +0 -0
  203. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/moderation_registry.py +0 -0
  204. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/moonshot_driver.py +0 -0
  205. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  206. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  207. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/nomic_embedding_driver.py +0 -0
  208. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/ollama_driver.py +0 -0
  209. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/ollama_embedding_driver.py +0 -0
  210. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_compatible_driver.py +0 -0
  211. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_driver.py +0 -0
  212. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_embedding_driver.py +0 -0
  213. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_img_gen_driver.py +0 -0
  214. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_moderation_driver.py +0 -0
  215. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_stt_driver.py +0 -0
  216. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_tts_driver.py +0 -0
  217. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openrouter_driver.py +0 -0
  218. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/pika_video_gen_driver.py +0 -0
  219. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/provider_descriptors.py +0 -0
  220. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/registry.py +0 -0
  221. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/rerank_base.py +0 -0
  222. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/rerank_registry.py +0 -0
  223. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  224. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_capabilities.py +0 -0
  225. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_img_gen_driver.py +0 -0
  226. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_tts_driver.py +0 -0
  227. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_video_gen_driver.py +0 -0
  228. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/stability_img_gen_driver.py +0 -0
  229. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/stt_base.py +0 -0
  230. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/tts_base.py +0 -0
  231. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/video_gen_base.py +0 -0
  232. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/video_gen_registry.py +0 -0
  233. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/vision_helpers.py +0 -0
  234. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/voyage_embedding_driver.py +0 -0
  235. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/voyage_rerank_driver.py +0 -0
  236. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/zai_driver.py +0 -0
  237. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/exceptions.py +0 -0
  238. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/__init__.py +0 -0
  239. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/async_core.py +0 -0
  240. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/code_extraction.py +0 -0
  241. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/core.py +0 -0
  242. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/fields.py +0 -0
  243. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/reasoning.py +0 -0
  244. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/strategy.py +0 -0
  245. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/tools.py +0 -0
  246. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/tukuy_bridge.py +0 -0
  247. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/validator.py +0 -0
  248. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/__init__.py +0 -0
  249. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/async_groups.py +0 -0
  250. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/consensus.py +0 -0
  251. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/debate.py +0 -0
  252. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/groups.py +0 -0
  253. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/types.py +0 -0
  254. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/__init__.py +0 -0
  255. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/budget.py +0 -0
  256. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/cache.py +0 -0
  257. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/callbacks.py +0 -0
  258. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/capabilities.py +0 -0
  259. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/coding_agent_specs.py +0 -0
  260. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/cost_mixin.py +0 -0
  261. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/discovery.py +0 -0
  262. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/ledger.py +0 -0
  263. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/logging.py +0 -0
  264. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/model_rates.py +0 -0
  265. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/pricing.py +0 -0
  266. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/provider_env.py +0 -0
  267. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/anthropic.json +0 -0
  268. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/azure.json +0 -0
  269. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/bedrock.json +0 -0
  270. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/cerebras.json +0 -0
  271. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/cohere.json +0 -0
  272. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/deepinfra.json +0 -0
  273. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/deepseek.json +0 -0
  274. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/fireworks.json +0 -0
  275. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/google.json +0 -0
  276. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/google_vertexai.json +0 -0
  277. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/groq.json +0 -0
  278. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/jina.json +0 -0
  279. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/mistral.json +0 -0
  280. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/mixedbread.json +0 -0
  281. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/moonshot.json +0 -0
  282. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/nomic.json +0 -0
  283. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/nvidia.json +0 -0
  284. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/openai.json +0 -0
  285. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/openrouter.json +0 -0
  286. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/perplexity.json +0 -0
  287. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/sambanova.json +0 -0
  288. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/siliconflow.json +0 -0
  289. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/together.json +0 -0
  290. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/voyage.json +0 -0
  291. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/xai.json +0 -0
  292. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/session.py +0 -0
  293. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/settings.py +0 -0
  294. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/tracker.py +0 -0
  295. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/tukuy_backend.py +0 -0
  296. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/__init__.py +0 -0
  297. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/chunking.py +0 -0
  298. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/detect.py +0 -0
  299. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/document.py +0 -0
  300. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/__init__.py +0 -0
  301. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/base.py +0 -0
  302. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/csv_parser.py +0 -0
  303. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/docx.py +0 -0
  304. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/html.py +0 -0
  305. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/markdown.py +0 -0
  306. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/pdf.py +0 -0
  307. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/xlsx.py +0 -0
  308. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/integrations/__init__.py +0 -0
  309. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/integrations/tukuy_bridge.py +0 -0
  310. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/__init__.py +0 -0
  311. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/audio.py +0 -0
  312. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/image.py +0 -0
  313. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/video.py +0 -0
  314. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/01-why-prompture.md +0 -0
  315. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/02-installation.md +0 -0
  316. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/03-quickstart.md +0 -0
  317. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/04-toon-input.md +0 -0
  318. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/05-test-harness.md +0 -0
  319. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/06-stability.md +0 -0
  320. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/07-migration.md +0 -0
  321. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/__init__.py +0 -0
  322. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/history.py +0 -0
  323. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/serialization.py +0 -0
  324. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/store.py +0 -0
  325. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/__init__.py +0 -0
  326. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/pipeline.py +0 -0
  327. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/resolver.py +0 -0
  328. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/routing.py +0 -0
  329. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/__init__.py +0 -0
  330. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/base.py +0 -0
  331. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/__init__.py +0 -0
  332. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/_aliases.py +0 -0
  333. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  334. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/audio_plugin.py +0 -0
  335. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  336. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  337. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/extras_plugin.py +0 -0
  338. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/google_plugin.py +0 -0
  339. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/image_plugin.py +0 -0
  340. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/local_plugin.py +0 -0
  341. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  342. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/openai_plugin.py +0 -0
  343. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/video_plugin.py +0 -0
  344. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/discovery.py +0 -0
  345. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/py.typed +0 -0
  346. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/__init__.py +0 -0
  347. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/__init__.py +0 -0
  348. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/base.py +0 -0
  349. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/character.py +0 -0
  350. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/chunker_registry.py +0 -0
  351. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/markdown.py +0 -0
  352. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/recursive.py +0 -0
  353. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/semantic.py +0 -0
  354. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/token.py +0 -0
  355. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/documents.py +0 -0
  356. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loader_registry.py +0 -0
  357. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/__init__.py +0 -0
  358. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/csv_loader.py +0 -0
  359. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/docx_loader.py +0 -0
  360. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/epub_loader.py +0 -0
  361. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/html_loader.py +0 -0
  362. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/json_loader.py +0 -0
  363. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/markdown_loader.py +0 -0
  364. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/pdf_loader.py +0 -0
  365. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/text_loader.py +0 -0
  366. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/xlsx_loader.py +0 -0
  367. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/pipeline.py +0 -0
  368. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/__init__.py +0 -0
  369. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/base.py +0 -0
  370. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/hybrid.py +0 -0
  371. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/mmr.py +0 -0
  372. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/retriever_registry.py +0 -0
  373. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/similarity.py +0 -0
  374. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/__init__.py +0 -0
  375. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/base.py +0 -0
  376. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/chroma.py +0 -0
  377. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/faiss.py +0 -0
  378. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/pgvector.py +0 -0
  379. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/pinecone.py +0 -0
  380. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/qdrant.py +0 -0
  381. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
  382. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/weaviate.py +0 -0
  383. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/__init__.py +0 -0
  384. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/detector.py +0 -0
  385. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/evaluator.py +0 -0
  386. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/markers.py +0 -0
  387. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/__init__.py +0 -0
  388. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/generator.py +0 -0
  389. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  390. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/README.md.j2 +0 -0
  391. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/config.py.j2 +0 -0
  392. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/env.example.j2 +0 -0
  393. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/main.py.j2 +0 -0
  394. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/models.py.j2 +0 -0
  395. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  396. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/security/__init__.py +0 -0
  397. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/security/injection.py +0 -0
  398. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/security/redaction.py +0 -0
  399. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/testing/__init__.py +0 -0
  400. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/testing/driver_contract.py +0 -0
  401. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/tools/__init__.py +0 -0
  402. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/tools/code_exec.py +0 -0
  403. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/tools/web_search.py +0 -0
  404. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/SOURCES.txt +0 -0
  405. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/dependency_links.txt +0 -0
  406. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/entry_points.txt +0 -0
  407. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/requires.txt +0 -0
  408. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/top_level.txt +0 -0
  409. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture_cost_tracking.md +0 -0
  410. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/pyproject.toml +0 -0
  411. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/requirements.txt +0 -0
  412. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/scripts/check_pricing_freshness.py +0 -0
  413. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/setup.cfg +0 -0
  414. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/specs/basic_extraction.json +0 -0
  415. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/specs/schema_validation.json +0 -0
  416. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/specs/strategy_comparison.json +0 -0
  417. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/test.py +0 -0
  418. {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/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.dev3
3
+ Version: 1.1.4.dev2
4
4
  Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
5
5
  Author-email: Juan Denis <juan@vene.co>
6
6
  License-Expression: MIT
@@ -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.1.3.dev3'
22
- __version_tuple__ = version_tuple = (1, 1, 3, 'dev3')
21
+ __version__ = version = '1.1.4.dev2'
22
+ __version_tuple__ = version_tuple = (1, 1, 4, 'dev2')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -38,7 +38,13 @@ from .persona import (
38
38
  reset_persona_registry,
39
39
  reset_trait_registry,
40
40
  )
41
- from .review_loop import AsyncReviewLoop, ReviewLoopIteration, ReviewLoopResult
41
+ from .review_loop import (
42
+ AsyncReviewLoop,
43
+ ReviewLoopEvent,
44
+ ReviewLoopEventType,
45
+ ReviewLoopIteration,
46
+ ReviewLoopResult,
47
+ )
42
48
  from .skills import (
43
49
  SKILLS,
44
50
  SkillInfo,
@@ -97,6 +103,8 @@ __all__ = [
97
103
  "GuardrailError",
98
104
  "ModelRetry",
99
105
  "Persona",
106
+ "ReviewLoopEvent",
107
+ "ReviewLoopEventType",
100
108
  "ReviewLoopIteration",
101
109
  "ReviewLoopResult",
102
110
  "RunContext",
@@ -62,7 +62,7 @@ import asyncio
62
62
  import dataclasses
63
63
  import logging
64
64
  import threading
65
- from collections.abc import AsyncIterator, Callable
65
+ from collections.abc import AsyncIterator
66
66
  from typing import Any
67
67
 
68
68
  from .persona import Persona
@@ -145,34 +145,61 @@ class Assistant:
145
145
  output_type: Optional Pydantic model passed to ``AsyncAgent`` for
146
146
  structured-output parsing. Ignored for the coding-agent
147
147
  backend.
148
- options: Driver options merged into the underlying agent (e.g.
149
- ``{"max_tokens": 8000, "timeout": 600}``).
148
+ options: Driver options forwarded to the underlying agent's
149
+ ``options`` kwarg (driver-level settings like
150
+ ``{"max_tokens": 8000, "timeout": 600}``). Distinct from
151
+ ``agent_options`` below, which targets the agent constructor
152
+ itself.
153
+ agent_options: Extra kwargs spread into ``AsyncAgent.__init__``
154
+ when ``enable_planning=False``. Use this for budget controls
155
+ and other agent-level settings the Assistant doesn't expose
156
+ as first-class fields, e.g.
157
+ ``{"max_iterations": 5, "max_cost": 0.50,
158
+ "budget_policy": "hard_stop",
159
+ "fallback_models": ["openai/gpt-4o-mini"]}``.
150
160
  coding_agent_options: Extra kwargs forwarded to
151
161
  ``run_coding_agent`` / ``astream_coding_agent`` (e.g.
152
162
  ``approval_mode``, ``cwd``, ``timeout``).
163
+ deep_agent_options: Extra kwargs spread into
164
+ ``AsyncDeepAgent.__init__`` when ``enable_planning=True``
165
+ (e.g. ``{"enable_vfs": False, "enable_summarization": False,
166
+ "max_iterations": 30}``).
153
167
  """
154
168
 
155
169
  name: str
156
170
  persona: Persona
157
171
  skills: tuple[SkillInfo, ...] = ()
158
- tools: tuple[Callable[..., Any], ...] = ()
172
+ # Either a tuple of Python callables OR a ToolRegistry — both are
173
+ # accepted by the underlying AsyncAgent.
174
+ tools: Any = ()
159
175
  model: str | None = None
160
176
  coding_agent: str | None = None
161
177
  description: str = ""
162
178
  variables: dict[str, Any] = dataclasses.field(default_factory=dict)
163
179
  enable_planning: bool = False
164
180
  output_type: Any = None
181
+ output_key: str | None = None
165
182
  options: dict[str, Any] = dataclasses.field(default_factory=dict)
166
183
  coding_agent_options: dict[str, Any] = dataclasses.field(default_factory=dict)
184
+ # Extra kwargs forwarded to AsyncAgent.__init__ when enable_planning is
185
+ # False (e.g. {"max_iterations": 5, "max_cost": 0.50,
186
+ # "budget_policy": "hard_stop", "fallback_models": ["openai/gpt-4o-mini"]}).
187
+ # Anything AsyncAgent accepts works here — see its signature for the
188
+ # full list (max_tokens, persistent_conversation, output_key, ...).
189
+ agent_options: dict[str, Any] = dataclasses.field(default_factory=dict)
190
+ # Extra kwargs forwarded to AsyncDeepAgent when enable_planning=True
191
+ # (e.g. {"enable_vfs": False, "enable_summarization": False}).
192
+ deep_agent_options: dict[str, Any] = dataclasses.field(default_factory=dict)
167
193
 
168
194
  # ----- construction --------------------------------------------------
169
195
 
170
196
  def __post_init__(self) -> None:
171
- # Normalise iterable args to immutable tuples so the dataclass
172
- # stays hashable + frozen-friendly.
197
+ # Normalise skills to an immutable tuple. Tools may be either a
198
+ # tuple of callables OR a ToolRegistry — both are passed
199
+ # through to AsyncAgent unchanged.
173
200
  if not isinstance(self.skills, tuple):
174
201
  object.__setattr__(self, "skills", tuple(self.skills))
175
- if not isinstance(self.tools, tuple):
202
+ if isinstance(self.tools, (list, set)):
176
203
  object.__setattr__(self, "tools", tuple(self.tools))
177
204
 
178
205
  if bool(self.model) == bool(self.coding_agent):
@@ -183,8 +210,7 @@ class Assistant:
183
210
  )
184
211
  if self.enable_planning and not self.model:
185
212
  raise ValueError(
186
- "enable_planning=True only applies to the LLM backend "
187
- "(set `model=...`, not `coding_agent=...`)."
213
+ "enable_planning=True only applies to the LLM backend (set `model=...`, not `coding_agent=...`)."
188
214
  )
189
215
 
190
216
  # ----- composition ---------------------------------------------------
@@ -204,10 +230,7 @@ class Assistant:
204
230
  persona = self.persona
205
231
 
206
232
  for skill in self.skills:
207
- block = (
208
- f"## Skill: {skill.name}\n"
209
- f"{skill.description}\n\n{skill.instructions}".rstrip()
210
- )
233
+ block = f"## Skill: {skill.name}\n{skill.description}\n\n{skill.instructions}".rstrip()
211
234
  persona = persona.extend(block)
212
235
 
213
236
  # Push merged variables back so render() (called by AsyncAgent)
@@ -275,19 +298,52 @@ class Assistant:
275
298
 
276
299
  # ----- LLM backend ---------------------------------------------------
277
300
 
301
+ def build_async_agent(self, **vars: Any) -> Any:
302
+ """Construct the underlying ``AsyncAgent`` (or ``AsyncDeepAgent``).
303
+
304
+ Use this when you want the Assistant as a *configuration* bundle
305
+ (persona + skills + tools + model + options) but need to drive
306
+ the underlying agent yourself — through a group, a streaming
307
+ callback machinery, or any other orchestration layer that
308
+ operates on :class:`AsyncAgent` directly.
309
+
310
+ Args:
311
+ **vars: Per-call template variables merged into the persona
312
+ before rendering. Equivalent to the per-call kwargs of
313
+ :meth:`arun` / :meth:`astream`, but applied at
314
+ construction time.
315
+
316
+ Returns:
317
+ An :class:`AsyncAgent` when ``enable_planning=False``,
318
+ otherwise an :class:`AsyncDeepAgent`.
319
+
320
+ Raises:
321
+ ValueError: When this Assistant is configured with a
322
+ ``coding_agent`` backend (it shells out to a CLI and has
323
+ no in-process agent to expose).
324
+ """
325
+ if self.coding_agent:
326
+ raise ValueError(
327
+ "build_async_agent() is only available for the LLM backend; "
328
+ f"this Assistant uses coding_agent={self.coding_agent!r}."
329
+ )
330
+ return self._build_async_agent(call_vars=vars)
331
+
278
332
  def _build_async_agent(self, *, call_vars: dict[str, Any]) -> Any:
279
333
  persona = self._composed_persona(call_vars)
334
+ tools_arg = self._tools_for_agent()
280
335
  if self.enable_planning:
281
336
  from .async_deep_agent import AsyncDeepAgent
282
337
 
283
338
  return AsyncDeepAgent(
284
339
  self.model or "",
285
340
  system_prompt=persona,
286
- tools=list(self.tools) or None,
341
+ tools=tools_arg,
287
342
  name=self.name,
288
343
  description=self.description,
289
344
  enable_planning=True,
290
345
  options=dict(self.options) or None,
346
+ **dict(self.deep_agent_options),
291
347
  )
292
348
 
293
349
  from .async_agent import AsyncAgent
@@ -295,13 +351,30 @@ class Assistant:
295
351
  return AsyncAgent(
296
352
  self.model or "",
297
353
  system_prompt=persona,
298
- tools=list(self.tools) or None,
354
+ tools=tools_arg,
299
355
  output_type=self.output_type,
356
+ output_key=self.output_key,
300
357
  name=self.name,
301
358
  description=self.description,
302
359
  options=dict(self.options) or None,
360
+ **dict(self.agent_options),
303
361
  )
304
362
 
363
+ def _tools_for_agent(self) -> Any:
364
+ """Coerce ``self.tools`` into the shape ``AsyncAgent`` expects.
365
+
366
+ Returns ``None`` when nothing is configured, the underlying
367
+ ``ToolRegistry`` when one was passed in directly, or a list of
368
+ callables otherwise.
369
+ """
370
+ if not self.tools:
371
+ return None
372
+ # Tuples / lists of callables → list (AsyncAgent expects a list).
373
+ if isinstance(self.tools, tuple):
374
+ return list(self.tools) or None
375
+ # Any other object (e.g. ToolRegistry) is passed through verbatim.
376
+ return self.tools
377
+
305
378
  async def _run_llm(
306
379
  self,
307
380
  prompt: str,
@@ -429,9 +502,7 @@ def clear_assistant_registry() -> None:
429
502
  def _from_registry(cls: type[Assistant], name: str) -> Assistant:
430
503
  found = get_assistant(name)
431
504
  if found is None:
432
- raise KeyError(
433
- f"No Assistant registered as {name!r}. Known: {get_assistant_names()}"
434
- )
505
+ raise KeyError(f"No Assistant registered as {name!r}. Known: {get_assistant_names()}")
435
506
  return found
436
507
 
437
508
 
@@ -50,8 +50,8 @@ from __future__ import annotations
50
50
 
51
51
  import dataclasses
52
52
  import logging
53
- from collections.abc import Callable
54
- from typing import Any, Protocol, runtime_checkable
53
+ from collections.abc import AsyncIterator, Callable
54
+ from typing import Any, Literal, Protocol, runtime_checkable
55
55
 
56
56
  logger = logging.getLogger("prompture.review_loop")
57
57
 
@@ -96,6 +96,53 @@ class ReviewLoopIteration:
96
96
  review_result: Any = None
97
97
 
98
98
 
99
+ ReviewLoopEventType = Literal[
100
+ "iteration_started",
101
+ "coder_done",
102
+ "reviewer_done",
103
+ "approved",
104
+ "rejected",
105
+ "done",
106
+ ]
107
+
108
+
109
+ @dataclasses.dataclass(frozen=True)
110
+ class ReviewLoopEvent:
111
+ """Event yielded by :meth:`AsyncReviewLoop.astream`.
112
+
113
+ Field meaning per ``type``:
114
+
115
+ * ``iteration_started`` — emitted before each coder run. ``index``
116
+ is the 0-based iteration number; ``prompt`` is the exact text the
117
+ coder will receive (for the first iteration this is the user
118
+ prompt; for later iterations it is ``feedback_prompt(...)``
119
+ output).
120
+ * ``coder_done`` — coder finished. ``code_output`` populated;
121
+ ``code_result`` carries the raw coder return value (e.g.
122
+ :class:`AssistantResult` or :class:`AgentResult`) for backend-
123
+ specific fields like cost.
124
+ * ``reviewer_done`` — reviewer finished. ``review_output`` +
125
+ ``review_result`` populated; ``approved`` reflects the
126
+ ``approve_when`` verdict for this iteration.
127
+ * ``approved`` — terminal: the loop is about to exit because the
128
+ latest iteration was approved.
129
+ * ``rejected`` — terminal: the loop is about to exit because
130
+ ``max_iters`` was hit without approval.
131
+ * ``done`` — emitted last, always. ``result`` carries the same
132
+ :class:`ReviewLoopResult` that :meth:`arun` would return.
133
+ """
134
+
135
+ type: ReviewLoopEventType
136
+ index: int = -1 # iteration index; -1 for the terminal "done" event
137
+ prompt: str = "" # only on iteration_started
138
+ code_output: str = "" # populated from coder_done onwards
139
+ review_output: str = "" # populated from reviewer_done onwards
140
+ approved: bool = False
141
+ code_result: Any = None
142
+ review_result: Any = None
143
+ result: Any = None # only on the final "done" event
144
+
145
+
99
146
  @dataclasses.dataclass(frozen=True)
100
147
  class ReviewLoopResult:
101
148
  """Final result returned by :meth:`AsyncReviewLoop.arun`."""
@@ -167,9 +214,7 @@ class AsyncReviewLoop:
167
214
  review_prompt: Callable[[str], str] = dataclasses.field(
168
215
  default=lambda code: f"Review this work and give feedback:\n\n{code}"
169
216
  )
170
- feedback_prompt: Callable[[str, ReviewLoopIteration], str] = (
171
- _default_feedback_prompt
172
- )
217
+ feedback_prompt: Callable[[str, ReviewLoopIteration], str] = _default_feedback_prompt
173
218
 
174
219
  def __post_init__(self) -> None:
175
220
  if self.max_iters < 1:
@@ -182,7 +227,10 @@ class AsyncReviewLoop:
182
227
  coder_kwargs: dict[str, Any] | None = None,
183
228
  reviewer_kwargs: dict[str, Any] | None = None,
184
229
  ) -> ReviewLoopResult:
185
- """Run the loop to completion.
230
+ """Run the loop to completion and return the final result.
231
+
232
+ Equivalent to consuming :meth:`astream` and returning its final
233
+ ``done`` event's ``result``.
186
234
 
187
235
  Args:
188
236
  prompt: The initial task for the coder.
@@ -191,21 +239,69 @@ class AsyncReviewLoop:
191
239
  reviewer_kwargs: Extra kwargs forwarded to every
192
240
  ``reviewer.arun`` call.
193
241
  """
242
+ final: ReviewLoopResult | None = None
243
+ async for event in self.astream(
244
+ prompt,
245
+ coder_kwargs=coder_kwargs,
246
+ reviewer_kwargs=reviewer_kwargs,
247
+ ):
248
+ if event.type == "done":
249
+ final = event.result
250
+ assert final is not None # astream always emits a done event
251
+ return final
252
+
253
+ async def astream(
254
+ self,
255
+ prompt: str,
256
+ *,
257
+ coder_kwargs: dict[str, Any] | None = None,
258
+ reviewer_kwargs: dict[str, Any] | None = None,
259
+ ) -> AsyncIterator[ReviewLoopEvent]:
260
+ """Run the loop and yield :class:`ReviewLoopEvent` events live.
261
+
262
+ The sequence per iteration is:
263
+ ``iteration_started`` → ``coder_done`` → ``reviewer_done``.
264
+ After the final iteration, ``approved`` or ``rejected`` fires,
265
+ followed by a single ``done`` event carrying the full
266
+ :class:`ReviewLoopResult`.
267
+
268
+ UI consumers can re-emit each event onto their own transport
269
+ (WebSocket, SSE, log line) without buffering the whole run.
270
+ """
194
271
  coder_kwargs = coder_kwargs or {}
195
272
  reviewer_kwargs = reviewer_kwargs or {}
196
273
  history: list[ReviewLoopIteration] = []
197
274
  current_prompt = prompt
198
275
 
199
276
  for i in range(self.max_iters):
277
+ yield ReviewLoopEvent(
278
+ type="iteration_started",
279
+ index=i,
280
+ prompt=current_prompt,
281
+ )
282
+
200
283
  code_result = await self.coder.arun(current_prompt, **coder_kwargs)
201
284
  code_text = getattr(code_result, "output", "") or ""
202
-
203
- review_result = await self.reviewer.arun(
204
- self.review_prompt(code_text), **reviewer_kwargs
285
+ yield ReviewLoopEvent(
286
+ type="coder_done",
287
+ index=i,
288
+ code_output=code_text,
289
+ code_result=code_result,
205
290
  )
206
- review_text = getattr(review_result, "output", "") or ""
207
291
 
292
+ review_result = await self.reviewer.arun(self.review_prompt(code_text), **reviewer_kwargs)
293
+ review_text = getattr(review_result, "output", "") or ""
208
294
  approved = bool(self.approve_when(review_result))
295
+ yield ReviewLoopEvent(
296
+ type="reviewer_done",
297
+ index=i,
298
+ code_output=code_text,
299
+ review_output=review_text,
300
+ approved=approved,
301
+ code_result=code_result,
302
+ review_result=review_result,
303
+ )
304
+
209
305
  iteration = ReviewLoopIteration(
210
306
  index=i,
211
307
  code_output=code_text,
@@ -227,16 +323,38 @@ class AsyncReviewLoop:
227
323
  current_prompt = self.feedback_prompt(prompt, iteration)
228
324
 
229
325
  last = history[-1]
230
- return ReviewLoopResult(
326
+ result = ReviewLoopResult(
231
327
  output=last.code_output,
232
328
  approved=last.approved,
233
329
  iterations=len(history),
234
330
  history=tuple(history),
235
331
  )
236
332
 
333
+ yield ReviewLoopEvent(
334
+ type="approved" if result.approved else "rejected",
335
+ index=last.index,
336
+ code_output=result.output,
337
+ review_output=last.review_output,
338
+ approved=result.approved,
339
+ code_result=last.code_result,
340
+ review_result=last.review_result,
341
+ )
342
+ yield ReviewLoopEvent(
343
+ type="done",
344
+ index=last.index,
345
+ code_output=result.output,
346
+ review_output=last.review_output,
347
+ approved=result.approved,
348
+ code_result=last.code_result,
349
+ review_result=last.review_result,
350
+ result=result,
351
+ )
352
+
237
353
 
238
354
  __all__ = [
239
355
  "AsyncReviewLoop",
356
+ "ReviewLoopEvent",
357
+ "ReviewLoopEventType",
240
358
  "ReviewLoopIteration",
241
359
  "ReviewLoopResult",
242
360
  ]
@@ -251,10 +251,10 @@ _QUESTION_PHRASE_RE = re.compile(
251
251
 
252
252
  _CHOICE_LINE_RE = re.compile(
253
253
  r"^\s*(?:"
254
- r"(?P<num>\d+)[.\):]\s+|" # 1. foo 1) foo 1: foo
255
- r"[-*•]\s+|" # - foo * foo • foo
256
- r"\([a-zA-Z]\)\s+|" # (a) foo
257
- r"[a-zA-Z][.\)]\s+" # a) foo a. foo
254
+ r"(?P<num>\d+)[.\):]\s+|" # 1. foo 1) foo 1: foo
255
+ r"[-*•]\s+|" # - foo * foo • foo
256
+ r"\([a-zA-Z]\)\s+|" # (a) foo
257
+ r"[a-zA-Z][.\)]\s+" # a) foo a. foo
258
258
  r")(?P<body>.+\S)\s*$"
259
259
  )
260
260
 
@@ -55,6 +55,7 @@ def _record_into_session(
55
55
  }
56
56
  session.record(response_info)
57
57
 
58
+
58
59
  CodingAgentId = str
59
60
  ApprovalMode = Literal["default", "auto", "yolo"]
60
61
  OutputFormat = Literal["text", "json"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.1.3.dev3
3
+ Version: 1.1.4.dev2
4
4
  Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
5
5
  Author-email: Juan Denis <juan@vene.co>
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes