msgflux 0.3.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.3.0 → msgflux-0.4.1}/CHANGELOG.md +11 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/PKG-INFO +1 -1
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/dependency-management.md +21 -13
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/index.md +2 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/chat_completion.md +93 -0
- {msgflux-0.3.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.3.0 → msgflux-0.4.1}/mkdocs.yml +0 -13
- 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.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/retriever.py +5 -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.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/groq.py +1 -1
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/ollama.py +1 -1
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/openai.py +6 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/openrouter.py +1 -1
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/vllm.py +1 -1
- {msgflux-0.3.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/models/providers/test_brave.py +35 -0
- msgflux-0.4.1/tests/models/providers/test_exa.py +49 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/providers/test_openai.py +45 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/providers/test_vllm.py +24 -0
- msgflux-0.4.1/tests/tools/builtin/test_web_search.py +303 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/uv.lock +61 -163
- msgflux-0.3.0/docs/learn/retrievers/web.md +0 -196
- msgflux-0.3.0/src/msgflux/version.py +0 -1
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/CODEOWNERS +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/SECURITY.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/dependabot.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/labeler.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/pull_request_template.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/release-drafter.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/ci.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/docs.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/labeler.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/merge-bot.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/publish.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/release-drafter.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.github/workflows/validate-release.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.gitignore +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.pre-commit-config.yaml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.python-version +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/.readthedocs.yaml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/CONTRIBUTING.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/LICENSE +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/README.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/CHANGELOG.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/CNAME +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/_includes/init_chat_completion_model.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/_includes/install.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/_includes/install_openai.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/agent.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/chat-schema-utils.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/dict-lowering-and-restoration.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/index.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/llm-as-a-verifier.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/logical-vs-provider-schema.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/msgspec-transport-lowering.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/openai-chat-completion.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/react-provider-schemas.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/signatures.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/tool-flow-control.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/anatomy/tool-library.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/databases/database.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/databases/types/kv.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/databases/types/vector.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/model.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/model_gateway.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/chat_completion.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/image_classifier.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/image_embedder.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/image_text_to_image.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/moderation.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/speech_to_text.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_classifier.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_embedder.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_reranker.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_to_image.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/models/types/text_to_speech.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/functional.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/agent.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/module.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/module_dict.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/module_list.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/predictor.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/searcher.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/sequential.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/speaker.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/tool.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference/nn/modules/transcriber.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/api-reference.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/assets/logo-msgflux-horizon.png +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/assets/logo.png +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/assets/msgflux-wordmark.png +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/assets/msgflux.png +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/assets/tmd-mascot.png +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/blog/.authors.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/blog/index.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/blog/posts/.meta.yml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/blog/posts/26-04/why-msgflux-exists.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/changelog.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/hooks/copy_markdown.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/dotdict.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/inline.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/image_text_to_image.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/model.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/model_gateway.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/moderation.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/speech_to_text.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/text_classifier.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/text_embedder.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/text_reranker.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/text_to_image.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/models/text_to_speech.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/async.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/debug.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/generation-schemas.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/hooks.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/index.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/model-gateway.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/prefilling.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/quickstart.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/reasoning.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/signatures.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/streaming.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/system-prompt.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/task-and-context.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/agent/vars.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/functional.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/mediamaker.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/message.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/composing.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/core-concepts.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/forward-and-async.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/index.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/module-dict.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/module-list.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/sequential.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/module/visualization.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/predictor.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/searcher.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/speaker.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/nn/transcriber.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/parsers.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/retrievers/fuzzy.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/retrievers/lexical.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/retrievers/retriever.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/telemetry.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/learn/verifiers.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/stylesheets/extra.css +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/ad-focus-group.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/advisor-specialist-tool.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/call-transcript-analysis.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/deal-briefing-generator.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/email-auto-responder.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/food-delivery-assistant.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/index.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/intent-router.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/lead-scoring.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/meeting-action-items.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/meeting-assistant.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/pix-assistant.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/plan-tool-with-root-context.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/product-poster.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/restaurant-supply-assistant.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/signature-router.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/streaming-support-triage.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/support-ticket-router.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/visit-report.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/workplace-incident-reporter.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/docs/tutorials/youtube-cut-detector.md +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/ad_focus_group.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/advisor_specialist_tool.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/call_transcript_analysis.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/deal_briefing_generator.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/food_delivery_assistant.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/intent-router.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/lead_scoring.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/meeting_action_items.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/meeting_assistant.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/pix_assistant.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/plan_tool_with_root_history.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/restaurant-supply-assistant.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/streaming_support_triage.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/visit_report.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/examples/youtube_cut_detector.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/pyproject.toml +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/scripts/release.sh +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/scripts/setup-branch-protection.sh +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/scripts/setup-labels.sh +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/scripts/svg_render.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/_private/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/_private/client.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/_private/core.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/_private/executor.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/_private/response.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/auto/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/auto/params.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/cache.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/core/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/core/dotdict.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/core/examples.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/core/message.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/core/registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/audio.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/db.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/cachetools.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/diskcache.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/providers/faiss.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/response.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/dbs/types.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/parser.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/csv_parser.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/email_parser.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/html_parser.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/openpyxl.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/pypdf.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/python_docx.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/providers/python_pptx.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/response.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/parsers/types.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/bm25.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/bm25s.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/rank_bm25.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/rapidfuzz.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/providers/wikipedia.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/retrievers/types.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/types/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/types/audio.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/types/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/types/file.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/types/image.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/data/types/video.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/inline.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/signature.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/providers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/providers/xml.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/dsl/typed_parsers/registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/envs.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/exceptions.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/control_flow.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/cot.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/react.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/reasoning/self_consistency.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/templates.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/verifiers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/verifiers/formatters.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/generation/verifiers/llm_as_a_verifier.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/logger.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/cache.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/gateway.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/httpx.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/model.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/profiles/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/profiles/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/profiles/loader.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/profiles/registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/cerebras.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/imagerouter.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/jinaai.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/replicate.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/sambanova.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/providers/together.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/response.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/tool_call_agg.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/models/types.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/functional.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/hooks/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/hooks/guard.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/hooks/hook.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/agent.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/container.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/embedder.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/generator.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/mediamaker.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/module.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/predictor.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/searcher.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/speaker.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/tool.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/modules/transcriber.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/nn/parameter.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/apikey.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/basic.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/bearer.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/custom.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/auth/oauth2.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/client.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/exceptions.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/integration.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/loglevels.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/transports.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/protocols/mcp/types.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/py.typed +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/telemetry/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/telemetry/config.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/telemetry/span.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/tools/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/tools/builtin/web_fetch.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/tools/config.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/tools/definitions.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/chat.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/common.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/console.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/convert.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/encode.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/html.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/imports.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/inspect.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/logging.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/mermaid.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/msgspec.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/pooling.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/templates.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/tenacity.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/torch.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/validation.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/src/msgflux/utils/xml.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/auto/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/auto/test_params.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/conftest.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/parsers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/parsers/test_parsers.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/retrievers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/retrievers/providers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_bm25.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_bm25s.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_rank_bm25.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_rapidfuzz.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/data/retrievers/providers/test_wikipedia.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/dsl/test_inline.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/dsl/test_signature.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/dsl/test_typed_parsers.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/generation/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/generation/test_control_flow.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/generation/test_reasoning.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/generation/test_templates.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/generation/test_verifiers.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/integration/test_agent_reasoning.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/integration/test_guard_moderation.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/integration/test_reasoning.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/integration/test_tool_dict_e2e.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/providers/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/providers/test_openrouter.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_base.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_cache.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_gateway.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_httpx.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_model.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_profiles.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_response.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/models/test_tool_call_agg.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_agent.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_container.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_embedder.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_lm.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_mediamaker.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_module.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_predictor.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_searcher.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_speaker.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_tool.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_tool_transport_params.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/modules/test_transcriber.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/test_functional.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/test_guard.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/nn/test_parameter.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/auth/test_auth_providers.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/conftest.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/mcp_simple_server.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_client.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_exceptions.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_integration.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_loglevels.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_mcp_live.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_toollibrary_mcp.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_transports.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/protocols/mcp/test_types.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/telemetry/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/telemetry/test_config.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/telemetry/test_span_agent_decorators.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/telemetry/test_span_tool_decorators.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_agent_as_tool_with_signature.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_agent_generation_schema.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_agent_image_detail.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_agent_include_date.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_agent_named_kwargs.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_agent_signature_annotations.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_agent_templates_fix.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_async_hooks.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_autoparams.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_data_types.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_dotdict.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_embedder.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_examples.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_image_block_kwargs_refactor.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_inject_message.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_mcp_fastmcp.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_registry.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_tool_config_decorator.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_tool_control.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_tools_visualization.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_type_inheritance_struct.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/test_video_block_kwargs.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/tools/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/tools/builtin/__init__.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/tools/builtin/test_web_fetch.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/tools/test_config.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/tools/test_toolflowcontrol.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_chat.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_common.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_console.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_convert.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_encode.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_hint_to_schema_dict.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_hooks.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_imports.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_inspect.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_logging.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_mermaid.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_msgspec.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_pooling.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_templates.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_tenacity.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_torch.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_validation.py +0 -0
- {msgflux-0.3.0 → msgflux-0.4.1}/tests/utils/test_xml.py +0 -0
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
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
|
+
|
|
3
14
|
## [0.3.0] - 2026-04-20
|
|
4
15
|
|
|
5
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).
|
|
@@ -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
|
|
@@ -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.
|
|
@@ -72,6 +72,7 @@ Chat completion models are stateless - they don't maintain conversation history
|
|
|
72
72
|
verbose=False, # Print raw output before transformation
|
|
73
73
|
# --- Search ---
|
|
74
74
|
web_search_options={}, # Web search config (OpenAI / OpenRouter only)
|
|
75
|
+
extra_body={}, # Provider-specific OpenAI-compatible extensions
|
|
75
76
|
prompt_cache_retention="24h", # OpenAI only: "in_memory" or "24h"
|
|
76
77
|
# --- Infrastructure ---
|
|
77
78
|
base_url="https://api.openai.com/v1", # Override provider API endpoint
|
|
@@ -82,6 +83,10 @@ Chat completion models are stateless - they don't maintain conversation history
|
|
|
82
83
|
)
|
|
83
84
|
```
|
|
84
85
|
|
|
86
|
+
Use `extra_body` for provider-specific request body fields supported by
|
|
87
|
+
OpenAI-compatible APIs but not modeled directly by msgFlux. The dict is
|
|
88
|
+
forwarded to the underlying OpenAI SDK client.
|
|
89
|
+
|
|
85
90
|
## 2. **System Prompt**
|
|
86
91
|
|
|
87
92
|
The `system_prompt` parameter sets the model's overarching behavior and role before any user messages. It is a convenience shorthand: when provided, msgFlux automatically inserts a `system` message at the beginning of the conversation, so you don't have to do it manually in the messages list.
|
|
@@ -736,6 +741,8 @@ Force the model to start its response with specific text. msgFlux appends the va
|
|
|
736
741
|
|
|
737
742
|
The `web_search_options` parameter enables real-time web search, letting the model ground its answers in up-to-date information retrieved from the internet. It is currently supported by OpenAI search models (`gpt-4o-search-preview`, `gpt-4o-mini-search-preview`) and OpenRouter.
|
|
738
743
|
|
|
744
|
+
OpenAI-compatible search providers can also expose chat completion models that search the web before answering. Brave uses `BRAVE_SEARCH_API_KEY` with the `brave/brave` model id, and Exa uses `EXA_API_KEY` with the `exa/exa` model id.
|
|
745
|
+
|
|
739
746
|
!!! info "Dependencies"
|
|
740
747
|
Install the OpenAI extra if you haven't already:
|
|
741
748
|
|
|
@@ -794,6 +801,92 @@ The `web_search_options` parameter enables real-time web search, letting the mod
|
|
|
794
801
|
print(response.consume())
|
|
795
802
|
```
|
|
796
803
|
|
|
804
|
+
=== "Brave Search"
|
|
805
|
+
|
|
806
|
+
Brave Answers uses an OpenAI-compatible endpoint. Set
|
|
807
|
+
`BRAVE_SEARCH_API_KEY` and use the `brave/brave` model id:
|
|
808
|
+
|
|
809
|
+
```python
|
|
810
|
+
import msgflux as mf
|
|
811
|
+
|
|
812
|
+
mf.set_envs(BRAVE_SEARCH_API_KEY="...")
|
|
813
|
+
|
|
814
|
+
model = mf.Model.chat_completion("brave/brave")
|
|
815
|
+
response = model("What are the latest Python packaging updates?")
|
|
816
|
+
|
|
817
|
+
print(response.consume())
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
Brave-specific request fields are passed through `extra_body`:
|
|
821
|
+
|
|
822
|
+
```python
|
|
823
|
+
import msgflux as mf
|
|
824
|
+
|
|
825
|
+
mf.set_envs(BRAVE_SEARCH_API_KEY="...")
|
|
826
|
+
|
|
827
|
+
model = mf.Model.chat_completion(
|
|
828
|
+
"brave/brave",
|
|
829
|
+
extra_body={
|
|
830
|
+
"country": "BR", # target country for search results
|
|
831
|
+
"language": "pt", # answer language
|
|
832
|
+
},
|
|
833
|
+
)
|
|
834
|
+
|
|
835
|
+
response = model("Quais foram as principais novidades do Python este mês?")
|
|
836
|
+
print(response.consume())
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
Brave's richer answer fields require streaming mode:
|
|
840
|
+
|
|
841
|
+
```python
|
|
842
|
+
import msgflux as mf
|
|
843
|
+
|
|
844
|
+
mf.set_envs(BRAVE_SEARCH_API_KEY="...")
|
|
845
|
+
|
|
846
|
+
model = mf.Model.chat_completion(
|
|
847
|
+
"brave/brave",
|
|
848
|
+
extra_body={
|
|
849
|
+
"country": "US",
|
|
850
|
+
"language": "en",
|
|
851
|
+
"enable_citations": True,
|
|
852
|
+
"enable_entities": True,
|
|
853
|
+
"enable_research": False,
|
|
854
|
+
},
|
|
855
|
+
)
|
|
856
|
+
|
|
857
|
+
response = model("Summarize the latest Python packaging updates.", stream=True)
|
|
858
|
+
|
|
859
|
+
async for chunk in response.consume():
|
|
860
|
+
print(chunk, end="", flush=True)
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
Supported Brave Answers parameters include:
|
|
864
|
+
|
|
865
|
+
| Parameter | Description | Default |
|
|
866
|
+
|---|---|---|
|
|
867
|
+
| `country` | Target country for search results | `"us"` |
|
|
868
|
+
| `language` | Response language | `"en"` |
|
|
869
|
+
| `enable_citations` | Include inline citation tags in streamed responses | `False` |
|
|
870
|
+
| `enable_entities` | Include entity tags in streamed responses | `False` |
|
|
871
|
+
| `enable_research` | Enable multi-search research mode for more thorough answers | `False` |
|
|
872
|
+
|
|
873
|
+
`enable_citations`, `enable_entities`, and `enable_research` require
|
|
874
|
+
`stream=True`. Research mode can be slower and more expensive because
|
|
875
|
+
Brave may run multiple searches before answering.
|
|
876
|
+
|
|
877
|
+
=== "Exa Answer"
|
|
878
|
+
|
|
879
|
+
```python
|
|
880
|
+
import msgflux as mf
|
|
881
|
+
|
|
882
|
+
mf.set_envs(EXA_API_KEY="...")
|
|
883
|
+
|
|
884
|
+
model = mf.Model.chat_completion("exa/exa")
|
|
885
|
+
response = model("What are the latest changes in Python packaging?")
|
|
886
|
+
|
|
887
|
+
print(response.consume())
|
|
888
|
+
```
|
|
889
|
+
|
|
797
890
|
### 11.1 **search_context_size**
|
|
798
891
|
|
|
799
892
|
Controls how much web content is retrieved and included in the model's context window:
|
|
@@ -218,6 +218,60 @@ When the model decides to use a tool, the Agent intercepts the response, execute
|
|
|
218
218
|
response = agent("Summarize the main points from https://news.ycombinator.com")
|
|
219
219
|
```
|
|
220
220
|
|
|
221
|
+
=== "Web Search"
|
|
222
|
+
|
|
223
|
+
Use a built-in web search tool backed by either a retriever or a model:
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
# pip install msgflux[openai]
|
|
227
|
+
import msgflux as mf
|
|
228
|
+
import msgflux.nn as nn
|
|
229
|
+
from msgflux.tools.builtin import WebSearch
|
|
230
|
+
|
|
231
|
+
# Option 1: retriever-backed web search
|
|
232
|
+
wikipedia_search = WebSearch(
|
|
233
|
+
"retriever/wikipedia",
|
|
234
|
+
call_params={"top_k": 2},
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
# Option 2: model-backed web search
|
|
238
|
+
openai_search = WebSearch(
|
|
239
|
+
"model/openai/gpt-4o-search-preview",
|
|
240
|
+
init_params={
|
|
241
|
+
"web_search_options": {"search_context_size": "low"},
|
|
242
|
+
},
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
# Or read the engine and params from the environment:
|
|
246
|
+
# export MSGFLUX_TOOL_WEB_SEARCH_ENGINE="retriever/wikipedia"
|
|
247
|
+
# export MSGFLUX_TOOL_WEB_SEARCH_INIT_PARAMS='{"language": "pt"}'
|
|
248
|
+
# export MSGFLUX_TOOL_WEB_SEARCH_CALL_PARAMS='{"top_k": 2}'
|
|
249
|
+
env_search = WebSearch()
|
|
250
|
+
|
|
251
|
+
class Researcher(nn.Agent):
|
|
252
|
+
model = mf.Model.chat_completion("openai/gpt-4.1-mini")
|
|
253
|
+
system_message = "You help users find up-to-date information."
|
|
254
|
+
tools = [wikipedia_search, openai_search, env_search]
|
|
255
|
+
config = {"verbose": True}
|
|
256
|
+
|
|
257
|
+
agent = Researcher()
|
|
258
|
+
|
|
259
|
+
result = agent("What is the latest Python version?")
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
The tool returns a `dict` with:
|
|
263
|
+
|
|
264
|
+
- `data`: the search result payload
|
|
265
|
+
- `annotations`: citation metadata when available
|
|
266
|
+
|
|
267
|
+
`init_params` is unpacked into the backend constructor
|
|
268
|
+
(`Retriever.web_search(...)` or `Model.chat_completion(...)`).
|
|
269
|
+
`call_params` is supported only for retriever engines and is unpacked
|
|
270
|
+
whenever the retriever is called. If these values are not passed
|
|
271
|
+
explicitly, `WebSearch` reads the JSON objects from
|
|
272
|
+
`MSGFLUX_TOOL_WEB_SEARCH_INIT_PARAMS` and
|
|
273
|
+
`MSGFLUX_TOOL_WEB_SEARCH_CALL_PARAMS`.
|
|
274
|
+
|
|
221
275
|
=== "Wikipedia Search"
|
|
222
276
|
|
|
223
277
|
Use msgflux's built-in Wikipedia retriever as a tool:
|