lionagi 0.12.8__tar.gz → 0.13.0__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.12.8 → lionagi-0.13.0}/PKG-INFO +3 -3
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -9
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/endpoint_config.py +7 -3
- lionagi-0.13.0/lionagi/service/connections/providers/claude_code_.py +311 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/imodel.py +9 -4
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/anthropic_models.py +1 -1
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/token_calculator.py +1 -1
- lionagi-0.13.0/lionagi/version.py +1 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/pyproject.toml +2 -2
- {lionagi-0.12.8 → lionagi-0.13.0}/uv.lock +5 -5
- lionagi-0.12.8/lionagi/service/connections/providers/claude_code_.py +0 -206
- lionagi-0.12.8/lionagi/version.py +0 -1
- {lionagi-0.12.8 → lionagi-0.13.0}/.coveragerc +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.env.example +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.github/FUNDING.yml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.github/dependabot.yml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/ci.yml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/docs.yml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.github/workflows/release.yml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.gitignore +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.pre-commit-config.yaml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/.python-version +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/CONTRIBUTING.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/LICENSE +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/README.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/cookbooks/ch01_get_started.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/cookbooks/ch02_concepts.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/Makefile +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/_static/custom.css +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/_templates/layout.html +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/conf.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/index.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/action.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/adapter.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/branch.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/concepts.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/element_id.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/event.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/form.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/graph.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/index.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/instruct.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/log.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/mail.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/message.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/models.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/pile.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/processor.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/progression.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/service.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/session.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/modules/utils.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/docs/tutorials/index.rst +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/_class_registry.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/_errors.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/_types.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/config.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/action.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/base.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/code.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/file.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/reason.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/fields/research.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/concat.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/concat_files.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/file/save.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/imports.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/parse.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/base.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/token_transform/types.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/field_model.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/model_params.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/note.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/operable_model.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/manager.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/translate/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/types.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/operations/utils.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/manager.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/operatives/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/operatives/operative.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/operatives/step.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/protocols/types.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/py.typed +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/api_calling.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/endpoint.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/header_factory.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/match_endpoint.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/anthropic_.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/exa_.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/oai_.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/ollama_.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/connections/providers/perplexity_.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/manager.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/rate_limited_processor.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/resilience.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/README.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/exa_models.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/openai_models.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/third_party/pplx_models.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/service/types.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/branch.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/prompts.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/session/session.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/settings.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/base.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/memory/tools.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/tools/types.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/lionagi/utils.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/main.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/scripts/README.md +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/scripts/concat.py +0 -0
- {lionagi-0.12.8 → lionagi-0.13.0}/scripts/config.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.13.0
|
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
|
@@ -230,11 +230,11 @@ Requires-Dist: python-dotenv>=1.1.0
|
|
230
230
|
Requires-Dist: tiktoken>=0.8.0
|
231
231
|
Requires-Dist: toml>=0.9.0
|
232
232
|
Provides-Extra: all
|
233
|
-
Requires-Dist: claude-code-sdk>=0.0.
|
233
|
+
Requires-Dist: claude-code-sdk>=0.0.14; extra == 'all'
|
234
234
|
Requires-Dist: docling>=2.15.1; extra == 'all'
|
235
235
|
Requires-Dist: ollama>=0.5.0; extra == 'all'
|
236
236
|
Provides-Extra: claude-code
|
237
|
-
Requires-Dist: claude-code-sdk>=0.0.
|
237
|
+
Requires-Dist: claude-code-sdk>=0.0.14; extra == 'claude-code'
|
238
238
|
Provides-Extra: docs
|
239
239
|
Requires-Dist: furo>=2024.8.6; extra == 'docs'
|
240
240
|
Requires-Dist: sphinx-autobuild>=2024.10.3; extra == 'docs'
|
@@ -151,9 +151,6 @@ def load_pydantic_model_from_schema(
|
|
151
151
|
base_class="pydantic.BaseModel",
|
152
152
|
)
|
153
153
|
except Exception as e:
|
154
|
-
# Optional: Print generated code on failure for debugging
|
155
|
-
# if output_file.exists():
|
156
|
-
# print(f"--- Generated Code (Error) ---\n{output_file.read_text()}\n--------------------------")
|
157
154
|
error_msg = "Failed to generate model code"
|
158
155
|
raise RuntimeError(error_msg) from e
|
159
156
|
|
@@ -175,15 +172,9 @@ def load_pydantic_model_from_schema(
|
|
175
172
|
# --- 3. Import the Generated Module Dynamically ---
|
176
173
|
try:
|
177
174
|
spec, generated_module = get_modules()
|
178
|
-
# Important: Make pydantic available within the executed module's globals
|
179
|
-
# if it's not explicitly imported by the generated code for some reason.
|
180
|
-
# Usually, datamodel-code-generator handles imports well.
|
181
|
-
# generated_module.__dict__['BaseModel'] = BaseModel
|
182
175
|
spec.loader.exec_module(generated_module)
|
183
176
|
|
184
177
|
except Exception as e:
|
185
|
-
# Optional: Print generated code on failure for debugging
|
186
|
-
# print(f"--- Generated Code (Import Error) ---\n{output_file.read_text()}\n--------------------------")
|
187
178
|
error_msg = f"Failed to load generated module ({output_file})"
|
188
179
|
raise RuntimeError(error_msg) from e
|
189
180
|
|
@@ -53,7 +53,6 @@ class EndpointConfig(BaseModel):
|
|
53
53
|
|
54
54
|
@model_validator(mode="after")
|
55
55
|
def _validate_api_key(self):
|
56
|
-
|
57
56
|
if self.api_key is not None:
|
58
57
|
if isinstance(self.api_key, SecretStr):
|
59
58
|
self._api_key = self.api_key.get_secret_value()
|
@@ -61,6 +60,9 @@ class EndpointConfig(BaseModel):
|
|
61
60
|
# Skip settings lookup for ollama special case
|
62
61
|
if self.provider == "ollama" and self.api_key == "ollama_key":
|
63
62
|
self._api_key = "ollama_key"
|
63
|
+
if self.provider == "claude_code":
|
64
|
+
self._api_key = "dummy"
|
65
|
+
|
64
66
|
else:
|
65
67
|
from lionagi.config import settings
|
66
68
|
|
@@ -89,9 +91,11 @@ class EndpointConfig(BaseModel):
|
|
89
91
|
if isinstance(v, BaseModel):
|
90
92
|
return v.__class__
|
91
93
|
if isinstance(v, dict | str):
|
92
|
-
from lionagi.libs.schema import
|
94
|
+
from lionagi.libs.schema.load_pydantic_model_from_schema import (
|
95
|
+
load_pydantic_model_from_schema,
|
96
|
+
)
|
93
97
|
|
94
|
-
return
|
98
|
+
return load_pydantic_model_from_schema(v)
|
95
99
|
except Exception as e:
|
96
100
|
raise ValueError("Invalid request options") from e
|
97
101
|
raise ValueError(
|
@@ -0,0 +1,311 @@
|
|
1
|
+
# Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
from __future__ import annotations
|
6
|
+
|
7
|
+
import json
|
8
|
+
from pathlib import Path
|
9
|
+
from typing import Any, Literal
|
10
|
+
|
11
|
+
from claude_code_sdk import ClaudeCodeOptions
|
12
|
+
from claude_code_sdk import query as sdk_query
|
13
|
+
from pydantic import BaseModel, Field, field_validator, model_validator
|
14
|
+
|
15
|
+
from lionagi.service.connections.endpoint import Endpoint
|
16
|
+
from lionagi.service.connections.endpoint_config import EndpointConfig
|
17
|
+
from lionagi.utils import to_dict
|
18
|
+
|
19
|
+
# --------------------------------------------------------------------------- constants
|
20
|
+
ClaudePermission = Literal[
|
21
|
+
"default",
|
22
|
+
"acceptEdits",
|
23
|
+
"bypassPermissions",
|
24
|
+
"dangerously-skip-permissions",
|
25
|
+
]
|
26
|
+
|
27
|
+
CLAUDE_CODE_OPTION_PARAMS = {
|
28
|
+
"allowed_tools",
|
29
|
+
"max_thinking_tokens",
|
30
|
+
"mcp_tools",
|
31
|
+
"mcp_servers",
|
32
|
+
"permission_mode",
|
33
|
+
"continue_conversation",
|
34
|
+
"resume",
|
35
|
+
"max_turns",
|
36
|
+
"disallowed_tools",
|
37
|
+
"model",
|
38
|
+
"permission_prompt_tool_name",
|
39
|
+
"cwd",
|
40
|
+
"system_prompt",
|
41
|
+
"append_system_prompt",
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
# --------------------------------------------------------------------------- request model
|
46
|
+
class ClaudeCodeRequest(BaseModel):
|
47
|
+
# -- conversational bits -------------------------------------------------
|
48
|
+
prompt: str = Field(description="The prompt for Claude Code")
|
49
|
+
system_prompt: str | None = None
|
50
|
+
append_system_prompt: str | None = None
|
51
|
+
max_turns: int | None = None
|
52
|
+
continue_conversation: bool = False
|
53
|
+
resume: str | None = None
|
54
|
+
|
55
|
+
# -- repo / workspace ----------------------------------------------------
|
56
|
+
repo: Path = Field(default_factory=Path.cwd, exclude=True)
|
57
|
+
ws: str | None = None # sub-directory under repo
|
58
|
+
add_dir: str | None = None # extra read-only mount
|
59
|
+
allowed_tools: list[str] | None = None
|
60
|
+
|
61
|
+
# -- runtime & safety ----------------------------------------------------
|
62
|
+
model: Literal["sonnet", "opus"] | str | None = "sonnet"
|
63
|
+
max_thinking_tokens: int | None = None
|
64
|
+
mcp_tools: list[str] = Field(default_factory=list)
|
65
|
+
mcp_servers: dict[str, Any] = Field(default_factory=dict)
|
66
|
+
permission_mode: ClaudePermission | None = None
|
67
|
+
permission_prompt_tool_name: str | None = None
|
68
|
+
disallowed_tools: list[str] = Field(default_factory=list)
|
69
|
+
|
70
|
+
# ------------------------ validators & helpers --------------------------
|
71
|
+
@field_validator("permission_mode", mode="before")
|
72
|
+
def _norm_perm(cls, v):
|
73
|
+
if v in {
|
74
|
+
"dangerously-skip-permissions",
|
75
|
+
"--dangerously-skip-permissions",
|
76
|
+
}:
|
77
|
+
return "bypassPermissions"
|
78
|
+
return v
|
79
|
+
|
80
|
+
# Workspace path derived from repo + ws
|
81
|
+
def cwd(self) -> Path:
|
82
|
+
if not self.ws:
|
83
|
+
return self.repo
|
84
|
+
|
85
|
+
# Convert to Path object for proper validation
|
86
|
+
ws_path = Path(self.ws)
|
87
|
+
|
88
|
+
# Check for absolute paths or directory traversal attempts
|
89
|
+
if ws_path.is_absolute():
|
90
|
+
raise ValueError(
|
91
|
+
f"Workspace path must be relative, got absolute: {self.ws}"
|
92
|
+
)
|
93
|
+
|
94
|
+
if ".." in ws_path.parts:
|
95
|
+
raise ValueError(
|
96
|
+
f"Directory traversal detected in workspace path: {self.ws}"
|
97
|
+
)
|
98
|
+
|
99
|
+
# Resolve paths to handle symlinks and normalize
|
100
|
+
repo_resolved = self.repo.resolve()
|
101
|
+
result = (self.repo / ws_path).resolve()
|
102
|
+
|
103
|
+
# Ensure the resolved path is within the repository bounds
|
104
|
+
try:
|
105
|
+
result.relative_to(repo_resolved)
|
106
|
+
except ValueError:
|
107
|
+
raise ValueError(
|
108
|
+
f"Workspace path escapes repository bounds. "
|
109
|
+
f"Repository: {repo_resolved}, Workspace: {result}"
|
110
|
+
)
|
111
|
+
|
112
|
+
return result
|
113
|
+
|
114
|
+
@model_validator(mode="after")
|
115
|
+
def _check_perm_workspace(self):
|
116
|
+
if self.permission_mode == "bypassPermissions":
|
117
|
+
# Use secure path validation with resolved paths
|
118
|
+
repo_resolved = self.repo.resolve()
|
119
|
+
cwd_resolved = self.cwd().resolve()
|
120
|
+
|
121
|
+
# Check if cwd is within repo bounds using proper path methods
|
122
|
+
try:
|
123
|
+
cwd_resolved.relative_to(repo_resolved)
|
124
|
+
except ValueError:
|
125
|
+
raise ValueError(
|
126
|
+
f"With bypassPermissions, workspace must be within repository bounds. "
|
127
|
+
f"Repository: {repo_resolved}, Workspace: {cwd_resolved}"
|
128
|
+
)
|
129
|
+
return self
|
130
|
+
|
131
|
+
# ------------------------ CLI helpers -----------------------------------
|
132
|
+
def as_cmd_args(self) -> list[str]:
|
133
|
+
"""Build argument list for the *Node* `claude` CLI."""
|
134
|
+
full_prompt = f"Human User: {self.prompt}\n\nAssistant:"
|
135
|
+
args: list[str] = ["-p", full_prompt, "--output-format", "stream-json"]
|
136
|
+
if self.allowed_tools:
|
137
|
+
args.append("--allowedTools")
|
138
|
+
for tool in self.allowed_tools:
|
139
|
+
args.append(f'"{tool}"')
|
140
|
+
|
141
|
+
if self.disallowed_tools:
|
142
|
+
args.append("--disallowedTools")
|
143
|
+
for tool in self.disallowed_tools:
|
144
|
+
args.append(f'"{tool}"')
|
145
|
+
|
146
|
+
if self.resume:
|
147
|
+
args += ["--resume", self.resume]
|
148
|
+
elif self.continue_conversation:
|
149
|
+
args.append("--continue")
|
150
|
+
|
151
|
+
if self.max_turns:
|
152
|
+
# +1 because CLI counts *pairs*
|
153
|
+
args += ["--max-turns", str(self.max_turns + 1)]
|
154
|
+
|
155
|
+
if self.permission_mode == "bypassPermissions":
|
156
|
+
args += ["--dangerously-skip-permissions"]
|
157
|
+
|
158
|
+
if self.add_dir:
|
159
|
+
args += ["--add-dir", self.add_dir]
|
160
|
+
|
161
|
+
args += ["--model", self.model or "sonnet", "--verbose"]
|
162
|
+
return args
|
163
|
+
|
164
|
+
# ------------------------ SDK helpers -----------------------------------
|
165
|
+
def as_claude_options(self) -> ClaudeCodeOptions:
|
166
|
+
data = {
|
167
|
+
k: v
|
168
|
+
for k, v in self.model_dump(exclude_none=True).items()
|
169
|
+
if k in CLAUDE_CODE_OPTION_PARAMS
|
170
|
+
}
|
171
|
+
return ClaudeCodeOptions(**data)
|
172
|
+
|
173
|
+
# ------------------------ convenience constructor -----------------------
|
174
|
+
@classmethod
|
175
|
+
def create(
|
176
|
+
cls,
|
177
|
+
messages: list[dict[str, Any]],
|
178
|
+
resume: str | None = None,
|
179
|
+
continue_conversation: bool | None = None,
|
180
|
+
**kwargs,
|
181
|
+
):
|
182
|
+
if not messages:
|
183
|
+
raise ValueError("messages may not be empty")
|
184
|
+
|
185
|
+
prompt = messages[-1]["content"]
|
186
|
+
if isinstance(prompt, (dict, list)):
|
187
|
+
prompt = json.dumps(prompt)
|
188
|
+
|
189
|
+
if resume and continue_conversation is None:
|
190
|
+
continue_conversation = True
|
191
|
+
|
192
|
+
data: dict[str, Any] = dict(
|
193
|
+
prompt=prompt,
|
194
|
+
resume=resume,
|
195
|
+
continue_conversation=bool(continue_conversation),
|
196
|
+
)
|
197
|
+
|
198
|
+
if (messages[0]["role"] == "system") and (
|
199
|
+
resume or continue_conversation
|
200
|
+
):
|
201
|
+
data["system_prompt"] = messages[0]["content"]
|
202
|
+
|
203
|
+
# Merge optional system prompts
|
204
|
+
if kwargs.get("system_prompt"):
|
205
|
+
data["append_system_prompt"] = kwargs.pop("system_prompt")
|
206
|
+
|
207
|
+
data.update(kwargs)
|
208
|
+
return cls.model_validate(data, strict=False)
|
209
|
+
|
210
|
+
|
211
|
+
# --------------------------------------------------------------------------- SDK endpoint
|
212
|
+
ENDPOINT_CONFIG = EndpointConfig(
|
213
|
+
name="claude_code",
|
214
|
+
provider="claude_code",
|
215
|
+
base_url="internal",
|
216
|
+
endpoint="query",
|
217
|
+
api_key="dummy",
|
218
|
+
request_options=ClaudeCodeRequest,
|
219
|
+
timeout=3000,
|
220
|
+
)
|
221
|
+
|
222
|
+
|
223
|
+
class ClaudeCodeEndpoint(Endpoint):
|
224
|
+
"""Direct Python-SDK (non-CLI) endpoint - unchanged except for bug-fixes."""
|
225
|
+
|
226
|
+
def __init__(self, config: EndpointConfig = ENDPOINT_CONFIG, **kwargs):
|
227
|
+
super().__init__(config=config, **kwargs)
|
228
|
+
|
229
|
+
def create_payload(self, request: dict | BaseModel, **kwargs):
|
230
|
+
req_dict = {**self.config.kwargs, **to_dict(request), **kwargs}
|
231
|
+
messages = req_dict.pop("messages")
|
232
|
+
req_obj = ClaudeCodeRequest.create(messages=messages, **req_dict)
|
233
|
+
return {"request": req_obj}, {}
|
234
|
+
|
235
|
+
def _stream_claude_code(self, request: ClaudeCodeRequest):
|
236
|
+
return sdk_query(
|
237
|
+
prompt=request.prompt, options=request.as_claude_options()
|
238
|
+
)
|
239
|
+
|
240
|
+
async def stream(self, request: dict | BaseModel, **kwargs):
|
241
|
+
payload = self.create_payload(request, **kwargs)["request"]
|
242
|
+
async for chunk in self._stream_claude_code(payload):
|
243
|
+
yield chunk
|
244
|
+
|
245
|
+
def _parse_claude_code_response(self, responses: list) -> dict:
|
246
|
+
"""Parse Claude Code responses into a clean chat completions-like format.
|
247
|
+
|
248
|
+
Claude Code returns a list of messages:
|
249
|
+
- SystemMessage: initialization info
|
250
|
+
- AssistantMessage(s): actual assistant responses with content blocks
|
251
|
+
- UserMessage(s): for tool use interactions
|
252
|
+
- ResultMessage: final result with metadata
|
253
|
+
|
254
|
+
When Claude Code uses tools, the ResultMessage.result may be None.
|
255
|
+
In that case, we need to look at the tool results in UserMessages.
|
256
|
+
"""
|
257
|
+
results = {
|
258
|
+
"session_id": None,
|
259
|
+
"model": "claude-code",
|
260
|
+
"result": "",
|
261
|
+
"tool_results": [],
|
262
|
+
"is_error": False,
|
263
|
+
"num_turns": None,
|
264
|
+
"total_cost_usd": None,
|
265
|
+
"usage": {
|
266
|
+
"prompt_tokens": 0,
|
267
|
+
"completion_tokens": 0,
|
268
|
+
"total_tokens": 0,
|
269
|
+
},
|
270
|
+
}
|
271
|
+
|
272
|
+
from claude_code_sdk import types
|
273
|
+
|
274
|
+
for response in responses:
|
275
|
+
if isinstance(response, types.SystemMessage):
|
276
|
+
results["session_id"] = response.data.get("session_id")
|
277
|
+
results["model"] = response.data.get("model", "claude-code")
|
278
|
+
if isinstance(response, types.AssistantMessage):
|
279
|
+
for block in response.content:
|
280
|
+
if isinstance(block, types.TextBlock):
|
281
|
+
results["result"] += block.text.strip() + "\n"
|
282
|
+
if isinstance(block, types.ToolResultBlock):
|
283
|
+
results["tool_results"].append(
|
284
|
+
{
|
285
|
+
"tool_use_id": block.tool_use_id,
|
286
|
+
"content": block.content,
|
287
|
+
"is_error": block.is_error,
|
288
|
+
}
|
289
|
+
)
|
290
|
+
if isinstance(response, types.ResultMessage):
|
291
|
+
results["result"] += response.result.strip() or ""
|
292
|
+
results["usage"] = response.usage
|
293
|
+
results["is_error"] = response.is_error
|
294
|
+
results["total_cost_usd"] = response.total_cost_usd
|
295
|
+
results["num_turns"] = response.num_turns
|
296
|
+
results["duration_ms"] = response.duration_ms
|
297
|
+
results["duration_api_ms"] = response.duration_api_ms
|
298
|
+
|
299
|
+
return results
|
300
|
+
|
301
|
+
async def _call(
|
302
|
+
self,
|
303
|
+
payload: dict,
|
304
|
+
headers: dict,
|
305
|
+
**kwargs,
|
306
|
+
):
|
307
|
+
responses = []
|
308
|
+
async for chunk in self._stream_claude_code(**payload):
|
309
|
+
responses.append(chunk)
|
310
|
+
|
311
|
+
return self._parse_claude_code_response(responses)
|
@@ -46,6 +46,7 @@ class iModel:
|
|
46
46
|
limit_tokens: int = None,
|
47
47
|
concurrency_limit: int | None = None,
|
48
48
|
streaming_process_func: Callable = None,
|
49
|
+
provider_metadata: dict | None = None,
|
49
50
|
**kwargs,
|
50
51
|
) -> None:
|
51
52
|
"""Initializes the iModel instance.
|
@@ -79,6 +80,8 @@ class iModel:
|
|
79
80
|
concurrency_limit (int | None, optional):
|
80
81
|
Maximum number of streaming concurrent requests allowed.
|
81
82
|
only applies to streaming requests.
|
83
|
+
provider_metadata (dict | None, optional):
|
84
|
+
Provider-specific metadata, such as session IDs for
|
82
85
|
**kwargs:
|
83
86
|
Additional keyword arguments, such as `model`, or any other
|
84
87
|
provider-specific fields.
|
@@ -121,7 +124,7 @@ class iModel:
|
|
121
124
|
self.streaming_process_func = streaming_process_func
|
122
125
|
|
123
126
|
# Provider-specific metadata storage (e.g., session_id for Claude Code)
|
124
|
-
self.
|
127
|
+
self.provider_metadata = provider_metadata or {}
|
125
128
|
|
126
129
|
def create_api_calling(
|
127
130
|
self, include_token_usage_to_model: bool = False, **kwargs
|
@@ -142,9 +145,9 @@ class iModel:
|
|
142
145
|
self.endpoint.config.provider == "claude_code"
|
143
146
|
and "resume" not in kwargs
|
144
147
|
and "session_id" not in kwargs
|
145
|
-
and self.
|
148
|
+
and self.provider_metadata.get("session_id")
|
146
149
|
):
|
147
|
-
kwargs["resume"] = self.
|
150
|
+
kwargs["resume"] = self.provider_metadata["session_id"]
|
148
151
|
|
149
152
|
# The new Endpoint.create_payload returns (payload, headers)
|
150
153
|
payload, headers = self.endpoint.create_payload(request=kwargs)
|
@@ -280,7 +283,7 @@ class iModel:
|
|
280
283
|
):
|
281
284
|
response = completed_call.response
|
282
285
|
if isinstance(response, dict) and "session_id" in response:
|
283
|
-
self.
|
286
|
+
self.provider_metadata["session_id"] = response[
|
284
287
|
"session_id"
|
285
288
|
]
|
286
289
|
|
@@ -322,6 +325,7 @@ class iModel:
|
|
322
325
|
return {
|
323
326
|
"endpoint": self.endpoint.to_dict(),
|
324
327
|
"processor_config": self.executor.config,
|
328
|
+
"provider_metadata": self.provider_metadata,
|
325
329
|
}
|
326
330
|
|
327
331
|
@classmethod
|
@@ -338,5 +342,6 @@ class iModel:
|
|
338
342
|
|
339
343
|
return cls(
|
340
344
|
endpoint=e1,
|
345
|
+
provider_metadata=data.get("provider_metadata"),
|
341
346
|
**data.get("processor_config", {}),
|
342
347
|
)
|
@@ -121,7 +121,7 @@ class TokenCalculator:
|
|
121
121
|
return num_tokens # buffer for chat
|
122
122
|
|
123
123
|
@staticmethod
|
124
|
-
def
|
124
|
+
def calculate_embed_token(inputs: list[str], /, **kwargs) -> int:
|
125
125
|
try:
|
126
126
|
if not "inputs" in kwargs:
|
127
127
|
raise ValueError("Missing 'inputs' field in payload")
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.13.0"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "lionagi"
|
3
|
-
version = "0.
|
3
|
+
version = "0.13.0"
|
4
4
|
description = "An Intelligence Operating System."
|
5
5
|
authors = [
|
6
6
|
{ name = "HaiyangLi", email = "quantocean.li@gmail.com" },
|
@@ -78,7 +78,7 @@ ollama = [
|
|
78
78
|
]
|
79
79
|
|
80
80
|
claude-code = [
|
81
|
-
"claude-code-sdk>=0.0.
|
81
|
+
"claude-code-sdk>=0.0.14"
|
82
82
|
]
|
83
83
|
|
84
84
|
all = [
|
@@ -411,15 +411,15 @@ wheels = [
|
|
411
411
|
|
412
412
|
[[package]]
|
413
413
|
name = "claude-code-sdk"
|
414
|
-
version = "0.0.
|
414
|
+
version = "0.0.14"
|
415
415
|
source = { registry = "https://pypi.org/simple" }
|
416
416
|
dependencies = [
|
417
417
|
{ name = "anyio" },
|
418
418
|
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
|
419
419
|
]
|
420
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
420
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1b/50/489bd1cf9f448d9e06aa6af4a14db8e22ec5f7dbdb5fcc48821b1d8d1680/claude_code_sdk-0.0.14.tar.gz", hash = "sha256:a1c9384b6934c2b8351d7a35c0b7dcfd5fb657017fb456eb98bcf5e0b4f8eccd", size = 13403, upload-time = "2025-07-01T06:07:28.147Z" }
|
421
421
|
wheels = [
|
422
|
-
{ url = "https://files.pythonhosted.org/packages/
|
422
|
+
{ url = "https://files.pythonhosted.org/packages/db/a4/6eb606ccb0988054ca52b9453045b2c2f1bc6fd9c915e0f6cd1f73d6ce2c/claude_code_sdk-0.0.14-py3-none-any.whl", hash = "sha256:83a23a260954bb84e78cf2dc42aaaa0eee778ca392e56f1661276f31ba64992c", size = 10589, upload-time = "2025-07-01T06:07:27.029Z" },
|
423
423
|
]
|
424
424
|
|
425
425
|
[[package]]
|
@@ -1179,7 +1179,7 @@ wheels = [
|
|
1179
1179
|
|
1180
1180
|
[[package]]
|
1181
1181
|
name = "lionagi"
|
1182
|
-
version = "0.
|
1182
|
+
version = "0.13.0"
|
1183
1183
|
source = { editable = "." }
|
1184
1184
|
dependencies = [
|
1185
1185
|
{ name = "aiocache" },
|
@@ -1243,7 +1243,7 @@ requires-dist = [
|
|
1243
1243
|
{ name = "aiohttp", specifier = ">=3.12.0" },
|
1244
1244
|
{ name = "backoff", specifier = ">=2.2.1" },
|
1245
1245
|
{ name = "black", extras = ["jupyter"], marker = "extra == 'lint'", specifier = ">=24.10.0" },
|
1246
|
-
{ name = "claude-code-sdk", marker = "extra == 'claude-code'", specifier = ">=0.0.
|
1246
|
+
{ name = "claude-code-sdk", marker = "extra == 'claude-code'", specifier = ">=0.0.14" },
|
1247
1247
|
{ name = "docling", marker = "extra == 'reader'", specifier = ">=2.15.1" },
|
1248
1248
|
{ name = "furo", marker = "extra == 'docs'", specifier = ">=2024.8.6" },
|
1249
1249
|
{ name = "isort", marker = "extra == 'lint'", specifier = ">=5.13.2" },
|