lionagi 0.17.3__tar.gz → 0.17.5__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.
- {lionagi-0.17.3 → lionagi-0.17.5}/PKG-INFO +30 -3
- {lionagi-0.17.3 → lionagi-0.17.5}/README.md +29 -2
- lionagi-0.17.5/lionagi/__init__.py +96 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/_async_call.py +13 -2
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/_hash.py +12 -2
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/_to_list.py +23 -12
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/fuzzy/_fuzzy_validate.py +6 -4
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/action/manager.py +0 -2
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/api_calling.py +1 -5
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/mcp/wrapper.py +8 -15
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/utils.py +0 -8
- lionagi-0.17.5/lionagi/version.py +1 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/pyproject.toml +1 -1
- {lionagi-0.17.3 → lionagi-0.17.5}/uv.lock +1936 -1761
- lionagi-0.17.3/lionagi/__init__.py +0 -54
- lionagi-0.17.3/lionagi/version.py +0 -1
- {lionagi-0.17.3 → lionagi-0.17.5}/.coveragerc +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.env.example +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/FUNDING.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/dependabot.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/workflows/benchmarks.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/workflows/ci.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/workflows/docs-deploy.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/workflows/refresh-bench-baselines.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.github/workflows/release.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.gitignore +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.pre-commit-config.yaml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/.python-version +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/CONTRIBUTING.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/LICENSE +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/assets/operation_builder.gif +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/README.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/baselines/.gitkeep +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/baselines/concurrency-asyncio.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/baselines/concurrency-trio.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/baselines/fuzzy.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/baselines/ln-asyncio.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/baselines/ln-trio.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/ci_compare.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/concurrency_bench.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/fuzzy_bench.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/benchmarks/ln_bench.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/001_branch_converse.ipynb +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/002_branch_interact.ipynb +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/003_branch_info.ipynb +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/004_conversation_patterns.ipynb +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/005_react_basics.ipynb +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/007_fan_out_in.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/data/002_comedian.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/data/002_critic.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/data/006_lion_proof_ch2.md +0 -0
- {lionagi-0.17.3/cookbooks → lionagi-0.17.5/cookbooks/using_claude_code}/claude_proxy/README.md +0 -0
- {lionagi-0.17.3/cookbooks → lionagi-0.17.5/cookbooks/using_claude_code}/claude_proxy/claude_code_proxy.py +0 -0
- {lionagi-0.17.3/cookbooks → lionagi-0.17.5/cookbooks/using_claude_code}/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
- {lionagi-0.17.3/cookbooks → lionagi-0.17.5/cookbooks/using_claude_code}/using_claude_code.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/using_mcp/.mcp.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/using_mcp/README.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/using_mcp/react_mcp_with_schema.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/using_mcp/search_group.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/cookbooks/using_mcp/search_group_config.json +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/DOCUMENTATION_STANDARDS.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/advanced/custom-operations.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/advanced/error-handling.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/advanced/flow-composition.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/advanced/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/advanced/observability.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/advanced/performance.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/code-of-conduct.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/comparisons/langgraph.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/contributing.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/cookbook/brainstorming.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/cookbook/claim-extraction.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/cookbook/code-review-crew.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/cookbook/data-persistence.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/cookbook/hr-automation.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/cookbook/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/cookbook/research-synthesis.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/core-concepts/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/core-concepts/lionagi-philosophy.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/core-concepts/messages-and-memory.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/core-concepts/models-and-providers.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/core-concepts/operations.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/core-concepts/sessions-and-branches.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/core-concepts/tools-and-functions.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/for-ai-agents/claude-code-usage.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/for-ai-agents/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/for-ai-agents/orchestration-guide.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/for-ai-agents/pattern-selection.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/for-ai-agents/self-improvement.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/includes/abbreviations.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/databases.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/dspy-optimization.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/llamaindex-rag.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/llm-providers.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/mcp-servers.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/tools.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/integrations/vector-stores.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/marketing/language-interoperability-manifesto.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/migration/from-autogen.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/migration/from-crewai.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/migration/from-langchain.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/migration/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/patterns/conditional-flows.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/patterns/fan-out-in.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/patterns/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/patterns/react-with-rag.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/patterns/sequential-analysis.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/patterns/tournament-validation.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/problem-statement.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/quickstart/claude-code-integration.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/quickstart/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/quickstart/installation.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/quickstart/orchestration-first.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/quickstart/your-first-flow.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/reference/api/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/reference/changelog.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/reference/troubleshooting.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/stylesheets/extra.css +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/thinking-in-lionagi/branches-as-agents.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/thinking-in-lionagi/builder-pattern.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/thinking-in-lionagi/graphs-over-chains.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/thinking-in-lionagi/index.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/docs/thinking-in-lionagi/why-lionagi.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/_class_registry.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/_errors.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/_types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/adapters/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/adapters/_utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/adapters/async_postgres_adapter.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/config.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/action.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/base.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/code.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/file.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/reason.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/fields/research.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/_utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/concat.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/concat_files.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/file/save.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/validate/to_num.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/_json_dump.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/_list_call.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/_utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/_compat.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/cancel.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/errors.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/patterns.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/primitives.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/resource_tracker.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/task.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/throttle.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/concurrency/utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/fuzzy/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/fuzzy/_extract_json.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/fuzzy/_fuzzy_json.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/fuzzy/_fuzzy_match.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/fuzzy/_string_similarity.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/fuzzy/_to_dict.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/ln/types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/models/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/models/field_model.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/models/model_params.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/models/operable_model.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/_visualize_graph.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/builder.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/flow.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/manager.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/node.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/operations/utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/action/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/contracts.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/forms/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/ids.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/operatives/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/operatives/operative.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/operatives/step.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/protocols/types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/py.typed +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/endpoint.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/endpoint_config.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/header_factory.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/match_endpoint.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/mcp/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/anthropic_.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/exa_.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/nvidia_nim_.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/oai_.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/ollama_.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/perplexity_.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/connections/providers/types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/hooks/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/hooks/_types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/hooks/_utils.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/hooks/hook_event.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/hooks/hook_registry.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/imodel.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/manager.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/rate_limited_processor.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/resilience.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/third_party/README.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/third_party/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/third_party/anthropic_models.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/third_party/claude_code.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/third_party/exa_models.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/third_party/openai_model_names.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/third_party/pplx_models.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/token_calculator.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/service/types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/session/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/session/branch.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/session/prompts.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/session/session.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/settings.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/tools/base.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/lionagi/tools/types.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/main.py +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/mkdocs.yml +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/scripts/README.md +0 -0
- {lionagi-0.17.3 → lionagi-0.17.5}/scripts/update_openai_models.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.17.
|
3
|
+
Version: 0.17.5
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>
|
6
6
|
License: Apache License
|
@@ -330,8 +330,8 @@ from pydantic import BaseModel
|
|
330
330
|
class Joke(BaseModel):
|
331
331
|
joke: str
|
332
332
|
|
333
|
-
res = await hunter.
|
334
|
-
"Tell me a short dragon joke",
|
333
|
+
res = await hunter.operate(
|
334
|
+
instruction="Tell me a short dragon joke",
|
335
335
|
response_format=Joke
|
336
336
|
)
|
337
337
|
print(type(res))
|
@@ -374,6 +374,33 @@ print(result)
|
|
374
374
|
The LLM can now open the PDF, read in slices, fetch references, and produce a
|
375
375
|
final structured summary.
|
376
376
|
|
377
|
+
### MCP (Model Context Protocol) Integration
|
378
|
+
|
379
|
+
LionAGI supports Anthropic's Model Context Protocol for seamless tool integration:
|
380
|
+
|
381
|
+
```
|
382
|
+
pip install "lionagi[mcp]"
|
383
|
+
```
|
384
|
+
|
385
|
+
```python
|
386
|
+
from lionagi import load_mcp_tools
|
387
|
+
|
388
|
+
# Load tools from any MCP server
|
389
|
+
tools = await load_mcp_tools(".mcp.json", ["search", "memory"])
|
390
|
+
|
391
|
+
# Use with ReAct reasoning
|
392
|
+
branch = Branch(chat_model=gpt4o, tools=tools)
|
393
|
+
result = await branch.ReAct(
|
394
|
+
instruct={"instruction": "Research recent AI developments"},
|
395
|
+
tools=["search_exa_search"],
|
396
|
+
max_extensions=3
|
397
|
+
)
|
398
|
+
```
|
399
|
+
|
400
|
+
- **Dynamic Discovery**: Auto-discover and register tools from MCP servers
|
401
|
+
- **Type Safety**: Full Pydantic validation for tool interactions
|
402
|
+
- **Connection Pooling**: Efficient resource management with automatic reuse
|
403
|
+
|
377
404
|
### Observability & Debugging
|
378
405
|
|
379
406
|
- Inspect messages:
|
@@ -66,8 +66,8 @@ from pydantic import BaseModel
|
|
66
66
|
class Joke(BaseModel):
|
67
67
|
joke: str
|
68
68
|
|
69
|
-
res = await hunter.
|
70
|
-
"Tell me a short dragon joke",
|
69
|
+
res = await hunter.operate(
|
70
|
+
instruction="Tell me a short dragon joke",
|
71
71
|
response_format=Joke
|
72
72
|
)
|
73
73
|
print(type(res))
|
@@ -110,6 +110,33 @@ print(result)
|
|
110
110
|
The LLM can now open the PDF, read in slices, fetch references, and produce a
|
111
111
|
final structured summary.
|
112
112
|
|
113
|
+
### MCP (Model Context Protocol) Integration
|
114
|
+
|
115
|
+
LionAGI supports Anthropic's Model Context Protocol for seamless tool integration:
|
116
|
+
|
117
|
+
```
|
118
|
+
pip install "lionagi[mcp]"
|
119
|
+
```
|
120
|
+
|
121
|
+
```python
|
122
|
+
from lionagi import load_mcp_tools
|
123
|
+
|
124
|
+
# Load tools from any MCP server
|
125
|
+
tools = await load_mcp_tools(".mcp.json", ["search", "memory"])
|
126
|
+
|
127
|
+
# Use with ReAct reasoning
|
128
|
+
branch = Branch(chat_model=gpt4o, tools=tools)
|
129
|
+
result = await branch.ReAct(
|
130
|
+
instruct={"instruction": "Research recent AI developments"},
|
131
|
+
tools=["search_exa_search"],
|
132
|
+
max_extensions=3
|
133
|
+
)
|
134
|
+
```
|
135
|
+
|
136
|
+
- **Dynamic Discovery**: Auto-discover and register tools from MCP servers
|
137
|
+
- **Type Safety**: Full Pydantic validation for tool interactions
|
138
|
+
- **Connection Pooling**: Efficient resource management with automatic reuse
|
139
|
+
|
113
140
|
### Observability & Debugging
|
114
141
|
|
115
142
|
- Inspect messages:
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
import logging
|
6
|
+
from typing import TYPE_CHECKING
|
7
|
+
|
8
|
+
from . import ln as ln # Lightweight concurrency utilities
|
9
|
+
from .version import __version__
|
10
|
+
|
11
|
+
if TYPE_CHECKING:
|
12
|
+
# Type hints only - not imported at runtime
|
13
|
+
from pydantic import BaseModel, Field
|
14
|
+
|
15
|
+
from .operations.node import Operation
|
16
|
+
from .service.imodel import iModel
|
17
|
+
from .session.session import Branch, Session
|
18
|
+
|
19
|
+
logger = logging.getLogger(__name__)
|
20
|
+
logger.setLevel(logging.INFO)
|
21
|
+
|
22
|
+
# Module-level lazy loading cache
|
23
|
+
_lazy_imports = {}
|
24
|
+
|
25
|
+
|
26
|
+
def __getattr__(name: str):
|
27
|
+
"""Lazy loading for expensive imports."""
|
28
|
+
if name in _lazy_imports:
|
29
|
+
return _lazy_imports[name]
|
30
|
+
|
31
|
+
# Lazy load core components
|
32
|
+
if name == "Session":
|
33
|
+
from .session.session import Session
|
34
|
+
|
35
|
+
_lazy_imports[name] = Session
|
36
|
+
return Session
|
37
|
+
elif name == "Branch":
|
38
|
+
from .session.session import Branch
|
39
|
+
|
40
|
+
_lazy_imports[name] = Branch
|
41
|
+
return Branch
|
42
|
+
# Lazy load Pydantic components
|
43
|
+
elif name == "BaseModel":
|
44
|
+
from pydantic import BaseModel
|
45
|
+
|
46
|
+
_lazy_imports[name] = BaseModel
|
47
|
+
return BaseModel
|
48
|
+
elif name == "Field":
|
49
|
+
from pydantic import Field
|
50
|
+
|
51
|
+
_lazy_imports[name] = Field
|
52
|
+
return Field
|
53
|
+
# Lazy load operations
|
54
|
+
elif name == "Operation":
|
55
|
+
from .operations.node import Operation
|
56
|
+
|
57
|
+
_lazy_imports[name] = Operation
|
58
|
+
return Operation
|
59
|
+
elif name == "iModel":
|
60
|
+
from .service.imodel import iModel
|
61
|
+
|
62
|
+
_lazy_imports[name] = iModel
|
63
|
+
return iModel
|
64
|
+
elif name == "types":
|
65
|
+
from . import _types as types
|
66
|
+
|
67
|
+
_lazy_imports["types"] = types
|
68
|
+
return types
|
69
|
+
elif name == "Builder":
|
70
|
+
from .operations.builder import OperationGraphBuilder as Builder
|
71
|
+
|
72
|
+
_lazy_imports["Builder"] = Builder
|
73
|
+
return Builder
|
74
|
+
elif name == "load_mcp_tools":
|
75
|
+
from .protocols.action.manager import load_mcp_tools
|
76
|
+
|
77
|
+
_lazy_imports["load_mcp_tools"] = load_mcp_tools
|
78
|
+
return load_mcp_tools
|
79
|
+
|
80
|
+
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
81
|
+
|
82
|
+
|
83
|
+
__all__ = (
|
84
|
+
"Session",
|
85
|
+
"Branch",
|
86
|
+
"iModel",
|
87
|
+
"types",
|
88
|
+
"__version__",
|
89
|
+
"BaseModel",
|
90
|
+
"Field",
|
91
|
+
"logger",
|
92
|
+
"Builder",
|
93
|
+
"Operation",
|
94
|
+
"load_mcp_tools",
|
95
|
+
"ln",
|
96
|
+
)
|
@@ -5,7 +5,6 @@ from typing import Any, ClassVar
|
|
5
5
|
|
6
6
|
import anyio
|
7
7
|
import anyio.to_thread
|
8
|
-
from pydantic import BaseModel
|
9
8
|
|
10
9
|
from ._to_list import to_list
|
11
10
|
from .concurrency import Lock as ConcurrencyLock
|
@@ -18,6 +17,10 @@ from .concurrency import (
|
|
18
17
|
)
|
19
18
|
from .types import Params, T, Unset, not_sentinel
|
20
19
|
|
20
|
+
_INITIALIZED = False
|
21
|
+
_MODEL_LIKE = None
|
22
|
+
|
23
|
+
|
21
24
|
__all__ = (
|
22
25
|
"alcall",
|
23
26
|
"bcall",
|
@@ -54,6 +57,14 @@ async def alcall(
|
|
54
57
|
retries, timeout, and output processing.
|
55
58
|
"""
|
56
59
|
|
60
|
+
global _INITIALIZED, _MODEL_LIKE
|
61
|
+
if _INITIALIZED is False:
|
62
|
+
from msgspec import Struct
|
63
|
+
from pydantic import BaseModel
|
64
|
+
|
65
|
+
_MODEL_LIKE = (BaseModel, Struct)
|
66
|
+
_INITIALIZED = True
|
67
|
+
|
57
68
|
# Validate func is a single callable
|
58
69
|
if not callable(func):
|
59
70
|
# If func is not callable, maybe it's an iterable. Extract one callable if possible.
|
@@ -82,7 +93,7 @@ async def alcall(
|
|
82
93
|
else:
|
83
94
|
if not isinstance(input_, list):
|
84
95
|
# Attempt to iterate
|
85
|
-
if isinstance(input_,
|
96
|
+
if isinstance(input_, _MODEL_LIKE):
|
86
97
|
# Pydantic model, convert to list
|
87
98
|
input_ = [input_]
|
88
99
|
else:
|
@@ -3,10 +3,13 @@ from __future__ import annotations
|
|
3
3
|
import copy
|
4
4
|
|
5
5
|
import msgspec
|
6
|
-
from pydantic import BaseModel as PydanticBaseModel
|
7
6
|
|
8
7
|
__all__ = ("hash_dict",)
|
9
8
|
|
9
|
+
# Global initialization state
|
10
|
+
_INITIALIZED = False
|
11
|
+
PydanticBaseModel = None
|
12
|
+
|
10
13
|
# --- Canonical Representation Generator ---
|
11
14
|
_PRIMITIVE_TYPES = (str, int, float, bool, type(None))
|
12
15
|
_TYPE_MARKER_DICT = 0
|
@@ -35,7 +38,7 @@ def _generate_hashable_representation(item: any) -> any:
|
|
35
38
|
_generate_hashable_representation(msgspec.to_builtins(item)),
|
36
39
|
)
|
37
40
|
|
38
|
-
if isinstance(item, PydanticBaseModel):
|
41
|
+
if PydanticBaseModel and isinstance(item, PydanticBaseModel):
|
39
42
|
# Process the Pydantic model by first dumping it to a dict, then processing that dict.
|
40
43
|
# The type marker distinguishes this from a regular dictionary.
|
41
44
|
return (
|
@@ -117,6 +120,13 @@ def _generate_hashable_representation(item: any) -> any:
|
|
117
120
|
|
118
121
|
|
119
122
|
def hash_dict(data: any, strict: bool = False) -> int:
|
123
|
+
global _INITIALIZED, PydanticBaseModel
|
124
|
+
if _INITIALIZED is False:
|
125
|
+
from pydantic import BaseModel
|
126
|
+
|
127
|
+
PydanticBaseModel = BaseModel
|
128
|
+
_INITIALIZED = True
|
129
|
+
|
120
130
|
data_to_process = data
|
121
131
|
if strict:
|
122
132
|
data_to_process = copy.deepcopy(data)
|
@@ -3,24 +3,20 @@ from dataclasses import dataclass
|
|
3
3
|
from enum import Enum as _Enum
|
4
4
|
from typing import Any, ClassVar
|
5
5
|
|
6
|
-
from msgspec import Struct
|
7
|
-
from pydantic import BaseModel
|
8
|
-
from pydantic_core import PydanticUndefinedType
|
9
|
-
|
10
6
|
from ._hash import hash_dict
|
11
|
-
from .types import Params
|
7
|
+
from .types import Params
|
12
8
|
|
13
9
|
__all__ = ("to_list", "ToListParams")
|
14
10
|
|
15
11
|
|
12
|
+
_INITIALIZED = False
|
13
|
+
_MODEL_LIKE = None
|
14
|
+
_MAP_LIKE = None
|
15
|
+
_SINGLETONE_TYPES = None
|
16
|
+
_SKIP_TYPE = None
|
17
|
+
_SKIP_TUPLE_SET = None
|
16
18
|
_BYTE_LIKE = (str, bytes, bytearray)
|
17
|
-
_MODEL_LIKE = (BaseModel, Struct)
|
18
|
-
_MAP_LIKE = (Mapping, *_MODEL_LIKE)
|
19
19
|
_TUPLE_SET = (tuple, set, frozenset)
|
20
|
-
_SINGLETONE_TYPES = (UndefinedType, UnsetType, PydanticUndefinedType)
|
21
|
-
|
22
|
-
_SKIP_TYPE = (*_BYTE_LIKE, *_MAP_LIKE, _Enum)
|
23
|
-
_SKIP_TUPLE_SET = (*_SKIP_TYPE, *_TUPLE_SET)
|
24
20
|
|
25
21
|
|
26
22
|
def to_list(
|
@@ -50,6 +46,21 @@ def to_list(
|
|
50
46
|
Raises:
|
51
47
|
ValueError: If unique=True is used without flatten=True.
|
52
48
|
"""
|
49
|
+
global _INITIALIZED
|
50
|
+
if _INITIALIZED is False:
|
51
|
+
from msgspec import Struct
|
52
|
+
from pydantic import BaseModel
|
53
|
+
from pydantic_core import PydanticUndefinedType
|
54
|
+
|
55
|
+
from .types import UndefinedType, UnsetType
|
56
|
+
|
57
|
+
global _MODEL_LIKE, _MAP_LIKE, _SINGLETONE_TYPES, _SKIP_TYPE, _SKIP_TUPLE_SET
|
58
|
+
_MODEL_LIKE = (BaseModel, Struct)
|
59
|
+
_MAP_LIKE = (Mapping, *_MODEL_LIKE)
|
60
|
+
_SINGLETONE_TYPES = (UndefinedType, UnsetType, PydanticUndefinedType)
|
61
|
+
_SKIP_TYPE = (*_BYTE_LIKE, *_MAP_LIKE, _Enum)
|
62
|
+
_SKIP_TUPLE_SET = (*_SKIP_TYPE, *_TUPLE_SET)
|
63
|
+
_INITIALIZED = True
|
53
64
|
|
54
65
|
def _process_list(
|
55
66
|
lst: list[Any],
|
@@ -117,7 +128,7 @@ def to_list(
|
|
117
128
|
else [input_]
|
118
129
|
)
|
119
130
|
|
120
|
-
if isinstance(input_,
|
131
|
+
if isinstance(input_, _MODEL_LIKE):
|
121
132
|
return [input_]
|
122
133
|
|
123
134
|
if isinstance(input_, Iterable) and not isinstance(input_, _BYTE_LIKE):
|
@@ -1,7 +1,5 @@
|
|
1
1
|
from collections.abc import Callable, Sequence
|
2
|
-
from typing import Any, Literal
|
3
|
-
|
4
|
-
from pydantic import BaseModel
|
2
|
+
from typing import TYPE_CHECKING, Any, Literal
|
5
3
|
|
6
4
|
from lionagi._errors import ValidationError
|
7
5
|
|
@@ -11,13 +9,17 @@ from ._fuzzy_match import FuzzyMatchKeysParams, fuzzy_match_keys
|
|
11
9
|
from ._string_similarity import SIMILARITY_TYPE
|
12
10
|
from ._to_dict import to_dict
|
13
11
|
|
12
|
+
if TYPE_CHECKING:
|
13
|
+
from pydantic import BaseModel
|
14
|
+
|
15
|
+
|
14
16
|
__all__ = ("fuzzy_validate_pydantic",)
|
15
17
|
|
16
18
|
|
17
19
|
def fuzzy_validate_pydantic(
|
18
20
|
text,
|
19
21
|
/,
|
20
|
-
model_type: type[BaseModel],
|
22
|
+
model_type: "type[BaseModel]",
|
21
23
|
fuzzy_parse: bool = True,
|
22
24
|
fuzzy_match: bool = False,
|
23
25
|
fuzzy_match_params: FuzzyMatchKeysParams | dict = None,
|
@@ -85,20 +85,16 @@ class APICalling(Event):
|
|
85
85
|
TOKEN_LIMITS = {
|
86
86
|
# OpenAI models
|
87
87
|
"gpt-4": 128_000,
|
88
|
-
"gpt-4-turbo": 128_000,
|
89
|
-
"o1-mini": 128_000,
|
90
|
-
"o1-preview": 128_000,
|
91
88
|
"o1": 200_000,
|
92
89
|
"o3": 200_000,
|
93
90
|
"gpt-4.1": 1_000_000,
|
91
|
+
"gpt-5": 1_000_000,
|
94
92
|
# Anthropic models
|
95
93
|
"sonnet": 200_000,
|
96
94
|
"haiku": 200_000,
|
97
95
|
"opus": 200_000,
|
98
96
|
# Google models
|
99
97
|
"gemini": 1_000_000,
|
100
|
-
# Alibaba models
|
101
|
-
"qwen-turbo": 1_000_000,
|
102
98
|
}
|
103
99
|
|
104
100
|
token_msg = (
|
@@ -7,15 +7,7 @@ import json
|
|
7
7
|
import logging
|
8
8
|
import os
|
9
9
|
from pathlib import Path
|
10
|
-
from typing import Any
|
11
|
-
|
12
|
-
try:
|
13
|
-
from fastmcp import Client as FastMCPClient
|
14
|
-
|
15
|
-
FASTMCP_AVAILABLE = True
|
16
|
-
except ImportError:
|
17
|
-
FASTMCP_AVAILABLE = False
|
18
|
-
FastMCPClient = None
|
10
|
+
from typing import Any
|
19
11
|
|
20
12
|
# Suppress MCP server logging by default
|
21
13
|
logging.getLogger("mcp").setLevel(logging.WARNING)
|
@@ -88,11 +80,6 @@ class MCPConnectionPool:
|
|
88
80
|
@classmethod
|
89
81
|
async def get_client(cls, server_config: dict[str, Any]) -> Any:
|
90
82
|
"""Get or create a pooled MCP client."""
|
91
|
-
if not FASTMCP_AVAILABLE:
|
92
|
-
raise ImportError(
|
93
|
-
"FastMCP not installed. Run: pip install fastmcp"
|
94
|
-
)
|
95
|
-
|
96
83
|
# Generate unique key for this config
|
97
84
|
if "server" in server_config:
|
98
85
|
# Server reference from .mcp.json
|
@@ -149,6 +136,13 @@ class MCPConnectionPool:
|
|
149
136
|
if not any(k in config for k in ["url", "command"]):
|
150
137
|
raise ValueError("Config must have either 'url' or 'command' key")
|
151
138
|
|
139
|
+
try:
|
140
|
+
from fastmcp import Client as FastMCPClient
|
141
|
+
except ImportError:
|
142
|
+
raise ImportError(
|
143
|
+
"FastMCP not installed. Run: pip install fastmcp"
|
144
|
+
)
|
145
|
+
|
152
146
|
# Handle different config formats
|
153
147
|
if "url" in config:
|
154
148
|
# Direct URL connection
|
@@ -172,7 +166,6 @@ class MCPConnectionPool:
|
|
172
166
|
# Common environment variables to suppress logging
|
173
167
|
env.setdefault("LOG_LEVEL", "ERROR")
|
174
168
|
env.setdefault("PYTHONWARNINGS", "ignore")
|
175
|
-
env.setdefault("KHIVEMCP_LOG_LEVEL", "ERROR")
|
176
169
|
# Suppress FastMCP server logs
|
177
170
|
env.setdefault("FASTMCP_QUIET", "true")
|
178
171
|
env.setdefault("MCP_QUIET", "true")
|
@@ -87,8 +87,6 @@ __all__ = (
|
|
87
87
|
"max_concurrent",
|
88
88
|
"force_async",
|
89
89
|
"breakdown_pydantic_annotation",
|
90
|
-
"run_package_manager_command",
|
91
|
-
"StringEnum",
|
92
90
|
"Enum",
|
93
91
|
"hash_dict",
|
94
92
|
"is_union_type",
|
@@ -106,12 +104,6 @@ __all__ = (
|
|
106
104
|
)
|
107
105
|
|
108
106
|
|
109
|
-
# --- General Global Utilities Types ---
|
110
|
-
@deprecated("String Enum is deprecated, use `Enum` instead.")
|
111
|
-
class StringEnum(str, Enum):
|
112
|
-
pass
|
113
|
-
|
114
|
-
|
115
107
|
# --- General Global Utilities Functions ---
|
116
108
|
def time(
|
117
109
|
*,
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.17.5"
|