prompture 1.9.1.dev1__tar.gz → 1.9.1.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/PKG-INFO +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/_version.py +2 -2
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/agent.py +58 -6
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/assistant.py +15 -3
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/async_agent.py +86 -7
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/async_conversation.py +19 -6
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/conversation.py +19 -6
- prompture-1.9.1.dev3/prompture/drivers/_media_usage.py +118 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/aggregator_base.py +60 -8
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_aggregator_base.py +60 -8
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_base.py +6 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_cohere_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_embedding_base.py +6 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_img_gen_base.py +6 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_jina_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_mxbai_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_nomic_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openai_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_video_gen_base.py +6 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_voyage_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/base.py +5 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/cohere_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/embedding_base.py +6 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/img_gen_base.py +6 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/jina_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/lipsync_base.py +44 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/music_base.py +41 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/mxbai_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/nomic_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openai_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/video_gen_base.py +6 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/voyage_embedding_driver.py +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/groups/debate.py +12 -4
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/__init__.py +4 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/cost_mixin.py +5 -2
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/tracker.py +63 -2
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/jobs.py +8 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/semantic.py +2 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/base.py +25 -2
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/chroma.py +3 -3
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/faiss.py +3 -3
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/pgvector.py +3 -3
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/pinecone.py +3 -3
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/qdrant.py +3 -3
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/weaviate.py +3 -3
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/nodes.py +16 -2
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture.egg-info/PKG-INFO +1 -1
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture.egg-info/SOURCES.txt +1 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/add-driver/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/add-driver/references/driver-template.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/add-example/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/add-field/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/add-persona/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/add-test/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/add-tool/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/create-pr/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/run-tests/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.claude/skills/update-pricing/SKILL.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.env.copy +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/FUNDING.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/scripts/update_docs_version.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/scripts/update_wrapper_version.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/workflows/dev.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/workflows/documentation.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/workflows/pricing-freshness.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/workflows/publish.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.github/workflows/security.yml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/.safety-project.ini +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/AGENTS.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/BREAKING_CHANGES.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/CLAUDE.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/CONTRIBUTING.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/LICENSE +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/MANIFEST.in +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/README.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/ROADMAP.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/SECURITY.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/VERSION +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/dev.ps1 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/dev.sh +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/mypy_errors.txt +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/README.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_json/README.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_json/pyproject.toml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_json/test.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_toon/README.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_toon/pyproject.toml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/packages/llm_to_toon/test.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/_internal/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/_internal/json_encoder.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/async_deep_agent.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep/planner.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep/subagents.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep/summarizer.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep/vfs.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep_agent.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep_prompts.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/deep_state.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/live_events.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/persona.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/review_loop.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/simulated_tools.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/skill_miner.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/skills.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/tool_grammars.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/tools_schema.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/agents/types.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/aio/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/bridges/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/bridges/tukuy_backend.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/checkpoints/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/checkpoints/core.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/checkpoints/stores.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/checkpoints/types.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/citations/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/citations/core.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/citations/types.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/cli/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/cli/cli.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/cli/formatters.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/cli/runner.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/cli/server.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/dedup.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/evol.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/filters.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/formats.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/schemas.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/seed.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/dataset/synth.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/_openai_compat.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/_openai_compat_stream.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/_prompt_cache.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/_prompted_tool_stream.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/airllm_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/assemblyai_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_airllm_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_azure_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_bedrock_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_cachibot_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_claude_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_cohere_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_deepseek_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_google_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_google_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_google_vertexai_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_grok_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_groq_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_hugging_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_jina_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_lmstudio_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_local_http_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_minimax_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_mistral_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_modelscope_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_moonshot_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_muapi_aggregator_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_ollama_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openai_compatible_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openai_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openai_moderation_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openai_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openai_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_openrouter_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_runway_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_stt_base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_tts_base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/async_zai_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/audio_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/azure_config.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/azure_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/bedrock_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/bfl_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/cachibot_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/cartesia_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/claude_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/cohere_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/cohere_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/deepgram_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/deepgram_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/deepseek_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/driver_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/embedding_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/fal_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/fal_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/google_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/google_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/google_vertexai_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/grok_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/grok_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/grok_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/groq_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/hugging_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/img_gen_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/jina_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/job_runner.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/kling_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/kling_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/lipsync_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/lmstudio_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/local_http_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/luma_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/media_capabilities.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/minimax_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/minimax_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/mistral_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/mistral_moderation_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/modelscope_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/moderation_base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/moderation_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/moonshot_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/muapi_aggregator_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/music_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/mxbai_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/ollama_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/ollama_embedding_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openai_compatible_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openai_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openai_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openai_moderation_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openai_stt_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openai_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/openrouter_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/pika_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/provider_branding.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/provider_descriptors.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/rerank_base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/rerank_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/runway_audio_transform_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/runway_capabilities.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/runway_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/runway_tts_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/runway_video_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/stability_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/stt_base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/tts_base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/vertex_img_gen_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/video_gen_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/vision_helpers.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/voyage_rerank_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/drivers/zai_driver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/eval/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/eval/base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/eval/faithfulness.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/eval/judge.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/eval/pairwise.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/eval/self_consistency.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/exceptions.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/async_core.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/code_extraction.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/core.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/few_shot.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/fields.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/reasoning.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/strategy.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/streaming.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/tools.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/tukuy_bridge.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/extraction/validator.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/groups/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/groups/async_groups.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/groups/consensus.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/groups/groups.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/groups/types.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/imaging/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/imaging/enhance.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/imaging/negative.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/imaging/set_planner.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/imaging/style_presets.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/budget.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/cache.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/callbacks.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/capabilities.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/coding_agent_events.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/coding_agent_specs.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/coding_agents.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/discovery.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/ledger.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/logging.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/media_pricing.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/media_rates.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/model_rates.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/pricing.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/provider_env.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/anthropic.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/azure.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/bedrock.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/cerebras.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/cohere.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/deepinfra.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/deepseek.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/fireworks.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/google.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/google_vertexai.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/groq.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/jina.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/mistral.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/mixedbread.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/moonshot.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/nomic.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/nvidia.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/openai.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/openrouter.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/perplexity.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/sambanova.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/siliconflow.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/together.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/voyage.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/rates/xai.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/session.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/settings.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/infra/tukuy_backend.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/chunking.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/detect.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/document.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/csv_parser.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/docx.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/html.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/markdown.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/pdf.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/ingestion/parsers/xlsx.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/integrations/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/integrations/mcp_bridge.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/integrations/tukuy_bridge.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/kg/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/kg/core.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/kg/stores.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/kg/types.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/mcp/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/mcp/client.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/mcp/server.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/mcp/tools.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/media/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/media/agent_tools.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/media/audio.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/media/hosting.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/media/image.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/media/video.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pages/01-why-prompture.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pages/02-installation.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pages/03-quickstart.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pages/04-toon-input.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pages/05-test-harness.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pages/06-stability.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pages/07-migration.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/persistence/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/persistence/history.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/persistence/serialization.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/persistence/store.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pipeline/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pipeline/pipeline.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pipeline/resolver.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/pipeline/routing.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/_aliases.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/audio_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/cloud_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/extras_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/google_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/image_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/local_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/openai_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/builtins/video_plugin.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/plugins/discovery.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/py.typed +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/character.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/chunker_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/contextual.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/markdown.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/recursive.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/chunkers/token.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/documents.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loader_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/csv_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/docx_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/epub_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/html_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/json_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/markdown_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/pdf_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/text_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/loaders/xlsx_loader.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/pipeline.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/_fusion.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/base.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/hybrid.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/hyde.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/mmr.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/multi_query.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/retriever_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/similarity.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/retrievers/step_back.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/refusal/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/refusal/detector.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/refusal/evaluator.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/refusal/markers.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/generator.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/templates/README.md.j2 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/templates/config.py.j2 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/templates/env.example.j2 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/templates/main.py.j2 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/templates/models.py.j2 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/security/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/security/injection.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/security/redaction.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/session_memory/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/session_memory/core.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/session_memory/stores.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/session_memory/types.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/swarm/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/swarm/environment.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/swarm/memory.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/swarm/scheduler.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/swarm/swarm.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/swarm/swarm_agent.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/swarm/types.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/testing/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/testing/driver_contract.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/tools/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/tools/code_exec.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/tools/web_search.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/__init__.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/architect.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/engine.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/errors.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/model.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/references.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/registry.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/scheduler.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture/workflow/state.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture.egg-info/dependency_links.txt +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture.egg-info/entry_points.txt +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture.egg-info/requires.txt +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture.egg-info/top_level.txt +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/prompture_cost_tracking.md +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/pyproject.toml +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/requirements.txt +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/scripts/check_pricing_freshness.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/setup.cfg +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/specs/basic_extraction.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/specs/schema_validation.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/specs/strategy_comparison.json +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/test.py +0 -0
- {prompture-1.9.1.dev1 → prompture-1.9.1.dev3}/test_version_diagnosis.py +0 -0
|
@@ -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.9.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 9, 1, '
|
|
21
|
+
__version__ = version = '1.9.1.dev3'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 9, 1, 'dev3')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -133,7 +133,9 @@ def _get_first_param_name(fn: Callable[..., Any]) -> str:
|
|
|
133
133
|
return ""
|
|
134
134
|
|
|
135
135
|
|
|
136
|
-
def _parse_simulated_tool_call(
|
|
136
|
+
def _parse_simulated_tool_call(
|
|
137
|
+
content: str, known_tools: Any | None = None
|
|
138
|
+
) -> tuple[str, dict[str, Any]] | None:
|
|
137
139
|
"""Recognise a prompted (simulated) tool call recorded as assistant text.
|
|
138
140
|
|
|
139
141
|
Drivers without ``supports_tool_use`` go through
|
|
@@ -154,10 +156,17 @@ def _parse_simulated_tool_call(content: str) -> tuple[str, dict[str, Any]] | Non
|
|
|
154
156
|
return None
|
|
155
157
|
if not isinstance(obj, dict):
|
|
156
158
|
return None
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
if obj.get("type") != "tool_call":
|
|
160
|
+
# Inferred shape (no discriminator), which parse_simulated_response
|
|
161
|
+
# also accepts when the model omits "type".
|
|
162
|
+
if not ("name" in obj and "arguments" in obj):
|
|
163
|
+
return None
|
|
164
|
+
# A structured ANSWER can legitimately carry name+arguments keys (a
|
|
165
|
+
# schema echo, a function description). When the caller can tell us
|
|
166
|
+
# which tools exist, only reclassify when the name matches one —
|
|
167
|
+
# otherwise the model's final output would silently vanish.
|
|
168
|
+
if known_tools is not None and obj.get("name") not in known_tools:
|
|
169
|
+
return None
|
|
161
170
|
name = obj.get("name")
|
|
162
171
|
args = obj.get("arguments", {})
|
|
163
172
|
if not isinstance(name, str) or not name or not isinstance(args, dict):
|
|
@@ -378,6 +387,44 @@ class Agent(Generic[DepsType]):
|
|
|
378
387
|
"""Set agent-level callbacks."""
|
|
379
388
|
self._agent_callbacks = value
|
|
380
389
|
|
|
390
|
+
@property
|
|
391
|
+
def driver(self):
|
|
392
|
+
"""The driver instance this agent will run against, or ``None``."""
|
|
393
|
+
return self._driver
|
|
394
|
+
|
|
395
|
+
@driver.setter
|
|
396
|
+
def driver(self, value) -> None:
|
|
397
|
+
"""Swap the driver (e.g. per-tenant credentials).
|
|
398
|
+
|
|
399
|
+
A persistent conversation built against the old driver is detected as
|
|
400
|
+
stale on the next run and rebuilt, so the swap takes effect there too.
|
|
401
|
+
"""
|
|
402
|
+
self._driver = value
|
|
403
|
+
|
|
404
|
+
@property
|
|
405
|
+
def options(self) -> dict[str, Any]:
|
|
406
|
+
"""Live per-call options dict (temperature, max_tokens, ...).
|
|
407
|
+
|
|
408
|
+
Mutations (``agent.options["temperature"] = 0.2``) apply from the
|
|
409
|
+
next run onward.
|
|
410
|
+
"""
|
|
411
|
+
return self._options
|
|
412
|
+
|
|
413
|
+
@options.setter
|
|
414
|
+
def options(self, value: dict[str, Any] | None) -> None:
|
|
415
|
+
self._options = dict(value) if value else {}
|
|
416
|
+
|
|
417
|
+
@property
|
|
418
|
+
def system_prompt(self):
|
|
419
|
+
"""The configured system prompt (str, Persona, or callable)."""
|
|
420
|
+
return self._system_prompt
|
|
421
|
+
|
|
422
|
+
@system_prompt.setter
|
|
423
|
+
def system_prompt(self, value) -> None:
|
|
424
|
+
"""Replace the system prompt; re-resolved on every run, including
|
|
425
|
+
for persistent conversations."""
|
|
426
|
+
self._system_prompt = value
|
|
427
|
+
|
|
381
428
|
@property
|
|
382
429
|
def conversation(self) -> Conversation | None:
|
|
383
430
|
"""The current persistent conversation, or ``None``."""
|
|
@@ -881,6 +928,9 @@ class Agent(Generic[DepsType]):
|
|
|
881
928
|
# Respect the newly resolved system prompt for this run.
|
|
882
929
|
if system_prompt is not None:
|
|
883
930
|
conv.system_prompt = system_prompt
|
|
931
|
+
# Pick up option mutations made since the conversation was
|
|
932
|
+
# built (agent.options is a live public dict).
|
|
933
|
+
conv._options = dict(self._options)
|
|
884
934
|
# Update tools and callbacks for this run.
|
|
885
935
|
# NOTE: assigning ``callbacks`` mutates the driver instance,
|
|
886
936
|
# which may be shared (e.g. passed to several agents). A
|
|
@@ -1176,7 +1226,9 @@ class Agent(Generic[DepsType]):
|
|
|
1176
1226
|
)
|
|
1177
1227
|
all_tool_calls.append({"name": name, "arguments": args, "id": tc.get("id", "")})
|
|
1178
1228
|
else:
|
|
1179
|
-
simulated = _parse_simulated_tool_call(
|
|
1229
|
+
simulated = _parse_simulated_tool_call(
|
|
1230
|
+
content, known_tools=(self._tools.names if self._tools else None)
|
|
1231
|
+
)
|
|
1180
1232
|
if simulated is not None:
|
|
1181
1233
|
# Prompted tool call: same step shape as the native path
|
|
1182
1234
|
# so a host sees one run, not two dialects.
|
|
@@ -384,13 +384,25 @@ class Assistant:
|
|
|
384
384
|
) -> AssistantResult:
|
|
385
385
|
agent = self._build_async_agent(call_vars=call_vars)
|
|
386
386
|
result: AgentResult = await agent.run(prompt, deps=deps)
|
|
387
|
+
# AgentResult.usage is a DICT (prompt_tokens/completion_tokens/cost) —
|
|
388
|
+
# getattr on a dict returns the default, so the attribute-style reads
|
|
389
|
+
# left cost_usd/input_tokens/output_tokens permanently None on the LLM
|
|
390
|
+
# backend and every host that trusted them recorded $0.00 forever.
|
|
387
391
|
usage = getattr(result, "usage", None)
|
|
392
|
+
if isinstance(usage, dict):
|
|
393
|
+
cost_usd = usage.get("cost")
|
|
394
|
+
input_tokens = usage.get("prompt_tokens")
|
|
395
|
+
output_tokens = usage.get("completion_tokens")
|
|
396
|
+
else:
|
|
397
|
+
cost_usd = getattr(usage, "total_cost_usd", None) if usage else None
|
|
398
|
+
input_tokens = getattr(usage, "input_tokens", None) if usage else None
|
|
399
|
+
output_tokens = getattr(usage, "output_tokens", None) if usage else None
|
|
388
400
|
return AssistantResult(
|
|
389
401
|
output=getattr(result, "output", "") or "",
|
|
390
402
|
backend="llm",
|
|
391
|
-
cost_usd=
|
|
392
|
-
input_tokens=
|
|
393
|
-
output_tokens=
|
|
403
|
+
cost_usd=cost_usd,
|
|
404
|
+
input_tokens=input_tokens,
|
|
405
|
+
output_tokens=output_tokens,
|
|
394
406
|
session_id=None,
|
|
395
407
|
raw=result,
|
|
396
408
|
)
|
|
@@ -56,7 +56,7 @@ _DEFAULT_MAX_AGENT_DEPTH = 5
|
|
|
56
56
|
|
|
57
57
|
# Share the same ContextVar with the sync Agent so depth tracking crosses
|
|
58
58
|
# agent boundaries (e.g. a sync Agent calling an AsyncAgent as a tool).
|
|
59
|
-
from .agent import _agent_depth
|
|
59
|
+
from .agent import _agent_depth, _parse_simulated_tool_call
|
|
60
60
|
|
|
61
61
|
# ------------------------------------------------------------------
|
|
62
62
|
# Helpers
|
|
@@ -321,6 +321,44 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
321
321
|
"""Set agent-level callbacks."""
|
|
322
322
|
self._agent_callbacks = value
|
|
323
323
|
|
|
324
|
+
@property
|
|
325
|
+
def driver(self):
|
|
326
|
+
"""The driver instance this agent will run against, or ``None``."""
|
|
327
|
+
return self._driver
|
|
328
|
+
|
|
329
|
+
@driver.setter
|
|
330
|
+
def driver(self, value) -> None:
|
|
331
|
+
"""Swap the driver (e.g. per-tenant credentials).
|
|
332
|
+
|
|
333
|
+
A persistent conversation built against the old driver is detected as
|
|
334
|
+
stale on the next run and rebuilt, so the swap takes effect there too.
|
|
335
|
+
"""
|
|
336
|
+
self._driver = value
|
|
337
|
+
|
|
338
|
+
@property
|
|
339
|
+
def options(self) -> dict[str, Any]:
|
|
340
|
+
"""Live per-call options dict (temperature, max_tokens, ...).
|
|
341
|
+
|
|
342
|
+
Mutations (``agent.options["temperature"] = 0.2``) apply from the
|
|
343
|
+
next run onward.
|
|
344
|
+
"""
|
|
345
|
+
return self._options
|
|
346
|
+
|
|
347
|
+
@options.setter
|
|
348
|
+
def options(self, value: dict[str, Any] | None) -> None:
|
|
349
|
+
self._options = dict(value) if value else {}
|
|
350
|
+
|
|
351
|
+
@property
|
|
352
|
+
def system_prompt(self):
|
|
353
|
+
"""The configured system prompt (str, Persona, or callable)."""
|
|
354
|
+
return self._system_prompt
|
|
355
|
+
|
|
356
|
+
@system_prompt.setter
|
|
357
|
+
def system_prompt(self, value) -> None:
|
|
358
|
+
"""Replace the system prompt; re-resolved on every run, including
|
|
359
|
+
for persistent conversations."""
|
|
360
|
+
self._system_prompt = value
|
|
361
|
+
|
|
324
362
|
@property
|
|
325
363
|
def conversation(self) -> Any:
|
|
326
364
|
"""The current persistent conversation, or ``None``."""
|
|
@@ -921,6 +959,9 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
921
959
|
# Respect the newly resolved system prompt for this run.
|
|
922
960
|
if system_prompt is not None:
|
|
923
961
|
conv.system_prompt = system_prompt
|
|
962
|
+
# Pick up option mutations made since the conversation was
|
|
963
|
+
# built (agent.options is a live public dict).
|
|
964
|
+
conv._options = dict(self._options)
|
|
924
965
|
# NOTE: assigning ``callbacks`` mutates the driver instance,
|
|
925
966
|
# which may be shared (e.g. passed to several agents). A
|
|
926
967
|
# persistent-conversation agent should treat its driver as
|
|
@@ -1150,8 +1191,15 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
1150
1191
|
for rec in tool_timings or []:
|
|
1151
1192
|
timings_by_name.setdefault(rec.get("name", ""), []).append(rec)
|
|
1152
1193
|
|
|
1194
|
+
# Name of a simulated tool call awaiting its result, which the prompted
|
|
1195
|
+
# loop records as the next user message rather than a "tool" message.
|
|
1196
|
+
pending_sim_tool: str | None = None
|
|
1197
|
+
|
|
1153
1198
|
for msg in messages:
|
|
1154
1199
|
role = msg.get("role", "")
|
|
1200
|
+
# Claim (and clear) any simulated call left by the previous message.
|
|
1201
|
+
sim_tool = pending_sim_tool
|
|
1202
|
+
pending_sim_tool = None
|
|
1155
1203
|
# Extract usage from message meta if present
|
|
1156
1204
|
msg_meta = msg.get("meta")
|
|
1157
1205
|
step_usage = None
|
|
@@ -1204,14 +1252,45 @@ class AsyncAgent(Generic[DepsType]):
|
|
|
1204
1252
|
)
|
|
1205
1253
|
all_tool_calls.append({"name": name, "arguments": args, "id": tc.get("id", "")})
|
|
1206
1254
|
else:
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1255
|
+
simulated = _parse_simulated_tool_call(
|
|
1256
|
+
content, known_tools=(self._tools.names if self._tools else None)
|
|
1257
|
+
)
|
|
1258
|
+
if simulated is not None:
|
|
1259
|
+
# Prompted tool call: same step shape as the native path
|
|
1260
|
+
# so a host sees one run, not two dialects.
|
|
1261
|
+
sim_name, sim_args = simulated
|
|
1262
|
+
steps.append(
|
|
1263
|
+
AgentStep(
|
|
1264
|
+
step_type=StepType.tool_call,
|
|
1265
|
+
timestamp=now,
|
|
1266
|
+
content="",
|
|
1267
|
+
tool_name=sim_name,
|
|
1268
|
+
tool_args=sim_args,
|
|
1269
|
+
usage=step_usage,
|
|
1270
|
+
)
|
|
1213
1271
|
)
|
|
1272
|
+
all_tool_calls.append({"name": sim_name, "arguments": sim_args, "id": ""})
|
|
1273
|
+
pending_sim_tool = sim_name
|
|
1274
|
+
else:
|
|
1275
|
+
steps.append(
|
|
1276
|
+
AgentStep(
|
|
1277
|
+
step_type=StepType.output,
|
|
1278
|
+
timestamp=now,
|
|
1279
|
+
content=content,
|
|
1280
|
+
usage=step_usage,
|
|
1281
|
+
)
|
|
1282
|
+
)
|
|
1283
|
+
|
|
1284
|
+
elif role == "user" and sim_tool is not None:
|
|
1285
|
+
# The prompted loop stores a tool result as a user message.
|
|
1286
|
+
steps.append(
|
|
1287
|
+
AgentStep(
|
|
1288
|
+
step_type=StepType.tool_result,
|
|
1289
|
+
timestamp=now,
|
|
1290
|
+
content=msg.get("content", "") or "",
|
|
1291
|
+
tool_name=sim_tool,
|
|
1214
1292
|
)
|
|
1293
|
+
)
|
|
1215
1294
|
|
|
1216
1295
|
elif role == "tool":
|
|
1217
1296
|
tool_call_id = msg.get("tool_call_id")
|
|
@@ -187,6 +187,19 @@ class AsyncConversation:
|
|
|
187
187
|
"""The reasoning/thinking content from the last LLM response, if any."""
|
|
188
188
|
return self._last_reasoning
|
|
189
189
|
|
|
190
|
+
def _assistant_message(self, content: str) -> dict[str, Any]:
|
|
191
|
+
"""Assistant history entry for the response just consumed.
|
|
192
|
+
|
|
193
|
+
Attaches ``reasoning_content`` when the response carried it, so the
|
|
194
|
+
trace survives in history on every path (plain ask, tool loop,
|
|
195
|
+
streaming, JSON asks) -- not only the with-tool-calls branch -- and
|
|
196
|
+
providers that require reasoning to be echoed back keep working.
|
|
197
|
+
"""
|
|
198
|
+
msg: dict[str, Any] = {"role": "assistant", "content": content}
|
|
199
|
+
if self._last_reasoning:
|
|
200
|
+
msg["reasoning_content"] = self._last_reasoning
|
|
201
|
+
return msg
|
|
202
|
+
|
|
190
203
|
@property
|
|
191
204
|
def messages(self) -> list[dict[str, Any]]:
|
|
192
205
|
"""Read-only view of the conversation history."""
|
|
@@ -546,7 +559,7 @@ class AsyncConversation:
|
|
|
546
559
|
text: str = resp.get("text", "")
|
|
547
560
|
self._last_reasoning = resp.get("reasoning_content")
|
|
548
561
|
self._accumulate_usage(resp.get("meta", {}))
|
|
549
|
-
self._messages.append(
|
|
562
|
+
self._messages.append(self._assistant_message(text))
|
|
550
563
|
return text
|
|
551
564
|
|
|
552
565
|
async def _final_answer_simulated(self, augmented_system: str, merged: dict[str, Any]) -> str:
|
|
@@ -642,7 +655,7 @@ class AsyncConversation:
|
|
|
642
655
|
|
|
643
656
|
user_content = self._build_content_with_images(content, images)
|
|
644
657
|
self._messages.append({"role": "user", "content": user_content})
|
|
645
|
-
self._messages.append(
|
|
658
|
+
self._messages.append(self._assistant_message(text))
|
|
646
659
|
self._accumulate_usage(meta)
|
|
647
660
|
|
|
648
661
|
return text
|
|
@@ -680,7 +693,7 @@ class AsyncConversation:
|
|
|
680
693
|
|
|
681
694
|
if not tool_calls:
|
|
682
695
|
self._last_reasoning = resp.get("reasoning_content")
|
|
683
|
-
self._messages.append(
|
|
696
|
+
self._messages.append(self._assistant_message(text))
|
|
684
697
|
return text
|
|
685
698
|
|
|
686
699
|
# Ensure every tool call has a usable id so parallel calls
|
|
@@ -782,7 +795,7 @@ class AsyncConversation:
|
|
|
782
795
|
|
|
783
796
|
if not tool_calls:
|
|
784
797
|
self._last_reasoning = resp.get("reasoning_content")
|
|
785
|
-
self._messages.append(
|
|
798
|
+
self._messages.append(self._assistant_message(text))
|
|
786
799
|
yield {"type": "text_delta", "text": text}
|
|
787
800
|
return
|
|
788
801
|
|
|
@@ -1259,7 +1272,7 @@ class AsyncConversation:
|
|
|
1259
1272
|
)
|
|
1260
1273
|
raise
|
|
1261
1274
|
|
|
1262
|
-
self._messages.append(
|
|
1275
|
+
self._messages.append(self._assistant_message(full_text))
|
|
1263
1276
|
|
|
1264
1277
|
async def ask_stream(
|
|
1265
1278
|
self,
|
|
@@ -1382,7 +1395,7 @@ class AsyncConversation:
|
|
|
1382
1395
|
else:
|
|
1383
1396
|
raise
|
|
1384
1397
|
|
|
1385
|
-
self._messages.append(
|
|
1398
|
+
self._messages.append(self._assistant_message(cleaned))
|
|
1386
1399
|
self._accumulate_usage(meta)
|
|
1387
1400
|
|
|
1388
1401
|
model_name = self._model_name
|
|
@@ -189,6 +189,19 @@ class Conversation:
|
|
|
189
189
|
"""The reasoning/thinking content from the last LLM response, if any."""
|
|
190
190
|
return self._last_reasoning
|
|
191
191
|
|
|
192
|
+
def _assistant_message(self, content: str) -> dict[str, Any]:
|
|
193
|
+
"""Assistant history entry for the response just consumed.
|
|
194
|
+
|
|
195
|
+
Attaches ``reasoning_content`` when the response carried it, so the
|
|
196
|
+
trace survives in history on every path (plain ask, tool loop,
|
|
197
|
+
streaming, JSON asks) -- not only the with-tool-calls branch -- and
|
|
198
|
+
providers that require reasoning to be echoed back keep working.
|
|
199
|
+
"""
|
|
200
|
+
msg: dict[str, Any] = {"role": "assistant", "content": content}
|
|
201
|
+
if self._last_reasoning:
|
|
202
|
+
msg["reasoning_content"] = self._last_reasoning
|
|
203
|
+
return msg
|
|
204
|
+
|
|
192
205
|
@property
|
|
193
206
|
def messages(self) -> list[dict[str, Any]]:
|
|
194
207
|
"""Read-only view of the conversation history."""
|
|
@@ -550,7 +563,7 @@ class Conversation:
|
|
|
550
563
|
text: str = resp.get("text", "")
|
|
551
564
|
self._last_reasoning = resp.get("reasoning_content")
|
|
552
565
|
self._accumulate_usage(resp.get("meta", {}))
|
|
553
|
-
self._messages.append(
|
|
566
|
+
self._messages.append(self._assistant_message(text))
|
|
554
567
|
return text
|
|
555
568
|
|
|
556
569
|
def _final_answer_simulated(self, augmented_system: str, merged: dict[str, Any]) -> str:
|
|
@@ -656,7 +669,7 @@ class Conversation:
|
|
|
656
669
|
# Record in history — store content with images for context
|
|
657
670
|
user_content = self._build_content_with_images(content, images)
|
|
658
671
|
self._messages.append({"role": "user", "content": user_content})
|
|
659
|
-
self._messages.append(
|
|
672
|
+
self._messages.append(self._assistant_message(text))
|
|
660
673
|
self._accumulate_usage(meta)
|
|
661
674
|
|
|
662
675
|
return text
|
|
@@ -696,7 +709,7 @@ class Conversation:
|
|
|
696
709
|
if not tool_calls:
|
|
697
710
|
# No tool calls -> final response
|
|
698
711
|
self._last_reasoning = resp.get("reasoning_content")
|
|
699
|
-
self._messages.append(
|
|
712
|
+
self._messages.append(self._assistant_message(text))
|
|
700
713
|
return text
|
|
701
714
|
|
|
702
715
|
# Ensure every tool call has a usable id so parallel calls
|
|
@@ -808,7 +821,7 @@ class Conversation:
|
|
|
808
821
|
if not tool_calls:
|
|
809
822
|
# Final response — stream it if possible
|
|
810
823
|
self._last_reasoning = resp.get("reasoning_content")
|
|
811
|
-
self._messages.append(
|
|
824
|
+
self._messages.append(self._assistant_message(text))
|
|
812
825
|
# Yield final text as deltas (single chunk since we already have the full text)
|
|
813
826
|
yield {"type": "text_delta", "text": text}
|
|
814
827
|
return
|
|
@@ -1296,7 +1309,7 @@ class Conversation:
|
|
|
1296
1309
|
)
|
|
1297
1310
|
raise
|
|
1298
1311
|
|
|
1299
|
-
self._messages.append(
|
|
1312
|
+
self._messages.append(self._assistant_message(full_text))
|
|
1300
1313
|
|
|
1301
1314
|
def ask_stream(
|
|
1302
1315
|
self,
|
|
@@ -1517,7 +1530,7 @@ class Conversation:
|
|
|
1517
1530
|
raise
|
|
1518
1531
|
|
|
1519
1532
|
# Store assistant response in history
|
|
1520
|
-
self._messages.append(
|
|
1533
|
+
self._messages.append(self._assistant_message(cleaned))
|
|
1521
1534
|
self._accumulate_usage(meta)
|
|
1522
1535
|
|
|
1523
1536
|
model_name = self._model_name
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Shared usage recording for media driver hook wrappers.
|
|
2
|
+
|
|
3
|
+
Media calls bill per image / second / job rather than per token, so the text
|
|
4
|
+
drivers' ``_auto_record_usage`` doesn't fit — but the spend is just as real,
|
|
5
|
+
and until this helper existed it never reached the usage tracker: media cost
|
|
6
|
+
lived only on the immediate response ``meta`` and vanished unless the caller
|
|
7
|
+
kept it. Every media ``*_with_hooks`` wrapper now records one
|
|
8
|
+
:class:`~prompture.infra.tracker.UsageEvent` (zero tokens, ``cost`` from meta,
|
|
9
|
+
unit count in ``metadata``) through the same global tracker as text calls, so
|
|
10
|
+
sinks and the SQLite ledger see the whole picture.
|
|
11
|
+
|
|
12
|
+
Fire-and-forget, mirroring the text bases: recording must never break the
|
|
13
|
+
generation it measures.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def record_embedding_driver_usage(
|
|
22
|
+
driver: Any,
|
|
23
|
+
meta: dict[str, Any] | None,
|
|
24
|
+
elapsed_ms: float,
|
|
25
|
+
*,
|
|
26
|
+
text_count: int,
|
|
27
|
+
status: str = "success",
|
|
28
|
+
error: Exception | None = None,
|
|
29
|
+
) -> None:
|
|
30
|
+
"""Record one embedding call as a usage event. Never raises.
|
|
31
|
+
|
|
32
|
+
Embeddings are input-only, so the token count lands on both
|
|
33
|
+
``prompt_tokens`` and ``total_tokens``.
|
|
34
|
+
"""
|
|
35
|
+
try:
|
|
36
|
+
from ..infra.ledger import _resolve_api_key_hash
|
|
37
|
+
from ..infra.tracker import UsageEvent, get_tracker
|
|
38
|
+
|
|
39
|
+
tracker = get_tracker()
|
|
40
|
+
if not tracker._enabled:
|
|
41
|
+
return
|
|
42
|
+
|
|
43
|
+
meta = meta or {}
|
|
44
|
+
driver_name = str(meta.get("model_name") or getattr(driver, "model", driver.__class__.__name__))
|
|
45
|
+
|
|
46
|
+
if "/" in driver_name:
|
|
47
|
+
provider, model = driver_name.split("/", 1)
|
|
48
|
+
else:
|
|
49
|
+
cls_name = driver.__class__.__name__.removeprefix("Async")
|
|
50
|
+
provider = cls_name.removesuffix("Driver").lower()
|
|
51
|
+
model = driver_name
|
|
52
|
+
|
|
53
|
+
model_name = f"{provider}/{model}" if provider else model
|
|
54
|
+
tokens = int(meta.get("total_tokens") or 0)
|
|
55
|
+
|
|
56
|
+
event = UsageEvent(
|
|
57
|
+
model_name=model_name,
|
|
58
|
+
provider=provider,
|
|
59
|
+
api_key_hash=_resolve_api_key_hash(model_name),
|
|
60
|
+
prompt_tokens=tokens,
|
|
61
|
+
total_tokens=tokens,
|
|
62
|
+
cost=float(meta.get("cost") or 0.0),
|
|
63
|
+
elapsed_ms=elapsed_ms,
|
|
64
|
+
status=status,
|
|
65
|
+
error_type=type(error).__name__ if error else None,
|
|
66
|
+
metadata={"modality": "embedding", "count": text_count},
|
|
67
|
+
)
|
|
68
|
+
tracker.record(event)
|
|
69
|
+
except Exception:
|
|
70
|
+
pass # fire-and-forget
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def record_media_usage(
|
|
74
|
+
driver: Any,
|
|
75
|
+
meta: dict[str, Any] | None,
|
|
76
|
+
elapsed_ms: float,
|
|
77
|
+
*,
|
|
78
|
+
modality: str,
|
|
79
|
+
count_key: str,
|
|
80
|
+
status: str = "success",
|
|
81
|
+
error: Exception | None = None,
|
|
82
|
+
) -> None:
|
|
83
|
+
"""Record one media generation as a usage event. Never raises."""
|
|
84
|
+
try:
|
|
85
|
+
from ..infra.ledger import _resolve_api_key_hash
|
|
86
|
+
from ..infra.tracker import UsageEvent, get_tracker
|
|
87
|
+
|
|
88
|
+
tracker = get_tracker()
|
|
89
|
+
if not tracker._enabled:
|
|
90
|
+
return
|
|
91
|
+
|
|
92
|
+
meta = meta or {}
|
|
93
|
+
driver_name = str(meta.get("model_name") or getattr(driver, "model", driver.__class__.__name__))
|
|
94
|
+
|
|
95
|
+
if "/" in driver_name:
|
|
96
|
+
provider, model = driver_name.split("/", 1)
|
|
97
|
+
else:
|
|
98
|
+
# Same class-name fallback as the text bases, Async prefix stripped
|
|
99
|
+
# so async twins attribute to the same provider.
|
|
100
|
+
cls_name = driver.__class__.__name__.removeprefix("Async")
|
|
101
|
+
provider = cls_name.removesuffix("Driver").lower()
|
|
102
|
+
model = driver_name
|
|
103
|
+
|
|
104
|
+
model_name = f"{provider}/{model}" if provider else model
|
|
105
|
+
|
|
106
|
+
event = UsageEvent(
|
|
107
|
+
model_name=model_name,
|
|
108
|
+
provider=provider,
|
|
109
|
+
api_key_hash=_resolve_api_key_hash(model_name),
|
|
110
|
+
cost=float(meta.get("cost") or 0.0),
|
|
111
|
+
elapsed_ms=elapsed_ms,
|
|
112
|
+
status=status,
|
|
113
|
+
error_type=type(error).__name__ if error else None,
|
|
114
|
+
metadata={"modality": modality, "count": int(meta.get(count_key) or 0)},
|
|
115
|
+
)
|
|
116
|
+
tracker.record(event)
|
|
117
|
+
except Exception:
|
|
118
|
+
pass # fire-and-forget
|