prompture 1.11.1.dev1__tar.gz → 1.11.2.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.11.1.dev1 → prompture-1.11.2.dev2}/.env.copy +4 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/PKG-INFO +1 -1
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/__init__.py +1 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/_version.py +2 -2
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/assistant.py +55 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/async_conversation.py +100 -27
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/conversation.py +101 -28
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_openai_compat_stream.py +48 -4
- prompture-1.11.2.dev2/prompture/drivers/_openai_responses.py +288 -0
- prompture-1.11.2.dev2/prompture/drivers/_usage_reporting.py +175 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_base.py +19 -4
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_claude_driver.py +34 -80
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_driver.py +73 -33
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/base.py +19 -4
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/claude_driver.py +50 -85
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_driver.py +66 -28
- prompture-1.11.2.dev2/prompture/execution/__init__.py +259 -0
- prompture-1.11.2.dev2/prompture/execution/context.py +1016 -0
- prompture-1.11.2.dev2/prompture/execution/context_eval.py +294 -0
- prompture-1.11.2.dev2/prompture/execution/data/document_qa_policies.json +320 -0
- prompture-1.11.2.dev2/prompture/execution/data/extraction_contacts.json +314 -0
- prompture-1.11.2.dev2/prompture/execution/data/tool_task_inventory.json +277 -0
- prompture-1.11.2.dev2/prompture/execution/fixtures.py +294 -0
- prompture-1.11.2.dev2/prompture/execution/gates.py +360 -0
- prompture-1.11.2.dev2/prompture/execution/harness.py +577 -0
- prompture-1.11.2.dev2/prompture/execution/improve/__init__.py +92 -0
- prompture-1.11.2.dev2/prompture/execution/improve/candidates.py +344 -0
- prompture-1.11.2.dev2/prompture/execution/improve/optimizer.py +292 -0
- prompture-1.11.2.dev2/prompture/execution/improve/promotion.py +332 -0
- prompture-1.11.2.dev2/prompture/execution/improve/scorecard.py +252 -0
- prompture-1.11.2.dev2/prompture/execution/integration.py +295 -0
- prompture-1.11.2.dev2/prompture/execution/outcomes.py +550 -0
- prompture-1.11.2.dev2/prompture/execution/policy.py +835 -0
- prompture-1.11.2.dev2/prompture/execution/sandbox.py +527 -0
- prompture-1.11.2.dev2/prompture/execution/scoring.py +276 -0
- prompture-1.11.2.dev2/prompture/execution/strategies/__init__.py +55 -0
- prompture-1.11.2.dev2/prompture/execution/strategies/base.py +499 -0
- prompture-1.11.2.dev2/prompture/execution/strategies/critique.py +383 -0
- prompture-1.11.2.dev2/prompture/execution/strategies/direct.py +210 -0
- prompture-1.11.2.dev2/prompture/execution/strategies/registry.py +83 -0
- prompture-1.11.2.dev2/prompture/execution/strategies/retrieve.py +354 -0
- prompture-1.11.2.dev2/prompture/execution/types.py +561 -0
- prompture-1.11.2.dev2/prompture/extraction/_usage.py +107 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/async_core.py +10 -2
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/core.py +7 -1
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/__init__.py +30 -0
- prompture-1.11.2.dev2/prompture/infra/billing.py +412 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/budget.py +66 -31
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/cost_mixin.py +159 -42
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/pricing.py +42 -1
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/session.py +33 -3
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/settings.py +5 -0
- prompture-1.11.2.dev2/prompture/infra/token_counting.py +220 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/tracker.py +256 -23
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/serialization.py +10 -2
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/__init__.py +37 -0
- prompture-1.11.2.dev2/prompture/workflow/recovery.py +1098 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/PKG-INFO +1 -1
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/SOURCES.txt +32 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture_cost_tracking.md +120 -9
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/pyproject.toml +2 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-driver/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-driver/references/driver-template.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-example/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-field/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-persona/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-test/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/add-tool/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/create-pr/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/run-tests/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.claude/skills/update-pricing/SKILL.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/FUNDING.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/scripts/update_docs_version.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/scripts/update_wrapper_version.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/dev.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/documentation.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/pricing-freshness.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/publish.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.github/workflows/security.yml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/.safety-project.ini +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/AGENTS.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/BREAKING_CHANGES.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/CLAUDE.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/CONTRIBUTING.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/LICENSE +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/MANIFEST.in +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/README.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/ROADMAP.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/SECURITY.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/VERSION +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/dev.ps1 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/dev.sh +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/mypy_errors.txt +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/README.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/README.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/pyproject.toml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_json/test.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/README.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/pyproject.toml +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/packages/llm_to_toon/test.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/_internal/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/_internal/json_encoder.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/agent.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/async_agent.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/async_deep_agent.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/planner.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/subagents.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/summarizer.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep/vfs.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep_agent.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep_prompts.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/deep_state.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/live_events.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/persona.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/review_loop.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/simulated_tools.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/skill_miner.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/skills.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/tool_grammars.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/tools_schema.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/agents/types.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/aio/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/bridges/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/bridges/tukuy_backend.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/core.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/stores.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/checkpoints/types.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/citations/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/citations/core.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/citations/types.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/cli.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/formatters.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/runner.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/cli/server.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/dedup.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/evol.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/filters.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/formats.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/schemas.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/seed.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/dataset/synth.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_media_usage.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_openai_compat.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_prompt_cache.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/_prompted_tool_stream.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/aggregator_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/airllm_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/assemblyai_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_aggregator_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_airllm_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_azure_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_bedrock_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cachibot_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cohere_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_deepseek_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_embedding_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_google_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_google_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_google_vertexai_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_grok_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_groq_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_hugging_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_img_gen_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_jina_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_jina_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_lmstudio_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_local_http_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_minimax_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mistral_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_modelscope_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_moonshot_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_ollama_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_compatible_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_moderation_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openai_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_openrouter_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_runway_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_stt_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_tts_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_video_gen_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/async_zai_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/audio_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/azure_config.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/azure_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/bedrock_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/bfl_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cachibot_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cartesia_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cohere_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cohere_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/cohere_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/deepgram_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/deepgram_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/deepseek_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/driver_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/embedding_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/embedding_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/fal_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/fal_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/google_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/google_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/google_vertexai_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/grok_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/grok_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/grok_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/groq_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/hugging_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/img_gen_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/img_gen_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/jina_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/jina_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/job_runner.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/kling_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/kling_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/lipsync_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/lipsync_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/lmstudio_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/local_http_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/luma_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/media_capabilities.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/minimax_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/minimax_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mistral_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mistral_moderation_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/modelscope_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/moderation_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/moderation_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/moonshot_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/muapi_aggregator_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/music_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/music_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mxbai_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/mxbai_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/nomic_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/ollama_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/ollama_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_compatible_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_moderation_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_stt_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openai_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/openrouter_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/pika_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/provider_branding.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/provider_descriptors.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/rerank_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/rerank_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_audio_transform_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_capabilities.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_tts_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/runway_video_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/stability_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/stt_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/tts_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/vertex_img_gen_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/video_gen_base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/video_gen_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/vision_helpers.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/voyage_embedding_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/voyage_rerank_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/drivers/zai_driver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/faithfulness.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/judge.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/pairwise.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/eval/self_consistency.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/exceptions.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/code_extraction.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/few_shot.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/fields.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/reasoning.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/strategy.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/streaming.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/tools.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/tukuy_bridge.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/extraction/validator.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/async_groups.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/consensus.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/debate.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/groups.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/groups/types.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/enhance.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/negative.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/set_planner.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/imaging/style_presets.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/cache.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/callbacks.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/capabilities.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/coding_agent_events.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/coding_agent_specs.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/coding_agents.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/discovery.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/ledger.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/logging.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/media_pricing.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/media_rates.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/model_rates.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/provider_env.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/anthropic.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/azure.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/bedrock.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/cerebras.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/cohere.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/deepinfra.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/deepseek.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/fireworks.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/google.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/google_vertexai.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/groq.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/jina.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/mistral.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/mixedbread.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/moonshot.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/nomic.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/nvidia.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/openai.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/openrouter.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/perplexity.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/sambanova.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/siliconflow.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/together.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/voyage.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/rates/xai.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/infra/tukuy_backend.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/chunking.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/detect.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/document.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/csv_parser.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/docx.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/html.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/markdown.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/pdf.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/ingestion/parsers/xlsx.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/integrations/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/integrations/mcp_bridge.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/integrations/tukuy_bridge.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/jobs.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/core.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/stores.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/kg/types.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/client.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/server.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/mcp/tools.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/agent_tools.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/audio.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/hosting.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/image.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/media/video.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/01-why-prompture.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/02-installation.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/03-quickstart.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/04-toon-input.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/05-test-harness.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/06-stability.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pages/07-migration.md +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/history.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/persistence/store.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/pipeline.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/resolver.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/pipeline/routing.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/_aliases.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/audio_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/cloud_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/extras_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/google_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/image_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/local_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/openai_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/builtins/video_plugin.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/plugins/discovery.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/py.typed +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/character.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/chunker_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/contextual.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/markdown.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/recursive.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/semantic.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/chunkers/token.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/documents.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loader_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/csv_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/docx_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/epub_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/html_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/json_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/markdown_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/pdf_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/text_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/loaders/xlsx_loader.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/pipeline.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/_fusion.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/hybrid.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/hyde.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/mmr.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/multi_query.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/retriever_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/similarity.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/retrievers/step_back.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/base.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/chroma.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/faiss.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/pgvector.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/pinecone.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/qdrant.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/rag/vectorstores/weaviate.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/detector.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/evaluator.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/refusal/markers.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/generator.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/README.md.j2 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/config.py.j2 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/env.example.j2 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/main.py.j2 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/models.py.j2 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/security/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/security/injection.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/security/redaction.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/core.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/stores.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/session_memory/types.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/environment.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/memory.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/scheduler.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/swarm.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/swarm_agent.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/swarm/types.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/testing/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/testing/driver_contract.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/tools/__init__.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/tools/code_exec.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/tools/web_search.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/architect.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/engine.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/errors.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/model.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/nodes.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/references.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/registry.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/scheduler.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture/workflow/state.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/dependency_links.txt +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/entry_points.txt +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/requires.txt +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/prompture.egg-info/top_level.txt +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/requirements.txt +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/scripts/check_pricing_freshness.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/setup.cfg +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/specs/basic_extraction.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/specs/schema_validation.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/specs/strategy_comparison.json +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/test.py +0 -0
- {prompture-1.11.1.dev1 → prompture-1.11.2.dev2}/test_version_diagnosis.py +0 -0
|
@@ -9,10 +9,14 @@ AI_PROVIDER=ollama
|
|
|
9
9
|
# ─── OpenAI ──────────────────────────────────────────────────────────────────
|
|
10
10
|
OPENAI_API_KEY=your-openai-api-key
|
|
11
11
|
OPENAI_MODEL=gpt-4o-mini
|
|
12
|
+
# Optional: only used by explicit BillingClient report requests.
|
|
13
|
+
OPENAI_ADMIN_KEY=
|
|
12
14
|
|
|
13
15
|
# ─── Claude (Anthropic) ─────────────────────────────────────────────────────
|
|
14
16
|
CLAUDE_API_KEY=your-claude-api-key
|
|
15
17
|
CLAUDE_MODEL=claude-haiku-4-5-20251001
|
|
18
|
+
# Optional organization reporting credential, separate from CLAUDE_API_KEY.
|
|
19
|
+
ANTHROPIC_ADMIN_KEY=
|
|
16
20
|
|
|
17
21
|
# ─── Ollama (local) ─────────────────────────────────────────────────────────
|
|
18
22
|
OLLAMA_ENDPOINT=http://localhost:11434
|
|
@@ -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.11.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 11,
|
|
21
|
+
__version__ = version = '1.11.2.dev2'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 11, 2, 'dev2')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -464,6 +464,61 @@ class Assistant:
|
|
|
464
464
|
raw=result,
|
|
465
465
|
)
|
|
466
466
|
|
|
467
|
+
# ----- execution strategies -----------------------------------------
|
|
468
|
+
|
|
469
|
+
def execution_request(self, prompt: str, **kwargs: Any) -> Any:
|
|
470
|
+
"""Build an :class:`~prompture.execution.types.ExecutionRequest` from this bundle.
|
|
471
|
+
|
|
472
|
+
Use it when you want to inspect or adjust the request before running a
|
|
473
|
+
strategy. See :func:`prompture.execution.integration.request_from_assistant`
|
|
474
|
+
for the accepted keyword arguments (``category``, ``output_model``,
|
|
475
|
+
``passages``, ``retriever``, ``limits``, ``allowed_tools``, ``variables``).
|
|
476
|
+
"""
|
|
477
|
+
from ..execution.integration import request_from_assistant
|
|
478
|
+
|
|
479
|
+
return request_from_assistant(self, prompt, **kwargs)
|
|
480
|
+
|
|
481
|
+
def run_strategy(self, prompt: str, strategy: Any = "direct", **kwargs: Any) -> Any:
|
|
482
|
+
"""Run this assistant's persona/skills/tools through an execution strategy.
|
|
483
|
+
|
|
484
|
+
This is an opt-in alternative to :meth:`arun`, not a replacement:
|
|
485
|
+
:meth:`arun` keeps returning an :class:`AssistantResult` from the agent
|
|
486
|
+
loop, while this returns an
|
|
487
|
+
:class:`~prompture.execution.types.ExecutionResult` with validation,
|
|
488
|
+
evidence, step records and full usage accounting.
|
|
489
|
+
|
|
490
|
+
Args:
|
|
491
|
+
prompt: The task.
|
|
492
|
+
strategy: A registered strategy name (``"direct"``,
|
|
493
|
+
``"retrieve_verify"``, ``"draft_critique"``) or a pre-built
|
|
494
|
+
:class:`~prompture.execution.strategies.base.ExecutionStrategy`.
|
|
495
|
+
**kwargs: Forwarded to
|
|
496
|
+
:func:`~prompture.execution.integration.request_from_assistant`.
|
|
497
|
+
|
|
498
|
+
Example::
|
|
499
|
+
|
|
500
|
+
result = assistant.run_strategy("Summarise the policy", strategy="direct")
|
|
501
|
+
print(result.termination.value, result.usage.cost_complete)
|
|
502
|
+
"""
|
|
503
|
+
from ..execution.integration import resolve_strategy_instance
|
|
504
|
+
|
|
505
|
+
request = self.execution_request(prompt, **kwargs)
|
|
506
|
+
instance = resolve_strategy_instance(strategy)
|
|
507
|
+
if instance.model is None and not request.model:
|
|
508
|
+
raise ValueError(
|
|
509
|
+
f"Assistant {self.name!r} has no model and the strategy has no default; "
|
|
510
|
+
"set `model=` on one of them."
|
|
511
|
+
)
|
|
512
|
+
return instance.run(request)
|
|
513
|
+
|
|
514
|
+
async def arun_strategy(self, prompt: str, strategy: Any = "direct", **kwargs: Any) -> Any:
|
|
515
|
+
"""Async counterpart to :meth:`run_strategy`."""
|
|
516
|
+
from ..execution.integration import resolve_strategy_instance
|
|
517
|
+
|
|
518
|
+
request = self.execution_request(prompt, **kwargs)
|
|
519
|
+
instance = resolve_strategy_instance(strategy)
|
|
520
|
+
return await instance.arun(request)
|
|
521
|
+
|
|
467
522
|
# ----- sync convenience --------------------------------------------
|
|
468
523
|
|
|
469
524
|
def run(self, prompt: str, **kwargs: Any) -> AssistantResult:
|
|
@@ -597,6 +597,9 @@ class AsyncConversation:
|
|
|
597
597
|
return msgs
|
|
598
598
|
|
|
599
599
|
def _accumulate_usage(self, meta: dict[str, Any]) -> None:
|
|
600
|
+
from ..infra.tracker import accumulate_usage_details
|
|
601
|
+
|
|
602
|
+
accumulate_usage_details(self._usage, meta)
|
|
600
603
|
delta_tokens = meta.get("total_tokens", 0)
|
|
601
604
|
delta_cost = meta.get("cost", 0.0)
|
|
602
605
|
prompt_tokens = meta.get("prompt_tokens", 0)
|
|
@@ -943,32 +946,73 @@ class AsyncConversation:
|
|
|
943
946
|
turn_usage: dict[str, Any] = {}
|
|
944
947
|
|
|
945
948
|
stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
949
|
+
stream_started = time.perf_counter()
|
|
950
|
+
recorded = False
|
|
951
|
+
stream_error = None
|
|
952
|
+
try:
|
|
953
|
+
async for event in stream:
|
|
954
|
+
et = getattr(event, "event_type", None)
|
|
955
|
+
if et == "text_delta":
|
|
956
|
+
assistant_text_parts.append(event.text)
|
|
957
|
+
elif et == "thinking_delta":
|
|
958
|
+
assistant_thinking_parts.append(event.text)
|
|
959
|
+
elif et == "tool_use_stop":
|
|
960
|
+
tool_use_id = event.id or f"call_{uuid.uuid4().hex}"
|
|
961
|
+
pending_tools.append(
|
|
962
|
+
{
|
|
963
|
+
"id": tool_use_id,
|
|
964
|
+
"name": event.name,
|
|
965
|
+
"arguments": event.input,
|
|
966
|
+
"truncated": getattr(event, "truncated", False),
|
|
967
|
+
}
|
|
968
|
+
)
|
|
969
|
+
tool_calls_in_turn.append(
|
|
970
|
+
{
|
|
971
|
+
"id": tool_use_id,
|
|
972
|
+
"type": "function",
|
|
973
|
+
"function": {"name": event.name, "arguments": json.dumps(event.input)},
|
|
974
|
+
}
|
|
975
|
+
)
|
|
976
|
+
elif et == "message_stop":
|
|
977
|
+
turn_usage = dict(event.usage or {})
|
|
978
|
+
self._driver._auto_record_usage(
|
|
979
|
+
{"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
|
|
980
|
+
)
|
|
981
|
+
self._driver._fire_callback(
|
|
982
|
+
"on_response",
|
|
983
|
+
{
|
|
984
|
+
"meta": turn_usage,
|
|
985
|
+
"driver": self._model_name,
|
|
986
|
+
"elapsed_ms": (time.perf_counter() - stream_started) * 1000,
|
|
987
|
+
},
|
|
988
|
+
)
|
|
989
|
+
self._accumulate_usage(turn_usage)
|
|
990
|
+
recorded = True
|
|
991
|
+
yield event
|
|
992
|
+
except Exception as exc:
|
|
993
|
+
stream_error = exc
|
|
994
|
+
self._driver._fire_callback("on_error", {"error": exc, "driver": self._model_name})
|
|
995
|
+
raise
|
|
996
|
+
finally:
|
|
997
|
+
if not recorded:
|
|
998
|
+
incomplete = {"usage_complete": False, "cost_status": "unknown"}
|
|
999
|
+
self._driver._auto_record_usage(
|
|
1000
|
+
{"meta": incomplete},
|
|
1001
|
+
(time.perf_counter() - stream_started) * 1000,
|
|
1002
|
+
status="error" if stream_error is not None else "incomplete",
|
|
1003
|
+
error=stream_error,
|
|
969
1004
|
)
|
|
970
|
-
|
|
971
|
-
|
|
1005
|
+
if stream_error is None:
|
|
1006
|
+
self._driver._fire_callback(
|
|
1007
|
+
"on_response",
|
|
1008
|
+
{
|
|
1009
|
+
"meta": incomplete,
|
|
1010
|
+
"driver": self._model_name,
|
|
1011
|
+
"status": "incomplete",
|
|
1012
|
+
"elapsed_ms": (time.perf_counter() - stream_started) * 1000,
|
|
1013
|
+
},
|
|
1014
|
+
)
|
|
1015
|
+
self._accumulate_usage(incomplete)
|
|
972
1016
|
|
|
973
1017
|
full_text = "".join(assistant_text_parts)
|
|
974
1018
|
full_thinking = "".join(assistant_thinking_parts) or None
|
|
@@ -982,8 +1026,6 @@ class AsyncConversation:
|
|
|
982
1026
|
|
|
983
1027
|
self._messages.append(assistant_msg)
|
|
984
1028
|
msgs.append(assistant_msg)
|
|
985
|
-
if turn_usage:
|
|
986
|
-
self._accumulate_usage(turn_usage)
|
|
987
1029
|
|
|
988
1030
|
if not pending_tools:
|
|
989
1031
|
yield TurnComplete(usage=dict(self._usage))
|
|
@@ -1237,6 +1279,8 @@ class AsyncConversation:
|
|
|
1237
1279
|
|
|
1238
1280
|
t0 = time.perf_counter()
|
|
1239
1281
|
full_text = ""
|
|
1282
|
+
recorded = False
|
|
1283
|
+
stream_error = None
|
|
1240
1284
|
try:
|
|
1241
1285
|
async for chunk in self._driver.generate_messages_stream(messages, merged):
|
|
1242
1286
|
chunk_type = chunk["type"]
|
|
@@ -1261,10 +1305,13 @@ class AsyncConversation:
|
|
|
1261
1305
|
"elapsed_ms": elapsed_ms,
|
|
1262
1306
|
},
|
|
1263
1307
|
)
|
|
1308
|
+
self._driver._auto_record_usage({"meta": meta}, elapsed_ms)
|
|
1309
|
+
recorded = True
|
|
1264
1310
|
self._accumulate_usage(meta)
|
|
1265
1311
|
if chunk.get("reasoning_content"):
|
|
1266
1312
|
self._last_reasoning = chunk["reasoning_content"]
|
|
1267
1313
|
except Exception as exc:
|
|
1314
|
+
stream_error = exc
|
|
1268
1315
|
elapsed_ms = (time.perf_counter() - t0) * 1000
|
|
1269
1316
|
self._driver._fire_callback(
|
|
1270
1317
|
"on_error",
|
|
@@ -1272,6 +1319,32 @@ class AsyncConversation:
|
|
|
1272
1319
|
)
|
|
1273
1320
|
raise
|
|
1274
1321
|
|
|
1322
|
+
finally:
|
|
1323
|
+
if not recorded:
|
|
1324
|
+
elapsed_ms = (time.perf_counter() - t0) * 1000
|
|
1325
|
+
incomplete = {
|
|
1326
|
+
"usage_complete": False,
|
|
1327
|
+
"cost_status": "unknown",
|
|
1328
|
+
"requested_model": merged.get("model", driver_name),
|
|
1329
|
+
}
|
|
1330
|
+
self._driver._auto_record_usage(
|
|
1331
|
+
{"meta": incomplete},
|
|
1332
|
+
elapsed_ms,
|
|
1333
|
+
status="error" if stream_error is not None else "incomplete",
|
|
1334
|
+
error=stream_error,
|
|
1335
|
+
)
|
|
1336
|
+
if stream_error is None:
|
|
1337
|
+
self._driver._fire_callback(
|
|
1338
|
+
"on_response",
|
|
1339
|
+
{
|
|
1340
|
+
"meta": incomplete,
|
|
1341
|
+
"driver": driver_name,
|
|
1342
|
+
"status": "incomplete",
|
|
1343
|
+
"elapsed_ms": elapsed_ms,
|
|
1344
|
+
},
|
|
1345
|
+
)
|
|
1346
|
+
self._accumulate_usage(incomplete)
|
|
1347
|
+
|
|
1275
1348
|
self._messages.append(self._assistant_message(full_text))
|
|
1276
1349
|
|
|
1277
1350
|
async def ask_stream(
|
|
@@ -601,6 +601,9 @@ class Conversation:
|
|
|
601
601
|
return msgs
|
|
602
602
|
|
|
603
603
|
def _accumulate_usage(self, meta: dict[str, Any]) -> None:
|
|
604
|
+
from ..infra.tracker import accumulate_usage_details
|
|
605
|
+
|
|
606
|
+
accumulate_usage_details(self._usage, meta)
|
|
604
607
|
delta_tokens = meta.get("total_tokens", 0)
|
|
605
608
|
delta_cost = meta.get("cost", 0.0)
|
|
606
609
|
prompt_tokens = meta.get("prompt_tokens", 0)
|
|
@@ -984,33 +987,74 @@ class Conversation:
|
|
|
984
987
|
stop_reason: str = "end_turn"
|
|
985
988
|
|
|
986
989
|
stream = self._driver.generate_messages_with_tools_stream(msgs, tool_defs, merged)
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
990
|
+
stream_started = time.perf_counter()
|
|
991
|
+
recorded = False
|
|
992
|
+
stream_error = None
|
|
993
|
+
try:
|
|
994
|
+
for event in stream:
|
|
995
|
+
et = getattr(event, "event_type", None)
|
|
996
|
+
if et == "text_delta":
|
|
997
|
+
assistant_text_parts.append(event.text)
|
|
998
|
+
elif et == "thinking_delta":
|
|
999
|
+
assistant_thinking_parts.append(event.text)
|
|
1000
|
+
elif et == "tool_use_stop":
|
|
1001
|
+
tool_use_id = event.id or f"call_{uuid.uuid4().hex}"
|
|
1002
|
+
pending_tools.append(
|
|
1003
|
+
{
|
|
1004
|
+
"id": tool_use_id,
|
|
1005
|
+
"name": event.name,
|
|
1006
|
+
"arguments": event.input,
|
|
1007
|
+
"truncated": getattr(event, "truncated", False),
|
|
1008
|
+
}
|
|
1009
|
+
)
|
|
1010
|
+
tool_calls_in_turn.append(
|
|
1011
|
+
{
|
|
1012
|
+
"id": tool_use_id,
|
|
1013
|
+
"type": "function",
|
|
1014
|
+
"function": {"name": event.name, "arguments": json.dumps(event.input)},
|
|
1015
|
+
}
|
|
1016
|
+
)
|
|
1017
|
+
elif et == "message_stop":
|
|
1018
|
+
turn_usage = dict(event.usage or {})
|
|
1019
|
+
self._driver._auto_record_usage(
|
|
1020
|
+
{"meta": turn_usage}, (time.perf_counter() - stream_started) * 1000
|
|
1021
|
+
)
|
|
1022
|
+
self._driver._fire_callback(
|
|
1023
|
+
"on_response",
|
|
1024
|
+
{
|
|
1025
|
+
"meta": turn_usage,
|
|
1026
|
+
"driver": self._model_name,
|
|
1027
|
+
"elapsed_ms": (time.perf_counter() - stream_started) * 1000,
|
|
1028
|
+
},
|
|
1029
|
+
)
|
|
1030
|
+
self._accumulate_usage(turn_usage)
|
|
1031
|
+
recorded = True
|
|
1032
|
+
stop_reason = event.stop_reason
|
|
1033
|
+
yield event
|
|
1034
|
+
except Exception as exc:
|
|
1035
|
+
stream_error = exc
|
|
1036
|
+
self._driver._fire_callback("on_error", {"error": exc, "driver": self._model_name})
|
|
1037
|
+
raise
|
|
1038
|
+
finally:
|
|
1039
|
+
if not recorded:
|
|
1040
|
+
incomplete = {"usage_complete": False, "cost_status": "unknown"}
|
|
1041
|
+
self._driver._auto_record_usage(
|
|
1042
|
+
{"meta": incomplete},
|
|
1043
|
+
(time.perf_counter() - stream_started) * 1000,
|
|
1044
|
+
status="error" if stream_error is not None else "incomplete",
|
|
1045
|
+
error=stream_error,
|
|
1010
1046
|
)
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1047
|
+
if stream_error is None:
|
|
1048
|
+
self._driver._fire_callback(
|
|
1049
|
+
"on_response",
|
|
1050
|
+
{
|
|
1051
|
+
"meta": incomplete,
|
|
1052
|
+
"driver": self._model_name,
|
|
1053
|
+
"status": "incomplete",
|
|
1054
|
+
"elapsed_ms": (time.perf_counter() - stream_started) * 1000,
|
|
1055
|
+
},
|
|
1056
|
+
)
|
|
1057
|
+
self._accumulate_usage(incomplete)
|
|
1014
1058
|
|
|
1015
1059
|
full_text = "".join(assistant_text_parts)
|
|
1016
1060
|
full_thinking = "".join(assistant_thinking_parts) or None
|
|
@@ -1024,8 +1068,6 @@ class Conversation:
|
|
|
1024
1068
|
|
|
1025
1069
|
self._messages.append(assistant_msg)
|
|
1026
1070
|
msgs.append(assistant_msg)
|
|
1027
|
-
if turn_usage:
|
|
1028
|
-
self._accumulate_usage(turn_usage)
|
|
1029
1071
|
|
|
1030
1072
|
if not pending_tools:
|
|
1031
1073
|
yield TurnComplete(usage=dict(self._usage))
|
|
@@ -1274,6 +1316,8 @@ class Conversation:
|
|
|
1274
1316
|
|
|
1275
1317
|
t0 = time.perf_counter()
|
|
1276
1318
|
full_text = ""
|
|
1319
|
+
recorded = False
|
|
1320
|
+
stream_error = None
|
|
1277
1321
|
try:
|
|
1278
1322
|
for chunk in self._driver.generate_messages_stream(messages, merged):
|
|
1279
1323
|
chunk_type = chunk["type"]
|
|
@@ -1298,10 +1342,13 @@ class Conversation:
|
|
|
1298
1342
|
"elapsed_ms": elapsed_ms,
|
|
1299
1343
|
},
|
|
1300
1344
|
)
|
|
1345
|
+
self._driver._auto_record_usage({"meta": meta}, elapsed_ms)
|
|
1346
|
+
recorded = True
|
|
1301
1347
|
self._accumulate_usage(meta)
|
|
1302
1348
|
if chunk.get("reasoning_content"):
|
|
1303
1349
|
self._last_reasoning = chunk["reasoning_content"]
|
|
1304
1350
|
except Exception as exc:
|
|
1351
|
+
stream_error = exc
|
|
1305
1352
|
elapsed_ms = (time.perf_counter() - t0) * 1000
|
|
1306
1353
|
self._driver._fire_callback(
|
|
1307
1354
|
"on_error",
|
|
@@ -1309,6 +1356,32 @@ class Conversation:
|
|
|
1309
1356
|
)
|
|
1310
1357
|
raise
|
|
1311
1358
|
|
|
1359
|
+
finally:
|
|
1360
|
+
if not recorded:
|
|
1361
|
+
elapsed_ms = (time.perf_counter() - t0) * 1000
|
|
1362
|
+
incomplete = {
|
|
1363
|
+
"usage_complete": False,
|
|
1364
|
+
"cost_status": "unknown",
|
|
1365
|
+
"requested_model": merged.get("model", driver_name),
|
|
1366
|
+
}
|
|
1367
|
+
self._driver._auto_record_usage(
|
|
1368
|
+
{"meta": incomplete},
|
|
1369
|
+
elapsed_ms,
|
|
1370
|
+
status="error" if stream_error is not None else "incomplete",
|
|
1371
|
+
error=stream_error,
|
|
1372
|
+
)
|
|
1373
|
+
if stream_error is None:
|
|
1374
|
+
self._driver._fire_callback(
|
|
1375
|
+
"on_response",
|
|
1376
|
+
{
|
|
1377
|
+
"meta": incomplete,
|
|
1378
|
+
"driver": driver_name,
|
|
1379
|
+
"status": "incomplete",
|
|
1380
|
+
"elapsed_ms": elapsed_ms,
|
|
1381
|
+
},
|
|
1382
|
+
)
|
|
1383
|
+
self._accumulate_usage(incomplete)
|
|
1384
|
+
|
|
1312
1385
|
self._messages.append(self._assistant_message(full_text))
|
|
1313
1386
|
|
|
1314
1387
|
def ask_stream(
|
|
@@ -85,7 +85,11 @@ def _process_chunk(
|
|
|
85
85
|
"""
|
|
86
86
|
from ..agents.live_events import TextDelta, ThinkingDelta, ToolInputDelta, ToolUseStart
|
|
87
87
|
|
|
88
|
+
for key in ("id", "model", "service_tier"):
|
|
89
|
+
if isinstance(getattr(chunk, key, None), str):
|
|
90
|
+
state.setdefault("response_info", {})[key] = getattr(chunk, key)
|
|
88
91
|
if getattr(chunk, "usage", None):
|
|
92
|
+
state["reported_usage"] = chunk.usage
|
|
89
93
|
state["prompt_tokens"] = chunk.usage.prompt_tokens or 0
|
|
90
94
|
state["completion_tokens"] = chunk.usage.completion_tokens or 0
|
|
91
95
|
state["cached_prompt_tokens"] = _extract_cached_tokens(chunk.usage)
|
|
@@ -235,6 +239,7 @@ def iter_openai_compat_live_events(
|
|
|
235
239
|
*,
|
|
236
240
|
model: str,
|
|
237
241
|
cost_fn: CostFn,
|
|
242
|
+
meta_fn: Callable[[dict[str, Any]], dict[str, Any]] | None = None,
|
|
238
243
|
) -> Iterator[Any]:
|
|
239
244
|
"""Consume a sync OpenAI-compat ``chat.completions`` stream with tools
|
|
240
245
|
and yield :class:`~prompture.agents.live_events.LiveEvent`.
|
|
@@ -259,7 +264,10 @@ def iter_openai_compat_live_events(
|
|
|
259
264
|
state["completion_tokens"],
|
|
260
265
|
state["cached_prompt_tokens"],
|
|
261
266
|
)
|
|
262
|
-
|
|
267
|
+
stop = _build_message_stop(state, model, cost)
|
|
268
|
+
if meta_fn is not None:
|
|
269
|
+
stop.usage.update(meta_fn(state))
|
|
270
|
+
yield stop
|
|
263
271
|
|
|
264
272
|
|
|
265
273
|
async def aiter_openai_compat_live_events(
|
|
@@ -267,6 +275,7 @@ async def aiter_openai_compat_live_events(
|
|
|
267
275
|
*,
|
|
268
276
|
model: str,
|
|
269
277
|
cost_fn: AsyncCostFn,
|
|
278
|
+
meta_fn: Callable[[dict[str, Any]], dict[str, Any]] | None = None,
|
|
270
279
|
) -> AsyncIterator[Any]:
|
|
271
280
|
"""Async sibling of :func:`iter_openai_compat_live_events`.
|
|
272
281
|
|
|
@@ -286,7 +295,10 @@ async def aiter_openai_compat_live_events(
|
|
|
286
295
|
state["cached_prompt_tokens"],
|
|
287
296
|
)
|
|
288
297
|
cost = await raw_cost if inspect.isawaitable(raw_cost) else raw_cost
|
|
289
|
-
|
|
298
|
+
stop = _build_message_stop(state, model, cost)
|
|
299
|
+
if meta_fn is not None:
|
|
300
|
+
stop.usage.update(meta_fn(state))
|
|
301
|
+
yield stop
|
|
290
302
|
|
|
291
303
|
|
|
292
304
|
# ----------------------------------------------------------------------
|
|
@@ -348,12 +360,28 @@ def stream_openai_compat_tool_call(
|
|
|
348
360
|
)
|
|
349
361
|
_apply_openai_tool_options(kwargs, options)
|
|
350
362
|
|
|
363
|
+
if provider == "openai":
|
|
364
|
+
from .openai_driver import _apply_openai_reporting_options
|
|
365
|
+
|
|
366
|
+
_apply_openai_reporting_options(kwargs, options)
|
|
351
367
|
stream = driver.client.chat.completions.create(**kwargs)
|
|
352
368
|
|
|
353
369
|
def cost_fn(prompt_tokens: int, completion_tokens: int, cached_tokens: int) -> float:
|
|
354
370
|
return driver._calculate_cost(provider, model, prompt_tokens, completion_tokens, cached_tokens=cached_tokens)
|
|
355
371
|
|
|
356
|
-
|
|
372
|
+
def meta_fn(state: dict[str, Any]) -> dict[str, Any]:
|
|
373
|
+
from ._usage_reporting import usage_meta
|
|
374
|
+
|
|
375
|
+
return usage_meta(
|
|
376
|
+
driver, provider, model, state.get("reported_usage"), response=state.get("response_info"), options=options
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
yield from iter_openai_compat_live_events(
|
|
380
|
+
stream,
|
|
381
|
+
model=model,
|
|
382
|
+
cost_fn=cost_fn,
|
|
383
|
+
meta_fn=meta_fn if provider == "openai" else None,
|
|
384
|
+
)
|
|
357
385
|
|
|
358
386
|
|
|
359
387
|
async def astream_openai_compat_tool_call(
|
|
@@ -399,12 +427,28 @@ async def astream_openai_compat_tool_call(
|
|
|
399
427
|
)
|
|
400
428
|
_apply_openai_tool_options(kwargs, options)
|
|
401
429
|
|
|
430
|
+
if provider == "openai":
|
|
431
|
+
from .openai_driver import _apply_openai_reporting_options
|
|
432
|
+
|
|
433
|
+
_apply_openai_reporting_options(kwargs, options)
|
|
402
434
|
stream = await driver.client.chat.completions.create(**kwargs)
|
|
403
435
|
|
|
404
436
|
def cost_fn(prompt_tokens: int, completion_tokens: int, cached_tokens: int) -> float:
|
|
405
437
|
return driver._calculate_cost(provider, model, prompt_tokens, completion_tokens, cached_tokens=cached_tokens)
|
|
406
438
|
|
|
407
|
-
|
|
439
|
+
def meta_fn(state: dict[str, Any]) -> dict[str, Any]:
|
|
440
|
+
from ._usage_reporting import usage_meta
|
|
441
|
+
|
|
442
|
+
return usage_meta(
|
|
443
|
+
driver, provider, model, state.get("reported_usage"), response=state.get("response_info"), options=options
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
async for ev in aiter_openai_compat_live_events(
|
|
447
|
+
stream,
|
|
448
|
+
model=model,
|
|
449
|
+
cost_fn=cost_fn,
|
|
450
|
+
meta_fn=meta_fn if provider == "openai" else None,
|
|
451
|
+
):
|
|
408
452
|
yield ev
|
|
409
453
|
|
|
410
454
|
|