prompture 1.13.11.dev1__tar.gz → 1.13.12.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/PKG-INFO +42 -2
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/README.md +40 -0
- prompture-1.13.12.dev2/VERSION +1 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/_version.py +2 -2
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/async_conversation.py +25 -2
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/conversation.py +25 -2
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/live_events.py +3 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/cli.py +18 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/server.py +29 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_effort.py +10 -9
- prompture-1.13.12.dev2/prompture/drivers/_google_genai.py +205 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_base.py +2 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_claude_driver.py +16 -14
- prompture-1.13.12.dev2/prompture/drivers/async_google_driver.py +226 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_google_vertexai_driver.py +42 -76
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_groq_driver.py +3 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_driver.py +3 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/base.py +2 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/claude_driver.py +50 -13
- prompture-1.13.12.dev2/prompture/drivers/google_driver.py +262 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/google_vertexai_driver.py +32 -182
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/groq_driver.py +3 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_driver.py +3 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/vision_helpers.py +3 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/async_groups.py +13 -3
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/pricing.py +35 -7
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/google.json +22 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/google_vertexai.json +22 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/PKG-INFO +42 -2
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/SOURCES.txt +1 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/requires.txt +1 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/scm_file_list.json +3 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/pyproject.toml +1 -1
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/requirements.txt +2 -2
- prompture-1.13.11.dev1/VERSION +0 -1
- prompture-1.13.11.dev1/prompture/drivers/async_google_driver.py +0 -407
- prompture-1.13.11.dev1/prompture/drivers/google_driver.py +0 -520
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-driver/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-driver/references/driver-template.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-example/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-field/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-persona/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-test/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/add-tool/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/create-pr/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/run-tests/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.claude/skills/update-pricing/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.env.copy +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.gitattributes +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/FUNDING.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/scripts/update_docs_version.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/scripts/update_wrapper_version.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/dev.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/documentation.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/pricing-freshness.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/publish.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.github/workflows/security.yml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/.safety-project.ini +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/AGENTS.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/BREAKING_CHANGES.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/CLAUDE.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/CONTRIBUTING.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/LICENSE +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/MANIFEST.in +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/ROADMAP.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/SECURITY.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/dev.ps1 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/dev.sh +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/llms.txt +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/mypy_errors.txt +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/README.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/README.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/pyproject.toml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_json/test.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/README.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/pyproject.toml +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/packages/llm_to_toon/test.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/__main__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/_internal/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/_internal/json_encoder.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/agent.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/assistant.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/async_agent.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/async_deep_agent.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/planner.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/subagents.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/summarizer.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep/vfs.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep_agent.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep_prompts.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/deep_state.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/persona.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/review_loop.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/simulated_tools.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/skill_miner.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/skills.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/tool_context.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/tool_grammars.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/tools_schema.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/agents/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/aio/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/bridges/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/bridges/tukuy_backend.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/backends.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/builtin_checks.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/challenge.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/errors.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/health.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/http.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/probe.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/capabilities/url_safety.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/core.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/stores.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/checkpoints/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/citations/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/citations/core.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/citations/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/delegate_cmd.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/doctor_cmd.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/formatters.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/mcp_cmd.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/research_cmd.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/runner.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/server.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/setup_cmd.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/skill_cmd.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/cli/transcribe_cmd.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/automations.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/calls.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/capacity.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/coding_tools.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/hook.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/live.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/local.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/memory.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/reuse.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/router.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/routing_policy.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/summary.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/companion/tool_routing.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/dedup.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/evol.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/filters.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/formats.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/schemas.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/seed.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/dataset/synth.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/doctor/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/doctor/core.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/doctor/providers.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_media_usage.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_ollama_options.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_openai_compat.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_openai_compat_stream.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_openai_responses.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_prompt_cache.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_prompted_tool_stream.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/_usage_reporting.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/aggregator_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/airllm_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/assemblyai_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_aggregator_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_airllm_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_azure_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_bedrock_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cachibot_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_coding_agent_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cohere_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_deepseek_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_embedding_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_google_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_grok_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_hugging_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_img_gen_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_jina_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_jina_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_kev_decision_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_laya_decision_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_lmstudio_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_local_http_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_minimax_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mistral_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_modelscope_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_moonshot_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_ollama_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_compatible_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_moderation_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openai_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_openrouter_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_runway_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_stt_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_systemone_compatible_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_tts_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_typesafe_decision_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_video_gen_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/async_zai_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/audio_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/azure_config.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/azure_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/bedrock_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/bfl_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cachibot_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cartesia_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/coding_agent_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cohere_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cohere_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/cohere_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/decision_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/decision_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/deepgram_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/deepgram_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/deepseek_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/driver_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/embedding_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/embedding_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/fal_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/fal_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/google_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/grok_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/grok_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/grok_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/hugging_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/img_gen_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/img_gen_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/jina_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/jina_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/job_runner.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/kev_decision_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/kling_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/kling_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/laya_decision_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/lipsync_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/lipsync_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/lmstudio_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/local_http_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/luma_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/media_capabilities.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/minimax_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/minimax_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mistral_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mistral_moderation_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/modelscope_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/moderation_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/moderation_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/moonshot_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/muapi_aggregator_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/music_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/music_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mxbai_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/mxbai_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/nomic_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/ollama_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/ollama_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_compatible_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_moderation_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_stt_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openai_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/openrouter_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/pika_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/provider_branding.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/provider_descriptors.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/rerank_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/rerank_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_audio_transform_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_capabilities.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_tts_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/runway_video_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/stability_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/stt_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/systemone_compatible_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/tts_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/typesafe_decision_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/vertex_img_gen_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/video_gen_base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/video_gen_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/voyage_embedding_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/voyage_rerank_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/drivers/zai_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/faithfulness.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/judge.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/pairwise.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/eval/self_consistency.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/exceptions.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/context.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/context_eval.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/data/document_qa_policies.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/data/extraction_contacts.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/data/tool_task_inventory.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/fixtures.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/gates.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/harness.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/candidates.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/feedback.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/optimizer.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/promotion.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/improve/scorecard.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/integration.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/outcomes.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/policy.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/sandbox.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/scoring.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/critique.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/direct.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/strategies/retrieve.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/execution/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/_usage.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/async_core.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/code_extraction.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/core.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/few_shot.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/fields.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/reasoning.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/strategy.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/streaming.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/tools.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/tukuy_bridge.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/extraction/validator.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/exchange.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/fixtures.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/harness.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/motifs.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/puzzles.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/chess/render.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/connect4.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/control.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/evaluation.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/fixtures.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/match.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/memory.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/othello.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/records.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/strategies.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/tournament.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/games/trace.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/anthropic_format.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/gemini_format.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/openai_format.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/reasoning_cache.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/gateway/responses_format.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/consensus.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/debate.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/fusion.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/groups.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/groups/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/enhance.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/negative.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/set_planner.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/imaging/style_presets.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/accounts.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/billing.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/budget.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/cache.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/callbacks.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/capabilities.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_activity.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_events.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_readers.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_specs.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agent_usage.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/coding_agents.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/compression.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/cost_mixin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/credentials.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/discovery.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/environment.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/ledger.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/local_servers.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/logging.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/media_pricing.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/media_rates.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/model_rates.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/otel.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/provider_env.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/provider_keys.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rate_limits.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/anthropic.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/azure.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/bedrock.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/cerebras.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/cohere.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/deepinfra.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/deepseek.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/fireworks.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/groq.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/jina.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/kev.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/laya.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/mistral.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/mixedbread.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/moonshot.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/nomic.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/nvidia.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/openai.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/openrouter.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/perplexity.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/sambanova.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/siliconflow.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/together.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/typesafe.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/voyage.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/rates/xai.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/session.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/settings.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/token_counting.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/tracker.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/tukuy_backend.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/infra/updates.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/chunking.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/detect.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/document.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/csv_parser.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/docx.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/html.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/markdown.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/pdf.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/ingestion/parsers/xlsx.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/integrations/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/integrations/mcp_bridge.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/integrations/tukuy_bridge.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/jobs.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/core.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/stores.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/kg/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/claims.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/context.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/generate.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/marketing/models.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/client.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/health.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/hub.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/importers.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/server.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/mcp/tools.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/agent_tools.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/audio.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/hosting.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/image.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/errors.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/ffmpeg.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/groq_stt.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/health.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/sources.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/summarize.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/tools.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/understand/transcribe.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/media/video.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/01-why-prompture.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/02-installation.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/03-quickstart.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/04-toon-input.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/05-test-harness.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/06-stability.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pages/07-migration.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/history.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/serialization.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/persistence/store.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/pipeline.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/resolver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/pipeline/routing.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/_aliases.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/audio_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/cloud_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/coding_agent_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/decision_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/extras_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/google_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/image_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/local_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/openai_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/builtins/video_plugin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/plugins/discovery.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/py.typed +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/character.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/chunker_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/contextual.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/markdown.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/recursive.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/semantic.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/chunkers/token.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/documents.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loader_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/csv_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/docx_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/epub_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/html_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/json_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/markdown_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/pdf_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/text_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/loaders/xlsx_loader.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/pipeline.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/_fusion.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/hybrid.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/hyde.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/mmr.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/multi_query.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/retriever_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/similarity.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/retrievers/step_back.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/chroma.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/faiss.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/pgvector.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/pinecone.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/qdrant.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/rag/vectorstores/weaviate.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/detector.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/evaluator.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/refusal/markers.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/agent.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/budget.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/events.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/planner.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/ranking.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/report.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/synthesis.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/research/tools.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/async_driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/backoff.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/breaker.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/driver.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/errors.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/explain.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/headroom.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/keys.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/router.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/strategies.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/resilience/virtual.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/generator.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/README.md.j2 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/config.py.j2 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/env.example.j2 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/main.py.j2 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/models.py.j2 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/security/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/security/injection.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/security/redaction.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/core.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/project.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/stores.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/session_memory/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/SKILL.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/dev.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/finance.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/mcp.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/media.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/models.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/search.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/skill/data/references/web.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/environment.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/memory.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/scheduler.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/swarm.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/swarm_agent.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/swarm/types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/testing/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/testing/driver_contract.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/adapter.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/builtin.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/config.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/cli/health.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/code_exec.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/named.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/packs.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/_common.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/_mcp_http.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/_types.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/cache.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/fetch.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/health.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/html2md.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/platform.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/_media.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/anilist.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/arxiv.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/base.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/feeds.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/github.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/hackernews.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/podcasts.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/wikipedia.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/readers/youtube.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/search.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web/toolkit.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/tools/web_search.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/__init__.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/architect.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/engine.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/errors.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/model.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/nodes.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/recovery.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/references.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/registry.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/scheduler.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture/workflow/state.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/dependency_links.txt +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/entry_points.txt +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture.egg-info/top_level.txt +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/prompture_cost_tracking.md +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/scripts/check_pricing_freshness.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/setup.cfg +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/specs/basic_extraction.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/specs/schema_validation.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/specs/strategy_comparison.json +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/test.py +0 -0
- {prompture-1.13.11.dev1 → prompture-1.13.12.dev2}/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.12.dev2
|
|
4
4
|
Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
|
|
5
5
|
Author-email: Juan Denis <juan@vene.co>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -24,7 +24,7 @@ Requires-Dist: openai>=1.55.0; extra == "openai"
|
|
|
24
24
|
Provides-Extra: anthropic
|
|
25
25
|
Requires-Dist: anthropic>=0.8.0; extra == "anthropic"
|
|
26
26
|
Provides-Extra: google
|
|
27
|
-
Requires-Dist: google-genai>=1.
|
|
27
|
+
Requires-Dist: google-genai>=1.56.0; extra == "google"
|
|
28
28
|
Provides-Extra: groq
|
|
29
29
|
Requires-Dist: groq>=0.4.0; extra == "groq"
|
|
30
30
|
Provides-Extra: toon
|
|
@@ -1751,6 +1751,46 @@ if doc.found:
|
|
|
1751
1751
|
|
|
1752
1752
|
Both helpers return plain dataclasses with no I/O of their own. See `examples/assistant_example.py` for the assistant + review-loop + extractor flow end-to-end.
|
|
1753
1753
|
|
|
1754
|
+
### Gemini 4 Argon
|
|
1755
|
+
|
|
1756
|
+
Install or upgrade with `pip install -U "prompture[google]"` and set
|
|
1757
|
+
`GOOGLE_API_KEY` to a key for a billing-enabled Gemini API project.
|
|
1758
|
+
|
|
1759
|
+
```python
|
|
1760
|
+
from prompture import Conversation
|
|
1761
|
+
|
|
1762
|
+
conv = Conversation(
|
|
1763
|
+
model_name="google/gemini-4-argon",
|
|
1764
|
+
options={"effort": "medium", "max_tokens": 32768},
|
|
1765
|
+
)
|
|
1766
|
+
print(conv.ask("Review this design and explain the tradeoffs: ..."))
|
|
1767
|
+
```
|
|
1768
|
+
|
|
1769
|
+
Use `google_vertexai/gemini-4-argon` for Vertex AI, with
|
|
1770
|
+
`GOOGLE_VERTEX_PROJECT_ID`, Application Default Credentials, and
|
|
1771
|
+
`GOOGLE_VERTEX_LOCATION=global` (or a supported endpoint for your project).
|
|
1772
|
+
Both providers support synchronous and asynchronous conversations, tools,
|
|
1773
|
+
structured output, vision, and streaming. Prompture preserves signed Gemini
|
|
1774
|
+
response parts in conversation history; callers managing driver history directly
|
|
1775
|
+
must copy the response's `_google_parts` onto the corresponding assistant message.
|
|
1776
|
+
|
|
1777
|
+
Argon accepts `low`, `medium`, and `high` effort. Prompture maps `none` and
|
|
1778
|
+
`minimal` to `low`, and `xhigh` and `max` to `high`; it does not disable thinking.
|
|
1779
|
+
Explicit `generation_config.thinking_config` takes precedence. Sampling options
|
|
1780
|
+
(`temperature`, `top_p`, `top_k`) are omitted for this model.
|
|
1781
|
+
|
|
1782
|
+
`completion_tokens` includes billed thinking tokens; `reasoning_tokens` reports
|
|
1783
|
+
that subset. Cached input receives the implicit-cache discount. The local pricing
|
|
1784
|
+
catalog uses $2 input / $10 output / $0.10 cached input per million tokens through
|
|
1785
|
+
November 30, 2026, then switches to $4 / $20 / $0.20 on December 1 (UTC), without
|
|
1786
|
+
requiring a restart. There is no free API tier. See [Google's pricing](https://ai.google.dev/gemini-api/docs/pricing).
|
|
1787
|
+
|
|
1788
|
+
The catalog records the normal SDK output limit of 65,536 tokens, shared between
|
|
1789
|
+
thinking and the visible answer. The 1,048,576-token context includes input too.
|
|
1790
|
+
[Long decode](https://ai.google.dev/gemini-api/docs/generate-content/long-decode)
|
|
1791
|
+
requires `google-genai>=2.30.1` and a larger `max_tokens`; the baseline Google extra
|
|
1792
|
+
requires `>=1.56.0` for the thinking-level API.
|
|
1793
|
+
|
|
1754
1794
|
### Prompt Caching
|
|
1755
1795
|
|
|
1756
1796
|
Prompt caching cuts input-token cost on the repeated prefix to ~10% of the
|
|
@@ -1632,6 +1632,46 @@ if doc.found:
|
|
|
1632
1632
|
|
|
1633
1633
|
Both helpers return plain dataclasses with no I/O of their own. See `examples/assistant_example.py` for the assistant + review-loop + extractor flow end-to-end.
|
|
1634
1634
|
|
|
1635
|
+
### Gemini 4 Argon
|
|
1636
|
+
|
|
1637
|
+
Install or upgrade with `pip install -U "prompture[google]"` and set
|
|
1638
|
+
`GOOGLE_API_KEY` to a key for a billing-enabled Gemini API project.
|
|
1639
|
+
|
|
1640
|
+
```python
|
|
1641
|
+
from prompture import Conversation
|
|
1642
|
+
|
|
1643
|
+
conv = Conversation(
|
|
1644
|
+
model_name="google/gemini-4-argon",
|
|
1645
|
+
options={"effort": "medium", "max_tokens": 32768},
|
|
1646
|
+
)
|
|
1647
|
+
print(conv.ask("Review this design and explain the tradeoffs: ..."))
|
|
1648
|
+
```
|
|
1649
|
+
|
|
1650
|
+
Use `google_vertexai/gemini-4-argon` for Vertex AI, with
|
|
1651
|
+
`GOOGLE_VERTEX_PROJECT_ID`, Application Default Credentials, and
|
|
1652
|
+
`GOOGLE_VERTEX_LOCATION=global` (or a supported endpoint for your project).
|
|
1653
|
+
Both providers support synchronous and asynchronous conversations, tools,
|
|
1654
|
+
structured output, vision, and streaming. Prompture preserves signed Gemini
|
|
1655
|
+
response parts in conversation history; callers managing driver history directly
|
|
1656
|
+
must copy the response's `_google_parts` onto the corresponding assistant message.
|
|
1657
|
+
|
|
1658
|
+
Argon accepts `low`, `medium`, and `high` effort. Prompture maps `none` and
|
|
1659
|
+
`minimal` to `low`, and `xhigh` and `max` to `high`; it does not disable thinking.
|
|
1660
|
+
Explicit `generation_config.thinking_config` takes precedence. Sampling options
|
|
1661
|
+
(`temperature`, `top_p`, `top_k`) are omitted for this model.
|
|
1662
|
+
|
|
1663
|
+
`completion_tokens` includes billed thinking tokens; `reasoning_tokens` reports
|
|
1664
|
+
that subset. Cached input receives the implicit-cache discount. The local pricing
|
|
1665
|
+
catalog uses $2 input / $10 output / $0.10 cached input per million tokens through
|
|
1666
|
+
November 30, 2026, then switches to $4 / $20 / $0.20 on December 1 (UTC), without
|
|
1667
|
+
requiring a restart. There is no free API tier. See [Google's pricing](https://ai.google.dev/gemini-api/docs/pricing).
|
|
1668
|
+
|
|
1669
|
+
The catalog records the normal SDK output limit of 65,536 tokens, shared between
|
|
1670
|
+
thinking and the visible answer. The 1,048,576-token context includes input too.
|
|
1671
|
+
[Long decode](https://ai.google.dev/gemini-api/docs/generate-content/long-decode)
|
|
1672
|
+
requires `google-genai>=2.30.1` and a larger `max_tokens`; the baseline Google extra
|
|
1673
|
+
requires `>=1.56.0` for the thinking-level API.
|
|
1674
|
+
|
|
1635
1675
|
### Prompt Caching
|
|
1636
1676
|
|
|
1637
1677
|
Prompt caching cuts input-token cost on the repeated prefix to ~10% of the
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.13.11
|
|
@@ -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.12.dev2'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 13, 12, 'dev2')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -160,6 +160,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
160
160
|
|
|
161
161
|
# Reasoning content from last response
|
|
162
162
|
self._last_reasoning: str | None = None
|
|
163
|
+
self._last_google_parts: list[dict[str, Any]] | None = None
|
|
163
164
|
|
|
164
165
|
# Optional before_turn hook (sync or async callable). Fires before
|
|
165
166
|
# each driver call inside the tool loop.
|
|
@@ -208,6 +209,8 @@ class AsyncConversation(ToolContextMixin):
|
|
|
208
209
|
msg: dict[str, Any] = {"role": "assistant", "content": content}
|
|
209
210
|
if self._last_reasoning:
|
|
210
211
|
msg["reasoning_content"] = self._last_reasoning
|
|
212
|
+
if self._last_google_parts is not None:
|
|
213
|
+
msg["_google_parts"] = self._last_google_parts
|
|
211
214
|
return msg
|
|
212
215
|
|
|
213
216
|
@property
|
|
@@ -550,6 +553,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
550
553
|
resp = await self._driver.generate_messages_with_hooks(final_msgs, merged)
|
|
551
554
|
text: str = resp.get("text", "")
|
|
552
555
|
self._last_reasoning = resp.get("reasoning_content")
|
|
556
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
553
557
|
self._accumulate_usage(resp.get("meta", {}))
|
|
554
558
|
self._messages.append(self._assistant_message(text))
|
|
555
559
|
return text
|
|
@@ -601,8 +605,9 @@ class AsyncConversation(ToolContextMixin):
|
|
|
601
605
|
self._usage["total_tokens"] += delta_tokens
|
|
602
606
|
self._usage["cost"] += delta_cost
|
|
603
607
|
self._usage["turns"] += 1
|
|
604
|
-
|
|
605
|
-
|
|
608
|
+
context_prompt_tokens = meta.get("initial_prompt_tokens", prompt_tokens)
|
|
609
|
+
if context_prompt_tokens:
|
|
610
|
+
self._last_prompt_tokens = context_prompt_tokens
|
|
606
611
|
logger.debug(
|
|
607
612
|
"[conversation] usage delta tokens=%d cost=%.6f | running total tokens=%d cost=%.6f turns=%d",
|
|
608
613
|
delta_tokens,
|
|
@@ -627,6 +632,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
627
632
|
dispatches to the async tool execution loop.
|
|
628
633
|
"""
|
|
629
634
|
self._last_reasoning = None
|
|
635
|
+
self._last_google_parts = None
|
|
630
636
|
|
|
631
637
|
# Route to appropriate tool handling
|
|
632
638
|
if self._tools:
|
|
@@ -648,6 +654,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
648
654
|
text: str = resp.get("text", "")
|
|
649
655
|
meta = resp.get("meta", {})
|
|
650
656
|
self._last_reasoning = resp.get("reasoning_content")
|
|
657
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
651
658
|
|
|
652
659
|
user_content = self._build_content_with_images(content, images)
|
|
653
660
|
self._messages.append({"role": "user", "content": user_content})
|
|
@@ -689,6 +696,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
689
696
|
|
|
690
697
|
if not tool_calls:
|
|
691
698
|
self._last_reasoning = resp.get("reasoning_content")
|
|
699
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
692
700
|
self._messages.append(self._assistant_message(text))
|
|
693
701
|
return text
|
|
694
702
|
|
|
@@ -711,6 +719,8 @@ class AsyncConversation(ToolContextMixin):
|
|
|
711
719
|
# on subsequent requests (e.g. Moonshot reasoning models).
|
|
712
720
|
if resp.get("reasoning_content") is not None:
|
|
713
721
|
assistant_msg["reasoning_content"] = resp["reasoning_content"]
|
|
722
|
+
if resp.get("_google_parts") is not None:
|
|
723
|
+
assistant_msg["_google_parts"] = resp["_google_parts"]
|
|
714
724
|
|
|
715
725
|
self._messages.append(assistant_msg)
|
|
716
726
|
msgs.append(assistant_msg)
|
|
@@ -749,6 +759,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
749
759
|
:meth:`Conversation.ask_with_tool_events`.
|
|
750
760
|
"""
|
|
751
761
|
self._last_reasoning = None
|
|
762
|
+
self._last_google_parts = None
|
|
752
763
|
|
|
753
764
|
if not self._tools:
|
|
754
765
|
async for chunk in self.ask_stream(content, options, images=images):
|
|
@@ -790,6 +801,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
790
801
|
|
|
791
802
|
if not tool_calls:
|
|
792
803
|
self._last_reasoning = resp.get("reasoning_content")
|
|
804
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
793
805
|
self._messages.append(self._assistant_message(text))
|
|
794
806
|
yield {"type": "text_delta", "text": text}
|
|
795
807
|
return
|
|
@@ -811,6 +823,8 @@ class AsyncConversation(ToolContextMixin):
|
|
|
811
823
|
]
|
|
812
824
|
if resp.get("reasoning_content") is not None:
|
|
813
825
|
assistant_msg["reasoning_content"] = resp["reasoning_content"]
|
|
826
|
+
if resp.get("_google_parts") is not None:
|
|
827
|
+
assistant_msg["_google_parts"] = resp["_google_parts"]
|
|
814
828
|
|
|
815
829
|
self._messages.append(assistant_msg)
|
|
816
830
|
msgs.append(assistant_msg)
|
|
@@ -879,6 +893,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
879
893
|
)
|
|
880
894
|
|
|
881
895
|
self._last_reasoning = None
|
|
896
|
+
self._last_google_parts = None
|
|
882
897
|
|
|
883
898
|
if not self._tools:
|
|
884
899
|
async for chunk in self.ask_stream(content, options, images=images):
|
|
@@ -934,6 +949,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
934
949
|
tool_calls_in_turn: list[dict[str, Any]] = []
|
|
935
950
|
pending_tools: list[dict[str, Any]] = []
|
|
936
951
|
turn_usage: dict[str, Any] = {}
|
|
952
|
+
google_parts: list[dict[str, Any]] | None = None
|
|
937
953
|
|
|
938
954
|
tool_defs = self._active_tools().to_openai_format()
|
|
939
955
|
stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
|
|
@@ -965,6 +981,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
965
981
|
}
|
|
966
982
|
)
|
|
967
983
|
elif et == "message_stop":
|
|
984
|
+
google_parts = getattr(event, "provider_state", {}).get("_google_parts")
|
|
968
985
|
turn_usage = dict(event.usage or {})
|
|
969
986
|
self._driver._auto_record_usage(
|
|
970
987
|
{"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
|
|
@@ -1014,6 +1031,9 @@ class AsyncConversation(ToolContextMixin):
|
|
|
1014
1031
|
if full_thinking is not None:
|
|
1015
1032
|
assistant_msg["reasoning_content"] = full_thinking
|
|
1016
1033
|
self._last_reasoning = full_thinking
|
|
1034
|
+
if google_parts is not None:
|
|
1035
|
+
assistant_msg["_google_parts"] = google_parts
|
|
1036
|
+
self._last_google_parts = google_parts
|
|
1017
1037
|
|
|
1018
1038
|
self._messages.append(assistant_msg)
|
|
1019
1039
|
msgs.append(assistant_msg)
|
|
@@ -1296,6 +1316,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
1296
1316
|
self._accumulate_usage(meta)
|
|
1297
1317
|
if chunk.get("reasoning_content"):
|
|
1298
1318
|
self._last_reasoning = chunk["reasoning_content"]
|
|
1319
|
+
self._last_google_parts = chunk.get("_google_parts")
|
|
1299
1320
|
except Exception as exc:
|
|
1300
1321
|
stream_error = exc
|
|
1301
1322
|
elapsed_ms = (time.perf_counter() - t0) * 1000
|
|
@@ -1372,6 +1393,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
1372
1393
|
|
|
1373
1394
|
self._check_budget()
|
|
1374
1395
|
self._last_reasoning = None
|
|
1396
|
+
self._last_google_parts = None
|
|
1375
1397
|
|
|
1376
1398
|
merged = {**self._options, **(options or {})}
|
|
1377
1399
|
|
|
@@ -1436,6 +1458,7 @@ class AsyncConversation(ToolContextMixin):
|
|
|
1436
1458
|
text = resp.get("text", "")
|
|
1437
1459
|
meta = resp.get("meta", {})
|
|
1438
1460
|
self._last_reasoning = resp.get("reasoning_content")
|
|
1461
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
1439
1462
|
|
|
1440
1463
|
user_content = self._build_content_with_images(content, images)
|
|
1441
1464
|
self._messages.append({"role": "user", "content": user_content})
|
|
@@ -160,6 +160,7 @@ class Conversation(ToolContextMixin):
|
|
|
160
160
|
|
|
161
161
|
# Reasoning content from last response
|
|
162
162
|
self._last_reasoning: str | None = None
|
|
163
|
+
self._last_google_parts: list[dict[str, Any]] | None = None
|
|
163
164
|
|
|
164
165
|
# Optional callback fired before each driver call inside the tool
|
|
165
166
|
# loop. Used by DeepAgent for summarization. The hook receives
|
|
@@ -210,6 +211,8 @@ class Conversation(ToolContextMixin):
|
|
|
210
211
|
msg: dict[str, Any] = {"role": "assistant", "content": content}
|
|
211
212
|
if self._last_reasoning:
|
|
212
213
|
msg["reasoning_content"] = self._last_reasoning
|
|
214
|
+
if self._last_google_parts is not None:
|
|
215
|
+
msg["_google_parts"] = self._last_google_parts
|
|
213
216
|
return msg
|
|
214
217
|
|
|
215
218
|
@property
|
|
@@ -554,6 +557,7 @@ class Conversation(ToolContextMixin):
|
|
|
554
557
|
resp = self._driver.generate_messages_with_hooks(final_msgs, merged)
|
|
555
558
|
text: str = resp.get("text", "")
|
|
556
559
|
self._last_reasoning = resp.get("reasoning_content")
|
|
560
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
557
561
|
self._accumulate_usage(resp.get("meta", {}))
|
|
558
562
|
self._messages.append(self._assistant_message(text))
|
|
559
563
|
return text
|
|
@@ -607,8 +611,9 @@ class Conversation(ToolContextMixin):
|
|
|
607
611
|
self._usage["turns"] += 1
|
|
608
612
|
# Track most recent prompt size so before_turn hooks know the
|
|
609
613
|
# current context window without recomputing it.
|
|
610
|
-
|
|
611
|
-
|
|
614
|
+
context_prompt_tokens = meta.get("initial_prompt_tokens", prompt_tokens)
|
|
615
|
+
if context_prompt_tokens:
|
|
616
|
+
self._last_prompt_tokens = context_prompt_tokens
|
|
612
617
|
logger.debug(
|
|
613
618
|
"[conversation] usage delta tokens=%d cost=%.6f | running total tokens=%d cost=%.6f turns=%d",
|
|
614
619
|
delta_tokens,
|
|
@@ -640,6 +645,7 @@ class Conversation(ToolContextMixin):
|
|
|
640
645
|
base64 string, or :class:`ImageContent`).
|
|
641
646
|
"""
|
|
642
647
|
self._last_reasoning = None
|
|
648
|
+
self._last_google_parts = None
|
|
643
649
|
|
|
644
650
|
# Route to appropriate tool handling
|
|
645
651
|
if self._tools:
|
|
@@ -661,6 +667,7 @@ class Conversation(ToolContextMixin):
|
|
|
661
667
|
text: str = resp.get("text", "")
|
|
662
668
|
meta = resp.get("meta", {})
|
|
663
669
|
self._last_reasoning = resp.get("reasoning_content")
|
|
670
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
664
671
|
|
|
665
672
|
# Record in history — store content with images for context
|
|
666
673
|
user_content = self._build_content_with_images(content, images)
|
|
@@ -705,6 +712,7 @@ class Conversation(ToolContextMixin):
|
|
|
705
712
|
if not tool_calls:
|
|
706
713
|
# No tool calls -> final response
|
|
707
714
|
self._last_reasoning = resp.get("reasoning_content")
|
|
715
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
708
716
|
self._messages.append(self._assistant_message(text))
|
|
709
717
|
return text
|
|
710
718
|
|
|
@@ -728,6 +736,8 @@ class Conversation(ToolContextMixin):
|
|
|
728
736
|
# on subsequent requests (e.g. Moonshot reasoning models).
|
|
729
737
|
if resp.get("reasoning_content") is not None:
|
|
730
738
|
assistant_msg["reasoning_content"] = resp["reasoning_content"]
|
|
739
|
+
if resp.get("_google_parts") is not None:
|
|
740
|
+
assistant_msg["_google_parts"] = resp["_google_parts"]
|
|
731
741
|
|
|
732
742
|
self._messages.append(assistant_msg)
|
|
733
743
|
msgs.append(assistant_msg)
|
|
@@ -773,6 +783,7 @@ class Conversation(ToolContextMixin):
|
|
|
773
783
|
provide real-time feedback when tools are registered.
|
|
774
784
|
"""
|
|
775
785
|
self._last_reasoning = None
|
|
786
|
+
self._last_google_parts = None
|
|
776
787
|
|
|
777
788
|
if not self._tools:
|
|
778
789
|
# No tools — just stream directly
|
|
@@ -816,6 +827,7 @@ class Conversation(ToolContextMixin):
|
|
|
816
827
|
if not tool_calls:
|
|
817
828
|
# Final response — stream it if possible
|
|
818
829
|
self._last_reasoning = resp.get("reasoning_content")
|
|
830
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
819
831
|
self._messages.append(self._assistant_message(text))
|
|
820
832
|
# Yield final text as deltas (single chunk since we already have the full text)
|
|
821
833
|
yield {"type": "text_delta", "text": text}
|
|
@@ -839,6 +851,8 @@ class Conversation(ToolContextMixin):
|
|
|
839
851
|
]
|
|
840
852
|
if resp.get("reasoning_content") is not None:
|
|
841
853
|
assistant_msg["reasoning_content"] = resp["reasoning_content"]
|
|
854
|
+
if resp.get("_google_parts") is not None:
|
|
855
|
+
assistant_msg["_google_parts"] = resp["_google_parts"]
|
|
842
856
|
|
|
843
857
|
self._messages.append(assistant_msg)
|
|
844
858
|
msgs.append(assistant_msg)
|
|
@@ -919,6 +933,7 @@ class Conversation(ToolContextMixin):
|
|
|
919
933
|
)
|
|
920
934
|
|
|
921
935
|
self._last_reasoning = None
|
|
936
|
+
self._last_google_parts = None
|
|
922
937
|
|
|
923
938
|
if not self._tools:
|
|
924
939
|
for chunk in self.ask_stream(content, options, images=images):
|
|
@@ -974,6 +989,7 @@ class Conversation(ToolContextMixin):
|
|
|
974
989
|
tool_calls_in_turn: list[dict[str, Any]] = []
|
|
975
990
|
pending_tools: list[dict[str, Any]] = []
|
|
976
991
|
turn_usage: dict[str, Any] = {}
|
|
992
|
+
google_parts: list[dict[str, Any]] | None = None
|
|
977
993
|
stop_reason: str = "end_turn"
|
|
978
994
|
|
|
979
995
|
tool_defs = self._active_tools().to_openai_format()
|
|
@@ -1006,6 +1022,7 @@ class Conversation(ToolContextMixin):
|
|
|
1006
1022
|
}
|
|
1007
1023
|
)
|
|
1008
1024
|
elif et == "message_stop":
|
|
1025
|
+
google_parts = getattr(event, "provider_state", {}).get("_google_parts")
|
|
1009
1026
|
turn_usage = dict(event.usage or {})
|
|
1010
1027
|
self._driver._auto_record_usage(
|
|
1011
1028
|
{"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
|
|
@@ -1056,6 +1073,9 @@ class Conversation(ToolContextMixin):
|
|
|
1056
1073
|
if full_thinking is not None:
|
|
1057
1074
|
assistant_msg["reasoning_content"] = full_thinking
|
|
1058
1075
|
self._last_reasoning = full_thinking
|
|
1076
|
+
if google_parts is not None:
|
|
1077
|
+
assistant_msg["_google_parts"] = google_parts
|
|
1078
|
+
self._last_google_parts = google_parts
|
|
1059
1079
|
|
|
1060
1080
|
self._messages.append(assistant_msg)
|
|
1061
1081
|
msgs.append(assistant_msg)
|
|
@@ -1331,6 +1351,7 @@ class Conversation(ToolContextMixin):
|
|
|
1331
1351
|
self._accumulate_usage(meta)
|
|
1332
1352
|
if chunk.get("reasoning_content"):
|
|
1333
1353
|
self._last_reasoning = chunk["reasoning_content"]
|
|
1354
|
+
self._last_google_parts = chunk.get("_google_parts")
|
|
1334
1355
|
except Exception as exc:
|
|
1335
1356
|
stream_error = exc
|
|
1336
1357
|
elapsed_ms = (time.perf_counter() - t0) * 1000
|
|
@@ -1496,6 +1517,7 @@ class Conversation(ToolContextMixin):
|
|
|
1496
1517
|
|
|
1497
1518
|
self._check_budget()
|
|
1498
1519
|
self._last_reasoning = None
|
|
1520
|
+
self._last_google_parts = None
|
|
1499
1521
|
|
|
1500
1522
|
merged = {**self._options, **(options or {})}
|
|
1501
1523
|
|
|
@@ -1564,6 +1586,7 @@ class Conversation(ToolContextMixin):
|
|
|
1564
1586
|
text = resp.get("text", "")
|
|
1565
1587
|
meta = resp.get("meta", {})
|
|
1566
1588
|
self._last_reasoning = resp.get("reasoning_content")
|
|
1589
|
+
self._last_google_parts = resp.get("_google_parts")
|
|
1567
1590
|
|
|
1568
1591
|
# Store original content (without schema boilerplate) for cleaner context
|
|
1569
1592
|
# Include images in history so subsequent turns can reference them
|
|
@@ -109,10 +109,12 @@ class MessageStop:
|
|
|
109
109
|
"""End of one assistant turn. ``stop_reason`` uses the shared vocabulary
|
|
110
110
|
(``end_turn``, ``tool_use``, ``max_tokens``, ``content_filter``,
|
|
111
111
|
``error``); drivers preserve the provider's raw value in
|
|
112
|
-
``usage["raw_stop_reason"]``.
|
|
112
|
+
``usage["raw_stop_reason"]``. ``provider_state`` carries opaque, JSON-safe
|
|
113
|
+
response data that must survive in conversation history for the next turn."""
|
|
113
114
|
|
|
114
115
|
stop_reason: str
|
|
115
116
|
usage: dict[str, Any] = field(default_factory=dict)
|
|
117
|
+
provider_state: dict[str, Any] = field(default_factory=dict)
|
|
116
118
|
event_type: Literal["message_stop"] = field(default="message_stop", init=False)
|
|
117
119
|
|
|
118
120
|
|
|
@@ -280,9 +280,11 @@ def companion(
|
|
|
280
280
|
(their model traffic then passes through, or goes to any Prompture model),
|
|
281
281
|
so the companion prefers the same port each time: 47811.
|
|
282
282
|
"""
|
|
283
|
+
import time
|
|
284
|
+
|
|
283
285
|
from ..companion import Automations, CodingToolSource, CompanionServer, LedgerSource, running_instance
|
|
284
286
|
from ..companion.memory import MemoryService
|
|
285
|
-
from ..companion.server import DEFAULT_PORT
|
|
287
|
+
from ..companion.server import DEFAULT_PORT, instance_lock
|
|
286
288
|
from ..companion.tool_routing import ToolRouting
|
|
287
289
|
|
|
288
290
|
existing = running_instance()
|
|
@@ -297,6 +299,21 @@ def companion(
|
|
|
297
299
|
if existing:
|
|
298
300
|
click.echo(f"Prompture companion already running at {existing['url']} (pid {existing.get('pid')}).")
|
|
299
301
|
return
|
|
302
|
+
# The quick check above misses a companion that is starting or too busy to
|
|
303
|
+
# answer in time; the lock doesn't, so two never run side by side.
|
|
304
|
+
lock = instance_lock()
|
|
305
|
+
deadline = time.monotonic() + 30
|
|
306
|
+
while lock is None:
|
|
307
|
+
existing = running_instance(timeout=5.0)
|
|
308
|
+
if existing:
|
|
309
|
+
click.echo(f"Prompture companion already running at {existing['url']} (pid {existing.get('pid')}).")
|
|
310
|
+
return
|
|
311
|
+
if time.monotonic() > deadline:
|
|
312
|
+
raise click.ClickException(
|
|
313
|
+
"Another Prompture companion is running but not answering; not starting a second one."
|
|
314
|
+
)
|
|
315
|
+
time.sleep(0.5)
|
|
316
|
+
lock = instance_lock()
|
|
300
317
|
|
|
301
318
|
def make(on_port: int) -> CompanionServer:
|
|
302
319
|
return CompanionServer(
|
|
@@ -47,7 +47,7 @@ import secrets
|
|
|
47
47
|
import threading
|
|
48
48
|
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
|
|
49
49
|
from pathlib import Path
|
|
50
|
-
from typing import Any
|
|
50
|
+
from typing import IO, Any
|
|
51
51
|
from urllib.parse import parse_qs, unquote, urlparse
|
|
52
52
|
|
|
53
53
|
from .automations import AutomationError, Automations, roadmap_steps
|
|
@@ -63,6 +63,8 @@ from .tool_routing import RoutingError, ToolRouting
|
|
|
63
63
|
logger = logging.getLogger("prompture.companion")
|
|
64
64
|
|
|
65
65
|
STATE_FILE = Path.home() / ".prompture" / "companion.json"
|
|
66
|
+
#: Held by the running companion, so a second one never starts next to it.
|
|
67
|
+
LOCK_FILE = Path.home() / ".prompture" / "companion.lock"
|
|
66
68
|
#: The port ``prompture companion`` asks for first, so routed CLIs find it at the same address.
|
|
67
69
|
DEFAULT_PORT = 47811
|
|
68
70
|
HEARTBEAT_SECONDS = 15.0
|
|
@@ -845,6 +847,32 @@ def running_instance(path: Path = STATE_FILE, timeout: float = 2.0) -> dict[str,
|
|
|
845
847
|
conn.close()
|
|
846
848
|
|
|
847
849
|
|
|
850
|
+
def instance_lock(path: Path = LOCK_FILE) -> IO[bytes] | None:
|
|
851
|
+
"""Claim the one-companion-per-user lock; ``None`` when another process holds it.
|
|
852
|
+
|
|
853
|
+
Keep the returned file open while serving. The OS drops the lock when the
|
|
854
|
+
process ends, however it ends, so a crash never leaves it stale. Unlike
|
|
855
|
+
:func:`running_instance` this doesn't depend on a busy companion answering
|
|
856
|
+
in time, so a slow one is never mistaken for a missing one.
|
|
857
|
+
"""
|
|
858
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
859
|
+
fh = open(path, "a+b") # noqa: SIM115 - held open for the life of the process
|
|
860
|
+
try:
|
|
861
|
+
if os.name == "nt":
|
|
862
|
+
import msvcrt
|
|
863
|
+
|
|
864
|
+
fh.seek(0)
|
|
865
|
+
msvcrt.locking(fh.fileno(), msvcrt.LK_NBLCK, 1)
|
|
866
|
+
else:
|
|
867
|
+
import fcntl
|
|
868
|
+
|
|
869
|
+
fcntl.flock(fh.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
|
|
870
|
+
except OSError:
|
|
871
|
+
fh.close()
|
|
872
|
+
return None
|
|
873
|
+
return fh
|
|
874
|
+
|
|
875
|
+
|
|
848
876
|
def process_alive(pid: int) -> bool:
|
|
849
877
|
"""Whether *pid* is a running process (best effort, no extra dependencies)."""
|
|
850
878
|
if pid <= 0:
|
|
@@ -8,11 +8,10 @@ the same thing. Each driver family puts it where its API reads it:
|
|
|
8
8
|
* ``"openai"``: ``reasoning_effort`` on Chat Completions style APIs (OpenAI, Azure, Groq, xAI,
|
|
9
9
|
OpenAI-compatible servers).
|
|
10
10
|
* ``"openrouter"``: ``reasoning.effort``.
|
|
11
|
-
* ``"google"``: ``thinking_config.thinking_level
|
|
11
|
+
* ``"google"``: ``thinking_config.thinking_level`` (model-dependent).
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
(``model_rates.get_model_info(...)["reasoning_options"]``).
|
|
13
|
+
Explicit provider-specific fields take precedence. Google maps generic effort to
|
|
14
|
+
the model's thinking levels; other providers validate the supplied value themselves.
|
|
16
15
|
"""
|
|
17
16
|
|
|
18
17
|
from __future__ import annotations
|
|
@@ -30,12 +29,14 @@ def requested_effort(options: dict[str, Any] | None) -> str | None:
|
|
|
30
29
|
return str(value) if value else None
|
|
31
30
|
|
|
32
31
|
|
|
33
|
-
def google_thinking_level(effort: str) -> str:
|
|
34
|
-
"""
|
|
32
|
+
def google_thinking_level(effort: str, model: str = "") -> str:
|
|
33
|
+
"""Map effort without sending unsupported levels to older Gemini models."""
|
|
34
|
+
if model.removeprefix("models/") == "gemini-4-argon" and effort == "medium":
|
|
35
|
+
return "medium"
|
|
35
36
|
return "low" if effort in ("none", "minimal", "low", "medium") else "high"
|
|
36
37
|
|
|
37
38
|
|
|
38
|
-
def apply_effort(request: dict[str, Any], options: dict[str, Any] | None, style: str) -> None:
|
|
39
|
+
def apply_effort(request: dict[str, Any], options: dict[str, Any] | None, style: str, *, model: str = "") -> None:
|
|
39
40
|
"""Put the requested effort into ``request`` the way ``style``'s API takes it."""
|
|
40
41
|
effort = requested_effort(options)
|
|
41
42
|
if effort is None:
|
|
@@ -48,7 +49,7 @@ def apply_effort(request: dict[str, Any], options: dict[str, Any] | None, style:
|
|
|
48
49
|
reasoning.setdefault("effort", effort)
|
|
49
50
|
elif style == "google":
|
|
50
51
|
thinking = request.setdefault("thinking_config", {})
|
|
51
|
-
if isinstance(thinking, dict):
|
|
52
|
-
thinking.setdefault("thinking_level", google_thinking_level(effort))
|
|
52
|
+
if isinstance(thinking, dict) and "thinking_budget" not in thinking:
|
|
53
|
+
thinking.setdefault("thinking_level", google_thinking_level(effort, model))
|
|
53
54
|
else:
|
|
54
55
|
raise ValueError(f"Unknown effort style: {style!r}")
|