prompture 1.1.4.dev2__tar.gz → 1.1.5.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/PKG-INFO +69 -4
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/README.md +67 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/dev.ps1 +10 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/__init__.py +70 -0
- prompture-1.1.5.dev1/prompture/_internal/__init__.py +5 -0
- prompture-1.1.5.dev1/prompture/_internal/json_encoder.py +118 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/_version.py +2 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/__init__.py +26 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/agent.py +180 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/async_agent.py +170 -4
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/async_conversation.py +158 -5
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/conversation.py +256 -5
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/summarizer.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep_state.py +2 -2
- prompture-1.1.5.dev1/prompture/agents/live_events.py +155 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/tools_schema.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/types.py +16 -14
- prompture-1.1.5.dev1/prompture/checkpoints/__init__.py +46 -0
- prompture-1.1.5.dev1/prompture/checkpoints/core.py +295 -0
- prompture-1.1.5.dev1/prompture/checkpoints/stores.py +299 -0
- prompture-1.1.5.dev1/prompture/checkpoints/types.py +108 -0
- prompture-1.1.5.dev1/prompture/citations/__init__.py +44 -0
- prompture-1.1.5.dev1/prompture/citations/core.py +294 -0
- prompture-1.1.5.dev1/prompture/citations/types.py +148 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/server.py +81 -54
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/dataset/__init__.py +33 -0
- prompture-1.1.5.dev1/prompture/dataset/dedup.py +340 -0
- prompture-1.1.5.dev1/prompture/dataset/evol.py +325 -0
- prompture-1.1.5.dev1/prompture/dataset/filters.py +266 -0
- prompture-1.1.5.dev1/prompture/dataset/seed.py +286 -0
- prompture-1.1.5.dev1/prompture/dataset/synth.py +421 -0
- prompture-1.1.5.dev1/prompture/drivers/_openai_compat.py +139 -0
- prompture-1.1.5.dev1/prompture/drivers/_openai_compat_stream.py +562 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/airllm_driver.py +3 -3
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/assemblyai_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_assemblyai_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_azure_driver.py +2 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_base.py +59 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cachibot_driver.py +17 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cartesia_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_claude_driver.py +209 -18
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_deepgram_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_deepgram_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_elevenlabs_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_elevenlabs_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_google_driver.py +22 -6
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_google_vertexai_driver.py +2 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_grok_driver.py +18 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_grok_img_gen_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_groq_driver.py +41 -7
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_lmstudio_driver.py +10 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mistral_driver.py +18 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_modelscope_driver.py +17 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_moonshot_driver.py +18 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_ollama_driver.py +7 -3
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_compatible_driver.py +10 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_driver.py +51 -7
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_embedding_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_img_gen_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openrouter_driver.py +28 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_zai_driver.py +17 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/azure_config.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/azure_driver.py +2 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/base.py +65 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cachibot_driver.py +17 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cartesia_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/claude_driver.py +282 -12
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cohere_driver.py +27 -7
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/deepgram_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/deepgram_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/driver_registry.py +3 -9
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/elevenlabs_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/elevenlabs_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/google_driver.py +26 -10
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/google_vertexai_driver.py +2 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/grok_driver.py +17 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/grok_img_gen_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/groq_driver.py +41 -7
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/lmstudio_driver.py +15 -3
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mistral_driver.py +44 -7
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/modelscope_driver.py +16 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/moonshot_driver.py +17 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/ollama_driver.py +18 -9
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_compatible_driver.py +12 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_driver.py +52 -7
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_embedding_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_img_gen_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_stt_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_tts_driver.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openrouter_driver.py +30 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/provider_descriptors.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/zai_driver.py +16 -0
- prompture-1.1.5.dev1/prompture/eval/__init__.py +47 -0
- prompture-1.1.5.dev1/prompture/eval/base.py +170 -0
- prompture-1.1.5.dev1/prompture/eval/faithfulness.py +281 -0
- prompture-1.1.5.dev1/prompture/eval/judge.py +359 -0
- prompture-1.1.5.dev1/prompture/eval/pairwise.py +245 -0
- prompture-1.1.5.dev1/prompture/eval/self_consistency.py +181 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/async_core.py +21 -37
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/core.py +185 -33
- prompture-1.1.5.dev1/prompture/extraction/few_shot.py +309 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/fields.py +5 -5
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/reasoning.py +3 -3
- prompture-1.1.5.dev1/prompture/extraction/streaming.py +373 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/tools.py +47 -19
- {prompture-1.1.4.dev2/prompture/integrations → prompture-1.1.5.dev1/prompture/extraction}/tukuy_bridge.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/consensus.py +3 -3
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/types.py +3 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/budget.py +5 -4
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/cache.py +5 -3
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/callbacks.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/logging.py +3 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/model_rates.py +34 -34
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/settings.py +79 -81
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/tracker.py +5 -5
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/__init__.py +1 -1
- {prompture-1.1.4.dev2/prompture/extraction → prompture-1.1.5.dev1/prompture/integrations}/tukuy_bridge.py +2 -1
- prompture-1.1.5.dev1/prompture/kg/__init__.py +43 -0
- prompture-1.1.5.dev1/prompture/kg/core.py +367 -0
- prompture-1.1.5.dev1/prompture/kg/stores.py +469 -0
- prompture-1.1.5.dev1/prompture/kg/types.py +162 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/history.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/pipeline.py +6 -6
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/__init__.py +21 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/chunker_registry.py +2 -1
- prompture-1.1.5.dev1/prompture/rag/chunkers/contextual.py +261 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/semantic.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loader_registry.py +4 -4
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/pipeline.py +58 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/__init__.py +33 -1
- prompture-1.1.5.dev1/prompture/rag/retrievers/_fusion.py +70 -0
- prompture-1.1.5.dev1/prompture/rag/retrievers/hyde.py +116 -0
- prompture-1.1.5.dev1/prompture/rag/retrievers/multi_query.py +175 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/retriever_registry.py +2 -1
- prompture-1.1.5.dev1/prompture/rag/retrievers/step_back.py +141 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/base.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/chroma.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/faiss.py +2 -2
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/pgvector.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/pinecone.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/qdrant.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/vectorstore_registry.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/weaviate.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/evaluator.py +1 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/security/redaction.py +2 -2
- prompture-1.1.5.dev1/prompture/session_memory/__init__.py +42 -0
- prompture-1.1.5.dev1/prompture/session_memory/core.py +317 -0
- prompture-1.1.5.dev1/prompture/session_memory/stores.py +386 -0
- prompture-1.1.5.dev1/prompture/session_memory/types.py +87 -0
- prompture-1.1.5.dev1/prompture/swarm/__init__.py +102 -0
- prompture-1.1.5.dev1/prompture/swarm/environment.py +245 -0
- prompture-1.1.5.dev1/prompture/swarm/memory.py +164 -0
- prompture-1.1.5.dev1/prompture/swarm/scheduler.py +206 -0
- prompture-1.1.5.dev1/prompture/swarm/swarm.py +317 -0
- prompture-1.1.5.dev1/prompture/swarm/swarm_agent.py +236 -0
- prompture-1.1.5.dev1/prompture/swarm/types.py +258 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/testing/driver_contract.py +1 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/tools/web_search.py +2 -1
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/PKG-INFO +69 -4
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/SOURCES.txt +44 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/pyproject.toml +2 -2
- prompture-1.1.4.dev2/prompture/dataset/synth.py +0 -283
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-driver/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-driver/references/driver-template.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-example/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-field/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-persona/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-test/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/add-tool/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/create-pr/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/run-tests/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/scaffold-extraction/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.claude/skills/update-pricing/SKILL.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.env.copy +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/FUNDING.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/pricing_cost_mismatch.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/provider_driver_bug.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/ISSUE_TEMPLATE/schema_extraction_failure.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/scripts/update_docs_version.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/scripts/update_wrapper_version.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/dev.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/documentation.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/pricing-freshness.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/publish.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.github/workflows/security.yml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/.safety-project.ini +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/AGENTS.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/BREAKING_CHANGES.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/CLAUDE.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/CONTRIBUTING.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/LICENSE +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/MANIFEST.in +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/ROADMAP.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/SECURITY.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/dev.sh +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/mypy_errors.txt +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/README.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/README.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/llm_to_json/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/pyproject.toml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_json/test.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/README.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/llm_to_toon/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/pyproject.toml +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/packages/llm_to_toon/test.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/assistant.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/async_deep_agent.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/planner.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/subagents.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep/vfs.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep_agent.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/deep_prompts.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/persona.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/review_loop.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/simulated_tools.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/agents/skills.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/aio/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/bridges/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/bridges/tukuy_backend.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/cli.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/formatters.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/cli/runner.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/dataset/formats.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/dataset/schemas.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_airllm_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_bedrock_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_bfl_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cohere_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cohere_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_cohere_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_deepseek_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_embedding_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_fal_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_fal_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_google_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_grok_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_hugging_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_ideogram_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_img_gen_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_jina_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_jina_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_kling_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_kling_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_local_http_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_luma_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_minimax_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_minimax_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mistral_moderation_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mxbai_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_mxbai_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_nomic_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_ollama_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_openai_moderation_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_pika_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_runway_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_runway_tts_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_runway_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_stability_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_stt_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_tts_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_video_gen_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_voyage_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/async_voyage_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/audio_registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/bedrock_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/bfl_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cohere_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/cohere_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/deepseek_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/embedding_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/embedding_registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/fal_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/fal_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/google_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/grok_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/hugging_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/ideogram_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/img_gen_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/img_gen_registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/jina_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/jina_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/kling_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/kling_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/local_http_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/luma_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/minimax_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/minimax_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mistral_moderation_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/moderation_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/moderation_registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mxbai_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/mxbai_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/nomic_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/ollama_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/openai_moderation_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/pika_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/rerank_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/rerank_registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_audio_transform_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_capabilities.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_tts_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/runway_video_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/stability_img_gen_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/stt_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/tts_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/video_gen_base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/video_gen_registry.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/vision_helpers.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/voyage_embedding_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/drivers/voyage_rerank_driver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/exceptions.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/code_extraction.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/strategy.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/extraction/validator.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/async_groups.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/debate.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/groups/groups.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/capabilities.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/coding_agent_events.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/coding_agent_specs.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/coding_agents.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/cost_mixin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/discovery.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/ledger.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/pricing.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/provider_env.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/anthropic.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/azure.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/bedrock.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/cerebras.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/cohere.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/deepinfra.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/deepseek.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/fireworks.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/google.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/google_vertexai.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/groq.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/jina.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/mistral.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/mixedbread.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/moonshot.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/nomic.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/nvidia.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/openai.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/openrouter.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/perplexity.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/sambanova.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/siliconflow.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/together.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/voyage.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/rates/xai.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/session.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/infra/tukuy_backend.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/chunking.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/detect.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/document.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/csv_parser.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/docx.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/html.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/markdown.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/pdf.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/ingestion/parsers/xlsx.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/integrations/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/audio.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/image.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/media/video.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/01-why-prompture.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/02-installation.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/03-quickstart.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/04-toon-input.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/05-test-harness.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/06-stability.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pages/07-migration.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/serialization.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/persistence/store.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/resolver.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/pipeline/routing.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/_aliases.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/anthropic_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/audio_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/cloud_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/embedding_rerank_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/extras_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/google_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/image_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/local_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/openai_compatible_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/openai_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/builtins/video_plugin.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/plugins/discovery.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/py.typed +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/character.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/markdown.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/recursive.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/chunkers/token.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/documents.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/csv_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/docx_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/epub_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/html_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/json_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/markdown_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/pdf_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/text_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/loaders/xlsx_loader.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/base.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/hybrid.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/mmr.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/retrievers/similarity.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/rag/vectorstores/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/detector.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/refusal/markers.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/generator.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/Dockerfile.j2 +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/README.md.j2 +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/config.py.j2 +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/env.example.j2 +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/main.py.j2 +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/models.py.j2 +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/scaffold/templates/requirements.txt.j2 +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/security/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/security/injection.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/testing/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/tools/__init__.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture/tools/code_exec.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/dependency_links.txt +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/entry_points.txt +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/requires.txt +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture.egg-info/top_level.txt +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/prompture_cost_tracking.md +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/requirements.txt +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/scripts/check_pricing_freshness.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/setup.cfg +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/specs/basic_extraction.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/specs/schema_validation.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/specs/strategy_comparison.json +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/test.py +0 -0
- {prompture-1.1.4.dev2 → prompture-1.1.5.dev1}/test_version_diagnosis.py +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: prompture
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5.dev1
|
|
4
4
|
Summary: Ask LLMs to return structured JSON and run cross-model tests. API-first.
|
|
5
5
|
Author-email: Juan Denis <juan@vene.co>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/jhd3197/prompture
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
Requires-Dist: click>=8.0
|
|
@@ -132,6 +132,18 @@ person = extract_with_model(Person, "Maria is 32, a developer in NYC.", model_na
|
|
|
132
132
|
print(person.name) # Maria
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
+
> **First time?** Pick a provider and install its extra. The core package above
|
|
136
|
+
> is just the orchestration layer — provider SDKs are opt-in.
|
|
137
|
+
>
|
|
138
|
+
> | Use `provider/...` | Install | Auth env var |
|
|
139
|
+
> |---|---|---|
|
|
140
|
+
> | `openai/gpt-4`, `openai/gpt-4o-mini`, … | `pip install "prompture[openai]"` | `OPENAI_API_KEY` |
|
|
141
|
+
> | `claude/claude-sonnet-4-6`, … | `pip install "prompture[anthropic]"` | `CLAUDE_API_KEY` |
|
|
142
|
+
> | `google/gemini-1.5-pro`, … | `pip install "prompture[google]"` | `GOOGLE_API_KEY` |
|
|
143
|
+
> | `groq/llama-3.1-8b-instant`, … | `pip install "prompture[groq]"` | `GROQ_API_KEY` |
|
|
144
|
+
> | `ollama/llama3.1:8b`, … (local) | no extra needed | — (set `OLLAMA_HOST` if non-default) |
|
|
145
|
+
> | everything in one go | `pip install "prompture[all]"` | provider-specific |
|
|
146
|
+
|
|
135
147
|
## Key Features
|
|
136
148
|
|
|
137
149
|
**Structured extraction**
|
|
@@ -951,6 +963,21 @@ print(result["usage"]) # token counts and cost
|
|
|
951
963
|
|
|
952
964
|
Prompture picks how to obtain structured JSON based on each model's capabilities. The cascade is `provider_native` (built-in JSON mode / schema enforcement) → `tool_call` (encode the schema as a function definition and read it back from the tool call) → `prompted_repair` (prompt for JSON, repair malformed output via AI cleanup). Pass `strategy="auto"` (default) to let Prompture select per model, or pin a specific strategy via the `StructuredOutputStrategy` enum or its string value. The strategy used is recorded in the response so you can see which path each call took.
|
|
953
965
|
|
|
966
|
+
### Constrained Decoding (vLLM / LMStudio / OpenRouter)
|
|
967
|
+
|
|
968
|
+
For any OpenAI-compatible driver — `OpenAICompatibleDriver`, `OpenRouterDriver`, `LMStudioDriver` (sync + async) — set `options={"guided_decoding": True}` to also ship vLLM-style `guided_json` fields alongside the standard `response_format`. That unlocks logit-level FSM-constrained sampling (100% schema validity at sample time) on backends that support it. Pin a specific backend with `"outlines"`, `"xgrammar"`, or `"lm-format-enforcer"`:
|
|
969
|
+
|
|
970
|
+
```python
|
|
971
|
+
result = extract_with_model(
|
|
972
|
+
Person,
|
|
973
|
+
"Maria is 32, a developer in NYC.",
|
|
974
|
+
model_name="openai_compatible/local-vllm",
|
|
975
|
+
options={"guided_decoding": "xgrammar"}, # fast lattice FSM
|
|
976
|
+
)
|
|
977
|
+
```
|
|
978
|
+
|
|
979
|
+
Unknown servers ignore the extra fields, so it's safe to leave on. An `options={"extra_body": {...}}` escape hatch mirrors the OpenAI SDK so you can also pass `min_p`, `repetition_penalty`, OpenRouter provider preferences, etc. See `examples/constrained_decoding_example.py`.
|
|
980
|
+
|
|
954
981
|
### Multi-Model Fallback
|
|
955
982
|
|
|
956
983
|
Try a list of models in priority order, with full per-attempt accounting — every model tried (success, failure, or skipped) is recorded with its cost, tokens, duration, capabilities, and strategy. The first success wins; if all fail, an optional `fallback` Pydantic instance is returned instead of raising.
|
|
@@ -1067,8 +1094,8 @@ from prompture import Conversation
|
|
|
1067
1094
|
|
|
1068
1095
|
conv = Conversation(model_name="openai/gpt-4")
|
|
1069
1096
|
conv.add_message("system", "You are a helpful assistant.")
|
|
1070
|
-
response = conv.
|
|
1071
|
-
follow_up = conv.
|
|
1097
|
+
response = conv.ask("What is the capital of France?")
|
|
1098
|
+
follow_up = conv.ask("What about Germany?") # retains context
|
|
1072
1099
|
```
|
|
1073
1100
|
|
|
1074
1101
|
### Tool Use
|
|
@@ -1377,6 +1404,37 @@ if doc.found:
|
|
|
1377
1404
|
|
|
1378
1405
|
Both helpers return plain dataclasses with no I/O of their own. See `examples/assistant_example.py` for the assistant + review-loop + extractor flow end-to-end.
|
|
1379
1406
|
|
|
1407
|
+
### Prompt Caching (Claude)
|
|
1408
|
+
|
|
1409
|
+
Anthropic prompt caching cuts input-token cost on cached prefixes to ~10% of
|
|
1410
|
+
the normal rate. Prompture turns it on by default for `ClaudeDriver` and
|
|
1411
|
+
`AsyncClaudeDriver` whenever the system prompt or tools bundle is large
|
|
1412
|
+
enough to benefit (≥4000 chars, roughly 1024 tokens — Anthropic's minimum
|
|
1413
|
+
cacheable block).
|
|
1414
|
+
|
|
1415
|
+
```python
|
|
1416
|
+
from prompture import Conversation
|
|
1417
|
+
|
|
1418
|
+
# Caching is automatic. The first call writes the cache (~1.25x cost on the
|
|
1419
|
+
# cached portion); subsequent calls within 5 minutes hit it (~0.1x cost).
|
|
1420
|
+
conv = Conversation(model_name="claude/claude-sonnet-4-6", system_prompt=LONG_SYSTEM_PROMPT)
|
|
1421
|
+
conv.ask("First question") # cache_creation_input_tokens > 0
|
|
1422
|
+
conv.ask("Second question") # cache_read_input_tokens > 0
|
|
1423
|
+
```
|
|
1424
|
+
|
|
1425
|
+
To inspect cache activity, read `cached_prompt_tokens` and
|
|
1426
|
+
`cache_creation_tokens` from the response meta. To disable caching for a
|
|
1427
|
+
specific call pass `options={"cache_prompt": False}`.
|
|
1428
|
+
|
|
1429
|
+
Tips:
|
|
1430
|
+
- Put stable content (persona, tools description, JSON schema) at the
|
|
1431
|
+
**start** of the system prompt; put per-call variables (user query,
|
|
1432
|
+
retrieved RAG context) in the message stream so they don't bust the cache.
|
|
1433
|
+
- Avoid `{{iteration}}` or other per-turn variables in Persona templates —
|
|
1434
|
+
they rotate the cache key every turn.
|
|
1435
|
+
- Block size below ~1024 tokens is silently dropped by Anthropic; below
|
|
1436
|
+
the threshold Prompture skips the `cache_control` marker to avoid noise.
|
|
1437
|
+
|
|
1380
1438
|
### Cost Pre-flight
|
|
1381
1439
|
|
|
1382
1440
|
Forecast the cost of a call **before** making it. Accepts either text
|
|
@@ -1729,6 +1787,13 @@ request body are forwarded to the driver as schemas; if the model
|
|
|
1729
1787
|
returns `tool_calls`, they appear in the response shape so the
|
|
1730
1788
|
client can execute locally.
|
|
1731
1789
|
|
|
1790
|
+
> **Single-worker constraint:** the server keeps conversations and
|
|
1791
|
+
> rate-limit buckets in **per-process memory**. Run with
|
|
1792
|
+
> `uvicorn --workers 1` (the default) — multi-worker deployments will
|
|
1793
|
+
> partition state across processes, so a `conversation_id` created on
|
|
1794
|
+
> one worker can return 404 on another. A shared-state backend (Redis
|
|
1795
|
+
> / Postgres) is on the roadmap.
|
|
1796
|
+
|
|
1732
1797
|
Selected flags:
|
|
1733
1798
|
|
|
1734
1799
|
| Flag | Purpose |
|
|
@@ -29,6 +29,18 @@ person = extract_with_model(Person, "Maria is 32, a developer in NYC.", model_na
|
|
|
29
29
|
print(person.name) # Maria
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
> **First time?** Pick a provider and install its extra. The core package above
|
|
33
|
+
> is just the orchestration layer — provider SDKs are opt-in.
|
|
34
|
+
>
|
|
35
|
+
> | Use `provider/...` | Install | Auth env var |
|
|
36
|
+
> |---|---|---|
|
|
37
|
+
> | `openai/gpt-4`, `openai/gpt-4o-mini`, … | `pip install "prompture[openai]"` | `OPENAI_API_KEY` |
|
|
38
|
+
> | `claude/claude-sonnet-4-6`, … | `pip install "prompture[anthropic]"` | `CLAUDE_API_KEY` |
|
|
39
|
+
> | `google/gemini-1.5-pro`, … | `pip install "prompture[google]"` | `GOOGLE_API_KEY` |
|
|
40
|
+
> | `groq/llama-3.1-8b-instant`, … | `pip install "prompture[groq]"` | `GROQ_API_KEY` |
|
|
41
|
+
> | `ollama/llama3.1:8b`, … (local) | no extra needed | — (set `OLLAMA_HOST` if non-default) |
|
|
42
|
+
> | everything in one go | `pip install "prompture[all]"` | provider-specific |
|
|
43
|
+
|
|
32
44
|
## Key Features
|
|
33
45
|
|
|
34
46
|
**Structured extraction**
|
|
@@ -848,6 +860,21 @@ print(result["usage"]) # token counts and cost
|
|
|
848
860
|
|
|
849
861
|
Prompture picks how to obtain structured JSON based on each model's capabilities. The cascade is `provider_native` (built-in JSON mode / schema enforcement) → `tool_call` (encode the schema as a function definition and read it back from the tool call) → `prompted_repair` (prompt for JSON, repair malformed output via AI cleanup). Pass `strategy="auto"` (default) to let Prompture select per model, or pin a specific strategy via the `StructuredOutputStrategy` enum or its string value. The strategy used is recorded in the response so you can see which path each call took.
|
|
850
862
|
|
|
863
|
+
### Constrained Decoding (vLLM / LMStudio / OpenRouter)
|
|
864
|
+
|
|
865
|
+
For any OpenAI-compatible driver — `OpenAICompatibleDriver`, `OpenRouterDriver`, `LMStudioDriver` (sync + async) — set `options={"guided_decoding": True}` to also ship vLLM-style `guided_json` fields alongside the standard `response_format`. That unlocks logit-level FSM-constrained sampling (100% schema validity at sample time) on backends that support it. Pin a specific backend with `"outlines"`, `"xgrammar"`, or `"lm-format-enforcer"`:
|
|
866
|
+
|
|
867
|
+
```python
|
|
868
|
+
result = extract_with_model(
|
|
869
|
+
Person,
|
|
870
|
+
"Maria is 32, a developer in NYC.",
|
|
871
|
+
model_name="openai_compatible/local-vllm",
|
|
872
|
+
options={"guided_decoding": "xgrammar"}, # fast lattice FSM
|
|
873
|
+
)
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
Unknown servers ignore the extra fields, so it's safe to leave on. An `options={"extra_body": {...}}` escape hatch mirrors the OpenAI SDK so you can also pass `min_p`, `repetition_penalty`, OpenRouter provider preferences, etc. See `examples/constrained_decoding_example.py`.
|
|
877
|
+
|
|
851
878
|
### Multi-Model Fallback
|
|
852
879
|
|
|
853
880
|
Try a list of models in priority order, with full per-attempt accounting — every model tried (success, failure, or skipped) is recorded with its cost, tokens, duration, capabilities, and strategy. The first success wins; if all fail, an optional `fallback` Pydantic instance is returned instead of raising.
|
|
@@ -964,8 +991,8 @@ from prompture import Conversation
|
|
|
964
991
|
|
|
965
992
|
conv = Conversation(model_name="openai/gpt-4")
|
|
966
993
|
conv.add_message("system", "You are a helpful assistant.")
|
|
967
|
-
response = conv.
|
|
968
|
-
follow_up = conv.
|
|
994
|
+
response = conv.ask("What is the capital of France?")
|
|
995
|
+
follow_up = conv.ask("What about Germany?") # retains context
|
|
969
996
|
```
|
|
970
997
|
|
|
971
998
|
### Tool Use
|
|
@@ -1274,6 +1301,37 @@ if doc.found:
|
|
|
1274
1301
|
|
|
1275
1302
|
Both helpers return plain dataclasses with no I/O of their own. See `examples/assistant_example.py` for the assistant + review-loop + extractor flow end-to-end.
|
|
1276
1303
|
|
|
1304
|
+
### Prompt Caching (Claude)
|
|
1305
|
+
|
|
1306
|
+
Anthropic prompt caching cuts input-token cost on cached prefixes to ~10% of
|
|
1307
|
+
the normal rate. Prompture turns it on by default for `ClaudeDriver` and
|
|
1308
|
+
`AsyncClaudeDriver` whenever the system prompt or tools bundle is large
|
|
1309
|
+
enough to benefit (≥4000 chars, roughly 1024 tokens — Anthropic's minimum
|
|
1310
|
+
cacheable block).
|
|
1311
|
+
|
|
1312
|
+
```python
|
|
1313
|
+
from prompture import Conversation
|
|
1314
|
+
|
|
1315
|
+
# Caching is automatic. The first call writes the cache (~1.25x cost on the
|
|
1316
|
+
# cached portion); subsequent calls within 5 minutes hit it (~0.1x cost).
|
|
1317
|
+
conv = Conversation(model_name="claude/claude-sonnet-4-6", system_prompt=LONG_SYSTEM_PROMPT)
|
|
1318
|
+
conv.ask("First question") # cache_creation_input_tokens > 0
|
|
1319
|
+
conv.ask("Second question") # cache_read_input_tokens > 0
|
|
1320
|
+
```
|
|
1321
|
+
|
|
1322
|
+
To inspect cache activity, read `cached_prompt_tokens` and
|
|
1323
|
+
`cache_creation_tokens` from the response meta. To disable caching for a
|
|
1324
|
+
specific call pass `options={"cache_prompt": False}`.
|
|
1325
|
+
|
|
1326
|
+
Tips:
|
|
1327
|
+
- Put stable content (persona, tools description, JSON schema) at the
|
|
1328
|
+
**start** of the system prompt; put per-call variables (user query,
|
|
1329
|
+
retrieved RAG context) in the message stream so they don't bust the cache.
|
|
1330
|
+
- Avoid `{{iteration}}` or other per-turn variables in Persona templates —
|
|
1331
|
+
they rotate the cache key every turn.
|
|
1332
|
+
- Block size below ~1024 tokens is silently dropped by Anthropic; below
|
|
1333
|
+
the threshold Prompture skips the `cache_control` marker to avoid noise.
|
|
1334
|
+
|
|
1277
1335
|
### Cost Pre-flight
|
|
1278
1336
|
|
|
1279
1337
|
Forecast the cost of a call **before** making it. Accepts either text
|
|
@@ -1626,6 +1684,13 @@ request body are forwarded to the driver as schemas; if the model
|
|
|
1626
1684
|
returns `tool_calls`, they appear in the response shape so the
|
|
1627
1685
|
client can execute locally.
|
|
1628
1686
|
|
|
1687
|
+
> **Single-worker constraint:** the server keeps conversations and
|
|
1688
|
+
> rate-limit buckets in **per-process memory**. Run with
|
|
1689
|
+
> `uvicorn --workers 1` (the default) — multi-worker deployments will
|
|
1690
|
+
> partition state across processes, so a `conversation_id` created on
|
|
1691
|
+
> one worker can return 404 on another. A shared-state backend (Redis
|
|
1692
|
+
> / Postgres) is on the roadmap.
|
|
1693
|
+
|
|
1629
1694
|
Selected flags:
|
|
1630
1695
|
|
|
1631
1696
|
| Flag | Purpose |
|
|
@@ -47,6 +47,16 @@ function Invoke-AllChecks {
|
|
|
47
47
|
Write-Host "fixed $fixed files" -ForegroundColor Yellow
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
# --- bandit security scan (matches .github/workflows/security.yml) ---
|
|
51
|
+
Write-Host " bandit " -ForegroundColor Cyan -NoNewline
|
|
52
|
+
$banditOut = & bandit -q -r $pyPath -c "$Root\pyproject.toml" 2>&1
|
|
53
|
+
if ($LASTEXITCODE -eq 0) {
|
|
54
|
+
Write-Host "ok" -ForegroundColor Green
|
|
55
|
+
} else {
|
|
56
|
+
Write-Host "fail" -ForegroundColor Red
|
|
57
|
+
$banditOut | Where-Object { $_ -match ">> Issue|Severity|Location" } | ForEach-Object { Write-Host " $_" -ForegroundColor DarkGray }
|
|
58
|
+
}
|
|
59
|
+
|
|
50
60
|
# --- mypy type check ---
|
|
51
61
|
Write-Host " mypy " -ForegroundColor Cyan -NoNewline
|
|
52
62
|
$out = & mypy $pyPath 2>&1
|
|
@@ -9,7 +9,27 @@ try:
|
|
|
9
9
|
except ImportError: # tukuy not installed
|
|
10
10
|
TukuyLLMBackend = None # type: ignore[assignment,misc]
|
|
11
11
|
create_tukuy_backend = None # type: ignore[assignment]
|
|
12
|
+
from . import eval as eval
|
|
12
13
|
from . import plugins, rag
|
|
14
|
+
from .checkpoints import (
|
|
15
|
+
Checkpoint,
|
|
16
|
+
CheckpointManager,
|
|
17
|
+
CheckpointStore,
|
|
18
|
+
FileCheckpointStore,
|
|
19
|
+
InMemoryCheckpointStore,
|
|
20
|
+
RunStatus,
|
|
21
|
+
SQLiteCheckpointStore,
|
|
22
|
+
restore_conversation,
|
|
23
|
+
snapshot_conversation,
|
|
24
|
+
)
|
|
25
|
+
from .citations import (
|
|
26
|
+
CITATION_INSTRUCTION,
|
|
27
|
+
Citation,
|
|
28
|
+
CitationTracker,
|
|
29
|
+
CitedAnswer,
|
|
30
|
+
Source,
|
|
31
|
+
extract_citations,
|
|
32
|
+
)
|
|
13
33
|
from .cli import *
|
|
14
34
|
from .dataset import (
|
|
15
35
|
ChatTurn,
|
|
@@ -22,6 +42,17 @@ from .dataset import (
|
|
|
22
42
|
to_sharegpt,
|
|
23
43
|
)
|
|
24
44
|
from .drivers import *
|
|
45
|
+
from .eval import (
|
|
46
|
+
EvalError,
|
|
47
|
+
FaithfulnessEvaluator,
|
|
48
|
+
FaithfulnessResult,
|
|
49
|
+
JudgeResult,
|
|
50
|
+
LLMJudge,
|
|
51
|
+
PairwiseJudge,
|
|
52
|
+
PairwiseResult,
|
|
53
|
+
SelfConsistencyEvaluator,
|
|
54
|
+
SelfConsistencyResult,
|
|
55
|
+
)
|
|
25
56
|
from .exceptions import (
|
|
26
57
|
BudgetExceededError,
|
|
27
58
|
ConfigurationError,
|
|
@@ -35,6 +66,17 @@ from .groups import *
|
|
|
35
66
|
from .infra import *
|
|
36
67
|
from .ingestion import *
|
|
37
68
|
from .integrations import *
|
|
69
|
+
from .kg import (
|
|
70
|
+
Entity,
|
|
71
|
+
EntityStore,
|
|
72
|
+
InMemoryEntityStore,
|
|
73
|
+
KnowledgeGraph,
|
|
74
|
+
Mention,
|
|
75
|
+
Relation,
|
|
76
|
+
SQLiteEntityStore,
|
|
77
|
+
extract_entities,
|
|
78
|
+
extract_relations,
|
|
79
|
+
)
|
|
38
80
|
from .media import *
|
|
39
81
|
from .persistence import *
|
|
40
82
|
from .pipeline import *
|
|
@@ -57,6 +99,34 @@ from .security import (
|
|
|
57
99
|
is_prompt_injection,
|
|
58
100
|
redact_pii,
|
|
59
101
|
)
|
|
102
|
+
from .session_memory import (
|
|
103
|
+
InMemorySessionStore,
|
|
104
|
+
MemoryFact,
|
|
105
|
+
MemoryKind,
|
|
106
|
+
SessionMemory,
|
|
107
|
+
SessionMemoryStore,
|
|
108
|
+
SQLiteSessionStore,
|
|
109
|
+
Summarizer,
|
|
110
|
+
)
|
|
111
|
+
from .swarm import (
|
|
112
|
+
AllScheduler,
|
|
113
|
+
CallableScheduler,
|
|
114
|
+
Environment,
|
|
115
|
+
Event,
|
|
116
|
+
EventKind,
|
|
117
|
+
InMemoryStore,
|
|
118
|
+
Memory,
|
|
119
|
+
MemoryStore,
|
|
120
|
+
PriorityScheduler,
|
|
121
|
+
RoundRobinScheduler,
|
|
122
|
+
SampleScheduler,
|
|
123
|
+
Scheduler,
|
|
124
|
+
Swarm,
|
|
125
|
+
SwarmAgent,
|
|
126
|
+
SwarmCallbacks,
|
|
127
|
+
SwarmResult,
|
|
128
|
+
SwarmStep,
|
|
129
|
+
)
|
|
60
130
|
from .tools import (
|
|
61
131
|
PythonSandboxTool,
|
|
62
132
|
SearchResult,
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Shared JSON encoder for Prompture.
|
|
2
|
+
|
|
3
|
+
Replaces the ``json.dumps(..., default=str)`` pattern that was duplicated
|
|
4
|
+
across ~15 call sites. The previous pattern coerced *everything* unknown
|
|
5
|
+
to a string, including silently stringifying objects that should have
|
|
6
|
+
serialized into structured forms (Pydantic models, sets, bytes…). This
|
|
7
|
+
encoder handles the common Python types Prompture actually emits.
|
|
8
|
+
|
|
9
|
+
Usage::
|
|
10
|
+
|
|
11
|
+
from prompture._internal.json_encoder import dumps, PromptureJSONEncoder
|
|
12
|
+
|
|
13
|
+
text = dumps(payload) # one-shot
|
|
14
|
+
text = json.dumps(payload, cls=PromptureJSONEncoder) # in existing call
|
|
15
|
+
|
|
16
|
+
Types handled (in order of precedence):
|
|
17
|
+
|
|
18
|
+
* ``datetime`` / ``date`` / ``time`` → ISO 8601 string
|
|
19
|
+
* ``timedelta`` → total seconds (float)
|
|
20
|
+
* ``Decimal`` → str (preserves precision)
|
|
21
|
+
* ``UUID`` → str
|
|
22
|
+
* ``Enum`` → ``.value``
|
|
23
|
+
* ``pathlib.PurePath`` → ``str(path)``
|
|
24
|
+
* ``pydantic.BaseModel`` → ``model.model_dump(mode="json")``
|
|
25
|
+
* ``set`` / ``frozenset`` → sorted list (deterministic output)
|
|
26
|
+
* ``bytes`` / ``bytearray`` → ``ascii`` if printable, else ``base64``
|
|
27
|
+
* anything with ``__dict__`` → its ``__dict__``
|
|
28
|
+
* fallback → ``str(obj)`` (matches old behaviour)
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
from __future__ import annotations
|
|
32
|
+
|
|
33
|
+
import base64
|
|
34
|
+
import json
|
|
35
|
+
from datetime import date, datetime, time, timedelta
|
|
36
|
+
from decimal import Decimal
|
|
37
|
+
from enum import Enum
|
|
38
|
+
from pathlib import PurePath
|
|
39
|
+
from typing import Any
|
|
40
|
+
from uuid import UUID
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _encode_bytes(raw: bytes | bytearray) -> str:
|
|
44
|
+
"""Round-trip bytes as ASCII when printable, otherwise base64."""
|
|
45
|
+
blob = bytes(raw)
|
|
46
|
+
try:
|
|
47
|
+
decoded = blob.decode("ascii")
|
|
48
|
+
except UnicodeDecodeError:
|
|
49
|
+
return base64.b64encode(blob).decode("ascii")
|
|
50
|
+
if decoded.isprintable():
|
|
51
|
+
return decoded
|
|
52
|
+
return base64.b64encode(blob).decode("ascii")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class PromptureJSONEncoder(json.JSONEncoder):
|
|
56
|
+
"""JSON encoder that knows how to serialise Prompture's common types.
|
|
57
|
+
|
|
58
|
+
Falls back to ``str(obj)`` for anything unrecognised so this is a
|
|
59
|
+
drop-in replacement for ``json.dumps(..., default=str)``.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
def default(self, o: Any) -> Any:
|
|
63
|
+
# datetime/date/time first because datetime is a subclass of date
|
|
64
|
+
if isinstance(o, datetime):
|
|
65
|
+
return o.isoformat()
|
|
66
|
+
if isinstance(o, date):
|
|
67
|
+
return o.isoformat()
|
|
68
|
+
if isinstance(o, time):
|
|
69
|
+
return o.isoformat()
|
|
70
|
+
if isinstance(o, timedelta):
|
|
71
|
+
return o.total_seconds()
|
|
72
|
+
if isinstance(o, Decimal):
|
|
73
|
+
return str(o)
|
|
74
|
+
if isinstance(o, UUID):
|
|
75
|
+
return str(o)
|
|
76
|
+
if isinstance(o, Enum):
|
|
77
|
+
return o.value
|
|
78
|
+
if isinstance(o, PurePath):
|
|
79
|
+
return str(o)
|
|
80
|
+
if isinstance(o, (set, frozenset)):
|
|
81
|
+
try:
|
|
82
|
+
return sorted(o)
|
|
83
|
+
except TypeError:
|
|
84
|
+
# Items not comparable (e.g. raw Enum members). Fall back to a
|
|
85
|
+
# str()-keyed sort so output stays deterministic — important for
|
|
86
|
+
# cache-key stability.
|
|
87
|
+
return sorted(o, key=str)
|
|
88
|
+
if isinstance(o, (bytes, bytearray)):
|
|
89
|
+
return _encode_bytes(o)
|
|
90
|
+
|
|
91
|
+
# Pydantic BaseModel — imported lazily to avoid hard dep at import time.
|
|
92
|
+
try:
|
|
93
|
+
from pydantic import BaseModel
|
|
94
|
+
except ImportError:
|
|
95
|
+
BaseModel = None # type: ignore[assignment]
|
|
96
|
+
if BaseModel is not None and isinstance(o, BaseModel):
|
|
97
|
+
return o.model_dump(mode="json")
|
|
98
|
+
|
|
99
|
+
if hasattr(o, "__dict__"):
|
|
100
|
+
return o.__dict__
|
|
101
|
+
|
|
102
|
+
# Final fallback: stringify. Matches the legacy ``default=str`` behaviour
|
|
103
|
+
# so this encoder cannot regress callers that depended on it.
|
|
104
|
+
return str(o)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def dumps(obj: Any, **kwargs: Any) -> str:
|
|
108
|
+
"""``json.dumps`` shortcut using :class:`PromptureJSONEncoder`.
|
|
109
|
+
|
|
110
|
+
Any keyword args are forwarded to :func:`json.dumps`. Setting ``cls``
|
|
111
|
+
explicitly will override the default encoder.
|
|
112
|
+
"""
|
|
113
|
+
kwargs.setdefault("cls", PromptureJSONEncoder)
|
|
114
|
+
kwargs.setdefault("ensure_ascii", False)
|
|
115
|
+
return json.dumps(obj, **kwargs)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
__all__ = ["PromptureJSONEncoder", "dumps"]
|
|
@@ -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.5.dev1'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 1, 5, 'dev1')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Agents, conversations, personas, skills, and tool schemas."""
|
|
2
2
|
|
|
3
|
-
from .agent import Agent, AgentIterator, StreamedAgentResult
|
|
3
|
+
from .agent import Agent, AgentIterator, LiveAgentResult, StreamedAgentResult
|
|
4
4
|
from .assistant import (
|
|
5
5
|
Assistant,
|
|
6
6
|
AssistantResult,
|
|
@@ -10,7 +10,7 @@ from .assistant import (
|
|
|
10
10
|
register_assistant,
|
|
11
11
|
unregister_assistant,
|
|
12
12
|
)
|
|
13
|
-
from .async_agent import AsyncAgent, AsyncAgentIterator, AsyncStreamedAgentResult
|
|
13
|
+
from .async_agent import AsyncAgent, AsyncAgentIterator, AsyncLiveAgentResult, AsyncStreamedAgentResult
|
|
14
14
|
from .async_conversation import AsyncConversation
|
|
15
15
|
from .async_deep_agent import AsyncDeepAgent, create_async_deep_agent
|
|
16
16
|
from .conversation import Conversation
|
|
@@ -23,6 +23,18 @@ from .deep_state import (
|
|
|
23
23
|
SummaryEvent,
|
|
24
24
|
Todo,
|
|
25
25
|
)
|
|
26
|
+
from .live_events import (
|
|
27
|
+
AssistantTurnStart,
|
|
28
|
+
LiveEvent,
|
|
29
|
+
MessageStop,
|
|
30
|
+
TextDelta,
|
|
31
|
+
ThinkingDelta,
|
|
32
|
+
ToolInputDelta,
|
|
33
|
+
ToolResult,
|
|
34
|
+
ToolUseStart,
|
|
35
|
+
ToolUseStop,
|
|
36
|
+
TurnComplete,
|
|
37
|
+
)
|
|
26
38
|
from .persona import (
|
|
27
39
|
PERSONAS,
|
|
28
40
|
Persona,
|
|
@@ -90,10 +102,12 @@ __all__ = [
|
|
|
90
102
|
"ApprovalRequired",
|
|
91
103
|
"Assistant",
|
|
92
104
|
"AssistantResult",
|
|
105
|
+
"AssistantTurnStart",
|
|
93
106
|
"AsyncAgent",
|
|
94
107
|
"AsyncAgentIterator",
|
|
95
108
|
"AsyncConversation",
|
|
96
109
|
"AsyncDeepAgent",
|
|
110
|
+
"AsyncLiveAgentResult",
|
|
97
111
|
"AsyncReviewLoop",
|
|
98
112
|
"AsyncStreamedAgentResult",
|
|
99
113
|
"Conversation",
|
|
@@ -101,6 +115,9 @@ __all__ = [
|
|
|
101
115
|
"DeepAgentResult",
|
|
102
116
|
"DeepAgentState",
|
|
103
117
|
"GuardrailError",
|
|
118
|
+
"LiveAgentResult",
|
|
119
|
+
"LiveEvent",
|
|
120
|
+
"MessageStop",
|
|
104
121
|
"ModelRetry",
|
|
105
122
|
"Persona",
|
|
106
123
|
"ReviewLoopEvent",
|
|
@@ -118,9 +135,16 @@ __all__ = [
|
|
|
118
135
|
"SubAgentCallRecord",
|
|
119
136
|
"SubAgentSpec",
|
|
120
137
|
"SummaryEvent",
|
|
138
|
+
"TextDelta",
|
|
139
|
+
"ThinkingDelta",
|
|
121
140
|
"Todo",
|
|
122
141
|
"ToolDefinition",
|
|
142
|
+
"ToolInputDelta",
|
|
123
143
|
"ToolRegistry",
|
|
144
|
+
"ToolResult",
|
|
145
|
+
"ToolUseStart",
|
|
146
|
+
"ToolUseStop",
|
|
147
|
+
"TurnComplete",
|
|
124
148
|
"clear_assistant_registry",
|
|
125
149
|
"clear_persona_registry",
|
|
126
150
|
"clear_skill_registry",
|