lionagi 0.9.0__tar.gz → 0.9.2__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.0 → lionagi-0.9.2}/PKG-INFO +1 -1
- lionagi-0.9.2/lionagi/operations/ReAct/ReAct.py +351 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/ReAct/utils.py +8 -2
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/endpoints/base.py +1 -1
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/endpoints/chat_completion.py +9 -1
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/imodel.py +0 -8
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/session/branch.py +71 -3
- lionagi-0.9.2/lionagi/version.py +1 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/pyproject.toml +1 -1
- {lionagi-0.9.0 → lionagi-0.9.2}/uv.lock +1 -1
- lionagi-0.9.0/lionagi/operations/ReAct/ReAct.py +0 -204
- lionagi-0.9.0/lionagi/version.py +0 -1
- {lionagi-0.9.0 → lionagi-0.9.2}/.env.example +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.github/FUNDING.yml +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.github/dependabot.yml +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.github/workflows/ci.yml +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.github/workflows/docs.yml +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.github/workflows/release.yml +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.gitignore +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/.pre-commit-config.yaml +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/CONTRIBUTING.md +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/LICENSE +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/README.md +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/cookbooks/ch01_get_started.md +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/cookbooks/ch02_concepts.md +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/dev_tools/count_code_base_lines.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/Makefile +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/_static/custom.css +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/_templates/layout.html +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/conf.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/index.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/action.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/adapter.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/branch.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/concepts.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/element_id.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/event.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/form.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/graph.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/index.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/instruct.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/log.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/mail.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/message.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/models.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/pile.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/processor.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/progression.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/service.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/session.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/modules/utils.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/docs/tutorials/index.rst +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/_class_registry.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/_errors.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/_types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/file/save.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/package/imports.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/parse.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/token_transform/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/manager.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/translate/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operations/utils.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/action/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/action/function_calling.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/action/manager.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/action/request_response_model.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/action/tool.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/action/utils.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/forms/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/forms/base.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/forms/flow.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/forms/form.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/forms/report.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/instruct/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/instruct/base.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/instruct/instruct.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/instruct/instruct_collection.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/instruct/node.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/instruct/prompts.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/instruct/reason.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/manager.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/models/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/models/field_model.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/models/model_params.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/models/note.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/models/operable_model.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/models/schema_model.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/operative.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/step.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/base.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/concurrent.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/concurrent_chunk.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/concurrent_sequential_chunk.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/params.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/sequential.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/sequential_chunk.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/sequential_concurrent_chunk.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/strategies/utils.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/operatives/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/adapter.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/json_adapter.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/pandas_/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/pandas_/csv_adapter.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/pandas_/excel_adapter.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/pandas_/pd_dataframe_adapter.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/pandas_/pd_series_adapter.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/adapters/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/protocols/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/endpoints/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/endpoints/match_endpoint.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/endpoints/token_calculator.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/manager.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/anthropic_/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/anthropic_/messages.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/exa_/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/exa_/models.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/exa_/search.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/exa_/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/groq_/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/groq_/chat_completions.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/openai_/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/openai_/chat_completions.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/openrouter_/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/perplexity_/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/perplexity_/models.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/providers/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/service/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/session/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/session/prompts.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/session/session.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/settings.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/tools/base.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/tools/types.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/lionagi/utils.py +0 -0
- {lionagi-0.9.0 → lionagi-0.9.2}/prompts/doc_style.md +0 -0
@@ -0,0 +1,351 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
import logging
|
6
|
+
from collections.abc import AsyncGenerator
|
7
|
+
from typing import TYPE_CHECKING, Any, Literal
|
8
|
+
|
9
|
+
from pydantic import BaseModel
|
10
|
+
|
11
|
+
from lionagi.libs.schema.as_readable import as_readable
|
12
|
+
from lionagi.libs.validate.common_field_validators import (
|
13
|
+
validate_model_to_type,
|
14
|
+
)
|
15
|
+
from lionagi.operatives.models.field_model import FieldModel
|
16
|
+
from lionagi.operatives.models.model_params import ModelParams
|
17
|
+
from lionagi.operatives.types import Instruct
|
18
|
+
from lionagi.service.imodel import iModel
|
19
|
+
from lionagi.utils import copy
|
20
|
+
|
21
|
+
from .utils import Analysis, ReActAnalysis
|
22
|
+
|
23
|
+
if TYPE_CHECKING:
|
24
|
+
from lionagi.session.branch import Branch
|
25
|
+
|
26
|
+
|
27
|
+
async def ReAct(
|
28
|
+
branch: "Branch",
|
29
|
+
instruct: Instruct | dict[str, Any],
|
30
|
+
interpret: bool = False,
|
31
|
+
interpret_domain: str | None = None,
|
32
|
+
interpret_style: str | None = None,
|
33
|
+
interpret_sample: str | None = None,
|
34
|
+
interpret_model: str | None = None,
|
35
|
+
interpret_kwargs: dict | None = None,
|
36
|
+
tools: Any = None,
|
37
|
+
tool_schemas: Any = None,
|
38
|
+
response_format: type[BaseModel] | BaseModel = None,
|
39
|
+
intermediate_response_options: list[BaseModel] | BaseModel = None,
|
40
|
+
intermediate_listable: bool = False,
|
41
|
+
reasoning_effort: Literal["low", "medium", "high"] = None,
|
42
|
+
extension_allowed: bool = True,
|
43
|
+
max_extensions: int | None = 3,
|
44
|
+
response_kwargs: dict | None = None,
|
45
|
+
display_as: Literal["json", "yaml"] = "yaml",
|
46
|
+
return_analysis: bool = False,
|
47
|
+
analysis_model: iModel | None = None,
|
48
|
+
verbose_analysis: bool = False,
|
49
|
+
verbose_length: int = None,
|
50
|
+
**kwargs,
|
51
|
+
):
|
52
|
+
outs = []
|
53
|
+
if verbose_analysis:
|
54
|
+
async for i in ReActStream(
|
55
|
+
branch=branch,
|
56
|
+
instruct=instruct,
|
57
|
+
interpret=interpret,
|
58
|
+
interpret_domain=interpret_domain,
|
59
|
+
interpret_style=interpret_style,
|
60
|
+
interpret_sample=interpret_sample,
|
61
|
+
interpret_model=interpret_model,
|
62
|
+
interpret_kwargs=interpret_kwargs,
|
63
|
+
tools=tools,
|
64
|
+
tool_schemas=tool_schemas,
|
65
|
+
response_format=response_format,
|
66
|
+
intermediate_response_options=intermediate_response_options,
|
67
|
+
intermediate_listable=intermediate_listable,
|
68
|
+
reasoning_effort=reasoning_effort,
|
69
|
+
extension_allowed=extension_allowed,
|
70
|
+
max_extensions=max_extensions,
|
71
|
+
response_kwargs=response_kwargs,
|
72
|
+
analysis_model=analysis_model,
|
73
|
+
verbose_analysis=verbose_analysis,
|
74
|
+
display_as=display_as,
|
75
|
+
verbose_length=verbose_length,
|
76
|
+
**kwargs,
|
77
|
+
):
|
78
|
+
analysis, str_ = i
|
79
|
+
str_ += "\n---------\n"
|
80
|
+
as_readable(str_, md=True, display_str=True)
|
81
|
+
outs.append(analysis)
|
82
|
+
else:
|
83
|
+
async for i in ReActStream(
|
84
|
+
branch=branch,
|
85
|
+
instruct=instruct,
|
86
|
+
interpret=interpret,
|
87
|
+
interpret_domain=interpret_domain,
|
88
|
+
interpret_style=interpret_style,
|
89
|
+
interpret_sample=interpret_sample,
|
90
|
+
interpret_model=interpret_model,
|
91
|
+
interpret_kwargs=interpret_kwargs,
|
92
|
+
tools=tools,
|
93
|
+
tool_schemas=tool_schemas,
|
94
|
+
response_format=response_format,
|
95
|
+
intermediate_response_options=intermediate_response_options,
|
96
|
+
intermediate_listable=intermediate_listable,
|
97
|
+
reasoning_effort=reasoning_effort,
|
98
|
+
extension_allowed=extension_allowed,
|
99
|
+
max_extensions=max_extensions,
|
100
|
+
response_kwargs=response_kwargs,
|
101
|
+
analysis_model=analysis_model,
|
102
|
+
display_as=display_as,
|
103
|
+
verbose_length=verbose_length,
|
104
|
+
**kwargs,
|
105
|
+
):
|
106
|
+
outs.append(i)
|
107
|
+
if return_analysis:
|
108
|
+
return outs
|
109
|
+
return outs[-1]
|
110
|
+
|
111
|
+
|
112
|
+
async def ReActStream(
|
113
|
+
branch: "Branch",
|
114
|
+
instruct: Instruct | dict[str, Any],
|
115
|
+
interpret: bool = False,
|
116
|
+
interpret_domain: str | None = None,
|
117
|
+
interpret_style: str | None = None,
|
118
|
+
interpret_sample: str | None = None,
|
119
|
+
interpret_model: str | None = None,
|
120
|
+
interpret_kwargs: dict | None = None,
|
121
|
+
tools: Any = None,
|
122
|
+
tool_schemas: Any = None,
|
123
|
+
response_format: type[BaseModel] | BaseModel = None,
|
124
|
+
intermediate_response_options: list[BaseModel] | BaseModel = None,
|
125
|
+
intermediate_listable: bool = False,
|
126
|
+
reasoning_effort: Literal["low", "medium", "high"] = None,
|
127
|
+
extension_allowed: bool = True,
|
128
|
+
max_extensions: int | None = 3,
|
129
|
+
response_kwargs: dict | None = None,
|
130
|
+
analysis_model: iModel | None = None,
|
131
|
+
verbose_analysis: bool = False,
|
132
|
+
display_as: Literal["json", "yaml"] = "yaml",
|
133
|
+
verbose_length: int = None,
|
134
|
+
**kwargs,
|
135
|
+
) -> AsyncGenerator:
|
136
|
+
irfm: FieldModel | None = None
|
137
|
+
|
138
|
+
if intermediate_response_options is not None:
|
139
|
+
iro = (
|
140
|
+
[intermediate_response_options]
|
141
|
+
if not isinstance(intermediate_response_options, list)
|
142
|
+
else intermediate_response_options
|
143
|
+
)
|
144
|
+
field_models = []
|
145
|
+
for i in iro:
|
146
|
+
type_ = validate_model_to_type(None, i)
|
147
|
+
fm = FieldModel(
|
148
|
+
name=str(type_.__name__).lower(),
|
149
|
+
annotation=type_ | None,
|
150
|
+
validator=lambda cls, x: None if x == {} else x,
|
151
|
+
)
|
152
|
+
field_models.append(fm)
|
153
|
+
|
154
|
+
m_ = ModelParams(
|
155
|
+
name="IntermediateResponseOptions", field_models=field_models
|
156
|
+
).create_new_model()
|
157
|
+
|
158
|
+
irfm = FieldModel(
|
159
|
+
name="intermediate_response_options",
|
160
|
+
annotation=(
|
161
|
+
m_ | None if not intermediate_listable else list[m_] | None
|
162
|
+
),
|
163
|
+
description="Optional intermediate deliverable outputs. fill as needed ",
|
164
|
+
validator=lambda cls, x: None if not x else x,
|
165
|
+
)
|
166
|
+
|
167
|
+
# If no tools or tool schemas are provided, default to "all tools"
|
168
|
+
if not tools and not tool_schemas:
|
169
|
+
tools = True
|
170
|
+
|
171
|
+
# Possibly interpret the instruction to refine it
|
172
|
+
instruction_str = None
|
173
|
+
if interpret:
|
174
|
+
instruction_str = await branch.interpret(
|
175
|
+
str(
|
176
|
+
instruct.to_dict()
|
177
|
+
if isinstance(instruct, Instruct)
|
178
|
+
else instruct
|
179
|
+
),
|
180
|
+
domain=interpret_domain,
|
181
|
+
style=interpret_style,
|
182
|
+
sample_writing=interpret_sample,
|
183
|
+
interpret_model=interpret_model,
|
184
|
+
**(interpret_kwargs or {}),
|
185
|
+
)
|
186
|
+
if verbose_analysis:
|
187
|
+
str_ = "\n### Interpreted instruction:\n"
|
188
|
+
str_ += as_readable(
|
189
|
+
instruction_str,
|
190
|
+
md=True,
|
191
|
+
format_curly=True if display_as == "yaml" else False,
|
192
|
+
max_chars=verbose_length,
|
193
|
+
)
|
194
|
+
yield instruction_str, str_
|
195
|
+
else:
|
196
|
+
yield instruction_str
|
197
|
+
|
198
|
+
# Convert Instruct to dict if necessary
|
199
|
+
instruct_dict = (
|
200
|
+
instruct.to_dict()
|
201
|
+
if isinstance(instruct, Instruct)
|
202
|
+
else dict(instruct)
|
203
|
+
)
|
204
|
+
|
205
|
+
# Overwrite "instruction" with the interpreted prompt (if any) plus a note about expansions
|
206
|
+
max_ext_info = f"\nIf needed, you can do up to {max_extensions or 0 if extension_allowed else 0} expansions."
|
207
|
+
instruct_dict["instruction"] = (
|
208
|
+
instruction_str
|
209
|
+
or (instruct_dict.get("instruction") or "") # in case it's missing
|
210
|
+
) + max_ext_info
|
211
|
+
|
212
|
+
# Prepare a copy of user-provided kwargs for the first operate call
|
213
|
+
kwargs_for_operate = copy(kwargs)
|
214
|
+
kwargs_for_operate["actions"] = True
|
215
|
+
kwargs_for_operate["reason"] = True
|
216
|
+
|
217
|
+
# Step 1: Generate initial ReAct analysis
|
218
|
+
analysis: ReActAnalysis = await branch.operate(
|
219
|
+
instruct=instruct_dict,
|
220
|
+
response_format=ReActAnalysis,
|
221
|
+
tools=tools,
|
222
|
+
tool_schemas=tool_schemas,
|
223
|
+
chat_model=analysis_model or branch.chat_model,
|
224
|
+
**kwargs_for_operate,
|
225
|
+
)
|
226
|
+
# If verbose, show round #1 analysis
|
227
|
+
if verbose_analysis:
|
228
|
+
str_ = "\n### ReAct Round No.1 Analysis:\n"
|
229
|
+
str_ += as_readable(
|
230
|
+
analysis,
|
231
|
+
md=True,
|
232
|
+
format_curly=True if display_as == "yaml" else False,
|
233
|
+
max_chars=verbose_length,
|
234
|
+
)
|
235
|
+
yield analysis, str_
|
236
|
+
else:
|
237
|
+
yield analysis
|
238
|
+
|
239
|
+
# Validate and clamp max_extensions if needed
|
240
|
+
if max_extensions and max_extensions > 100:
|
241
|
+
logging.warning(
|
242
|
+
"max_extensions should not exceed 100; defaulting to 100."
|
243
|
+
)
|
244
|
+
max_extensions = 100
|
245
|
+
|
246
|
+
# Step 2: Possibly loop through expansions if extension_needed
|
247
|
+
extensions = max_extensions
|
248
|
+
round_count = 1
|
249
|
+
|
250
|
+
while (
|
251
|
+
extension_allowed and analysis.extension_needed
|
252
|
+
if hasattr(analysis, "extension_needed")
|
253
|
+
else (
|
254
|
+
analysis.get("extension_needed", None)
|
255
|
+
if isinstance(analysis, dict)
|
256
|
+
else False
|
257
|
+
)
|
258
|
+
and (extensions if max_extensions else 0) > 0
|
259
|
+
):
|
260
|
+
new_instruction = None
|
261
|
+
if extensions == max_extensions:
|
262
|
+
new_instruction = ReActAnalysis.FIRST_EXT_PROMPT.format(
|
263
|
+
extensions=extensions
|
264
|
+
)
|
265
|
+
else:
|
266
|
+
new_instruction = ReActAnalysis.CONTINUE_EXT_PROMPT.format(
|
267
|
+
extensions=extensions
|
268
|
+
)
|
269
|
+
|
270
|
+
operate_kwargs = copy(kwargs)
|
271
|
+
operate_kwargs["actions"] = True
|
272
|
+
operate_kwargs["reason"] = True
|
273
|
+
operate_kwargs["response_format"] = ReActAnalysis
|
274
|
+
operate_kwargs["action_strategy"] = analysis.action_strategy
|
275
|
+
if analysis.action_batch_size:
|
276
|
+
operate_kwargs["action_batch_size"] = analysis.action_batch_size
|
277
|
+
if irfm:
|
278
|
+
operate_kwargs["field_models"] = operate_kwargs.get(
|
279
|
+
"field_models", []
|
280
|
+
) + [irfm]
|
281
|
+
if reasoning_effort:
|
282
|
+
guide = None
|
283
|
+
if reasoning_effort == "low":
|
284
|
+
guide = "Quick concise reasoning.\n"
|
285
|
+
if reasoning_effort == "medium":
|
286
|
+
guide = "Reasonably balanced reasoning.\n"
|
287
|
+
if reasoning_effort == "high":
|
288
|
+
guide = "Thorough, try as hard as you can in reasoning.\n"
|
289
|
+
operate_kwargs["guidance"] = guide + operate_kwargs.get(
|
290
|
+
"guidance", ""
|
291
|
+
)
|
292
|
+
|
293
|
+
analysis = await branch.operate(
|
294
|
+
instruction=new_instruction,
|
295
|
+
tools=tools,
|
296
|
+
tool_schemas=tool_schemas,
|
297
|
+
**operate_kwargs,
|
298
|
+
)
|
299
|
+
round_count += 1
|
300
|
+
|
301
|
+
# If verbose, show round analysis
|
302
|
+
if verbose_analysis:
|
303
|
+
str_ = f"\n### ReAct Round No.{round_count} Analysis:\n"
|
304
|
+
|
305
|
+
str_ += as_readable(
|
306
|
+
analysis,
|
307
|
+
md=True,
|
308
|
+
format_curly=True if display_as == "yaml" else False,
|
309
|
+
max_chars=verbose_length,
|
310
|
+
)
|
311
|
+
|
312
|
+
yield analysis, str_
|
313
|
+
else:
|
314
|
+
yield analysis
|
315
|
+
|
316
|
+
if extensions:
|
317
|
+
extensions -= 1
|
318
|
+
|
319
|
+
# Step 3: Produce final answer by calling branch.instruct with an answer prompt
|
320
|
+
answer_prompt = ReActAnalysis.ANSWER_PROMPT.format(
|
321
|
+
instruction=instruct_dict["instruction"]
|
322
|
+
)
|
323
|
+
if not response_format:
|
324
|
+
response_format = Analysis
|
325
|
+
|
326
|
+
try:
|
327
|
+
out = await branch.operate(
|
328
|
+
instruction=answer_prompt,
|
329
|
+
response_format=response_format,
|
330
|
+
**(response_kwargs or {}),
|
331
|
+
)
|
332
|
+
except Exception:
|
333
|
+
out = branch.msgs.last_response.response
|
334
|
+
|
335
|
+
if isinstance(out, Analysis):
|
336
|
+
out = out.answer
|
337
|
+
|
338
|
+
if verbose_analysis:
|
339
|
+
str_ = "\n### ReAct Final Answer:\n"
|
340
|
+
str_ += as_readable(
|
341
|
+
out,
|
342
|
+
md=True,
|
343
|
+
format_curly=True if display_as == "yaml" else False,
|
344
|
+
max_chars=verbose_length,
|
345
|
+
)
|
346
|
+
yield out, str_
|
347
|
+
else:
|
348
|
+
yield out
|
349
|
+
|
350
|
+
|
351
|
+
# TODO: Do partial intermeditate output for longer analysis with form and report
|
@@ -36,7 +36,9 @@ class ReActAnalysis(BaseModel):
|
|
36
36
|
FIRST_EXT_PROMPT: ClassVar[str] = (
|
37
37
|
"You can perform multiple reason-action steps for accuracy. "
|
38
38
|
"If you are not ready to finalize, set extension_needed to True. "
|
39
|
-
"
|
39
|
+
"hint: you should set extension_needed to True if the overall goal"
|
40
|
+
"is not yet achieved. Do not set it to False, if you are just providing"
|
41
|
+
"an interim answer. You have up to {extensions} expansions. Please continue."
|
40
42
|
)
|
41
43
|
CONTINUE_EXT_PROMPT: ClassVar[str] = (
|
42
44
|
"Another round is available. You may do multiple actions if needed. "
|
@@ -49,7 +51,11 @@ class ReActAnalysis(BaseModel):
|
|
49
51
|
|
50
52
|
analysis: str = Field(
|
51
53
|
...,
|
52
|
-
description=
|
54
|
+
description=(
|
55
|
+
"Free-form reasoning or chain-of-thought summary. Must be consistent with"
|
56
|
+
" the plan. Commonly used for divide_and_conquer, brainstorming, reflections, "
|
57
|
+
"regurgitation, review_checkpoints ...etc."
|
58
|
+
),
|
53
59
|
)
|
54
60
|
|
55
61
|
planned_actions: list[PlannedAction] = Field(
|
@@ -79,7 +79,7 @@ class EndpointConfig(BaseModel):
|
|
79
79
|
requires_tokens: bool = False
|
80
80
|
api_version: str | None = None
|
81
81
|
allowed_roles: list[str] | None = None
|
82
|
-
request_options: type | None = None
|
82
|
+
request_options: type | None = Field(None, exclude=True)
|
83
83
|
|
84
84
|
|
85
85
|
class EndPoint(ABC):
|
@@ -1,11 +1,19 @@
|
|
1
1
|
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
2
|
#
|
3
3
|
# SPDX-License-Identifier: Apache-2.0
|
4
|
-
|
4
|
+
import warnings
|
5
5
|
from collections.abc import AsyncGenerator
|
6
6
|
|
7
7
|
from .base import EndPoint
|
8
8
|
|
9
|
+
warnings.filterwarnings(
|
10
|
+
"ignore",
|
11
|
+
message=".*Valid config keys have changed in V2.*",
|
12
|
+
category=UserWarning,
|
13
|
+
module="pydantic._internal._config",
|
14
|
+
)
|
15
|
+
|
16
|
+
|
9
17
|
CHAT_COMPLETION_CONFIG = {
|
10
18
|
"endpoint": "chat/completions",
|
11
19
|
"method": "post",
|
@@ -4,7 +4,6 @@
|
|
4
4
|
|
5
5
|
import asyncio
|
6
6
|
import os
|
7
|
-
import warnings
|
8
7
|
from collections.abc import AsyncGenerator, Callable
|
9
8
|
|
10
9
|
from pydantic import BaseModel
|
@@ -16,13 +15,6 @@ from .endpoints.base import APICalling, EndPoint
|
|
16
15
|
from .endpoints.match_endpoint import match_endpoint
|
17
16
|
from .endpoints.rate_limited_processor import RateLimitedAPIExecutor
|
18
17
|
|
19
|
-
warnings.filterwarnings(
|
20
|
-
"ignore",
|
21
|
-
message=".*Valid config keys have changed in V2.*",
|
22
|
-
category=UserWarning,
|
23
|
-
module="pydantic._internal._config",
|
24
|
-
)
|
25
|
-
|
26
18
|
|
27
19
|
class iModel:
|
28
20
|
"""Manages API calls for a specific provider with optional rate-limiting.
|
@@ -2,6 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# SPDX-License-Identifier: Apache-2.0
|
4
4
|
|
5
|
+
from collections.abc import AsyncGenerator
|
5
6
|
from enum import Enum
|
6
7
|
from typing import TYPE_CHECKING, Any, Literal
|
7
8
|
|
@@ -9,6 +10,7 @@ import pandas as pd
|
|
9
10
|
from jinja2 import Template
|
10
11
|
from pydantic import BaseModel, Field, JsonValue, PrivateAttr
|
11
12
|
|
13
|
+
from lionagi.libs.schema.as_readable import as_readable
|
12
14
|
from lionagi.operatives.types import (
|
13
15
|
ActionManager,
|
14
16
|
FieldModel,
|
@@ -1621,13 +1623,18 @@ class Branch(Element, Communicatable, Relational):
|
|
1621
1623
|
interpret_domain: str | None = None,
|
1622
1624
|
interpret_style: str | None = None,
|
1623
1625
|
interpret_sample: str | None = None,
|
1626
|
+
interpret_model: str | None = None,
|
1624
1627
|
interpret_kwargs: dict | None = None,
|
1625
1628
|
tools: Any = None,
|
1626
1629
|
tool_schemas: Any = None,
|
1627
|
-
response_format: type[BaseModel] = None,
|
1628
|
-
|
1629
|
-
|
1630
|
+
response_format: type[BaseModel] | BaseModel = None,
|
1631
|
+
intermediate_response_options: list[BaseModel] | BaseModel = None,
|
1632
|
+
intermediate_listable: bool = False,
|
1633
|
+
reasoning_effort: Literal["low", "medium", "high"] = None,
|
1634
|
+
extension_allowed: bool = True,
|
1635
|
+
max_extensions: int | None = 3,
|
1630
1636
|
response_kwargs: dict | None = None,
|
1637
|
+
display_as: Literal["json", "yaml"] = "yaml",
|
1631
1638
|
return_analysis: bool = False,
|
1632
1639
|
analysis_model: iModel | None = None,
|
1633
1640
|
verbose: bool = False,
|
@@ -1721,8 +1728,69 @@ class Branch(Element, Communicatable, Relational):
|
|
1721
1728
|
verbose_action=verbose,
|
1722
1729
|
verbose_analysis=verbose,
|
1723
1730
|
verbose_length=verbose_length,
|
1731
|
+
interpret_model=interpret_model,
|
1732
|
+
intermediate_response_options=intermediate_response_options,
|
1733
|
+
intermediate_listable=intermediate_listable,
|
1734
|
+
reasoning_effort=reasoning_effort,
|
1735
|
+
display_as=display_as,
|
1724
1736
|
**kwargs,
|
1725
1737
|
)
|
1726
1738
|
|
1739
|
+
async def ReActStream(
|
1740
|
+
self,
|
1741
|
+
instruct: Instruct | dict[str, Any],
|
1742
|
+
interpret: bool = False,
|
1743
|
+
interpret_domain: str | None = None,
|
1744
|
+
interpret_style: str | None = None,
|
1745
|
+
interpret_sample: str | None = None,
|
1746
|
+
interpret_model: str | None = None,
|
1747
|
+
interpret_kwargs: dict | None = None,
|
1748
|
+
tools: Any = None,
|
1749
|
+
tool_schemas: Any = None,
|
1750
|
+
response_format: type[BaseModel] | BaseModel = None,
|
1751
|
+
intermediate_response_options: list[BaseModel] | BaseModel = None,
|
1752
|
+
intermediate_listable: bool = False,
|
1753
|
+
reasoning_effort: Literal["low", "medium", "high"] = None,
|
1754
|
+
extension_allowed: bool = True,
|
1755
|
+
max_extensions: int | None = 3,
|
1756
|
+
response_kwargs: dict | None = None,
|
1757
|
+
analysis_model: iModel | None = None,
|
1758
|
+
verbose: bool = False,
|
1759
|
+
display_as: Literal["json", "yaml"] = "yaml",
|
1760
|
+
verbose_length: int = None,
|
1761
|
+
**kwargs,
|
1762
|
+
) -> AsyncGenerator:
|
1763
|
+
from lionagi.operations.ReAct.ReAct import ReActStream
|
1764
|
+
|
1765
|
+
async for result in ReActStream(
|
1766
|
+
self,
|
1767
|
+
instruct,
|
1768
|
+
interpret=interpret,
|
1769
|
+
interpret_domain=interpret_domain,
|
1770
|
+
interpret_style=interpret_style,
|
1771
|
+
interpret_sample=interpret_sample,
|
1772
|
+
interpret_model=interpret_model,
|
1773
|
+
interpret_kwargs=interpret_kwargs,
|
1774
|
+
tools=tools,
|
1775
|
+
tool_schemas=tool_schemas,
|
1776
|
+
response_format=response_format,
|
1777
|
+
intermediate_response_options=intermediate_response_options,
|
1778
|
+
intermediate_listable=intermediate_listable,
|
1779
|
+
reasoning_effort=reasoning_effort,
|
1780
|
+
extension_allowed=extension_allowed,
|
1781
|
+
max_extensions=max_extensions,
|
1782
|
+
response_kwargs=response_kwargs,
|
1783
|
+
analysis_model=analysis_model,
|
1784
|
+
verbose_analysis=True,
|
1785
|
+
display_as=display_as,
|
1786
|
+
verbose_length=verbose_length,
|
1787
|
+
**kwargs,
|
1788
|
+
):
|
1789
|
+
analysis, str_ = result
|
1790
|
+
if verbose:
|
1791
|
+
str_ += "\n---------\n"
|
1792
|
+
as_readable(str_, md=True, display_str=True)
|
1793
|
+
yield analysis
|
1794
|
+
|
1727
1795
|
|
1728
1796
|
# File: lionagi/session/branch.py
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.9.2"
|