prompture 1.13.5.dev2__tar.gz → 1.13.5.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/PKG-INFO +6 -4
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/README.md +5 -3
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/_version.py +2 -2
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/http.py +146 -2
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/logging.py +11 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/agent.py +23 -13
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/SKILL.md +6 -3
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/adapter.py +43 -1
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/config.py +14 -1
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/PKG-INFO +6 -4
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-driver/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-driver/references/driver-template.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-example/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-field/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-persona/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-test/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/add-tool/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/create-pr/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/run-tests/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.claude/skills/update-pricing/SKILL.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.env.copy +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.gitattributes +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/FUNDING.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/scripts/update_docs_version.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/scripts/update_wrapper_version.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/dev.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/documentation.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/pricing-freshness.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/publish.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/workflows/security.yml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.safety-project.ini +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/AGENTS.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/BREAKING_CHANGES.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/CLAUDE.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/CONTRIBUTING.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/LICENSE +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/MANIFEST.in +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/ROADMAP.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/SECURITY.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/VERSION +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/dev.ps1 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/dev.sh +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/llms.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/mypy_errors.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/README.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/README.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/pyproject.toml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/test.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/README.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/pyproject.toml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/test.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/__main__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/_internal/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/_internal/json_encoder.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/agent.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/assistant.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/async_agent.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/async_conversation.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/async_deep_agent.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/conversation.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/planner.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/subagents.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/summarizer.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep/vfs.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep_agent.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep_prompts.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/deep_state.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/live_events.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/persona.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/review_loop.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/simulated_tools.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/skill_miner.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/skills.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/tool_grammars.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/tools_schema.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/agents/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/aio/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/bridges/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/bridges/tukuy_backend.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/backends.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/builtin_checks.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/challenge.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/errors.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/health.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/probe.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/capabilities/url_safety.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/core.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/stores.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/checkpoints/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/citations/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/citations/core.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/citations/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/cli.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/doctor_cmd.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/formatters.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/mcp_cmd.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/research_cmd.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/runner.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/server.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/setup_cmd.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/skill_cmd.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/cli/transcribe_cmd.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/automations.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/calls.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/capacity.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/coding_tools.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/hook.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/live.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/local.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/memory.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/reuse.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/router.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/routing_policy.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/server.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/summary.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/companion/tool_routing.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/dedup.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/evol.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/filters.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/formats.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/schemas.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/seed.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/dataset/synth.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/doctor/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/doctor/core.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/doctor/providers.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_media_usage.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_ollama_options.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_openai_compat.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_openai_compat_stream.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_openai_responses.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_prompt_cache.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_prompted_tool_stream.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/_usage_reporting.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/aggregator_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/airllm_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/assemblyai_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_aggregator_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_airllm_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_azure_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_bedrock_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cachibot_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_claude_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cohere_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_deepseek_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_embedding_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_google_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_google_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_google_vertexai_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_grok_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_groq_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_hugging_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_img_gen_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_jina_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_jina_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_kev_decision_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_laya_decision_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_lmstudio_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_local_http_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_minimax_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mistral_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_modelscope_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_moonshot_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_ollama_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_compatible_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_moderation_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openai_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_openrouter_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_runway_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_stt_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_systemone_compatible_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_tts_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_typesafe_decision_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_video_gen_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/async_zai_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/audio_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/azure_config.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/azure_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/bedrock_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/bfl_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cachibot_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cartesia_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/claude_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cohere_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cohere_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/cohere_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/decision_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/decision_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/deepgram_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/deepgram_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/deepseek_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/driver_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/embedding_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/embedding_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/fal_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/fal_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/google_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/google_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/google_vertexai_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/grok_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/grok_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/grok_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/groq_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/hugging_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/img_gen_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/img_gen_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/jina_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/jina_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/job_runner.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/kev_decision_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/kling_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/kling_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/laya_decision_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/lipsync_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/lipsync_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/lmstudio_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/local_http_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/luma_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/media_capabilities.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/minimax_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/minimax_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mistral_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mistral_moderation_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/modelscope_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/moderation_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/moderation_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/moonshot_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/muapi_aggregator_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/music_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/music_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mxbai_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/mxbai_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/nomic_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/ollama_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/ollama_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_compatible_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_moderation_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_stt_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openai_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/openrouter_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/pika_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/provider_branding.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/provider_descriptors.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/rerank_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/rerank_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_audio_transform_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_capabilities.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_tts_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/runway_video_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/stability_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/stt_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/systemone_compatible_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/tts_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/typesafe_decision_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/vertex_img_gen_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/video_gen_base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/video_gen_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/vision_helpers.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/voyage_embedding_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/voyage_rerank_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/drivers/zai_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/faithfulness.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/judge.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/pairwise.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/eval/self_consistency.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/exceptions.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/context.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/context_eval.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/data/document_qa_policies.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/data/extraction_contacts.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/data/tool_task_inventory.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/fixtures.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/gates.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/harness.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/candidates.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/optimizer.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/promotion.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/improve/scorecard.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/integration.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/outcomes.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/policy.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/sandbox.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/scoring.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/critique.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/direct.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/strategies/retrieve.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/execution/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/_usage.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/async_core.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/code_extraction.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/core.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/few_shot.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/fields.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/reasoning.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/strategy.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/streaming.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/tools.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/tukuy_bridge.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/extraction/validator.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/anthropic_format.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/gemini_format.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/openai_format.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/reasoning_cache.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/gateway/responses_format.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/async_groups.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/consensus.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/debate.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/fusion.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/groups.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/groups/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/enhance.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/negative.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/set_planner.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/imaging/style_presets.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/accounts.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/billing.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/budget.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/cache.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/callbacks.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/capabilities.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_activity.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_events.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_readers.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_specs.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agent_usage.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/coding_agents.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/compression.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/cost_mixin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/credentials.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/discovery.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/environment.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/ledger.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/media_pricing.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/media_rates.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/model_rates.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/otel.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/pricing.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/provider_env.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rate_limits.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/anthropic.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/azure.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/bedrock.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/cerebras.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/cohere.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/deepinfra.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/deepseek.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/fireworks.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/google.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/google_vertexai.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/groq.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/jina.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/kev.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/laya.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/mistral.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/mixedbread.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/moonshot.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/nomic.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/nvidia.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/openai.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/openrouter.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/perplexity.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/sambanova.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/siliconflow.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/together.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/typesafe.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/voyage.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/rates/xai.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/session.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/settings.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/token_counting.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/tracker.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/tukuy_backend.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/infra/updates.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/chunking.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/detect.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/document.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/csv_parser.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/docx.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/html.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/markdown.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/pdf.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/ingestion/parsers/xlsx.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/integrations/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/integrations/mcp_bridge.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/integrations/tukuy_bridge.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/jobs.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/core.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/stores.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/kg/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/client.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/health.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/hub.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/importers.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/server.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/mcp/tools.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/agent_tools.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/audio.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/hosting.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/image.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/errors.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/ffmpeg.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/groq_stt.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/health.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/sources.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/summarize.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/tools.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/understand/transcribe.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/media/video.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/01-why-prompture.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/02-installation.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/03-quickstart.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/04-toon-input.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/05-test-harness.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/06-stability.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pages/07-migration.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/history.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/serialization.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/persistence/store.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/pipeline.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/resolver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/pipeline/routing.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/_aliases.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/audio_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/cloud_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/decision_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/extras_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/google_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/image_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/local_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/openai_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/builtins/video_plugin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/plugins/discovery.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/py.typed +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/character.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/chunker_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/contextual.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/markdown.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/recursive.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/semantic.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/chunkers/token.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/documents.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loader_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/csv_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/docx_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/epub_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/html_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/json_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/markdown_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/pdf_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/text_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/loaders/xlsx_loader.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/pipeline.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/_fusion.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/hybrid.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/hyde.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/mmr.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/multi_query.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/retriever_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/similarity.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/retrievers/step_back.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/chroma.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/faiss.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/pgvector.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/pinecone.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/qdrant.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/rag/vectorstores/weaviate.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/detector.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/evaluator.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/refusal/markers.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/budget.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/events.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/planner.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/ranking.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/report.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/synthesis.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/research/tools.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/async_driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/backoff.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/breaker.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/driver.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/errors.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/explain.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/headroom.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/keys.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/router.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/strategies.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/resilience/virtual.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/generator.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/README.md.j2 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/config.py.j2 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/env.example.j2 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/main.py.j2 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/models.py.j2 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/security/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/security/injection.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/security/redaction.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/core.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/project.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/stores.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/session_memory/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/dev.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/finance.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/mcp.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/media.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/models.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/search.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/skill/data/references/web.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/environment.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/memory.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/scheduler.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/swarm.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/swarm_agent.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/swarm/types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/testing/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/testing/driver_contract.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/builtin.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/cli/health.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/code_exec.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/named.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/packs.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/_common.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/_mcp_http.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/_types.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/cache.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/fetch.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/health.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/html2md.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/platform.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/_media.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/arxiv.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/base.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/feeds.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/github.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/hackernews.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/podcasts.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/wikipedia.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/readers/youtube.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/search.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web/toolkit.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/tools/web_search.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/__init__.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/architect.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/engine.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/errors.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/model.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/nodes.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/recovery.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/references.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/registry.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/scheduler.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture/workflow/state.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/SOURCES.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/dependency_links.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/entry_points.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/requires.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/scm_file_list.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture.egg-info/top_level.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/prompture_cost_tracking.md +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/pyproject.toml +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/requirements.txt +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/scripts/check_pricing_freshness.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/setup.cfg +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/specs/basic_extraction.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/specs/schema_validation.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/specs/strategy_comparison.json +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/test.py +0 -0
- {prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/test_version_diagnosis.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: prompture
|
|
3
|
-
Version: 1.13.5.
|
|
3
|
+
Version: 1.13.5.dev3
|
|
4
4
|
Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
|
|
5
5
|
Author-email: Juan Denis <juan@vene.co>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -164,8 +164,10 @@ print(person.name) # Maria
|
|
|
164
164
|
|
|
165
165
|
## Agents That Can Search, Read, Watch and Listen
|
|
166
166
|
|
|
167
|
-
Prompture also gives agents working capabilities
|
|
168
|
-
API key
|
|
167
|
+
Prompture also gives agents working capabilities. **Web search and reading
|
|
168
|
+
need no API key at all**; keys only raise their limits and quality. Model
|
|
169
|
+
calls, transcription and some packs use the keys you already have, and
|
|
170
|
+
`prompture doctor` tells you exactly what's missing.
|
|
169
171
|
|
|
170
172
|
```python
|
|
171
173
|
from prompture import Agent
|
|
@@ -187,7 +189,7 @@ prompture skill install # teach your coding agent all of
|
|
|
187
189
|
```
|
|
188
190
|
|
|
189
191
|
- **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
|
|
190
|
-
- **Fails over
|
|
192
|
+
- **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
|
|
191
193
|
- **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
|
|
192
194
|
- **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
|
|
193
195
|
|
|
@@ -47,8 +47,10 @@ print(person.name) # Maria
|
|
|
47
47
|
|
|
48
48
|
## Agents That Can Search, Read, Watch and Listen
|
|
49
49
|
|
|
50
|
-
Prompture also gives agents working capabilities
|
|
51
|
-
API key
|
|
50
|
+
Prompture also gives agents working capabilities. **Web search and reading
|
|
51
|
+
need no API key at all**; keys only raise their limits and quality. Model
|
|
52
|
+
calls, transcription and some packs use the keys you already have, and
|
|
53
|
+
`prompture doctor` tells you exactly what's missing.
|
|
52
54
|
|
|
53
55
|
```python
|
|
54
56
|
from prompture import Agent
|
|
@@ -70,7 +72,7 @@ prompture skill install # teach your coding agent all of
|
|
|
70
72
|
```
|
|
71
73
|
|
|
72
74
|
- **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
|
|
73
|
-
- **Fails over
|
|
75
|
+
- **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
|
|
74
76
|
- **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
|
|
75
77
|
- **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
|
|
76
78
|
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.13.5.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 13, 5, '
|
|
21
|
+
__version__ = version = '1.13.5.dev3'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 13, 5, 'dev3')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -5,19 +5,31 @@
|
|
|
5
5
|
``max_bytes``, detects challenge interstitials, and raises typed errors that
|
|
6
6
|
``classify_error`` understands. Proxies come from ``PROMPTURE_<BACKEND>_PROXY``
|
|
7
7
|
or ``PROMPTURE_PROXY``.
|
|
8
|
+
|
|
9
|
+
Validating a hostname and then connecting to it resolves DNS twice, and a
|
|
10
|
+
hostile DNS server can answer with a public address the first time and a
|
|
11
|
+
private one the second (DNS rebinding). :class:`GuardedHTTPAdapter` closes that
|
|
12
|
+
gap: it checks the address the socket *actually connected to*, before any
|
|
13
|
+
request bytes are sent. Connections to a configured proxy are exempt, since
|
|
14
|
+
the peer is then the proxy itself.
|
|
8
15
|
"""
|
|
9
16
|
|
|
10
17
|
from __future__ import annotations
|
|
11
18
|
|
|
19
|
+
import threading
|
|
20
|
+
from contextvars import ContextVar
|
|
12
21
|
from dataclasses import dataclass, field
|
|
13
22
|
from typing import Any
|
|
14
23
|
from urllib.parse import urljoin
|
|
15
24
|
|
|
16
25
|
import requests
|
|
26
|
+
from requests.adapters import HTTPAdapter
|
|
27
|
+
from urllib3.connection import HTTPConnection, HTTPSConnection
|
|
28
|
+
from urllib3.connectionpool import HTTPConnectionPool, HTTPSConnectionPool
|
|
17
29
|
|
|
18
30
|
from .challenge import is_challenge_page
|
|
19
31
|
from .errors import ChallengePageError, HTTPStatusError, ResponseTooLargeError, UnsafeURLError
|
|
20
|
-
from .url_safety import normalize_public_http_url
|
|
32
|
+
from .url_safety import allow_private_default, is_public_ip, normalize_public_http_url
|
|
21
33
|
|
|
22
34
|
BROWSER_USER_AGENT = (
|
|
23
35
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
|
@@ -54,6 +66,92 @@ def proxies_for(backend: str | None = None) -> dict[str, str] | None:
|
|
|
54
66
|
return {"http": proxy, "https": proxy} if proxy else None
|
|
55
67
|
|
|
56
68
|
|
|
69
|
+
# ---------------------------------------------------------------------------
|
|
70
|
+
# Connect-time address check (DNS rebinding)
|
|
71
|
+
# ---------------------------------------------------------------------------
|
|
72
|
+
|
|
73
|
+
# Per-request override of PROMPTURE_WEB_ALLOW_PRIVATE, set by safe_get.
|
|
74
|
+
_allow_private: ContextVar[bool | None] = ContextVar("prompture_allow_private", default=None)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _check_peer(conn: Any, sock: Any) -> None:
|
|
78
|
+
"""Refuse a socket that ended up connected to a non-public address."""
|
|
79
|
+
if getattr(conn, "proxy", None) is not None or getattr(conn, "_tunnel_host", None):
|
|
80
|
+
return # the peer is the configured proxy, not the target
|
|
81
|
+
allow = _allow_private.get()
|
|
82
|
+
if allow is None:
|
|
83
|
+
allow = allow_private_default()
|
|
84
|
+
if allow:
|
|
85
|
+
return
|
|
86
|
+
try:
|
|
87
|
+
peer = sock.getpeername()[0]
|
|
88
|
+
except (OSError, IndexError):
|
|
89
|
+
return # not an inet socket; nothing to check
|
|
90
|
+
if not is_public_ip(peer):
|
|
91
|
+
sock.close()
|
|
92
|
+
raise UnsafeURLError(f"{getattr(conn, 'host', 'host')} connected to non-public address {peer}")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class _GuardedHTTPConnection(HTTPConnection):
|
|
96
|
+
def _new_conn(self) -> Any:
|
|
97
|
+
sock = super()._new_conn()
|
|
98
|
+
_check_peer(self, sock)
|
|
99
|
+
return sock
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class _GuardedHTTPSConnection(HTTPSConnection):
|
|
103
|
+
def _new_conn(self) -> Any:
|
|
104
|
+
sock = super()._new_conn()
|
|
105
|
+
_check_peer(self, sock)
|
|
106
|
+
return sock
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class _GuardedHTTPConnectionPool(HTTPConnectionPool):
|
|
110
|
+
ConnectionCls = _GuardedHTTPConnection
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class _GuardedHTTPSConnectionPool(HTTPSConnectionPool):
|
|
114
|
+
ConnectionCls = _GuardedHTTPSConnection # type: ignore[assignment]
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class GuardedHTTPAdapter(HTTPAdapter):
|
|
118
|
+
"""``requests`` adapter that refuses connections to non-public addresses.
|
|
119
|
+
|
|
120
|
+
The check runs on the connected socket, so it holds even when DNS answers
|
|
121
|
+
differently between validation and connection.
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
def init_poolmanager(self, *args: Any, **kwargs: Any) -> None:
|
|
125
|
+
super().init_poolmanager(*args, **kwargs)
|
|
126
|
+
self.poolmanager.pool_classes_by_scheme = { # type: ignore[attr-defined]
|
|
127
|
+
"http": _GuardedHTTPConnectionPool,
|
|
128
|
+
"https": _GuardedHTTPSConnectionPool,
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def guard_session(session: requests.Session) -> requests.Session:
|
|
133
|
+
"""Mount :class:`GuardedHTTPAdapter` on *session* (keeping its retry policy); returns it."""
|
|
134
|
+
for prefix in ("http://", "https://"):
|
|
135
|
+
current = session.get_adapter(prefix)
|
|
136
|
+
if not isinstance(current, GuardedHTTPAdapter):
|
|
137
|
+
retries = getattr(current, "max_retries", 0)
|
|
138
|
+
session.mount(prefix, GuardedHTTPAdapter(max_retries=retries))
|
|
139
|
+
return session
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
_shared: requests.Session | None = None
|
|
143
|
+
_shared_lock = threading.Lock()
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def guarded_session() -> requests.Session:
|
|
147
|
+
"""Process-wide guarded session used when :func:`safe_get` gets none."""
|
|
148
|
+
global _shared
|
|
149
|
+
with _shared_lock:
|
|
150
|
+
if _shared is None:
|
|
151
|
+
_shared = guard_session(requests.Session())
|
|
152
|
+
return _shared
|
|
153
|
+
|
|
154
|
+
|
|
57
155
|
@dataclass
|
|
58
156
|
class SafeResponse:
|
|
59
157
|
"""Body and metadata of a completed :func:`safe_get`."""
|
|
@@ -122,10 +220,56 @@ def safe_get(
|
|
|
122
220
|
backend: Backend name used to pick a per-backend proxy.
|
|
123
221
|
raise_for_status: Raise :class:`HTTPStatusError` on non-2xx.
|
|
124
222
|
"""
|
|
125
|
-
|
|
223
|
+
if allow_private is None:
|
|
224
|
+
allow_private = allow_private_default()
|
|
225
|
+
if isinstance(session, requests.Session):
|
|
226
|
+
http: Any = guard_session(session)
|
|
227
|
+
elif session is not None:
|
|
228
|
+
http = session # a duck-typed client (tests); URL checks still apply
|
|
229
|
+
elif allow_private:
|
|
230
|
+
# Keep private-network connections out of the shared pool.
|
|
231
|
+
http = guard_session(requests.Session())
|
|
232
|
+
else:
|
|
233
|
+
http = guarded_session()
|
|
126
234
|
merged = {**DEFAULT_HEADERS, **(headers or {})}
|
|
127
235
|
proxies = proxies_for(backend)
|
|
128
236
|
current = normalize_public_http_url(url, allow_private=allow_private)
|
|
237
|
+
token = _allow_private.set(allow_private)
|
|
238
|
+
try:
|
|
239
|
+
return _get_with_redirects(
|
|
240
|
+
http,
|
|
241
|
+
current,
|
|
242
|
+
headers=merged,
|
|
243
|
+
params=params,
|
|
244
|
+
timeout=timeout,
|
|
245
|
+
proxies=proxies,
|
|
246
|
+
max_bytes=max_bytes,
|
|
247
|
+
max_redirects=max_redirects,
|
|
248
|
+
allow_private=allow_private,
|
|
249
|
+
check_challenge=check_challenge,
|
|
250
|
+
truncate=truncate,
|
|
251
|
+
raise_for_status=raise_for_status,
|
|
252
|
+
)
|
|
253
|
+
finally:
|
|
254
|
+
_allow_private.reset(token)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def _get_with_redirects(
|
|
258
|
+
http: Any,
|
|
259
|
+
current: str,
|
|
260
|
+
*,
|
|
261
|
+
headers: dict[str, str],
|
|
262
|
+
params: dict[str, Any] | None,
|
|
263
|
+
timeout: float,
|
|
264
|
+
proxies: dict[str, str] | None,
|
|
265
|
+
max_bytes: int,
|
|
266
|
+
max_redirects: int,
|
|
267
|
+
allow_private: bool,
|
|
268
|
+
check_challenge: bool,
|
|
269
|
+
truncate: bool,
|
|
270
|
+
raise_for_status: bool,
|
|
271
|
+
) -> SafeResponse:
|
|
272
|
+
merged = headers
|
|
129
273
|
history: list[str] = []
|
|
130
274
|
query = params
|
|
131
275
|
|
|
@@ -21,6 +21,7 @@ Usage::
|
|
|
21
21
|
|
|
22
22
|
from __future__ import annotations
|
|
23
23
|
|
|
24
|
+
import contextlib
|
|
24
25
|
import json
|
|
25
26
|
import logging
|
|
26
27
|
from datetime import datetime, timezone
|
|
@@ -43,6 +44,16 @@ class SecretScrubbingFilter(logging.Filter):
|
|
|
43
44
|
if scrubbed != message:
|
|
44
45
|
record.msg = scrubbed
|
|
45
46
|
record.args = None
|
|
47
|
+
# Formatters append the traceback after the message, and exception
|
|
48
|
+
# text often carries the very URL or key we just scrubbed. Render it
|
|
49
|
+
# now and store the scrubbed copy; formatters reuse ``exc_text``.
|
|
50
|
+
if record.exc_info and not record.exc_text:
|
|
51
|
+
with contextlib.suppress(Exception):
|
|
52
|
+
record.exc_text = logging.Formatter().formatException(record.exc_info)
|
|
53
|
+
if record.exc_text:
|
|
54
|
+
record.exc_text = scrub_secrets(record.exc_text)
|
|
55
|
+
if record.stack_info:
|
|
56
|
+
record.stack_info = scrub_secrets(record.stack_info)
|
|
46
57
|
return True
|
|
47
58
|
|
|
48
59
|
|
|
@@ -86,8 +86,11 @@ def default_research_model() -> str | None:
|
|
|
86
86
|
cheap model of the first configured provider in
|
|
87
87
|
:data:`DEFAULT_MODEL_CANDIDATES`. ``None`` when nothing is configured.
|
|
88
88
|
"""
|
|
89
|
+
from ..infra.credentials import get_config_value
|
|
90
|
+
|
|
89
91
|
for var in ("PROMPTURE_RESEARCH_MODEL", "PROMPTURE_DEFAULT_MODEL"):
|
|
90
|
-
|
|
92
|
+
# Env first, then the credential store, where `prompture setup` saves the default model.
|
|
93
|
+
value = (get_config_value(var) or "").strip()
|
|
91
94
|
if value:
|
|
92
95
|
return value
|
|
93
96
|
try:
|
|
@@ -364,6 +367,10 @@ class _ResearchRun:
|
|
|
364
367
|
self.fetched: dict[str, _Fetched] = {}
|
|
365
368
|
self._lock = threading.Lock()
|
|
366
369
|
self._emit_lock = threading.Lock()
|
|
370
|
+
# Packs run in parallel, but under a token/cost budget their LLM calls
|
|
371
|
+
# take turns: checking the budget and recording usage happen under this
|
|
372
|
+
# lock, so concurrent calls can't all pass the check and overshoot.
|
|
373
|
+
self._llm_budget_lock = threading.Lock()
|
|
367
374
|
self.search_ok = 0
|
|
368
375
|
self.search_failed = 0
|
|
369
376
|
|
|
@@ -494,18 +501,21 @@ class _ResearchRun:
|
|
|
494
501
|
)
|
|
495
502
|
|
|
496
503
|
def _pack_one(self, pack: str) -> None:
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
504
|
+
budgeted = self.tracker.budget.max_tokens is not None or self.tracker.budget.max_cost is not None
|
|
505
|
+
guard = self._llm_budget_lock if budgeted else contextlib.nullcontext()
|
|
506
|
+
with guard:
|
|
507
|
+
if not self.tracker.llm_budget_left():
|
|
508
|
+
return
|
|
509
|
+
try:
|
|
510
|
+
text, usage = _call_with_deadline(
|
|
511
|
+
lambda: self.agent._run_pack(pack, self.question), self.tracker.gather_remaining()
|
|
512
|
+
)
|
|
513
|
+
except Exception as exc:
|
|
514
|
+
with self._lock:
|
|
515
|
+
self.routes.append({"op": "pack", "target": pack, "ok": False, "error": _short_error(exc)})
|
|
516
|
+
self.emit("search", f"Pack {pack} unavailable", pack=pack, ok=False)
|
|
517
|
+
return
|
|
518
|
+
self.tracker.record_usage(usage)
|
|
509
519
|
text = (text or "").strip()
|
|
510
520
|
with self._lock:
|
|
511
521
|
self.routes.append({"op": "pack", "target": pack, "ok": bool(text), "served_by": f"pack:{pack}"})
|
|
@@ -7,9 +7,12 @@ description: Use when you need to search the web, read a URL (pages, PDFs, YouTu
|
|
|
7
7
|
|
|
8
8
|
Prompture gives agents working capabilities — search, read, watch, listen,
|
|
9
9
|
call models and external tools — and tells you exactly what works on this
|
|
10
|
-
machine and how to fix what doesn't.
|
|
11
|
-
only raise limits or quality.
|
|
12
|
-
|
|
10
|
+
machine and how to fix what doesn't. Web search and URL reading have keyless
|
|
11
|
+
defaults; keys only raise their limits or quality. Model calls, transcription,
|
|
12
|
+
packs and MCP servers need the provider, key, package or binary that doctor
|
|
13
|
+
names. Where a capability has more than one permitted backend, it fails over
|
|
14
|
+
and reports which one served the request and whether a fallback happened.
|
|
15
|
+
Transcription never moves audio to a second provider without explicit consent.
|
|
13
16
|
|
|
14
17
|
Install: `pip install prompture` (extras: `prompture[web]`, `prompture[media]`,
|
|
15
18
|
`prompture[mcp]`, `prompture[all]`).
|
|
@@ -580,6 +580,10 @@ class CLITool:
|
|
|
580
580
|
secrets never have to live in a config file. Values are never logged.
|
|
581
581
|
install_hint: Fix hint when the binary is missing.
|
|
582
582
|
prefix: Tool-name prefix (defaults to *name* with ``-`` → ``_``).
|
|
583
|
+
trusted: Whether health checks may execute the binary. Tools from a
|
|
584
|
+
project's ``.prompture/tools.*`` are untrusted: a repository could
|
|
585
|
+
point ``command`` / ``version_args`` at arbitrary code, so doctor
|
|
586
|
+
and ``cli:all`` only locate their executable and never run it.
|
|
583
587
|
"""
|
|
584
588
|
|
|
585
589
|
name: str
|
|
@@ -593,6 +597,7 @@ class CLITool:
|
|
|
593
597
|
env: dict[str, str] = field(default_factory=dict)
|
|
594
598
|
install_hint: str | None = None
|
|
595
599
|
prefix: str | None = None
|
|
600
|
+
trusted: bool = True
|
|
596
601
|
|
|
597
602
|
def __post_init__(self) -> None:
|
|
598
603
|
if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_.-]{0,40}", self.name or ""):
|
|
@@ -730,10 +735,16 @@ class CLITool:
|
|
|
730
735
|
return _ON_WINDOWS and path.lower().endswith((".bat", ".cmd"))
|
|
731
736
|
|
|
732
737
|
def is_active(self) -> bool:
|
|
733
|
-
"""True when the binary exists and its version probe succeeds.
|
|
738
|
+
"""True when the binary exists and (for trusted tools) its version probe succeeds.
|
|
739
|
+
|
|
740
|
+
Untrusted, project-defined tools are never executed here; finding the
|
|
741
|
+
executable is enough.
|
|
742
|
+
"""
|
|
734
743
|
path = self._resolve()
|
|
735
744
|
if path is None or self._is_batch_launcher(path):
|
|
736
745
|
return False
|
|
746
|
+
if not self.trusted:
|
|
747
|
+
return True
|
|
737
748
|
return cached_probe(self.command, self.version_args, hint=self.install_hint).ok
|
|
738
749
|
|
|
739
750
|
def check(self, live: bool = False) -> HealthStatus:
|
|
@@ -750,6 +761,8 @@ class CLITool:
|
|
|
750
761
|
fix_hint=f"Point `command` at the real executable for {self.name}.",
|
|
751
762
|
details={**details, "path": path},
|
|
752
763
|
)
|
|
764
|
+
if not self.trusted:
|
|
765
|
+
return self._untrusted_check(row_name, path, details)
|
|
753
766
|
probe = cached_probe(self.command, self.version_args, hint=self.install_hint or install_hint(self.command))
|
|
754
767
|
details.update(path=probe.path, version=probe.version if probe.ok else None, exit_code=probe.exit_code)
|
|
755
768
|
if not probe.ok:
|
|
@@ -789,6 +802,35 @@ class CLITool:
|
|
|
789
802
|
details=details,
|
|
790
803
|
) # type: ignore[arg-type]
|
|
791
804
|
|
|
805
|
+
def _untrusted_check(self, row_name: str, path: str | None, details: dict[str, Any]) -> HealthStatus:
|
|
806
|
+
"""Health row for a project-defined tool: locate the executable, never run it."""
|
|
807
|
+
details.update(path=path, trusted=False)
|
|
808
|
+
if path is None:
|
|
809
|
+
return HealthStatus(
|
|
810
|
+
row_name,
|
|
811
|
+
"missing",
|
|
812
|
+
category="tools",
|
|
813
|
+
message=f"`{self.command}` not found on PATH",
|
|
814
|
+
fix_hint=self.install_hint or install_hint(self.command),
|
|
815
|
+
details=details,
|
|
816
|
+
)
|
|
817
|
+
_, missing = self._injected_env()
|
|
818
|
+
fix = None
|
|
819
|
+
status = "ok"
|
|
820
|
+
if missing:
|
|
821
|
+
status = "degraded"
|
|
822
|
+
fix = "Set " + ", ".join(sorted(set(missing))) + f" (referenced by {self.name} env)."
|
|
823
|
+
details["missing_env"] = sorted(set(missing))
|
|
824
|
+
return HealthStatus(
|
|
825
|
+
row_name,
|
|
826
|
+
status, # type: ignore[arg-type]
|
|
827
|
+
category="tools",
|
|
828
|
+
active_backend=path,
|
|
829
|
+
message=f"found at {path}; project-defined, so not executed by health checks",
|
|
830
|
+
fix_hint=fix,
|
|
831
|
+
details=details,
|
|
832
|
+
)
|
|
833
|
+
|
|
792
834
|
# -- execution ------------------------------------------------------
|
|
793
835
|
|
|
794
836
|
def run(self, command: str, **params: Any) -> CLIResult:
|
|
@@ -133,7 +133,9 @@ def load_cli_tools(
|
|
|
133
133
|
|
|
134
134
|
Returns:
|
|
135
135
|
Valid tools, earlier files winning on name collisions. Problems are
|
|
136
|
-
logged and kept for :func:`config_errors`; this never raises.
|
|
136
|
+
logged and kept for :func:`config_errors`; this never raises. Tools
|
|
137
|
+
found by the default search outside ``~/.prompture`` (i.e. in a
|
|
138
|
+
project) are marked untrusted, so health checks never execute them.
|
|
137
139
|
"""
|
|
138
140
|
if paths is None:
|
|
139
141
|
files = config_paths(cwd, include_home=include_home)
|
|
@@ -155,7 +157,9 @@ def load_cli_tools(
|
|
|
155
157
|
continue
|
|
156
158
|
parsed, errs = parse_cli_tools(data, source=str(path))
|
|
157
159
|
errors.extend(errs)
|
|
160
|
+
trusted = paths is not None or _is_user_config(path)
|
|
158
161
|
for tool in parsed:
|
|
162
|
+
tool.trusted = trusted
|
|
159
163
|
tools.setdefault(tool.name, tool)
|
|
160
164
|
for err in errors:
|
|
161
165
|
logger.warning("CLI tool config: %s", err)
|
|
@@ -164,6 +168,15 @@ def load_cli_tools(
|
|
|
164
168
|
return list(tools.values())
|
|
165
169
|
|
|
166
170
|
|
|
171
|
+
def _is_user_config(path: Path) -> bool:
|
|
172
|
+
"""True for files under the user's own ``~/.prompture`` directory."""
|
|
173
|
+
try:
|
|
174
|
+
user_dir = (Path.home() / ".prompture").resolve()
|
|
175
|
+
return path.resolve().is_relative_to(user_dir)
|
|
176
|
+
except (OSError, ValueError):
|
|
177
|
+
return False
|
|
178
|
+
|
|
179
|
+
|
|
167
180
|
def config_errors() -> list[str]:
|
|
168
181
|
"""Problems found by the last :func:`load_cli_tools` call."""
|
|
169
182
|
with _errors_lock:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: prompture
|
|
3
|
-
Version: 1.13.5.
|
|
3
|
+
Version: 1.13.5.dev3
|
|
4
4
|
Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
|
|
5
5
|
Author-email: Juan Denis <juan@vene.co>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -164,8 +164,10 @@ print(person.name) # Maria
|
|
|
164
164
|
|
|
165
165
|
## Agents That Can Search, Read, Watch and Listen
|
|
166
166
|
|
|
167
|
-
Prompture also gives agents working capabilities
|
|
168
|
-
API key
|
|
167
|
+
Prompture also gives agents working capabilities. **Web search and reading
|
|
168
|
+
need no API key at all**; keys only raise their limits and quality. Model
|
|
169
|
+
calls, transcription and some packs use the keys you already have, and
|
|
170
|
+
`prompture doctor` tells you exactly what's missing.
|
|
169
171
|
|
|
170
172
|
```python
|
|
171
173
|
from prompture import Agent
|
|
@@ -187,7 +189,7 @@ prompture skill install # teach your coding agent all of
|
|
|
187
189
|
```
|
|
188
190
|
|
|
189
191
|
- **Web:** keyless search, fetch and readers for YouTube, GitHub, Hacker News, arXiv, Wikipedia, feeds and podcasts
|
|
190
|
-
- **Fails over
|
|
192
|
+
- **Fails over instead of failing:** search, fetch and the readers try the next backend on auth, quota or rate-limit errors and tell you which one served the result
|
|
191
193
|
- **Cached locally:** repeat searches and static pages come back instantly; weather, prices and news expire in minutes, papers and transcripts in days
|
|
192
194
|
- **Safe by default:** public URLs only, size caps, secret scrubbing, and audio never goes to a second provider without your consent
|
|
193
195
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml
RENAMED
|
File without changes
|
{prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml
RENAMED
|
File without changes
|
{prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_json/llm_to_json/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prompture-1.13.5.dev2 → prompture-1.13.5.dev3}/packages/llm_to_toon/llm_to_toon/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|