prompture 1.13.5.dev3__tar.gz → 1.13.6.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 (678) hide show
  1. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/PKG-INFO +5 -5
  2. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/README.md +4 -4
  3. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/_version.py +2 -2
  4. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/__init__.py +4 -2
  5. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/challenge.py +29 -0
  6. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/__init__.py +4 -1
  7. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/cache.py +1 -1
  8. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/fetch.py +5 -1
  9. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/__init__.py +5 -1
  10. prompture-1.13.6.dev1/prompture/tools/web/readers/anilist.py +376 -0
  11. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture.egg-info/PKG-INFO +5 -5
  12. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture.egg-info/SOURCES.txt +1 -0
  13. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture.egg-info/scm_file_list.json +1 -0
  14. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/add-driver/SKILL.md +0 -0
  15. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/add-driver/references/driver-template.md +0 -0
  16. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/add-example/SKILL.md +0 -0
  17. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/add-field/SKILL.md +0 -0
  18. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/add-persona/SKILL.md +0 -0
  19. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/add-test/SKILL.md +0 -0
  20. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/add-tool/SKILL.md +0 -0
  21. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/create-pr/SKILL.md +0 -0
  22. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/run-tests/SKILL.md +0 -0
  23. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
  24. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.claude/skills/update-pricing/SKILL.md +0 -0
  25. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.env.copy +0 -0
  26. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.gitattributes +0 -0
  27. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/FUNDING.yml +0 -0
  28. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  29. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
  30. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
  31. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
  32. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/scripts/update_docs_version.py +0 -0
  33. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/scripts/update_wrapper_version.py +0 -0
  34. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/workflows/dev.yml +0 -0
  35. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/workflows/documentation.yml +0 -0
  36. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/workflows/pricing-freshness.yml +0 -0
  37. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/workflows/publish.yml +0 -0
  38. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.github/workflows/security.yml +0 -0
  39. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/.safety-project.ini +0 -0
  40. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/AGENTS.md +0 -0
  41. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/BREAKING_CHANGES.md +0 -0
  42. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/CLAUDE.md +0 -0
  43. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/CONTRIBUTING.md +0 -0
  44. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/LICENSE +0 -0
  45. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/MANIFEST.in +0 -0
  46. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/ROADMAP.md +0 -0
  47. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/SECURITY.md +0 -0
  48. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/VERSION +0 -0
  49. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/dev.ps1 +0 -0
  50. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/dev.sh +0 -0
  51. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/llms.txt +0 -0
  52. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/mypy_errors.txt +0 -0
  53. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/README.md +0 -0
  54. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_json/README.md +0 -0
  55. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
  56. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_json/pyproject.toml +0 -0
  57. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_json/test.py +0 -0
  58. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_toon/README.md +0 -0
  59. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
  60. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_toon/pyproject.toml +0 -0
  61. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/packages/llm_to_toon/test.py +0 -0
  62. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/__init__.py +0 -0
  63. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/__main__.py +0 -0
  64. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/_internal/__init__.py +0 -0
  65. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/_internal/json_encoder.py +0 -0
  66. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/__init__.py +0 -0
  67. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/agent.py +0 -0
  68. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/assistant.py +0 -0
  69. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/async_agent.py +0 -0
  70. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/async_conversation.py +0 -0
  71. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/async_deep_agent.py +0 -0
  72. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/conversation.py +0 -0
  73. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep/__init__.py +0 -0
  74. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep/planner.py +0 -0
  75. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep/subagents.py +0 -0
  76. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep/summarizer.py +0 -0
  77. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep/vfs.py +0 -0
  78. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep_agent.py +0 -0
  79. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep_prompts.py +0 -0
  80. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/deep_state.py +0 -0
  81. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/live_events.py +0 -0
  82. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/persona.py +0 -0
  83. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/review_loop.py +0 -0
  84. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/simulated_tools.py +0 -0
  85. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/skill_miner.py +0 -0
  86. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/skills.py +0 -0
  87. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/tool_grammars.py +0 -0
  88. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/tools_schema.py +0 -0
  89. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/agents/types.py +0 -0
  90. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/aio/__init__.py +0 -0
  91. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/bridges/__init__.py +0 -0
  92. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/bridges/tukuy_backend.py +0 -0
  93. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/backends.py +0 -0
  94. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/builtin_checks.py +0 -0
  95. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/errors.py +0 -0
  96. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/health.py +0 -0
  97. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/http.py +0 -0
  98. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/probe.py +0 -0
  99. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/capabilities/url_safety.py +0 -0
  100. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/checkpoints/__init__.py +0 -0
  101. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/checkpoints/core.py +0 -0
  102. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/checkpoints/stores.py +0 -0
  103. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/checkpoints/types.py +0 -0
  104. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/citations/__init__.py +0 -0
  105. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/citations/core.py +0 -0
  106. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/citations/types.py +0 -0
  107. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/__init__.py +0 -0
  108. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/cli.py +0 -0
  109. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/doctor_cmd.py +0 -0
  110. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/formatters.py +0 -0
  111. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/mcp_cmd.py +0 -0
  112. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/research_cmd.py +0 -0
  113. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/runner.py +0 -0
  114. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/server.py +0 -0
  115. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/setup_cmd.py +0 -0
  116. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/skill_cmd.py +0 -0
  117. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/cli/transcribe_cmd.py +0 -0
  118. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/__init__.py +0 -0
  119. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/automations.py +0 -0
  120. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/calls.py +0 -0
  121. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/capacity.py +0 -0
  122. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/coding_tools.py +0 -0
  123. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/hook.py +0 -0
  124. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/live.py +0 -0
  125. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/local.py +0 -0
  126. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/memory.py +0 -0
  127. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/reuse.py +0 -0
  128. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/router.py +0 -0
  129. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/routing_policy.py +0 -0
  130. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/server.py +0 -0
  131. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/summary.py +0 -0
  132. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/companion/tool_routing.py +0 -0
  133. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/__init__.py +0 -0
  134. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/dedup.py +0 -0
  135. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/evol.py +0 -0
  136. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/filters.py +0 -0
  137. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/formats.py +0 -0
  138. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/schemas.py +0 -0
  139. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/seed.py +0 -0
  140. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/dataset/synth.py +0 -0
  141. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/doctor/__init__.py +0 -0
  142. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/doctor/core.py +0 -0
  143. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/doctor/providers.py +0 -0
  144. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/__init__.py +0 -0
  145. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_media_usage.py +0 -0
  146. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_ollama_options.py +0 -0
  147. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_openai_compat.py +0 -0
  148. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_openai_compat_stream.py +0 -0
  149. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_openai_responses.py +0 -0
  150. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_prompt_cache.py +0 -0
  151. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_prompted_tool_stream.py +0 -0
  152. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/_usage_reporting.py +0 -0
  153. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/aggregator_base.py +0 -0
  154. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/airllm_driver.py +0 -0
  155. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/assemblyai_stt_driver.py +0 -0
  156. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_aggregator_base.py +0 -0
  157. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_airllm_driver.py +0 -0
  158. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
  159. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_azure_driver.py +0 -0
  160. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_base.py +0 -0
  161. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_bedrock_driver.py +0 -0
  162. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
  163. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_cachibot_driver.py +0 -0
  164. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
  165. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_claude_driver.py +0 -0
  166. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_cohere_driver.py +0 -0
  167. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
  168. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
  169. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
  170. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
  171. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_deepseek_driver.py +0 -0
  172. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
  173. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
  174. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_embedding_base.py +0 -0
  175. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
  176. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
  177. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_google_driver.py +0 -0
  178. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_google_img_gen_driver.py +0 -0
  179. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_google_vertexai_driver.py +0 -0
  180. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_grok_driver.py +0 -0
  181. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
  182. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
  183. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_groq_driver.py +0 -0
  184. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_hugging_driver.py +0 -0
  185. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
  186. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_img_gen_base.py +0 -0
  187. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_jina_embedding_driver.py +0 -0
  188. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_jina_rerank_driver.py +0 -0
  189. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_kev_decision_driver.py +0 -0
  190. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
  191. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
  192. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_laya_decision_driver.py +0 -0
  193. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_lmstudio_driver.py +0 -0
  194. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_local_http_driver.py +0 -0
  195. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
  196. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_minimax_driver.py +0 -0
  197. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
  198. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_mistral_driver.py +0 -0
  199. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
  200. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_modelscope_driver.py +0 -0
  201. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_moonshot_driver.py +0 -0
  202. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
  203. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
  204. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
  205. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
  206. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_ollama_driver.py +0 -0
  207. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
  208. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openai_compatible_driver.py +0 -0
  209. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openai_driver.py +0 -0
  210. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openai_embedding_driver.py +0 -0
  211. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
  212. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openai_moderation_driver.py +0 -0
  213. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openai_stt_driver.py +0 -0
  214. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openai_tts_driver.py +0 -0
  215. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_openrouter_driver.py +0 -0
  216. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
  217. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_registry.py +0 -0
  218. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
  219. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_runway_tts_driver.py +0 -0
  220. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
  221. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
  222. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_stt_base.py +0 -0
  223. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_systemone_compatible_driver.py +0 -0
  224. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_tts_base.py +0 -0
  225. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_typesafe_decision_driver.py +0 -0
  226. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_video_gen_base.py +0 -0
  227. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
  228. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
  229. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/async_zai_driver.py +0 -0
  230. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/audio_registry.py +0 -0
  231. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/azure_config.py +0 -0
  232. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/azure_driver.py +0 -0
  233. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/base.py +0 -0
  234. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/bedrock_driver.py +0 -0
  235. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/bfl_img_gen_driver.py +0 -0
  236. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/cachibot_driver.py +0 -0
  237. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/cartesia_tts_driver.py +0 -0
  238. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/claude_driver.py +0 -0
  239. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/cohere_driver.py +0 -0
  240. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/cohere_embedding_driver.py +0 -0
  241. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/cohere_rerank_driver.py +0 -0
  242. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/decision_base.py +0 -0
  243. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/decision_registry.py +0 -0
  244. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/deepgram_stt_driver.py +0 -0
  245. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/deepgram_tts_driver.py +0 -0
  246. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/deepseek_driver.py +0 -0
  247. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/driver_registry.py +0 -0
  248. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
  249. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
  250. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/embedding_base.py +0 -0
  251. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/embedding_registry.py +0 -0
  252. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/fal_img_gen_driver.py +0 -0
  253. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/fal_video_gen_driver.py +0 -0
  254. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/google_driver.py +0 -0
  255. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/google_img_gen_driver.py +0 -0
  256. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/google_vertexai_driver.py +0 -0
  257. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/grok_driver.py +0 -0
  258. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/grok_img_gen_driver.py +0 -0
  259. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/grok_video_gen_driver.py +0 -0
  260. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/groq_driver.py +0 -0
  261. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/hugging_driver.py +0 -0
  262. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
  263. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/img_gen_base.py +0 -0
  264. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/img_gen_registry.py +0 -0
  265. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/jina_embedding_driver.py +0 -0
  266. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/jina_rerank_driver.py +0 -0
  267. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/job_runner.py +0 -0
  268. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/kev_decision_driver.py +0 -0
  269. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/kling_img_gen_driver.py +0 -0
  270. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/kling_video_gen_driver.py +0 -0
  271. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/laya_decision_driver.py +0 -0
  272. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/lipsync_base.py +0 -0
  273. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/lipsync_registry.py +0 -0
  274. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/lmstudio_driver.py +0 -0
  275. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/local_http_driver.py +0 -0
  276. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/luma_video_gen_driver.py +0 -0
  277. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/media_capabilities.py +0 -0
  278. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/minimax_driver.py +0 -0
  279. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/minimax_video_gen_driver.py +0 -0
  280. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/mistral_driver.py +0 -0
  281. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/mistral_moderation_driver.py +0 -0
  282. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/modelscope_driver.py +0 -0
  283. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/moderation_base.py +0 -0
  284. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/moderation_registry.py +0 -0
  285. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/moonshot_driver.py +0 -0
  286. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/muapi_aggregator_driver.py +0 -0
  287. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/music_base.py +0 -0
  288. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/music_registry.py +0 -0
  289. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/mxbai_embedding_driver.py +0 -0
  290. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/mxbai_rerank_driver.py +0 -0
  291. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/nomic_embedding_driver.py +0 -0
  292. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/ollama_driver.py +0 -0
  293. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/ollama_embedding_driver.py +0 -0
  294. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openai_compatible_driver.py +0 -0
  295. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openai_driver.py +0 -0
  296. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openai_embedding_driver.py +0 -0
  297. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openai_img_gen_driver.py +0 -0
  298. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openai_moderation_driver.py +0 -0
  299. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openai_stt_driver.py +0 -0
  300. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openai_tts_driver.py +0 -0
  301. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/openrouter_driver.py +0 -0
  302. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/pika_video_gen_driver.py +0 -0
  303. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/provider_branding.py +0 -0
  304. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/provider_descriptors.py +0 -0
  305. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/registry.py +0 -0
  306. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/rerank_base.py +0 -0
  307. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/rerank_registry.py +0 -0
  308. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/runway_audio_transform_driver.py +0 -0
  309. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/runway_capabilities.py +0 -0
  310. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/runway_img_gen_driver.py +0 -0
  311. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/runway_tts_driver.py +0 -0
  312. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/runway_video_gen_driver.py +0 -0
  313. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/stability_img_gen_driver.py +0 -0
  314. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/stt_base.py +0 -0
  315. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/systemone_compatible_driver.py +0 -0
  316. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/tts_base.py +0 -0
  317. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/typesafe_decision_driver.py +0 -0
  318. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/vertex_img_gen_driver.py +0 -0
  319. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/video_gen_base.py +0 -0
  320. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/video_gen_registry.py +0 -0
  321. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/vision_helpers.py +0 -0
  322. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/voyage_embedding_driver.py +0 -0
  323. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/voyage_rerank_driver.py +0 -0
  324. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/drivers/zai_driver.py +0 -0
  325. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/eval/__init__.py +0 -0
  326. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/eval/base.py +0 -0
  327. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/eval/faithfulness.py +0 -0
  328. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/eval/judge.py +0 -0
  329. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/eval/pairwise.py +0 -0
  330. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/eval/self_consistency.py +0 -0
  331. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/exceptions.py +0 -0
  332. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/__init__.py +0 -0
  333. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/context.py +0 -0
  334. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/context_eval.py +0 -0
  335. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/data/document_qa_policies.json +0 -0
  336. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/data/extraction_contacts.json +0 -0
  337. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/data/tool_task_inventory.json +0 -0
  338. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/fixtures.py +0 -0
  339. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/gates.py +0 -0
  340. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/harness.py +0 -0
  341. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/improve/__init__.py +0 -0
  342. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/improve/candidates.py +0 -0
  343. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/improve/optimizer.py +0 -0
  344. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/improve/promotion.py +0 -0
  345. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/improve/scorecard.py +0 -0
  346. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/integration.py +0 -0
  347. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/outcomes.py +0 -0
  348. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/policy.py +0 -0
  349. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/sandbox.py +0 -0
  350. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/scoring.py +0 -0
  351. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/strategies/__init__.py +0 -0
  352. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/strategies/base.py +0 -0
  353. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/strategies/critique.py +0 -0
  354. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/strategies/direct.py +0 -0
  355. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/strategies/registry.py +0 -0
  356. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/strategies/retrieve.py +0 -0
  357. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/execution/types.py +0 -0
  358. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/__init__.py +0 -0
  359. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/_usage.py +0 -0
  360. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/async_core.py +0 -0
  361. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/code_extraction.py +0 -0
  362. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/core.py +0 -0
  363. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/few_shot.py +0 -0
  364. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/fields.py +0 -0
  365. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/reasoning.py +0 -0
  366. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/strategy.py +0 -0
  367. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/streaming.py +0 -0
  368. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/tools.py +0 -0
  369. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/tukuy_bridge.py +0 -0
  370. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/extraction/validator.py +0 -0
  371. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/gateway/__init__.py +0 -0
  372. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/gateway/anthropic_format.py +0 -0
  373. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/gateway/gemini_format.py +0 -0
  374. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/gateway/openai_format.py +0 -0
  375. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/gateway/reasoning_cache.py +0 -0
  376. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/gateway/responses_format.py +0 -0
  377. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/groups/__init__.py +0 -0
  378. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/groups/async_groups.py +0 -0
  379. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/groups/consensus.py +0 -0
  380. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/groups/debate.py +0 -0
  381. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/groups/fusion.py +0 -0
  382. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/groups/groups.py +0 -0
  383. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/groups/types.py +0 -0
  384. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/imaging/__init__.py +0 -0
  385. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/imaging/enhance.py +0 -0
  386. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/imaging/negative.py +0 -0
  387. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/imaging/set_planner.py +0 -0
  388. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/imaging/style_presets.py +0 -0
  389. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/__init__.py +0 -0
  390. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/accounts.py +0 -0
  391. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/billing.py +0 -0
  392. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/budget.py +0 -0
  393. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/cache.py +0 -0
  394. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/callbacks.py +0 -0
  395. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/capabilities.py +0 -0
  396. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/coding_agent_activity.py +0 -0
  397. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/coding_agent_events.py +0 -0
  398. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/coding_agent_readers.py +0 -0
  399. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/coding_agent_specs.py +0 -0
  400. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/coding_agent_usage.py +0 -0
  401. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/coding_agents.py +0 -0
  402. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/compression.py +0 -0
  403. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/cost_mixin.py +0 -0
  404. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/credentials.py +0 -0
  405. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/discovery.py +0 -0
  406. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/environment.py +0 -0
  407. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/ledger.py +0 -0
  408. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/logging.py +0 -0
  409. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/media_pricing.py +0 -0
  410. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/media_rates.json +0 -0
  411. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/model_rates.py +0 -0
  412. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/otel.py +0 -0
  413. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/pricing.py +0 -0
  414. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/provider_env.py +0 -0
  415. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rate_limits.py +0 -0
  416. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/anthropic.json +0 -0
  417. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/azure.json +0 -0
  418. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/bedrock.json +0 -0
  419. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/cerebras.json +0 -0
  420. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/cohere.json +0 -0
  421. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/deepinfra.json +0 -0
  422. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/deepseek.json +0 -0
  423. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/fireworks.json +0 -0
  424. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/google.json +0 -0
  425. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/google_vertexai.json +0 -0
  426. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/groq.json +0 -0
  427. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/jina.json +0 -0
  428. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/kev.json +0 -0
  429. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/laya.json +0 -0
  430. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/mistral.json +0 -0
  431. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/mixedbread.json +0 -0
  432. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/moonshot.json +0 -0
  433. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/nomic.json +0 -0
  434. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/nvidia.json +0 -0
  435. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/openai.json +0 -0
  436. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/openrouter.json +0 -0
  437. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/perplexity.json +0 -0
  438. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/sambanova.json +0 -0
  439. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/siliconflow.json +0 -0
  440. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/together.json +0 -0
  441. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/typesafe.json +0 -0
  442. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/voyage.json +0 -0
  443. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/rates/xai.json +0 -0
  444. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/session.py +0 -0
  445. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/settings.py +0 -0
  446. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/token_counting.py +0 -0
  447. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/tracker.py +0 -0
  448. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/tukuy_backend.py +0 -0
  449. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/infra/updates.py +0 -0
  450. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/__init__.py +0 -0
  451. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/chunking.py +0 -0
  452. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/detect.py +0 -0
  453. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/document.py +0 -0
  454. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/__init__.py +0 -0
  455. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/base.py +0 -0
  456. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/csv_parser.py +0 -0
  457. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/docx.py +0 -0
  458. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/html.py +0 -0
  459. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/markdown.py +0 -0
  460. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/pdf.py +0 -0
  461. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/ingestion/parsers/xlsx.py +0 -0
  462. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/integrations/__init__.py +0 -0
  463. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/integrations/mcp_bridge.py +0 -0
  464. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/integrations/tukuy_bridge.py +0 -0
  465. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/jobs.py +0 -0
  466. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/kg/__init__.py +0 -0
  467. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/kg/core.py +0 -0
  468. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/kg/stores.py +0 -0
  469. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/kg/types.py +0 -0
  470. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/mcp/__init__.py +0 -0
  471. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/mcp/client.py +0 -0
  472. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/mcp/health.py +0 -0
  473. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/mcp/hub.py +0 -0
  474. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/mcp/importers.py +0 -0
  475. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/mcp/server.py +0 -0
  476. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/mcp/tools.py +0 -0
  477. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/__init__.py +0 -0
  478. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/agent_tools.py +0 -0
  479. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/audio.py +0 -0
  480. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/hosting.py +0 -0
  481. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/image.py +0 -0
  482. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/__init__.py +0 -0
  483. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/errors.py +0 -0
  484. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/ffmpeg.py +0 -0
  485. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/groq_stt.py +0 -0
  486. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/health.py +0 -0
  487. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/sources.py +0 -0
  488. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/summarize.py +0 -0
  489. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/tools.py +0 -0
  490. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/understand/transcribe.py +0 -0
  491. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/media/video.py +0 -0
  492. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pages/01-why-prompture.md +0 -0
  493. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pages/02-installation.md +0 -0
  494. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pages/03-quickstart.md +0 -0
  495. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pages/04-toon-input.md +0 -0
  496. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pages/05-test-harness.md +0 -0
  497. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pages/06-stability.md +0 -0
  498. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pages/07-migration.md +0 -0
  499. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/persistence/__init__.py +0 -0
  500. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/persistence/history.py +0 -0
  501. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/persistence/serialization.py +0 -0
  502. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/persistence/store.py +0 -0
  503. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pipeline/__init__.py +0 -0
  504. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pipeline/pipeline.py +0 -0
  505. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pipeline/resolver.py +0 -0
  506. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/pipeline/routing.py +0 -0
  507. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/__init__.py +0 -0
  508. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/base.py +0 -0
  509. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/__init__.py +0 -0
  510. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/_aliases.py +0 -0
  511. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
  512. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/audio_plugin.py +0 -0
  513. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/cloud_plugin.py +0 -0
  514. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/decision_plugin.py +0 -0
  515. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
  516. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/extras_plugin.py +0 -0
  517. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/google_plugin.py +0 -0
  518. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/image_plugin.py +0 -0
  519. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/local_plugin.py +0 -0
  520. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
  521. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/openai_plugin.py +0 -0
  522. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/builtins/video_plugin.py +0 -0
  523. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/plugins/discovery.py +0 -0
  524. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/py.typed +0 -0
  525. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/__init__.py +0 -0
  526. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/__init__.py +0 -0
  527. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/base.py +0 -0
  528. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/character.py +0 -0
  529. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/chunker_registry.py +0 -0
  530. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/contextual.py +0 -0
  531. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/markdown.py +0 -0
  532. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/recursive.py +0 -0
  533. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/semantic.py +0 -0
  534. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/chunkers/token.py +0 -0
  535. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/documents.py +0 -0
  536. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loader_registry.py +0 -0
  537. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/__init__.py +0 -0
  538. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/csv_loader.py +0 -0
  539. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/docx_loader.py +0 -0
  540. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/epub_loader.py +0 -0
  541. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/html_loader.py +0 -0
  542. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/json_loader.py +0 -0
  543. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/markdown_loader.py +0 -0
  544. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/pdf_loader.py +0 -0
  545. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/text_loader.py +0 -0
  546. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/loaders/xlsx_loader.py +0 -0
  547. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/pipeline.py +0 -0
  548. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/__init__.py +0 -0
  549. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/_fusion.py +0 -0
  550. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/base.py +0 -0
  551. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/hybrid.py +0 -0
  552. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/hyde.py +0 -0
  553. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/mmr.py +0 -0
  554. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/multi_query.py +0 -0
  555. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/retriever_registry.py +0 -0
  556. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/similarity.py +0 -0
  557. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/retrievers/step_back.py +0 -0
  558. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/__init__.py +0 -0
  559. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/base.py +0 -0
  560. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/chroma.py +0 -0
  561. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/faiss.py +0 -0
  562. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/pgvector.py +0 -0
  563. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/pinecone.py +0 -0
  564. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/qdrant.py +0 -0
  565. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
  566. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/rag/vectorstores/weaviate.py +0 -0
  567. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/refusal/__init__.py +0 -0
  568. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/refusal/detector.py +0 -0
  569. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/refusal/evaluator.py +0 -0
  570. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/refusal/markers.py +0 -0
  571. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/__init__.py +0 -0
  572. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/agent.py +0 -0
  573. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/budget.py +0 -0
  574. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/events.py +0 -0
  575. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/planner.py +0 -0
  576. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/ranking.py +0 -0
  577. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/report.py +0 -0
  578. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/synthesis.py +0 -0
  579. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/research/tools.py +0 -0
  580. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/__init__.py +0 -0
  581. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/async_driver.py +0 -0
  582. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/backoff.py +0 -0
  583. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/breaker.py +0 -0
  584. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/driver.py +0 -0
  585. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/errors.py +0 -0
  586. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/explain.py +0 -0
  587. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/headroom.py +0 -0
  588. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/keys.py +0 -0
  589. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/router.py +0 -0
  590. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/strategies.py +0 -0
  591. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/resilience/virtual.py +0 -0
  592. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/__init__.py +0 -0
  593. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/generator.py +0 -0
  594. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
  595. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/templates/README.md.j2 +0 -0
  596. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/templates/config.py.j2 +0 -0
  597. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/templates/env.example.j2 +0 -0
  598. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/templates/main.py.j2 +0 -0
  599. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/templates/models.py.j2 +0 -0
  600. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
  601. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/security/__init__.py +0 -0
  602. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/security/injection.py +0 -0
  603. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/security/redaction.py +0 -0
  604. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/session_memory/__init__.py +0 -0
  605. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/session_memory/core.py +0 -0
  606. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/session_memory/project.py +0 -0
  607. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/session_memory/stores.py +0 -0
  608. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/session_memory/types.py +0 -0
  609. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/__init__.py +0 -0
  610. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/SKILL.md +0 -0
  611. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/references/dev.md +0 -0
  612. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/references/finance.md +0 -0
  613. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/references/mcp.md +0 -0
  614. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/references/media.md +0 -0
  615. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/references/models.md +0 -0
  616. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/references/search.md +0 -0
  617. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/skill/data/references/web.md +0 -0
  618. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/swarm/__init__.py +0 -0
  619. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/swarm/environment.py +0 -0
  620. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/swarm/memory.py +0 -0
  621. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/swarm/scheduler.py +0 -0
  622. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/swarm/swarm.py +0 -0
  623. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/swarm/swarm_agent.py +0 -0
  624. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/swarm/types.py +0 -0
  625. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/testing/__init__.py +0 -0
  626. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/testing/driver_contract.py +0 -0
  627. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/__init__.py +0 -0
  628. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/cli/__init__.py +0 -0
  629. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/cli/adapter.py +0 -0
  630. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/cli/builtin.py +0 -0
  631. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/cli/config.py +0 -0
  632. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/cli/health.py +0 -0
  633. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/code_exec.py +0 -0
  634. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/named.py +0 -0
  635. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/packs.py +0 -0
  636. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/_common.py +0 -0
  637. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/_mcp_http.py +0 -0
  638. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/_types.py +0 -0
  639. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/health.py +0 -0
  640. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/html2md.py +0 -0
  641. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/platform.py +0 -0
  642. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/_media.py +0 -0
  643. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/arxiv.py +0 -0
  644. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/base.py +0 -0
  645. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/feeds.py +0 -0
  646. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/github.py +0 -0
  647. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/hackernews.py +0 -0
  648. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/podcasts.py +0 -0
  649. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/wikipedia.py +0 -0
  650. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/readers/youtube.py +0 -0
  651. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/search.py +0 -0
  652. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web/toolkit.py +0 -0
  653. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/tools/web_search.py +0 -0
  654. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/__init__.py +0 -0
  655. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/architect.py +0 -0
  656. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/engine.py +0 -0
  657. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/errors.py +0 -0
  658. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/model.py +0 -0
  659. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/nodes.py +0 -0
  660. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/recovery.py +0 -0
  661. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/references.py +0 -0
  662. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/registry.py +0 -0
  663. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/scheduler.py +0 -0
  664. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture/workflow/state.py +0 -0
  665. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture.egg-info/dependency_links.txt +0 -0
  666. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture.egg-info/entry_points.txt +0 -0
  667. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture.egg-info/requires.txt +0 -0
  668. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture.egg-info/top_level.txt +0 -0
  669. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/prompture_cost_tracking.md +0 -0
  670. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/pyproject.toml +0 -0
  671. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/requirements.txt +0 -0
  672. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/scripts/check_pricing_freshness.py +0 -0
  673. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/setup.cfg +0 -0
  674. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/specs/basic_extraction.json +0 -0
  675. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/specs/schema_validation.json +0 -0
  676. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/specs/strategy_comparison.json +0 -0
  677. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/test.py +0 -0
  678. {prompture-1.13.5.dev3 → prompture-1.13.6.dev1}/test_version_diagnosis.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.13.5.dev3
3
+ Version: 1.13.6.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
@@ -188,7 +188,7 @@ prompture mcp add --preset exa # mount MCP servers by name
188
188
  prompture skill install # teach your coding agent all of this
189
189
  ```
190
190
 
191
- - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
191
+ - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, AniList, feeds and podcasts
192
192
  - **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
193
193
  - **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
194
194
  - **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
@@ -237,7 +237,7 @@ No setup: Desk runs `prompture companion` (Prompture 1.13+) on localhost for you
237
237
  - `generate_qa_dataset()` — synthetic JSONL datasets ready for Unsloth, Axolotl, TRL
238
238
 
239
239
  **Capabilities** — see [Capabilities](#capabilities)
240
- - Keyless `web_search`, `web_fetch` and `read_url` (YouTube, GitHub, HN, arXiv, Wikipedia, feeds, podcasts), with failover across keyed providers
240
+ - Keyless `web_search`, `web_fetch` and `read_url` (YouTube, GitHub, HN, arXiv, Wikipedia, AniList, feeds, podcasts), with failover across keyed providers
241
241
  - Local web cache with content-aware lifetimes: minutes for weather, prices and news, days for papers and transcripts
242
242
  - `transcribe` / `summarize_media` for video, podcasts and audio, with timestamped key points
243
243
  - `ResearchAgent` / `prompture research` — cited multi-source reports within fetch, token, cost and time budgets
@@ -2132,7 +2132,7 @@ agent = Agent("openai/gpt-4o", tools=["web:all"])
2132
2132
  |---|---|
2133
2133
  | `web_search` | `tavily` ▸ `exa` ▸ `serper` ▸ `brave` ▸ `jina` ▸ `searxng` ▸ `exa_mcp` (keyless) |
2134
2134
  | `web_fetch` | `jina_reader` (keyless) ▸ `direct` (safe GET + HTML to Markdown) |
2135
- | `read_url` | YouTube, GitHub, Hacker News, arXiv, Wikipedia, podcasts, RSS/Atom readers ▸ `web_fetch` |
2135
+ | `read_url` | YouTube, GitHub, Hacker News, arXiv, Wikipedia, AniList, podcasts, RSS/Atom readers ▸ `web_fetch` |
2136
2136
  | `search_platform` | YouTube (`yt-dlp`), GitHub, Hacker News (Algolia), arXiv |
2137
2137
 
2138
2138
  - Auth, quota and rate-limit errors fail over immediately; timeouts and 5xx
@@ -2155,7 +2155,7 @@ entry lives as long as that kind of content stays true:
2155
2155
  | Platform search (GitHub, HN, arXiv, YouTube) | 30 min |
2156
2156
  | Ordinary pages / searches within `recency_days <= 7` | 1 h |
2157
2157
  | Other searches | 6 h |
2158
- | Wikipedia, podcast episodes | 1 day |
2158
+ | Wikipedia, AniList, podcast episodes | 1 day |
2159
2159
  | Papers, PDFs, DOIs, commit-pinned GitHub files, YouTube transcripts | 7 days |
2160
2160
 
2161
2161
  Cached results say so (`route["cached"]`, `cache_age_s`, and "cached 3 min
@@ -71,7 +71,7 @@ prompture mcp add --preset exa # mount MCP servers by name
71
71
  prompture skill install # teach your coding agent all of this
72
72
  ```
73
73
 
74
- - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
74
+ - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, AniList, feeds and podcasts
75
75
  - **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
76
76
  - **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
77
77
  - **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
@@ -120,7 +120,7 @@ No setup: Desk runs `prompture companion` (Prompture 1.13+) on localhost for you
120
120
  - `generate_qa_dataset()` — synthetic JSONL datasets ready for Unsloth, Axolotl, TRL
121
121
 
122
122
  **Capabilities** — see [Capabilities](#capabilities)
123
- - Keyless `web_search`, `web_fetch` and `read_url` (YouTube, GitHub, HN, arXiv, Wikipedia, feeds, podcasts), with failover across keyed providers
123
+ - Keyless `web_search`, `web_fetch` and `read_url` (YouTube, GitHub, HN, arXiv, Wikipedia, AniList, feeds, podcasts), with failover across keyed providers
124
124
  - Local web cache with content-aware lifetimes: minutes for weather, prices and news, days for papers and transcripts
125
125
  - `transcribe` / `summarize_media` for video, podcasts and audio, with timestamped key points
126
126
  - `ResearchAgent` / `prompture research` — cited multi-source reports within fetch, token, cost and time budgets
@@ -2015,7 +2015,7 @@ agent = Agent("openai/gpt-4o", tools=["web:all"])
2015
2015
  |---|---|
2016
2016
  | `web_search` | `tavily` ▸ `exa` ▸ `serper` ▸ `brave` ▸ `jina` ▸ `searxng` ▸ `exa_mcp` (keyless) |
2017
2017
  | `web_fetch` | `jina_reader` (keyless) ▸ `direct` (safe GET + HTML to Markdown) |
2018
- | `read_url` | YouTube, GitHub, Hacker News, arXiv, Wikipedia, podcasts, RSS/Atom readers ▸ `web_fetch` |
2018
+ | `read_url` | YouTube, GitHub, Hacker News, arXiv, Wikipedia, AniList, podcasts, RSS/Atom readers ▸ `web_fetch` |
2019
2019
  | `search_platform` | YouTube (`yt-dlp`), GitHub, Hacker News (Algolia), arXiv |
2020
2020
 
2021
2021
  - Auth, quota and rate-limit errors fail over immediately; timeouts and 5xx
@@ -2038,7 +2038,7 @@ entry lives as long as that kind of content stays true:
2038
2038
  | Platform search (GitHub, HN, arXiv, YouTube) | 30 min |
2039
2039
  | Ordinary pages / searches within `recency_days <= 7` | 1 h |
2040
2040
  | Other searches | 6 h |
2041
- | Wikipedia, podcast episodes | 1 day |
2041
+ | Wikipedia, AniList, podcast episodes | 1 day |
2042
2042
  | Papers, PDFs, DOIs, commit-pinned GitHub files, YouTube transcripts | 7 days |
2043
2043
 
2044
2044
  Cached results say so (`route["cached"]`, `cache_age_s`, and "cached 3 min
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.13.5.dev3'
22
- __version_tuple__ = version_tuple = (1, 13, 5, 'dev3')
21
+ __version__ = version = '1.13.6.dev1'
22
+ __version_tuple__ = version_tuple = (1, 13, 6, 'dev1')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -5,11 +5,12 @@
5
5
  * :mod:`.health` — :class:`HealthStatus` and the capability registry doctor walks.
6
6
  * :mod:`.url_safety` — :func:`normalize_public_http_url` public-URL guard.
7
7
  * :mod:`.http` — :func:`safe_get` redirect-checked, size-capped GET.
8
- * :mod:`.challenge` — :func:`is_challenge_page` interstitial detection.
8
+ * :mod:`.challenge` — :func:`is_challenge_page` interstitial detection and
9
+ :func:`is_js_shell_page` for pages that are only a "needs JavaScript" shell.
9
10
  """
10
11
 
11
12
  from .backends import Backend, BackendChain, BaseBackend, ChainResult, order_backends, parse_override
12
- from .challenge import is_challenge_page
13
+ from .challenge import is_challenge_page, is_js_shell_page
13
14
  from .errors import (
14
15
  AllBackendsFailedError,
15
16
  BackendUnavailableError,
@@ -52,6 +53,7 @@ __all__ = [
52
53
  "check_capabilities",
53
54
  "clear_probe_cache",
54
55
  "is_challenge_page",
56
+ "is_js_shell_page",
55
57
  "is_public_http_url",
56
58
  "is_public_ip",
57
59
  "list_capabilities",
@@ -73,3 +73,32 @@ def is_challenge_page(
73
73
  score = challenge_score(text)
74
74
  threshold = 2 if status in _CHALLENGE_STATUSES else 3
75
75
  return score >= threshold
76
+
77
+
78
+ # The first characters of a page rendered without its scripts: an app shell
79
+ # that only says the content needs JavaScript or a newer browser.
80
+ SHELL_SCAN_CHARS = 1000
81
+
82
+ _SHELL_MARKERS = (
83
+ "requires a modern browser",
84
+ "upgrade to a newer web browser",
85
+ "you need to enable javascript to run this app",
86
+ "please enable javascript to continue",
87
+ "this site requires javascript",
88
+ "this page requires javascript",
89
+ "javascript is required to view",
90
+ "javascript is disabled in your browser",
91
+ )
92
+
93
+
94
+ def is_js_shell_page(text: str | bytes) -> bool:
95
+ """Return ``True`` when the start of *text* is a "needs JavaScript" app shell.
96
+
97
+ Only the opening :data:`SHELL_SCAN_CHARS` are checked, so a real article
98
+ that mentions JavaScript further down (a comments widget, say) still counts
99
+ as content.
100
+ """
101
+ if isinstance(text, bytes):
102
+ text = text[: SHELL_SCAN_CHARS * 4].decode("utf-8", errors="ignore")
103
+ head = text[:SHELL_SCAN_CHARS].lower()
104
+ return any(m in head for m in _SHELL_MARKERS)
@@ -3,7 +3,8 @@
3
3
  * :func:`web_search` — ordered search backends with failover; keyless Exa MCP floor.
4
4
  * :func:`web_fetch` — URL → Markdown (Jina reader ▸ direct), paging, 10-minute cache.
5
5
  * :func:`read_url` — URL-routed readers (YouTube, GitHub, Hacker News, arXiv,
6
- Wikipedia, podcasts, feeds) with ``web_fetch`` fallback.
6
+ Wikipedia, AniList, podcasts, feeds) with ``web_fetch`` fallback.
7
+ * :func:`search_anilist` — find an anime / manga by title (its URL reads the cast).
7
8
  * :func:`search_platform` — YouTube / GitHub / Hacker News / arXiv search.
8
9
  * :class:`WebToolkit` — the above as agent tools; ``tools=["web:all"]``.
9
10
 
@@ -47,6 +48,7 @@ from .readers import (
47
48
  list_readers,
48
49
  read_url,
49
50
  register_reader,
51
+ search_anilist,
50
52
  unregister_reader,
51
53
  )
52
54
  from .search import (
@@ -112,6 +114,7 @@ __all__ = [
112
114
  "read_url",
113
115
  "register_reader",
114
116
  "resolve_web_tools",
117
+ "search_anilist",
115
118
  "search_chain",
116
119
  "search_platform",
117
120
  "unregister_reader",
@@ -126,7 +126,7 @@ def read_ttl(url: str, reader: str, kind: str = "page") -> int:
126
126
  return 7 * DAY # a published video's transcript doesn't change
127
127
  if reader == "arxiv":
128
128
  return 7 * DAY
129
- if reader == "wikipedia":
129
+ if reader in ("wikipedia", "anilist"):
130
130
  return DAY
131
131
  if reader == "podcasts":
132
132
  return DAY
@@ -28,7 +28,7 @@ from typing import Any
28
28
  import requests
29
29
 
30
30
  from ...capabilities.backends import BackendChain, BaseBackend
31
- from ...capabilities.challenge import is_challenge_page
31
+ from ...capabilities.challenge import is_challenge_page, is_js_shell_page
32
32
  from ...capabilities.errors import ChallengePageError, HTTPStatusError
33
33
  from ...capabilities.http import safe_get
34
34
  from ...capabilities.url_safety import normalize_public_http_url
@@ -174,6 +174,8 @@ class JinaReaderBackend(FetchBackend):
174
174
  raise RequestRejectedError(self.name, "empty content")
175
175
  if is_challenge_page(content) or title.strip().lower() in _CHALLENGE_TITLES:
176
176
  raise ChallengePageError(f"{url} returned a bot challenge via {self.name}")
177
+ if is_js_shell_page(content):
178
+ raise RequestRejectedError(self.name, "page is a JavaScript app shell with no content")
177
179
  ctype = "application/pdf" if url.lower().split("?", 1)[0].endswith(".pdf") else "text/html"
178
180
  return FetchedPage(url=url, final_url=final_url, title=title, content=content.strip(), content_type=ctype)
179
181
 
@@ -209,6 +211,8 @@ class DirectBackend(FetchBackend):
209
211
  html = resp.text
210
212
  info = scan_head(html, resp.url)
211
213
  content = html_to_markdown(html, base_url=resp.url)
214
+ if is_js_shell_page(content):
215
+ raise RequestRejectedError(self.name, "page is a JavaScript app shell with no content")
212
216
  return FetchedPage(url, resp.url, info.title, content, "text/html")
213
217
  if ctype == "application/json" or ctype.endswith("+json"):
214
218
  try:
@@ -5,7 +5,7 @@ matches and that has a usable backend reads the URL. When none matches (or
5
5
  every matching reader fails), :func:`read_url` falls back to
6
6
  :func:`~prompture.tools.web.fetch.web_fetch`.
7
7
 
8
- Built-in order: YouTube, GitHub, Hacker News, arXiv, Wikipedia, Podcasts,
8
+ Built-in order: YouTube, GitHub, Hacker News, arXiv, Wikipedia, AniList, Podcasts,
9
9
  Feeds. Add your own with :func:`register_reader` (``first=True`` to take
10
10
  precedence over the built-ins).
11
11
  """
@@ -25,6 +25,7 @@ from ....resilience.errors import classify_error
25
25
  from .. import cache as web_cache
26
26
  from .._common import error_text, page
27
27
  from ..fetch import web_fetch
28
+ from .anilist import AniListReader, search_anilist
28
29
  from .arxiv import ArxivReader
29
30
  from .base import BaseReader, Reader, ReadResult, StepBackend
30
31
  from .feeds import FeedReader
@@ -270,6 +271,7 @@ def _register_builtins() -> None:
270
271
  HackerNewsReader(),
271
272
  ArxivReader(),
272
273
  WikipediaReader(),
274
+ AniListReader(),
273
275
  PodcastReader(),
274
276
  FeedReader(),
275
277
  ):
@@ -279,6 +281,7 @@ def _register_builtins() -> None:
279
281
  _register_builtins()
280
282
 
281
283
  __all__ = [
284
+ "AniListReader",
282
285
  "ArxivReader",
283
286
  "BaseReader",
284
287
  "FeedReader",
@@ -296,5 +299,6 @@ __all__ = [
296
299
  "matching_readers",
297
300
  "read_url",
298
301
  "register_reader",
302
+ "search_anilist",
299
303
  "unregister_reader",
300
304
  ]
@@ -0,0 +1,376 @@
1
+ """AniList reader: anime / manga / character pages → structured cast Markdown.
2
+
3
+ anilist.co renders in the browser, so fetching the page returns an app shell.
4
+ This reader asks AniList's public GraphQL API instead (keyless, rate-limited
5
+ per IP). A title page (``/anime/<id>``, ``/manga/<id>``, with or without
6
+ ``/characters``) becomes the title's details plus its characters in role
7
+ order, each with gender, age, description and voice actors; a
8
+ ``/character/<id>`` page becomes that character with the titles it appears in.
9
+ ``meta`` carries the same data as plain dicts for programmatic use.
10
+
11
+ Reader options: ``max_characters`` (default 50), ``spoilers`` (default
12
+ ``False`` — AniList ``~!spoiler!~`` passages are dropped) and
13
+ ``voice_language`` (``"JAPANESE"`` by default; ``None`` for every language).
14
+
15
+ :func:`search_anilist` finds titles by name, for callers that start from a
16
+ title rather than a URL.
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ import html
22
+ import re
23
+ import unicodedata
24
+ from typing import Any
25
+ from urllib.parse import urlsplit
26
+
27
+ import requests
28
+
29
+ from ....capabilities.http import proxies_for
30
+ from .._common import API_USER_AGENT, BackendUnavailableError, RequestRejectedError, default_session, host_of
31
+ from .._common import raise_for_status as _raise_for_status
32
+ from .base import BaseReader, ReadResult, StepBackend, clip
33
+
34
+ API = "https://graphql.anilist.co"
35
+ SITE = "https://anilist.co"
36
+ _PATH_RE = re.compile(r"^/(anime|manga|character)/(\d+)(?:/|$)")
37
+ _SPOILER_RE = re.compile(r"~!.*?!~", re.DOTALL)
38
+ _TAG_RE = re.compile(r"<br\s*/?>", re.IGNORECASE)
39
+ PAGE_SIZE = 25
40
+
41
+ _CHARACTER_FIELDS = """
42
+ id siteUrl gender age
43
+ name { full native alternative }
44
+ image { medium }
45
+ description(asHtml: false)
46
+ """
47
+
48
+ _MEDIA_QUERY = (
49
+ """
50
+ query ($id: Int, $page: Int, $perPage: Int, $lang: StaffLanguage) {
51
+ Media(id: $id) {
52
+ id type format status episodes chapters seasonYear siteUrl
53
+ title { romaji english native }
54
+ description(asHtml: false)
55
+ characters(page: $page, perPage: $perPage, sort: [ROLE, RELEVANCE, ID]) {
56
+ pageInfo { hasNextPage }
57
+ edges {
58
+ role
59
+ node {"""
60
+ + _CHARACTER_FIELDS
61
+ + """}
62
+ voiceActors(language: $lang) { name { full native } languageV2 }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ """
68
+ )
69
+
70
+ _CHARACTER_QUERY = (
71
+ """
72
+ query ($id: Int) {
73
+ Character(id: $id) {"""
74
+ + _CHARACTER_FIELDS
75
+ + """
76
+ media(perPage: 25, sort: [POPULARITY_DESC]) {
77
+ edges {
78
+ characterRole
79
+ node { id type format seasonYear siteUrl title { romaji english native } }
80
+ voiceActors { name { full native } languageV2 }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ """
86
+ )
87
+
88
+ _SEARCH_QUERY = """
89
+ query ($search: String, $type: MediaType, $perPage: Int) {
90
+ Page(perPage: $perPage) {
91
+ media(search: $search, type: $type, sort: [SEARCH_MATCH]) {
92
+ id type format episodes seasonYear siteUrl
93
+ title { romaji english native }
94
+ synonyms
95
+ }
96
+ }
97
+ }
98
+ """
99
+
100
+
101
+ def anilist_id(url: str) -> tuple[str, int] | None:
102
+ """``(kind, id)`` for an AniList title or character URL, else ``None``.
103
+
104
+ *kind* is ``"anime"``, ``"manga"`` or ``"character"``.
105
+ """
106
+ if host_of(url) not in ("anilist.co", "www.anilist.co"):
107
+ return None
108
+ try:
109
+ m = _PATH_RE.match(urlsplit(url).path)
110
+ except ValueError:
111
+ return None
112
+ return (m.group(1), int(m.group(2))) if m else None
113
+
114
+
115
+ def graphql(query: str, variables: dict[str, Any], *, session: Any = None, timeout: float = 20.0) -> dict[str, Any]:
116
+ """POST one query to the AniList API and return its ``data``."""
117
+ sess = session or default_session()
118
+ resp = sess.post(
119
+ API,
120
+ json={"query": query, "variables": variables},
121
+ headers={"Accept": "application/json", "Content-Type": "application/json", "User-Agent": API_USER_AGENT},
122
+ timeout=timeout,
123
+ proxies=proxies_for("anilist"),
124
+ )
125
+ _raise_for_status(resp, "anilist")
126
+ body = resp.json() or {}
127
+ if body.get("errors"):
128
+ message = str(body["errors"][0].get("message") or "unknown error")
129
+ if "not found" in message.lower():
130
+ raise RequestRejectedError("anilist", message)
131
+ raise BackendUnavailableError(f"AniList API error: {message}")
132
+ return body.get("data") or {}
133
+
134
+
135
+ def clean_description(text: str | None, *, spoilers: bool = False) -> str:
136
+ """AniList description text without HTML entities and (by default) spoilers."""
137
+ if not text:
138
+ return ""
139
+ if not spoilers:
140
+ text = _SPOILER_RE.sub("", text)
141
+ text = html.unescape(_TAG_RE.sub("\n", text.replace("~!", "").replace("!~", "")))
142
+ return re.sub(r"\n{3,}", "\n\n", text).strip()
143
+
144
+
145
+ def _title(media: dict[str, Any]) -> str:
146
+ t = media.get("title") or {}
147
+ return str(t.get("english") or t.get("romaji") or t.get("native") or "")
148
+
149
+
150
+ def _voices(entries: list[dict[str, Any]] | None) -> list[dict[str, str]]:
151
+ return [
152
+ {
153
+ "name": str((v.get("name") or {}).get("full") or ""),
154
+ "native": str((v.get("name") or {}).get("native") or ""),
155
+ "language": str(v.get("languageV2") or ""),
156
+ }
157
+ for v in entries or []
158
+ ]
159
+
160
+
161
+ def _character(node: dict[str, Any], *, spoilers: bool) -> dict[str, Any]:
162
+ name = node.get("name") or {}
163
+ return {
164
+ "id": node.get("id"),
165
+ "name": str(name.get("full") or ""),
166
+ "native": str(name.get("native") or ""),
167
+ "alternative": [a for a in name.get("alternative") or [] if a],
168
+ "gender": node.get("gender"),
169
+ "age": node.get("age"),
170
+ "description": clean_description(node.get("description"), spoilers=spoilers),
171
+ "image": (node.get("image") or {}).get("medium"),
172
+ "url": node.get("siteUrl"),
173
+ }
174
+
175
+
176
+ def _character_lines(c: dict[str, Any], head: str) -> list[str]:
177
+ facts = [f for f in (c.get("role"), c.get("gender"), f"age {c['age']}" if c.get("age") else None) if f]
178
+ lines = [f"{head} {c['name']}" + (f" ({c['native']})" if c.get("native") else "")]
179
+ if facts:
180
+ lines.append("- " + " · ".join(str(f) for f in facts))
181
+ if c.get("voice_actors"):
182
+ lines.append(
183
+ "- Voice: "
184
+ + ", ".join(v["name"] + (f" ({v['language']})" if v["language"] else "") for v in c["voice_actors"])
185
+ )
186
+ if c.get("description"):
187
+ lines.append("")
188
+ lines.append(clip(c["description"], 600))
189
+ lines.append("")
190
+ return lines
191
+
192
+
193
+ def fold_title(text: str) -> str:
194
+ """*text* with accents on Latin letters removed ("Shippūden" → "Shippuden").
195
+
196
+ AniList's search matches romanized titles without macrons and misses them
197
+ with. Marks on other scripts (a kana's dakuten) are kept.
198
+ """
199
+ out: list[str] = []
200
+ for ch in unicodedata.normalize("NFKD", text):
201
+ if unicodedata.combining(ch) and out and out[-1].isascii():
202
+ continue
203
+ out.append(ch)
204
+ return unicodedata.normalize("NFC", "".join(out))
205
+
206
+
207
+ def search_anilist(
208
+ query: str,
209
+ *,
210
+ media_type: str | None = "ANIME",
211
+ max_results: int = 5,
212
+ session: Any = None,
213
+ timeout: float = 20.0,
214
+ ) -> list[dict[str, Any]]:
215
+ """Titles matching *query*, best match first.
216
+
217
+ Each item has ``id``, ``type``, ``format``, ``episodes``, ``year``,
218
+ ``title`` (display), ``titles`` (romaji / english / native), ``synonyms``
219
+ and ``url`` — pass the ``url`` to ``read_url`` for the cast.
220
+
221
+ Accented Latin letters are folded first (AniList misses "Shippūden" but
222
+ finds "Shippuden"); the query as given is tried when that finds nothing.
223
+ """
224
+ variables: dict[str, Any] = {"perPage": max(1, min(max_results, 25))}
225
+ if media_type:
226
+ variables["type"] = media_type.upper()
227
+ media: list[dict[str, Any]] = []
228
+ for attempt in dict.fromkeys([fold_title(query), query]):
229
+ data = graphql(_SEARCH_QUERY, {**variables, "search": attempt}, session=session, timeout=timeout)
230
+ media = (data.get("Page") or {}).get("media") or []
231
+ if media:
232
+ break
233
+ return [
234
+ {
235
+ "id": m.get("id"),
236
+ "type": m.get("type"),
237
+ "format": m.get("format"),
238
+ "episodes": m.get("episodes"),
239
+ "year": m.get("seasonYear"),
240
+ "title": _title(m),
241
+ "titles": m.get("title") or {},
242
+ "synonyms": m.get("synonyms") or [],
243
+ "url": m.get("siteUrl"),
244
+ }
245
+ for m in media
246
+ ]
247
+
248
+
249
+ class AniListReader(BaseReader):
250
+ """AniList anime, manga and character pages via the public GraphQL API."""
251
+
252
+ name = "anilist"
253
+ description = "AniList titles and characters → cast with roles, gender, age and voice actors"
254
+
255
+ def can_handle(self, url: str) -> bool:
256
+ return anilist_id(url) is not None
257
+
258
+ def steps(self) -> list[StepBackend]:
259
+ return [
260
+ StepBackend(
261
+ "graphql",
262
+ self._via_graphql,
263
+ live=lambda: graphql("query { Media(id: 1) { id } }", {}),
264
+ )
265
+ ]
266
+
267
+ def _via_graphql(
268
+ self,
269
+ url: str,
270
+ *,
271
+ session: requests.Session | None = None,
272
+ max_characters: int = 50,
273
+ spoilers: bool = False,
274
+ voice_language: str | None = "JAPANESE",
275
+ **_: Any,
276
+ ) -> ReadResult:
277
+ parsed = anilist_id(url)
278
+ if parsed is None:
279
+ raise RequestRejectedError("graphql", "not an AniList title or character URL")
280
+ kind, item_id = parsed
281
+ if kind == "character":
282
+ return self._read_character(url, item_id, session=session, spoilers=spoilers)
283
+ return self._read_media(
284
+ url,
285
+ item_id,
286
+ session=session,
287
+ max_characters=max_characters,
288
+ spoilers=spoilers,
289
+ voice_language=voice_language,
290
+ )
291
+
292
+ def _read_media(
293
+ self,
294
+ url: str,
295
+ media_id: int,
296
+ *,
297
+ session: Any,
298
+ max_characters: int,
299
+ spoilers: bool,
300
+ voice_language: str | None,
301
+ ) -> ReadResult:
302
+ media: dict[str, Any] = {}
303
+ characters: list[dict[str, Any]] = []
304
+ page_no = 1
305
+ more = True
306
+ while more and len(characters) < max_characters:
307
+ variables: dict[str, Any] = {"id": media_id, "page": page_no, "perPage": PAGE_SIZE}
308
+ if voice_language:
309
+ variables["lang"] = voice_language.upper()
310
+ media = graphql(_MEDIA_QUERY, variables, session=session).get("Media") or {}
311
+ if not media:
312
+ raise RequestRejectedError("graphql", f"AniList has no title {media_id}")
313
+ block = media.get("characters") or {}
314
+ for edge in block.get("edges") or []:
315
+ c = _character(edge.get("node") or {}, spoilers=spoilers)
316
+ c["role"] = edge.get("role")
317
+ c["voice_actors"] = _voices(edge.get("voiceActors"))
318
+ characters.append(c)
319
+ more = bool((block.get("pageInfo") or {}).get("hasNextPage"))
320
+ page_no += 1
321
+ characters = characters[:max_characters]
322
+
323
+ title = _title(media)
324
+ facts = [media.get("format"), media.get("seasonYear")]
325
+ if media.get("episodes"):
326
+ facts.append(f"{media['episodes']} episodes")
327
+ lines = ["_" + " · ".join(str(f) for f in facts if f) + "_", ""]
328
+ about = clean_description(media.get("description"), spoilers=spoilers)
329
+ if about:
330
+ lines += [clip(about, 1200), ""]
331
+ lines += [f"## Characters ({len(characters)}{'+' if more else ''})", ""]
332
+ for c in characters:
333
+ lines += _character_lines(c, "###")
334
+ meta = {
335
+ "id": media.get("id"),
336
+ "type": media.get("type"),
337
+ "format": media.get("format"),
338
+ "status": media.get("status"),
339
+ "episodes": media.get("episodes"),
340
+ "chapters": media.get("chapters"),
341
+ "year": media.get("seasonYear"),
342
+ "titles": media.get("title") or {},
343
+ "page_url": media.get("siteUrl") or url,
344
+ "characters": characters,
345
+ "more_characters": more,
346
+ }
347
+ return ReadResult(url, title, "\n".join(lines).strip(), self.name, "cast", meta)
348
+
349
+ def _read_character(self, url: str, character_id: int, *, session: Any, spoilers: bool) -> ReadResult:
350
+ node = graphql(_CHARACTER_QUERY, {"id": character_id}, session=session).get("Character") or {}
351
+ if not node:
352
+ raise RequestRejectedError("graphql", f"AniList has no character {character_id}")
353
+ c = _character(node, spoilers=spoilers)
354
+ appearances = []
355
+ for edge in (node.get("media") or {}).get("edges") or []:
356
+ m = edge.get("node") or {}
357
+ appearances.append(
358
+ {
359
+ "id": m.get("id"),
360
+ "title": _title(m),
361
+ "type": m.get("type"),
362
+ "format": m.get("format"),
363
+ "year": m.get("seasonYear"),
364
+ "role": edge.get("characterRole"),
365
+ "url": m.get("siteUrl"),
366
+ "voice_actors": _voices(edge.get("voiceActors")),
367
+ }
368
+ )
369
+ lines = _character_lines(c, "##")[1:] # the title already names the character
370
+ if appearances:
371
+ lines += ["## Appears in", ""]
372
+ for a in appearances:
373
+ facts = ", ".join(str(f) for f in (a["format"], a["year"], a["role"]) if f)
374
+ lines.append(f"- {a['title']}" + (f" ({facts})" if facts else ""))
375
+ meta = {**c, "page_url": c.get("url") or url, "appearances": appearances}
376
+ return ReadResult(url, c["name"], "\n".join(lines).strip(), self.name, "character", meta)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prompture
3
- Version: 1.13.5.dev3
3
+ Version: 1.13.6.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
@@ -188,7 +188,7 @@ prompture mcp add --preset exa # mount MCP servers by name
188
188
  prompture skill install # teach your coding agent all of this
189
189
  ```
190
190
 
191
- - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
191
+ - **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, AniList, feeds and podcasts
192
192
  - **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
193
193
  - **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
194
194
  - **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
@@ -237,7 +237,7 @@ No setup: Desk runs `prompture companion` (Prompture 1.13+) on localhost for you
237
237
  - `generate_qa_dataset()` — synthetic JSONL datasets ready for Unsloth, Axolotl, TRL
238
238
 
239
239
  **Capabilities** — see [Capabilities](#capabilities)
240
- - Keyless `web_search`, `web_fetch` and `read_url` (YouTube, GitHub, HN, arXiv, Wikipedia, feeds, podcasts), with failover across keyed providers
240
+ - Keyless `web_search`, `web_fetch` and `read_url` (YouTube, GitHub, HN, arXiv, Wikipedia, AniList, feeds, podcasts), with failover across keyed providers
241
241
  - Local web cache with content-aware lifetimes: minutes for weather, prices and news, days for papers and transcripts
242
242
  - `transcribe` / `summarize_media` for video, podcasts and audio, with timestamped key points
243
243
  - `ResearchAgent` / `prompture research` — cited multi-source reports within fetch, token, cost and time budgets
@@ -2132,7 +2132,7 @@ agent = Agent("openai/gpt-4o", tools=["web:all"])
2132
2132
  |---|---|
2133
2133
  | `web_search` | `tavily` ▸ `exa` ▸ `serper` ▸ `brave` ▸ `jina` ▸ `searxng` ▸ `exa_mcp` (keyless) |
2134
2134
  | `web_fetch` | `jina_reader` (keyless) ▸ `direct` (safe GET + HTML to Markdown) |
2135
- | `read_url` | YouTube, GitHub, Hacker News, arXiv, Wikipedia, podcasts, RSS/Atom readers ▸ `web_fetch` |
2135
+ | `read_url` | YouTube, GitHub, Hacker News, arXiv, Wikipedia, AniList, podcasts, RSS/Atom readers ▸ `web_fetch` |
2136
2136
  | `search_platform` | YouTube (`yt-dlp`), GitHub, Hacker News (Algolia), arXiv |
2137
2137
 
2138
2138
  - Auth, quota and rate-limit errors fail over immediately; timeouts and 5xx
@@ -2155,7 +2155,7 @@ entry lives as long as that kind of content stays true:
2155
2155
  | Platform search (GitHub, HN, arXiv, YouTube) | 30 min |
2156
2156
  | Ordinary pages / searches within `recency_days <= 7` | 1 h |
2157
2157
  | Other searches | 6 h |
2158
- | Wikipedia, podcast episodes | 1 day |
2158
+ | Wikipedia, AniList, podcast episodes | 1 day |
2159
2159
  | Papers, PDFs, DOIs, commit-pinned GitHub files, YouTube transcripts | 7 days |
2160
2160
 
2161
2161
  Cached results say so (`route["cached"]`, `cache_age_s`, and "cached 3 min