prompture 1.1.3.dev3__tar.gz → 1.1.4.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.1.3.dev3 → prompture-1.1.4.dev2}/PKG-INFO +1 -1
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/_version.py +2 -2
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/__init__.py +9 -1
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/assistant.py +89 -18
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/review_loop.py +129 -11
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/coding_agent_events.py +4 -4
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/coding_agents.py +1 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/PKG-INFO +1 -1
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-driver/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-driver/references/driver-template.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-example/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-field/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-persona/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-test/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/add-tool/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/create-pr/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/run-tests/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.claude/skills/update-pricing/SKILL.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.env.copy +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/FUNDING.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/scripts/update_docs_version.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/scripts/update_wrapper_version.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/dev.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/documentation.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/pricing-freshness.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/publish.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/workflows/security.yml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.safety-project.ini +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/AGENTS.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/BREAKING_CHANGES.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/CLAUDE.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/CONTRIBUTING.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/LICENSE +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/MANIFEST.in +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/README.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/ROADMAP.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/SECURITY.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/dev.ps1 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/dev.sh +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/mypy_errors.txt +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/README.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/README.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/pyproject.toml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_json/test.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/README.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/pyproject.toml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/packages/llm_to_toon/test.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/agent.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/async_agent.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/async_conversation.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/async_deep_agent.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/conversation.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/planner.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/subagents.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/summarizer.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep/vfs.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep_agent.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep_prompts.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/deep_state.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/persona.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/simulated_tools.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/skills.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/tools_schema.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/agents/types.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/aio/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/bridges/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/bridges/tukuy_backend.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/cli.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/formatters.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/runner.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/cli/server.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/formats.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/schemas.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/dataset/synth.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/airllm_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/assemblyai_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_airllm_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_assemblyai_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_azure_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_bedrock_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cachibot_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cartesia_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_claude_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cohere_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_deepgram_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_deepgram_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_deepseek_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_elevenlabs_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_elevenlabs_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_embedding_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_google_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_google_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_google_vertexai_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_grok_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_grok_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_groq_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_hugging_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_img_gen_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_jina_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_jina_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_lmstudio_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_local_http_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_minimax_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mistral_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_modelscope_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_moonshot_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_ollama_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_compatible_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_moderation_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openai_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_openrouter_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_runway_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_stt_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_tts_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_video_gen_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/async_zai_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/audio_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/azure_config.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/azure_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/bedrock_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/bfl_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cachibot_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cartesia_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/claude_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cohere_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cohere_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/cohere_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/deepgram_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/deepgram_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/deepseek_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/driver_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/elevenlabs_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/elevenlabs_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/embedding_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/embedding_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/fal_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/fal_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/google_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/google_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/google_vertexai_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/grok_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/grok_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/grok_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/groq_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/hugging_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/img_gen_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/img_gen_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/jina_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/jina_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/kling_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/kling_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/lmstudio_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/local_http_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/luma_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/minimax_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/minimax_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mistral_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mistral_moderation_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/modelscope_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/moderation_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/moderation_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/moonshot_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mxbai_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/mxbai_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/nomic_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/ollama_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/ollama_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_compatible_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_moderation_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_stt_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openai_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/openrouter_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/pika_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/provider_descriptors.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/rerank_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/rerank_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_audio_transform_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_capabilities.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_tts_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/runway_video_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/stability_img_gen_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/stt_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/tts_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/video_gen_base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/video_gen_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/vision_helpers.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/voyage_embedding_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/voyage_rerank_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/drivers/zai_driver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/exceptions.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/async_core.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/code_extraction.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/core.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/fields.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/reasoning.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/strategy.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/tools.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/tukuy_bridge.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/extraction/validator.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/async_groups.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/consensus.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/debate.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/groups.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/groups/types.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/budget.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/cache.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/callbacks.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/capabilities.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/coding_agent_specs.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/cost_mixin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/discovery.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/ledger.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/logging.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/model_rates.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/pricing.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/provider_env.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/anthropic.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/azure.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/bedrock.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/cerebras.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/cohere.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/deepinfra.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/deepseek.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/fireworks.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/google.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/google_vertexai.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/groq.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/jina.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/mistral.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/mixedbread.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/moonshot.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/nomic.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/nvidia.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/openai.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/openrouter.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/perplexity.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/sambanova.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/siliconflow.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/together.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/voyage.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/rates/xai.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/session.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/settings.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/tracker.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/infra/tukuy_backend.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/chunking.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/detect.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/document.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/csv_parser.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/docx.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/html.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/markdown.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/pdf.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/ingestion/parsers/xlsx.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/integrations/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/integrations/tukuy_bridge.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/audio.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/image.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/media/video.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/01-why-prompture.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/02-installation.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/03-quickstart.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/04-toon-input.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/05-test-harness.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/06-stability.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pages/07-migration.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/history.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/serialization.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/persistence/store.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/pipeline.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/resolver.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/pipeline/routing.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/_aliases.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/audio_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/cloud_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/extras_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/google_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/image_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/local_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/openai_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/builtins/video_plugin.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/plugins/discovery.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/py.typed +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/character.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/chunker_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/markdown.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/recursive.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/semantic.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/chunkers/token.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/documents.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loader_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/csv_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/docx_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/epub_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/html_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/json_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/markdown_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/pdf_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/text_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/loaders/xlsx_loader.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/pipeline.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/hybrid.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/mmr.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/retriever_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/retrievers/similarity.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/base.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/chroma.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/faiss.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/pgvector.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/pinecone.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/qdrant.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/vectorstore_registry.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/rag/vectorstores/weaviate.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/detector.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/evaluator.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/refusal/markers.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/generator.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/README.md.j2 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/config.py.j2 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/env.example.j2 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/main.py.j2 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/models.py.j2 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/security/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/security/injection.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/security/redaction.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/testing/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/testing/driver_contract.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/tools/__init__.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/tools/code_exec.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture/tools/web_search.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/SOURCES.txt +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/dependency_links.txt +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/entry_points.txt +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/requires.txt +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture.egg-info/top_level.txt +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/prompture_cost_tracking.md +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/pyproject.toml +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/requirements.txt +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/scripts/check_pricing_freshness.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/setup.cfg +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/specs/basic_extraction.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/specs/schema_validation.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/specs/strategy_comparison.json +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/test.py +0 -0
- {prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/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.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 1,
|
|
21
|
+
__version__ = version = '1.1.4.dev2'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 1, 4, 'dev2')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -38,7 +38,13 @@ from .persona import (
|
|
|
38
38
|
reset_persona_registry,
|
|
39
39
|
reset_trait_registry,
|
|
40
40
|
)
|
|
41
|
-
from .review_loop import
|
|
41
|
+
from .review_loop import (
|
|
42
|
+
AsyncReviewLoop,
|
|
43
|
+
ReviewLoopEvent,
|
|
44
|
+
ReviewLoopEventType,
|
|
45
|
+
ReviewLoopIteration,
|
|
46
|
+
ReviewLoopResult,
|
|
47
|
+
)
|
|
42
48
|
from .skills import (
|
|
43
49
|
SKILLS,
|
|
44
50
|
SkillInfo,
|
|
@@ -97,6 +103,8 @@ __all__ = [
|
|
|
97
103
|
"GuardrailError",
|
|
98
104
|
"ModelRetry",
|
|
99
105
|
"Persona",
|
|
106
|
+
"ReviewLoopEvent",
|
|
107
|
+
"ReviewLoopEventType",
|
|
100
108
|
"ReviewLoopIteration",
|
|
101
109
|
"ReviewLoopResult",
|
|
102
110
|
"RunContext",
|
|
@@ -62,7 +62,7 @@ import asyncio
|
|
|
62
62
|
import dataclasses
|
|
63
63
|
import logging
|
|
64
64
|
import threading
|
|
65
|
-
from collections.abc import AsyncIterator
|
|
65
|
+
from collections.abc import AsyncIterator
|
|
66
66
|
from typing import Any
|
|
67
67
|
|
|
68
68
|
from .persona import Persona
|
|
@@ -145,34 +145,61 @@ class Assistant:
|
|
|
145
145
|
output_type: Optional Pydantic model passed to ``AsyncAgent`` for
|
|
146
146
|
structured-output parsing. Ignored for the coding-agent
|
|
147
147
|
backend.
|
|
148
|
-
options: Driver options
|
|
149
|
-
``
|
|
148
|
+
options: Driver options forwarded to the underlying agent's
|
|
149
|
+
``options`` kwarg (driver-level settings like
|
|
150
|
+
``{"max_tokens": 8000, "timeout": 600}``). Distinct from
|
|
151
|
+
``agent_options`` below, which targets the agent constructor
|
|
152
|
+
itself.
|
|
153
|
+
agent_options: Extra kwargs spread into ``AsyncAgent.__init__``
|
|
154
|
+
when ``enable_planning=False``. Use this for budget controls
|
|
155
|
+
and other agent-level settings the Assistant doesn't expose
|
|
156
|
+
as first-class fields, e.g.
|
|
157
|
+
``{"max_iterations": 5, "max_cost": 0.50,
|
|
158
|
+
"budget_policy": "hard_stop",
|
|
159
|
+
"fallback_models": ["openai/gpt-4o-mini"]}``.
|
|
150
160
|
coding_agent_options: Extra kwargs forwarded to
|
|
151
161
|
``run_coding_agent`` / ``astream_coding_agent`` (e.g.
|
|
152
162
|
``approval_mode``, ``cwd``, ``timeout``).
|
|
163
|
+
deep_agent_options: Extra kwargs spread into
|
|
164
|
+
``AsyncDeepAgent.__init__`` when ``enable_planning=True``
|
|
165
|
+
(e.g. ``{"enable_vfs": False, "enable_summarization": False,
|
|
166
|
+
"max_iterations": 30}``).
|
|
153
167
|
"""
|
|
154
168
|
|
|
155
169
|
name: str
|
|
156
170
|
persona: Persona
|
|
157
171
|
skills: tuple[SkillInfo, ...] = ()
|
|
158
|
-
|
|
172
|
+
# Either a tuple of Python callables OR a ToolRegistry — both are
|
|
173
|
+
# accepted by the underlying AsyncAgent.
|
|
174
|
+
tools: Any = ()
|
|
159
175
|
model: str | None = None
|
|
160
176
|
coding_agent: str | None = None
|
|
161
177
|
description: str = ""
|
|
162
178
|
variables: dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
163
179
|
enable_planning: bool = False
|
|
164
180
|
output_type: Any = None
|
|
181
|
+
output_key: str | None = None
|
|
165
182
|
options: dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
166
183
|
coding_agent_options: dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
184
|
+
# Extra kwargs forwarded to AsyncAgent.__init__ when enable_planning is
|
|
185
|
+
# False (e.g. {"max_iterations": 5, "max_cost": 0.50,
|
|
186
|
+
# "budget_policy": "hard_stop", "fallback_models": ["openai/gpt-4o-mini"]}).
|
|
187
|
+
# Anything AsyncAgent accepts works here — see its signature for the
|
|
188
|
+
# full list (max_tokens, persistent_conversation, output_key, ...).
|
|
189
|
+
agent_options: dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
190
|
+
# Extra kwargs forwarded to AsyncDeepAgent when enable_planning=True
|
|
191
|
+
# (e.g. {"enable_vfs": False, "enable_summarization": False}).
|
|
192
|
+
deep_agent_options: dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
167
193
|
|
|
168
194
|
# ----- construction --------------------------------------------------
|
|
169
195
|
|
|
170
196
|
def __post_init__(self) -> None:
|
|
171
|
-
# Normalise
|
|
172
|
-
#
|
|
197
|
+
# Normalise skills to an immutable tuple. Tools may be either a
|
|
198
|
+
# tuple of callables OR a ToolRegistry — both are passed
|
|
199
|
+
# through to AsyncAgent unchanged.
|
|
173
200
|
if not isinstance(self.skills, tuple):
|
|
174
201
|
object.__setattr__(self, "skills", tuple(self.skills))
|
|
175
|
-
if
|
|
202
|
+
if isinstance(self.tools, (list, set)):
|
|
176
203
|
object.__setattr__(self, "tools", tuple(self.tools))
|
|
177
204
|
|
|
178
205
|
if bool(self.model) == bool(self.coding_agent):
|
|
@@ -183,8 +210,7 @@ class Assistant:
|
|
|
183
210
|
)
|
|
184
211
|
if self.enable_planning and not self.model:
|
|
185
212
|
raise ValueError(
|
|
186
|
-
"enable_planning=True only applies to the LLM backend "
|
|
187
|
-
"(set `model=...`, not `coding_agent=...`)."
|
|
213
|
+
"enable_planning=True only applies to the LLM backend (set `model=...`, not `coding_agent=...`)."
|
|
188
214
|
)
|
|
189
215
|
|
|
190
216
|
# ----- composition ---------------------------------------------------
|
|
@@ -204,10 +230,7 @@ class Assistant:
|
|
|
204
230
|
persona = self.persona
|
|
205
231
|
|
|
206
232
|
for skill in self.skills:
|
|
207
|
-
block = (
|
|
208
|
-
f"## Skill: {skill.name}\n"
|
|
209
|
-
f"{skill.description}\n\n{skill.instructions}".rstrip()
|
|
210
|
-
)
|
|
233
|
+
block = f"## Skill: {skill.name}\n{skill.description}\n\n{skill.instructions}".rstrip()
|
|
211
234
|
persona = persona.extend(block)
|
|
212
235
|
|
|
213
236
|
# Push merged variables back so render() (called by AsyncAgent)
|
|
@@ -275,19 +298,52 @@ class Assistant:
|
|
|
275
298
|
|
|
276
299
|
# ----- LLM backend ---------------------------------------------------
|
|
277
300
|
|
|
301
|
+
def build_async_agent(self, **vars: Any) -> Any:
|
|
302
|
+
"""Construct the underlying ``AsyncAgent`` (or ``AsyncDeepAgent``).
|
|
303
|
+
|
|
304
|
+
Use this when you want the Assistant as a *configuration* bundle
|
|
305
|
+
(persona + skills + tools + model + options) but need to drive
|
|
306
|
+
the underlying agent yourself — through a group, a streaming
|
|
307
|
+
callback machinery, or any other orchestration layer that
|
|
308
|
+
operates on :class:`AsyncAgent` directly.
|
|
309
|
+
|
|
310
|
+
Args:
|
|
311
|
+
**vars: Per-call template variables merged into the persona
|
|
312
|
+
before rendering. Equivalent to the per-call kwargs of
|
|
313
|
+
:meth:`arun` / :meth:`astream`, but applied at
|
|
314
|
+
construction time.
|
|
315
|
+
|
|
316
|
+
Returns:
|
|
317
|
+
An :class:`AsyncAgent` when ``enable_planning=False``,
|
|
318
|
+
otherwise an :class:`AsyncDeepAgent`.
|
|
319
|
+
|
|
320
|
+
Raises:
|
|
321
|
+
ValueError: When this Assistant is configured with a
|
|
322
|
+
``coding_agent`` backend (it shells out to a CLI and has
|
|
323
|
+
no in-process agent to expose).
|
|
324
|
+
"""
|
|
325
|
+
if self.coding_agent:
|
|
326
|
+
raise ValueError(
|
|
327
|
+
"build_async_agent() is only available for the LLM backend; "
|
|
328
|
+
f"this Assistant uses coding_agent={self.coding_agent!r}."
|
|
329
|
+
)
|
|
330
|
+
return self._build_async_agent(call_vars=vars)
|
|
331
|
+
|
|
278
332
|
def _build_async_agent(self, *, call_vars: dict[str, Any]) -> Any:
|
|
279
333
|
persona = self._composed_persona(call_vars)
|
|
334
|
+
tools_arg = self._tools_for_agent()
|
|
280
335
|
if self.enable_planning:
|
|
281
336
|
from .async_deep_agent import AsyncDeepAgent
|
|
282
337
|
|
|
283
338
|
return AsyncDeepAgent(
|
|
284
339
|
self.model or "",
|
|
285
340
|
system_prompt=persona,
|
|
286
|
-
tools=
|
|
341
|
+
tools=tools_arg,
|
|
287
342
|
name=self.name,
|
|
288
343
|
description=self.description,
|
|
289
344
|
enable_planning=True,
|
|
290
345
|
options=dict(self.options) or None,
|
|
346
|
+
**dict(self.deep_agent_options),
|
|
291
347
|
)
|
|
292
348
|
|
|
293
349
|
from .async_agent import AsyncAgent
|
|
@@ -295,13 +351,30 @@ class Assistant:
|
|
|
295
351
|
return AsyncAgent(
|
|
296
352
|
self.model or "",
|
|
297
353
|
system_prompt=persona,
|
|
298
|
-
tools=
|
|
354
|
+
tools=tools_arg,
|
|
299
355
|
output_type=self.output_type,
|
|
356
|
+
output_key=self.output_key,
|
|
300
357
|
name=self.name,
|
|
301
358
|
description=self.description,
|
|
302
359
|
options=dict(self.options) or None,
|
|
360
|
+
**dict(self.agent_options),
|
|
303
361
|
)
|
|
304
362
|
|
|
363
|
+
def _tools_for_agent(self) -> Any:
|
|
364
|
+
"""Coerce ``self.tools`` into the shape ``AsyncAgent`` expects.
|
|
365
|
+
|
|
366
|
+
Returns ``None`` when nothing is configured, the underlying
|
|
367
|
+
``ToolRegistry`` when one was passed in directly, or a list of
|
|
368
|
+
callables otherwise.
|
|
369
|
+
"""
|
|
370
|
+
if not self.tools:
|
|
371
|
+
return None
|
|
372
|
+
# Tuples / lists of callables → list (AsyncAgent expects a list).
|
|
373
|
+
if isinstance(self.tools, tuple):
|
|
374
|
+
return list(self.tools) or None
|
|
375
|
+
# Any other object (e.g. ToolRegistry) is passed through verbatim.
|
|
376
|
+
return self.tools
|
|
377
|
+
|
|
305
378
|
async def _run_llm(
|
|
306
379
|
self,
|
|
307
380
|
prompt: str,
|
|
@@ -429,9 +502,7 @@ def clear_assistant_registry() -> None:
|
|
|
429
502
|
def _from_registry(cls: type[Assistant], name: str) -> Assistant:
|
|
430
503
|
found = get_assistant(name)
|
|
431
504
|
if found is None:
|
|
432
|
-
raise KeyError(
|
|
433
|
-
f"No Assistant registered as {name!r}. Known: {get_assistant_names()}"
|
|
434
|
-
)
|
|
505
|
+
raise KeyError(f"No Assistant registered as {name!r}. Known: {get_assistant_names()}")
|
|
435
506
|
return found
|
|
436
507
|
|
|
437
508
|
|
|
@@ -50,8 +50,8 @@ from __future__ import annotations
|
|
|
50
50
|
|
|
51
51
|
import dataclasses
|
|
52
52
|
import logging
|
|
53
|
-
from collections.abc import Callable
|
|
54
|
-
from typing import Any, Protocol, runtime_checkable
|
|
53
|
+
from collections.abc import AsyncIterator, Callable
|
|
54
|
+
from typing import Any, Literal, Protocol, runtime_checkable
|
|
55
55
|
|
|
56
56
|
logger = logging.getLogger("prompture.review_loop")
|
|
57
57
|
|
|
@@ -96,6 +96,53 @@ class ReviewLoopIteration:
|
|
|
96
96
|
review_result: Any = None
|
|
97
97
|
|
|
98
98
|
|
|
99
|
+
ReviewLoopEventType = Literal[
|
|
100
|
+
"iteration_started",
|
|
101
|
+
"coder_done",
|
|
102
|
+
"reviewer_done",
|
|
103
|
+
"approved",
|
|
104
|
+
"rejected",
|
|
105
|
+
"done",
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@dataclasses.dataclass(frozen=True)
|
|
110
|
+
class ReviewLoopEvent:
|
|
111
|
+
"""Event yielded by :meth:`AsyncReviewLoop.astream`.
|
|
112
|
+
|
|
113
|
+
Field meaning per ``type``:
|
|
114
|
+
|
|
115
|
+
* ``iteration_started`` — emitted before each coder run. ``index``
|
|
116
|
+
is the 0-based iteration number; ``prompt`` is the exact text the
|
|
117
|
+
coder will receive (for the first iteration this is the user
|
|
118
|
+
prompt; for later iterations it is ``feedback_prompt(...)``
|
|
119
|
+
output).
|
|
120
|
+
* ``coder_done`` — coder finished. ``code_output`` populated;
|
|
121
|
+
``code_result`` carries the raw coder return value (e.g.
|
|
122
|
+
:class:`AssistantResult` or :class:`AgentResult`) for backend-
|
|
123
|
+
specific fields like cost.
|
|
124
|
+
* ``reviewer_done`` — reviewer finished. ``review_output`` +
|
|
125
|
+
``review_result`` populated; ``approved`` reflects the
|
|
126
|
+
``approve_when`` verdict for this iteration.
|
|
127
|
+
* ``approved`` — terminal: the loop is about to exit because the
|
|
128
|
+
latest iteration was approved.
|
|
129
|
+
* ``rejected`` — terminal: the loop is about to exit because
|
|
130
|
+
``max_iters`` was hit without approval.
|
|
131
|
+
* ``done`` — emitted last, always. ``result`` carries the same
|
|
132
|
+
:class:`ReviewLoopResult` that :meth:`arun` would return.
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
type: ReviewLoopEventType
|
|
136
|
+
index: int = -1 # iteration index; -1 for the terminal "done" event
|
|
137
|
+
prompt: str = "" # only on iteration_started
|
|
138
|
+
code_output: str = "" # populated from coder_done onwards
|
|
139
|
+
review_output: str = "" # populated from reviewer_done onwards
|
|
140
|
+
approved: bool = False
|
|
141
|
+
code_result: Any = None
|
|
142
|
+
review_result: Any = None
|
|
143
|
+
result: Any = None # only on the final "done" event
|
|
144
|
+
|
|
145
|
+
|
|
99
146
|
@dataclasses.dataclass(frozen=True)
|
|
100
147
|
class ReviewLoopResult:
|
|
101
148
|
"""Final result returned by :meth:`AsyncReviewLoop.arun`."""
|
|
@@ -167,9 +214,7 @@ class AsyncReviewLoop:
|
|
|
167
214
|
review_prompt: Callable[[str], str] = dataclasses.field(
|
|
168
215
|
default=lambda code: f"Review this work and give feedback:\n\n{code}"
|
|
169
216
|
)
|
|
170
|
-
feedback_prompt: Callable[[str, ReviewLoopIteration], str] =
|
|
171
|
-
_default_feedback_prompt
|
|
172
|
-
)
|
|
217
|
+
feedback_prompt: Callable[[str, ReviewLoopIteration], str] = _default_feedback_prompt
|
|
173
218
|
|
|
174
219
|
def __post_init__(self) -> None:
|
|
175
220
|
if self.max_iters < 1:
|
|
@@ -182,7 +227,10 @@ class AsyncReviewLoop:
|
|
|
182
227
|
coder_kwargs: dict[str, Any] | None = None,
|
|
183
228
|
reviewer_kwargs: dict[str, Any] | None = None,
|
|
184
229
|
) -> ReviewLoopResult:
|
|
185
|
-
"""Run the loop to completion.
|
|
230
|
+
"""Run the loop to completion and return the final result.
|
|
231
|
+
|
|
232
|
+
Equivalent to consuming :meth:`astream` and returning its final
|
|
233
|
+
``done`` event's ``result``.
|
|
186
234
|
|
|
187
235
|
Args:
|
|
188
236
|
prompt: The initial task for the coder.
|
|
@@ -191,21 +239,69 @@ class AsyncReviewLoop:
|
|
|
191
239
|
reviewer_kwargs: Extra kwargs forwarded to every
|
|
192
240
|
``reviewer.arun`` call.
|
|
193
241
|
"""
|
|
242
|
+
final: ReviewLoopResult | None = None
|
|
243
|
+
async for event in self.astream(
|
|
244
|
+
prompt,
|
|
245
|
+
coder_kwargs=coder_kwargs,
|
|
246
|
+
reviewer_kwargs=reviewer_kwargs,
|
|
247
|
+
):
|
|
248
|
+
if event.type == "done":
|
|
249
|
+
final = event.result
|
|
250
|
+
assert final is not None # astream always emits a done event
|
|
251
|
+
return final
|
|
252
|
+
|
|
253
|
+
async def astream(
|
|
254
|
+
self,
|
|
255
|
+
prompt: str,
|
|
256
|
+
*,
|
|
257
|
+
coder_kwargs: dict[str, Any] | None = None,
|
|
258
|
+
reviewer_kwargs: dict[str, Any] | None = None,
|
|
259
|
+
) -> AsyncIterator[ReviewLoopEvent]:
|
|
260
|
+
"""Run the loop and yield :class:`ReviewLoopEvent` events live.
|
|
261
|
+
|
|
262
|
+
The sequence per iteration is:
|
|
263
|
+
``iteration_started`` → ``coder_done`` → ``reviewer_done``.
|
|
264
|
+
After the final iteration, ``approved`` or ``rejected`` fires,
|
|
265
|
+
followed by a single ``done`` event carrying the full
|
|
266
|
+
:class:`ReviewLoopResult`.
|
|
267
|
+
|
|
268
|
+
UI consumers can re-emit each event onto their own transport
|
|
269
|
+
(WebSocket, SSE, log line) without buffering the whole run.
|
|
270
|
+
"""
|
|
194
271
|
coder_kwargs = coder_kwargs or {}
|
|
195
272
|
reviewer_kwargs = reviewer_kwargs or {}
|
|
196
273
|
history: list[ReviewLoopIteration] = []
|
|
197
274
|
current_prompt = prompt
|
|
198
275
|
|
|
199
276
|
for i in range(self.max_iters):
|
|
277
|
+
yield ReviewLoopEvent(
|
|
278
|
+
type="iteration_started",
|
|
279
|
+
index=i,
|
|
280
|
+
prompt=current_prompt,
|
|
281
|
+
)
|
|
282
|
+
|
|
200
283
|
code_result = await self.coder.arun(current_prompt, **coder_kwargs)
|
|
201
284
|
code_text = getattr(code_result, "output", "") or ""
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
285
|
+
yield ReviewLoopEvent(
|
|
286
|
+
type="coder_done",
|
|
287
|
+
index=i,
|
|
288
|
+
code_output=code_text,
|
|
289
|
+
code_result=code_result,
|
|
205
290
|
)
|
|
206
|
-
review_text = getattr(review_result, "output", "") or ""
|
|
207
291
|
|
|
292
|
+
review_result = await self.reviewer.arun(self.review_prompt(code_text), **reviewer_kwargs)
|
|
293
|
+
review_text = getattr(review_result, "output", "") or ""
|
|
208
294
|
approved = bool(self.approve_when(review_result))
|
|
295
|
+
yield ReviewLoopEvent(
|
|
296
|
+
type="reviewer_done",
|
|
297
|
+
index=i,
|
|
298
|
+
code_output=code_text,
|
|
299
|
+
review_output=review_text,
|
|
300
|
+
approved=approved,
|
|
301
|
+
code_result=code_result,
|
|
302
|
+
review_result=review_result,
|
|
303
|
+
)
|
|
304
|
+
|
|
209
305
|
iteration = ReviewLoopIteration(
|
|
210
306
|
index=i,
|
|
211
307
|
code_output=code_text,
|
|
@@ -227,16 +323,38 @@ class AsyncReviewLoop:
|
|
|
227
323
|
current_prompt = self.feedback_prompt(prompt, iteration)
|
|
228
324
|
|
|
229
325
|
last = history[-1]
|
|
230
|
-
|
|
326
|
+
result = ReviewLoopResult(
|
|
231
327
|
output=last.code_output,
|
|
232
328
|
approved=last.approved,
|
|
233
329
|
iterations=len(history),
|
|
234
330
|
history=tuple(history),
|
|
235
331
|
)
|
|
236
332
|
|
|
333
|
+
yield ReviewLoopEvent(
|
|
334
|
+
type="approved" if result.approved else "rejected",
|
|
335
|
+
index=last.index,
|
|
336
|
+
code_output=result.output,
|
|
337
|
+
review_output=last.review_output,
|
|
338
|
+
approved=result.approved,
|
|
339
|
+
code_result=last.code_result,
|
|
340
|
+
review_result=last.review_result,
|
|
341
|
+
)
|
|
342
|
+
yield ReviewLoopEvent(
|
|
343
|
+
type="done",
|
|
344
|
+
index=last.index,
|
|
345
|
+
code_output=result.output,
|
|
346
|
+
review_output=last.review_output,
|
|
347
|
+
approved=result.approved,
|
|
348
|
+
code_result=last.code_result,
|
|
349
|
+
review_result=last.review_result,
|
|
350
|
+
result=result,
|
|
351
|
+
)
|
|
352
|
+
|
|
237
353
|
|
|
238
354
|
__all__ = [
|
|
239
355
|
"AsyncReviewLoop",
|
|
356
|
+
"ReviewLoopEvent",
|
|
357
|
+
"ReviewLoopEventType",
|
|
240
358
|
"ReviewLoopIteration",
|
|
241
359
|
"ReviewLoopResult",
|
|
242
360
|
]
|
|
@@ -251,10 +251,10 @@ _QUESTION_PHRASE_RE = re.compile(
|
|
|
251
251
|
|
|
252
252
|
_CHOICE_LINE_RE = re.compile(
|
|
253
253
|
r"^\s*(?:"
|
|
254
|
-
r"(?P<num>\d+)[.\):]\s+|"
|
|
255
|
-
r"[-*•]\s+|"
|
|
256
|
-
r"\([a-zA-Z]\)\s+|"
|
|
257
|
-
r"[a-zA-Z][.\)]\s+"
|
|
254
|
+
r"(?P<num>\d+)[.\):]\s+|" # 1. foo 1) foo 1: foo
|
|
255
|
+
r"[-*•]\s+|" # - foo * foo • foo
|
|
256
|
+
r"\([a-zA-Z]\)\s+|" # (a) foo
|
|
257
|
+
r"[a-zA-Z][.\)]\s+" # a) foo a. foo
|
|
258
258
|
r")(?P<body>.+\S)\s*$"
|
|
259
259
|
)
|
|
260
260
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml
RENAMED
|
File without changes
|
{prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml
RENAMED
|
File without changes
|
{prompture-1.1.3.dev3 → prompture-1.1.4.dev2}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|