prompture 1.1.4.dev2__tar.gz → 1.1.5.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/PKG-INFO +69 -4
  2. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/README.md +67 -2
  3. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/dev.ps1 +10 -0
  4. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/__init__.py +70 -0
  5. prompture-1.1.5.dev1/prompture/_internal/__init__.py +5 -0
  6. prompture-1.1.5.dev1/prompture/_internal/json_encoder.py +118 -0
  7. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/_version.py +2 -2
  8. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/__init__.py +26 -2
  9. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/agent.py +180 -2
  10. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/async_agent.py +170 -4
  11. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/async_conversation.py +158 -5
  12. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/conversation.py +256 -5
  13. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/summarizer.py +2 -1
  14. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep_state.py +2 -2
  15. prompture-1.1.5.dev1/prompture/agents/live_events.py +155 -0
  16. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/tools_schema.py +2 -1
  17. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/types.py +16 -14
  18. prompture-1.1.5.dev1/prompture/checkpoints/__init__.py +46 -0
  19. prompture-1.1.5.dev1/prompture/checkpoints/core.py +295 -0
  20. prompture-1.1.5.dev1/prompture/checkpoints/stores.py +299 -0
  21. prompture-1.1.5.dev1/prompture/checkpoints/types.py +108 -0
  22. prompture-1.1.5.dev1/prompture/citations/__init__.py +44 -0
  23. prompture-1.1.5.dev1/prompture/citations/core.py +294 -0
  24. prompture-1.1.5.dev1/prompture/citations/types.py +148 -0
  25. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/server.py +81 -54
  26. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/dataset/__init__.py +33 -0
  27. prompture-1.1.5.dev1/prompture/dataset/dedup.py +340 -0
  28. prompture-1.1.5.dev1/prompture/dataset/evol.py +325 -0
  29. prompture-1.1.5.dev1/prompture/dataset/filters.py +266 -0
  30. prompture-1.1.5.dev1/prompture/dataset/seed.py +286 -0
  31. prompture-1.1.5.dev1/prompture/dataset/synth.py +421 -0
  32. prompture-1.1.5.dev1/prompture/drivers/_openai_compat.py +139 -0
  33. prompture-1.1.5.dev1/prompture/drivers/_openai_compat_stream.py +562 -0
  34. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/airllm_driver.py +3 -3
  35. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/assemblyai_stt_driver.py +1 -1
  36. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_assemblyai_stt_driver.py +1 -1
  37. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_azure_driver.py +2 -2
  38. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_base.py +59 -0
  39. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cachibot_driver.py +17 -0
  40. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cartesia_tts_driver.py +1 -1
  41. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_claude_driver.py +209 -18
  42. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_deepgram_stt_driver.py +1 -1
  43. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_deepgram_tts_driver.py +1 -1
  44. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_elevenlabs_stt_driver.py +1 -1
  45. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_elevenlabs_tts_driver.py +1 -1
  46. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_google_driver.py +22 -6
  47. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_google_vertexai_driver.py +2 -2
  48. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_grok_driver.py +18 -0
  49. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_grok_img_gen_driver.py +1 -1
  50. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_groq_driver.py +41 -7
  51. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_lmstudio_driver.py +10 -0
  52. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mistral_driver.py +18 -0
  53. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_modelscope_driver.py +17 -0
  54. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_moonshot_driver.py +18 -0
  55. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_ollama_driver.py +7 -3
  56. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_compatible_driver.py +10 -0
  57. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_driver.py +51 -7
  58. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_embedding_driver.py +1 -1
  59. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_img_gen_driver.py +1 -1
  60. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_stt_driver.py +1 -1
  61. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_tts_driver.py +1 -1
  62. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openrouter_driver.py +28 -0
  63. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_zai_driver.py +17 -0
  64. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/azure_config.py +2 -1
  65. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/azure_driver.py +2 -2
  66. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/base.py +65 -0
  67. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cachibot_driver.py +17 -1
  68. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cartesia_tts_driver.py +1 -1
  69. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/claude_driver.py +282 -12
  70. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cohere_driver.py +27 -7
  71. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/deepgram_stt_driver.py +1 -1
  72. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/deepgram_tts_driver.py +1 -1
  73. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/driver_registry.py +3 -9
  74. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/elevenlabs_stt_driver.py +1 -1
  75. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/elevenlabs_tts_driver.py +1 -1
  76. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/google_driver.py +26 -10
  77. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/google_vertexai_driver.py +2 -2
  78. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/grok_driver.py +17 -0
  79. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/grok_img_gen_driver.py +1 -1
  80. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/groq_driver.py +41 -7
  81. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/lmstudio_driver.py +15 -3
  82. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mistral_driver.py +44 -7
  83. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/modelscope_driver.py +16 -0
  84. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/moonshot_driver.py +17 -0
  85. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/ollama_driver.py +18 -9
  86. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_compatible_driver.py +12 -0
  87. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_driver.py +52 -7
  88. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_embedding_driver.py +1 -1
  89. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_img_gen_driver.py +1 -1
  90. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_stt_driver.py +1 -1
  91. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_tts_driver.py +1 -1
  92. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openrouter_driver.py +30 -0
  93. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/provider_descriptors.py +2 -1
  94. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/zai_driver.py +16 -0
  95. prompture-1.1.5.dev1/prompture/eval/__init__.py +47 -0
  96. prompture-1.1.5.dev1/prompture/eval/base.py +170 -0
  97. prompture-1.1.5.dev1/prompture/eval/faithfulness.py +281 -0
  98. prompture-1.1.5.dev1/prompture/eval/judge.py +359 -0
  99. prompture-1.1.5.dev1/prompture/eval/pairwise.py +245 -0
  100. prompture-1.1.5.dev1/prompture/eval/self_consistency.py +181 -0
  101. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/async_core.py +21 -37
  102. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/core.py +185 -33
  103. prompture-1.1.5.dev1/prompture/extraction/few_shot.py +309 -0
  104. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/fields.py +5 -5
  105. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/reasoning.py +3 -3
  106. prompture-1.1.5.dev1/prompture/extraction/streaming.py +373 -0
  107. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/tools.py +47 -19
  108. {prompture-1.1.4.dev2/prompture/integrations → prompture-1.1.5.dev1/prompture/extraction}/tukuy_bridge.py +2 -1
  109. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/consensus.py +3 -3
  110. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/types.py +3 -1
  111. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/budget.py +5 -4
  112. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/cache.py +5 -3
  113. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/callbacks.py +2 -1
  114. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/logging.py +3 -1
  115. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/model_rates.py +34 -34
  116. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/settings.py +79 -81
  117. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/tracker.py +5 -5
  118. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/__init__.py +1 -1
  119. {prompture-1.1.4.dev2/prompture/extraction → prompture-1.1.5.dev1/prompture/integrations}/tukuy_bridge.py +2 -1
  120. prompture-1.1.5.dev1/prompture/kg/__init__.py +43 -0
  121. prompture-1.1.5.dev1/prompture/kg/core.py +367 -0
  122. prompture-1.1.5.dev1/prompture/kg/stores.py +469 -0
  123. prompture-1.1.5.dev1/prompture/kg/types.py +162 -0
  124. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/history.py +2 -1
  125. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/pipeline.py +6 -6
  126. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/__init__.py +21 -0
  127. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/chunker_registry.py +2 -1
  128. prompture-1.1.5.dev1/prompture/rag/chunkers/contextual.py +261 -0
  129. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/semantic.py +1 -1
  130. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loader_registry.py +4 -4
  131. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/pipeline.py +58 -2
  132. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/__init__.py +33 -1
  133. prompture-1.1.5.dev1/prompture/rag/retrievers/_fusion.py +70 -0
  134. prompture-1.1.5.dev1/prompture/rag/retrievers/hyde.py +116 -0
  135. prompture-1.1.5.dev1/prompture/rag/retrievers/multi_query.py +175 -0
  136. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/retriever_registry.py +2 -1
  137. prompture-1.1.5.dev1/prompture/rag/retrievers/step_back.py +141 -0
  138. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/base.py +1 -1
  139. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/chroma.py +1 -1
  140. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/faiss.py +2 -2
  141. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/pgvector.py +1 -1
  142. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/pinecone.py +1 -1
  143. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/qdrant.py +1 -1
  144. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/vectorstore_registry.py +2 -1
  145. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/weaviate.py +1 -1
  146. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/evaluator.py +1 -1
  147. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/security/redaction.py +2 -2
  148. prompture-1.1.5.dev1/prompture/session_memory/__init__.py +42 -0
  149. prompture-1.1.5.dev1/prompture/session_memory/core.py +317 -0
  150. prompture-1.1.5.dev1/prompture/session_memory/stores.py +386 -0
  151. prompture-1.1.5.dev1/prompture/session_memory/types.py +87 -0
  152. prompture-1.1.5.dev1/prompture/swarm/__init__.py +102 -0
  153. prompture-1.1.5.dev1/prompture/swarm/environment.py +245 -0
  154. prompture-1.1.5.dev1/prompture/swarm/memory.py +164 -0
  155. prompture-1.1.5.dev1/prompture/swarm/scheduler.py +206 -0
  156. prompture-1.1.5.dev1/prompture/swarm/swarm.py +317 -0
  157. prompture-1.1.5.dev1/prompture/swarm/swarm_agent.py +236 -0
  158. prompture-1.1.5.dev1/prompture/swarm/types.py +258 -0
  159. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/testing/driver_contract.py +1 -0
  160. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/tools/web_search.py +2 -1
  161. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/PKG-INFO +69 -4
  162. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/SOURCES.txt +44 -0
  163. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/pyproject.toml +2 -2
  164. prompture-1.1.4.dev2/prompture/dataset/synth.py +0 -283
  165. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-driver/SKILL.md +0 -0
  166. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-driver/references/driver-template.md +0 -0
  167. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-example/SKILL.md +0 -0
  168. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-field/SKILL.md +0 -0
  169. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-persona/SKILL.md +0 -0
  170. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-test/SKILL.md +0 -0
  171. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-tool/SKILL.md +0 -0
  172. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/create-pr/SKILL.md +0 -0
  173. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/run-tests/SKILL.md +0 -0
  174. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  175. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/update-pricing/SKILL.md +0 -0
  176. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.env.copy +0 -0
  177. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/FUNDING.yml +0 -0
  178. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  179. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  180. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  181. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  182. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/scripts/update_docs_version.py +0 -0
  183. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/scripts/update_wrapper_version.py +0 -0
  184. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/dev.yml +0 -0
  185. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/documentation.yml +0 -0
  186. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/pricing-freshness.yml +0 -0
  187. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/publish.yml +0 -0
  188. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/security.yml +0 -0
  189. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.safety-project.ini +0 -0
  190. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/AGENTS.md +0 -0
  191. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/BREAKING_CHANGES.md +0 -0
  192. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/CLAUDE.md +0 -0
  193. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/CONTRIBUTING.md +0 -0
  194. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/LICENSE +0 -0
  195. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/MANIFEST.in +0 -0
  196. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/ROADMAP.md +0 -0
  197. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/SECURITY.md +0 -0
  198. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/dev.sh +0 -0
  199. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/mypy_errors.txt +0 -0
  200. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/README.md +0 -0
  201. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/README.md +0 -0
  202. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  203. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/pyproject.toml +0 -0
  204. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/test.py +0 -0
  205. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/README.md +0 -0
  206. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  207. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/pyproject.toml +0 -0
  208. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/test.py +0 -0
  209. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/assistant.py +0 -0
  210. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/async_deep_agent.py +0 -0
  211. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/__init__.py +0 -0
  212. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/planner.py +0 -0
  213. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/subagents.py +0 -0
  214. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/vfs.py +0 -0
  215. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep_agent.py +0 -0
  216. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep_prompts.py +0 -0
  217. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/persona.py +0 -0
  218. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/review_loop.py +0 -0
  219. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/simulated_tools.py +0 -0
  220. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/skills.py +0 -0
  221. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/aio/__init__.py +0 -0
  222. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/bridges/__init__.py +0 -0
  223. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/bridges/tukuy_backend.py +0 -0
  224. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/__init__.py +0 -0
  225. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/cli.py +0 -0
  226. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/formatters.py +0 -0
  227. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/runner.py +0 -0
  228. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/dataset/formats.py +0 -0
  229. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/dataset/schemas.py +0 -0
  230. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/__init__.py +0 -0
  231. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_airllm_driver.py +0 -0
  232. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_bedrock_driver.py +0 -0
  233. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  234. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cohere_driver.py +0 -0
  235. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  236. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  237. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_deepseek_driver.py +0 -0
  238. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_embedding_base.py +0 -0
  239. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  240. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  241. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  242. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  243. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_hugging_driver.py +0 -0
  244. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  245. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_img_gen_base.py +0 -0
  246. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  247. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  248. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  249. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  250. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_local_http_driver.py +0 -0
  251. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  252. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_minimax_driver.py +0 -0
  253. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  254. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  255. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  256. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  257. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  258. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  259. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  260. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  261. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_registry.py +0 -0
  262. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  263. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_runway_tts_driver.py +0 -0
  264. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  265. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  266. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_stt_base.py +0 -0
  267. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_tts_base.py +0 -0
  268. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_video_gen_base.py +0 -0
  269. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  270. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  271. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/audio_registry.py +0 -0
  272. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/bedrock_driver.py +0 -0
  273. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  274. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cohere_embedding_driver.py +0 -0
  275. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cohere_rerank_driver.py +0 -0
  276. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/deepseek_driver.py +0 -0
  277. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/embedding_base.py +0 -0
  278. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/embedding_registry.py +0 -0
  279. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/fal_img_gen_driver.py +0 -0
  280. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/fal_video_gen_driver.py +0 -0
  281. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/google_img_gen_driver.py +0 -0
  282. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/grok_video_gen_driver.py +0 -0
  283. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/hugging_driver.py +0 -0
  284. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  285. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/img_gen_base.py +0 -0
  286. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/img_gen_registry.py +0 -0
  287. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/jina_embedding_driver.py +0 -0
  288. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/jina_rerank_driver.py +0 -0
  289. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/kling_img_gen_driver.py +0 -0
  290. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/kling_video_gen_driver.py +0 -0
  291. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/local_http_driver.py +0 -0
  292. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/luma_video_gen_driver.py +0 -0
  293. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/minimax_driver.py +0 -0
  294. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  295. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mistral_moderation_driver.py +0 -0
  296. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/moderation_base.py +0 -0
  297. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/moderation_registry.py +0 -0
  298. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  299. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  300. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/nomic_embedding_driver.py +0 -0
  301. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/ollama_embedding_driver.py +0 -0
  302. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_moderation_driver.py +0 -0
  303. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/pika_video_gen_driver.py +0 -0
  304. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/registry.py +0 -0
  305. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/rerank_base.py +0 -0
  306. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/rerank_registry.py +0 -0
  307. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  308. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_capabilities.py +0 -0
  309. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_img_gen_driver.py +0 -0
  310. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_tts_driver.py +0 -0
  311. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_video_gen_driver.py +0 -0
  312. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/stability_img_gen_driver.py +0 -0
  313. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/stt_base.py +0 -0
  314. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/tts_base.py +0 -0
  315. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/video_gen_base.py +0 -0
  316. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/video_gen_registry.py +0 -0
  317. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/vision_helpers.py +0 -0
  318. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/voyage_embedding_driver.py +0 -0
  319. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/voyage_rerank_driver.py +0 -0
  320. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/exceptions.py +0 -0
  321. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/__init__.py +0 -0
  322. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/code_extraction.py +0 -0
  323. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/strategy.py +0 -0
  324. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/validator.py +0 -0
  325. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/__init__.py +0 -0
  326. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/async_groups.py +0 -0
  327. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/debate.py +0 -0
  328. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/groups.py +0 -0
  329. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/__init__.py +0 -0
  330. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/capabilities.py +0 -0
  331. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/coding_agent_events.py +0 -0
  332. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/coding_agent_specs.py +0 -0
  333. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/coding_agents.py +0 -0
  334. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/cost_mixin.py +0 -0
  335. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/discovery.py +0 -0
  336. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/ledger.py +0 -0
  337. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/pricing.py +0 -0
  338. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/provider_env.py +0 -0
  339. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/anthropic.json +0 -0
  340. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/azure.json +0 -0
  341. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/bedrock.json +0 -0
  342. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/cerebras.json +0 -0
  343. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/cohere.json +0 -0
  344. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/deepinfra.json +0 -0
  345. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/deepseek.json +0 -0
  346. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/fireworks.json +0 -0
  347. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/google.json +0 -0
  348. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/google_vertexai.json +0 -0
  349. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/groq.json +0 -0
  350. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/jina.json +0 -0
  351. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/mistral.json +0 -0
  352. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/mixedbread.json +0 -0
  353. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/moonshot.json +0 -0
  354. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/nomic.json +0 -0
  355. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/nvidia.json +0 -0
  356. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/openai.json +0 -0
  357. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/openrouter.json +0 -0
  358. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/perplexity.json +0 -0
  359. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/sambanova.json +0 -0
  360. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/siliconflow.json +0 -0
  361. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/together.json +0 -0
  362. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/voyage.json +0 -0
  363. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/xai.json +0 -0
  364. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/session.py +0 -0
  365. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/tukuy_backend.py +0 -0
  366. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/__init__.py +0 -0
  367. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/chunking.py +0 -0
  368. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/detect.py +0 -0
  369. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/document.py +0 -0
  370. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/base.py +0 -0
  371. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/csv_parser.py +0 -0
  372. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/docx.py +0 -0
  373. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/html.py +0 -0
  374. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/markdown.py +0 -0
  375. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/pdf.py +0 -0
  376. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/xlsx.py +0 -0
  377. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/integrations/__init__.py +0 -0
  378. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/__init__.py +0 -0
  379. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/audio.py +0 -0
  380. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/image.py +0 -0
  381. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/video.py +0 -0
  382. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/01-why-prompture.md +0 -0
  383. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/02-installation.md +0 -0
  384. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/03-quickstart.md +0 -0
  385. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/04-toon-input.md +0 -0
  386. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/05-test-harness.md +0 -0
  387. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/06-stability.md +0 -0
  388. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/07-migration.md +0 -0
  389. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/__init__.py +0 -0
  390. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/serialization.py +0 -0
  391. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/store.py +0 -0
  392. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/__init__.py +0 -0
  393. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/resolver.py +0 -0
  394. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/routing.py +0 -0
  395. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/__init__.py +0 -0
  396. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/base.py +0 -0
  397. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/__init__.py +0 -0
  398. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/_aliases.py +0 -0
  399. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  400. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/audio_plugin.py +0 -0
  401. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  402. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  403. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/extras_plugin.py +0 -0
  404. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/google_plugin.py +0 -0
  405. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/image_plugin.py +0 -0
  406. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/local_plugin.py +0 -0
  407. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  408. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/openai_plugin.py +0 -0
  409. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/video_plugin.py +0 -0
  410. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/discovery.py +0 -0
  411. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/py.typed +0 -0
  412. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/__init__.py +0 -0
  413. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/base.py +0 -0
  414. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/character.py +0 -0
  415. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/markdown.py +0 -0
  416. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/recursive.py +0 -0
  417. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/token.py +0 -0
  418. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/documents.py +0 -0
  419. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/__init__.py +0 -0
  420. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/csv_loader.py +0 -0
  421. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/docx_loader.py +0 -0
  422. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/epub_loader.py +0 -0
  423. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/html_loader.py +0 -0
  424. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/json_loader.py +0 -0
  425. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/markdown_loader.py +0 -0
  426. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/pdf_loader.py +0 -0
  427. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/text_loader.py +0 -0
  428. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/xlsx_loader.py +0 -0
  429. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/base.py +0 -0
  430. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/hybrid.py +0 -0
  431. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/mmr.py +0 -0
  432. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/similarity.py +0 -0
  433. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/__init__.py +0 -0
  434. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/__init__.py +0 -0
  435. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/detector.py +0 -0
  436. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/markers.py +0 -0
  437. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/__init__.py +0 -0
  438. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/generator.py +0 -0
  439. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  440. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/README.md.j2 +0 -0
  441. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/config.py.j2 +0 -0
  442. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/env.example.j2 +0 -0
  443. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/main.py.j2 +0 -0
  444. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/models.py.j2 +0 -0
  445. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  446. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/security/__init__.py +0 -0
  447. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/security/injection.py +0 -0
  448. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/testing/__init__.py +0 -0
  449. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/tools/__init__.py +0 -0
  450. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/tools/code_exec.py +0 -0
  451. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/dependency_links.txt +0 -0
  452. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/entry_points.txt +0 -0
  453. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/requires.txt +0 -0
  454. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/top_level.txt +0 -0
  455. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture_cost_tracking.md +0 -0
  456. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/requirements.txt +0 -0
  457. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/scripts/check_pricing_freshness.py +0 -0
  458. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/setup.cfg +0 -0
  459. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/specs/basic_extraction.json +0 -0
  460. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/specs/schema_validation.json +0 -0
  461. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/specs/strategy_comparison.json +0 -0
  462. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/test.py +0 -0
  463. {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/test_version_diagnosis.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.1.4.dev2
3
+ Version: 1.1.5.dev1
4
4
  Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
5
5
  Author-email: Juan Denis <juan@vene.co>
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/jhd3197/prompture
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.9
10
+ Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: click>=8.0
@@ -132,6 +132,18 @@ person = extract_with_model(Person, "Maria is 32, a developer in NYC.", model_na
132
132
  print(person.name) # Maria
133
133
  ```
134
134
 
135
+ > **First time?** Pick a provider and install its extra. The core package above
136
+ > is just the orchestration layer — provider SDKs are opt-in.
137
+ >
138
+ > | Use `provider/...` | Install | Auth env var |
139
+ > |---|---|---|
140
+ > | `openai/gpt-4`, `openai/gpt-4o-mini`, … | `pip install "prompture[openai]"` | `OPENAI_API_KEY` |
141
+ > | `claude/claude-sonnet-4-6`, … | `pip install "prompture[anthropic]"` | `CLAUDE_API_KEY` |
142
+ > | `google/gemini-1.5-pro`, … | `pip install "prompture[google]"` | `GOOGLE_API_KEY` |
143
+ > | `groq/llama-3.1-8b-instant`, … | `pip install "prompture[groq]"` | `GROQ_API_KEY` |
144
+ > | `ollama/llama3.1:8b`, … (local) | no extra needed | — (set `OLLAMA_HOST` if non-default) |
145
+ > | everything in one go | `pip install "prompture[all]"` | provider-specific |
146
+
135
147
  ## Key Features
136
148
 
137
149
  **Structured extraction**
@@ -951,6 +963,21 @@ print(result["usage"]) # token counts and cost
951
963
 
952
964
  Prompture picks how to obtain structured JSON based on each model's capabilities. The cascade is `provider_native` (built-in JSON mode / schema enforcement) → `tool_call` (encode the schema as a function definition and read it back from the tool call) → `prompted_repair` (prompt for JSON, repair malformed output via AI cleanup). Pass `strategy="auto"` (default) to let Prompture select per model, or pin a specific strategy via the `StructuredOutputStrategy` enum or its string value. The strategy used is recorded in the response so you can see which path each call took.
953
965
 
966
+ ### Constrained Decoding (vLLM / LMStudio / OpenRouter)
967
+
968
+ For any OpenAI-compatible driver — `OpenAICompatibleDriver`, `OpenRouterDriver`, `LMStudioDriver` (sync + async) — set `options={"guided_decoding": True}` to also ship vLLM-style `guided_json` fields alongside the standard `response_format`. That unlocks logit-level FSM-constrained sampling (100% schema validity at sample time) on backends that support it. Pin a specific backend with `"outlines"`, `"xgrammar"`, or `"lm-format-enforcer"`:
969
+
970
+ ```python
971
+ result = extract_with_model(
972
+ Person,
973
+ "Maria is 32, a developer in NYC.",
974
+ model_name="openai_compatible/local-vllm",
975
+ options={"guided_decoding": "xgrammar"}, # fast lattice FSM
976
+ )
977
+ ```
978
+
979
+ Unknown servers ignore the extra fields, so it's safe to leave on. An `options={"extra_body": {...}}` escape hatch mirrors the OpenAI SDK so you can also pass `min_p`, `repetition_penalty`, OpenRouter provider preferences, etc. See `examples/constrained_decoding_example.py`.
980
+
954
981
  ### Multi-Model Fallback
955
982
 
956
983
  Try a list of models in priority order, with full per-attempt accounting — every model tried (success, failure, or skipped) is recorded with its cost, tokens, duration, capabilities, and strategy. The first success wins; if all fail, an optional `fallback` Pydantic instance is returned instead of raising.
@@ -1067,8 +1094,8 @@ from prompture import Conversation
1067
1094
 
1068
1095
  conv = Conversation(model_name="openai/gpt-4")
1069
1096
  conv.add_message("system", "You are a helpful assistant.")
1070
- response = conv.send("What is the capital of France?")
1071
- follow_up = conv.send("What about Germany?") # retains context
1097
+ response = conv.ask("What is the capital of France?")
1098
+ follow_up = conv.ask("What about Germany?") # retains context
1072
1099
  ```
1073
1100
 
1074
1101
  ### Tool Use
@@ -1377,6 +1404,37 @@ if doc.found:
1377
1404
 
1378
1405
  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
1406
 
1407
+ ### Prompt Caching (Claude)
1408
+
1409
+ Anthropic prompt caching cuts input-token cost on cached prefixes to ~10% of
1410
+ the normal rate. Prompture turns it on by default for `ClaudeDriver` and
1411
+ `AsyncClaudeDriver` whenever the system prompt or tools bundle is large
1412
+ enough to benefit (≥4000 chars, roughly 1024 tokens — Anthropic's minimum
1413
+ cacheable block).
1414
+
1415
+ ```python
1416
+ from prompture import Conversation
1417
+
1418
+ # Caching is automatic. The first call writes the cache (~1.25x cost on the
1419
+ # cached portion); subsequent calls within 5 minutes hit it (~0.1x cost).
1420
+ conv = Conversation(model_name="claude/claude-sonnet-4-6", system_prompt=LONG_SYSTEM_PROMPT)
1421
+ conv.ask("First question") # cache_creation_input_tokens > 0
1422
+ conv.ask("Second question") # cache_read_input_tokens > 0
1423
+ ```
1424
+
1425
+ To inspect cache activity, read `cached_prompt_tokens` and
1426
+ `cache_creation_tokens` from the response meta. To disable caching for a
1427
+ specific call pass `options={"cache_prompt": False}`.
1428
+
1429
+ Tips:
1430
+ - Put stable content (persona, tools description, JSON schema) at the
1431
+ **start** of the system prompt; put per-call variables (user query,
1432
+ retrieved RAG context) in the message stream so they don't bust the cache.
1433
+ - Avoid `{{iteration}}` or other per-turn variables in Persona templates —
1434
+ they rotate the cache key every turn.
1435
+ - Block size below ~1024 tokens is silently dropped by Anthropic; below
1436
+ the threshold Prompture skips the `cache_control` marker to avoid noise.
1437
+
1380
1438
  ### Cost Pre-flight
1381
1439
 
1382
1440
  Forecast the cost of a call **before** making it. Accepts either text
@@ -1729,6 +1787,13 @@ request body are forwarded to the driver as schemas; if the model
1729
1787
  returns `tool_calls`, they appear in the response shape so the
1730
1788
  client can execute locally.
1731
1789
 
1790
+ > **Single-worker constraint:** the server keeps conversations and
1791
+ > rate-limit buckets in **per-process memory**. Run with
1792
+ > `uvicorn --workers 1` (the default) — multi-worker deployments will
1793
+ > partition state across processes, so a `conversation_id` created on
1794
+ > one worker can return 404 on another. A shared-state backend (Redis
1795
+ > / Postgres) is on the roadmap.
1796
+
1732
1797
  Selected flags:
1733
1798
 
1734
1799
  | Flag | Purpose |
@@ -29,6 +29,18 @@ person = extract_with_model(Person, "Maria is 32, a developer in NYC.", model_na
29
29
  print(person.name) # Maria
30
30
  ```
31
31
 
32
+ > **First time?** Pick a provider and install its extra. The core package above
33
+ > is just the orchestration layer — provider SDKs are opt-in.
34
+ >
35
+ > | Use `provider/...` | Install | Auth env var |
36
+ > |---|---|---|
37
+ > | `openai/gpt-4`, `openai/gpt-4o-mini`, … | `pip install "prompture[openai]"` | `OPENAI_API_KEY` |
38
+ > | `claude/claude-sonnet-4-6`, … | `pip install "prompture[anthropic]"` | `CLAUDE_API_KEY` |
39
+ > | `google/gemini-1.5-pro`, … | `pip install "prompture[google]"` | `GOOGLE_API_KEY` |
40
+ > | `groq/llama-3.1-8b-instant`, … | `pip install "prompture[groq]"` | `GROQ_API_KEY` |
41
+ > | `ollama/llama3.1:8b`, … (local) | no extra needed | — (set `OLLAMA_HOST` if non-default) |
42
+ > | everything in one go | `pip install "prompture[all]"` | provider-specific |
43
+
32
44
  ## Key Features
33
45
 
34
46
  **Structured extraction**
@@ -848,6 +860,21 @@ print(result["usage"]) # token counts and cost
848
860
 
849
861
  Prompture picks how to obtain structured JSON based on each model's capabilities. The cascade is `provider_native` (built-in JSON mode / schema enforcement) → `tool_call` (encode the schema as a function definition and read it back from the tool call) → `prompted_repair` (prompt for JSON, repair malformed output via AI cleanup). Pass `strategy="auto"` (default) to let Prompture select per model, or pin a specific strategy via the `StructuredOutputStrategy` enum or its string value. The strategy used is recorded in the response so you can see which path each call took.
850
862
 
863
+ ### Constrained Decoding (vLLM / LMStudio / OpenRouter)
864
+
865
+ For any OpenAI-compatible driver — `OpenAICompatibleDriver`, `OpenRouterDriver`, `LMStudioDriver` (sync + async) — set `options={"guided_decoding": True}` to also ship vLLM-style `guided_json` fields alongside the standard `response_format`. That unlocks logit-level FSM-constrained sampling (100% schema validity at sample time) on backends that support it. Pin a specific backend with `"outlines"`, `"xgrammar"`, or `"lm-format-enforcer"`:
866
+
867
+ ```python
868
+ result = extract_with_model(
869
+ Person,
870
+ "Maria is 32, a developer in NYC.",
871
+ model_name="openai_compatible/local-vllm",
872
+ options={"guided_decoding": "xgrammar"}, # fast lattice FSM
873
+ )
874
+ ```
875
+
876
+ Unknown servers ignore the extra fields, so it's safe to leave on. An `options={"extra_body": {...}}` escape hatch mirrors the OpenAI SDK so you can also pass `min_p`, `repetition_penalty`, OpenRouter provider preferences, etc. See `examples/constrained_decoding_example.py`.
877
+
851
878
  ### Multi-Model Fallback
852
879
 
853
880
  Try a list of models in priority order, with full per-attempt accounting — every model tried (success, failure, or skipped) is recorded with its cost, tokens, duration, capabilities, and strategy. The first success wins; if all fail, an optional `fallback` Pydantic instance is returned instead of raising.
@@ -964,8 +991,8 @@ from prompture import Conversation
964
991
 
965
992
  conv = Conversation(model_name="openai/gpt-4")
966
993
  conv.add_message("system", "You are a helpful assistant.")
967
- response = conv.send("What is the capital of France?")
968
- follow_up = conv.send("What about Germany?") # retains context
994
+ response = conv.ask("What is the capital of France?")
995
+ follow_up = conv.ask("What about Germany?") # retains context
969
996
  ```
970
997
 
971
998
  ### Tool Use
@@ -1274,6 +1301,37 @@ if doc.found:
1274
1301
 
1275
1302
  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.
1276
1303
 
1304
+ ### Prompt Caching (Claude)
1305
+
1306
+ Anthropic prompt caching cuts input-token cost on cached prefixes to ~10% of
1307
+ the normal rate. Prompture turns it on by default for `ClaudeDriver` and
1308
+ `AsyncClaudeDriver` whenever the system prompt or tools bundle is large
1309
+ enough to benefit (≥4000 chars, roughly 1024 tokens — Anthropic's minimum
1310
+ cacheable block).
1311
+
1312
+ ```python
1313
+ from prompture import Conversation
1314
+
1315
+ # Caching is automatic. The first call writes the cache (~1.25x cost on the
1316
+ # cached portion); subsequent calls within 5 minutes hit it (~0.1x cost).
1317
+ conv = Conversation(model_name="claude/claude-sonnet-4-6", system_prompt=LONG_SYSTEM_PROMPT)
1318
+ conv.ask("First question") # cache_creation_input_tokens > 0
1319
+ conv.ask("Second question") # cache_read_input_tokens > 0
1320
+ ```
1321
+
1322
+ To inspect cache activity, read `cached_prompt_tokens` and
1323
+ `cache_creation_tokens` from the response meta. To disable caching for a
1324
+ specific call pass `options={"cache_prompt": False}`.
1325
+
1326
+ Tips:
1327
+ - Put stable content (persona, tools description, JSON schema) at the
1328
+ **start** of the system prompt; put per-call variables (user query,
1329
+ retrieved RAG context) in the message stream so they don't bust the cache.
1330
+ - Avoid `{{iteration}}` or other per-turn variables in Persona templates —
1331
+ they rotate the cache key every turn.
1332
+ - Block size below ~1024 tokens is silently dropped by Anthropic; below
1333
+ the threshold Prompture skips the `cache_control` marker to avoid noise.
1334
+
1277
1335
  ### Cost Pre-flight
1278
1336
 
1279
1337
  Forecast the cost of a call **before** making it. Accepts either text
@@ -1626,6 +1684,13 @@ request body are forwarded to the driver as schemas; if the model
1626
1684
  returns `tool_calls`, they appear in the response shape so the
1627
1685
  client can execute locally.
1628
1686
 
1687
+ > **Single-worker constraint:** the server keeps conversations and
1688
+ > rate-limit buckets in **per-process memory**. Run with
1689
+ > `uvicorn --workers 1` (the default) — multi-worker deployments will
1690
+ > partition state across processes, so a `conversation_id` created on
1691
+ > one worker can return 404 on another. A shared-state backend (Redis
1692
+ > / Postgres) is on the roadmap.
1693
+
1629
1694
  Selected flags:
1630
1695
 
1631
1696
  | Flag | Purpose |
@@ -47,6 +47,16 @@ function Invoke-AllChecks {
47
47
  Write-Host "fixed $fixed files" -ForegroundColor Yellow
48
48
  }
49
49
 
50
+ # --- bandit security scan (matches .github/workflows/security.yml) ---
51
+ Write-Host " bandit " -ForegroundColor Cyan -NoNewline
52
+ $banditOut = & bandit -q -r $pyPath -c "$Root\pyproject.toml" 2>&1
53
+ if ($LASTEXITCODE -eq 0) {
54
+ Write-Host "ok" -ForegroundColor Green
55
+ } else {
56
+ Write-Host "fail" -ForegroundColor Red
57
+ $banditOut | Where-Object { $_ -match ">> Issue|Severity|Location" } | ForEach-Object { Write-Host " $_" -ForegroundColor DarkGray }
58
+ }
59
+
50
60
  # --- mypy type check ---
51
61
  Write-Host " mypy " -ForegroundColor Cyan -NoNewline
52
62
  $out = & mypy $pyPath 2>&1
@@ -9,7 +9,27 @@ try:
9
9
  except ImportError: # tukuy not installed
10
10
  TukuyLLMBackend = None # type: ignore[assignment,misc]
11
11
  create_tukuy_backend = None # type: ignore[assignment]
12
+ from . import eval as eval
12
13
  from . import plugins, rag
14
+ from .checkpoints import (
15
+ Checkpoint,
16
+ CheckpointManager,
17
+ CheckpointStore,
18
+ FileCheckpointStore,
19
+ InMemoryCheckpointStore,
20
+ RunStatus,
21
+ SQLiteCheckpointStore,
22
+ restore_conversation,
23
+ snapshot_conversation,
24
+ )
25
+ from .citations import (
26
+ CITATION_INSTRUCTION,
27
+ Citation,
28
+ CitationTracker,
29
+ CitedAnswer,
30
+ Source,
31
+ extract_citations,
32
+ )
13
33
  from .cli import *
14
34
  from .dataset import (
15
35
  ChatTurn,
@@ -22,6 +42,17 @@ from .dataset import (
22
42
  to_sharegpt,
23
43
  )
24
44
  from .drivers import *
45
+ from .eval import (
46
+ EvalError,
47
+ FaithfulnessEvaluator,
48
+ FaithfulnessResult,
49
+ JudgeResult,
50
+ LLMJudge,
51
+ PairwiseJudge,
52
+ PairwiseResult,
53
+ SelfConsistencyEvaluator,
54
+ SelfConsistencyResult,
55
+ )
25
56
  from .exceptions import (
26
57
  BudgetExceededError,
27
58
  ConfigurationError,
@@ -35,6 +66,17 @@ from .groups import *
35
66
  from .infra import *
36
67
  from .ingestion import *
37
68
  from .integrations import *
69
+ from .kg import (
70
+ Entity,
71
+ EntityStore,
72
+ InMemoryEntityStore,
73
+ KnowledgeGraph,
74
+ Mention,
75
+ Relation,
76
+ SQLiteEntityStore,
77
+ extract_entities,
78
+ extract_relations,
79
+ )
38
80
  from .media import *
39
81
  from .persistence import *
40
82
  from .pipeline import *
@@ -57,6 +99,34 @@ from .security import (
57
99
  is_prompt_injection,
58
100
  redact_pii,
59
101
  )
102
+ from .session_memory import (
103
+ InMemorySessionStore,
104
+ MemoryFact,
105
+ MemoryKind,
106
+ SessionMemory,
107
+ SessionMemoryStore,
108
+ SQLiteSessionStore,
109
+ Summarizer,
110
+ )
111
+ from .swarm import (
112
+ AllScheduler,
113
+ CallableScheduler,
114
+ Environment,
115
+ Event,
116
+ EventKind,
117
+ InMemoryStore,
118
+ Memory,
119
+ MemoryStore,
120
+ PriorityScheduler,
121
+ RoundRobinScheduler,
122
+ SampleScheduler,
123
+ Scheduler,
124
+ Swarm,
125
+ SwarmAgent,
126
+ SwarmCallbacks,
127
+ SwarmResult,
128
+ SwarmStep,
129
+ )
60
130
  from .tools import (
61
131
  PythonSandboxTool,
62
132
  SearchResult,
@@ -0,0 +1,5 @@
1
+ """Private internal helpers — NOT part of the public API.
2
+
3
+ Anything in :mod:`prompture._internal` may change without a deprecation
4
+ window. Do not import from here in downstream code.
5
+ """
@@ -0,0 +1,118 @@
1
+ """Shared JSON encoder for Prompture.
2
+
3
+ Replaces the ``json.dumps(..., default=str)`` pattern that was duplicated
4
+ across ~15 call sites. The previous pattern coerced *everything* unknown
5
+ to a string, including silently stringifying objects that should have
6
+ serialized into structured forms (Pydantic models, sets, bytes…). This
7
+ encoder handles the common Python types Prompture actually emits.
8
+
9
+ Usage::
10
+
11
+ from prompture._internal.json_encoder import dumps, PromptureJSONEncoder
12
+
13
+ text = dumps(payload) # one-shot
14
+ text = json.dumps(payload, cls=PromptureJSONEncoder) # in existing call
15
+
16
+ Types handled (in order of precedence):
17
+
18
+ * ``datetime`` / ``date`` / ``time`` → ISO 8601 string
19
+ * ``timedelta`` → total seconds (float)
20
+ * ``Decimal`` → str (preserves precision)
21
+ * ``UUID`` → str
22
+ * ``Enum`` → ``.value``
23
+ * ``pathlib.PurePath`` → ``str(path)``
24
+ * ``pydantic.BaseModel`` → ``model.model_dump(mode="json")``
25
+ * ``set`` / ``frozenset`` → sorted list (deterministic output)
26
+ * ``bytes`` / ``bytearray`` → ``ascii`` if printable, else ``base64``
27
+ * anything with ``__dict__`` → its ``__dict__``
28
+ * fallback → ``str(obj)`` (matches old behaviour)
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import base64
34
+ import json
35
+ from datetime import date, datetime, time, timedelta
36
+ from decimal import Decimal
37
+ from enum import Enum
38
+ from pathlib import PurePath
39
+ from typing import Any
40
+ from uuid import UUID
41
+
42
+
43
+ def _encode_bytes(raw: bytes | bytearray) -> str:
44
+ """Round-trip bytes as ASCII when printable, otherwise base64."""
45
+ blob = bytes(raw)
46
+ try:
47
+ decoded = blob.decode("ascii")
48
+ except UnicodeDecodeError:
49
+ return base64.b64encode(blob).decode("ascii")
50
+ if decoded.isprintable():
51
+ return decoded
52
+ return base64.b64encode(blob).decode("ascii")
53
+
54
+
55
+ class PromptureJSONEncoder(json.JSONEncoder):
56
+ """JSON encoder that knows how to serialise Prompture's common types.
57
+
58
+ Falls back to ``str(obj)`` for anything unrecognised so this is a
59
+ drop-in replacement for ``json.dumps(..., default=str)``.
60
+ """
61
+
62
+ def default(self, o: Any) -> Any:
63
+ # datetime/date/time first because datetime is a subclass of date
64
+ if isinstance(o, datetime):
65
+ return o.isoformat()
66
+ if isinstance(o, date):
67
+ return o.isoformat()
68
+ if isinstance(o, time):
69
+ return o.isoformat()
70
+ if isinstance(o, timedelta):
71
+ return o.total_seconds()
72
+ if isinstance(o, Decimal):
73
+ return str(o)
74
+ if isinstance(o, UUID):
75
+ return str(o)
76
+ if isinstance(o, Enum):
77
+ return o.value
78
+ if isinstance(o, PurePath):
79
+ return str(o)
80
+ if isinstance(o, (set, frozenset)):
81
+ try:
82
+ return sorted(o)
83
+ except TypeError:
84
+ # Items not comparable (e.g. raw Enum members). Fall back to a
85
+ # str()-keyed sort so output stays deterministic — important for
86
+ # cache-key stability.
87
+ return sorted(o, key=str)
88
+ if isinstance(o, (bytes, bytearray)):
89
+ return _encode_bytes(o)
90
+
91
+ # Pydantic BaseModel — imported lazily to avoid hard dep at import time.
92
+ try:
93
+ from pydantic import BaseModel
94
+ except ImportError:
95
+ BaseModel = None # type: ignore[assignment]
96
+ if BaseModel is not None and isinstance(o, BaseModel):
97
+ return o.model_dump(mode="json")
98
+
99
+ if hasattr(o, "__dict__"):
100
+ return o.__dict__
101
+
102
+ # Final fallback: stringify. Matches the legacy ``default=str`` behaviour
103
+ # so this encoder cannot regress callers that depended on it.
104
+ return str(o)
105
+
106
+
107
+ def dumps(obj: Any, **kwargs: Any) -> str:
108
+ """``json.dumps`` shortcut using :class:`PromptureJSONEncoder`.
109
+
110
+ Any keyword args are forwarded to :func:`json.dumps`. Setting ``cls``
111
+ explicitly will override the default encoder.
112
+ """
113
+ kwargs.setdefault("cls", PromptureJSONEncoder)
114
+ kwargs.setdefault("ensure_ascii", False)
115
+ return json.dumps(obj, **kwargs)
116
+
117
+
118
+ __all__ = ["PromptureJSONEncoder", "dumps"]
@@ -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.4.dev2'
22
- __version_tuple__ = version_tuple = (1, 1, 4, 'dev2')
21
+ __version__ = version = '1.1.5.dev1'
22
+ __version_tuple__ = version_tuple = (1, 1, 5, 'dev1')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  """Agents, conversations, personas, skills, and tool schemas."""
2
2
 
3
- from .agent import Agent, AgentIterator, StreamedAgentResult
3
+ from .agent import Agent, AgentIterator, LiveAgentResult, StreamedAgentResult
4
4
  from .assistant import (
5
5
  Assistant,
6
6
  AssistantResult,
@@ -10,7 +10,7 @@ from .assistant import (
10
10
  register_assistant,
11
11
  unregister_assistant,
12
12
  )
13
- from .async_agent import AsyncAgent, AsyncAgentIterator, AsyncStreamedAgentResult
13
+ from .async_agent import AsyncAgent, AsyncAgentIterator, AsyncLiveAgentResult, AsyncStreamedAgentResult
14
14
  from .async_conversation import AsyncConversation
15
15
  from .async_deep_agent import AsyncDeepAgent, create_async_deep_agent
16
16
  from .conversation import Conversation
@@ -23,6 +23,18 @@ from .deep_state import (
23
23
  SummaryEvent,
24
24
  Todo,
25
25
  )
26
+ from .live_events import (
27
+ AssistantTurnStart,
28
+ LiveEvent,
29
+ MessageStop,
30
+ TextDelta,
31
+ ThinkingDelta,
32
+ ToolInputDelta,
33
+ ToolResult,
34
+ ToolUseStart,
35
+ ToolUseStop,
36
+ TurnComplete,
37
+ )
26
38
  from .persona import (
27
39
  PERSONAS,
28
40
  Persona,
@@ -90,10 +102,12 @@ __all__ = [
90
102
  "ApprovalRequired",
91
103
  "Assistant",
92
104
  "AssistantResult",
105
+ "AssistantTurnStart",
93
106
  "AsyncAgent",
94
107
  "AsyncAgentIterator",
95
108
  "AsyncConversation",
96
109
  "AsyncDeepAgent",
110
+ "AsyncLiveAgentResult",
97
111
  "AsyncReviewLoop",
98
112
  "AsyncStreamedAgentResult",
99
113
  "Conversation",
@@ -101,6 +115,9 @@ __all__ = [
101
115
  "DeepAgentResult",
102
116
  "DeepAgentState",
103
117
  "GuardrailError",
118
+ "LiveAgentResult",
119
+ "LiveEvent",
120
+ "MessageStop",
104
121
  "ModelRetry",
105
122
  "Persona",
106
123
  "ReviewLoopEvent",
@@ -118,9 +135,16 @@ __all__ = [
118
135
  "SubAgentCallRecord",
119
136
  "SubAgentSpec",
120
137
  "SummaryEvent",
138
+ "TextDelta",
139
+ "ThinkingDelta",
121
140
  "Todo",
122
141
  "ToolDefinition",
142
+ "ToolInputDelta",
123
143
  "ToolRegistry",
144
+ "ToolResult",
145
+ "ToolUseStart",
146
+ "ToolUseStop",
147
+ "TurnComplete",
124
148
  "clear_assistant_registry",
125
149
  "clear_persona_registry",
126
150
  "clear_skill_registry",