lionagi 0.13.0__tar.gz → 0.13.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.13.0 → lionagi-0.13.2}/PKG-INFO +9 -2
- {lionagi-0.13.0 → lionagi-0.13.2}/README.md +1 -1
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/_errors.py +4 -0
- lionagi-0.13.2/lionagi/libs/schema/as_readable.py +396 -0
- lionagi-0.13.2/lionagi/models/field_model.py +683 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/models/model_params.py +17 -8
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/models/operable_model.py +4 -2
- lionagi-0.13.2/lionagi/protocols/operatives/operative.py +339 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/operatives/step.py +2 -1
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/providers/claude_code_.py +194 -20
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/providers/oai_.py +1 -13
- lionagi-0.13.2/lionagi/traits/__init__.py +58 -0
- lionagi-0.13.2/lionagi/traits/base.py +216 -0
- lionagi-0.13.2/lionagi/traits/composer.py +343 -0
- lionagi-0.13.2/lionagi/traits/protocols.py +495 -0
- lionagi-0.13.2/lionagi/traits/registry.py +1071 -0
- lionagi-0.13.2/lionagi/version.py +1 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/pyproject.toml +13 -2
- {lionagi-0.13.0 → lionagi-0.13.2}/uv.lock +339 -85
- lionagi-0.13.0/lionagi/libs/schema/as_readable.py +0 -174
- lionagi-0.13.0/lionagi/models/field_model.py +0 -212
- lionagi-0.13.0/lionagi/protocols/operatives/operative.py +0 -170
- lionagi-0.13.0/lionagi/version.py +0 -1
- {lionagi-0.13.0 → lionagi-0.13.2}/.coveragerc +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.env.example +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.github/FUNDING.yml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.github/dependabot.yml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.github/workflows/ci.yml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.github/workflows/docs.yml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.github/workflows/release.yml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.gitignore +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.pre-commit-config.yaml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/.python-version +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/CONTRIBUTING.md +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/LICENSE +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/cookbooks/ch01_get_started.md +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/cookbooks/ch02_concepts.md +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/Makefile +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/_static/custom.css +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/_templates/layout.html +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/conf.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/index.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/action.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/adapter.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/branch.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/branch_operations.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/concepts.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/element_id.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/event.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/form.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/graph.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/index.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/instruct.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/lib_file.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/lib_nested.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/lib_package.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/lib_schema.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/lib_validate.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/log.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/mail.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/message.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/models.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/operative_step.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/pile.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/processor.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/progression.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/service.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/session.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/modules/utils.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/tutorials/get_started.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/tutorials/get_started_pt2.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/tutorials/get_started_pt3.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/docs/tutorials/index.rst +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/_class_registry.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/_types.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/config.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/action.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/base.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/code.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/file.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/reason.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/fields/research.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/concat.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/concat_files.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/file_ops.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/params.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/file/save.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/flatten.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/nfilter.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/nget.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/ninsert.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/nmerge.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/npop.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/nset.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/unflatten.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/nested/utils.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/package/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/package/imports.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/package/management.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/package/params.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/package/system.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/parse.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/schema/json_schema.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/base.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/llmlingua.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/perplexity.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/token_transform/types.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/validate/string_similarity.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/models/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/models/note.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/manager.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/translate/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/translate/translate.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/types.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/operations/utils.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/action/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/action/manager.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/forms/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/operatives/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/protocols/types.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/py.typed +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/api_calling.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/endpoint.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/endpoint_config.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/header_factory.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/match_endpoint.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/providers/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/providers/anthropic_.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/providers/exa_.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/providers/ollama_.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/connections/providers/perplexity_.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/imodel.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/manager.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/rate_limited_processor.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/resilience.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/third_party/README.md +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/third_party/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/third_party/anthropic_models.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/third_party/exa_models.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/third_party/openai_models.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/third_party/pplx_models.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/token_calculator.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/service/types.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/session/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/session/branch.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/session/prompts.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/session/session.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/settings.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/tools/base.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/tools/memory/tools.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/tools/types.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/lionagi/utils.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/main.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/scripts/README.md +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/scripts/concat.py +0 -0
- {lionagi-0.13.0 → lionagi-0.13.2}/scripts/config.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.13.
|
3
|
+
Version: 0.13.2
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>, Liangbingyan Luo <llby_luo@outlook.com>
|
6
6
|
License: Apache License
|
@@ -224,6 +224,7 @@ Requires-Dist: aiohttp>=3.12.0
|
|
224
224
|
Requires-Dist: backoff>=2.2.1
|
225
225
|
Requires-Dist: jinja2>=3.1.0
|
226
226
|
Requires-Dist: pillow>=11.0.0
|
227
|
+
Requires-Dist: psutil>=7.0.0
|
227
228
|
Requires-Dist: pydantic-settings>=2.8.0
|
228
229
|
Requires-Dist: pydapter[pandas]>=0.3.2
|
229
230
|
Requires-Dist: python-dotenv>=1.1.0
|
@@ -232,7 +233,9 @@ Requires-Dist: toml>=0.9.0
|
|
232
233
|
Provides-Extra: all
|
233
234
|
Requires-Dist: claude-code-sdk>=0.0.14; extra == 'all'
|
234
235
|
Requires-Dist: docling>=2.15.1; extra == 'all'
|
236
|
+
Requires-Dist: fastmcp>=2.10.5; extra == 'all'
|
235
237
|
Requires-Dist: ollama>=0.5.0; extra == 'all'
|
238
|
+
Requires-Dist: rich>=13.0.0; extra == 'all'
|
236
239
|
Provides-Extra: claude-code
|
237
240
|
Requires-Dist: claude-code-sdk>=0.0.14; extra == 'claude-code'
|
238
241
|
Provides-Extra: docs
|
@@ -243,10 +246,14 @@ Provides-Extra: lint
|
|
243
246
|
Requires-Dist: black[jupyter]>=24.10.0; extra == 'lint'
|
244
247
|
Requires-Dist: isort>=5.13.2; extra == 'lint'
|
245
248
|
Requires-Dist: pre-commit>=4.0.1; extra == 'lint'
|
249
|
+
Provides-Extra: mcp
|
250
|
+
Requires-Dist: fastmcp>=2.10.5; extra == 'mcp'
|
246
251
|
Provides-Extra: ollama
|
247
252
|
Requires-Dist: ollama>=0.5.0; extra == 'ollama'
|
248
253
|
Provides-Extra: reader
|
249
254
|
Requires-Dist: docling>=2.15.1; extra == 'reader'
|
255
|
+
Provides-Extra: rich
|
256
|
+
Requires-Dist: rich>=13.0.0; extra == 'rich'
|
250
257
|
Provides-Extra: test
|
251
258
|
Requires-Dist: pytest-asyncio>=1.0.0; extra == 'test'
|
252
259
|
Requires-Dist: pytest>=8.3.4; extra == 'test'
|
@@ -264,7 +271,7 @@ Description-Content-Type: text/markdown
|
|
264
271
|
|
265
272
|
# LION - Language InterOperable Network
|
266
273
|
|
267
|
-
## An Intelligence Operating System
|
274
|
+
## An Intelligence Operating System SDK
|
268
275
|
|
269
276
|
LionAGI is a robust framework for orchestrating multi-step AI operations with
|
270
277
|
precise control. Bring together multiple models, advanced ReAct reasoning, tool
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
# LION - Language InterOperable Network
|
10
10
|
|
11
|
-
## An Intelligence Operating System
|
11
|
+
## An Intelligence Operating System SDK
|
12
12
|
|
13
13
|
LionAGI is a robust framework for orchestrating multi-step AI operations with
|
14
14
|
precise control. Bring together multiple models, advanced ReAct reasoning, tool
|
@@ -0,0 +1,396 @@
|
|
1
|
+
# Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
|
2
|
+
#
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
4
|
+
|
5
|
+
import json
|
6
|
+
import sys
|
7
|
+
from typing import Any
|
8
|
+
|
9
|
+
from lionagi.utils import to_dict
|
10
|
+
|
11
|
+
# Try to import rich for enhanced console output
|
12
|
+
try:
|
13
|
+
from rich.align import Align
|
14
|
+
from rich.box import ROUNDED
|
15
|
+
from rich.console import Console
|
16
|
+
from rich.padding import Padding
|
17
|
+
from rich.panel import Panel
|
18
|
+
from rich.syntax import Syntax
|
19
|
+
from rich.theme import Theme
|
20
|
+
|
21
|
+
RICH_AVAILABLE = True
|
22
|
+
except ImportError:
|
23
|
+
RICH_AVAILABLE = False
|
24
|
+
|
25
|
+
# Custom themes for dark and light modes
|
26
|
+
DARK_THEME = Theme(
|
27
|
+
{
|
28
|
+
"info": "bright_cyan",
|
29
|
+
"warning": "bright_yellow",
|
30
|
+
"error": "bold bright_red",
|
31
|
+
"success": "bold bright_green",
|
32
|
+
"panel.border": "bright_blue",
|
33
|
+
"panel.title": "bold bright_cyan",
|
34
|
+
"markdown.h1": "bold bright_magenta",
|
35
|
+
"markdown.h2": "bold bright_blue",
|
36
|
+
"markdown.h3": "bold bright_cyan",
|
37
|
+
"markdown.h4": "bold bright_green",
|
38
|
+
"markdown.code": "bright_yellow on grey23",
|
39
|
+
"markdown.code_block": "bright_white on grey15",
|
40
|
+
"markdown.paragraph": "bright_white",
|
41
|
+
"markdown.text": "bright_white",
|
42
|
+
"markdown.emph": "italic bright_yellow",
|
43
|
+
"markdown.strong": "bold bright_white",
|
44
|
+
"markdown.item": "bright_cyan",
|
45
|
+
"markdown.item.bullet": "bright_blue",
|
46
|
+
"json.key": "bright_cyan",
|
47
|
+
"json.string": "bright_green",
|
48
|
+
"json.number": "bright_yellow",
|
49
|
+
"json.boolean": "bright_magenta",
|
50
|
+
"json.null": "bright_red",
|
51
|
+
"yaml.key": "bright_cyan",
|
52
|
+
"yaml.string": "bright_green",
|
53
|
+
"yaml.number": "bright_yellow",
|
54
|
+
"yaml.boolean": "bright_magenta",
|
55
|
+
}
|
56
|
+
)
|
57
|
+
|
58
|
+
LIGHT_THEME = Theme(
|
59
|
+
{
|
60
|
+
"info": "blue",
|
61
|
+
"warning": "dark_orange",
|
62
|
+
"error": "bold red",
|
63
|
+
"success": "bold green4",
|
64
|
+
"panel.border": "blue",
|
65
|
+
"panel.title": "bold blue",
|
66
|
+
"markdown.h1": "bold dark_magenta",
|
67
|
+
"markdown.h2": "bold dark_blue",
|
68
|
+
"markdown.h3": "bold dark_cyan",
|
69
|
+
"markdown.h4": "bold dark_green",
|
70
|
+
"markdown.code": "dark_orange on grey93",
|
71
|
+
"markdown.code_block": "black on grey82",
|
72
|
+
"markdown.paragraph": "black",
|
73
|
+
"markdown.text": "black",
|
74
|
+
"markdown.emph": "italic dark_orange",
|
75
|
+
"markdown.strong": "bold black",
|
76
|
+
"markdown.item": "dark_blue",
|
77
|
+
"markdown.item.bullet": "blue",
|
78
|
+
"json.key": "dark_blue",
|
79
|
+
"json.string": "dark_green",
|
80
|
+
"json.number": "dark_orange",
|
81
|
+
"json.boolean": "dark_magenta",
|
82
|
+
"json.null": "dark_red",
|
83
|
+
"yaml.key": "dark_blue",
|
84
|
+
"yaml.string": "dark_green",
|
85
|
+
"yaml.number": "dark_orange",
|
86
|
+
"yaml.boolean": "dark_magenta",
|
87
|
+
}
|
88
|
+
)
|
89
|
+
|
90
|
+
|
91
|
+
def in_notebook() -> bool:
|
92
|
+
"""
|
93
|
+
Checks if we're running inside a Jupyter notebook.
|
94
|
+
Returns True if yes, False otherwise.
|
95
|
+
"""
|
96
|
+
try:
|
97
|
+
from IPython import get_ipython
|
98
|
+
|
99
|
+
shell = get_ipython().__class__.__name__
|
100
|
+
return "ZMQInteractiveShell" in shell
|
101
|
+
except Exception:
|
102
|
+
return False
|
103
|
+
|
104
|
+
|
105
|
+
def in_console() -> bool:
|
106
|
+
"""
|
107
|
+
Checks if we're running in a console/terminal environment.
|
108
|
+
Returns True if stdout is a TTY and not in a notebook.
|
109
|
+
"""
|
110
|
+
return (
|
111
|
+
hasattr(sys.stdout, "isatty")
|
112
|
+
and sys.stdout.isatty()
|
113
|
+
and not in_notebook()
|
114
|
+
)
|
115
|
+
|
116
|
+
|
117
|
+
def format_dict(data: Any, indent: int = 0) -> str:
|
118
|
+
"""
|
119
|
+
Recursively format Python data (dicts, lists, strings, etc.) into a
|
120
|
+
YAML-like readable string.
|
121
|
+
|
122
|
+
- Multi-line strings are displayed using a '|' block style, each line indented.
|
123
|
+
- Lists are shown with a '- ' prefix per item at the appropriate indentation.
|
124
|
+
- Dict keys are shown as "key:" lines, with values on subsequent lines if complex.
|
125
|
+
"""
|
126
|
+
lines = []
|
127
|
+
prefix = " " * indent # 2 spaces per indent level
|
128
|
+
|
129
|
+
if isinstance(data, dict):
|
130
|
+
for key, value in data.items():
|
131
|
+
if isinstance(value, dict):
|
132
|
+
# Nested dict
|
133
|
+
lines.append(f"{prefix}{key}:")
|
134
|
+
lines.append(format_dict(value, indent + 1))
|
135
|
+
elif isinstance(value, list):
|
136
|
+
# List under a key
|
137
|
+
lines.append(f"{prefix}{key}:")
|
138
|
+
for item in value:
|
139
|
+
item_str = format_dict(item, indent + 2).lstrip()
|
140
|
+
lines.append(f"{prefix} - {item_str}")
|
141
|
+
elif isinstance(value, str) and "\n" in value:
|
142
|
+
# Multi-line string
|
143
|
+
lines.append(f"{prefix}{key}: |")
|
144
|
+
subprefix = " " * (indent + 1)
|
145
|
+
for line in value.splitlines():
|
146
|
+
lines.append(f"{subprefix}{line}")
|
147
|
+
else:
|
148
|
+
# Simple single-line scalar
|
149
|
+
item_str = format_dict(value, indent + 1).lstrip()
|
150
|
+
lines.append(f"{prefix}{key}: {item_str}")
|
151
|
+
return "\n".join(lines)
|
152
|
+
|
153
|
+
elif isinstance(data, list):
|
154
|
+
# For top-level or nested lists
|
155
|
+
for item in data:
|
156
|
+
item_str = format_dict(item, indent + 1).lstrip()
|
157
|
+
lines.append(f"{prefix}- {item_str}")
|
158
|
+
return "\n".join(lines)
|
159
|
+
|
160
|
+
# Base case: single-line scalar
|
161
|
+
return prefix + str(data)
|
162
|
+
|
163
|
+
|
164
|
+
def as_readable(
|
165
|
+
input_: Any,
|
166
|
+
/,
|
167
|
+
*,
|
168
|
+
md: bool = False,
|
169
|
+
format_curly: bool = False,
|
170
|
+
display_str: bool = False,
|
171
|
+
max_chars: int | None = None,
|
172
|
+
use_rich: bool = True,
|
173
|
+
theme: str = "dark",
|
174
|
+
max_panel_width: int = 140,
|
175
|
+
) -> str:
|
176
|
+
"""
|
177
|
+
Convert `input_` into a human-readable string. If `format_curly=True`, uses
|
178
|
+
a YAML-like style (`format_dict`). Otherwise, pretty-printed JSON.
|
179
|
+
|
180
|
+
- For Pydantic models or nested data, uses `to_dict` to get a dictionary.
|
181
|
+
- If the result is a list of items, each is processed and concatenated.
|
182
|
+
- When in console and rich is available, provides syntax highlighting.
|
183
|
+
|
184
|
+
Args:
|
185
|
+
input_: The data to convert (could be a single item or list).
|
186
|
+
md: If True, wraps the final output in code fences for Markdown display.
|
187
|
+
format_curly: If True, use `format_dict`. Otherwise, produce JSON text.
|
188
|
+
display_str: If True, prints the output instead of returning it.
|
189
|
+
max_chars: If set, truncates output to this many characters.
|
190
|
+
use_rich: If True and rich is available, uses rich for console output.
|
191
|
+
theme: Color theme - "dark" (default) or "light". Dark uses GitHub Dark Dimmed,
|
192
|
+
light uses Solarized Light inspired colors.
|
193
|
+
max_panel_width: Maximum width for panels and code blocks in characters.
|
194
|
+
|
195
|
+
Returns:
|
196
|
+
A formatted string representation of `input_` (unless display_str=True).
|
197
|
+
"""
|
198
|
+
|
199
|
+
# 1) Convert the input to a Python dict/list structure
|
200
|
+
# (handles recursion, Pydantic models, etc.)
|
201
|
+
def to_dict_safe(obj: Any) -> Any:
|
202
|
+
# Attempt to call to_dict with typical recursion flags
|
203
|
+
to_dict_kwargs = {
|
204
|
+
"use_model_dump": True,
|
205
|
+
"fuzzy_parse": True,
|
206
|
+
"recursive": True,
|
207
|
+
"recursive_python_only": False,
|
208
|
+
"max_recursive_depth": 5,
|
209
|
+
}
|
210
|
+
return to_dict(obj, **to_dict_kwargs)
|
211
|
+
|
212
|
+
def _inner(i_: Any) -> Any:
|
213
|
+
items = []
|
214
|
+
try:
|
215
|
+
if isinstance(i_, list):
|
216
|
+
# Already a list. Convert each item
|
217
|
+
items = [to_dict_safe(x) for x in i_]
|
218
|
+
else:
|
219
|
+
# Single item
|
220
|
+
maybe_list = to_dict_safe(i_)
|
221
|
+
# If it's a list, store as items; else just single
|
222
|
+
items = (
|
223
|
+
maybe_list
|
224
|
+
if isinstance(maybe_list, list)
|
225
|
+
else [maybe_list]
|
226
|
+
)
|
227
|
+
except Exception:
|
228
|
+
# If conversion fails, fallback to str
|
229
|
+
return str(i_)
|
230
|
+
|
231
|
+
# 2) For each item in `items`, either format with YAML-like or JSON
|
232
|
+
rendered = []
|
233
|
+
for item in items:
|
234
|
+
if format_curly:
|
235
|
+
# YAML-like
|
236
|
+
rendered.append(format_dict(item))
|
237
|
+
else:
|
238
|
+
# JSON approach
|
239
|
+
try:
|
240
|
+
# Provide indentation, ensure ASCII not forced
|
241
|
+
rendered.append(
|
242
|
+
json.dumps(item, indent=2, ensure_ascii=False)
|
243
|
+
)
|
244
|
+
except Exception:
|
245
|
+
# fallback
|
246
|
+
rendered.append(str(item))
|
247
|
+
|
248
|
+
# 3) Combine
|
249
|
+
final_str = "\n\n".join(rendered).strip()
|
250
|
+
|
251
|
+
# 4) If Markdown requested, wrap with code fences
|
252
|
+
# - If we used format_curly, we might do "```yaml" instead. But user specifically asked for JSON code blocks previously
|
253
|
+
if md:
|
254
|
+
if format_curly:
|
255
|
+
return f"```yaml\n{final_str}\n```"
|
256
|
+
else:
|
257
|
+
return f"```json\n{final_str}\n```"
|
258
|
+
|
259
|
+
return final_str
|
260
|
+
|
261
|
+
str_ = _inner(input_).strip()
|
262
|
+
if max_chars is not None and len(str_) > max_chars:
|
263
|
+
str1 = str_[:max_chars] + "...\n\n[Truncated output]\n\n"
|
264
|
+
if str_.endswith("\n```"):
|
265
|
+
str1 += "```"
|
266
|
+
str_ = str1
|
267
|
+
if display_str:
|
268
|
+
if md and in_notebook():
|
269
|
+
# If in IPython environment, display Markdown
|
270
|
+
from IPython.display import Markdown, display
|
271
|
+
|
272
|
+
display(Markdown(str_))
|
273
|
+
elif RICH_AVAILABLE and in_console() and use_rich:
|
274
|
+
# Use rich for enhanced console output
|
275
|
+
# Select theme and syntax highlighting based on user preference
|
276
|
+
console_theme = DARK_THEME if theme == "dark" else LIGHT_THEME
|
277
|
+
syntax_theme = (
|
278
|
+
"github-dark" if theme == "dark" else "solarized-light"
|
279
|
+
)
|
280
|
+
panel_style = "bright_blue" if theme == "dark" else "blue"
|
281
|
+
|
282
|
+
console = Console(theme=console_theme)
|
283
|
+
|
284
|
+
# Check if content looks like markdown prose (not code)
|
285
|
+
is_markdown_prose = isinstance(str_, str) and (
|
286
|
+
str_.startswith("#")
|
287
|
+
or str_.startswith("**")
|
288
|
+
or str_.startswith("- ")
|
289
|
+
or str_.startswith("1.")
|
290
|
+
or "<multi_reasoning>" in str_
|
291
|
+
or "\n### " in str_
|
292
|
+
or "\n## " in str_
|
293
|
+
or "\n# " in str_
|
294
|
+
or "│" in str_ # Rich table content
|
295
|
+
)
|
296
|
+
|
297
|
+
if md and is_markdown_prose:
|
298
|
+
# Display as formatted markdown
|
299
|
+
# Create markdown with max width
|
300
|
+
from rich.markdown import Markdown as RichMarkdown
|
301
|
+
|
302
|
+
md_content = RichMarkdown(str_, code_theme=syntax_theme)
|
303
|
+
|
304
|
+
# Calculate appropriate width
|
305
|
+
console_width = console.width
|
306
|
+
panel_width = min(console_width - 4, max_panel_width)
|
307
|
+
|
308
|
+
# Add left margin padding for better alignment
|
309
|
+
panel = Panel(
|
310
|
+
Padding(md_content, (0, 2)),
|
311
|
+
border_style=panel_style,
|
312
|
+
box=ROUNDED,
|
313
|
+
width=panel_width,
|
314
|
+
expand=False,
|
315
|
+
)
|
316
|
+
|
317
|
+
# Left align with margin
|
318
|
+
aligned_panel = Align.left(panel, pad=True)
|
319
|
+
console.print(Padding(aligned_panel, (0, 0, 0, 4)))
|
320
|
+
|
321
|
+
elif md:
|
322
|
+
# Extract content from markdown code blocks if present
|
323
|
+
content = str_
|
324
|
+
if content.startswith("```") and content.endswith("```"):
|
325
|
+
# Remove code fences
|
326
|
+
lines = content.split("\n")
|
327
|
+
if len(lines) > 2:
|
328
|
+
lang = lines[0][3:].strip() or "json"
|
329
|
+
content = "\n".join(lines[1:-1])
|
330
|
+
else:
|
331
|
+
lang = "json"
|
332
|
+
else:
|
333
|
+
lang = "yaml" if format_curly else "json"
|
334
|
+
|
335
|
+
# Calculate appropriate width
|
336
|
+
console_width = console.width
|
337
|
+
panel_width = min(console_width - 4, max_panel_width)
|
338
|
+
|
339
|
+
# Create syntax highlighted output
|
340
|
+
syntax = Syntax(
|
341
|
+
content,
|
342
|
+
lang,
|
343
|
+
theme=syntax_theme,
|
344
|
+
line_numbers=True,
|
345
|
+
background_color="default",
|
346
|
+
word_wrap=True,
|
347
|
+
)
|
348
|
+
|
349
|
+
# Add left margin padding for better alignment
|
350
|
+
panel = Panel(
|
351
|
+
syntax,
|
352
|
+
border_style=panel_style,
|
353
|
+
box=ROUNDED,
|
354
|
+
width=panel_width,
|
355
|
+
expand=False,
|
356
|
+
)
|
357
|
+
|
358
|
+
# Left align with margin
|
359
|
+
aligned_panel = Align.left(panel, pad=True)
|
360
|
+
console.print(Padding(aligned_panel, (0, 0, 0, 4)))
|
361
|
+
|
362
|
+
else:
|
363
|
+
# Plain text output with rich formatting
|
364
|
+
if format_curly:
|
365
|
+
syntax = Syntax(
|
366
|
+
str_,
|
367
|
+
"yaml",
|
368
|
+
theme=syntax_theme,
|
369
|
+
background_color="default",
|
370
|
+
word_wrap=True,
|
371
|
+
)
|
372
|
+
else:
|
373
|
+
syntax = Syntax(
|
374
|
+
str_,
|
375
|
+
"json",
|
376
|
+
theme=syntax_theme,
|
377
|
+
background_color="default",
|
378
|
+
word_wrap=True,
|
379
|
+
)
|
380
|
+
|
381
|
+
# For plain syntax, add left margin
|
382
|
+
# Create a constrained width container if console is too wide
|
383
|
+
if console.width > max_panel_width:
|
384
|
+
content = Align.left(
|
385
|
+
syntax, width=max_panel_width, pad=False
|
386
|
+
)
|
387
|
+
# Add left margin
|
388
|
+
console.print(Padding(content, (0, 0, 0, 4)))
|
389
|
+
else:
|
390
|
+
# Just add left margin
|
391
|
+
console.print(Padding(syntax, (0, 0, 0, 4)))
|
392
|
+
else:
|
393
|
+
# Fallback to regular print
|
394
|
+
print(str_)
|
395
|
+
else:
|
396
|
+
return str_
|