lionagi 0.15.4__tar.gz → 0.15.6__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.15.4 → lionagi-0.15.6}/PKG-INFO +1 -1
- lionagi-0.15.6/lionagi/adapters/_utils.py +26 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/adapters/async_postgres_adapter.py +9 -9
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/adapters/postgres_model_adapter.py +10 -10
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/_async_call.py +7 -5
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/_models.py +65 -48
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/__init__.py +2 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/flow.py +13 -10
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/generic/pile.py +357 -211
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/generic/processor.py +1 -2
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/graph/node.py +24 -10
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/session/session.py +3 -1
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/utils.py +46 -1
- lionagi-0.15.6/lionagi/version.py +1 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/pyproject.toml +1 -1
- {lionagi-0.15.4 → lionagi-0.15.6}/uv.lock +1 -1
- lionagi-0.15.4/lionagi/version.py +0 -1
- {lionagi-0.15.4 → lionagi-0.15.6}/.coveragerc +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.env.example +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.github/FUNDING.yml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.github/dependabot.yml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.github/workflows/ci.yml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.github/workflows/docs.yml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.github/workflows/release.yml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.gitignore +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.pre-commit-config.yaml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/.python-version +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/CONTRIBUTING.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/LICENSE +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/README.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/assets/operation_builder.gif +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/001_branch_converse.ipynb +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/002_branch_interact.ipynb +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/003_branch_info.ipynb +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/004_conversation_patterns.ipynb +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/005_react_basics.ipynb +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/007_fan_out_in.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/claude_proxy/README.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/claude_proxy/claude_code_proxy.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/data/002_comedian.json +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/data/002_critic.json +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/data/006_lion_proof_ch2.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/cookbooks/using_claude_code.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/Makefile +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/_static/custom.css +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/_templates/layout.html +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/conf.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/discussions/anyio-migration.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/index.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/action.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/adapter.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/branch.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/concepts.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/element_id.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/event.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/form.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/graph.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/index.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/instruct.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/log.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/mail.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/message.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/models.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/pile.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/processor.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/progression.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/service.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/session.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/modules/utils.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/docs/tutorials/index.rst +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/_class_registry.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/_errors.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/_types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/adapters/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/config.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/action.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/base.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/code.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/file.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/reason.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/fields/research.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/concurrency.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/concat.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/concat_files.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/file/save.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/package/imports.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/parse.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/base.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/token_transform/types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/unstructured/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/unstructured/pdf_to_image.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/unstructured/read_image_to_base64.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/to_num.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/libs/validate/xml_parser.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/_hash.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/_list_call.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/_to_list.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/_types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/cancel.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/errors.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/patterns.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/primitives.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/resource_tracker.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/task.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/throttle.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/ln/concurrency/utils.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/models/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/models/field_model.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/models/model_params.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/models/note.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/models/operable_model.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/builder.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/manager.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/node.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/translate/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/operations/utils.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/action/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/action/manager.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/forms/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/operatives/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/operatives/operative.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/operatives/step.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/protocols/types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/py.typed +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/api_calling.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/endpoint.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/endpoint_config.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/header_factory.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/match_endpoint.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/anthropic_.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/claude_code_.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/exa_.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/oai_.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/ollama_.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/perplexity_.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/connections/providers/types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/hooks/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/hooks/_types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/hooks/_utils.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/hooks/hook_event.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/hooks/hook_registry.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/imodel.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/manager.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/rate_limited_processor.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/resilience.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/third_party/README.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/third_party/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/third_party/anthropic_models.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/third_party/claude_code.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/third_party/exa_models.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/third_party/openai_model_names.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/third_party/pplx_models.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/token_calculator.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/service/types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/session/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/session/branch.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/session/prompts.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/settings.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/tools/base.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/tools/memory/tools.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/lionagi/tools/types.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/main.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/scripts/README.md +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/scripts/concat.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/scripts/config.py +0 -0
- {lionagi-0.15.4 → lionagi-0.15.6}/scripts/update_openai_models.py +0 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
def check_async_postgres_available():
|
2
|
+
try:
|
3
|
+
import sqlalchemy as sa
|
4
|
+
from pydapter.extras.async_postgres_ import AsyncPostgresAdapter
|
5
|
+
from sqlalchemy.ext.asyncio import create_async_engine
|
6
|
+
|
7
|
+
return True
|
8
|
+
except Exception:
|
9
|
+
return ImportError(
|
10
|
+
"This adapter requires postgres option to be installed. "
|
11
|
+
'Please install them using `uv pip install "lionagi[postgres]"`.'
|
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
|
+
)
|
@@ -12,16 +12,16 @@ from typing import Any, ClassVar, TypeVar
|
|
12
12
|
|
13
13
|
from pydapter.exceptions import QueryError
|
14
14
|
|
15
|
-
|
16
|
-
import sqlalchemy as sa
|
17
|
-
from pydapter.extras.async_postgres_ import AsyncPostgresAdapter
|
18
|
-
from sqlalchemy.ext.asyncio import create_async_engine
|
19
|
-
except ImportError:
|
20
|
-
raise ImportError(
|
21
|
-
"This adapter requires postgres option to be installed. "
|
22
|
-
'Please install them using `uv pip install "lionagi[postgres]"`.'
|
23
|
-
)
|
15
|
+
from ._utils import check_async_postgres_available
|
24
16
|
|
17
|
+
_ASYNC_POSTGRES_AVAILABLE = check_async_postgres_available()
|
18
|
+
|
19
|
+
if isinstance(_ASYNC_POSTGRES_AVAILABLE, ImportError):
|
20
|
+
raise _ASYNC_POSTGRES_AVAILABLE
|
21
|
+
|
22
|
+
import sqlalchemy as sa
|
23
|
+
from pydapter.extras.async_postgres_ import AsyncPostgresAdapter
|
24
|
+
from sqlalchemy.ext.asyncio import create_async_engine
|
25
25
|
|
26
26
|
T = TypeVar("T")
|
27
27
|
|
@@ -7,19 +7,19 @@ PostgreSQL persistence for lionagi Nodes.
|
|
7
7
|
|
8
8
|
from __future__ import annotations
|
9
9
|
|
10
|
-
from typing import
|
10
|
+
from typing import Union, get_args, get_origin
|
11
11
|
|
12
12
|
from pydantic import BaseModel
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
from ._utils import check_postgres_available
|
15
|
+
|
16
|
+
_POSTGRES_AVAILABLE = check_postgres_available()
|
17
|
+
if isinstance(_POSTGRES_AVAILABLE, ImportError):
|
18
|
+
raise _POSTGRES_AVAILABLE
|
19
|
+
|
20
|
+
from pydapter.model_adapters.postgres_model import PostgresModelAdapter
|
21
|
+
from sqlalchemy import String
|
22
|
+
from sqlalchemy.orm import DeclarativeBase
|
23
23
|
|
24
24
|
|
25
25
|
class LionAGIPostgresAdapter(PostgresModelAdapter):
|
@@ -37,7 +37,7 @@ async def alcall(
|
|
37
37
|
retry_initial_deplay: float = 0,
|
38
38
|
retry_backoff: float = 1,
|
39
39
|
retry_default: Any = Unset,
|
40
|
-
retry_timeout: float =
|
40
|
+
retry_timeout: float = None,
|
41
41
|
retry_attempts: int = 0,
|
42
42
|
max_concurrent: int | None = None,
|
43
43
|
throttle_period: float | None = None,
|
@@ -277,8 +277,8 @@ class AlcallParams(Params):
|
|
277
277
|
async def __call__(
|
278
278
|
self, input_: list[Any], func: Callable[..., T], **kw
|
279
279
|
) -> list[T]:
|
280
|
-
|
281
|
-
return await
|
280
|
+
kwargs = {**self.default_kw(), **kw}
|
281
|
+
return await alcall(input_, func, **kwargs)
|
282
282
|
|
283
283
|
|
284
284
|
@dataclass(slots=True, init=False, frozen=True)
|
@@ -290,5 +290,7 @@ class BcallParams(AlcallParams):
|
|
290
290
|
async def __call__(
|
291
291
|
self, input_: list[Any], func: Callable[..., T], **kw
|
292
292
|
) -> list[T]:
|
293
|
-
|
294
|
-
|
293
|
+
kwargs = {**self.default_kw(), **kw}
|
294
|
+
func = self._func
|
295
|
+
|
296
|
+
return await func(input_, func, self.batch_size, **kwargs)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
from dataclasses import dataclass, field
|
2
|
-
from functools import partial
|
3
2
|
from typing import Any, ClassVar
|
4
3
|
|
5
4
|
from typing_extensions import override
|
@@ -9,8 +8,9 @@ from ._types import Undefined, Unset, is_sentinel
|
|
9
8
|
__all__ = ("Params", "DataClass")
|
10
9
|
|
11
10
|
|
12
|
-
|
13
|
-
|
11
|
+
@dataclass(slots=True, frozen=True, init=False)
|
12
|
+
class Params:
|
13
|
+
"""Base class for parameters used in various functions."""
|
14
14
|
|
15
15
|
_none_as_sentinel: ClassVar[bool] = False
|
16
16
|
"""If True, None is treated as a sentinel value."""
|
@@ -26,16 +26,6 @@ class _SentinelAware:
|
|
26
26
|
)
|
27
27
|
"""Class variable cache to store allowed keys for parameters."""
|
28
28
|
|
29
|
-
@classmethod
|
30
|
-
def allowed(cls) -> set[str]:
|
31
|
-
"""Return the keys of the parameters."""
|
32
|
-
if cls._allowed_keys:
|
33
|
-
return cls._allowed_keys
|
34
|
-
cls._allowed_keys = {
|
35
|
-
i for i in cls.__dataclass_fields__.keys() if not i.startswith("_")
|
36
|
-
}
|
37
|
-
return cls._allowed_keys
|
38
|
-
|
39
29
|
@classmethod
|
40
30
|
def _is_sentinel(cls, value: Any) -> bool:
|
41
31
|
"""Check if a value is a sentinel (Undefined or Unset)."""
|
@@ -47,23 +37,15 @@ class _SentinelAware:
|
|
47
37
|
"""Post-initialization to ensure all fields are set."""
|
48
38
|
self._validate()
|
49
39
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
return
|
59
|
-
|
60
|
-
|
61
|
-
@dataclass(slots=True, frozen=True, init=False)
|
62
|
-
class Params(_SentinelAware):
|
63
|
-
"""Base class for parameters used in various functions."""
|
64
|
-
|
65
|
-
_func: ClassVar[Any] = Unset
|
66
|
-
_particial_func: ClassVar[Any] = Unset
|
40
|
+
@classmethod
|
41
|
+
def allowed(cls) -> set[str]:
|
42
|
+
"""Return the keys of the parameters."""
|
43
|
+
if cls._allowed_keys:
|
44
|
+
return cls._allowed_keys
|
45
|
+
cls._allowed_keys = {
|
46
|
+
i for i in cls.__dataclass_fields__.keys() if not i.startswith("_")
|
47
|
+
}
|
48
|
+
return cls._allowed_keys
|
67
49
|
|
68
50
|
@override
|
69
51
|
def _validate(self) -> None:
|
@@ -79,38 +61,58 @@ class Params(_SentinelAware):
|
|
79
61
|
for k in self.allowed():
|
80
62
|
_validate_strict(k)
|
81
63
|
|
82
|
-
def
|
83
|
-
# if partial function is already cached, return it
|
84
|
-
if self._particial_func is not Unset:
|
85
|
-
return self._particial_func
|
86
|
-
|
87
|
-
# validate is there is a function to apply
|
88
|
-
if self._func is Unset:
|
89
|
-
raise ValueError("No function defined for partial application.")
|
90
|
-
if not callable(self._func):
|
91
|
-
raise TypeError(
|
92
|
-
f"Expected a callable, got {type(self._func).__name__}."
|
93
|
-
)
|
64
|
+
def default_kw(self) -> Any:
|
94
65
|
|
95
66
|
# create a partial function with the current parameters
|
96
67
|
dict_ = self.to_dict()
|
97
|
-
if not dict_:
|
98
|
-
self._particial_func = self._func
|
99
|
-
return self._func
|
100
68
|
|
101
69
|
# handle kwargs if present, handle both 'kwargs' and 'kw'
|
102
70
|
kw_ = {}
|
103
71
|
kw_.update(dict_.pop("kwargs", {}))
|
104
72
|
kw_.update(dict_.pop("kw", {}))
|
105
73
|
dict_.update(kw_)
|
106
|
-
|
107
|
-
|
74
|
+
return dict_
|
75
|
+
|
76
|
+
def to_dict(self) -> dict[str, str]:
|
77
|
+
data = {}
|
78
|
+
for k in self.allowed():
|
79
|
+
if not self._is_sentinel(v := getattr(self, k, Undefined)):
|
80
|
+
data[k] = v
|
81
|
+
return data
|
108
82
|
|
109
83
|
|
110
84
|
@dataclass(slots=True)
|
111
|
-
class DataClass
|
85
|
+
class DataClass:
|
112
86
|
"""A base class for data classes with strict parameter handling."""
|
113
87
|
|
88
|
+
_none_as_sentinel: ClassVar[bool] = False
|
89
|
+
"""If True, None is treated as a sentinel value."""
|
90
|
+
|
91
|
+
_strict: ClassVar[bool] = False
|
92
|
+
"""No sentinels allowed if strict is True."""
|
93
|
+
|
94
|
+
_prefill_unset: ClassVar[bool] = True
|
95
|
+
"""If True, unset fields are prefilled with Unset."""
|
96
|
+
|
97
|
+
_allowed_keys: ClassVar[set[str]] = field(
|
98
|
+
default=set(), init=False, repr=False
|
99
|
+
)
|
100
|
+
"""Class variable cache to store allowed keys for parameters."""
|
101
|
+
|
102
|
+
def __post_init__(self):
|
103
|
+
"""Post-initialization to ensure all fields are set."""
|
104
|
+
self._validate()
|
105
|
+
|
106
|
+
@classmethod
|
107
|
+
def allowed(cls) -> set[str]:
|
108
|
+
"""Return the keys of the parameters."""
|
109
|
+
if cls._allowed_keys:
|
110
|
+
return cls._allowed_keys
|
111
|
+
cls._allowed_keys = {
|
112
|
+
i for i in cls.__dataclass_fields__.keys() if not i.startswith("_")
|
113
|
+
}
|
114
|
+
return cls._allowed_keys
|
115
|
+
|
114
116
|
@override
|
115
117
|
def _validate(self) -> None:
|
116
118
|
def _validate_strict(k):
|
@@ -124,3 +126,18 @@ class DataClass(_SentinelAware):
|
|
124
126
|
|
125
127
|
for k in self.allowed():
|
126
128
|
_validate_strict(k)
|
129
|
+
|
130
|
+
def to_dict(self) -> dict[str, str]:
|
131
|
+
data = {}
|
132
|
+
print(self.allowed())
|
133
|
+
for k in type(self).allowed():
|
134
|
+
if not self._is_sentinel(v := getattr(self, k)):
|
135
|
+
data[k] = v
|
136
|
+
return data
|
137
|
+
|
138
|
+
@classmethod
|
139
|
+
def _is_sentinel(cls, value: Any) -> bool:
|
140
|
+
"""Check if a value is a sentinel (Undefined or Unset)."""
|
141
|
+
if value is None and cls._none_as_sentinel:
|
142
|
+
return True
|
143
|
+
return is_sentinel(value)
|
@@ -24,6 +24,7 @@ from .resource_tracker import (
|
|
24
24
|
from .task import TaskGroup, create_task_group
|
25
25
|
from .utils import is_coro_func
|
26
26
|
|
27
|
+
ConcurrencyEvent = Event
|
27
28
|
__all__ = (
|
28
29
|
"TaskGroup",
|
29
30
|
"create_task_group",
|
@@ -48,4 +49,5 @@ __all__ = (
|
|
48
49
|
"cleanup_check",
|
49
50
|
"get_global_tracker",
|
50
51
|
"is_coro_func",
|
52
|
+
"ConcurrencyEvent",
|
51
53
|
)
|
@@ -12,9 +12,7 @@ using Events for synchronization and CapacityLimiter for concurrency control.
|
|
12
12
|
import os
|
13
13
|
from typing import Any
|
14
14
|
|
15
|
-
from lionagi.ln
|
16
|
-
from lionagi.ln.concurrency.primitives import Event as ConcurrencyEvent
|
17
|
-
from lionagi.ln.concurrency.task import create_task_group
|
15
|
+
from lionagi.ln import AlcallParams, CapacityLimiter, ConcurrencyEvent
|
18
16
|
from lionagi.operations.node import Operation
|
19
17
|
from lionagi.protocols.types import EventStatus, Graph
|
20
18
|
from lionagi.session.branch import Branch
|
@@ -36,6 +34,7 @@ class DependencyAwareExecutor:
|
|
36
34
|
max_concurrent: int = 5,
|
37
35
|
verbose: bool = False,
|
38
36
|
default_branch: Branch | None = None,
|
37
|
+
alcall_params: AlcallParams | None = None,
|
39
38
|
):
|
40
39
|
"""Initialize the executor.
|
41
40
|
|
@@ -52,6 +51,7 @@ class DependencyAwareExecutor:
|
|
52
51
|
self.context = context or {}
|
53
52
|
self.max_concurrent = max_concurrent
|
54
53
|
self.verbose = verbose
|
54
|
+
self._alcall = alcall_params or AlcallParams()
|
55
55
|
self._default_branch = default_branch
|
56
56
|
|
57
57
|
# Track results and completion
|
@@ -92,11 +92,12 @@ class DependencyAwareExecutor:
|
|
92
92
|
)
|
93
93
|
limiter = CapacityLimiter(capacity)
|
94
94
|
|
95
|
-
|
96
|
-
|
97
|
-
for
|
98
|
-
|
99
|
-
|
95
|
+
nodes = [
|
96
|
+
n
|
97
|
+
for n in self.graph.internal_nodes.values()
|
98
|
+
if isinstance(n, Operation)
|
99
|
+
]
|
100
|
+
await self._alcall(nodes, self._execute_operation, limiter=limiter)
|
100
101
|
|
101
102
|
# Return results - only include actually completed operations
|
102
103
|
completed_ops = [
|
@@ -507,6 +508,7 @@ async def flow(
|
|
507
508
|
parallel: bool = True,
|
508
509
|
max_concurrent: int = None,
|
509
510
|
verbose: bool = False,
|
511
|
+
alcall_params: AlcallParams | None = None,
|
510
512
|
) -> dict[str, Any]:
|
511
513
|
"""Execute a graph using structured concurrency primitives.
|
512
514
|
|
@@ -521,6 +523,7 @@ async def flow(
|
|
521
523
|
parallel: Whether to execute independent operations in parallel
|
522
524
|
max_concurrent: Max concurrent operations (1 if not parallel)
|
523
525
|
verbose: Enable verbose logging
|
526
|
+
alcall_params: Parameters for async parallel call execution
|
524
527
|
|
525
528
|
Returns:
|
526
529
|
Execution results with completed operations and final context
|
@@ -528,8 +531,7 @@ async def flow(
|
|
528
531
|
|
529
532
|
# Handle concurrency limits
|
530
533
|
if not parallel:
|
531
|
-
max_concurrent = 1
|
532
|
-
# If max_concurrent is None, it means no limit
|
534
|
+
max_concurrent = 1
|
533
535
|
|
534
536
|
# Execute using the dependency-aware executor
|
535
537
|
executor = DependencyAwareExecutor(
|
@@ -539,6 +541,7 @@ async def flow(
|
|
539
541
|
max_concurrent=max_concurrent,
|
540
542
|
verbose=verbose,
|
541
543
|
default_branch=branch,
|
544
|
+
alcall_params=alcall_params,
|
542
545
|
)
|
543
546
|
|
544
547
|
return await executor.execute()
|