msgflux 0.2.0__tar.gz → 0.4.1__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.
- {msgflux-0.2.0 → msgflux-0.4.1}/.pre-commit-config.yaml +2 -2
- msgflux-0.4.1/CHANGELOG.md +35 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/PKG-INFO +1 -1
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/index.md +2 -0
- msgflux-0.4.1/docs/anatomy/llm-as-a-verifier.md +317 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/dependency-management.md +21 -13
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/index.md +2 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/chat_completion.md +178 -18
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/reasoning.md +5 -6
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/tools.md +54 -0
- msgflux-0.4.1/docs/learn/retrievers/web.md +730 -0
- msgflux-0.4.1/docs/learn/verifiers.md +583 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/mkdocs.yml +1 -0
- msgflux-0.4.1/src/msgflux/data/retrievers/providers/arxiv.py +229 -0
- msgflux-0.4.1/src/msgflux/data/retrievers/providers/brave.py +149 -0
- msgflux-0.4.1/src/msgflux/data/retrievers/providers/exa.py +196 -0
- msgflux-0.4.1/src/msgflux/data/retrievers/providers/linkup.py +162 -0
- msgflux-0.4.1/src/msgflux/data/retrievers/providers/serpapi.py +225 -0
- msgflux-0.4.1/src/msgflux/data/retrievers/providers/tavily.py +180 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/retriever.py +5 -0
- msgflux-0.4.1/src/msgflux/generation/verifiers/__init__.py +62 -0
- msgflux-0.4.1/src/msgflux/generation/verifiers/formatters.py +149 -0
- msgflux-0.4.1/src/msgflux/generation/verifiers/llm_as_a_verifier.py +1633 -0
- msgflux-0.4.1/src/msgflux/models/providers/brave.py +27 -0
- msgflux-0.4.1/src/msgflux/models/providers/exa.py +57 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/groq.py +1 -1
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/ollama.py +1 -1
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/openai.py +160 -35
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/openrouter.py +9 -1
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/vllm.py +1 -1
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/tools/builtin/__init__.py +2 -1
- msgflux-0.4.1/src/msgflux/tools/builtin/web_search.py +257 -0
- msgflux-0.4.1/src/msgflux/version.py +1 -0
- msgflux-0.4.1/tests/data/retrievers/providers/test_arxiv.py +173 -0
- msgflux-0.4.1/tests/data/retrievers/providers/test_brave.py +114 -0
- msgflux-0.4.1/tests/data/retrievers/providers/test_exa.py +174 -0
- msgflux-0.4.1/tests/data/retrievers/providers/test_linkup.py +149 -0
- msgflux-0.4.1/tests/data/retrievers/providers/test_serpapi.py +275 -0
- msgflux-0.4.1/tests/data/retrievers/providers/test_tavily.py +146 -0
- msgflux-0.4.1/tests/generation/test_verifiers.py +842 -0
- msgflux-0.4.1/tests/models/providers/test_brave.py +35 -0
- msgflux-0.4.1/tests/models/providers/test_exa.py +49 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/providers/test_openai.py +203 -0
- msgflux-0.4.1/tests/models/providers/test_openrouter.py +96 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/providers/test_vllm.py +54 -0
- msgflux-0.4.1/tests/tools/builtin/test_web_search.py +303 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/uv.lock +61 -163
- msgflux-0.2.0/CHANGELOG.md +0 -17
- msgflux-0.2.0/docs/learn/retrievers/web.md +0 -196
- msgflux-0.2.0/src/msgflux/version.py +0 -1
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/CODEOWNERS +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/SECURITY.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/dependabot.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/labeler.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/pull_request_template.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/release-drafter.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/ci.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/docs.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/labeler.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/merge-bot.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/publish.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/release-drafter.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.github/workflows/validate-release.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.gitignore +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.python-version +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/.readthedocs.yaml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/CONTRIBUTING.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/LICENSE +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/README.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/CHANGELOG.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/CNAME +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/_includes/init_chat_completion_model.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/_includes/install.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/_includes/install_openai.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/agent.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/chat-schema-utils.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/dict-lowering-and-restoration.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/logical-vs-provider-schema.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/msgspec-transport-lowering.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/openai-chat-completion.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/react-provider-schemas.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/signatures.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/tool-flow-control.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/anatomy/tool-library.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/databases/database.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/databases/types/kv.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/databases/types/vector.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/model.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/model_gateway.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/chat_completion.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/image_classifier.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/image_embedder.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/image_text_to_image.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/moderation.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/speech_to_text.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_classifier.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_embedder.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_reranker.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_to_image.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_to_speech.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/functional.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/agent.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/module.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/module_dict.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/module_list.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/predictor.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/searcher.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/sequential.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/speaker.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/tool.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/transcriber.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/api-reference.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/assets/logo-msgflux-horizon.png +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/assets/logo.png +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/assets/msgflux-wordmark.png +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/assets/msgflux.png +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/assets/tmd-mascot.png +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/blog/.authors.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/blog/index.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/blog/posts/.meta.yml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/blog/posts/26-04/why-msgflux-exists.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/changelog.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/hooks/copy_markdown.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/dotdict.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/inline.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/image_text_to_image.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/model.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/model_gateway.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/moderation.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/speech_to_text.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/text_classifier.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/text_embedder.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/text_reranker.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/text_to_image.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/models/text_to_speech.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/async.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/debug.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/generation-schemas.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/hooks.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/index.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/model-gateway.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/prefilling.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/quickstart.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/signatures.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/streaming.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/system-prompt.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/task-and-context.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/agent/vars.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/functional.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/mediamaker.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/message.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/composing.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/core-concepts.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/forward-and-async.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/index.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/module-dict.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/module-list.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/sequential.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/module/visualization.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/predictor.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/searcher.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/speaker.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/nn/transcriber.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/parsers.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/retrievers/fuzzy.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/retrievers/lexical.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/retrievers/retriever.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/learn/telemetry.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/stylesheets/extra.css +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/ad-focus-group.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/advisor-specialist-tool.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/call-transcript-analysis.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/deal-briefing-generator.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/email-auto-responder.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/food-delivery-assistant.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/index.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/intent-router.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/lead-scoring.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/meeting-action-items.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/meeting-assistant.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/pix-assistant.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/plan-tool-with-root-context.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/product-poster.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/restaurant-supply-assistant.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/signature-router.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/streaming-support-triage.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/support-ticket-router.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/visit-report.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/workplace-incident-reporter.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/docs/tutorials/youtube-cut-detector.md +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/ad_focus_group.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/advisor_specialist_tool.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/call_transcript_analysis.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/deal_briefing_generator.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/food_delivery_assistant.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/intent-router.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/lead_scoring.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/meeting_action_items.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/meeting_assistant.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/pix_assistant.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/plan_tool_with_root_history.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/restaurant-supply-assistant.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/streaming_support_triage.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/visit_report.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/examples/youtube_cut_detector.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/pyproject.toml +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/scripts/release.sh +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/scripts/setup-branch-protection.sh +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/scripts/setup-labels.sh +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/scripts/svg_render.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/_private/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/_private/client.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/_private/core.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/_private/executor.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/_private/response.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/auto/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/auto/params.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/cache.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/core/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/core/dotdict.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/core/examples.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/core/message.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/core/registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/audio.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/db.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/cachetools.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/diskcache.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/faiss.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/response.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/dbs/types.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/parser.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/csv_parser.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/email_parser.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/html_parser.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/openpyxl.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/pypdf.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/python_docx.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/python_pptx.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/response.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/parsers/types.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/bm25.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/bm25s.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/rank_bm25.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/rapidfuzz.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/wikipedia.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/types.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/types/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/types/audio.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/types/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/types/file.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/types/image.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/data/types/video.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/inline.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/signature.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/providers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/providers/xml.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/envs.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/exceptions.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/generation/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/generation/control_flow.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/cot.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/react.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/self_consistency.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/generation/templates.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/logger.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/cache.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/gateway.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/httpx.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/model.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/profiles/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/profiles/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/profiles/loader.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/profiles/registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/cerebras.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/imagerouter.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/jinaai.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/replicate.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/sambanova.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/providers/together.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/response.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/tool_call_agg.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/models/types.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/functional.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/hooks/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/hooks/guard.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/hooks/hook.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/agent.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/container.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/embedder.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/generator.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/mediamaker.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/module.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/predictor.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/searcher.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/speaker.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/tool.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/modules/transcriber.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/nn/parameter.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/apikey.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/basic.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/bearer.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/custom.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/oauth2.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/client.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/exceptions.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/integration.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/loglevels.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/transports.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/types.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/py.typed +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/telemetry/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/telemetry/config.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/telemetry/span.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/tools/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/tools/builtin/web_fetch.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/tools/config.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/tools/definitions.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/chat.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/common.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/console.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/convert.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/encode.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/html.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/imports.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/inspect.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/logging.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/mermaid.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/msgspec.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/pooling.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/templates.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/tenacity.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/torch.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/validation.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/src/msgflux/utils/xml.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/auto/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/auto/test_params.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/conftest.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/parsers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/parsers/test_parsers.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/retrievers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/retrievers/providers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_bm25.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_bm25s.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_rank_bm25.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_rapidfuzz.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_wikipedia.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/dsl/test_inline.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/dsl/test_signature.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/dsl/test_typed_parsers.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/generation/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/generation/test_control_flow.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/generation/test_reasoning.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/generation/test_templates.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/integration/test_agent_reasoning.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/integration/test_guard_moderation.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/integration/test_reasoning.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/integration/test_tool_dict_e2e.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/providers/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_base.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_cache.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_gateway.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_httpx.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_model.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_profiles.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_response.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/models/test_tool_call_agg.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_agent.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_container.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_embedder.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_lm.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_mediamaker.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_module.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_predictor.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_searcher.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_speaker.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_tool.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_tool_transport_params.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/modules/test_transcriber.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/test_functional.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/test_guard.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/nn/test_parameter.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/auth/test_auth_providers.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/conftest.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/mcp_simple_server.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_client.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_exceptions.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_integration.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_loglevels.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_mcp_live.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_toollibrary_mcp.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_transports.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/protocols/mcp/test_types.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/telemetry/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/telemetry/test_config.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/telemetry/test_span_agent_decorators.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/telemetry/test_span_tool_decorators.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_agent_as_tool_with_signature.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_agent_generation_schema.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_agent_image_detail.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_agent_include_date.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_agent_named_kwargs.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_agent_signature_annotations.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_agent_templates_fix.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_async_hooks.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_autoparams.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_data_types.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_dotdict.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_embedder.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_examples.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_image_block_kwargs_refactor.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_inject_message.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_mcp_fastmcp.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_registry.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_tool_config_decorator.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_tool_control.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_tools_visualization.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_type_inheritance_struct.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/test_video_block_kwargs.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/tools/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/tools/builtin/__init__.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/tools/builtin/test_web_fetch.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/tools/test_config.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/tools/test_toolflowcontrol.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_chat.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_common.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_console.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_convert.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_encode.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_hint_to_schema_dict.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_hooks.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_imports.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_inspect.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_logging.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_mermaid.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_msgspec.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_pooling.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_templates.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_tenacity.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_torch.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_validation.py +0 -0
- {msgflux-0.2.0 → msgflux-0.4.1}/tests/utils/test_xml.py +0 -0
|
@@ -7,12 +7,12 @@ repos:
|
|
|
7
7
|
- id: gitleaks
|
|
8
8
|
|
|
9
9
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
10
|
-
rev: 0.11.
|
|
10
|
+
rev: 0.11.7 # uv version.
|
|
11
11
|
hooks:
|
|
12
12
|
- id: uv-lock
|
|
13
13
|
|
|
14
14
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
15
|
-
rev: v0.15.
|
|
15
|
+
rev: v0.15.11
|
|
16
16
|
hooks:
|
|
17
17
|
- id: ruff
|
|
18
18
|
args: [--fix]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.4.1] - 2026-04-22
|
|
4
|
+
|
|
5
|
+
- Fixes: restored uv.lock file for CI compatibility (#78).
|
|
6
|
+
|
|
7
|
+
## [0.4.0] - 2026-04-22
|
|
8
|
+
|
|
9
|
+
- Features: added new web retrievers (Arxiv, Brave, Exa, LinkUp, SerpAPI, Tavily) and model integrations (Brave, Exa), plus configurable WebSearch tool (#71).
|
|
10
|
+
- Web Retriever: added support for Wikipedia highlighting in web retriever section (#73).
|
|
11
|
+
- Providers: added OpenAI-compatible `extra_body` support for chat completions (#72).
|
|
12
|
+
- Maintenance: removed uv.lock file (#74).
|
|
13
|
+
|
|
14
|
+
## [0.3.0] - 2026-04-20
|
|
15
|
+
|
|
16
|
+
- Features: added OpenAI prompt cache retention support (#52), token logprobs metadata for chat completions (#53), and the `LLMAsVerifier` workflow with docs and examples (#54).
|
|
17
|
+
- Fixes: mapped OpenRouter `reasoning_max_tokens` to `extra_body.reasoning.max_tokens` and enforced the `reasoning_effort` conflict rule (#57).
|
|
18
|
+
- Docs: updated chat completion and agent reasoning docs to reflect the OpenRouter-only reasoning budget behavior (#56, #57).
|
|
19
|
+
- Maintenance: updated pre-commit hooks (#55).
|
|
20
|
+
|
|
21
|
+
## [0.2.0] - 2026-04-17
|
|
22
|
+
|
|
23
|
+
- Features: added `provider/model-id` string shorthand support to `Agent`, `Speaker`, and `Transcriber` (#26, #27, #28), plus runtime tool controls for `Agent` (#30).
|
|
24
|
+
- Fixes: fixed registry naming for generic callables (#29).
|
|
25
|
+
- Maintenance: updated release automation and cleaned up the release script (#36, #49).
|
|
26
|
+
|
|
27
|
+
## [0.1.1] - 2026-04-15
|
|
28
|
+
|
|
29
|
+
- Fixed message copying in the OpenAI provider (#47).
|
|
30
|
+
- Fixed isolation of injected messages for agent tools (#46).
|
|
31
|
+
- Updated CI and dependency tooling to keep release checks passing (#45, #44, #38, #37, #35, #34, #33, #32).
|
|
32
|
+
|
|
33
|
+
## [0.1.0] - 2026-04-09
|
|
34
|
+
|
|
35
|
+
## [0.1.0a31] - 2026-04-09
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: msgflux
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Messages and Dynamic AI Systems in Python powered by pretrained models
|
|
5
5
|
Project-URL: Homepage, https://github.com/msgflux/msgflux
|
|
6
6
|
Project-URL: Documentation, https://github.com/msgflux/msgflux
|
|
@@ -41,3 +41,5 @@ Use this section when you need to answer questions like:
|
|
|
41
41
|
`dict[K, V]` is encoded for strict structured outputs and restored at runtime.
|
|
42
42
|
- [ReAct Provider Schemas](react-provider-schemas.md): how ReAct uses tool
|
|
43
43
|
schemas to build a dynamic provider-facing response format.
|
|
44
|
+
- [LLM-as-a-Verifier](llm-as-a-verifier.md): how verifier prompts, concurrent
|
|
45
|
+
execution, score-token parsing, and weighted aggregation fit together.
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# LLM-as-a-Verifier
|
|
2
|
+
|
|
3
|
+
`src/msgflux/generation/verifiers/llm_as_a_verifier.py` is the first verifier
|
|
4
|
+
module in msgFlux.
|
|
5
|
+
|
|
6
|
+
At a high level, it turns a verification task into a reusable runtime with four
|
|
7
|
+
main jobs:
|
|
8
|
+
|
|
9
|
+
- build a verifier prompt from task, criteria, candidates, and context
|
|
10
|
+
- request discrete score tokens from the model
|
|
11
|
+
- estimate a stable score from `logprobs` instead of trusting only the chosen
|
|
12
|
+
token
|
|
13
|
+
- aggregate repeated attempts and multiple criteria into a final verdict
|
|
14
|
+
|
|
15
|
+
It is not tied to `Agent`. It is a callable verification layer that can be used
|
|
16
|
+
from plain generation code, tool workflows, candidate reranking, or future
|
|
17
|
+
optimizers.
|
|
18
|
+
|
|
19
|
+
## Mental Model
|
|
20
|
+
|
|
21
|
+
The verifier pipeline looks like this:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
task + candidates + criteria
|
|
25
|
+
-> prompt builder
|
|
26
|
+
-> request batch
|
|
27
|
+
-> concurrent model calls
|
|
28
|
+
-> per-attempt evidence extraction
|
|
29
|
+
-> text token
|
|
30
|
+
-> logprob distribution
|
|
31
|
+
-> criterion aggregation
|
|
32
|
+
-> final verifier result
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The important part is that the verifier does not ask the model for an open-ended
|
|
36
|
+
score. It asks for a small discrete token from a known scale, then uses the
|
|
37
|
+
token distribution to estimate the final normalized score.
|
|
38
|
+
|
|
39
|
+
## Why The Output Is A Score Token
|
|
40
|
+
|
|
41
|
+
The verifier uses a discrete score scale such as `A..T`.
|
|
42
|
+
|
|
43
|
+
That choice is deliberate:
|
|
44
|
+
|
|
45
|
+
- it keeps the scoring space bounded
|
|
46
|
+
- it makes the provider response easier to parse
|
|
47
|
+
- it makes `logprobs` directly useful
|
|
48
|
+
- it lets the runtime compute an expected score instead of a brittle hard label
|
|
49
|
+
|
|
50
|
+
Letters are preferred over digits for the default scale because they behave
|
|
51
|
+
more like single symbolic labels as granularity grows.
|
|
52
|
+
|
|
53
|
+
That matters for `logprobs` extraction:
|
|
54
|
+
|
|
55
|
+
- `A..T` is a cleaner discrete label set than `1..20`
|
|
56
|
+
- multi-digit numeric scales are more likely to split across tokens
|
|
57
|
+
- numeric labels are more likely to attach to punctuation or formatting noise
|
|
58
|
+
- letter labels are easier to rank, normalize, and recover from imperfect tag
|
|
59
|
+
formatting
|
|
60
|
+
|
|
61
|
+
So the default runtime chooses a letter-based scale not for presentation, but
|
|
62
|
+
for tokenization stability and better score-distribution extraction.
|
|
63
|
+
|
|
64
|
+
So the model is not asked to emit a floating-point score. It is asked to emit a
|
|
65
|
+
single token inside a known tag:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
<score>A</score>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
or, in pairwise mode:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
<score_A>A</score_A>
|
|
75
|
+
<score_B>H</score_B>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`ScoreScale.letter(granularity=20)` is the public way to ask for 20 score
|
|
79
|
+
levels explicitly. That is also the default runtime scale.
|
|
80
|
+
|
|
81
|
+
## Prompt Construction
|
|
82
|
+
|
|
83
|
+
`default_prompt_builder(...)` assembles the verifier prompt from
|
|
84
|
+
`VerificationPromptInput`.
|
|
85
|
+
|
|
86
|
+
That input contains:
|
|
87
|
+
|
|
88
|
+
- `task`
|
|
89
|
+
- `criterion`
|
|
90
|
+
- `candidates`
|
|
91
|
+
- `score_scale`
|
|
92
|
+
- optional `context`
|
|
93
|
+
- optional verifier-level instructions
|
|
94
|
+
|
|
95
|
+
The default builder always explains:
|
|
96
|
+
|
|
97
|
+
- the criterion being judged
|
|
98
|
+
- the valid score-token range
|
|
99
|
+
- the exact tag format expected at the end
|
|
100
|
+
|
|
101
|
+
This is why the verifier can support custom prompting without changing the rest
|
|
102
|
+
of the execution pipeline. The builder is only responsible for prompt text; the
|
|
103
|
+
runtime remains responsible for scoring and aggregation.
|
|
104
|
+
|
|
105
|
+
## Trajectory Formatting Helpers
|
|
106
|
+
|
|
107
|
+
Benchmark-style presets work best when the candidate contains the full execution
|
|
108
|
+
evidence, not only the final answer.
|
|
109
|
+
|
|
110
|
+
The public API therefore exposes:
|
|
111
|
+
|
|
112
|
+
- `format_terminal_trajectory(...)`
|
|
113
|
+
- `format_swe_bench_trajectory(...)`
|
|
114
|
+
|
|
115
|
+
These helpers deliberately format only candidate evidence:
|
|
116
|
+
|
|
117
|
+
- summaries
|
|
118
|
+
- command/output steps
|
|
119
|
+
- metadata such as expected output
|
|
120
|
+
- final patch text for SWE-style runs
|
|
121
|
+
- final answer or final narration
|
|
122
|
+
|
|
123
|
+
The task or issue description stays outside the helper and should still be
|
|
124
|
+
passed through the verifier's `task` argument. That keeps the verifier API
|
|
125
|
+
clean: `task` carries the evaluation target, while the formatted candidate
|
|
126
|
+
string carries the evidence being judged.
|
|
127
|
+
|
|
128
|
+
## Request Batching And Concurrency
|
|
129
|
+
|
|
130
|
+
The verifier builds a `VerificationRequest` for each independent
|
|
131
|
+
criterion/repetition pair.
|
|
132
|
+
|
|
133
|
+
That means the number of model calls in a single verification is:
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
len(criteria) * n_verifications
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Those requests are independent, so the verifier fans them out concurrently:
|
|
140
|
+
|
|
141
|
+
- `__call__` uses `F.map_gather(...)`
|
|
142
|
+
- `acall` uses `F.amap_gather(...)`
|
|
143
|
+
|
|
144
|
+
This matters because a verifier with multiple criteria and repeated attempts can
|
|
145
|
+
otherwise accumulate latency linearly.
|
|
146
|
+
|
|
147
|
+
The runtime still keeps the final result deterministic:
|
|
148
|
+
|
|
149
|
+
- requests are built in criterion order, then repetition order
|
|
150
|
+
- gather responses preserve input order
|
|
151
|
+
- attempts are regrouped per criterion after execution
|
|
152
|
+
|
|
153
|
+
So the work is concurrent, but the aggregation order remains stable.
|
|
154
|
+
|
|
155
|
+
## Why `select_best(...)` Is Separate
|
|
156
|
+
|
|
157
|
+
`__call__` and `acall` support only one or two candidates.
|
|
158
|
+
|
|
159
|
+
That boundary is intentional:
|
|
160
|
+
|
|
161
|
+
- one candidate -> verification
|
|
162
|
+
- two candidates -> pairwise comparison
|
|
163
|
+
- more than two candidates -> tournament selection
|
|
164
|
+
|
|
165
|
+
`select_best(...)` and `aselect_best(...)` implement the tournament layer on top
|
|
166
|
+
of the base verifier. They run pairwise matches, accumulate wins, and use
|
|
167
|
+
average score as a tiebreaker.
|
|
168
|
+
|
|
169
|
+
The tournament layer can also fan out its pairwise matches concurrently. That
|
|
170
|
+
means a multi-candidate selection now has two concurrency layers:
|
|
171
|
+
|
|
172
|
+
- concurrent attempts inside each verifier call
|
|
173
|
+
- concurrent pairwise matches across the tournament
|
|
174
|
+
|
|
175
|
+
This keeps the core verifier simple instead of making `__call__` return
|
|
176
|
+
different shapes for different candidate counts.
|
|
177
|
+
|
|
178
|
+
## Scoring From Logprobs
|
|
179
|
+
|
|
180
|
+
The central scoring path is:
|
|
181
|
+
|
|
182
|
+
```text
|
|
183
|
+
model response
|
|
184
|
+
-> locate score token
|
|
185
|
+
-> collect chosen token + top_logprobs alternatives
|
|
186
|
+
-> convert logprobs to probabilities
|
|
187
|
+
-> compute expected value on the discrete score scale
|
|
188
|
+
-> normalize to [0, 1]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
This is why `LLMAsVerifier` always requests:
|
|
192
|
+
|
|
193
|
+
- `logprobs=True`
|
|
194
|
+
- `top_logprobs=<scale size or override>`
|
|
195
|
+
|
|
196
|
+
If the provider returns a good token distribution, the verifier uses that
|
|
197
|
+
distribution directly.
|
|
198
|
+
|
|
199
|
+
If not, and `strict_logprobs=False`, it falls back to parsing the score from the
|
|
200
|
+
response text.
|
|
201
|
+
|
|
202
|
+
## Why The Parser Has Heuristics
|
|
203
|
+
|
|
204
|
+
Provider tokenization around XML-like tags is not always clean.
|
|
205
|
+
|
|
206
|
+
The verifier therefore uses a layered extraction strategy:
|
|
207
|
+
|
|
208
|
+
1. parse the text tag if possible
|
|
209
|
+
2. try to find the matching score entry directly in `logprobs`
|
|
210
|
+
3. fall back to finding the expected score token near the closing tag
|
|
211
|
+
4. if strict mode is disabled, fall back to text-only extraction
|
|
212
|
+
|
|
213
|
+
This is also why the parser tolerates malformed openings such as:
|
|
214
|
+
|
|
215
|
+
```text
|
|
216
|
+
<20A</score>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
The runtime treats the text and token stream as evidence that must be reconciled,
|
|
220
|
+
not as perfectly formatted output.
|
|
221
|
+
|
|
222
|
+
## Aggregation Model
|
|
223
|
+
|
|
224
|
+
There are two aggregation stages.
|
|
225
|
+
|
|
226
|
+
### Attempt Aggregation
|
|
227
|
+
|
|
228
|
+
Each criterion can run multiple repetitions.
|
|
229
|
+
|
|
230
|
+
Those repeated attempts are averaged into a single score per criterion and
|
|
231
|
+
candidate.
|
|
232
|
+
|
|
233
|
+
### Criterion Aggregation
|
|
234
|
+
|
|
235
|
+
Each criterion carries a weight.
|
|
236
|
+
|
|
237
|
+
The final score per candidate is the weighted average of all criterion scores.
|
|
238
|
+
|
|
239
|
+
That is what makes the verifier reusable across different presets: the
|
|
240
|
+
execution path stays the same while the criteria set changes.
|
|
241
|
+
|
|
242
|
+
## Verdict Semantics
|
|
243
|
+
|
|
244
|
+
The final verdict depends on candidate count.
|
|
245
|
+
|
|
246
|
+
For a single candidate:
|
|
247
|
+
|
|
248
|
+
- `pass`
|
|
249
|
+
- `fail`
|
|
250
|
+
- `uncertain`
|
|
251
|
+
|
|
252
|
+
For two candidates:
|
|
253
|
+
|
|
254
|
+
- winner label
|
|
255
|
+
- `tie`
|
|
256
|
+
|
|
257
|
+
This is why `VerifierResult` exposes both:
|
|
258
|
+
|
|
259
|
+
- `verdict`
|
|
260
|
+
- optional `winner`
|
|
261
|
+
|
|
262
|
+
## Verbose Mode
|
|
263
|
+
|
|
264
|
+
When `verbose=True`, the verifier stores enough information to debug prompt and
|
|
265
|
+
scoring behavior without rerunning the call.
|
|
266
|
+
|
|
267
|
+
Per attempt, it keeps:
|
|
268
|
+
|
|
269
|
+
- final prompt text
|
|
270
|
+
- raw response text
|
|
271
|
+
- per-candidate evidence
|
|
272
|
+
- extracted token probabilities
|
|
273
|
+
|
|
274
|
+
That data is exposed both in:
|
|
275
|
+
|
|
276
|
+
- `criteria_results[*].attempts[*]`
|
|
277
|
+
- `result.metadata["raw_outputs"]`
|
|
278
|
+
|
|
279
|
+
Tournament mode mirrors that same information in each match entry of
|
|
280
|
+
`TournamentResult.metadata["raw_outputs"]`.
|
|
281
|
+
|
|
282
|
+
## Presets
|
|
283
|
+
|
|
284
|
+
The preset constructors are thin wrappers around the same runtime:
|
|
285
|
+
|
|
286
|
+
- `trajectory_analysis`
|
|
287
|
+
- `answer_reranking`
|
|
288
|
+
- `grounded_answer_verification`
|
|
289
|
+
- `patch_selection`
|
|
290
|
+
- `terminal_bench`
|
|
291
|
+
- `swe_bench_verified`
|
|
292
|
+
- `tool_trace_verification`
|
|
293
|
+
- `synthetic_data_filtering`
|
|
294
|
+
|
|
295
|
+
Each preset only supplies:
|
|
296
|
+
|
|
297
|
+
- a default criteria set
|
|
298
|
+
- optional default instructions or ground-truth notes
|
|
299
|
+
|
|
300
|
+
The runtime path stays identical.
|
|
301
|
+
|
|
302
|
+
This is important for maintenance because it means new verifier presets should
|
|
303
|
+
usually be data/config additions, not new execution engines.
|
|
304
|
+
|
|
305
|
+
## Main Design Choices
|
|
306
|
+
|
|
307
|
+
The current design makes a few explicit tradeoffs:
|
|
308
|
+
|
|
309
|
+
- verifier core is independent from `Agent`
|
|
310
|
+
- prompt building is pluggable, scoring is centralized
|
|
311
|
+
- discrete score tokens are preferred over free-form numeric scores
|
|
312
|
+
- `logprobs` are first-class evidence
|
|
313
|
+
- tournament selection is built on top of pairwise verification
|
|
314
|
+
- verbose debugging is part of the runtime, not an external wrapper
|
|
315
|
+
|
|
316
|
+
These choices make the verifier easier to reuse for reranking, trajectory
|
|
317
|
+
selection, patch selection, and future optimizer integrations.
|
|
@@ -10,16 +10,17 @@ hide:
|
|
|
10
10
|
|
|
11
11
|
### Chat Completion
|
|
12
12
|
|
|
13
|
-
| Provider | Dependency | Auth Env
|
|
14
|
-
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
13
|
+
| Provider | Dependency | Auth Env |
|
|
14
|
+
|-------------|-------------------|------------------------|
|
|
15
|
+
| Brave | `msgflux[openai]` | `BRAVE_SEARCH_API_KEY` |
|
|
16
|
+
| Cerebras | `msgflux[openai]` | `CEREBRAS_API_KEY` |
|
|
17
|
+
| Groq | `msgflux[openai]` | `GROQ_API_KEY` |
|
|
18
|
+
| Ollama | `msgflux[openai]` | |
|
|
19
|
+
| OpenAI | `msgflux[openai]` | `OPENAI_API_KEY` |
|
|
20
|
+
| OpenRouter | `msgflux[openai]` | `OPENROUTER_API_KEY` |
|
|
21
|
+
| SambaNova | `msgflux[openai]` | `SAMBANOVA_API_KEY` |
|
|
22
|
+
| Together | `msgflux[openai]` | `TOGETHER_API_KEY` |
|
|
23
|
+
| vLLM | `msgflux[openai]` | |
|
|
23
24
|
|
|
24
25
|
### Image Embedder
|
|
25
26
|
|
|
@@ -144,6 +145,13 @@ hide:
|
|
|
144
145
|
|
|
145
146
|
### Web Search
|
|
146
147
|
|
|
147
|
-
| Provider |
|
|
148
|
-
|
|
149
|
-
|
|
|
148
|
+
| Provider | Installation | Auth Env |
|
|
149
|
+
|-------------|----------------------------------|-----------------------------------|
|
|
150
|
+
| Trafilatura | `httpx`, `trafilatura` | |
|
|
151
|
+
| SerpApi | `httpx` | `SERPAPI_KEY` |
|
|
152
|
+
| Linkup | `linkup-sdk` | `LINKUP_API_KEY` |
|
|
153
|
+
| Tavily | `tavily-python` | `TAVILY_API_KEY` |
|
|
154
|
+
| Exa | `exa-py` | `EXA_API_KEY` |
|
|
155
|
+
| Brave | `brave-search-python-client` | `BRAVE_SEARCH_API_KEY` |
|
|
156
|
+
| arXiv | `arxiv` | |
|
|
157
|
+
| Wikipedia | `wikipedia` | |
|
|
@@ -34,6 +34,8 @@ hide:
|
|
|
34
34
|
|
|
35
35
|
msgFlux is an open-source framework for building dynamic AI systems with **composable modules**. It treats prompts, signatures, tools, and message flow as explicit program structure instead of ad-hoc glue. Architecture, data flow, and prompting remain separate layers, so systems can evolve by changing contracts, modules, or routes without forcing everything to change together.
|
|
36
36
|
|
|
37
|
+
For web search, msgFlux includes both retriever-backed and model-backed options. The built-in `WebSearch` tool can be pointed at a retriever backend like `retriever/wikipedia` or a model backend like `model/openai/gpt-4o-search-preview`, returns `data` plus `annotations` when the backend supplies citations, and can read its engine plus JSON params from `MSGFLUX_TOOL_WEB_SEARCH_*` environment variables.
|
|
38
|
+
|
|
37
39
|
## **AI Systems *not* ML Systems**
|
|
38
40
|
|
|
39
41
|
**ML systems** are systems *for* AI - they train, evaluate, and deploy models. **AI systems** are systems *with* AI - software where pretrained models operate as components inside a broader application. In that setting, the model is not the whole product; it is one building block among many. You are not optimizing weights - you are designing behavior, interfaces, and flow around a model. This is the space msgFlux occupies.
|