lionagi 0.16.1__tar.gz → 0.16.3__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.16.1 → lionagi-0.16.3}/.github/workflows/ci.yml +10 -4
- {lionagi-0.16.1 → lionagi-0.16.3}/PKG-INFO +3 -13
- {lionagi-0.16.1 → lionagi-0.16.3}/README.md +2 -2
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/concurrency-asyncio.json +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/concurrency-trio.json +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/fuzzy.json +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/ln-asyncio.json +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/ln-trio.json +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/ln_bench.py +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/adapters/_utils.py +0 -14
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/save.py +8 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/__init__.py +10 -0
- lionagi-0.16.3/lionagi/ln/_json_dump.py +348 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/__init__.py +4 -1
- lionagi-0.16.1/lionagi/libs/validate/fuzzy_validate_mapping.py → lionagi-0.16.3/lionagi/ln/fuzzy/_fuzzy_validate.py +49 -38
- lionagi-0.16.3/lionagi/ln/fuzzy/_to_dict.py +388 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/__init__.py +0 -2
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/brainstorm/brainstorm.py +10 -10
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/communicate/communicate.py +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/parse/parse.py +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/element.py +5 -14
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/log.py +2 -2
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/pile.py +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/message.py +8 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/operatives/operative.py +2 -2
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/endpoint.py +7 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/match_endpoint.py +2 -10
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/types.py +1 -3
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/hook_event.py +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/hook_registry.py +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/rate_limited_processor.py +1 -1
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/branch.py +1 -101
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/session.py +9 -14
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/utils.py +3 -334
- lionagi-0.16.3/lionagi/version.py +1 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/pyproject.toml +2 -17
- {lionagi-0.16.1 → lionagi-0.16.3}/uv.lock +7 -56
- lionagi-0.16.1/lionagi/adapters/postgres_model_adapter.py +0 -131
- lionagi-0.16.1/lionagi/libs/concurrency.py +0 -1
- lionagi-0.16.1/lionagi/libs/file/params.py +0 -175
- lionagi-0.16.1/lionagi/libs/nested/flatten.py +0 -172
- lionagi-0.16.1/lionagi/libs/nested/nfilter.py +0 -59
- lionagi-0.16.1/lionagi/libs/nested/nget.py +0 -45
- lionagi-0.16.1/lionagi/libs/nested/ninsert.py +0 -104
- lionagi-0.16.1/lionagi/libs/nested/nmerge.py +0 -158
- lionagi-0.16.1/lionagi/libs/nested/npop.py +0 -69
- lionagi-0.16.1/lionagi/libs/nested/nset.py +0 -94
- lionagi-0.16.1/lionagi/libs/nested/unflatten.py +0 -83
- lionagi-0.16.1/lionagi/libs/nested/utils.py +0 -189
- lionagi-0.16.1/lionagi/libs/parse.py +0 -31
- lionagi-0.16.1/lionagi/libs/schema/json_schema.py +0 -231
- lionagi-0.16.1/lionagi/libs/token_transform/base.py +0 -54
- lionagi-0.16.1/lionagi/libs/token_transform/llmlingua.py +0 -1
- lionagi-0.16.1/lionagi/libs/token_transform/perplexity.py +0 -450
- lionagi-0.16.1/lionagi/libs/token_transform/symbolic_compress_context.py +0 -152
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang.py +0 -9
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/base.py +0 -128
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -52
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -61
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -41
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -60
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -11
- lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -140
- lionagi-0.16.1/lionagi/libs/token_transform/types.py +0 -15
- lionagi-0.16.1/lionagi/libs/unstructured/pdf_to_image.py +0 -45
- lionagi-0.16.1/lionagi/libs/unstructured/read_image_to_base64.py +0 -33
- lionagi-0.16.1/lionagi/libs/validate/fuzzy_match_keys.py +0 -7
- lionagi-0.16.1/lionagi/libs/validate/string_similarity.py +0 -7
- lionagi-0.16.1/lionagi/libs/validate/xml_parser.py +0 -203
- lionagi-0.16.1/lionagi/ln/_json_dump.py +0 -75
- lionagi-0.16.1/lionagi/ln/fuzzy/_fuzzy_validate.py +0 -46
- lionagi-0.16.1/lionagi/models/note.py +0 -383
- lionagi-0.16.1/lionagi/operations/communicate/__init__.py +0 -0
- lionagi-0.16.1/lionagi/operations/translate/__init__.py +0 -0
- lionagi-0.16.1/lionagi/operations/translate/translate.py +0 -47
- lionagi-0.16.1/lionagi/service/connections/providers/claude_code_.py +0 -294
- lionagi-0.16.1/lionagi/service/third_party/__init__.py +0 -0
- lionagi-0.16.1/lionagi/tools/file/__init__.py +0 -3
- lionagi-0.16.1/lionagi/tools/memory/tools.py +0 -495
- lionagi-0.16.1/lionagi/version.py +0 -1
- lionagi-0.16.1/scripts/concat.py +0 -95
- lionagi-0.16.1/scripts/config.py +0 -18
- {lionagi-0.16.1 → lionagi-0.16.3}/.coveragerc +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.env.example +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.github/FUNDING.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.github/dependabot.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/benchmarks.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/docs-deploy.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/refresh-bench-baselines.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/release.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.gitignore +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.pre-commit-config.yaml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/.python-version +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/CONTRIBUTING.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/LICENSE +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/assets/operation_builder.gif +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/README.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/.gitkeep +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/ci_compare.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/concurrency_bench.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/fuzzy_bench.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/001_branch_converse.ipynb +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/002_branch_interact.ipynb +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/003_branch_info.ipynb +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/004_conversation_patterns.ipynb +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/005_react_basics.ipynb +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/007_fan_out_in.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/claude_proxy/README.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/claude_proxy/claude_code_proxy.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/data/002_comedian.json +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/data/002_critic.json +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/data/006_lion_proof_ch2.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/using_claude_code.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/DOCUMENTATION_STANDARDS.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/custom-operations.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/error-handling.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/flow-composition.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/observability.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/performance.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/code-of-conduct.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/comparisons/langgraph.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/contributing.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/brainstorming.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/claim-extraction.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/code-review-crew.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/data-persistence.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/hr-automation.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/research-synthesis.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/lionagi-philosophy.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/messages-and-memory.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/models-and-providers.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/operations.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/sessions-and-branches.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/tools-and-functions.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/claude-code-usage.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/orchestration-guide.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/pattern-selection.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/self-improvement.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/includes/abbreviations.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/databases.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/dspy-optimization.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/llamaindex-rag.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/llm-providers.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/mcp-servers.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/tools.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/vector-stores.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/marketing/language-interoperability-manifesto.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/from-autogen.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/from-crewai.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/from-langchain.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/conditional-flows.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/fan-out-in.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/react-with-rag.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/sequential-analysis.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/tournament-validation.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/problem-statement.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/claude-code-integration.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/installation.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/orchestration-first.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/your-first-flow.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/reference/api/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/reference/changelog.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/reference/troubleshooting.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/stylesheets/extra.css +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/branches-as-agents.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/builder-pattern.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/graphs-over-chains.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/index.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/why-lionagi.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/_class_registry.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/_errors.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/_types.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/adapters/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/adapters/async_postgres_adapter.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/config.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/action.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/base.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/code.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/file.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/reason.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/research.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/_utils.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/concat.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/concat_files.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.16.1/lionagi/libs/nested → lionagi-0.16.3/lionagi/libs/schema}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
- {lionagi-0.16.1/lionagi/libs/schema → lionagi-0.16.3/lionagi/libs/validate}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/validate/to_num.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_async_call.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_hash.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_list_call.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_to_list.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_utils.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/_compat.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/cancel.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/errors.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/patterns.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/primitives.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/resource_tracker.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/task.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/throttle.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/utils.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_extract_json.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_fuzzy_json.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_fuzzy_match.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_string_similarity.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/types.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/field_model.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/model_params.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/operable_model.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.16.1/lionagi/libs/validate → lionagi-0.16.3/lionagi/operations/ReAct}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.16.1/lionagi/operations/ReAct → lionagi-0.16.3/lionagi/operations/_act}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.16.1/lionagi/operations/_act → lionagi-0.16.3/lionagi/operations/brainstorm}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/builder.py +0 -0
- {lionagi-0.16.1/lionagi/operations/brainstorm → lionagi-0.16.3/lionagi/operations/chat}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.16.1/lionagi/libs/token_transform → lionagi-0.16.3/lionagi/operations/communicate}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/flow.py +0 -0
- {lionagi-0.16.1/lionagi/operations/chat → lionagi-0.16.3/lionagi/operations/instruct}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.16.1/lionagi/operations/instruct → lionagi-0.16.3/lionagi/operations/interpret}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/manager.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/node.py +0 -0
- {lionagi-0.16.1/lionagi/operations/interpret → lionagi-0.16.3/lionagi/operations/operate}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.16.1/lionagi/operations/operate → lionagi-0.16.3/lionagi/operations/parse}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.16.1/lionagi/operations/parse → lionagi-0.16.3/lionagi/operations/select}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/types.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/utils.py +0 -0
- {lionagi-0.16.1/lionagi/operations/select → lionagi-0.16.3/lionagi/protocols}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.16.1/lionagi/protocols → lionagi-0.16.3/lionagi/protocols/action}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/action/manager.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/contracts.py +0 -0
- {lionagi-0.16.1/lionagi/protocols/action → lionagi-0.16.3/lionagi/protocols/forms}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.16.1/lionagi/protocols/forms → lionagi-0.16.3/lionagi/protocols/generic}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/_utils.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/ids.py +0 -0
- {lionagi-0.16.1/lionagi/protocols/generic → lionagi-0.16.3/lionagi/protocols/mail}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.16.1/lionagi/protocols/mail → lionagi-0.16.3/lionagi/protocols/messages}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.16.1/lionagi/protocols/messages → lionagi-0.16.3/lionagi/protocols/operatives}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/operatives/step.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/types.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/py.typed +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/api_calling.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/endpoint_config.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/header_factory.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/anthropic_.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/exa_.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/nvidia_nim_.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/oai_.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/ollama_.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/perplexity_.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/_types.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/_utils.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/imodel.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/manager.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/resilience.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/README.md +0 -0
- {lionagi-0.16.1/lionagi/libs/unstructured → lionagi-0.16.3/lionagi/service/third_party}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/anthropic_models.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/claude_code.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/exa_models.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/openai_model_names.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/pplx_models.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/token_calculator.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/types.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/prompts.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/settings.py +0 -0
- {lionagi-0.16.1/lionagi/protocols/operatives → lionagi-0.16.3/lionagi/tools}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/tools/base.py +0 -0
- {lionagi-0.16.1/lionagi/tools → lionagi-0.16.3/lionagi/tools/file}/__init__.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/tools/types.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/main.py +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/mkdocs.yml +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/scripts/README.md +0 -0
- {lionagi-0.16.1 → lionagi-0.16.3}/scripts/update_openai_models.py +0 -0
@@ -39,12 +39,18 @@ jobs:
|
|
39
39
|
run: |
|
40
40
|
uv venv
|
41
41
|
uv sync --extra all
|
42
|
-
|
43
|
-
- name: Run tests
|
42
|
+
|
43
|
+
- name: Run tests with coverage
|
44
44
|
run: |
|
45
45
|
source .venv/bin/activate
|
46
|
-
uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings tests/
|
47
|
-
|
46
|
+
uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings --cov=lionagi --cov-report=xml --cov-report=term tests/
|
47
|
+
|
48
|
+
- name: Upload coverage reports to Codecov
|
49
|
+
uses: codecov/codecov-action@v5
|
50
|
+
with:
|
51
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
52
|
+
slug: khive-ai/lionagi
|
53
|
+
|
48
54
|
- name: Check code style and compatibility
|
49
55
|
run: |
|
50
56
|
source .venv/bin/activate
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.16.
|
3
|
+
Version: 0.16.3
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>
|
6
6
|
License: Apache License
|
@@ -226,17 +226,13 @@ Requires-Dist: backoff>=2.0.0
|
|
226
226
|
Requires-Dist: jinja2>=3.0.0
|
227
227
|
Requires-Dist: json-repair>=0.40.0
|
228
228
|
Requires-Dist: msgspec>=0.18.0
|
229
|
-
Requires-Dist: pillow>=10.0.0
|
230
|
-
Requires-Dist: psutil>=6.0.0
|
231
229
|
Requires-Dist: pydantic-settings>=2.8.0
|
232
230
|
Requires-Dist: pydantic>=2.8.0
|
233
231
|
Requires-Dist: pydapter[pandas]>=1.1.1
|
234
232
|
Requires-Dist: python-dotenv>=1.1.0
|
235
233
|
Requires-Dist: tiktoken>=0.9.0
|
236
|
-
Requires-Dist: toml>=0.8.0
|
237
234
|
Provides-Extra: all
|
238
235
|
Requires-Dist: aiosqlite>=0.21.0; extra == 'all'
|
239
|
-
Requires-Dist: claude-code-sdk>=0.0.15; extra == 'all'
|
240
236
|
Requires-Dist: datamodel-code-generator>=0.31.2; extra == 'all'
|
241
237
|
Requires-Dist: docling>=2.15.0; extra == 'all'
|
242
238
|
Requires-Dist: fastmcp>=2.10.5; extra == 'all'
|
@@ -245,8 +241,6 @@ Requires-Dist: networkx>=3.0.0; extra == 'all'
|
|
245
241
|
Requires-Dist: ollama>=0.4.0; extra == 'all'
|
246
242
|
Requires-Dist: pydapter[postgres]; extra == 'all'
|
247
243
|
Requires-Dist: rich>=13.0.0; extra == 'all'
|
248
|
-
Provides-Extra: claude-code
|
249
|
-
Requires-Dist: claude-code-sdk>=0.0.15; extra == 'claude-code'
|
250
244
|
Provides-Extra: graph
|
251
245
|
Requires-Dist: matplotlib>=3.7.0; extra == 'graph'
|
252
246
|
Requires-Dist: networkx>=3.0.0; extra == 'graph'
|
@@ -264,10 +258,6 @@ Provides-Extra: schema
|
|
264
258
|
Requires-Dist: datamodel-code-generator>=0.31.2; extra == 'schema'
|
265
259
|
Provides-Extra: sqlite
|
266
260
|
Requires-Dist: aiosqlite>=0.21.0; extra == 'sqlite'
|
267
|
-
Provides-Extra: tools
|
268
|
-
Requires-Dist: docling>=2.15.0; extra == 'tools'
|
269
|
-
Provides-Extra: unstructured
|
270
|
-
Requires-Dist: opencv-python>=4.2.0.34; extra == 'unstructured'
|
271
261
|
Provides-Extra: xml
|
272
262
|
Requires-Dist: xmltodict>=0.12.0; extra == 'xml'
|
273
263
|
Description-Content-Type: text/markdown
|
@@ -275,6 +265,7 @@ Description-Content-Type: text/markdown
|
|
275
265
|

|
276
266
|

|
277
267
|

|
268
|
+
[](https://codecov.io/github/khive-ai/lionagi)
|
278
269
|
|
279
270
|
[Documentation](https://khive-ai.github.io/lionagi/) |
|
280
271
|
[Discord](https://discord.gg/JDj9ENhUE8) |
|
@@ -417,7 +408,7 @@ Seamlessly route to different models in the same workflow.
|
|
417
408
|
|
418
409
|
### Claude Code Integration
|
419
410
|
|
420
|
-
LionAGI now supports Anthropic's Claude Code [
|
411
|
+
LionAGI now supports Anthropic's Claude Code [CLI SDK](https://docs.anthropic.com/en/docs/claude-code/sdk) enabling autonomous coding capabilities with persistent session management. The CLI endpoint
|
421
412
|
directly connects to claude code, and is recommended, you can either use it via a [proxy server](https://github.com/khive-ai/lionagi/tree/main/cookbooks/claude_proxy) or directly with `query_cli` endpoint, provided you have already logged onto claude code cli in your terminal.
|
422
413
|
|
423
414
|
```python
|
@@ -485,7 +476,6 @@ Key features:
|
|
485
476
|
```
|
486
477
|
"lionagi[reader]" - Reader tool for any unstructured data and web pages
|
487
478
|
"lionagi[ollama]" - Ollama model support for local inference
|
488
|
-
"lionagi[claude-code]" - Claude code python SDK integration (cli endpoint does not require this)
|
489
479
|
"lionagi[rich]" - Rich output formatting for better console display
|
490
480
|
"lionagi[schema]" - Convert pydantic schema to make the Model class persistent
|
491
481
|
"lionagi[postgres]" - Postgres database support for storing and retrieving structured data
|
@@ -1,6 +1,7 @@
|
|
1
1
|

|
2
2
|

|
3
3
|

|
4
|
+
[](https://codecov.io/github/khive-ai/lionagi)
|
4
5
|
|
5
6
|
[Documentation](https://khive-ai.github.io/lionagi/) |
|
6
7
|
[Discord](https://discord.gg/JDj9ENhUE8) |
|
@@ -143,7 +144,7 @@ Seamlessly route to different models in the same workflow.
|
|
143
144
|
|
144
145
|
### Claude Code Integration
|
145
146
|
|
146
|
-
LionAGI now supports Anthropic's Claude Code [
|
147
|
+
LionAGI now supports Anthropic's Claude Code [CLI SDK](https://docs.anthropic.com/en/docs/claude-code/sdk) enabling autonomous coding capabilities with persistent session management. The CLI endpoint
|
147
148
|
directly connects to claude code, and is recommended, you can either use it via a [proxy server](https://github.com/khive-ai/lionagi/tree/main/cookbooks/claude_proxy) or directly with `query_cli` endpoint, provided you have already logged onto claude code cli in your terminal.
|
148
149
|
|
149
150
|
```python
|
@@ -211,7 +212,6 @@ Key features:
|
|
211
212
|
```
|
212
213
|
"lionagi[reader]" - Reader tool for any unstructured data and web pages
|
213
214
|
"lionagi[ollama]" - Ollama model support for local inference
|
214
|
-
"lionagi[claude-code]" - Claude code python SDK integration (cli endpoint does not require this)
|
215
215
|
"lionagi[rich]" - Rich output formatting for better console display
|
216
216
|
"lionagi[schema]" - Convert pydantic schema to make the Model class persistent
|
217
217
|
"lionagi[postgres]" - Postgres database support for storing and retrieving structured data
|
@@ -10,17 +10,3 @@ def check_async_postgres_available():
|
|
10
10
|
"This adapter requires postgres option to be installed. "
|
11
11
|
'Please install them using `uv pip install "lionagi[postgres]"`.'
|
12
12
|
)
|
13
|
-
|
14
|
-
|
15
|
-
def check_postgres_available():
|
16
|
-
try:
|
17
|
-
from pydapter.model_adapters.postgres_model import PostgresModelAdapter
|
18
|
-
from sqlalchemy import String
|
19
|
-
from sqlalchemy.orm import DeclarativeBase
|
20
|
-
|
21
|
-
return True
|
22
|
-
except Exception:
|
23
|
-
return ImportError(
|
24
|
-
"This adapter requires postgres option to be installed. "
|
25
|
-
'Please install them using `uv pip install "lionagi[postgres]"`.'
|
26
|
-
)
|
@@ -89,7 +89,14 @@ def save_chunks(
|
|
89
89
|
random_hash_digits=random_hash_digits,
|
90
90
|
)
|
91
91
|
save_to_file(
|
92
|
-
ln.json_dumps(
|
92
|
+
ln.json_dumps(
|
93
|
+
chunk,
|
94
|
+
pretty=True,
|
95
|
+
sort_keys=True,
|
96
|
+
append_newline=True,
|
97
|
+
deterministic_sets=True,
|
98
|
+
decimal_as_float=True,
|
99
|
+
),
|
93
100
|
directory=file_path.parent,
|
94
101
|
filename=file_path.name,
|
95
102
|
verbose=verbose,
|
@@ -4,7 +4,10 @@ from ._json_dump import (
|
|
4
4
|
DEFAULT_SERIALIZER,
|
5
5
|
DEFAULT_SERIALIZER_OPTION,
|
6
6
|
get_orjson_default,
|
7
|
+
json_dumpb,
|
7
8
|
json_dumps,
|
9
|
+
json_lines_iter,
|
10
|
+
make_options,
|
8
11
|
)
|
9
12
|
from ._list_call import lcall
|
10
13
|
from ._to_list import to_list
|
@@ -34,8 +37,10 @@ from .fuzzy import (
|
|
34
37
|
extract_json,
|
35
38
|
fuzzy_json,
|
36
39
|
fuzzy_match_keys,
|
40
|
+
fuzzy_validate_mapping,
|
37
41
|
fuzzy_validate_pydantic,
|
38
42
|
string_similarity,
|
43
|
+
to_dict,
|
39
44
|
)
|
40
45
|
from .types import is_sentinel, not_sentinel
|
41
46
|
|
@@ -47,6 +52,9 @@ __all__ = (
|
|
47
52
|
"DEFAULT_SERIALIZER_OPTION",
|
48
53
|
"get_orjson_default",
|
49
54
|
"json_dumps",
|
55
|
+
"make_options",
|
56
|
+
"json_dumpb",
|
57
|
+
"json_lines_iter",
|
50
58
|
"lcall",
|
51
59
|
"to_list",
|
52
60
|
"acreate_path",
|
@@ -74,4 +82,6 @@ __all__ = (
|
|
74
82
|
"string_similarity",
|
75
83
|
"is_sentinel",
|
76
84
|
"not_sentinel",
|
85
|
+
"to_dict",
|
86
|
+
"fuzzy_validate_mapping",
|
77
87
|
)
|
@@ -0,0 +1,348 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import datetime as dt
|
4
|
+
import decimal
|
5
|
+
import re
|
6
|
+
from collections.abc import Callable, Iterable, Mapping
|
7
|
+
from enum import Enum
|
8
|
+
from functools import lru_cache
|
9
|
+
from pathlib import Path
|
10
|
+
from textwrap import shorten
|
11
|
+
from typing import Any
|
12
|
+
from uuid import UUID
|
13
|
+
|
14
|
+
import orjson
|
15
|
+
|
16
|
+
__all__ = [
|
17
|
+
"get_orjson_default",
|
18
|
+
"DEFAULT_SERIALIZER",
|
19
|
+
"DEFAULT_SERIALIZER_OPTION",
|
20
|
+
"make_options",
|
21
|
+
"json_dumpb",
|
22
|
+
"json_dumps",
|
23
|
+
"json_lines_iter",
|
24
|
+
]
|
25
|
+
|
26
|
+
# Types orjson already serializes natively at C/Rust speed.
|
27
|
+
# (We only route them through default() when passthrough is requested.)
|
28
|
+
_NATIVE = (dt.datetime, dt.date, dt.time, UUID)
|
29
|
+
|
30
|
+
# --------- helpers ------------------------------------------------------------
|
31
|
+
|
32
|
+
_ADDR_PAT = re.compile(r" at 0x[0-9A-Fa-f]+")
|
33
|
+
|
34
|
+
|
35
|
+
def _clip(s: str, limit: int = 2048) -> str:
|
36
|
+
return shorten(s, width=limit, placeholder=f"...(+{len(s) - limit} chars)") # type: ignore[arg-type]
|
37
|
+
|
38
|
+
|
39
|
+
def _normalize_for_sorting(x: Any) -> str:
|
40
|
+
"""Normalize repr/str to remove process-specific addresses."""
|
41
|
+
s = str(x)
|
42
|
+
return _ADDR_PAT.sub(" at 0x?", s)
|
43
|
+
|
44
|
+
|
45
|
+
def _stable_sorted_iterable(o: Iterable[Any]) -> list[Any]:
|
46
|
+
"""
|
47
|
+
Deterministic ordering for sets (including mixed types).
|
48
|
+
Key: (class name, normalized str) avoids comparisons across unlike types
|
49
|
+
and removes memory address variance in default reprs.
|
50
|
+
"""
|
51
|
+
return sorted(
|
52
|
+
o, key=lambda x: (x.__class__.__name__, _normalize_for_sorting(x))
|
53
|
+
)
|
54
|
+
|
55
|
+
|
56
|
+
def _safe_exception_payload(ex: Exception) -> dict[str, str]:
|
57
|
+
return {"type": ex.__class__.__name__, "message": str(ex)}
|
58
|
+
|
59
|
+
|
60
|
+
def _default_serializers(
|
61
|
+
deterministic_sets: bool,
|
62
|
+
decimal_as_float: bool,
|
63
|
+
enum_as_name: bool,
|
64
|
+
passthrough_datetime: bool,
|
65
|
+
) -> dict[type, Callable[[Any], Any]]:
|
66
|
+
ser: dict[type, Callable[[Any], Any]] = {
|
67
|
+
Path: str,
|
68
|
+
decimal.Decimal: (float if decimal_as_float else str),
|
69
|
+
set: (_stable_sorted_iterable if deterministic_sets else list),
|
70
|
+
frozenset: (_stable_sorted_iterable if deterministic_sets else list),
|
71
|
+
}
|
72
|
+
if enum_as_name:
|
73
|
+
ser[Enum] = lambda e: e.name
|
74
|
+
# Only needed if you also set OPT_PASSTHROUGH_DATETIME via options.
|
75
|
+
if passthrough_datetime:
|
76
|
+
ser[dt.datetime] = lambda o: o.isoformat()
|
77
|
+
return ser
|
78
|
+
|
79
|
+
|
80
|
+
# --------- default() factory --------------------------------------------------
|
81
|
+
|
82
|
+
|
83
|
+
def get_orjson_default(
|
84
|
+
*,
|
85
|
+
order: list[type] | None = None,
|
86
|
+
additional: Mapping[type, Callable[[Any], Any]] | None = None,
|
87
|
+
extend_default: bool = True,
|
88
|
+
deterministic_sets: bool = False,
|
89
|
+
decimal_as_float: bool = False,
|
90
|
+
enum_as_name: bool = False,
|
91
|
+
passthrough_datetime: bool = False,
|
92
|
+
safe_fallback: bool = False,
|
93
|
+
fallback_clip: int = 2048,
|
94
|
+
) -> Callable[[Any], Any]:
|
95
|
+
"""
|
96
|
+
Build a fast, extensible `default=` callable for orjson.dumps.
|
97
|
+
|
98
|
+
- deterministic_sets: sort set/frozenset deterministically (slower).
|
99
|
+
- decimal_as_float: serialize Decimal as float (faster/smaller; precision loss).
|
100
|
+
- enum_as_name: serialize Enum as .name (else orjson uses .value by default).
|
101
|
+
- passthrough_datetime: if True, also pass OPT_PASSTHROUGH_DATETIME in options.
|
102
|
+
- safe_fallback: if True, unknown objects never raise (for logs);
|
103
|
+
Exceptions become a tiny dict; all else becomes clipped repr(str).
|
104
|
+
|
105
|
+
'order' and 'additional' preserve your override semantics.
|
106
|
+
"""
|
107
|
+
ser = _default_serializers(
|
108
|
+
deterministic_sets=deterministic_sets,
|
109
|
+
decimal_as_float=decimal_as_float,
|
110
|
+
enum_as_name=enum_as_name,
|
111
|
+
passthrough_datetime=passthrough_datetime,
|
112
|
+
)
|
113
|
+
if additional:
|
114
|
+
ser.update(additional)
|
115
|
+
|
116
|
+
base_order: list[type] = [Path, decimal.Decimal, set, frozenset]
|
117
|
+
if enum_as_name:
|
118
|
+
base_order.insert(0, Enum)
|
119
|
+
if passthrough_datetime:
|
120
|
+
base_order.insert(0, dt.datetime)
|
121
|
+
|
122
|
+
if order:
|
123
|
+
order_ = (
|
124
|
+
(base_order + [t for t in order if t not in base_order])
|
125
|
+
if extend_default
|
126
|
+
else list(order)
|
127
|
+
)
|
128
|
+
else:
|
129
|
+
order_ = base_order.copy()
|
130
|
+
|
131
|
+
if not passthrough_datetime:
|
132
|
+
# Avoid checks for types already on the orjson native fast path.
|
133
|
+
order_ = [t for t in order_ if t not in _NATIVE]
|
134
|
+
|
135
|
+
order_tuple = tuple(order_)
|
136
|
+
cache: dict[type, Callable[[Any], Any]] = {}
|
137
|
+
|
138
|
+
def default(obj: Any) -> Any:
|
139
|
+
typ = obj.__class__
|
140
|
+
func = cache.get(typ)
|
141
|
+
if func is None:
|
142
|
+
for T in order_tuple:
|
143
|
+
if issubclass(typ, T):
|
144
|
+
f = ser.get(T)
|
145
|
+
if f:
|
146
|
+
cache[typ] = f
|
147
|
+
func = f
|
148
|
+
break
|
149
|
+
else:
|
150
|
+
# Duck-typed support for common data holders
|
151
|
+
md = getattr(obj, "model_dump", None)
|
152
|
+
if callable(md):
|
153
|
+
try:
|
154
|
+
return md()
|
155
|
+
except Exception:
|
156
|
+
pass
|
157
|
+
dd = getattr(obj, "dict", None)
|
158
|
+
if callable(dd):
|
159
|
+
try:
|
160
|
+
return dd()
|
161
|
+
except Exception:
|
162
|
+
pass
|
163
|
+
if safe_fallback:
|
164
|
+
if isinstance(obj, Exception):
|
165
|
+
return _safe_exception_payload(obj)
|
166
|
+
return _clip(repr(obj), fallback_clip)
|
167
|
+
raise TypeError(
|
168
|
+
f"Type is not JSON serializable: {typ.__name__}"
|
169
|
+
)
|
170
|
+
return func(obj)
|
171
|
+
|
172
|
+
return default
|
173
|
+
|
174
|
+
|
175
|
+
@lru_cache(maxsize=128)
|
176
|
+
def _cached_default(
|
177
|
+
deterministic_sets: bool,
|
178
|
+
decimal_as_float: bool,
|
179
|
+
enum_as_name: bool,
|
180
|
+
passthrough_datetime: bool,
|
181
|
+
safe_fallback: bool,
|
182
|
+
fallback_clip: int,
|
183
|
+
):
|
184
|
+
return get_orjson_default(
|
185
|
+
deterministic_sets=deterministic_sets,
|
186
|
+
decimal_as_float=decimal_as_float,
|
187
|
+
enum_as_name=enum_as_name,
|
188
|
+
passthrough_datetime=passthrough_datetime,
|
189
|
+
safe_fallback=safe_fallback,
|
190
|
+
fallback_clip=fallback_clip,
|
191
|
+
)
|
192
|
+
|
193
|
+
|
194
|
+
# --------- defaults & options -------------------------------------------------
|
195
|
+
|
196
|
+
# Compact, no newline, no sorting: neutral default for most use-cases.
|
197
|
+
DEFAULT_SERIALIZER_OPTION = 0
|
198
|
+
DEFAULT_SERIALIZER = get_orjson_default()
|
199
|
+
|
200
|
+
|
201
|
+
def make_options(
|
202
|
+
*,
|
203
|
+
pretty: bool = False,
|
204
|
+
sort_keys: bool = False,
|
205
|
+
naive_utc: bool = False,
|
206
|
+
utc_z: bool = False,
|
207
|
+
append_newline: bool = False,
|
208
|
+
passthrough_datetime: bool = False,
|
209
|
+
allow_non_str_keys: bool = False,
|
210
|
+
) -> int:
|
211
|
+
"""
|
212
|
+
Compose orjson 'option' bit flags succinctly.
|
213
|
+
"""
|
214
|
+
opt = 0
|
215
|
+
if append_newline:
|
216
|
+
opt |= orjson.OPT_APPEND_NEWLINE
|
217
|
+
if pretty:
|
218
|
+
opt |= orjson.OPT_INDENT_2
|
219
|
+
if sort_keys:
|
220
|
+
opt |= orjson.OPT_SORT_KEYS
|
221
|
+
if naive_utc:
|
222
|
+
opt |= orjson.OPT_NAIVE_UTC
|
223
|
+
if utc_z:
|
224
|
+
opt |= orjson.OPT_UTC_Z
|
225
|
+
if passthrough_datetime:
|
226
|
+
opt |= orjson.OPT_PASSTHROUGH_DATETIME
|
227
|
+
if allow_non_str_keys:
|
228
|
+
opt |= orjson.OPT_NON_STR_KEYS
|
229
|
+
return opt
|
230
|
+
|
231
|
+
|
232
|
+
# --------- dump helpers -------------------------------------------------------
|
233
|
+
|
234
|
+
|
235
|
+
def json_dumpb(
|
236
|
+
obj: Any,
|
237
|
+
*,
|
238
|
+
pretty: bool = False,
|
239
|
+
sort_keys: bool = False,
|
240
|
+
naive_utc: bool = False,
|
241
|
+
utc_z: bool = False,
|
242
|
+
append_newline: bool = False,
|
243
|
+
allow_non_str_keys: bool = False,
|
244
|
+
deterministic_sets: bool = False,
|
245
|
+
decimal_as_float: bool = False,
|
246
|
+
enum_as_name: bool = False,
|
247
|
+
passthrough_datetime: bool = False,
|
248
|
+
safe_fallback: bool = False,
|
249
|
+
fallback_clip: int = 2048,
|
250
|
+
default: Callable[[Any], Any] | None = None,
|
251
|
+
options: int | None = None,
|
252
|
+
) -> bytes:
|
253
|
+
"""
|
254
|
+
Serialize to **bytes** (fast path). Prefer this in hot code.
|
255
|
+
|
256
|
+
Notes:
|
257
|
+
- If you set passthrough_datetime=True, you likely also want it in options.
|
258
|
+
- safe_fallback=True is recommended for LOGGING ONLY.
|
259
|
+
"""
|
260
|
+
if default is None:
|
261
|
+
default = _cached_default(
|
262
|
+
deterministic_sets=deterministic_sets,
|
263
|
+
decimal_as_float=decimal_as_float,
|
264
|
+
enum_as_name=enum_as_name,
|
265
|
+
passthrough_datetime=passthrough_datetime,
|
266
|
+
safe_fallback=safe_fallback,
|
267
|
+
fallback_clip=fallback_clip,
|
268
|
+
)
|
269
|
+
opt = (
|
270
|
+
options
|
271
|
+
if options is not None
|
272
|
+
else make_options(
|
273
|
+
pretty=pretty,
|
274
|
+
sort_keys=sort_keys,
|
275
|
+
naive_utc=naive_utc,
|
276
|
+
utc_z=utc_z,
|
277
|
+
append_newline=append_newline,
|
278
|
+
passthrough_datetime=passthrough_datetime,
|
279
|
+
allow_non_str_keys=allow_non_str_keys,
|
280
|
+
)
|
281
|
+
)
|
282
|
+
return orjson.dumps(obj, default=default, option=opt)
|
283
|
+
|
284
|
+
|
285
|
+
def json_dumps(
|
286
|
+
obj: Any,
|
287
|
+
/,
|
288
|
+
*,
|
289
|
+
decode: bool = True,
|
290
|
+
**kwargs: Any,
|
291
|
+
) -> str | bytes:
|
292
|
+
"""
|
293
|
+
Serialize to str by default (decode=True), or bytes if decode=False.
|
294
|
+
"""
|
295
|
+
out = json_dumpb(obj, **kwargs)
|
296
|
+
return out.decode("utf-8") if decode else out
|
297
|
+
|
298
|
+
|
299
|
+
# --------- streaming for very large outputs ----------------------------------
|
300
|
+
|
301
|
+
|
302
|
+
def json_lines_iter(
|
303
|
+
it: Iterable[Any],
|
304
|
+
*,
|
305
|
+
# default() configuration for each line
|
306
|
+
deterministic_sets: bool = False,
|
307
|
+
decimal_as_float: bool = False,
|
308
|
+
enum_as_name: bool = False,
|
309
|
+
passthrough_datetime: bool = False,
|
310
|
+
safe_fallback: bool = False,
|
311
|
+
fallback_clip: int = 2048,
|
312
|
+
# options
|
313
|
+
naive_utc: bool = False,
|
314
|
+
utc_z: bool = False,
|
315
|
+
allow_non_str_keys: bool = False,
|
316
|
+
# advanced
|
317
|
+
default: Callable[[Any], Any] | None = None,
|
318
|
+
options: int | None = None,
|
319
|
+
) -> Iterable[bytes]:
|
320
|
+
"""
|
321
|
+
Stream an iterable as **NDJSON** (one JSON object per line) in **bytes**.
|
322
|
+
|
323
|
+
Always ensures a trailing newline per line (OPT_APPEND_NEWLINE).
|
324
|
+
"""
|
325
|
+
if default is None:
|
326
|
+
default = _cached_default(
|
327
|
+
deterministic_sets=deterministic_sets,
|
328
|
+
decimal_as_float=decimal_as_float,
|
329
|
+
enum_as_name=enum_as_name,
|
330
|
+
passthrough_datetime=passthrough_datetime,
|
331
|
+
safe_fallback=safe_fallback,
|
332
|
+
fallback_clip=fallback_clip,
|
333
|
+
)
|
334
|
+
if options is None:
|
335
|
+
opt = make_options(
|
336
|
+
pretty=False,
|
337
|
+
sort_keys=False,
|
338
|
+
naive_utc=naive_utc,
|
339
|
+
utc_z=utc_z,
|
340
|
+
append_newline=True, # enforce newline for NDJSON
|
341
|
+
passthrough_datetime=passthrough_datetime,
|
342
|
+
allow_non_str_keys=allow_non_str_keys,
|
343
|
+
)
|
344
|
+
else:
|
345
|
+
opt = options | orjson.OPT_APPEND_NEWLINE
|
346
|
+
|
347
|
+
for item in it:
|
348
|
+
yield orjson.dumps(item, default=default, option=opt)
|
@@ -1,10 +1,12 @@
|
|
1
1
|
from ._extract_json import extract_json
|
2
2
|
from ._fuzzy_json import fuzzy_json
|
3
3
|
from ._fuzzy_match import FuzzyMatchKeysParams, fuzzy_match_keys
|
4
|
-
from ._fuzzy_validate import fuzzy_validate_pydantic
|
4
|
+
from ._fuzzy_validate import fuzzy_validate_mapping, fuzzy_validate_pydantic
|
5
5
|
from ._string_similarity import SIMILARITY_TYPE, string_similarity
|
6
|
+
from ._to_dict import to_dict
|
6
7
|
|
7
8
|
__all__ = (
|
9
|
+
"to_dict",
|
8
10
|
"fuzzy_json",
|
9
11
|
"fuzzy_match_keys",
|
10
12
|
"extract_json",
|
@@ -12,4 +14,5 @@ __all__ = (
|
|
12
14
|
"SIMILARITY_TYPE",
|
13
15
|
"fuzzy_validate_pydantic",
|
14
16
|
"FuzzyMatchKeysParams",
|
17
|
+
"fuzzy_validate_mapping",
|
15
18
|
)
|