lionagi 0.11.0__tar.gz → 0.12.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lionagi-0.12.1/.coveragerc +13 -0
- lionagi-0.12.1/.github/workflows/ci.yml +35 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/.github/workflows/docs.yml +3 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/.github/workflows/release.yml +2 -6
- {lionagi-0.11.0 → lionagi-0.12.1}/.gitignore +5 -1
- {lionagi-0.11.0 → lionagi-0.12.1}/PKG-INFO +8 -11
- lionagi-0.12.1/lionagi/adapters/__init__.py +1 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/file.py +1 -1
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/reason.py +1 -1
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/concat.py +6 -1
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/concat_files.py +5 -1
- lionagi-0.12.1/lionagi/libs/file/create_path.py +80 -0
- lionagi-0.12.1/lionagi/libs/file/file_util.py +358 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/save.py +1 -1
- lionagi-0.12.1/lionagi/libs/package/imports.py +190 -0
- lionagi-0.12.1/lionagi/libs/parse/fuzzy_parse_json.py +117 -0
- lionagi-0.12.1/lionagi/libs/parse/to_dict.py +336 -0
- lionagi-0.12.1/lionagi/libs/parse/to_json.py +61 -0
- lionagi-0.12.1/lionagi/libs/parse/to_num.py +378 -0
- lionagi-0.12.1/lionagi/libs/parse/to_xml.py +57 -0
- lionagi-0.12.1/lionagi/libs/parse/xml_parser.py +148 -0
- lionagi-0.12.1/lionagi/libs/schema/breakdown_pydantic_annotation.py +48 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/generic/log.py +2 -1
- lionagi-0.12.1/lionagi/service/providers/exa_/models.py +3 -0
- lionagi-0.12.1/lionagi/service/providers/perplexity_/models.py +5 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/utils.py +123 -921
- lionagi-0.12.1/lionagi/version.py +1 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/pyproject.toml +15 -13
- lionagi-0.12.1/uv.lock +4463 -0
- lionagi-0.11.0/.github/workflows/ci.yml +0 -68
- lionagi-0.11.0/.roomodes +0 -80
- lionagi-0.11.0/lionagi/libs/package/imports.py +0 -21
- lionagi-0.11.0/lionagi/libs/parse.py +0 -30
- lionagi-0.11.0/lionagi/service/providers/exa_/__init__.py +0 -0
- lionagi-0.11.0/lionagi/service/providers/exa_/models.py +0 -160
- lionagi-0.11.0/lionagi/service/providers/perplexity_/models.py +0 -144
- lionagi-0.11.0/lionagi/tools/browser/__init__.py +0 -0
- lionagi-0.11.0/lionagi/tools/browser/providers/browser_use_.py +0 -3
- lionagi-0.11.0/lionagi/tools/code/coder.py +0 -3
- lionagi-0.11.0/lionagi/tools/code/manager.py +0 -3
- lionagi-0.11.0/lionagi/tools/code/providers/__init__.py +0 -3
- lionagi-0.11.0/lionagi/tools/code/providers/aider_.py +0 -3
- lionagi-0.11.0/lionagi/tools/code/providers/e2b_.py +0 -3
- lionagi-0.11.0/lionagi/tools/code/sandbox.py +0 -3
- lionagi-0.11.0/lionagi/tools/file/__init__.py +0 -3
- lionagi-0.11.0/lionagi/tools/file/manager.py +0 -3
- lionagi-0.11.0/lionagi/tools/file/providers/__init__.py +0 -3
- lionagi-0.11.0/lionagi/tools/file/providers/docling_.py +0 -3
- lionagi-0.11.0/lionagi/tools/file/writer.py +0 -3
- lionagi-0.11.0/lionagi/tools/query/__init__.py +0 -3
- lionagi-0.11.0/lionagi/version.py +0 -1
- lionagi-0.11.0/scripts/README.md +0 -15
- lionagi-0.11.0/scripts/concat.py +0 -95
- lionagi-0.11.0/scripts/config.py +0 -18
- lionagi-0.11.0/uv.lock +0 -4025
- {lionagi-0.11.0 → lionagi-0.12.1}/.env.example +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/.github/dependabot.yml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/.pre-commit-config.yaml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/CONTRIBUTING.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/LICENSE +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/README.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/cookbooks/ch01_get_started.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/cookbooks/ch02_concepts.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/dev_tools/count_code_base_lines.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/Makefile +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/_static/custom.css +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/_templates/layout.html +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/conf.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/index.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/action.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/adapter.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/branch.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/concepts.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/element_id.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/event.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/form.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/graph.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/index.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/instruct.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/log.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/mail.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/message.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/models.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/pile.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/processor.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/progression.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/service.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/session.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/modules/utils.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/docs/tutorials/index.rst +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/_class_registry.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/_errors.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/_types.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/adapter.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/json_adapter.py +0 -0
- {lionagi-0.11.0/lionagi/adapters → lionagi-0.12.1/lionagi/adapters/pandas_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/csv_adapter.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/excel_adapter.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/pd_dataframe_adapter.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/pandas_/pd_series_adapter.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/toml_adapter.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/adapters/types.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/action.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/base.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/code.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/fields/research.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.11.0/lionagi/libs/schema → lionagi-0.12.1/lionagi/libs/parse}/__init__.py +0 -0
- {lionagi-0.11.0/lionagi/libs/validate → lionagi-0.12.1/lionagi/libs/schema}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.11.0/lionagi/adapters/pandas_ → lionagi-0.12.1/lionagi/libs/token_transform}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/base.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/token_transform/types.py +0 -0
- {lionagi-0.11.0/lionagi/operations/ReAct → lionagi-0.12.1/lionagi/libs/validate}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/models/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/models/field_model.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/models/model_params.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/models/note.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/models/operable_model.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.11.0/lionagi/operations/_act → lionagi-0.12.1/lionagi/operations/ReAct}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.11.0/lionagi/operations/brainstorm → lionagi-0.12.1/lionagi/operations/_act}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.11.0/lionagi/operations/chat → lionagi-0.12.1/lionagi/operations/brainstorm}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.11.0/lionagi/operations/instruct → lionagi-0.12.1/lionagi/operations/chat}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.11.0/lionagi/libs/token_transform → lionagi-0.12.1/lionagi/operations/communicate}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.11.0/lionagi/operations/interpret → lionagi-0.12.1/lionagi/operations/instruct}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.11.0/lionagi/operations/operate → lionagi-0.12.1/lionagi/operations/interpret}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/manager.py +0 -0
- {lionagi-0.11.0/lionagi/operations/parse → lionagi-0.12.1/lionagi/operations/operate}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.11.0/lionagi/operations/select → lionagi-0.12.1/lionagi/operations/parse}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.11.0/lionagi/protocols → lionagi-0.12.1/lionagi/operations/select}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.11.0/lionagi/operations/communicate → lionagi-0.12.1/lionagi/operations/translate}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/types.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/operations/utils.py +0 -0
- {lionagi-0.11.0/lionagi/protocols/action → lionagi-0.12.1/lionagi/protocols}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.11.0/lionagi/protocols/forms → lionagi-0.12.1/lionagi/protocols/action}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/action/manager.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.11.0/lionagi/protocols/generic → lionagi-0.12.1/lionagi/protocols/forms}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.11.0/lionagi/protocols/graph → lionagi-0.12.1/lionagi/protocols/generic}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.11.0/lionagi/protocols/mail → lionagi-0.12.1/lionagi/protocols/graph}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.11.0/lionagi/protocols/messages → lionagi-0.12.1/lionagi/protocols/mail}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.11.0/lionagi/protocols/operatives → lionagi-0.12.1/lionagi/protocols/messages}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.11.0/lionagi/service/endpoints → lionagi-0.12.1/lionagi/protocols/operatives}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/operatives/operative.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/operatives/step.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/protocols/types.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/__init__.py +0 -0
- {lionagi-0.11.0/lionagi/service/providers → lionagi-0.12.1/lionagi/service/endpoints}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/endpoints/base.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/endpoints/chat_completion.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/endpoints/match_endpoint.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/endpoints/token_calculator.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/imodel.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/manager.py +0 -0
- {lionagi-0.11.0/lionagi/service/providers/anthropic_ → lionagi-0.12.1/lionagi/service/providers}/__init__.py +0 -0
- {lionagi-0.11.0/lionagi/service/providers/groq_ → lionagi-0.12.1/lionagi/service/providers/anthropic_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/anthropic_/messages.py +0 -0
- {lionagi-0.11.0/lionagi/operations/translate → lionagi-0.12.1/lionagi/service/providers/exa_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/exa_/search.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/exa_/types.py +0 -0
- {lionagi-0.11.0/lionagi/service/providers/ollama_ → lionagi-0.12.1/lionagi/service/providers/groq_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/groq_/chat_completions.py +0 -0
- {lionagi-0.11.0/lionagi/service/providers/openai_ → lionagi-0.12.1/lionagi/service/providers/ollama_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/ollama_/chat_completions.py +0 -0
- {lionagi-0.11.0/lionagi/service/providers/openrouter_ → lionagi-0.12.1/lionagi/service/providers/openai_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/openai_/chat_completions.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/openai_/spec.py +0 -0
- {lionagi-0.11.0/lionagi/service/providers/perplexity_ → lionagi-0.12.1/lionagi/service/providers/openrouter_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
- {lionagi-0.11.0/lionagi/session → lionagi-0.12.1/lionagi/service/providers/perplexity_}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/providers/types.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/service/types.py +0 -0
- {lionagi-0.11.0/lionagi/tools → lionagi-0.12.1/lionagi/session}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/session/branch.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/session/prompts.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/session/session.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/settings.py +0 -0
- {lionagi-0.11.0/lionagi/tools/browser/providers → lionagi-0.12.1/lionagi/tools}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/tools/base.py +0 -0
- {lionagi-0.11.0/lionagi/tools/code → lionagi-0.12.1/lionagi/tools/file}/__init__.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/lionagi/tools/types.py +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/prompts/doc_style.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/ips/IP-601.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/ips/IP-602.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/ips/IP-603.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/ips/IP-604.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/tis/TI-601.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/tis/TI-602.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/tis/TI-603.md +0 -0
- {lionagi-0.11.0 → lionagi-0.12.1}/reports/tis/TI-604.md +0 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
name: ci
|
2
|
+
on: [pull_request]
|
3
|
+
permissions:
|
4
|
+
contents: read
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
services:
|
9
|
+
docker:
|
10
|
+
image: docker:dind
|
11
|
+
options: --privileged
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
py: ["3.10", "3.11", "3.12", "3.13"]
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@v4
|
17
|
+
- uses: actions/setup-python@v5
|
18
|
+
with:
|
19
|
+
python-version: "${{ matrix.py }}"
|
20
|
+
- run: pip install uv
|
21
|
+
- name: Create and activate virtual environment
|
22
|
+
run: |
|
23
|
+
uv venv .venv
|
24
|
+
echo "VIRTUAL_ENV=$GITHUB_WORKSPACE/.venv" >> $GITHUB_ENV
|
25
|
+
echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH
|
26
|
+
- name: Install dependencies
|
27
|
+
run: |
|
28
|
+
uv sync --extra all
|
29
|
+
- name: Run tests
|
30
|
+
run: uv run pytest -q --cov=lionagi --cov-report=xml
|
31
|
+
# - name: Upload coverage to Codecov
|
32
|
+
# uses: codecov/codecov-action@v3
|
33
|
+
# with:
|
34
|
+
# token: ${{ secrets.CODECOV_TOKEN }}
|
35
|
+
# fail_ci_if_error: true
|
@@ -27,13 +27,9 @@ jobs:
|
|
27
27
|
|
28
28
|
- name: Install dependencies
|
29
29
|
run: |
|
30
|
-
uv
|
31
|
-
uv build
|
32
|
-
|
30
|
+
uv sync --extra all
|
33
31
|
- name: Run tests
|
34
|
-
run:
|
35
|
-
source .venv/bin/activate
|
36
|
-
uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings tests/
|
32
|
+
run: uv run pytest -q --cov=lionagi --cov-report=xml
|
37
33
|
|
38
34
|
deploy:
|
39
35
|
needs: test
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.12.1
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>
|
6
6
|
License: Apache License
|
@@ -219,22 +219,19 @@ Classifier: Programming Language :: Python :: 3.11
|
|
219
219
|
Classifier: Programming Language :: Python :: 3.12
|
220
220
|
Classifier: Programming Language :: Python :: 3.13
|
221
221
|
Requires-Python: >=3.10
|
222
|
-
Requires-Dist: aiocache>=0.12.0
|
223
|
-
Requires-Dist: aiohttp>=3.11.14
|
224
222
|
Requires-Dist: jinja2>=3.0.0
|
223
|
+
Requires-Dist: khive>=0.2.6
|
225
224
|
Requires-Dist: pandas>=2.0.0
|
226
|
-
Requires-Dist: pillow>=10.0.0
|
227
|
-
Requires-Dist: pydantic>=2.0.0
|
228
|
-
Requires-Dist: python-dotenv>=1.1.0
|
229
225
|
Requires-Dist: tiktoken>=0.8.0
|
230
|
-
|
226
|
+
Provides-Extra: all
|
227
|
+
Requires-Dist: khive[ollama,reader]; extra == 'all'
|
228
|
+
Requires-Dist: litellm; extra == 'all'
|
231
229
|
Provides-Extra: llms
|
232
|
-
Requires-Dist: litellm
|
230
|
+
Requires-Dist: litellm; extra == 'llms'
|
233
231
|
Provides-Extra: ollama
|
234
|
-
Requires-Dist: ollama
|
235
|
-
Requires-Dist: openai>=1.60.0; extra == 'ollama'
|
232
|
+
Requires-Dist: khive[ollama]; extra == 'ollama'
|
236
233
|
Provides-Extra: tools
|
237
|
-
Requires-Dist:
|
234
|
+
Requires-Dist: khive[reader]; extra == 'tools'
|
238
235
|
Description-Content-Type: text/markdown
|
239
236
|
|
240
237
|

|
@@ -0,0 +1 @@
|
|
1
|
+
"""deprecated, will be removed in v0.13.0"""
|
@@ -1,7 +1,12 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
1
5
|
from pathlib import Path
|
2
6
|
from typing import Any
|
3
7
|
|
4
|
-
from lionagi.
|
8
|
+
from lionagi.libs.file.create_path import create_path
|
9
|
+
from lionagi.utils import lcall
|
5
10
|
|
6
11
|
from .process import dir_to_files
|
7
12
|
|
@@ -1,6 +1,10 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
1
5
|
from pathlib import Path
|
2
6
|
|
3
|
-
from lionagi.
|
7
|
+
from lionagi.libs.file.create_path import create_path
|
4
8
|
|
5
9
|
from .process import dir_to_files
|
6
10
|
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
import uuid
|
6
|
+
from datetime import datetime
|
7
|
+
from pathlib import Path
|
8
|
+
|
9
|
+
|
10
|
+
def create_path(
|
11
|
+
directory: Path | str,
|
12
|
+
filename: str,
|
13
|
+
extension: str = None,
|
14
|
+
timestamp: bool = False,
|
15
|
+
dir_exist_ok: bool = True,
|
16
|
+
file_exist_ok: bool = False,
|
17
|
+
time_prefix: bool = False,
|
18
|
+
timestamp_format: str | None = None,
|
19
|
+
random_hash_digits: int = 0,
|
20
|
+
) -> Path:
|
21
|
+
"""
|
22
|
+
Generate a new file path with optional timestamp and a random suffix.
|
23
|
+
|
24
|
+
Args:
|
25
|
+
directory: The directory where the file will be created.
|
26
|
+
filename: The base name of the file to create.
|
27
|
+
extension: The file extension, if not part of filename.
|
28
|
+
timestamp: If True, add a timestamp to the filename.
|
29
|
+
dir_exist_ok: If True, don't error if directory exists.
|
30
|
+
file_exist_ok: If True, allow overwriting existing files.
|
31
|
+
time_prefix: If True, timestamp is prefixed instead of suffixed.
|
32
|
+
timestamp_format: Custom format for timestamp (default: "%Y%m%d%H%M%S").
|
33
|
+
random_hash_digits: Number of hex digits for a random suffix.
|
34
|
+
|
35
|
+
Returns:
|
36
|
+
The full Path to the new or existing file.
|
37
|
+
|
38
|
+
Raises:
|
39
|
+
ValueError: If filename is invalid.
|
40
|
+
FileExistsError: If file exists and file_exist_ok=False.
|
41
|
+
"""
|
42
|
+
if "/" in filename:
|
43
|
+
sub_dir, filename = filename.split("/")[:-1], filename.split("/")[-1]
|
44
|
+
directory = Path(directory) / "/".join(sub_dir)
|
45
|
+
|
46
|
+
if "\\" in filename:
|
47
|
+
raise ValueError("Filename cannot contain directory separators.")
|
48
|
+
|
49
|
+
directory = Path(directory)
|
50
|
+
|
51
|
+
# Extract name and extension from filename if present
|
52
|
+
if "." in filename:
|
53
|
+
name, ext = filename.rsplit(".", 1)
|
54
|
+
else:
|
55
|
+
name, ext = filename, extension
|
56
|
+
|
57
|
+
# Ensure extension has a single leading dot
|
58
|
+
ext = f".{ext.lstrip('.')}" if ext else ""
|
59
|
+
|
60
|
+
# Add timestamp if requested
|
61
|
+
if timestamp:
|
62
|
+
ts_str = datetime.now().strftime(timestamp_format or "%Y%m%d%H%M%S")
|
63
|
+
name = f"{ts_str}_{name}" if time_prefix else f"{name}_{ts_str}"
|
64
|
+
|
65
|
+
# Add random suffix if requested
|
66
|
+
if random_hash_digits > 0:
|
67
|
+
# Use UUID4 and truncate its hex for random suffix
|
68
|
+
random_suffix = uuid.uuid4().hex[:random_hash_digits]
|
69
|
+
name = f"{name}-{random_suffix}"
|
70
|
+
|
71
|
+
full_path = directory / f"{name}{ext}"
|
72
|
+
|
73
|
+
# Check if file or directory existence
|
74
|
+
full_path.parent.mkdir(parents=True, exist_ok=dir_exist_ok)
|
75
|
+
if full_path.exists() and not file_exist_ok:
|
76
|
+
raise FileExistsError(
|
77
|
+
f"File {full_path} already exists and file_exist_ok is False."
|
78
|
+
)
|
79
|
+
|
80
|
+
return full_path
|
@@ -0,0 +1,358 @@
|
|
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 Callable
|
6
|
+
from pathlib import Path
|
7
|
+
from typing import Any, Literal
|
8
|
+
|
9
|
+
|
10
|
+
class FileUtil:
|
11
|
+
|
12
|
+
@staticmethod
|
13
|
+
def chunk_by_chars(
|
14
|
+
text: str,
|
15
|
+
chunk_size: int = 2048,
|
16
|
+
overlap: float = 0,
|
17
|
+
threshold: int = 256,
|
18
|
+
) -> list[str]:
|
19
|
+
from .chunk import chunk_by_chars
|
20
|
+
|
21
|
+
return chunk_by_chars(
|
22
|
+
text,
|
23
|
+
chunk_size=chunk_size,
|
24
|
+
overlap=overlap,
|
25
|
+
threshold=threshold,
|
26
|
+
)
|
27
|
+
|
28
|
+
@staticmethod
|
29
|
+
def chunk_by_tokens(
|
30
|
+
text: str,
|
31
|
+
tokenizer: Callable[[str], list[str]] = str.split,
|
32
|
+
chunk_size: int = 1024,
|
33
|
+
overlap: float = 0,
|
34
|
+
threshold: int = 256,
|
35
|
+
) -> list[str]:
|
36
|
+
from .chunk import chunk_by_tokens
|
37
|
+
|
38
|
+
return chunk_by_tokens(
|
39
|
+
text,
|
40
|
+
tokenizer=tokenizer,
|
41
|
+
chunk_size=chunk_size,
|
42
|
+
overlap=overlap,
|
43
|
+
threshold=threshold,
|
44
|
+
)
|
45
|
+
|
46
|
+
@staticmethod
|
47
|
+
def chunk_content(
|
48
|
+
content: str,
|
49
|
+
chunk_by: Literal["chars", "tokens"] = "chars",
|
50
|
+
tokenizer: Callable[[str], list[str]] = str.split,
|
51
|
+
chunk_size: int = 1024,
|
52
|
+
overlap: float = 0,
|
53
|
+
threshold: int = 256,
|
54
|
+
) -> list[str]:
|
55
|
+
from .chunk import chunk_content
|
56
|
+
|
57
|
+
return chunk_content(
|
58
|
+
content,
|
59
|
+
chunk_by=chunk_by,
|
60
|
+
tokenizer=tokenizer,
|
61
|
+
chunk_size=chunk_size,
|
62
|
+
overlap=overlap,
|
63
|
+
threshold=threshold,
|
64
|
+
)
|
65
|
+
|
66
|
+
@staticmethod
|
67
|
+
def concat_files(
|
68
|
+
data_path: str | Path | list,
|
69
|
+
file_types: list[str],
|
70
|
+
output_dir: str | Path = None,
|
71
|
+
output_filename: str = None,
|
72
|
+
file_exist_ok: bool = True,
|
73
|
+
recursive: bool = True,
|
74
|
+
verbose: bool = True,
|
75
|
+
threshold: int = 0,
|
76
|
+
return_fps: bool = False,
|
77
|
+
return_files: bool = False,
|
78
|
+
**kwargs,
|
79
|
+
) -> (
|
80
|
+
list[str] | str | tuple[list[str], list[Path]] | tuple[str, list[Path]]
|
81
|
+
):
|
82
|
+
from .concat_files import concat_files
|
83
|
+
|
84
|
+
return concat_files(
|
85
|
+
data_path,
|
86
|
+
file_types=file_types,
|
87
|
+
output_dir=output_dir,
|
88
|
+
output_filename=output_filename,
|
89
|
+
file_exist_ok=file_exist_ok,
|
90
|
+
recursive=recursive,
|
91
|
+
verbose=verbose,
|
92
|
+
threshold=threshold,
|
93
|
+
return_fps=return_fps,
|
94
|
+
return_files=return_files,
|
95
|
+
**kwargs,
|
96
|
+
)
|
97
|
+
|
98
|
+
@staticmethod
|
99
|
+
def concat(
|
100
|
+
data_path: str | Path | list,
|
101
|
+
file_types: list[str],
|
102
|
+
output_dir: str | Path = None,
|
103
|
+
output_filename: str = None,
|
104
|
+
file_exist_ok: bool = True,
|
105
|
+
recursive: bool = True,
|
106
|
+
verbose: bool = True,
|
107
|
+
threshold: int = 0,
|
108
|
+
return_fps: bool = False,
|
109
|
+
return_files: bool = False,
|
110
|
+
exclude_patterns: list[str] = None,
|
111
|
+
**kwargs,
|
112
|
+
) -> dict[str, Any]:
|
113
|
+
from .concat import concat
|
114
|
+
|
115
|
+
return concat(
|
116
|
+
data_path,
|
117
|
+
file_types=file_types,
|
118
|
+
output_dir=output_dir,
|
119
|
+
output_filename=output_filename,
|
120
|
+
file_exist_ok=file_exist_ok,
|
121
|
+
recursive=recursive,
|
122
|
+
verbose=verbose,
|
123
|
+
threshold=threshold,
|
124
|
+
return_fps=return_fps,
|
125
|
+
return_files=return_files,
|
126
|
+
exclude_patterns=exclude_patterns,
|
127
|
+
**kwargs,
|
128
|
+
)
|
129
|
+
|
130
|
+
@staticmethod
|
131
|
+
def copy_file(src: Path | str, dest: Path | str) -> None:
|
132
|
+
from .file_ops import copy_file
|
133
|
+
|
134
|
+
copy_file(src, dest)
|
135
|
+
|
136
|
+
@staticmethod
|
137
|
+
def get_file_size(path: Path | str) -> int:
|
138
|
+
from .file_ops import get_file_size
|
139
|
+
|
140
|
+
return get_file_size(path)
|
141
|
+
|
142
|
+
@staticmethod
|
143
|
+
def list_files(
|
144
|
+
dir_path: Path | str, extension: str | None = None
|
145
|
+
) -> list[Path]:
|
146
|
+
from .file_ops import list_files
|
147
|
+
|
148
|
+
return list_files(dir_path, extension=extension)
|
149
|
+
|
150
|
+
@staticmethod
|
151
|
+
def read_file(file_path: Path | str, encoding: str = "utf-8") -> str:
|
152
|
+
from .file_ops import read_file
|
153
|
+
|
154
|
+
return read_file(file_path, encoding=encoding)
|
155
|
+
|
156
|
+
@staticmethod
|
157
|
+
def read_image_to_base64(image_path: str | Path) -> str:
|
158
|
+
import base64
|
159
|
+
|
160
|
+
import cv2 # type: ignore[import]
|
161
|
+
|
162
|
+
image_path = str(image_path)
|
163
|
+
image = cv2.imread(image_path, cv2.COLOR_BGR2RGB)
|
164
|
+
|
165
|
+
if image is None:
|
166
|
+
raise ValueError(f"Could not read image from path: {image_path}")
|
167
|
+
|
168
|
+
file_extension = "." + image_path.split(".")[-1]
|
169
|
+
|
170
|
+
success, buffer = cv2.imencode(file_extension, image)
|
171
|
+
if not success:
|
172
|
+
raise ValueError(
|
173
|
+
f"Could not encode image to {file_extension} format."
|
174
|
+
)
|
175
|
+
encoded_image = base64.b64encode(buffer).decode("utf-8")
|
176
|
+
return encoded_image
|
177
|
+
|
178
|
+
@staticmethod
|
179
|
+
def pdf_to_images(
|
180
|
+
pdf_path: str, output_folder: str, dpi: int = 300, fmt: str = "jpeg"
|
181
|
+
) -> list:
|
182
|
+
"""
|
183
|
+
Convert a PDF file into images, one image per page.
|
184
|
+
|
185
|
+
Args:
|
186
|
+
pdf_path (str): Path to the input PDF file.
|
187
|
+
output_folder (str): Directory to save the output images.
|
188
|
+
dpi (int): Dots per inch (resolution) for conversion (default: 300).
|
189
|
+
fmt (str): Image format (default: 'jpeg'). Use 'png' if preferred.
|
190
|
+
|
191
|
+
Returns:
|
192
|
+
list: A list of file paths for the saved images.
|
193
|
+
"""
|
194
|
+
import os
|
195
|
+
|
196
|
+
from lionagi.utils import check_import
|
197
|
+
|
198
|
+
convert_from_path = check_import(
|
199
|
+
"pdf2image", import_name="convert_from_path"
|
200
|
+
)
|
201
|
+
|
202
|
+
# Ensure the output folder exists
|
203
|
+
os.makedirs(output_folder, exist_ok=True)
|
204
|
+
|
205
|
+
# Convert PDF to a list of PIL Image objects
|
206
|
+
images = convert_from_path(pdf_path, dpi=dpi)
|
207
|
+
|
208
|
+
saved_paths = []
|
209
|
+
for i, image in enumerate(images):
|
210
|
+
# Construct the output file name
|
211
|
+
image_file = os.path.join(output_folder, f"page_{i + 1}.{fmt}")
|
212
|
+
image.save(image_file, fmt.upper())
|
213
|
+
saved_paths.append(image_file)
|
214
|
+
|
215
|
+
return saved_paths
|
216
|
+
|
217
|
+
@staticmethod
|
218
|
+
def dir_to_files(
|
219
|
+
directory: str | Path,
|
220
|
+
file_types: list[str] | None = None,
|
221
|
+
max_workers: int | None = None,
|
222
|
+
ignore_errors: bool = False,
|
223
|
+
verbose: bool = False,
|
224
|
+
recursive: bool = False,
|
225
|
+
) -> list[Path]:
|
226
|
+
from .process import dir_to_files
|
227
|
+
|
228
|
+
return dir_to_files(
|
229
|
+
directory,
|
230
|
+
file_types=file_types,
|
231
|
+
max_workers=max_workers,
|
232
|
+
ignore_errors=ignore_errors,
|
233
|
+
verbose=verbose,
|
234
|
+
recursive=recursive,
|
235
|
+
)
|
236
|
+
|
237
|
+
@staticmethod
|
238
|
+
def file_to_chunks(
|
239
|
+
file_path: str | Path,
|
240
|
+
chunk_by: Literal["chars", "tokens"] = "chars",
|
241
|
+
chunk_size: int = 1500,
|
242
|
+
overlap: float = 0.1,
|
243
|
+
threshold: int = 200,
|
244
|
+
encoding: str = "utf-8",
|
245
|
+
custom_metadata: dict[str, Any] | None = None,
|
246
|
+
output_dir: str | Path | None = None,
|
247
|
+
verbose: bool = False,
|
248
|
+
timestamp: bool = True,
|
249
|
+
random_hash_digits: int = 4,
|
250
|
+
as_node: bool = False,
|
251
|
+
) -> list[dict[str, Any]]:
|
252
|
+
from .file_ops import file_to_chunks
|
253
|
+
|
254
|
+
return file_to_chunks(
|
255
|
+
file_path,
|
256
|
+
chunk_by=chunk_by,
|
257
|
+
chunk_size=chunk_size,
|
258
|
+
overlap=overlap,
|
259
|
+
threshold=threshold,
|
260
|
+
encoding=encoding,
|
261
|
+
custom_metadata=custom_metadata,
|
262
|
+
output_dir=output_dir,
|
263
|
+
verbose=verbose,
|
264
|
+
timestamp=timestamp,
|
265
|
+
random_hash_digits=random_hash_digits,
|
266
|
+
as_node=as_node,
|
267
|
+
)
|
268
|
+
|
269
|
+
@staticmethod
|
270
|
+
def chunk(
|
271
|
+
*,
|
272
|
+
text: str | None = None,
|
273
|
+
url_or_path: str | Path = None,
|
274
|
+
file_types: list[str] | None = None, # only local files
|
275
|
+
recursive: bool = False, # only local files
|
276
|
+
tokenizer: Callable[[str], list[str]] = None,
|
277
|
+
chunk_by: Literal["chars", "tokens"] = "chars",
|
278
|
+
chunk_size: int = 1500,
|
279
|
+
overlap: float = 0.1,
|
280
|
+
threshold: int = 200,
|
281
|
+
output_file: str | Path | None = None,
|
282
|
+
metadata: dict[str, Any] | None = None,
|
283
|
+
reader_tool: Callable = None,
|
284
|
+
as_node: bool = False,
|
285
|
+
) -> list:
|
286
|
+
from .process import chunk
|
287
|
+
|
288
|
+
return chunk(
|
289
|
+
text=text,
|
290
|
+
url_or_path=url_or_path,
|
291
|
+
file_types=file_types,
|
292
|
+
recursive=recursive,
|
293
|
+
tokenizer=tokenizer,
|
294
|
+
chunk_by=chunk_by,
|
295
|
+
chunk_size=chunk_size,
|
296
|
+
overlap=overlap,
|
297
|
+
threshold=threshold,
|
298
|
+
output_file=output_file,
|
299
|
+
metadata=metadata,
|
300
|
+
reader_tool=reader_tool,
|
301
|
+
as_node=as_node,
|
302
|
+
)
|
303
|
+
|
304
|
+
@staticmethod
|
305
|
+
def save_to_file(
|
306
|
+
text: str,
|
307
|
+
directory: str | Path,
|
308
|
+
filename: str,
|
309
|
+
extension: str = "txt",
|
310
|
+
timestamp: bool = True,
|
311
|
+
dir_exist_ok: bool = True,
|
312
|
+
file_exist_ok: bool = True,
|
313
|
+
time_prefix: bool = False,
|
314
|
+
timestamp_format: str = "%Y%m%d_%H%M%S",
|
315
|
+
random_hash_digits: int = 4,
|
316
|
+
verbose: bool = False,
|
317
|
+
) -> Path:
|
318
|
+
from .save import save_to_file
|
319
|
+
|
320
|
+
return save_to_file(
|
321
|
+
text,
|
322
|
+
directory=directory,
|
323
|
+
filename=filename,
|
324
|
+
extension=extension,
|
325
|
+
timestamp=timestamp,
|
326
|
+
dir_exist_ok=dir_exist_ok,
|
327
|
+
file_exist_ok=file_exist_ok,
|
328
|
+
time_prefix=time_prefix,
|
329
|
+
timestamp_format=timestamp_format,
|
330
|
+
random_hash_digits=random_hash_digits,
|
331
|
+
verbose=verbose,
|
332
|
+
)
|
333
|
+
|
334
|
+
@staticmethod
|
335
|
+
def create_path(
|
336
|
+
directory: Path | str,
|
337
|
+
filename: str,
|
338
|
+
extension: str = None,
|
339
|
+
timestamp: bool = False,
|
340
|
+
dir_exist_ok: bool = True,
|
341
|
+
file_exist_ok: bool = False,
|
342
|
+
time_prefix: bool = False,
|
343
|
+
timestamp_format: str | None = None,
|
344
|
+
random_hash_digits: int = 0,
|
345
|
+
) -> Path:
|
346
|
+
from .create_path import create_path
|
347
|
+
|
348
|
+
return create_path(
|
349
|
+
directory=directory,
|
350
|
+
filename=filename,
|
351
|
+
extension=extension,
|
352
|
+
timestamp=timestamp,
|
353
|
+
dir_exist_ok=dir_exist_ok,
|
354
|
+
file_exist_ok=file_exist_ok,
|
355
|
+
time_prefix=time_prefix,
|
356
|
+
timestamp_format=timestamp_format,
|
357
|
+
random_hash_digits=random_hash_digits,
|
358
|
+
)
|