lionagi 0.14.8__tar.gz → 0.14.9__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.14.8 → lionagi-0.14.9}/PKG-INFO +2 -2
- {lionagi-0.14.8 → lionagi-0.14.9}/README.md +1 -1
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/007_fan_out_in.py +35 -7
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/claude_proxy/claude_code_proxy.py +2 -5
- lionagi-0.14.9/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +100 -0
- lionagi-0.14.9/lionagi/_errors.py +148 -0
- lionagi-0.14.9/lionagi/_types.py +3 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/config.py +3 -1
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/operable_model.py +8 -3
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/flow.py +0 -1
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/event.py +2 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/log.py +26 -10
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/operatives/step.py +1 -1
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/types.py +9 -1
- lionagi-0.14.8/lionagi/service/types.py → lionagi-0.14.9/lionagi/service/__init__.py +6 -4
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/api_calling.py +57 -2
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/endpoint_config.py +1 -1
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/header_factory.py +4 -2
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/match_endpoint.py +10 -10
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/anthropic_.py +5 -2
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/claude_code_.py +13 -17
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/claude_code_cli.py +51 -16
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/exa_.py +5 -3
- lionagi-0.14.9/lionagi/service/connections/providers/oai_.py +200 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/ollama_.py +38 -18
- lionagi-0.14.9/lionagi/service/connections/providers/perplexity_.py +51 -0
- lionagi-0.14.9/lionagi/service/connections/providers/types.py +30 -0
- lionagi-0.14.9/lionagi/service/hooks/__init__.py +25 -0
- lionagi-0.14.9/lionagi/service/hooks/_types.py +52 -0
- lionagi-0.14.9/lionagi/service/hooks/_utils.py +85 -0
- lionagi-0.14.9/lionagi/service/hooks/hook_event.py +67 -0
- lionagi-0.14.9/lionagi/service/hooks/hook_registry.py +221 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/imodel.py +120 -34
- lionagi-0.14.9/lionagi/service/third_party/claude_code.py +715 -0
- lionagi-0.14.9/lionagi/service/third_party/openai_model_names.py +198 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/pplx_models.py +16 -8
- lionagi-0.14.9/lionagi/service/types.py +41 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/branch.py +1 -4
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/base.py +1 -3
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/utils.py +8 -2
- lionagi-0.14.9/lionagi/version.py +1 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/pyproject.toml +1 -1
- lionagi-0.14.9/scripts/README.md +41 -0
- lionagi-0.14.9/scripts/update_openai_models.py +281 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/uv.lock +1 -1
- lionagi-0.14.8/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -217
- lionagi-0.14.8/lionagi/_errors.py +0 -39
- lionagi-0.14.8/lionagi/_types.py +0 -9
- lionagi-0.14.8/lionagi/service/__init__.py +0 -1
- lionagi-0.14.8/lionagi/service/connections/providers/_claude_code/__init__.py +0 -3
- lionagi-0.14.8/lionagi/service/connections/providers/_claude_code/models.py +0 -244
- lionagi-0.14.8/lionagi/service/connections/providers/_claude_code/stream_cli.py +0 -359
- lionagi-0.14.8/lionagi/service/connections/providers/oai_.py +0 -165
- lionagi-0.14.8/lionagi/service/connections/providers/perplexity_.py +0 -29
- lionagi-0.14.8/lionagi/service/third_party/openai_models.py +0 -18241
- lionagi-0.14.8/lionagi/version.py +0 -1
- lionagi-0.14.8/scripts/README.md +0 -15
- {lionagi-0.14.8 → lionagi-0.14.9}/.coveragerc +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.env.example +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.github/FUNDING.yml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.github/dependabot.yml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/ci.yml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/docs.yml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/release.yml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.gitignore +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.pre-commit-config.yaml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/.python-version +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/CONTRIBUTING.md +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/LICENSE +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/assets/operation_builder.gif +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/001_branch_converse.ipynb +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/002_branch_interact.ipynb +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/003_branch_info.ipynb +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/004_conversation_patterns.ipynb +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/005_react_basics.ipynb +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/claude_proxy/README.md +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/data/002_comedian.json +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/data/002_critic.json +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/data/006_lion_proof_ch2.md +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/using_claude_code.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/Makefile +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/_static/custom.css +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/_templates/layout.html +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/conf.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/discussions/anyio-migration.md +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/index.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/action.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/adapter.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/branch.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/concepts.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/element_id.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/event.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/form.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/graph.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/index.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/instruct.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/log.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/mail.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/message.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/models.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/pile.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/processor.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/progression.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/service.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/session.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/utils.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/index.rst +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/_class_registry.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/adapters/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/adapters/async_postgres_adapter.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/adapters/postgres_model_adapter.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/action.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/base.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/code.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/file.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/reason.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/research.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/cancel.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/errors.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/patterns.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/primitives.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/resource_tracker.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/task.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/concat.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/concat_files.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/save.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/hash/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/hash/hash_dict.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/hash/manager.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/imports.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/parse.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/base.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/types.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/field_model.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/model_params.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/note.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/builder.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/manager.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/node.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/translate/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/types.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/utils.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/manager.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/operatives/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/operatives/operative.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/py.typed +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/endpoint.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/manager.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/rate_limited_processor.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/resilience.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/README.md +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/anthropic_models.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/exa_models.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/token_calculator.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/prompts.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/session.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/settings.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/memory/tools.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/types.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/main.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/scripts/concat.py +0 -0
- {lionagi-0.14.8 → lionagi-0.14.9}/scripts/config.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.14.
|
3
|
+
Version: 0.14.9
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>, Liangbingyan Luo <llby_luo@outlook.com>
|
6
6
|
License: Apache License
|
@@ -272,7 +272,7 @@ Description-Content-Type: text/markdown
|
|
272
272
|
|
273
273
|
[Documentation](https://lion-agi.github.io/lionagi/) |
|
274
274
|
[Discord](https://discord.gg/JDj9ENhUE8) |
|
275
|
-
[PyPI](https://pypi.org/project/lionagi/)
|
275
|
+
[PyPI](https://pypi.org/project/lionagi/)
|
276
276
|
|
277
277
|
# LION - Language InterOperable Network
|
278
278
|
|
@@ -1,5 +1,6 @@
|
|
1
|
-
from lionagi import Branch, Builder, Session, iModel
|
1
|
+
from lionagi import Branch, Builder, Operation, Session, iModel
|
2
2
|
from lionagi.fields import LIST_INSTRUCT_FIELD_MODEL, Instruct
|
3
|
+
from lionagi.protocols.types import AssistantResponse
|
3
4
|
|
4
5
|
CC_WORKSPACE = ".khive/workspace"
|
5
6
|
|
@@ -15,7 +16,6 @@ def create_cc(
|
|
15
16
|
provider="claude_code",
|
16
17
|
endpoint="query_cli",
|
17
18
|
model=model,
|
18
|
-
api_key="dummy_api_key",
|
19
19
|
ws=f"{CC_WORKSPACE}/{subdir}",
|
20
20
|
verbose_output=verbose_output,
|
21
21
|
add_dir="../../../",
|
@@ -26,7 +26,7 @@ def create_cc(
|
|
26
26
|
|
27
27
|
|
28
28
|
prompt = """
|
29
|
-
Task: Investigate the codebase in the specified directory and provide a comprehensive overview.
|
29
|
+
Task: Quickly Investigate the codebase in the specified directory and provide a comprehensive overview.
|
30
30
|
|
31
31
|
---START
|
32
32
|
read into the specified dir, glance over the key components and pay attention to architecture,
|
@@ -86,16 +86,44 @@ async def main():
|
|
86
86
|
)
|
87
87
|
research_nodes.append(node)
|
88
88
|
|
89
|
-
|
89
|
+
costs = 0
|
90
|
+
|
91
|
+
def get_context(node_id):
|
92
|
+
nonlocal costs
|
93
|
+
g = builder.get_graph()
|
94
|
+
node: Operation = g.internal_nodes[node_id]
|
95
|
+
branch = session.get_branch(node.branch_id, None)
|
96
|
+
if (
|
97
|
+
branch
|
98
|
+
and len(branch.messages) > 0
|
99
|
+
and isinstance(msg := branch.messages[-1], AssistantResponse)
|
100
|
+
):
|
101
|
+
costs += msg.model_response.get("total_cost_usd") or 0
|
102
|
+
return f"""
|
103
|
+
Response: {msg.model_response.get("result") or "Not available"}
|
104
|
+
Summary: {msg.model_response.get("summary") or "Not available"}
|
105
|
+
""".strip()
|
106
|
+
|
107
|
+
await session.flow(builder.get_graph())
|
108
|
+
ctx = [get_context(i) for i in research_nodes]
|
109
|
+
|
110
|
+
synthesis = builder.add_operation(
|
90
111
|
"communicate",
|
91
|
-
|
112
|
+
depends_on=research_nodes,
|
92
113
|
branch=orc_branch,
|
93
114
|
instruction="Synthesize the information from the researcher branches.",
|
115
|
+
context=[i for i in ctx if i is not None],
|
116
|
+
)
|
117
|
+
|
118
|
+
result3 = await session.flow(builder.get_graph())
|
119
|
+
result_synthesis = result3["operation_results"][synthesis]
|
120
|
+
|
121
|
+
builder.visualize(
|
122
|
+
"LionAGI codebase investigation: fan-out fan-in pattern with Claude Code"
|
94
123
|
)
|
95
124
|
|
96
|
-
result2 = await session.flow(builder.get_graph())
|
97
|
-
result_synthesis = result2["operation_results"][synthesis]
|
98
125
|
print(result_synthesis)
|
126
|
+
print(f"Flow total cost: ${costs:.4f}")
|
99
127
|
|
100
128
|
except Exception as e:
|
101
129
|
print(f"Error: {e}")
|
@@ -47,12 +47,10 @@ app = FastAPI(
|
|
47
47
|
def check_claude_code():
|
48
48
|
"""Verify Claude Code CLI is installed and accessible"""
|
49
49
|
try:
|
50
|
-
from lionagi.service.
|
51
|
-
CLAUDE,
|
52
|
-
)
|
50
|
+
from lionagi.service.third_party.claude_code import CLAUDE_CLI
|
53
51
|
|
54
52
|
result = subprocess.run(
|
55
|
-
[
|
53
|
+
[CLAUDE_CLI, "--version"], capture_output=True, text=True
|
56
54
|
)
|
57
55
|
if result.returncode != 0:
|
58
56
|
raise RuntimeError(
|
@@ -75,7 +73,6 @@ async def health_check():
|
|
75
73
|
|
76
74
|
@app.post("/v1/query")
|
77
75
|
async def query(request: ClaudeCodeRequest):
|
78
|
-
|
79
76
|
endpoint = ClaudeCodeCLIEndpoint()
|
80
77
|
try:
|
81
78
|
return await endpoint._call(payload={"request": request}, headers={})
|
@@ -0,0 +1,100 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "code",
|
5
|
+
"execution_count": null,
|
6
|
+
"id": "d2ceb407",
|
7
|
+
"metadata": {},
|
8
|
+
"outputs": [],
|
9
|
+
"source": [
|
10
|
+
"from lionagi.service.connections.endpoint_config import EndpointConfig\n",
|
11
|
+
"from lionagi.service.imodel import Endpoint\n",
|
12
|
+
"from lionagi.service.connections.providers.claude_code_cli import (\n",
|
13
|
+
" ClaudeCodeRequest,\n",
|
14
|
+
")\n",
|
15
|
+
"\n",
|
16
|
+
"claude_code_config = EndpointConfig(\n",
|
17
|
+
" name=\"claude_code_cli_proxy\",\n",
|
18
|
+
" provider=\"claude_code\",\n",
|
19
|
+
" base_url=\"http://localhost:8000/v1\",\n",
|
20
|
+
" endpoint=\"query\",\n",
|
21
|
+
" api_key=\"dummy_api_key\",\n",
|
22
|
+
" kwargs={\"model\": \"sonnet\"},\n",
|
23
|
+
")\n",
|
24
|
+
"claude_code = Endpoint(claude_code_config)"
|
25
|
+
]
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"cell_type": "code",
|
29
|
+
"execution_count": null,
|
30
|
+
"id": "5fc216f4",
|
31
|
+
"metadata": {},
|
32
|
+
"outputs": [],
|
33
|
+
"source": [
|
34
|
+
"# prompt = \"reply in text only, Write a Python function to calculate the factorial of a number.\"\n",
|
35
|
+
"\n",
|
36
|
+
"# await claude_code.call(request=ClaudeCodeRequest(prompt=prompt))"
|
37
|
+
]
|
38
|
+
},
|
39
|
+
{
|
40
|
+
"cell_type": "code",
|
41
|
+
"execution_count": null,
|
42
|
+
"id": "4c173814",
|
43
|
+
"metadata": {},
|
44
|
+
"outputs": [],
|
45
|
+
"source": [
|
46
|
+
"from lionagi import iModel\n",
|
47
|
+
"\n",
|
48
|
+
"claude_code = iModel(endpoint=claude_code)"
|
49
|
+
]
|
50
|
+
},
|
51
|
+
{
|
52
|
+
"cell_type": "code",
|
53
|
+
"execution_count": null,
|
54
|
+
"id": "fe6dcca4",
|
55
|
+
"metadata": {},
|
56
|
+
"outputs": [],
|
57
|
+
"source": [
|
58
|
+
"result = await claude_code.invoke(\n",
|
59
|
+
" messages=[\n",
|
60
|
+
" {\n",
|
61
|
+
" \"role\": \"user\",\n",
|
62
|
+
" \"content\": \"reply in text only, Write a Python function to calculate the factorial of a number.\",\n",
|
63
|
+
" }\n",
|
64
|
+
" ]\n",
|
65
|
+
")"
|
66
|
+
]
|
67
|
+
},
|
68
|
+
{
|
69
|
+
"cell_type": "code",
|
70
|
+
"execution_count": null,
|
71
|
+
"id": "88db9e9a",
|
72
|
+
"metadata": {},
|
73
|
+
"outputs": [],
|
74
|
+
"source": [
|
75
|
+
"result.response"
|
76
|
+
]
|
77
|
+
}
|
78
|
+
],
|
79
|
+
"metadata": {
|
80
|
+
"kernelspec": {
|
81
|
+
"display_name": "lionagi",
|
82
|
+
"language": "python",
|
83
|
+
"name": "python3"
|
84
|
+
},
|
85
|
+
"language_info": {
|
86
|
+
"codemirror_mode": {
|
87
|
+
"name": "ipython",
|
88
|
+
"version": 3
|
89
|
+
},
|
90
|
+
"file_extension": ".py",
|
91
|
+
"mimetype": "text/x-python",
|
92
|
+
"name": "python",
|
93
|
+
"nbconvert_exporter": "python",
|
94
|
+
"pygments_lexer": "ipython3",
|
95
|
+
"version": "3.10.15"
|
96
|
+
}
|
97
|
+
},
|
98
|
+
"nbformat": 4,
|
99
|
+
"nbformat_minor": 5
|
100
|
+
}
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
from __future__ import annotations
|
6
|
+
|
7
|
+
from typing import Any, ClassVar
|
8
|
+
|
9
|
+
__all__ = (
|
10
|
+
"LionError",
|
11
|
+
"ValidationError",
|
12
|
+
"NotFoundError",
|
13
|
+
"ExistsError",
|
14
|
+
"ObservationError",
|
15
|
+
"ResourceError",
|
16
|
+
"RateLimitError",
|
17
|
+
"IDError",
|
18
|
+
"RelationError",
|
19
|
+
"OperationError",
|
20
|
+
"ExecutionError",
|
21
|
+
"ItemNotFoundError",
|
22
|
+
"ItemExistsError",
|
23
|
+
)
|
24
|
+
|
25
|
+
|
26
|
+
class LionError(Exception):
|
27
|
+
default_message: ClassVar[str] = "LionAGI error"
|
28
|
+
default_status_code: ClassVar[int] = 500
|
29
|
+
__slots__ = ("message", "details", "status_code")
|
30
|
+
|
31
|
+
def __init__(
|
32
|
+
self,
|
33
|
+
message: str | None = None,
|
34
|
+
*,
|
35
|
+
details: dict[str, Any] | None = None,
|
36
|
+
status_code: int | None = None,
|
37
|
+
cause: Exception | None = None,
|
38
|
+
):
|
39
|
+
super().__init__(message or self.default_message)
|
40
|
+
if cause:
|
41
|
+
self.__cause__ = cause # preserves traceback
|
42
|
+
self.message = message or self.default_message
|
43
|
+
self.details = details or {}
|
44
|
+
self.status_code = status_code or type(self).default_status_code
|
45
|
+
|
46
|
+
def to_dict(self, *, include_cause: bool = False) -> dict[str, Any]:
|
47
|
+
data = {
|
48
|
+
"error": self.__class__.__name__,
|
49
|
+
"message": self.message,
|
50
|
+
"status_code": self.status_code,
|
51
|
+
**({"details": self.details} if self.details else {}),
|
52
|
+
}
|
53
|
+
if include_cause and (cause := self.get_cause()):
|
54
|
+
data["cause"] = repr(cause)
|
55
|
+
return data
|
56
|
+
|
57
|
+
def get_cause(self) -> Exception | None:
|
58
|
+
"""Get the cause of this error, if any."""
|
59
|
+
return self.__cause__ if hasattr(self, "__cause__") else None
|
60
|
+
|
61
|
+
@classmethod
|
62
|
+
def from_value(
|
63
|
+
cls,
|
64
|
+
value: Any,
|
65
|
+
*,
|
66
|
+
expected: str | None = None,
|
67
|
+
message: str | None = None,
|
68
|
+
cause: Exception | None = None,
|
69
|
+
**extra: Any,
|
70
|
+
):
|
71
|
+
"""Create a ValidationError from a value with optional expected type and message."""
|
72
|
+
details = {
|
73
|
+
"value": value,
|
74
|
+
"type": type(value).__name__,
|
75
|
+
**({"expected": expected} if expected else {}),
|
76
|
+
**extra,
|
77
|
+
}
|
78
|
+
return cls(message=message, details=details, cause=cause)
|
79
|
+
|
80
|
+
|
81
|
+
class ValidationError(LionError):
|
82
|
+
"""Exception raised when validation fails."""
|
83
|
+
|
84
|
+
default_message = "Validation failed"
|
85
|
+
default_status_code = 422
|
86
|
+
__slots__ = ()
|
87
|
+
|
88
|
+
|
89
|
+
class NotFoundError(LionError):
|
90
|
+
"""Exception raised when an item is not found."""
|
91
|
+
|
92
|
+
default_message = "Item not found"
|
93
|
+
default_status_code = 404
|
94
|
+
__slots__ = ()
|
95
|
+
|
96
|
+
|
97
|
+
class ExistsError(LionError):
|
98
|
+
"""Exception raised when an item already exists."""
|
99
|
+
|
100
|
+
default_message = "Item already exists"
|
101
|
+
default_status_code = 409
|
102
|
+
__slots__ = ()
|
103
|
+
|
104
|
+
|
105
|
+
class ObservationError(LionError):
|
106
|
+
"""Exception raised when an observation fails."""
|
107
|
+
|
108
|
+
default_message = "Observation failed"
|
109
|
+
default_status_code = 500
|
110
|
+
__slots__ = ()
|
111
|
+
|
112
|
+
|
113
|
+
class ResourceError(LionError):
|
114
|
+
"""Exception raised when resource access fails."""
|
115
|
+
|
116
|
+
default_message = "Resource error"
|
117
|
+
default_status_code = 429
|
118
|
+
__slots__ = ()
|
119
|
+
|
120
|
+
|
121
|
+
class RateLimitError(LionError):
|
122
|
+
__slots__ = ("retry_after",) # one extra attr
|
123
|
+
default_message = "Rate limit exceeded"
|
124
|
+
default_status_code = 429
|
125
|
+
|
126
|
+
def __init__(self, retry_after: float, **kw):
|
127
|
+
super().__init__(**kw)
|
128
|
+
object.__setattr__(self, "retry_after", retry_after)
|
129
|
+
|
130
|
+
|
131
|
+
class IDError(LionError):
|
132
|
+
pass
|
133
|
+
|
134
|
+
|
135
|
+
class RelationError(LionError):
|
136
|
+
pass
|
137
|
+
|
138
|
+
|
139
|
+
class OperationError(LionError):
|
140
|
+
pass
|
141
|
+
|
142
|
+
|
143
|
+
class ExecutionError(LionError):
|
144
|
+
pass
|
145
|
+
|
146
|
+
|
147
|
+
ItemNotFoundError = NotFoundError
|
148
|
+
ItemExistsError = ExistsError
|
@@ -63,12 +63,14 @@ class AppSettings(BaseSettings, frozen=True):
|
|
63
63
|
GROQ_API_KEY: SecretStr | None = None
|
64
64
|
ANTHROPIC_API_KEY: SecretStr | None = None
|
65
65
|
|
66
|
+
OPENAI_DEFAULT_MODEL: str = "gpt-4.1-mini"
|
67
|
+
|
66
68
|
# defaults models
|
67
69
|
LIONAGI_EMBEDDING_PROVIDER: str = "openai"
|
68
70
|
LIONAGI_EMBEDDING_MODEL: str = "text-embedding-3-small"
|
69
71
|
|
70
72
|
LIONAGI_CHAT_PROVIDER: str = "openai"
|
71
|
-
LIONAGI_CHAT_MODEL: str = "gpt-4.1-
|
73
|
+
LIONAGI_CHAT_MODEL: str = "gpt-4.1-mini"
|
72
74
|
|
73
75
|
# default storage
|
74
76
|
LIONAGI_AUTO_STORE_EVENT: bool = False
|
@@ -263,7 +263,7 @@ class OperableModel(HashableModel):
|
|
263
263
|
Dictionary mapping field names to FieldInfo objects,
|
264
264
|
excluding the extra_fields field itself
|
265
265
|
"""
|
266
|
-
a = {**self.model_fields, **self.extra_fields}
|
266
|
+
a = {**type(self).model_fields, **self.extra_fields}
|
267
267
|
a.pop("extra_fields", None)
|
268
268
|
a.pop("extra_field_models", None) # Exclude internal field tracking
|
269
269
|
return a
|
@@ -358,7 +358,12 @@ class OperableModel(HashableModel):
|
|
358
358
|
for k, v in kwargs.items():
|
359
359
|
self.field_setattr(field_name, k, v)
|
360
360
|
else:
|
361
|
-
|
361
|
+
_kwargs = {
|
362
|
+
k: v
|
363
|
+
for k, v in kwargs.items()
|
364
|
+
if k not in ("name", "annotation", "validator_kwargs")
|
365
|
+
}
|
366
|
+
self.extra_fields[field_name] = Field(**_kwargs)
|
362
367
|
|
363
368
|
# Handle no explicit defined field
|
364
369
|
if not field_obj and not kwargs:
|
@@ -478,7 +483,7 @@ class OperableModel(HashableModel):
|
|
478
483
|
raise KeyError(f"Field {field_name} not found in object fields.")
|
479
484
|
|
480
485
|
if str(attr).strip("s").lower() == "annotation":
|
481
|
-
return self.model_fields[field_name].annotation
|
486
|
+
return type(self).model_fields[field_name].annotation
|
482
487
|
|
483
488
|
field_obj = all_fields[field_name]
|
484
489
|
|
@@ -349,7 +349,6 @@ class DependencyAwareExecutor:
|
|
349
349
|
and branch.metadata
|
350
350
|
and branch.metadata.get("pending_context_inheritance")
|
351
351
|
):
|
352
|
-
|
353
352
|
primary_dep_id = branch.metadata.get("inherit_from_operation")
|
354
353
|
if primary_dep_id and primary_dep_id in self.results:
|
355
354
|
# Find the primary dependency's branch
|
@@ -13,18 +13,19 @@ from pydantic import BaseModel, Field, PrivateAttr, field_validator
|
|
13
13
|
|
14
14
|
from lionagi.utils import create_path, to_dict
|
15
15
|
|
16
|
-
from .._concepts import Manager
|
17
16
|
from .element import Element
|
18
17
|
from .pile import Pile
|
19
18
|
|
20
19
|
__all__ = (
|
20
|
+
"DataLoggerConfig",
|
21
21
|
"LogManagerConfig",
|
22
22
|
"Log",
|
23
|
+
"DataLogger",
|
23
24
|
"LogManager",
|
24
25
|
)
|
25
26
|
|
26
27
|
|
27
|
-
class
|
28
|
+
class DataLoggerConfig(BaseModel):
|
28
29
|
persist_dir: str | Path = "./data/logs"
|
29
30
|
subfolder: str | None = None
|
30
31
|
file_prefix: str | None = None
|
@@ -101,7 +102,7 @@ class Log(Element):
|
|
101
102
|
return cls(content=content)
|
102
103
|
|
103
104
|
|
104
|
-
class
|
105
|
+
class DataLogger:
|
105
106
|
"""
|
106
107
|
Manages a collection of logs, optionally auto-dumping them
|
107
108
|
to CSV or JSON when capacity is reached or at program exit.
|
@@ -111,7 +112,7 @@ class LogManager(Manager):
|
|
111
112
|
self,
|
112
113
|
*,
|
113
114
|
logs: Any = None,
|
114
|
-
_config:
|
115
|
+
_config: DataLoggerConfig = None,
|
115
116
|
**kwargs,
|
116
117
|
):
|
117
118
|
"""
|
@@ -128,7 +129,7 @@ class LogManager(Manager):
|
|
128
129
|
clear_after_dump: Whether to clear logs after saving.
|
129
130
|
"""
|
130
131
|
if _config is None:
|
131
|
-
_config =
|
132
|
+
_config = DataLoggerConfig(**kwargs)
|
132
133
|
|
133
134
|
if isinstance(logs, dict):
|
134
135
|
self.logs = Pile.from_dict(logs)
|
@@ -188,8 +189,15 @@ class LogManager(Manager):
|
|
188
189
|
if do_clear:
|
189
190
|
self.logs.clear()
|
190
191
|
except Exception as e:
|
191
|
-
|
192
|
-
|
192
|
+
# Check if it's a JSON serialization error with complex objects
|
193
|
+
if "JSON serializable" in str(e):
|
194
|
+
logging.debug(f"Could not serialize logs to JSON: {e}")
|
195
|
+
# Don't raise for JSON serialization issues during dumps
|
196
|
+
if clear is not False:
|
197
|
+
self.logs.clear() # Still clear if requested
|
198
|
+
else:
|
199
|
+
logging.error(f"Failed to dump logs: {e}")
|
200
|
+
raise
|
193
201
|
|
194
202
|
async def adump(
|
195
203
|
self,
|
@@ -222,16 +230,24 @@ class LogManager(Manager):
|
|
222
230
|
try:
|
223
231
|
self.dump(clear=self._config.clear_after_dump)
|
224
232
|
except Exception as e:
|
225
|
-
|
233
|
+
# Only log debug level for JSON serialization errors during exit
|
234
|
+
# These are non-critical and often occur with complex objects
|
235
|
+
if "JSON serializable" in str(e):
|
236
|
+
logging.debug(f"Could not serialize logs to JSON: {e}")
|
237
|
+
else:
|
238
|
+
logging.error(f"Failed to save logs on exit: {e}")
|
226
239
|
|
227
240
|
@classmethod
|
228
241
|
def from_config(
|
229
|
-
cls, config:
|
230
|
-
) ->
|
242
|
+
cls, config: DataLoggerConfig, logs: Any = None
|
243
|
+
) -> DataLogger:
|
231
244
|
"""
|
232
245
|
Construct a LogManager from a LogManagerConfig.
|
233
246
|
"""
|
234
247
|
return cls(_config=config, logs=logs)
|
235
248
|
|
236
249
|
|
250
|
+
LogManagerConfig = DataLoggerConfig
|
251
|
+
LogManager = DataLogger
|
252
|
+
|
237
253
|
# File: lionagi/protocols/generic/log.py
|
@@ -168,7 +168,7 @@ class Step:
|
|
168
168
|
ACTION_REQUESTS_FIELD,
|
169
169
|
]
|
170
170
|
)
|
171
|
-
if "reason" in operative.response_model.model_fields:
|
171
|
+
if "reason" in type(operative.response_model).model_fields:
|
172
172
|
field_models.extend([REASON_FIELD])
|
173
173
|
|
174
174
|
operative = Step._create_response_type(
|
@@ -18,7 +18,13 @@ from .forms.flow import FlowDefinition, FlowStep
|
|
18
18
|
from .forms.report import BaseForm, Form, Report
|
19
19
|
from .generic.element import ID, Element, IDError, IDType, validate_order
|
20
20
|
from .generic.event import Event, EventStatus, Execution
|
21
|
-
from .generic.log import
|
21
|
+
from .generic.log import (
|
22
|
+
DataLogger,
|
23
|
+
DataLoggerConfig,
|
24
|
+
Log,
|
25
|
+
LogManager,
|
26
|
+
LogManagerConfig,
|
27
|
+
)
|
22
28
|
from .generic.pile import Pile, to_list_type
|
23
29
|
from .generic.processor import Executor, Processor
|
24
30
|
from .generic.progression import Progression, prog
|
@@ -107,4 +113,6 @@ __all__ = (
|
|
107
113
|
"FunctionCalling",
|
108
114
|
"ToolRef",
|
109
115
|
"MailManager",
|
116
|
+
"DataLogger",
|
117
|
+
"DataLoggerConfig",
|
110
118
|
)
|
@@ -1,9 +1,6 @@
|
|
1
|
-
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
-
#
|
3
|
-
# SPDX-License-Identifier: Apache-2.0
|
4
|
-
|
5
1
|
from .connections.api_calling import APICalling
|
6
2
|
from .connections.endpoint import Endpoint, EndpointConfig
|
3
|
+
from .hooks import *
|
7
4
|
from .imodel import iModel
|
8
5
|
from .manager import iModelManager
|
9
6
|
from .rate_limited_processor import RateLimitedAPIExecutor
|
@@ -17,4 +14,9 @@ __all__ = (
|
|
17
14
|
"TokenCalculator",
|
18
15
|
"iModel",
|
19
16
|
"iModelManager",
|
17
|
+
"HookEventTypes",
|
18
|
+
"HookDict",
|
19
|
+
"AssosiatedEventInfo",
|
20
|
+
"HookEvent",
|
21
|
+
"HookRegistry",
|
20
22
|
)
|