lionagi 0.9.3__tar.gz → 0.9.4__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.3 → lionagi-0.9.4}/PKG-INFO +1 -1
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/process.py +7 -1
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/save.py +1 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/reader.py +72 -22
- lionagi-0.9.4/lionagi/tools/query/__init__.py +3 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/utils.py +6 -5
- lionagi-0.9.4/lionagi/version.py +1 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/pyproject.toml +1 -1
- {lionagi-0.9.3 → lionagi-0.9.4}/uv.lock +1 -1
- lionagi-0.9.3/lionagi/version.py +0 -1
- {lionagi-0.9.3 → lionagi-0.9.4}/.env.example +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.github/FUNDING.yml +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.github/dependabot.yml +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/ci.yml +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/docs.yml +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/release.yml +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.gitignore +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/.pre-commit-config.yaml +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/CONTRIBUTING.md +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/LICENSE +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/README.md +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/cookbooks/ch01_get_started.md +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/cookbooks/ch02_concepts.md +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/dev_tools/count_code_base_lines.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/Makefile +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/_static/custom.css +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/_templates/layout.html +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/conf.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/index.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/action.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/adapter.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/branch.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/concepts.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/element_id.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/event.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/form.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/graph.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/index.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/instruct.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/log.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/mail.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/message.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/models.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/pile.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/processor.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/progression.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/service.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/session.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/utils.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/index.rst +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/_class_registry.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/_errors.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/_types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/imports.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/parse.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/translate/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/utils.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/function_calling.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/request_response_model.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/tool.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/utils.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/base.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/flow.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/form.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/report.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/base.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/instruct.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/instruct_collection.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/node.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/prompts.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/reason.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/field_model.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/model_params.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/note.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/operable_model.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/schema_model.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/operative.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/step.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/base.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/concurrent.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/concurrent_chunk.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/concurrent_sequential_chunk.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/params.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/sequential.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/sequential_chunk.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/sequential_concurrent_chunk.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/utils.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/adapter.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/json_adapter.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/csv_adapter.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/excel_adapter.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/pd_dataframe_adapter.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/pd_series_adapter.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/base.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/chat_completion.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/match_endpoint.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/token_calculator.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/imodel.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/anthropic_/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/anthropic_/messages.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/models.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/search.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/groq_/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/groq_/chat_completions.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openai_/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openai_/chat_completions.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openrouter_/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/perplexity_/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/perplexity_/models.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/branch.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/prompts.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/session.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/settings.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/base.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/browser/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/browser/providers/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/browser/providers/browser_use_.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/coder.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/providers/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/providers/aider_.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/providers/e2b_.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/sandbox.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/manager.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/providers/__init__.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/providers/docling_.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/writer.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/types.py +0 -0
- {lionagi-0.9.3 → lionagi-0.9.4}/prompts/doc_style.md +0 -0
@@ -18,6 +18,7 @@ def dir_to_files(
|
|
18
18
|
max_workers: int | None = None,
|
19
19
|
ignore_errors: bool = False,
|
20
20
|
verbose: bool = False,
|
21
|
+
recursive: bool = False,
|
21
22
|
) -> list[Path]:
|
22
23
|
"""
|
23
24
|
Recursively process a directory and return a list of file paths.
|
@@ -33,6 +34,8 @@ def dir_to_files(
|
|
33
34
|
If None, uses the default ThreadPoolExecutor behavior.
|
34
35
|
ignore_errors (bool): If True, log warnings for errors instead of raising exceptions.
|
35
36
|
verbose (bool): If True, print verbose output.
|
37
|
+
recursive (bool): If True, process directories recursively (the default).
|
38
|
+
If False, only process files in the top-level directory.
|
36
39
|
|
37
40
|
Returns:
|
38
41
|
List[Path]: A list of Path objects representing the files found.
|
@@ -58,11 +61,14 @@ def dir_to_files(
|
|
58
61
|
raise ValueError(f"Error processing {file_path}: {e}") from e
|
59
62
|
return None
|
60
63
|
|
64
|
+
file_iterator = (
|
65
|
+
directory_path.rglob("*") if recursive else directory_path.glob("*")
|
66
|
+
)
|
61
67
|
try:
|
62
68
|
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
63
69
|
futures = [
|
64
70
|
executor.submit(process_file, f)
|
65
|
-
for f in
|
71
|
+
for f in file_iterator
|
66
72
|
if f.is_file()
|
67
73
|
]
|
68
74
|
files = [
|
@@ -8,6 +8,7 @@ from enum import Enum
|
|
8
8
|
from pydantic import BaseModel, Field, model_validator
|
9
9
|
|
10
10
|
from lionagi.operatives.action.tool import Tool
|
11
|
+
from lionagi.service.endpoints.token_calculator import TokenCalculator
|
11
12
|
from lionagi.utils import to_num
|
12
13
|
|
13
14
|
from ..base import LionTool
|
@@ -18,10 +19,12 @@ class ReaderAction(str, Enum):
|
|
18
19
|
This enumeration indicates the *type* of action the LLM wants to perform.
|
19
20
|
- 'open': Convert a file/URL to text and store it internally for partial reads
|
20
21
|
- 'read': Return a partial slice of the already-opened doc
|
22
|
+
- 'list_dir': List all files in a directory and store it internally for partial reads
|
21
23
|
"""
|
22
24
|
|
23
25
|
open = "open"
|
24
26
|
read = "read"
|
27
|
+
list_dir = "list_dir"
|
25
28
|
|
26
29
|
|
27
30
|
class ReaderRequest(BaseModel):
|
@@ -39,6 +42,7 @@ class ReaderRequest(BaseModel):
|
|
39
42
|
"Action to perform. Must be one of: "
|
40
43
|
"- 'open': Convert a file/URL to text and store it internally for partial reads. "
|
41
44
|
"- 'read': Return a partial slice of the already-opened doc."
|
45
|
+
"- 'list_dir': List all files in a directory."
|
42
46
|
),
|
43
47
|
)
|
44
48
|
|
@@ -54,7 +58,8 @@ class ReaderRequest(BaseModel):
|
|
54
58
|
None,
|
55
59
|
description=(
|
56
60
|
"Unique ID referencing a previously opened document. "
|
57
|
-
"This field is REQUIRED if action='read'.
|
61
|
+
"This field is REQUIRED if action='read'. Else leave it None."
|
62
|
+
"this field starts with 'DOC_' for document and 'DIR_' for directory listing."
|
58
63
|
),
|
59
64
|
)
|
60
65
|
|
@@ -74,6 +79,22 @@ class ReaderRequest(BaseModel):
|
|
74
79
|
),
|
75
80
|
)
|
76
81
|
|
82
|
+
recursive: bool = Field(
|
83
|
+
False,
|
84
|
+
description=(
|
85
|
+
"Whether to recursively list files in subdirectories. Defaults to False."
|
86
|
+
"Only used if action='list_dir'."
|
87
|
+
),
|
88
|
+
)
|
89
|
+
|
90
|
+
file_types: list[str] | None = Field(
|
91
|
+
None,
|
92
|
+
description=(
|
93
|
+
"List files with specific extensions. "
|
94
|
+
"If omitted or None, list all files. Only used if action='list_dir'."
|
95
|
+
),
|
96
|
+
)
|
97
|
+
|
77
98
|
@model_validator(mode="before")
|
78
99
|
def _validate_request(cls, values):
|
79
100
|
for k, v in values.items():
|
@@ -96,6 +117,7 @@ class DocumentInfo(BaseModel):
|
|
96
117
|
|
97
118
|
doc_id: str
|
98
119
|
length: int | None = None
|
120
|
+
num_tokens: int | None = None
|
99
121
|
|
100
122
|
|
101
123
|
class PartialChunk(BaseModel):
|
@@ -150,17 +172,17 @@ class ReaderTool(LionTool):
|
|
150
172
|
is_lion_system_tool = True
|
151
173
|
system_tool_name = "reader_tool"
|
152
174
|
|
153
|
-
|
175
|
+
def __init__(self):
|
176
|
+
from lionagi.libs.package.imports import check_import
|
154
177
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
178
|
+
DocumentConverter = check_import(
|
179
|
+
"docling",
|
180
|
+
module_name="document_converter",
|
181
|
+
import_name="DocumentConverter",
|
182
|
+
)
|
160
183
|
|
161
|
-
def __init__(self):
|
162
184
|
super().__init__()
|
163
|
-
self.converter =
|
185
|
+
self.converter = DocumentConverter()
|
164
186
|
self.documents = {} # doc_id -> (temp_file_path, doc_length)
|
165
187
|
self._tool = None
|
166
188
|
|
@@ -174,23 +196,18 @@ class ReaderTool(LionTool):
|
|
174
196
|
request = ReaderRequest(**request)
|
175
197
|
if request.action == "open":
|
176
198
|
return self._open_doc(request.path_or_url)
|
177
|
-
|
199
|
+
if request.action == "read":
|
178
200
|
return self._read_doc(
|
179
201
|
request.doc_id, request.start_offset, request.end_offset
|
180
202
|
)
|
203
|
+
if request.action == "list_dir":
|
204
|
+
return self._list_dir(
|
205
|
+
request.path_or_url, request.recursive, request.file_types
|
206
|
+
)
|
181
207
|
else:
|
182
208
|
return ReaderResponse(success=False, error="Unknown action type")
|
183
209
|
|
184
|
-
def
|
185
|
-
try:
|
186
|
-
result = self.converter.convert(source)
|
187
|
-
text = result.document.export_to_markdown()
|
188
|
-
except Exception as e:
|
189
|
-
return ReaderResponse(
|
190
|
-
success=False, error=f"Conversion error: {str(e)}"
|
191
|
-
)
|
192
|
-
|
193
|
-
doc_id = f"DOC_{abs(hash(source))}"
|
210
|
+
def _save_to_temp(self, text, doc_id):
|
194
211
|
temp_file = tempfile.NamedTemporaryFile(
|
195
212
|
delete=False, mode="w", encoding="utf-8"
|
196
213
|
)
|
@@ -202,9 +219,26 @@ class ReaderTool(LionTool):
|
|
202
219
|
self.documents[doc_id] = (temp_file.name, doc_len)
|
203
220
|
|
204
221
|
return ReaderResponse(
|
205
|
-
success=True,
|
222
|
+
success=True,
|
223
|
+
doc_info=DocumentInfo(
|
224
|
+
doc_id=doc_id,
|
225
|
+
length=doc_len,
|
226
|
+
num_tokens=TokenCalculator.tokenize(text),
|
227
|
+
),
|
206
228
|
)
|
207
229
|
|
230
|
+
def _open_doc(self, source: str) -> ReaderResponse:
|
231
|
+
try:
|
232
|
+
result = self.converter.convert(source)
|
233
|
+
text = result.document.export_to_markdown()
|
234
|
+
except Exception as e:
|
235
|
+
return ReaderResponse(
|
236
|
+
success=False, error=f"Conversion error: {str(e)}"
|
237
|
+
)
|
238
|
+
|
239
|
+
doc_id = f"DOC_{abs(hash(source))}"
|
240
|
+
return self._save_to_temp(text, doc_id)
|
241
|
+
|
208
242
|
def _read_doc(self, doc_id: str, start: int, end: int) -> ReaderResponse:
|
209
243
|
if doc_id not in self.documents:
|
210
244
|
return ReaderResponse(
|
@@ -230,14 +264,30 @@ class ReaderTool(LionTool):
|
|
230
264
|
chunk=PartialChunk(start_offset=s, end_offset=e, content=content),
|
231
265
|
)
|
232
266
|
|
267
|
+
def _list_dir(
|
268
|
+
self,
|
269
|
+
directory: str,
|
270
|
+
recursive: bool = False,
|
271
|
+
file_types: list[str] | None = None,
|
272
|
+
):
|
273
|
+
from lionagi.libs.file.process import dir_to_files
|
274
|
+
|
275
|
+
files = dir_to_files(
|
276
|
+
directory, recursive=recursive, file_types=file_types
|
277
|
+
)
|
278
|
+
files = "\n".join([str(f) for f in files])
|
279
|
+
doc_id = f"DIR_{abs(hash(directory))}"
|
280
|
+
return self._save_to_temp(files, doc_id)
|
281
|
+
|
233
282
|
def to_tool(self):
|
234
283
|
if self._tool is None:
|
235
284
|
|
236
285
|
def reader_tool(**kwargs):
|
237
286
|
"""
|
238
|
-
A function that takes ReaderRequest to
|
287
|
+
A function that takes ReaderRequest to do one of:
|
239
288
|
- open a doc (File/URL) -> returns doc_id, doc length
|
240
289
|
- read partial text from doc -> returns chunk
|
290
|
+
- list all files in a directory -> returns list of files as doc format
|
241
291
|
"""
|
242
292
|
return self.handle_request(
|
243
293
|
ReaderRequest(**kwargs)
|
@@ -1022,10 +1022,14 @@ def create_path(
|
|
1022
1022
|
The full Path to the new or existing file.
|
1023
1023
|
|
1024
1024
|
Raises:
|
1025
|
-
ValueError: If
|
1025
|
+
ValueError: If filename is invalid.
|
1026
1026
|
FileExistsError: If file exists and file_exist_ok=False.
|
1027
1027
|
"""
|
1028
|
-
if "/" in filename
|
1028
|
+
if "/" in filename:
|
1029
|
+
sub_dir, filename = filename.split("/")[:-1], filename.split("/")[-1]
|
1030
|
+
directory = Path(directory) / "/".join(sub_dir)
|
1031
|
+
|
1032
|
+
if "\\" in filename:
|
1029
1033
|
raise ValueError("Filename cannot contain directory separators.")
|
1030
1034
|
|
1031
1035
|
directory = Path(directory)
|
@@ -1036,9 +1040,6 @@ def create_path(
|
|
1036
1040
|
else:
|
1037
1041
|
name, ext = filename, extension
|
1038
1042
|
|
1039
|
-
if not ext:
|
1040
|
-
raise ValueError("No extension provided for filename.")
|
1041
|
-
|
1042
1043
|
# Ensure extension has a single leading dot
|
1043
1044
|
ext = f".{ext.lstrip('.')}" if ext else ""
|
1044
1045
|
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.9.4"
|
lionagi-0.9.3/lionagi/version.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.9.3"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|