prompture 1.13.6.dev1__tar.gz → 1.13.7.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.
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/PKG-INFO +52 -3
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/README.md +48 -1
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/_version.py +2 -2
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/agent.py +21 -1
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/async_agent.py +21 -1
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/async_conversation.py +56 -70
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/async_deep_agent.py +6 -4
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/conversation.py +49 -65
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/summarizer.py +88 -8
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep_agent.py +6 -4
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep_prompts.py +35 -12
- prompture-1.13.7.dev1/prompture/agents/tool_context.py +458 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/cli.py +1 -0
- prompture-1.13.7.dev1/prompture/cli/delegate_cmd.py +348 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/context.py +19 -0
- prompture-1.13.7.dev1/prompture/games/__init__.py +48 -0
- prompture-1.13.7.dev1/prompture/games/base.py +365 -0
- prompture-1.13.7.dev1/prompture/games/chess/__init__.py +41 -0
- prompture-1.13.7.dev1/prompture/games/chess/harness.py +190 -0
- prompture-1.13.7.dev1/prompture/games/chess/motifs.py +356 -0
- prompture-1.13.7.dev1/prompture/games/chess/puzzles.py +103 -0
- prompture-1.13.7.dev1/prompture/games/connect4.py +306 -0
- prompture-1.13.7.dev1/prompture/games/match.py +100 -0
- prompture-1.13.7.dev1/prompture/games/othello.py +307 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/PKG-INFO +52 -3
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/SOURCES.txt +11 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/requires.txt +4 -1
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/scm_file_list.json +15 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/pyproject.toml +3 -1
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-driver/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-driver/references/driver-template.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-example/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-field/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-persona/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-test/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/add-tool/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/create-pr/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/run-tests/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.claude/skills/update-pricing/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.env.copy +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.gitattributes +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/FUNDING.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/scripts/update_docs_version.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/scripts/update_wrapper_version.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/dev.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/documentation.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/pricing-freshness.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/publish.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.github/workflows/security.yml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/.safety-project.ini +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/AGENTS.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/BREAKING_CHANGES.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/CLAUDE.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/CONTRIBUTING.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/LICENSE +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/MANIFEST.in +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/ROADMAP.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/SECURITY.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/VERSION +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/dev.ps1 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/dev.sh +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/llms.txt +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/mypy_errors.txt +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/README.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/README.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/pyproject.toml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_json/test.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/README.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/pyproject.toml +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/packages/llm_to_toon/test.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/__main__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/_internal/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/_internal/json_encoder.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/assistant.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/planner.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/subagents.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep/vfs.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/deep_state.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/live_events.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/persona.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/review_loop.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/simulated_tools.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/skill_miner.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/skills.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/tool_grammars.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/tools_schema.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/agents/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/aio/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/bridges/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/bridges/tukuy_backend.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/backends.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/builtin_checks.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/challenge.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/errors.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/health.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/http.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/probe.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/capabilities/url_safety.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/core.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/stores.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/checkpoints/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/citations/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/citations/core.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/citations/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/doctor_cmd.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/formatters.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/mcp_cmd.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/research_cmd.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/runner.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/server.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/setup_cmd.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/skill_cmd.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/cli/transcribe_cmd.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/automations.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/calls.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/capacity.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/coding_tools.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/hook.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/live.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/local.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/memory.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/reuse.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/router.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/routing_policy.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/server.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/summary.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/companion/tool_routing.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/dedup.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/evol.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/filters.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/formats.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/schemas.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/seed.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/dataset/synth.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/doctor/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/doctor/core.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/doctor/providers.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_media_usage.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_ollama_options.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_openai_compat.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_openai_compat_stream.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_openai_responses.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_prompt_cache.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_prompted_tool_stream.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/_usage_reporting.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/aggregator_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/airllm_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/assemblyai_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_aggregator_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_airllm_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_azure_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_bedrock_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cachibot_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_claude_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cohere_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_deepseek_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_embedding_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_google_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_google_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_google_vertexai_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_grok_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_groq_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_hugging_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_img_gen_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_jina_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_jina_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_kev_decision_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_laya_decision_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_lmstudio_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_local_http_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_minimax_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mistral_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_modelscope_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_moonshot_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_ollama_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_compatible_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_moderation_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openai_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_openrouter_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_runway_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_stt_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_systemone_compatible_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_tts_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_typesafe_decision_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_video_gen_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/async_zai_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/audio_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/azure_config.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/azure_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/bedrock_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/bfl_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cachibot_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cartesia_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/claude_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cohere_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cohere_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/cohere_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/decision_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/decision_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/deepgram_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/deepgram_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/deepseek_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/driver_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/embedding_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/embedding_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/fal_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/fal_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/google_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/google_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/google_vertexai_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/grok_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/grok_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/grok_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/groq_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/hugging_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/img_gen_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/img_gen_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/jina_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/jina_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/job_runner.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/kev_decision_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/kling_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/kling_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/laya_decision_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/lipsync_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/lipsync_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/lmstudio_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/local_http_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/luma_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/media_capabilities.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/minimax_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/minimax_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mistral_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mistral_moderation_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/modelscope_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/moderation_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/moderation_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/moonshot_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/muapi_aggregator_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/music_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/music_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mxbai_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/mxbai_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/nomic_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/ollama_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/ollama_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_compatible_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_moderation_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_stt_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openai_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/openrouter_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/pika_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/provider_branding.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/provider_descriptors.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/rerank_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/rerank_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_audio_transform_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_capabilities.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_tts_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/runway_video_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/stability_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/stt_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/systemone_compatible_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/tts_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/typesafe_decision_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/vertex_img_gen_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/video_gen_base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/video_gen_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/vision_helpers.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/voyage_embedding_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/voyage_rerank_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/drivers/zai_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/faithfulness.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/judge.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/pairwise.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/eval/self_consistency.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/exceptions.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/context_eval.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/data/document_qa_policies.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/data/extraction_contacts.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/data/tool_task_inventory.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/fixtures.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/gates.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/harness.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/candidates.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/optimizer.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/promotion.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/improve/scorecard.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/integration.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/outcomes.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/policy.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/sandbox.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/scoring.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/critique.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/direct.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/strategies/retrieve.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/execution/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/_usage.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/async_core.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/code_extraction.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/core.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/few_shot.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/fields.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/reasoning.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/strategy.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/streaming.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/tools.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/tukuy_bridge.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/extraction/validator.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/anthropic_format.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/gemini_format.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/openai_format.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/reasoning_cache.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/gateway/responses_format.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/async_groups.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/consensus.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/debate.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/fusion.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/groups.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/groups/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/enhance.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/negative.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/set_planner.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/imaging/style_presets.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/accounts.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/billing.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/budget.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/cache.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/callbacks.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/capabilities.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_activity.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_events.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_readers.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_specs.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agent_usage.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/coding_agents.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/compression.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/cost_mixin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/credentials.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/discovery.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/environment.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/ledger.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/logging.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/media_pricing.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/media_rates.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/model_rates.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/otel.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/pricing.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/provider_env.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rate_limits.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/anthropic.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/azure.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/bedrock.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/cerebras.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/cohere.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/deepinfra.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/deepseek.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/fireworks.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/google.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/google_vertexai.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/groq.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/jina.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/kev.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/laya.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/mistral.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/mixedbread.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/moonshot.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/nomic.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/nvidia.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/openai.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/openrouter.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/perplexity.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/sambanova.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/siliconflow.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/together.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/typesafe.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/voyage.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/rates/xai.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/session.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/settings.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/token_counting.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/tracker.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/tukuy_backend.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/infra/updates.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/chunking.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/detect.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/document.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/csv_parser.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/docx.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/html.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/markdown.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/pdf.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/ingestion/parsers/xlsx.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/integrations/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/integrations/mcp_bridge.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/integrations/tukuy_bridge.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/jobs.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/core.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/stores.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/kg/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/client.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/health.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/hub.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/importers.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/server.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/mcp/tools.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/agent_tools.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/audio.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/hosting.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/image.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/errors.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/ffmpeg.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/groq_stt.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/health.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/sources.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/summarize.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/tools.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/understand/transcribe.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/media/video.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/01-why-prompture.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/02-installation.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/03-quickstart.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/04-toon-input.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/05-test-harness.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/06-stability.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pages/07-migration.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/history.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/serialization.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/persistence/store.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/pipeline.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/resolver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/pipeline/routing.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/_aliases.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/audio_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/cloud_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/decision_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/extras_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/google_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/image_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/local_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/openai_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/builtins/video_plugin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/plugins/discovery.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/py.typed +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/character.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/chunker_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/contextual.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/markdown.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/recursive.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/semantic.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/chunkers/token.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/documents.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loader_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/csv_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/docx_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/epub_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/html_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/json_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/markdown_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/pdf_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/text_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/loaders/xlsx_loader.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/pipeline.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/_fusion.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/hybrid.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/hyde.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/mmr.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/multi_query.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/retriever_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/similarity.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/retrievers/step_back.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/chroma.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/faiss.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/pgvector.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/pinecone.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/qdrant.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/rag/vectorstores/weaviate.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/detector.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/evaluator.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/refusal/markers.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/agent.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/budget.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/events.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/planner.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/ranking.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/report.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/synthesis.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/research/tools.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/async_driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/backoff.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/breaker.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/driver.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/errors.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/explain.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/headroom.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/keys.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/router.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/strategies.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/resilience/virtual.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/generator.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/README.md.j2 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/config.py.j2 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/env.example.j2 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/main.py.j2 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/models.py.j2 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/security/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/security/injection.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/security/redaction.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/core.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/project.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/stores.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/session_memory/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/SKILL.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/dev.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/finance.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/mcp.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/media.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/models.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/search.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/skill/data/references/web.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/environment.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/memory.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/scheduler.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/swarm.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/swarm_agent.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/swarm/types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/testing/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/testing/driver_contract.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/adapter.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/builtin.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/config.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/cli/health.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/code_exec.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/named.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/packs.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/_common.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/_mcp_http.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/_types.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/cache.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/fetch.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/health.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/html2md.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/platform.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/_media.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/anilist.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/arxiv.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/base.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/feeds.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/github.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/hackernews.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/podcasts.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/wikipedia.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/readers/youtube.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/search.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web/toolkit.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/tools/web_search.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/__init__.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/architect.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/engine.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/errors.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/model.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/nodes.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/recovery.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/references.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/registry.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/scheduler.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture/workflow/state.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/dependency_links.txt +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/entry_points.txt +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture.egg-info/top_level.txt +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/prompture_cost_tracking.md +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/requirements.txt +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/scripts/check_pricing_freshness.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/setup.cfg +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/specs/basic_extraction.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/specs/schema_validation.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/specs/strategy_comparison.json +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.dev1}/test.py +0 -0
- {prompture-1.13.6.dev1 → prompture-1.13.7.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.
|
|
3
|
+
Version: 1.13.7.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
|
|
@@ -42,8 +42,10 @@ Requires-Dist: youtube-transcript-api>=1.0; extra == "web"
|
|
|
42
42
|
Requires-Dist: trafilatura>=1.8; extra == "web"
|
|
43
43
|
Provides-Extra: media
|
|
44
44
|
Requires-Dist: yt-dlp>=2024.8.6; extra == "media"
|
|
45
|
+
Provides-Extra: chess
|
|
46
|
+
Requires-Dist: chess>=1.10; extra == "chess"
|
|
45
47
|
Provides-Extra: all
|
|
46
|
-
Requires-Dist: prompture[anthropic,google,groq,mcp,media,openai,pandas,sandbox,toon,web]; extra == "all"
|
|
48
|
+
Requires-Dist: prompture[anthropic,chess,google,groq,mcp,media,openai,pandas,sandbox,toon,web]; extra == "all"
|
|
47
49
|
Provides-Extra: test
|
|
48
50
|
Requires-Dist: pytest>=7.0; extra == "test"
|
|
49
51
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
@@ -1417,6 +1419,28 @@ conv = Conversation("openai/gpt-4", tools=registry, simulated_tools=False)
|
|
|
1417
1419
|
|
|
1418
1420
|
The simulation loop describes tools in the system prompt, asks the model to respond with JSON (`tool_call` or `final_answer`), executes tools, and feeds results back — all transparent to the caller.
|
|
1419
1421
|
|
|
1422
|
+
#### Keeping tools from filling the context window
|
|
1423
|
+
|
|
1424
|
+
Two defaults keep large tool setups cheap, in both `Conversation` and `Agent`:
|
|
1425
|
+
|
|
1426
|
+
- **Large results are stored, not cut.** A result over ~4k tokens, or a round of parallel results over ~12k tokens together (largest first), is stored and replaced by a short preview and an `artifact://` handle. The model reads what it needs with the built-in `read_tool_result(handle, query=..., offset=...)` tool, which is only offered once something has been stored. Error results are never stored.
|
|
1427
|
+
- **Tool schemas load on demand.** When the full schemas would cost more than ~8k tokens, the model gets `search_tools` and `load_tools` instead; loaded tools stay available for the rest of the conversation.
|
|
1428
|
+
|
|
1429
|
+
```python
|
|
1430
|
+
from prompture import Conversation
|
|
1431
|
+
from prompture.agents.tool_context import ToolResultPolicy
|
|
1432
|
+
|
|
1433
|
+
conv = Conversation(
|
|
1434
|
+
"openai/gpt-4o",
|
|
1435
|
+
tools=registry,
|
|
1436
|
+
tool_result_policy=ToolResultPolicy(per_call_tokens=4000, batch_tokens=8000),
|
|
1437
|
+
defer_tools="auto", # True / False to force
|
|
1438
|
+
preload_tools=["get_weather"], # always sent, even when deferring
|
|
1439
|
+
)
|
|
1440
|
+
```
|
|
1441
|
+
|
|
1442
|
+
`max_tool_result_length=None` keeps results whole, and `ToolResultPolicy(offload=False)` restores plain truncation. Stored results live in memory and do not survive `save()` / `load()`. A tool call left without a result (for example a live stream closed mid-round) gets a placeholder result on the next call, so the provider does not reject the history.
|
|
1443
|
+
|
|
1420
1444
|
### Live Streaming Tool Calls (any model, including local Ollama)
|
|
1421
1445
|
|
|
1422
1446
|
`Conversation.ask_live` / `Agent.run_live` yields an interleaved event stream — text deltas, tool calls, tool results — *as the model produces them*. This is the "Claude Code feel" where the model narrates between actions instead of buffering everything into one chunk per turn.
|
|
@@ -1592,7 +1616,7 @@ agent = create_deep_agent(
|
|
|
1592
1616
|
model="openai/gpt-4o",
|
|
1593
1617
|
tools=[...],
|
|
1594
1618
|
enable_summarization=True, # default
|
|
1595
|
-
summarize_at_tokens=
|
|
1619
|
+
summarize_at_tokens="auto", # default: min(80k, 75% of window, window - max output)
|
|
1596
1620
|
summarize_keep_last_n=6, # default
|
|
1597
1621
|
summarizer_model="openai/gpt-4o-mini", # optional, falls back to main model
|
|
1598
1622
|
)
|
|
@@ -2036,6 +2060,31 @@ prompture code-agent codex --auto-approve "Add tests for the pricing cache"
|
|
|
2036
2060
|
prompture code-agent aider --auto-approve --model gpt-4o "Rename foo to bar across the package"
|
|
2037
2061
|
```
|
|
2038
2062
|
|
|
2063
|
+
#### Delegating a task
|
|
2064
|
+
|
|
2065
|
+
`prompture delegate` hands a task to the companion's automation queue instead
|
|
2066
|
+
of running the agent in your terminal: the companion (`prompture companion`,
|
|
2067
|
+
started for you if it's not running) drives Claude Code or Codex unattended —
|
|
2068
|
+
permission prompts skipped, model access from this machine's Prompture setup,
|
|
2069
|
+
so the caller needs no provider key. The agent's work streams to stdout, and
|
|
2070
|
+
the queue keeps going in the background if you stop watching. This is the
|
|
2071
|
+
entry point to give other agents: a delegating LLM can run
|
|
2072
|
+
`prompture delegate "…"` and read the result, instead of reaching for its own
|
|
2073
|
+
API keys.
|
|
2074
|
+
|
|
2075
|
+
```bash
|
|
2076
|
+
prompture delegate "Translate docs/guide.md to Spanish"
|
|
2077
|
+
prompture delegate --agent codex --cost-cap 2 "Add tests for the pricing cache"
|
|
2078
|
+
prompture delegate-status # what's the queue doing now
|
|
2079
|
+
prompture delegate-answer "Use SQLite" # reply when a run ends on a question
|
|
2080
|
+
prompture delegate-resume # carry on after a failure or cost cap
|
|
2081
|
+
```
|
|
2082
|
+
|
|
2083
|
+
Exit codes: `0` finished, `1` failed, `3` waiting for an answer, `4` stopped
|
|
2084
|
+
or still running in the background. `--json` prints the final run as JSON,
|
|
2085
|
+
`--no-wait` returns at once, and companion apps (like Prompture Desk) show the
|
|
2086
|
+
same queue live.
|
|
2087
|
+
|
|
2039
2088
|
#### From the server
|
|
2040
2089
|
|
|
2041
2090
|
`prompture serve` exposes coding-agent discovery and execution as HTTP
|
|
@@ -1300,6 +1300,28 @@ conv = Conversation("openai/gpt-4", tools=registry, simulated_tools=False)
|
|
|
1300
1300
|
|
|
1301
1301
|
The simulation loop describes tools in the system prompt, asks the model to respond with JSON (`tool_call` or `final_answer`), executes tools, and feeds results back — all transparent to the caller.
|
|
1302
1302
|
|
|
1303
|
+
#### Keeping tools from filling the context window
|
|
1304
|
+
|
|
1305
|
+
Two defaults keep large tool setups cheap, in both `Conversation` and `Agent`:
|
|
1306
|
+
|
|
1307
|
+
- **Large results are stored, not cut.** A result over ~4k tokens, or a round of parallel results over ~12k tokens together (largest first), is stored and replaced by a short preview and an `artifact://` handle. The model reads what it needs with the built-in `read_tool_result(handle, query=..., offset=...)` tool, which is only offered once something has been stored. Error results are never stored.
|
|
1308
|
+
- **Tool schemas load on demand.** When the full schemas would cost more than ~8k tokens, the model gets `search_tools` and `load_tools` instead; loaded tools stay available for the rest of the conversation.
|
|
1309
|
+
|
|
1310
|
+
```python
|
|
1311
|
+
from prompture import Conversation
|
|
1312
|
+
from prompture.agents.tool_context import ToolResultPolicy
|
|
1313
|
+
|
|
1314
|
+
conv = Conversation(
|
|
1315
|
+
"openai/gpt-4o",
|
|
1316
|
+
tools=registry,
|
|
1317
|
+
tool_result_policy=ToolResultPolicy(per_call_tokens=4000, batch_tokens=8000),
|
|
1318
|
+
defer_tools="auto", # True / False to force
|
|
1319
|
+
preload_tools=["get_weather"], # always sent, even when deferring
|
|
1320
|
+
)
|
|
1321
|
+
```
|
|
1322
|
+
|
|
1323
|
+
`max_tool_result_length=None` keeps results whole, and `ToolResultPolicy(offload=False)` restores plain truncation. Stored results live in memory and do not survive `save()` / `load()`. A tool call left without a result (for example a live stream closed mid-round) gets a placeholder result on the next call, so the provider does not reject the history.
|
|
1324
|
+
|
|
1303
1325
|
### Live Streaming Tool Calls (any model, including local Ollama)
|
|
1304
1326
|
|
|
1305
1327
|
`Conversation.ask_live` / `Agent.run_live` yields an interleaved event stream — text deltas, tool calls, tool results — *as the model produces them*. This is the "Claude Code feel" where the model narrates between actions instead of buffering everything into one chunk per turn.
|
|
@@ -1475,7 +1497,7 @@ agent = create_deep_agent(
|
|
|
1475
1497
|
model="openai/gpt-4o",
|
|
1476
1498
|
tools=[...],
|
|
1477
1499
|
enable_summarization=True, # default
|
|
1478
|
-
summarize_at_tokens=
|
|
1500
|
+
summarize_at_tokens="auto", # default: min(80k, 75% of window, window - max output)
|
|
1479
1501
|
summarize_keep_last_n=6, # default
|
|
1480
1502
|
summarizer_model="openai/gpt-4o-mini", # optional, falls back to main model
|
|
1481
1503
|
)
|
|
@@ -1919,6 +1941,31 @@ prompture code-agent codex --auto-approve "Add tests for the pricing cache"
|
|
|
1919
1941
|
prompture code-agent aider --auto-approve --model gpt-4o "Rename foo to bar across the package"
|
|
1920
1942
|
```
|
|
1921
1943
|
|
|
1944
|
+
#### Delegating a task
|
|
1945
|
+
|
|
1946
|
+
`prompture delegate` hands a task to the companion's automation queue instead
|
|
1947
|
+
of running the agent in your terminal: the companion (`prompture companion`,
|
|
1948
|
+
started for you if it's not running) drives Claude Code or Codex unattended —
|
|
1949
|
+
permission prompts skipped, model access from this machine's Prompture setup,
|
|
1950
|
+
so the caller needs no provider key. The agent's work streams to stdout, and
|
|
1951
|
+
the queue keeps going in the background if you stop watching. This is the
|
|
1952
|
+
entry point to give other agents: a delegating LLM can run
|
|
1953
|
+
`prompture delegate "…"` and read the result, instead of reaching for its own
|
|
1954
|
+
API keys.
|
|
1955
|
+
|
|
1956
|
+
```bash
|
|
1957
|
+
prompture delegate "Translate docs/guide.md to Spanish"
|
|
1958
|
+
prompture delegate --agent codex --cost-cap 2 "Add tests for the pricing cache"
|
|
1959
|
+
prompture delegate-status # what's the queue doing now
|
|
1960
|
+
prompture delegate-answer "Use SQLite" # reply when a run ends on a question
|
|
1961
|
+
prompture delegate-resume # carry on after a failure or cost cap
|
|
1962
|
+
```
|
|
1963
|
+
|
|
1964
|
+
Exit codes: `0` finished, `1` failed, `3` waiting for an answer, `4` stopped
|
|
1965
|
+
or still running in the background. `--json` prints the final run as JSON,
|
|
1966
|
+
`--no-wait` returns at once, and companion apps (like Prompture Desk) show the
|
|
1967
|
+
same queue live.
|
|
1968
|
+
|
|
1922
1969
|
#### From the server
|
|
1923
1970
|
|
|
1924
1971
|
`prompture serve` exposes coding-agent discovery and execution as HTTP
|
|
@@ -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.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 13,
|
|
21
|
+
__version__ = version = '1.13.7.dev1'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 13, 7, 'dev1')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -35,7 +35,7 @@ import logging
|
|
|
35
35
|
import time
|
|
36
36
|
import typing
|
|
37
37
|
from collections.abc import Callable, Generator
|
|
38
|
-
from typing import Any, Generic
|
|
38
|
+
from typing import Any, Generic, Literal
|
|
39
39
|
|
|
40
40
|
from pydantic import BaseModel
|
|
41
41
|
|
|
@@ -47,6 +47,7 @@ from ..infra.provider_env import ProviderEnvironment
|
|
|
47
47
|
from ..infra.session import UsageSession
|
|
48
48
|
from .conversation import Conversation
|
|
49
49
|
from .persona import Persona
|
|
50
|
+
from .tool_context import ToolResultPolicy
|
|
50
51
|
from .tools_schema import ToolDefinition, ToolRegistry
|
|
51
52
|
from .types import (
|
|
52
53
|
AgentCallbacks,
|
|
@@ -256,6 +257,14 @@ class Agent(Generic[DepsType]):
|
|
|
256
257
|
instead of wedging the run forever. ``None`` (default) means
|
|
257
258
|
no timeout. Can be overridden per call via
|
|
258
259
|
``options={"tool_timeout": ...}``.
|
|
260
|
+
tool_result_policy: When a tool result is moved out of context
|
|
261
|
+
instead of inlined (see :class:`ToolResultPolicy`). Defaults
|
|
262
|
+
to offloading results over ~4k tokens, or ~12k per round.
|
|
263
|
+
defer_tools: Send tool schemas on demand via ``search_tools`` /
|
|
264
|
+
``load_tools``. ``"auto"`` (default) defers once the full
|
|
265
|
+
schemas would cost more than ~8k tokens.
|
|
266
|
+
preload_tools: Tools whose schemas are always sent, even when
|
|
267
|
+
deferring.
|
|
259
268
|
"""
|
|
260
269
|
|
|
261
270
|
def __init__(
|
|
@@ -286,6 +295,9 @@ class Agent(Generic[DepsType]):
|
|
|
286
295
|
skill_config: dict[str, Any] | None = None,
|
|
287
296
|
max_tool_result_length: int | None = None,
|
|
288
297
|
tool_timeout: float | None = None,
|
|
298
|
+
tool_result_policy: ToolResultPolicy | None = None,
|
|
299
|
+
defer_tools: bool | Literal["auto"] = "auto",
|
|
300
|
+
preload_tools: list[str] | None = None,
|
|
289
301
|
max_depth: int = _DEFAULT_MAX_AGENT_DEPTH,
|
|
290
302
|
env: ProviderEnvironment | None = None,
|
|
291
303
|
) -> None:
|
|
@@ -317,6 +329,9 @@ class Agent(Generic[DepsType]):
|
|
|
317
329
|
self._auto_approve_safe_only = auto_approve_safe_only
|
|
318
330
|
self._skill_config = skill_config
|
|
319
331
|
self._max_tool_result_length = max_tool_result_length
|
|
332
|
+
self._tool_result_policy = tool_result_policy
|
|
333
|
+
self._defer_tools = defer_tools
|
|
334
|
+
self._preload_tools = list(preload_tools) if preload_tools else None
|
|
320
335
|
self._tool_timeout = tool_timeout
|
|
321
336
|
self._conversation: Conversation | None = None
|
|
322
337
|
# The conversation driving the current run. Tracked separately from
|
|
@@ -965,6 +980,11 @@ class Agent(Generic[DepsType]):
|
|
|
965
980
|
kwargs["before_turn"] = hook
|
|
966
981
|
if self._max_tool_result_length is not None:
|
|
967
982
|
kwargs["max_tool_result_length"] = self._max_tool_result_length
|
|
983
|
+
if self._tool_result_policy is not None:
|
|
984
|
+
kwargs["tool_result_policy"] = self._tool_result_policy
|
|
985
|
+
kwargs["defer_tools"] = self._defer_tools
|
|
986
|
+
if self._preload_tools:
|
|
987
|
+
kwargs["preload_tools"] = self._preload_tools
|
|
968
988
|
if self._tool_timeout is not None:
|
|
969
989
|
kwargs["tool_timeout"] = self._tool_timeout
|
|
970
990
|
if self._options:
|
|
@@ -23,7 +23,7 @@ import logging
|
|
|
23
23
|
import time
|
|
24
24
|
import typing
|
|
25
25
|
from collections.abc import AsyncGenerator, Callable
|
|
26
|
-
from typing import Any, Generic
|
|
26
|
+
from typing import Any, Generic, Literal
|
|
27
27
|
|
|
28
28
|
from pydantic import BaseModel
|
|
29
29
|
|
|
@@ -33,6 +33,7 @@ from ..infra.callbacks import DriverCallbacks
|
|
|
33
33
|
from ..infra.provider_env import ProviderEnvironment
|
|
34
34
|
from ..infra.session import UsageSession
|
|
35
35
|
from .persona import Persona
|
|
36
|
+
from .tool_context import ToolResultPolicy
|
|
36
37
|
from .tools_schema import ToolDefinition, ToolRegistry
|
|
37
38
|
from .types import (
|
|
38
39
|
AgentCallbacks,
|
|
@@ -193,6 +194,14 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
193
194
|
instead of wedging the run forever. ``None`` (default) means
|
|
194
195
|
no timeout. Can be overridden per call via
|
|
195
196
|
``options={"tool_timeout": ...}``.
|
|
197
|
+
tool_result_policy: When a tool result is moved out of context
|
|
198
|
+
instead of inlined (see :class:`ToolResultPolicy`). Defaults
|
|
199
|
+
to offloading results over ~4k tokens, or ~12k per round.
|
|
200
|
+
defer_tools: Send tool schemas on demand via ``search_tools`` /
|
|
201
|
+
``load_tools``. ``"auto"`` (default) defers once the full
|
|
202
|
+
schemas would cost more than ~8k tokens.
|
|
203
|
+
preload_tools: Tools whose schemas are always sent, even when
|
|
204
|
+
deferring.
|
|
196
205
|
"""
|
|
197
206
|
|
|
198
207
|
def __init__(
|
|
@@ -223,6 +232,9 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
223
232
|
skill_config: dict[str, Any] | None = None,
|
|
224
233
|
max_tool_result_length: int | None = None,
|
|
225
234
|
tool_timeout: float | None = None,
|
|
235
|
+
tool_result_policy: ToolResultPolicy | None = None,
|
|
236
|
+
defer_tools: bool | Literal["auto"] = "auto",
|
|
237
|
+
preload_tools: list[str] | None = None,
|
|
226
238
|
max_depth: int = _DEFAULT_MAX_AGENT_DEPTH,
|
|
227
239
|
env: ProviderEnvironment | None = None,
|
|
228
240
|
) -> None:
|
|
@@ -254,6 +266,9 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
254
266
|
self._auto_approve_safe_only = auto_approve_safe_only
|
|
255
267
|
self._skill_config = skill_config
|
|
256
268
|
self._max_tool_result_length = max_tool_result_length
|
|
269
|
+
self._tool_result_policy = tool_result_policy
|
|
270
|
+
self._defer_tools = defer_tools
|
|
271
|
+
self._preload_tools = list(preload_tools) if preload_tools else None
|
|
257
272
|
self._tool_timeout = tool_timeout
|
|
258
273
|
self._conversation: Any = None
|
|
259
274
|
# The conversation driving the current run. Tracked separately from
|
|
@@ -993,6 +1008,11 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
993
1008
|
kwargs["before_turn"] = hook
|
|
994
1009
|
if self._max_tool_result_length is not None:
|
|
995
1010
|
kwargs["max_tool_result_length"] = self._max_tool_result_length
|
|
1011
|
+
if self._tool_result_policy is not None:
|
|
1012
|
+
kwargs["tool_result_policy"] = self._tool_result_policy
|
|
1013
|
+
kwargs["defer_tools"] = self._defer_tools
|
|
1014
|
+
if self._preload_tools:
|
|
1015
|
+
kwargs["preload_tools"] = self._preload_tools
|
|
996
1016
|
if self._tool_timeout is not None:
|
|
997
1017
|
kwargs["tool_timeout"] = self._tool_timeout
|
|
998
1018
|
if self._options:
|
|
@@ -32,12 +32,13 @@ from ..media.image import ImageInput, make_image
|
|
|
32
32
|
from ..persistence.serialization import export_conversation, import_conversation
|
|
33
33
|
from ..persistence.store import load_from_file, save_to_file
|
|
34
34
|
from .persona import Persona, get_persona
|
|
35
|
+
from .tool_context import ToolContextMixin, ToolResultPolicy, repair_tool_pairs
|
|
35
36
|
from .tools_schema import ToolRegistry
|
|
36
37
|
|
|
37
38
|
logger = logging.getLogger("prompture.async_conversation")
|
|
38
39
|
|
|
39
40
|
|
|
40
|
-
class AsyncConversation:
|
|
41
|
+
class AsyncConversation(ToolContextMixin):
|
|
41
42
|
"""Async stateful multi-turn conversation with an LLM.
|
|
42
43
|
|
|
43
44
|
Mirrors :class:`Conversation` but all methods are ``async``.
|
|
@@ -75,6 +76,9 @@ class AsyncConversation:
|
|
|
75
76
|
on_model_fallback: Callable[[str, str, Any], None] | None = None,
|
|
76
77
|
env: ProviderEnvironment | None = None,
|
|
77
78
|
before_turn: Callable[[AsyncConversation, int], Any] | None = None,
|
|
79
|
+
tool_result_policy: ToolResultPolicy | None = None,
|
|
80
|
+
defer_tools: bool | Literal["auto"] = "auto",
|
|
81
|
+
preload_tools: list[str] | None = None,
|
|
78
82
|
) -> None:
|
|
79
83
|
if system_prompt is not None and persona is not None:
|
|
80
84
|
raise ValueError("Cannot provide both 'system_prompt' and 'persona'. Use one or the other.")
|
|
@@ -127,6 +131,12 @@ class AsyncConversation:
|
|
|
127
131
|
self._tools = tools or ToolRegistry()
|
|
128
132
|
self._max_tool_rounds = max_tool_rounds
|
|
129
133
|
self._max_tool_result_length = max_tool_result_length
|
|
134
|
+
self._init_tool_context(
|
|
135
|
+
max_tool_result_length=max_tool_result_length,
|
|
136
|
+
tool_result_policy=tool_result_policy,
|
|
137
|
+
defer_tools=defer_tools,
|
|
138
|
+
preload_tools=preload_tools,
|
|
139
|
+
)
|
|
130
140
|
self._simulated_tools = simulated_tools
|
|
131
141
|
self._max_history_messages = max_history_messages
|
|
132
142
|
self._tool_timeout = tool_timeout
|
|
@@ -214,6 +224,7 @@ class AsyncConversation:
|
|
|
214
224
|
"""Reset message history (keeps system_prompt and driver)."""
|
|
215
225
|
self._messages.clear()
|
|
216
226
|
self._full_tool_results.clear()
|
|
227
|
+
self._reset_tool_context()
|
|
217
228
|
|
|
218
229
|
def request_stop(self) -> None:
|
|
219
230
|
"""Request a cooperative stop of the tool loop.
|
|
@@ -442,26 +453,6 @@ class AsyncConversation:
|
|
|
442
453
|
blocks.append({"type": "image", "source": ic})
|
|
443
454
|
return blocks
|
|
444
455
|
|
|
445
|
-
def _truncate_tool_result(self, result_str: str) -> str:
|
|
446
|
-
"""Truncate a tool result string if it exceeds the configured limit.
|
|
447
|
-
|
|
448
|
-
Returns the original string when no limit is set or the string is
|
|
449
|
-
within bounds. Otherwise returns a truncated version with a note
|
|
450
|
-
indicating the original length.
|
|
451
|
-
"""
|
|
452
|
-
if self._max_tool_result_length is None:
|
|
453
|
-
return result_str
|
|
454
|
-
if len(result_str) <= self._max_tool_result_length:
|
|
455
|
-
return result_str
|
|
456
|
-
logger.debug(
|
|
457
|
-
"Truncating tool result from %d to %d chars",
|
|
458
|
-
len(result_str),
|
|
459
|
-
self._max_tool_result_length,
|
|
460
|
-
)
|
|
461
|
-
return (
|
|
462
|
-
result_str[: self._max_tool_result_length] + f"\n\n[... result truncated ({len(result_str):,} chars total)]"
|
|
463
|
-
)
|
|
464
|
-
|
|
465
456
|
def _trim_history(self) -> None:
|
|
466
457
|
"""Trim history to the sliding window without orphaning tool pairs.
|
|
467
458
|
|
|
@@ -507,11 +498,12 @@ class AsyncConversation:
|
|
|
507
498
|
from ..extraction.tukuy_bridge import current_tool_call_id
|
|
508
499
|
|
|
509
500
|
token = current_tool_call_id.set(tc["id"])
|
|
501
|
+
registry = self._dispatch_registry(tc["name"])
|
|
510
502
|
try:
|
|
511
503
|
if timeout is not None:
|
|
512
|
-
result = await asyncio.wait_for(
|
|
504
|
+
result = await asyncio.wait_for(registry.aexecute(tc["name"], tc["arguments"]), timeout)
|
|
513
505
|
else:
|
|
514
|
-
result = await
|
|
506
|
+
result = await registry.aexecute(tc["name"], tc["arguments"])
|
|
515
507
|
return (json.dumps(result) if not isinstance(result, str) else result), False
|
|
516
508
|
except (TimeoutError, asyncio.TimeoutError):
|
|
517
509
|
return f"Error: tool '{tc['name']}' timed out after {timeout}s", True
|
|
@@ -588,6 +580,7 @@ class AsyncConversation:
|
|
|
588
580
|
|
|
589
581
|
def _build_messages(self, user_content: str, images: list[ImageInput] | None = None) -> list[dict[str, Any]]:
|
|
590
582
|
"""Build the full messages array for an API call."""
|
|
583
|
+
repair_tool_pairs(self._messages)
|
|
591
584
|
msgs: list[dict[str, Any]] = []
|
|
592
585
|
if self._system_prompt:
|
|
593
586
|
msgs.append({"role": "system", "content": self._system_prompt})
|
|
@@ -673,7 +666,6 @@ class AsyncConversation:
|
|
|
673
666
|
self._stop_requested = False
|
|
674
667
|
self._max_rounds_reached = False
|
|
675
668
|
merged = {**self._options, **(options or {})}
|
|
676
|
-
tool_defs = self._tools.to_openai_format()
|
|
677
669
|
|
|
678
670
|
user_content = self._build_content_with_images(content, images)
|
|
679
671
|
self._messages.append({"role": "user", "content": user_content})
|
|
@@ -686,6 +678,7 @@ class AsyncConversation:
|
|
|
686
678
|
self._check_budget()
|
|
687
679
|
if await self._run_before_turn():
|
|
688
680
|
msgs = self._build_messages_raw()
|
|
681
|
+
tool_defs = self._active_tools().to_openai_format()
|
|
689
682
|
resp = await self._driver.generate_messages_with_tools_with_hooks(msgs, tool_defs, merged)
|
|
690
683
|
|
|
691
684
|
meta = resp.get("meta", {})
|
|
@@ -723,15 +716,14 @@ class AsyncConversation:
|
|
|
723
716
|
msgs.append(assistant_msg)
|
|
724
717
|
|
|
725
718
|
results = await self._run_tool_calls(tool_calls, merged)
|
|
726
|
-
|
|
727
|
-
|
|
719
|
+
batch: list[tuple[str, str, bool]] = []
|
|
720
|
+
for tc, (result_str, is_error) in zip(tool_calls, results, strict=True):
|
|
721
|
+
# Preserve full result for step extraction before shaping
|
|
728
722
|
self._full_tool_results[tc["id"]] = result_str
|
|
723
|
+
batch.append((tc["name"], result_str, is_error))
|
|
729
724
|
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
"tool_call_id": tc["id"],
|
|
733
|
-
"content": self._truncate_tool_result(result_str),
|
|
734
|
-
}
|
|
725
|
+
for tc, content in zip(tool_calls, self._shape_tool_results(batch), strict=True):
|
|
726
|
+
tool_result_msg: dict[str, Any] = {"role": "tool", "tool_call_id": tc["id"], "content": content}
|
|
735
727
|
self._messages.append(tool_result_msg)
|
|
736
728
|
msgs.append(tool_result_msg)
|
|
737
729
|
|
|
@@ -773,7 +765,6 @@ class AsyncConversation:
|
|
|
773
765
|
self._stop_requested = False
|
|
774
766
|
self._max_rounds_reached = False
|
|
775
767
|
merged = {**self._options, **(options or {})}
|
|
776
|
-
tool_defs = self._tools.to_openai_format()
|
|
777
768
|
|
|
778
769
|
user_content = self._build_content_with_images(content, images)
|
|
779
770
|
self._messages.append({"role": "user", "content": user_content})
|
|
@@ -788,6 +779,7 @@ class AsyncConversation:
|
|
|
788
779
|
self._check_budget()
|
|
789
780
|
if await self._run_before_turn():
|
|
790
781
|
msgs = self._build_messages_raw()
|
|
782
|
+
tool_defs = self._active_tools().to_openai_format()
|
|
791
783
|
resp = await self._driver.generate_messages_with_tools_with_hooks(msgs, tool_defs, merged)
|
|
792
784
|
|
|
793
785
|
meta = resp.get("meta", {})
|
|
@@ -834,9 +826,11 @@ class AsyncConversation:
|
|
|
834
826
|
# Independent calls run concurrently; results stay in call order
|
|
835
827
|
# so tool_call_id <-> result matching holds.
|
|
836
828
|
results = await self._run_tool_calls(tool_calls, merged)
|
|
837
|
-
|
|
838
|
-
|
|
829
|
+
batch: list[tuple[str, str, bool]] = []
|
|
830
|
+
for tc, (result_str, is_error) in zip(tool_calls, results, strict=True):
|
|
831
|
+
# Preserve full result for step extraction before shaping
|
|
839
832
|
self._full_tool_results[tc["id"]] = result_str
|
|
833
|
+
batch.append((tc["name"], result_str, is_error))
|
|
840
834
|
|
|
841
835
|
# Yield the FULL result for UI consumers
|
|
842
836
|
yield {
|
|
@@ -846,12 +840,9 @@ class AsyncConversation:
|
|
|
846
840
|
"id": tc["id"],
|
|
847
841
|
}
|
|
848
842
|
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
"tool_call_id": tc["id"],
|
|
853
|
-
"content": self._truncate_tool_result(result_str),
|
|
854
|
-
}
|
|
843
|
+
# Shape the round as a whole before it enters history
|
|
844
|
+
for tc, content in zip(tool_calls, self._shape_tool_results(batch), strict=True):
|
|
845
|
+
tool_result_msg: dict[str, Any] = {"role": "tool", "tool_call_id": tc["id"], "content": content}
|
|
855
846
|
self._messages.append(tool_result_msg)
|
|
856
847
|
msgs.append(tool_result_msg)
|
|
857
848
|
|
|
@@ -920,7 +911,6 @@ class AsyncConversation:
|
|
|
920
911
|
self._stop_requested = False
|
|
921
912
|
self._max_rounds_reached = False
|
|
922
913
|
merged = {**self._options, **(options or {})}
|
|
923
|
-
tool_defs = self._tools.to_openai_format()
|
|
924
914
|
|
|
925
915
|
user_content = self._build_content_with_images(content, images)
|
|
926
916
|
self._messages.append({"role": "user", "content": user_content})
|
|
@@ -945,6 +935,7 @@ class AsyncConversation:
|
|
|
945
935
|
pending_tools: list[dict[str, Any]] = []
|
|
946
936
|
turn_usage: dict[str, Any] = {}
|
|
947
937
|
|
|
938
|
+
tool_defs = self._active_tools().to_openai_format()
|
|
948
939
|
stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
|
|
949
940
|
stream_started = time.perf_counter()
|
|
950
941
|
recorded = False
|
|
@@ -1034,16 +1025,14 @@ class AsyncConversation:
|
|
|
1034
1025
|
# Independent calls run concurrently; results stay in call order
|
|
1035
1026
|
# so tool_call_id <-> result matching holds.
|
|
1036
1027
|
results = await self._run_tool_calls(pending_tools, merged)
|
|
1028
|
+
batch: list[tuple[str, str, bool]] = []
|
|
1037
1029
|
for tc, (result_str, is_error) in zip(pending_tools, results, strict=True):
|
|
1038
1030
|
self._full_tool_results[tc["id"]] = result_str
|
|
1031
|
+
batch.append((tc["name"], result_str, is_error))
|
|
1039
1032
|
yield ToolResult(id=tc["id"], name=tc["name"], output=result_str, is_error=is_error)
|
|
1040
1033
|
|
|
1041
|
-
|
|
1042
|
-
tool_result_msg: dict[str, Any] = {
|
|
1043
|
-
"role": "tool",
|
|
1044
|
-
"tool_call_id": tc["id"],
|
|
1045
|
-
"content": truncated_result,
|
|
1046
|
-
}
|
|
1034
|
+
for tc, content in zip(pending_tools, self._shape_tool_results(batch), strict=True):
|
|
1035
|
+
tool_result_msg: dict[str, Any] = {"role": "tool", "tool_call_id": tc["id"], "content": content}
|
|
1047
1036
|
self._messages.append(tool_result_msg)
|
|
1048
1037
|
msgs.append(tool_result_msg)
|
|
1049
1038
|
|
|
@@ -1064,16 +1053,12 @@ class AsyncConversation:
|
|
|
1064
1053
|
images: list[ImageInput] | None = None,
|
|
1065
1054
|
) -> AsyncIterator[dict[str, Any]]:
|
|
1066
1055
|
"""Async simulated tool calling with event emission."""
|
|
1067
|
-
from .simulated_tools import
|
|
1056
|
+
from .simulated_tools import format_tool_result, parse_simulated_response
|
|
1068
1057
|
|
|
1069
1058
|
self._stop_requested = False
|
|
1070
1059
|
self._max_rounds_reached = False
|
|
1071
1060
|
merged = {**self._options, **(options or {})}
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
augmented_system = tool_prompt
|
|
1075
|
-
if self._system_prompt:
|
|
1076
|
-
augmented_system = f"{self._system_prompt}\n\n{tool_prompt}"
|
|
1061
|
+
augmented_system = self._simulated_system_prompt()
|
|
1077
1062
|
|
|
1078
1063
|
user_content = self._build_content_with_images(content, images)
|
|
1079
1064
|
self._messages.append({"role": "user", "content": user_content})
|
|
@@ -1086,6 +1071,7 @@ class AsyncConversation:
|
|
|
1086
1071
|
return
|
|
1087
1072
|
self._check_budget()
|
|
1088
1073
|
await self._run_before_turn()
|
|
1074
|
+
augmented_system = self._simulated_system_prompt()
|
|
1089
1075
|
msgs: list[dict[str, Any]] = []
|
|
1090
1076
|
msgs.append({"role": "system", "content": augmented_system})
|
|
1091
1077
|
msgs.extend(self._messages)
|
|
@@ -1095,7 +1081,7 @@ class AsyncConversation:
|
|
|
1095
1081
|
meta = resp.get("meta", {})
|
|
1096
1082
|
self._accumulate_usage(meta)
|
|
1097
1083
|
|
|
1098
|
-
parsed = parse_simulated_response(text, self.
|
|
1084
|
+
parsed = parse_simulated_response(text, self._all_callable_tools())
|
|
1099
1085
|
|
|
1100
1086
|
if parsed["type"] == "final_answer":
|
|
1101
1087
|
answer = parsed["content"]
|
|
@@ -1115,10 +1101,11 @@ class AsyncConversation:
|
|
|
1115
1101
|
|
|
1116
1102
|
_sim_token = _sim_tc_id.set("")
|
|
1117
1103
|
try:
|
|
1104
|
+
registry = self._dispatch_registry(tool_name)
|
|
1118
1105
|
if timeout is not None:
|
|
1119
|
-
result = await asyncio.wait_for(
|
|
1106
|
+
result = await asyncio.wait_for(registry.aexecute(tool_name, tool_args), timeout)
|
|
1120
1107
|
else:
|
|
1121
|
-
result = await
|
|
1108
|
+
result = await registry.aexecute(tool_name, tool_args)
|
|
1122
1109
|
result_msg = format_tool_result(tool_name, result)
|
|
1123
1110
|
except (TimeoutError, asyncio.TimeoutError):
|
|
1124
1111
|
result_msg = format_tool_result(tool_name, f"Error: tool '{tool_name}' timed out after {timeout}s")
|
|
@@ -1129,7 +1116,8 @@ class AsyncConversation:
|
|
|
1129
1116
|
|
|
1130
1117
|
yield {"type": "tool_result", "name": tool_name, "result": result_msg, "id": ""}
|
|
1131
1118
|
|
|
1132
|
-
|
|
1119
|
+
(shaped,) = self._shape_tool_results([(tool_name, result_msg, False)])
|
|
1120
|
+
self._messages.append({"role": "user", "content": shaped})
|
|
1133
1121
|
|
|
1134
1122
|
# Max rounds exhausted — graceful final answer without tools (C4).
|
|
1135
1123
|
logger.warning(
|
|
@@ -1147,17 +1135,12 @@ class AsyncConversation:
|
|
|
1147
1135
|
images: list[ImageInput] | None = None,
|
|
1148
1136
|
) -> str:
|
|
1149
1137
|
"""Async prompt-based tool calling for drivers without native tool use."""
|
|
1150
|
-
from .simulated_tools import
|
|
1138
|
+
from .simulated_tools import format_tool_result, parse_simulated_response
|
|
1151
1139
|
|
|
1152
1140
|
self._stop_requested = False
|
|
1153
1141
|
self._max_rounds_reached = False
|
|
1154
1142
|
merged = {**self._options, **(options or {})}
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
# Augment system prompt with tool descriptions
|
|
1158
|
-
augmented_system = tool_prompt
|
|
1159
|
-
if self._system_prompt:
|
|
1160
|
-
augmented_system = f"{self._system_prompt}\n\n{tool_prompt}"
|
|
1143
|
+
augmented_system = self._simulated_system_prompt()
|
|
1161
1144
|
|
|
1162
1145
|
# Record user message in history
|
|
1163
1146
|
user_content = self._build_content_with_images(content, images)
|
|
@@ -1169,7 +1152,7 @@ class AsyncConversation:
|
|
|
1169
1152
|
return await self._final_answer_simulated(augmented_system, merged)
|
|
1170
1153
|
self._check_budget()
|
|
1171
1154
|
await self._run_before_turn()
|
|
1172
|
-
|
|
1155
|
+
augmented_system = self._simulated_system_prompt()
|
|
1173
1156
|
msgs: list[dict[str, Any]] = []
|
|
1174
1157
|
msgs.append({"role": "system", "content": augmented_system})
|
|
1175
1158
|
msgs.extend(self._messages)
|
|
@@ -1179,7 +1162,7 @@ class AsyncConversation:
|
|
|
1179
1162
|
meta = resp.get("meta", {})
|
|
1180
1163
|
self._accumulate_usage(meta)
|
|
1181
1164
|
|
|
1182
|
-
parsed = parse_simulated_response(text, self.
|
|
1165
|
+
parsed = parse_simulated_response(text, self._all_callable_tools())
|
|
1183
1166
|
|
|
1184
1167
|
if parsed["type"] == "final_answer":
|
|
1185
1168
|
answer: str = parsed["content"]
|
|
@@ -1195,18 +1178,20 @@ class AsyncConversation:
|
|
|
1195
1178
|
|
|
1196
1179
|
timeout = merged.get("tool_timeout", self._tool_timeout)
|
|
1197
1180
|
try:
|
|
1181
|
+
registry = self._dispatch_registry(tool_name)
|
|
1198
1182
|
if timeout is not None:
|
|
1199
|
-
result = await asyncio.wait_for(
|
|
1183
|
+
result = await asyncio.wait_for(registry.aexecute(tool_name, tool_args), timeout)
|
|
1200
1184
|
else:
|
|
1201
|
-
result = await
|
|
1185
|
+
result = await registry.aexecute(tool_name, tool_args)
|
|
1202
1186
|
result_msg = format_tool_result(tool_name, result)
|
|
1203
1187
|
except (TimeoutError, asyncio.TimeoutError):
|
|
1204
1188
|
result_msg = format_tool_result(tool_name, f"Error: tool '{tool_name}' timed out after {timeout}s")
|
|
1205
1189
|
except Exception as exc:
|
|
1206
1190
|
result_msg = format_tool_result(tool_name, f"Error: {exc}")
|
|
1207
1191
|
|
|
1208
|
-
# Record tool result as a user message (
|
|
1209
|
-
|
|
1192
|
+
# Record tool result as a user message (shaped for the LLM)
|
|
1193
|
+
(shaped,) = self._shape_tool_results([(tool_name, result_msg, False)])
|
|
1194
|
+
self._messages.append({"role": "user", "content": shaped})
|
|
1210
1195
|
|
|
1211
1196
|
# Max rounds exhausted — graceful final answer without tools (C4).
|
|
1212
1197
|
logger.warning(
|
|
@@ -1218,6 +1203,7 @@ class AsyncConversation:
|
|
|
1218
1203
|
|
|
1219
1204
|
def _build_messages_raw(self) -> list[dict[str, Any]]:
|
|
1220
1205
|
"""Build messages array from system prompt + full history (including tool messages)."""
|
|
1206
|
+
repair_tool_pairs(self._messages)
|
|
1221
1207
|
msgs: list[dict[str, Any]] = []
|
|
1222
1208
|
if self._system_prompt:
|
|
1223
1209
|
msgs.append({"role": "system", "content": self._system_prompt})
|