lionagi 0.9.5__tar.gz → 0.9.7__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.9.5 → lionagi-0.9.7}/PKG-INFO +16 -1
- {lionagi-0.9.5 → lionagi-0.9.7}/README.md +8 -0
- lionagi-0.9.7/lionagi/libs/schema/function_to_schema.py +164 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/endpoints/base.py +21 -5
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/endpoints/match_endpoint.py +7 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/imodel.py +20 -12
- lionagi-0.9.7/lionagi/service/providers/ollama_/chat_completions.py +134 -0
- lionagi-0.9.7/lionagi/tools/query/__init__.py +3 -0
- lionagi-0.9.7/lionagi/version.py +1 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/pyproject.toml +9 -1
- {lionagi-0.9.5 → lionagi-0.9.7}/uv.lock +30 -9
- lionagi-0.9.5/lionagi/libs/schema/function_to_schema.py +0 -104
- lionagi-0.9.5/lionagi/version.py +0 -1
- {lionagi-0.9.5 → lionagi-0.9.7}/.env.example +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.github/FUNDING.yml +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.github/dependabot.yml +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.github/workflows/ci.yml +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.github/workflows/docs.yml +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.github/workflows/release.yml +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.gitignore +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/.pre-commit-config.yaml +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/CONTRIBUTING.md +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/LICENSE +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/cookbooks/ch01_get_started.md +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/cookbooks/ch02_concepts.md +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/dev_tools/count_code_base_lines.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/Makefile +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/_static/custom.css +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/_templates/layout.html +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/conf.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/index.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/action.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/adapter.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/branch.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/concepts.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/element_id.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/event.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/form.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/graph.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/index.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/instruct.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/log.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/mail.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/message.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/models.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/pile.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/processor.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/progression.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/service.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/session.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/modules/utils.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/docs/tutorials/index.rst +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/_class_registry.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/_errors.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/_types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/file/save.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/package/imports.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/parse.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/token_transform/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/manager.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/translate/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operations/utils.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/action/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/action/function_calling.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/action/manager.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/action/request_response_model.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/action/tool.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/action/utils.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/forms/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/forms/base.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/forms/flow.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/forms/form.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/forms/report.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/instruct/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/instruct/base.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/instruct/instruct.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/instruct/instruct_collection.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/instruct/node.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/instruct/prompts.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/instruct/reason.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/manager.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/models/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/models/field_model.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/models/model_params.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/models/note.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/models/operable_model.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/models/schema_model.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/operative.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/step.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/base.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/concurrent.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/concurrent_chunk.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/concurrent_sequential_chunk.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/params.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/sequential.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/sequential_chunk.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/sequential_concurrent_chunk.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/strategies/utils.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/operatives/types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/adapter.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/json_adapter.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/pandas_/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/pandas_/csv_adapter.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/pandas_/excel_adapter.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/pandas_/pd_dataframe_adapter.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/pandas_/pd_series_adapter.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/adapters/types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/protocols/types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/endpoints/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/endpoints/chat_completion.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/endpoints/token_calculator.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/manager.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/anthropic_/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/anthropic_/messages.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/exa_/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/exa_/models.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/exa_/search.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/exa_/types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/groq_/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/groq_/chat_completions.py +0 -0
- {lionagi-0.9.5/lionagi/service/providers/openai_ → lionagi-0.9.7/lionagi/service/providers/ollama_}/__init__.py +0 -0
- {lionagi-0.9.5/lionagi/service/providers/openrouter_ → lionagi-0.9.7/lionagi/service/providers/openai_}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/openai_/chat_completions.py +0 -0
- {lionagi-0.9.5/lionagi/service/providers/perplexity_ → lionagi-0.9.7/lionagi/service/providers/openrouter_}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
- {lionagi-0.9.5/lionagi/session → lionagi-0.9.7/lionagi/service/providers/perplexity_}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/perplexity_/models.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/providers/types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/service/types.py +0 -0
- {lionagi-0.9.5/lionagi/tools → lionagi-0.9.7/lionagi/session}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/session/branch.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/session/prompts.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/session/session.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/settings.py +0 -0
- {lionagi-0.9.5/lionagi/tools/browser/providers → lionagi-0.9.7/lionagi/tools}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/base.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/browser/__init__.py +0 -0
- {lionagi-0.9.5/lionagi/tools/code → lionagi-0.9.7/lionagi/tools/browser/providers}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/browser/providers/browser_use_.py +0 -0
- {lionagi-0.9.5/lionagi/tools/code/providers → lionagi-0.9.7/lionagi/tools/code}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/code/coder.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/code/manager.py +0 -0
- {lionagi-0.9.5/lionagi/tools/file → lionagi-0.9.7/lionagi/tools/code/providers}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/code/providers/aider_.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/code/providers/e2b_.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/code/sandbox.py +0 -0
- {lionagi-0.9.5/lionagi/tools/file/providers → lionagi-0.9.7/lionagi/tools/file}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/file/manager.py +0 -0
- {lionagi-0.9.5/lionagi/tools/query → lionagi-0.9.7/lionagi/tools/file/providers}/__init__.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/file/providers/docling_.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/file/writer.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/tools/types.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/lionagi/utils.py +0 -0
- {lionagi-0.9.5 → lionagi-0.9.7}/prompts/doc_style.md +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.7
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>
|
6
6
|
License: Apache License
|
@@ -227,6 +227,13 @@ Requires-Dist: pillow>=10.0.0
|
|
227
227
|
Requires-Dist: pydantic>=2.0.0
|
228
228
|
Requires-Dist: python-dotenv>=1.0.1
|
229
229
|
Requires-Dist: tiktoken>=0.8.0
|
230
|
+
Provides-Extra: llms
|
231
|
+
Requires-Dist: litellm>=1.59.5; extra == 'llms'
|
232
|
+
Provides-Extra: ollama
|
233
|
+
Requires-Dist: ollama>=0.4.7; extra == 'ollama'
|
234
|
+
Requires-Dist: openai>=1.60.0; extra == 'ollama'
|
235
|
+
Provides-Extra: tools
|
236
|
+
Requires-Dist: docling>=2.15.1; extra == 'tools'
|
230
237
|
Description-Content-Type: text/markdown
|
231
238
|
|
232
239
|

|
@@ -358,6 +365,14 @@ analysis = await branch.communicate("Analyze these stats", imodel=sonnet)
|
|
358
365
|
|
359
366
|
Seamlessly route to different models in the same workflow.
|
360
367
|
|
368
|
+
### optional dependencies
|
369
|
+
|
370
|
+
```
|
371
|
+
pip install "lionagi[tools]"
|
372
|
+
pip install "lionagi[llms]"
|
373
|
+
pip install "lionagi[ollama]"
|
374
|
+
```
|
375
|
+
|
361
376
|
## Community & Contributing
|
362
377
|
|
363
378
|
We welcome issues, ideas, and pull requests:
|
@@ -127,6 +127,14 @@ analysis = await branch.communicate("Analyze these stats", imodel=sonnet)
|
|
127
127
|
|
128
128
|
Seamlessly route to different models in the same workflow.
|
129
129
|
|
130
|
+
### optional dependencies
|
131
|
+
|
132
|
+
```
|
133
|
+
pip install "lionagi[tools]"
|
134
|
+
pip install "lionagi[llms]"
|
135
|
+
pip install "lionagi[ollama]"
|
136
|
+
```
|
137
|
+
|
130
138
|
## Community & Contributing
|
131
139
|
|
132
140
|
We welcome issues, ideas, and pull requests:
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
import inspect
|
6
|
+
from typing import Any, Literal
|
7
|
+
|
8
|
+
from pydantic import Field, field_validator
|
9
|
+
|
10
|
+
from lionagi.libs.schema.extract_docstring import extract_docstring
|
11
|
+
from lionagi.libs.validate.common_field_validators import (
|
12
|
+
validate_model_to_type,
|
13
|
+
)
|
14
|
+
from lionagi.operatives.models.schema_model import SchemaModel
|
15
|
+
|
16
|
+
py_json_msp = {
|
17
|
+
"str": "string",
|
18
|
+
"int": "number",
|
19
|
+
"float": "number",
|
20
|
+
"list": "array",
|
21
|
+
"tuple": "array",
|
22
|
+
"bool": "boolean",
|
23
|
+
"dict": "object",
|
24
|
+
}
|
25
|
+
|
26
|
+
|
27
|
+
class FunctionSchema(SchemaModel):
|
28
|
+
name: str
|
29
|
+
description: str | None = Field(
|
30
|
+
None,
|
31
|
+
description=(
|
32
|
+
"A description of what the function does, used by the "
|
33
|
+
"model to choose when and how to call the function."
|
34
|
+
),
|
35
|
+
)
|
36
|
+
parameters: dict[str, Any] | None = Field(
|
37
|
+
None,
|
38
|
+
description=(
|
39
|
+
"The parameters the functions accepts, described as a JSON Schema object. "
|
40
|
+
"See the guide (https://platform.openai.com/docs/guides/function-calling) "
|
41
|
+
"for examples, and the JSON Schema reference for documentation about the "
|
42
|
+
"format. Omitting parameters defines a function with an empty parameter list."
|
43
|
+
),
|
44
|
+
validation_alias="request_options",
|
45
|
+
)
|
46
|
+
strict: bool | None = Field(
|
47
|
+
None,
|
48
|
+
description=(
|
49
|
+
"Whether to enable strict schema adherence when generating the function call. "
|
50
|
+
"If set to true, the model will follow the exact schema defined in the parameters "
|
51
|
+
"field. Only a subset of JSON Schema is supported when strict is true."
|
52
|
+
),
|
53
|
+
)
|
54
|
+
|
55
|
+
@field_validator("parameters", mode="before")
|
56
|
+
def _validate_parameters(cls, v):
|
57
|
+
if v is None:
|
58
|
+
return None
|
59
|
+
if isinstance(v, dict):
|
60
|
+
return v
|
61
|
+
try:
|
62
|
+
model_type = validate_model_to_type(cls, v)
|
63
|
+
return model_type.model_json_schema()
|
64
|
+
except Exception:
|
65
|
+
raise ValueError(f"Invalid model type: {v}")
|
66
|
+
|
67
|
+
def to_dict(self):
|
68
|
+
dict_ = super().to_dict()
|
69
|
+
return {"type": "function", "function": dict_}
|
70
|
+
|
71
|
+
|
72
|
+
def function_to_schema(
|
73
|
+
f_,
|
74
|
+
style: Literal["google", "rest"] = "google",
|
75
|
+
*,
|
76
|
+
request_options: dict[str, Any] | None = None,
|
77
|
+
strict: bool = None,
|
78
|
+
func_description: str = None,
|
79
|
+
parametert_description: dict[str, str] = None,
|
80
|
+
return_obj: bool = False,
|
81
|
+
) -> dict:
|
82
|
+
"""
|
83
|
+
Generate a schema description for a given function. in openai format
|
84
|
+
|
85
|
+
This function generates a schema description for the given function
|
86
|
+
using typing hints and docstrings. The schema includes the function's
|
87
|
+
name, description, and parameter details.
|
88
|
+
|
89
|
+
Args:
|
90
|
+
func (Callable): The function to generate a schema for.
|
91
|
+
style (str): The docstring format. Can be 'google' (default) or
|
92
|
+
'reST'.
|
93
|
+
func_description (str, optional): A custom description for the
|
94
|
+
function. If not provided, the description will be extracted
|
95
|
+
from the function's docstring.
|
96
|
+
params_description (dict, optional): A dictionary mapping
|
97
|
+
parameter names to their descriptions. If not provided, the
|
98
|
+
parameter descriptions will be extracted from the function's
|
99
|
+
docstring.
|
100
|
+
|
101
|
+
Returns:
|
102
|
+
dict: A schema describing the function, including its name,
|
103
|
+
description, and parameter details.
|
104
|
+
|
105
|
+
Example:
|
106
|
+
>>> def example_func(param1: int, param2: str) -> bool:
|
107
|
+
... '''Example function.
|
108
|
+
...
|
109
|
+
... Args:
|
110
|
+
... param1 (int): The first parameter.
|
111
|
+
... param2 (str): The second parameter.
|
112
|
+
... '''
|
113
|
+
... return True
|
114
|
+
>>> schema = function_to_schema(example_func)
|
115
|
+
>>> schema['function']['name']
|
116
|
+
'example_func'
|
117
|
+
"""
|
118
|
+
# Extract function name
|
119
|
+
func_name = f_.__name__
|
120
|
+
|
121
|
+
# Extract function description and parameter descriptions
|
122
|
+
if not func_description or not parametert_description:
|
123
|
+
func_desc, params_desc = extract_docstring(f_, style)
|
124
|
+
func_description = func_description or func_desc
|
125
|
+
parametert_description = parametert_description or params_desc
|
126
|
+
|
127
|
+
# Extract parameter details using typing hints
|
128
|
+
sig = inspect.signature(f_)
|
129
|
+
parameters: dict[str, Any] = {
|
130
|
+
"type": "object",
|
131
|
+
"properties": {},
|
132
|
+
"required": [],
|
133
|
+
}
|
134
|
+
|
135
|
+
if not request_options:
|
136
|
+
for name, param in sig.parameters.items():
|
137
|
+
# Default type to string and update if type hint is available
|
138
|
+
param_type = "string"
|
139
|
+
if param.annotation is not inspect.Parameter.empty:
|
140
|
+
param_type = py_json_msp[param.annotation.__name__]
|
141
|
+
|
142
|
+
# Extract parameter description from docstring, if available
|
143
|
+
param_description = parametert_description.get(name)
|
144
|
+
|
145
|
+
# Assuming all parameters are required for simplicity
|
146
|
+
parameters["required"].append(name)
|
147
|
+
parameters["properties"][name] = {
|
148
|
+
"type": param_type,
|
149
|
+
"description": param_description,
|
150
|
+
}
|
151
|
+
else:
|
152
|
+
parameters = request_options
|
153
|
+
|
154
|
+
params = {
|
155
|
+
"name": func_name,
|
156
|
+
"description": func_description,
|
157
|
+
"parameters": parameters,
|
158
|
+
}
|
159
|
+
if strict:
|
160
|
+
params["strict"] = strict
|
161
|
+
|
162
|
+
if return_obj:
|
163
|
+
return FunctionSchema(**params)
|
164
|
+
return FunctionSchema(**params).to_dict()
|
@@ -80,6 +80,7 @@ class EndpointConfig(BaseModel):
|
|
80
80
|
api_version: str | None = None
|
81
81
|
allowed_roles: list[str] | None = None
|
82
82
|
request_options: type | None = Field(None, exclude=True)
|
83
|
+
invoke_with_endpoint: bool | None = None
|
83
84
|
|
84
85
|
|
85
86
|
class EndPoint(ABC):
|
@@ -91,19 +92,28 @@ class EndPoint(ABC):
|
|
91
92
|
HTTP requests.
|
92
93
|
"""
|
93
94
|
|
94
|
-
def __init__(
|
95
|
+
def __init__(
|
96
|
+
self, config: dict | EndpointConfig | type[EndpointConfig], **kwargs
|
97
|
+
) -> None:
|
95
98
|
"""Initializes the EndPoint with a given configuration.
|
96
99
|
|
97
100
|
Args:
|
98
|
-
config (dict): Configuration data that matches the EndpointConfig
|
101
|
+
config (dict | EndpointConfig): Configuration data that matches the EndpointConfig
|
99
102
|
schema.
|
100
103
|
"""
|
101
|
-
|
104
|
+
if isinstance(config, dict):
|
105
|
+
self.config = EndpointConfig(**config)
|
106
|
+
if isinstance(config, EndpointConfig):
|
107
|
+
self.config = config
|
108
|
+
if isinstance(config, type) and issubclass(config, EndpointConfig):
|
109
|
+
self.config = config()
|
110
|
+
if kwargs:
|
111
|
+
self.update_config(**kwargs)
|
102
112
|
|
103
113
|
def update_config(self, **kwargs):
|
104
114
|
config = self.config.model_dump()
|
105
115
|
config.update(kwargs)
|
106
|
-
self.config =
|
116
|
+
self.config = self.config.model_validate(config)
|
107
117
|
|
108
118
|
@property
|
109
119
|
def name(self) -> str | None:
|
@@ -354,6 +364,7 @@ class APICalling(Event):
|
|
354
364
|
exclude=True,
|
355
365
|
description="Whether to include token usage information into instruction messages",
|
356
366
|
)
|
367
|
+
response_obj: BaseModel | None = Field(None, exclude=True)
|
357
368
|
|
358
369
|
@model_validator(mode="after")
|
359
370
|
def _validate_streaming(self) -> Self:
|
@@ -648,7 +659,12 @@ class APICalling(Event):
|
|
648
659
|
f"API call to {self.endpoint.full_url} failed: {e1}"
|
649
660
|
)
|
650
661
|
else:
|
651
|
-
self.
|
662
|
+
self.response_obj = response
|
663
|
+
self.execution.response = (
|
664
|
+
response.model_dump()
|
665
|
+
if isinstance(response, BaseModel)
|
666
|
+
else response
|
667
|
+
)
|
652
668
|
self.execution.status = EventStatus.COMPLETED
|
653
669
|
|
654
670
|
def __str__(self) -> str:
|
@@ -48,6 +48,13 @@ def match_endpoint(
|
|
48
48
|
|
49
49
|
return OpenRouterChatCompletionEndPoint()
|
50
50
|
|
51
|
+
if provider == "ollama":
|
52
|
+
from ..providers.ollama_.chat_completions import (
|
53
|
+
OllamaChatCompletionEndPoint,
|
54
|
+
)
|
55
|
+
|
56
|
+
return OllamaChatCompletionEndPoint()
|
57
|
+
|
51
58
|
return OpenAIChatCompletionEndPoint(
|
52
59
|
config={
|
53
60
|
"provider": provider,
|
@@ -51,7 +51,7 @@ class iModel:
|
|
51
51
|
interval: float | None = None,
|
52
52
|
limit_requests: int = None,
|
53
53
|
limit_tokens: int = None,
|
54
|
-
invoke_with_endpoint: bool =
|
54
|
+
invoke_with_endpoint: bool = None,
|
55
55
|
concurrency_limit: int | None = None,
|
56
56
|
streaming_process_func: Callable = None,
|
57
57
|
requires_api_key: bool = True,
|
@@ -95,6 +95,16 @@ class iModel:
|
|
95
95
|
Additional keyword arguments, such as `model`, or any other
|
96
96
|
provider-specific fields.
|
97
97
|
"""
|
98
|
+
model = kwargs.get("model", None)
|
99
|
+
if model:
|
100
|
+
if not provider:
|
101
|
+
if "/" in model:
|
102
|
+
provider = model.split("/")[0]
|
103
|
+
model = model.replace(provider + "/", "")
|
104
|
+
kwargs["model"] = model
|
105
|
+
else:
|
106
|
+
raise ValueError("Provider must be provided")
|
107
|
+
|
98
108
|
if api_key is None:
|
99
109
|
provider = str(provider or "").strip().lower()
|
100
110
|
match provider:
|
@@ -110,6 +120,8 @@ class iModel:
|
|
110
120
|
api_key = "GROQ_API_KEY"
|
111
121
|
case "exa":
|
112
122
|
api_key = "EXA_API_KEY"
|
123
|
+
case "ollama":
|
124
|
+
api_key = "ollama"
|
113
125
|
case "":
|
114
126
|
if requires_api_key:
|
115
127
|
raise ValueError("API key must be provided")
|
@@ -121,16 +133,6 @@ class iModel:
|
|
121
133
|
api_key = os.getenv(api_key)
|
122
134
|
|
123
135
|
kwargs["api_key"] = api_key
|
124
|
-
model = kwargs.get("model", None)
|
125
|
-
if model:
|
126
|
-
if not provider:
|
127
|
-
if "/" in model:
|
128
|
-
provider = model.split("/")[0]
|
129
|
-
model = model.replace(provider + "/", "")
|
130
|
-
kwargs["model"] = model
|
131
|
-
else:
|
132
|
-
raise ValueError("Provider must be provided")
|
133
|
-
|
134
136
|
if isinstance(endpoint, EndPoint):
|
135
137
|
self.endpoint = endpoint
|
136
138
|
else:
|
@@ -145,7 +147,13 @@ class iModel:
|
|
145
147
|
if base_url:
|
146
148
|
self.endpoint.config.base_url = base_url
|
147
149
|
|
148
|
-
|
150
|
+
if (
|
151
|
+
invoke_with_endpoint is None
|
152
|
+
and self.endpoint.config.invoke_with_endpoint is True
|
153
|
+
):
|
154
|
+
invoke_with_endpoint = True
|
155
|
+
|
156
|
+
self.should_invoke_endpoint = invoke_with_endpoint or False
|
149
157
|
self.kwargs = kwargs
|
150
158
|
self.executor = RateLimitedAPIExecutor(
|
151
159
|
queue_capacity=queue_capacity,
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
from collections.abc import AsyncGenerator
|
6
|
+
|
7
|
+
from lionagi.service.endpoints.chat_completion import ChatCompletionEndPoint
|
8
|
+
|
9
|
+
CHAT_COMPLETION_CONFIG = {
|
10
|
+
"provider": "ollama",
|
11
|
+
"base_url": "http://localhost:11434/v1",
|
12
|
+
"endpoint": "chat",
|
13
|
+
"method": "post",
|
14
|
+
"openai_compatible": True,
|
15
|
+
"is_invokeable": True,
|
16
|
+
"requires_tokens": True,
|
17
|
+
"is_streamable": True,
|
18
|
+
"required_kwargs": {
|
19
|
+
"messages",
|
20
|
+
"model",
|
21
|
+
},
|
22
|
+
"optional_kwargs": {
|
23
|
+
"frequency_penalty",
|
24
|
+
"presence_penalty",
|
25
|
+
"response_format",
|
26
|
+
"seed",
|
27
|
+
"stop",
|
28
|
+
"stream",
|
29
|
+
"stream_options",
|
30
|
+
"temperature",
|
31
|
+
"top_p",
|
32
|
+
"max_tokens",
|
33
|
+
"tools",
|
34
|
+
# "tool_choice",
|
35
|
+
# "logit_bias",
|
36
|
+
# "user",
|
37
|
+
# "n",
|
38
|
+
# "logprobs",
|
39
|
+
},
|
40
|
+
"allowed_roles": ["user", "assistant", "system"],
|
41
|
+
"invoke_with_endpoint": True,
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
class OllamaChatCompletionEndPoint(ChatCompletionEndPoint):
|
46
|
+
"""
|
47
|
+
Documentation: https://platform.openai.com/docs/api-reference/chat/create
|
48
|
+
"""
|
49
|
+
|
50
|
+
def __init__(self, config: dict = CHAT_COMPLETION_CONFIG):
|
51
|
+
from lionagi.libs.package.imports import check_import
|
52
|
+
|
53
|
+
check_import("openai")
|
54
|
+
check_import("ollama")
|
55
|
+
|
56
|
+
from ollama import list, pull
|
57
|
+
from openai import AsyncOpenAI
|
58
|
+
|
59
|
+
super().__init__(config)
|
60
|
+
self.client = AsyncOpenAI(
|
61
|
+
base_url=self.config.base_url,
|
62
|
+
api_key="ollama",
|
63
|
+
)
|
64
|
+
self._pull = pull
|
65
|
+
self._list = list
|
66
|
+
|
67
|
+
async def _invoke(
|
68
|
+
self,
|
69
|
+
payload: dict,
|
70
|
+
headers: dict,
|
71
|
+
**kwargs,
|
72
|
+
):
|
73
|
+
self._check_model(payload["model"])
|
74
|
+
params = {**payload, **kwargs}
|
75
|
+
headers.pop("Authorization", None)
|
76
|
+
params["extra_headers"] = headers
|
77
|
+
|
78
|
+
if "response_format" in payload:
|
79
|
+
return await self.client.beta.chat.completions.parse(**params)
|
80
|
+
params.pop("response_format", None)
|
81
|
+
return await self.client.chat.completions.create(**params)
|
82
|
+
|
83
|
+
async def _stream(
|
84
|
+
self,
|
85
|
+
payload: dict,
|
86
|
+
headers: dict,
|
87
|
+
**kwargs,
|
88
|
+
) -> AsyncGenerator:
|
89
|
+
|
90
|
+
self._check_model(payload["model"])
|
91
|
+
params = {**payload, **kwargs}
|
92
|
+
headers.pop("Authorization", None)
|
93
|
+
params["extra_headers"] = headers
|
94
|
+
|
95
|
+
async for chunk in self.client.beta.chat.completions.stream(**params):
|
96
|
+
yield chunk
|
97
|
+
|
98
|
+
@property
|
99
|
+
def allowed_roles(self):
|
100
|
+
return ["system", "user", "assistant"]
|
101
|
+
|
102
|
+
def _pull_model(self, model: str):
|
103
|
+
from tqdm import tqdm
|
104
|
+
|
105
|
+
current_digest, bars = "", {}
|
106
|
+
for progress in self._pull(model, stream=True):
|
107
|
+
digest = progress.get("digest", "")
|
108
|
+
if digest != current_digest and current_digest in bars:
|
109
|
+
bars[current_digest].close()
|
110
|
+
|
111
|
+
if not digest:
|
112
|
+
print(progress.get("status"))
|
113
|
+
continue
|
114
|
+
|
115
|
+
if digest not in bars and (total := progress.get("total")):
|
116
|
+
bars[digest] = tqdm(
|
117
|
+
total=total,
|
118
|
+
desc=f"pulling {digest[7:19]}",
|
119
|
+
unit="B",
|
120
|
+
unit_scale=True,
|
121
|
+
)
|
122
|
+
|
123
|
+
if completed := progress.get("completed"):
|
124
|
+
bars[digest].update(completed - bars[digest].n)
|
125
|
+
|
126
|
+
current_digest = digest
|
127
|
+
|
128
|
+
def _list_local_models(self) -> set:
|
129
|
+
response = self._list()
|
130
|
+
return {i.model for i in response.models}
|
131
|
+
|
132
|
+
def _check_model(self, model: str):
|
133
|
+
if model not in self._list_local_models():
|
134
|
+
self._pull_model(model)
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.9.7"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "lionagi"
|
3
|
-
version = "0.9.
|
3
|
+
version = "0.9.7"
|
4
4
|
description = "An Intelligence Operating System."
|
5
5
|
authors = [
|
6
6
|
{ name = "HaiyangLi", email = "quantocean.li@gmail.com" },
|
@@ -47,10 +47,18 @@ dev = [
|
|
47
47
|
"ipykernel>=6.29.5",
|
48
48
|
"ipywidgets>=8.1.5",
|
49
49
|
]
|
50
|
+
|
51
|
+
[project.optional-dependencies]
|
50
52
|
tools = [
|
51
53
|
"docling>=2.15.1",
|
54
|
+
]
|
55
|
+
llms = [
|
52
56
|
"litellm>=1.59.5",
|
53
57
|
]
|
58
|
+
ollama = [
|
59
|
+
"openai>=1.60.0",
|
60
|
+
"ollama>=0.4.7",
|
61
|
+
]
|
54
62
|
|
55
63
|
[tool.black]
|
56
64
|
line-length = 79
|
@@ -1208,7 +1208,7 @@ wheels = [
|
|
1208
1208
|
|
1209
1209
|
[[package]]
|
1210
1210
|
name = "lionagi"
|
1211
|
-
version = "0.9.
|
1211
|
+
version = "0.9.7"
|
1212
1212
|
source = { editable = "." }
|
1213
1213
|
dependencies = [
|
1214
1214
|
{ name = "aiocache" },
|
@@ -1221,6 +1221,18 @@ dependencies = [
|
|
1221
1221
|
{ name = "tiktoken" },
|
1222
1222
|
]
|
1223
1223
|
|
1224
|
+
[package.optional-dependencies]
|
1225
|
+
llms = [
|
1226
|
+
{ name = "litellm" },
|
1227
|
+
]
|
1228
|
+
ollama = [
|
1229
|
+
{ name = "ollama" },
|
1230
|
+
{ name = "openai" },
|
1231
|
+
]
|
1232
|
+
tools = [
|
1233
|
+
{ name = "docling" },
|
1234
|
+
]
|
1235
|
+
|
1224
1236
|
[package.dev-dependencies]
|
1225
1237
|
dev = [
|
1226
1238
|
{ name = "black", extra = ["jupyter"] },
|
@@ -1235,16 +1247,16 @@ dev = [
|
|
1235
1247
|
{ name = "sphinx" },
|
1236
1248
|
{ name = "sphinx-autobuild" },
|
1237
1249
|
]
|
1238
|
-
tools = [
|
1239
|
-
{ name = "docling" },
|
1240
|
-
{ name = "litellm" },
|
1241
|
-
]
|
1242
1250
|
|
1243
1251
|
[package.metadata]
|
1244
1252
|
requires-dist = [
|
1245
1253
|
{ name = "aiocache", specifier = ">=0.12.0" },
|
1246
1254
|
{ name = "aiohttp", specifier = ">=3.11.0" },
|
1255
|
+
{ name = "docling", marker = "extra == 'tools'", specifier = ">=2.15.1" },
|
1247
1256
|
{ name = "jinja2", specifier = ">=3.1.0" },
|
1257
|
+
{ name = "litellm", marker = "extra == 'llms'", specifier = ">=1.59.5" },
|
1258
|
+
{ name = "ollama", marker = "extra == 'ollama'", specifier = ">=0.4.7" },
|
1259
|
+
{ name = "openai", marker = "extra == 'ollama'", specifier = ">=1.60.0" },
|
1248
1260
|
{ name = "pandas", specifier = ">=2.0.0" },
|
1249
1261
|
{ name = "pillow", specifier = ">=10.0.0" },
|
1250
1262
|
{ name = "pydantic", specifier = ">=2.0.0" },
|
@@ -1266,10 +1278,6 @@ dev = [
|
|
1266
1278
|
{ name = "sphinx", specifier = ">=8.1.3" },
|
1267
1279
|
{ name = "sphinx-autobuild", specifier = ">=2024.10.3" },
|
1268
1280
|
]
|
1269
|
-
tools = [
|
1270
|
-
{ name = "docling", specifier = ">=2.15.1" },
|
1271
|
-
{ name = "litellm", specifier = ">=1.59.5" },
|
1272
|
-
]
|
1273
1281
|
|
1274
1282
|
[[package]]
|
1275
1283
|
name = "litellm"
|
@@ -1837,6 +1845,19 @@ wheels = [
|
|
1837
1845
|
{ url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 },
|
1838
1846
|
]
|
1839
1847
|
|
1848
|
+
[[package]]
|
1849
|
+
name = "ollama"
|
1850
|
+
version = "0.4.7"
|
1851
|
+
source = { registry = "https://pypi.org/simple" }
|
1852
|
+
dependencies = [
|
1853
|
+
{ name = "httpx" },
|
1854
|
+
{ name = "pydantic" },
|
1855
|
+
]
|
1856
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b0/6d/dc77539c735bbed5d0c873fb029fb86aa9f0163df169b34152914331c369/ollama-0.4.7.tar.gz", hash = "sha256:891dcbe54f55397d82d289c459de0ea897e103b86a3f1fad0fdb1895922a75ff", size = 12843 }
|
1857
|
+
wheels = [
|
1858
|
+
{ url = "https://files.pythonhosted.org/packages/31/83/c3ffac86906c10184c88c2e916460806b072a2cfe34cdcaf3a0c0e836d39/ollama-0.4.7-py3-none-any.whl", hash = "sha256:85505663cca67a83707be5fb3aeff0ea72e67846cea5985529d8eca4366564a1", size = 13210 },
|
1859
|
+
]
|
1860
|
+
|
1840
1861
|
[[package]]
|
1841
1862
|
name = "openai"
|
1842
1863
|
version = "1.60.0"
|