lionagi 0.4.0__py3-none-any.whl → 0.5.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- lionagi/__init__.py +14 -46
- lionagi/core/__init__.py +3 -1
- lionagi/core/_class_registry.py +69 -0
- lionagi/core/action/__init__.py +3 -13
- lionagi/core/action/action_manager.py +287 -0
- lionagi/core/action/base.py +109 -0
- lionagi/core/action/function_calling.py +127 -92
- lionagi/core/action/tool.py +172 -70
- lionagi/core/action/types.py +16 -0
- lionagi/core/communication/__init__.py +3 -0
- lionagi/core/communication/action_request.py +163 -0
- lionagi/core/communication/action_response.py +149 -0
- lionagi/core/communication/assistant_response.py +161 -0
- lionagi/core/communication/base_mail.py +49 -0
- lionagi/core/communication/instruction.py +376 -0
- lionagi/core/communication/message.py +286 -0
- lionagi/core/communication/message_manager.py +530 -0
- lionagi/core/communication/system.py +116 -0
- lionagi/core/communication/templates/README.md +28 -0
- lionagi/core/communication/templates/action_request.jinja2 +5 -0
- lionagi/core/communication/templates/action_response.jinja2 +9 -0
- lionagi/core/communication/templates/assistant_response.jinja2 +2 -0
- lionagi/core/communication/templates/instruction_message.jinja2 +61 -0
- lionagi/core/communication/templates/system_message.jinja2 +11 -0
- lionagi/core/communication/templates/tool_schemas.jinja2 +7 -0
- lionagi/core/communication/types.py +27 -0
- lionagi/core/communication/utils.py +254 -0
- lionagi/core/forms/__init__.py +3 -0
- lionagi/core/forms/base.py +232 -0
- lionagi/core/forms/form.py +791 -0
- lionagi/core/forms/report.py +321 -0
- lionagi/core/forms/types.py +13 -0
- lionagi/core/forms/utils.py +26 -0
- lionagi/core/generic/__init__.py +3 -6
- lionagi/core/generic/component.py +422 -0
- lionagi/core/generic/edge.py +143 -101
- lionagi/core/generic/element.py +195 -0
- lionagi/core/generic/graph.py +297 -180
- lionagi/core/generic/log.py +151 -0
- lionagi/core/generic/log_manager.py +320 -0
- lionagi/core/generic/node.py +7 -229
- lionagi/core/generic/pile.py +1017 -0
- lionagi/core/generic/progression.py +388 -0
- lionagi/core/generic/types.py +23 -0
- lionagi/core/generic/utils.py +50 -0
- lionagi/core/models/__init__.py +5 -0
- lionagi/core/models/base.py +85 -0
- lionagi/core/models/field_model.py +122 -0
- lionagi/core/models/new_model_params.py +195 -0
- lionagi/core/models/note.py +351 -0
- lionagi/core/models/operable_model.py +392 -0
- lionagi/core/models/schema_model.py +50 -0
- lionagi/core/models/types.py +10 -0
- lionagi/core/session/__init__.py +3 -0
- lionagi/core/session/branch.py +115 -415
- lionagi/core/session/branch_mixins.py +507 -0
- lionagi/core/session/session.py +122 -257
- lionagi/core/session/types.py +8 -0
- lionagi/core/typing/__init__.py +9 -0
- lionagi/core/typing/concepts.py +132 -0
- lionagi/core/typing/config.py +15 -0
- lionagi/core/typing/id.py +221 -0
- lionagi/core/typing/pydantic_.py +33 -0
- lionagi/core/typing/typing_.py +54 -0
- lionagi/integrations/__init__.py +0 -1
- lionagi/integrations/anthropic_/AnthropicModel.py +268 -0
- lionagi/integrations/anthropic_/AnthropicService.py +113 -0
- lionagi/integrations/anthropic_/__init__.py +3 -0
- lionagi/integrations/anthropic_/anthropic_max_output_token_data.yaml +7 -0
- lionagi/integrations/anthropic_/anthropic_price_data.yaml +14 -0
- lionagi/integrations/anthropic_/api_endpoints/__init__.py +3 -0
- lionagi/integrations/anthropic_/api_endpoints/api_request.py +277 -0
- lionagi/integrations/anthropic_/api_endpoints/data_models.py +40 -0
- lionagi/integrations/anthropic_/api_endpoints/match_response.py +119 -0
- lionagi/integrations/anthropic_/api_endpoints/messages/__init__.py +3 -0
- lionagi/integrations/anthropic_/api_endpoints/messages/request/__init__.py +3 -0
- lionagi/integrations/anthropic_/api_endpoints/messages/request/message_models.py +14 -0
- lionagi/integrations/anthropic_/api_endpoints/messages/request/request_body.py +74 -0
- lionagi/integrations/anthropic_/api_endpoints/messages/response/content_models.py +32 -0
- lionagi/integrations/anthropic_/api_endpoints/messages/response/response_body.py +101 -0
- lionagi/integrations/anthropic_/api_endpoints/messages/response/usage_models.py +25 -0
- lionagi/integrations/anthropic_/version.py +5 -0
- lionagi/integrations/groq_/GroqModel.py +318 -0
- lionagi/integrations/groq_/GroqService.py +147 -0
- lionagi/integrations/groq_/__init__.py +3 -0
- lionagi/integrations/groq_/api_endpoints/data_models.py +187 -0
- lionagi/integrations/groq_/api_endpoints/groq_request.py +288 -0
- lionagi/integrations/groq_/api_endpoints/match_response.py +106 -0
- lionagi/integrations/groq_/api_endpoints/response_utils.py +105 -0
- lionagi/integrations/groq_/groq_max_output_token_data.yaml +21 -0
- lionagi/integrations/groq_/groq_price_data.yaml +58 -0
- lionagi/integrations/groq_/groq_rate_limits.yaml +105 -0
- lionagi/integrations/groq_/version.py +5 -0
- lionagi/integrations/litellm_/__init__.py +3 -0
- lionagi/integrations/litellm_/imodel.py +69 -0
- lionagi/integrations/ollama_/OllamaModel.py +244 -0
- lionagi/integrations/ollama_/OllamaService.py +138 -0
- lionagi/integrations/ollama_/__init__.py +3 -0
- lionagi/integrations/ollama_/api_endpoints/__init__.py +3 -0
- lionagi/integrations/ollama_/api_endpoints/api_request.py +179 -0
- lionagi/integrations/ollama_/api_endpoints/chat_completion/__init__.py +3 -0
- lionagi/integrations/ollama_/api_endpoints/chat_completion/message_models.py +31 -0
- lionagi/integrations/ollama_/api_endpoints/chat_completion/request_body.py +46 -0
- lionagi/integrations/ollama_/api_endpoints/chat_completion/response_body.py +67 -0
- lionagi/integrations/ollama_/api_endpoints/chat_completion/tool_models.py +49 -0
- lionagi/integrations/ollama_/api_endpoints/completion/request_body.py +72 -0
- lionagi/integrations/ollama_/api_endpoints/completion/response_body.py +59 -0
- lionagi/integrations/ollama_/api_endpoints/data_models.py +15 -0
- lionagi/integrations/ollama_/api_endpoints/embedding/request_body.py +33 -0
- lionagi/integrations/ollama_/api_endpoints/embedding/response_body.py +29 -0
- lionagi/integrations/ollama_/api_endpoints/match_data_model.py +62 -0
- lionagi/integrations/ollama_/api_endpoints/match_response.py +190 -0
- lionagi/integrations/ollama_/api_endpoints/model/__init__.py +3 -0
- lionagi/integrations/ollama_/api_endpoints/model/copy_model.py +13 -0
- lionagi/integrations/ollama_/api_endpoints/model/create_model.py +28 -0
- lionagi/integrations/ollama_/api_endpoints/model/delete_model.py +11 -0
- lionagi/integrations/ollama_/api_endpoints/model/list_model.py +60 -0
- lionagi/integrations/ollama_/api_endpoints/model/pull_model.py +34 -0
- lionagi/integrations/ollama_/api_endpoints/model/push_model.py +35 -0
- lionagi/integrations/ollama_/api_endpoints/model/show_model.py +36 -0
- lionagi/integrations/ollama_/api_endpoints/option_models.py +68 -0
- lionagi/integrations/openai_/OpenAIModel.py +414 -0
- lionagi/integrations/openai_/OpenAIService.py +426 -0
- lionagi/integrations/openai_/api_endpoints/__init__.py +3 -0
- lionagi/integrations/openai_/api_endpoints/api_request.py +277 -0
- lionagi/integrations/openai_/api_endpoints/audio/__init__.py +9 -0
- lionagi/integrations/openai_/api_endpoints/audio/speech_models.py +34 -0
- lionagi/integrations/openai_/api_endpoints/audio/transcription_models.py +136 -0
- lionagi/integrations/openai_/api_endpoints/audio/translation_models.py +41 -0
- lionagi/integrations/openai_/api_endpoints/audio/types.py +41 -0
- lionagi/integrations/openai_/api_endpoints/batch/__init__.py +17 -0
- lionagi/integrations/openai_/api_endpoints/batch/batch_models.py +146 -0
- lionagi/integrations/openai_/api_endpoints/batch/cancel_batch.py +7 -0
- lionagi/integrations/openai_/api_endpoints/batch/create_batch.py +26 -0
- lionagi/integrations/openai_/api_endpoints/batch/list_batch.py +37 -0
- lionagi/integrations/openai_/api_endpoints/batch/request_object_models.py +65 -0
- lionagi/integrations/openai_/api_endpoints/batch/retrieve_batch.py +7 -0
- lionagi/integrations/openai_/api_endpoints/batch/types.py +4 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/__init__.py +1 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/__init__.py +39 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/message_models.py +121 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/request_body.py +221 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/response_format.py +71 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/stream_options.py +14 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/tool_choice_models.py +17 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/tool_models.py +54 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/request/types.py +18 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/response/choice_models.py +62 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/response/function_models.py +16 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/response/log_prob_models.py +47 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/response/message_models.py +25 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/response/response_body.py +99 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/response/types.py +8 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/response/usage_models.py +24 -0
- lionagi/integrations/openai_/api_endpoints/chat_completions/util.py +46 -0
- lionagi/integrations/openai_/api_endpoints/data_models.py +23 -0
- lionagi/integrations/openai_/api_endpoints/embeddings/__init__.py +3 -0
- lionagi/integrations/openai_/api_endpoints/embeddings/request_body.py +79 -0
- lionagi/integrations/openai_/api_endpoints/embeddings/response_body.py +67 -0
- lionagi/integrations/openai_/api_endpoints/files/__init__.py +11 -0
- lionagi/integrations/openai_/api_endpoints/files/delete_file.py +20 -0
- lionagi/integrations/openai_/api_endpoints/files/file_models.py +56 -0
- lionagi/integrations/openai_/api_endpoints/files/list_files.py +27 -0
- lionagi/integrations/openai_/api_endpoints/files/retrieve_file.py +9 -0
- lionagi/integrations/openai_/api_endpoints/files/upload_file.py +38 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/__init__.py +37 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/cancel_jobs.py +9 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/create_jobs.py +133 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/fine_tuning_job_checkpoint_models.py +58 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/fine_tuning_job_event_models.py +31 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/fine_tuning_job_models.py +140 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/list_fine_tuning_checkpoints.py +51 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/list_fine_tuning_events.py +42 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/list_fine_tuning_jobs.py +31 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/retrieve_jobs.py +9 -0
- lionagi/integrations/openai_/api_endpoints/fine_tuning/training_format.py +30 -0
- lionagi/integrations/openai_/api_endpoints/images/__init__.py +9 -0
- lionagi/integrations/openai_/api_endpoints/images/image_edit_models.py +69 -0
- lionagi/integrations/openai_/api_endpoints/images/image_models.py +56 -0
- lionagi/integrations/openai_/api_endpoints/images/image_variation_models.py +56 -0
- lionagi/integrations/openai_/api_endpoints/images/response_body.py +30 -0
- lionagi/integrations/openai_/api_endpoints/match_data_model.py +197 -0
- lionagi/integrations/openai_/api_endpoints/match_response.py +336 -0
- lionagi/integrations/openai_/api_endpoints/models/__init__.py +7 -0
- lionagi/integrations/openai_/api_endpoints/models/delete_fine_tuned_model.py +17 -0
- lionagi/integrations/openai_/api_endpoints/models/models_models.py +31 -0
- lionagi/integrations/openai_/api_endpoints/models/retrieve_model.py +9 -0
- lionagi/integrations/openai_/api_endpoints/moderations/__init__.py +3 -0
- lionagi/integrations/openai_/api_endpoints/moderations/request_body.py +20 -0
- lionagi/integrations/openai_/api_endpoints/moderations/response_body.py +139 -0
- lionagi/integrations/openai_/api_endpoints/uploads/__init__.py +19 -0
- lionagi/integrations/openai_/api_endpoints/uploads/add_upload_part.py +11 -0
- lionagi/integrations/openai_/api_endpoints/uploads/cancel_upload.py +7 -0
- lionagi/integrations/openai_/api_endpoints/uploads/complete_upload.py +18 -0
- lionagi/integrations/openai_/api_endpoints/uploads/create_upload.py +17 -0
- lionagi/integrations/openai_/api_endpoints/uploads/uploads_models.py +52 -0
- lionagi/integrations/openai_/image_token_calculator/image_token_calculator.py +92 -0
- lionagi/integrations/openai_/image_token_calculator/openai_image_token_data.yaml +15 -0
- lionagi/integrations/openai_/openai_max_output_token_data.yaml +12 -0
- lionagi/integrations/openai_/openai_price_data.yaml +26 -0
- lionagi/integrations/openai_/version.py +1 -0
- lionagi/integrations/pandas_/__init__.py +24 -0
- lionagi/integrations/pandas_/extend_df.py +61 -0
- lionagi/integrations/pandas_/read.py +103 -0
- lionagi/integrations/pandas_/remove_rows.py +61 -0
- lionagi/integrations/pandas_/replace_keywords.py +65 -0
- lionagi/integrations/pandas_/save.py +131 -0
- lionagi/integrations/pandas_/search_keywords.py +69 -0
- lionagi/integrations/pandas_/to_df.py +196 -0
- lionagi/integrations/pandas_/update_cells.py +54 -0
- lionagi/integrations/perplexity_/PerplexityModel.py +269 -0
- lionagi/integrations/perplexity_/PerplexityService.py +109 -0
- lionagi/integrations/perplexity_/__init__.py +3 -0
- lionagi/integrations/perplexity_/api_endpoints/api_request.py +171 -0
- lionagi/integrations/perplexity_/api_endpoints/chat_completions/request/request_body.py +121 -0
- lionagi/integrations/perplexity_/api_endpoints/chat_completions/response/response_body.py +146 -0
- lionagi/integrations/perplexity_/api_endpoints/data_models.py +63 -0
- lionagi/integrations/perplexity_/api_endpoints/match_response.py +26 -0
- lionagi/integrations/perplexity_/perplexity_max_output_token_data.yaml +3 -0
- lionagi/integrations/perplexity_/perplexity_price_data.yaml +10 -0
- lionagi/integrations/perplexity_/version.py +1 -0
- lionagi/integrations/pydantic_/__init__.py +8 -0
- lionagi/integrations/pydantic_/break_down_annotation.py +81 -0
- lionagi/integrations/pydantic_/new_model.py +208 -0
- lionagi/integrations/services.py +17 -0
- lionagi/libs/__init__.py +0 -55
- lionagi/libs/compress/models.py +62 -0
- lionagi/libs/compress/utils.py +81 -0
- lionagi/libs/constants.py +98 -0
- lionagi/libs/file/chunk.py +265 -0
- lionagi/libs/file/file_ops.py +114 -0
- lionagi/libs/file/params.py +212 -0
- lionagi/libs/file/path.py +301 -0
- lionagi/libs/file/process.py +139 -0
- lionagi/libs/file/save.py +90 -0
- lionagi/libs/file/types.py +22 -0
- lionagi/libs/func/async_calls/__init__.py +21 -0
- lionagi/libs/func/async_calls/alcall.py +157 -0
- lionagi/libs/func/async_calls/bcall.py +82 -0
- lionagi/libs/func/async_calls/mcall.py +134 -0
- lionagi/libs/func/async_calls/pcall.py +149 -0
- lionagi/libs/func/async_calls/rcall.py +185 -0
- lionagi/libs/func/async_calls/tcall.py +114 -0
- lionagi/libs/func/async_calls/ucall.py +85 -0
- lionagi/libs/func/decorators.py +277 -0
- lionagi/libs/func/lcall.py +57 -0
- lionagi/libs/func/params.py +64 -0
- lionagi/libs/func/throttle.py +119 -0
- lionagi/libs/func/types.py +39 -0
- lionagi/libs/func/utils.py +96 -0
- lionagi/libs/package/imports.py +162 -0
- lionagi/libs/package/management.py +58 -0
- lionagi/libs/package/params.py +26 -0
- lionagi/libs/package/system.py +18 -0
- lionagi/libs/package/types.py +26 -0
- lionagi/libs/parse/__init__.py +1 -0
- lionagi/libs/parse/flatten/__init__.py +9 -0
- lionagi/libs/parse/flatten/flatten.py +168 -0
- lionagi/libs/parse/flatten/params.py +52 -0
- lionagi/libs/parse/flatten/unflatten.py +79 -0
- lionagi/libs/parse/json/__init__.py +27 -0
- lionagi/libs/parse/json/as_readable.py +104 -0
- lionagi/libs/parse/json/extract.py +102 -0
- lionagi/libs/parse/json/parse.py +179 -0
- lionagi/libs/parse/json/schema.py +227 -0
- lionagi/libs/parse/json/to_json.py +71 -0
- lionagi/libs/parse/nested/__init__.py +33 -0
- lionagi/libs/parse/nested/nfilter.py +55 -0
- lionagi/libs/parse/nested/nget.py +40 -0
- lionagi/libs/parse/nested/ninsert.py +103 -0
- lionagi/libs/parse/nested/nmerge.py +155 -0
- lionagi/libs/parse/nested/npop.py +66 -0
- lionagi/libs/parse/nested/nset.py +89 -0
- lionagi/libs/parse/nested/to_flat_list.py +64 -0
- lionagi/libs/parse/nested/utils.py +185 -0
- lionagi/libs/parse/string_parse/__init__.py +11 -0
- lionagi/libs/parse/string_parse/code_block.py +73 -0
- lionagi/libs/parse/string_parse/docstring.py +179 -0
- lionagi/libs/parse/string_parse/function_.py +92 -0
- lionagi/libs/parse/type_convert/__init__.py +19 -0
- lionagi/libs/parse/type_convert/params.py +145 -0
- lionagi/libs/parse/type_convert/to_dict.py +333 -0
- lionagi/libs/parse/type_convert/to_list.py +186 -0
- lionagi/libs/parse/type_convert/to_num.py +358 -0
- lionagi/libs/parse/type_convert/to_str.py +195 -0
- lionagi/libs/parse/types.py +9 -0
- lionagi/libs/parse/validate/__init__.py +14 -0
- lionagi/libs/parse/validate/boolean.py +96 -0
- lionagi/libs/parse/validate/keys.py +150 -0
- lionagi/libs/parse/validate/mapping.py +109 -0
- lionagi/libs/parse/validate/params.py +62 -0
- lionagi/libs/parse/xml/__init__.py +10 -0
- lionagi/libs/parse/xml/convert.py +56 -0
- lionagi/libs/parse/xml/parser.py +93 -0
- lionagi/libs/string_similarity/__init__.py +32 -0
- lionagi/libs/string_similarity/algorithms.py +219 -0
- lionagi/libs/string_similarity/matcher.py +102 -0
- lionagi/libs/string_similarity/utils.py +15 -0
- lionagi/libs/utils.py +255 -0
- lionagi/operations/__init__.py +3 -6
- lionagi/operations/brainstorm/__init__.py +3 -0
- lionagi/operations/brainstorm/brainstorm.py +204 -0
- lionagi/operations/brainstorm/prompt.py +1 -0
- lionagi/operations/plan/__init__.py +3 -0
- lionagi/operations/plan/plan.py +172 -0
- lionagi/operations/plan/prompt.py +21 -0
- lionagi/operations/select/__init__.py +3 -0
- lionagi/operations/select/prompt.py +1 -0
- lionagi/operations/select/select.py +100 -0
- lionagi/operations/select/utils.py +107 -0
- lionagi/operations/utils.py +35 -0
- lionagi/protocols/adapters/adapter.py +79 -0
- lionagi/protocols/adapters/json_adapter.py +43 -0
- lionagi/protocols/adapters/pandas_adapter.py +96 -0
- lionagi/protocols/configs/__init__.py +15 -0
- lionagi/protocols/configs/branch_config.py +86 -0
- lionagi/protocols/configs/id_config.py +15 -0
- lionagi/protocols/configs/imodel_config.py +73 -0
- lionagi/protocols/configs/log_config.py +93 -0
- lionagi/protocols/configs/retry_config.py +29 -0
- lionagi/protocols/operatives/__init__.py +15 -0
- lionagi/protocols/operatives/action.py +181 -0
- lionagi/protocols/operatives/instruct.py +196 -0
- lionagi/protocols/operatives/operative.py +182 -0
- lionagi/protocols/operatives/prompts.py +232 -0
- lionagi/protocols/operatives/reason.py +56 -0
- lionagi/protocols/operatives/step.py +217 -0
- lionagi/protocols/registries/_component_registry.py +19 -0
- lionagi/protocols/registries/_pile_registry.py +26 -0
- lionagi/service/__init__.py +13 -0
- lionagi/service/complete_request_info.py +11 -0
- lionagi/service/imodel.py +110 -0
- lionagi/service/rate_limiter.py +108 -0
- lionagi/service/service.py +37 -0
- lionagi/service/service_match_util.py +131 -0
- lionagi/service/service_util.py +72 -0
- lionagi/service/token_calculator.py +51 -0
- lionagi/settings.py +136 -0
- lionagi/strategies/base.py +53 -0
- lionagi/strategies/concurrent.py +71 -0
- lionagi/strategies/concurrent_chunk.py +43 -0
- lionagi/strategies/concurrent_sequential_chunk.py +104 -0
- lionagi/strategies/params.py +128 -0
- lionagi/strategies/sequential.py +23 -0
- lionagi/strategies/sequential_chunk.py +89 -0
- lionagi/strategies/sequential_concurrent_chunk.py +100 -0
- lionagi/strategies/types.py +21 -0
- lionagi/strategies/utils.py +49 -0
- lionagi/version.py +1 -1
- lionagi-0.5.0.dist-info/METADATA +348 -0
- lionagi-0.5.0.dist-info/RECORD +373 -0
- {lionagi-0.4.0.dist-info → lionagi-0.5.0.dist-info}/WHEEL +1 -1
- lionagi/core/_setting/_setting.py +0 -59
- lionagi/core/action/README.md +0 -20
- lionagi/core/action/manual.py +0 -1
- lionagi/core/action/node.py +0 -94
- lionagi/core/action/tool_manager.py +0 -342
- lionagi/core/agent/README.md +0 -1
- lionagi/core/agent/base_agent.py +0 -82
- lionagi/core/agent/eval/README.md +0 -1
- lionagi/core/agent/eval/evaluator.py +0 -1
- lionagi/core/agent/eval/vote.py +0 -40
- lionagi/core/agent/learn/learner.py +0 -59
- lionagi/core/agent/plan/unit_template.py +0 -1
- lionagi/core/collections/README.md +0 -23
- lionagi/core/collections/__init__.py +0 -16
- lionagi/core/collections/_logger.py +0 -312
- lionagi/core/collections/abc/README.md +0 -63
- lionagi/core/collections/abc/__init__.py +0 -53
- lionagi/core/collections/abc/component.py +0 -620
- lionagi/core/collections/abc/concepts.py +0 -277
- lionagi/core/collections/abc/exceptions.py +0 -136
- lionagi/core/collections/abc/util.py +0 -45
- lionagi/core/collections/exchange.py +0 -146
- lionagi/core/collections/flow.py +0 -416
- lionagi/core/collections/model.py +0 -465
- lionagi/core/collections/pile.py +0 -1232
- lionagi/core/collections/progression.py +0 -221
- lionagi/core/collections/util.py +0 -73
- lionagi/core/director/README.md +0 -1
- lionagi/core/director/direct.py +0 -298
- lionagi/core/director/director.py +0 -2
- lionagi/core/director/operations/select.py +0 -3
- lionagi/core/director/operations/utils.py +0 -6
- lionagi/core/engine/branch_engine.py +0 -361
- lionagi/core/engine/instruction_map_engine.py +0 -213
- lionagi/core/engine/sandbox_.py +0 -16
- lionagi/core/engine/script_engine.py +0 -89
- lionagi/core/executor/base_executor.py +0 -97
- lionagi/core/executor/graph_executor.py +0 -335
- lionagi/core/executor/neo4j_executor.py +0 -394
- lionagi/core/generic/README.md +0 -0
- lionagi/core/generic/edge_condition.py +0 -17
- lionagi/core/generic/hyperedge.py +0 -1
- lionagi/core/generic/tree.py +0 -49
- lionagi/core/generic/tree_node.py +0 -85
- lionagi/core/mail/__init__.py +0 -11
- lionagi/core/mail/mail.py +0 -26
- lionagi/core/mail/mail_manager.py +0 -185
- lionagi/core/mail/package.py +0 -49
- lionagi/core/mail/start_mail.py +0 -36
- lionagi/core/message/__init__.py +0 -18
- lionagi/core/message/action_request.py +0 -114
- lionagi/core/message/action_response.py +0 -121
- lionagi/core/message/assistant_response.py +0 -80
- lionagi/core/message/instruction.py +0 -194
- lionagi/core/message/message.py +0 -86
- lionagi/core/message/system.py +0 -71
- lionagi/core/message/util.py +0 -274
- lionagi/core/report/__init__.py +0 -4
- lionagi/core/report/base.py +0 -201
- lionagi/core/report/form.py +0 -212
- lionagi/core/report/report.py +0 -150
- lionagi/core/report/util.py +0 -15
- lionagi/core/rule/_default.py +0 -17
- lionagi/core/rule/action.py +0 -87
- lionagi/core/rule/base.py +0 -234
- lionagi/core/rule/boolean.py +0 -56
- lionagi/core/rule/choice.py +0 -48
- lionagi/core/rule/mapping.py +0 -82
- lionagi/core/rule/number.py +0 -73
- lionagi/core/rule/rulebook.py +0 -45
- lionagi/core/rule/string.py +0 -43
- lionagi/core/rule/util.py +0 -0
- lionagi/core/session/directive_mixin.py +0 -307
- lionagi/core/structure/__init__.py +0 -1
- lionagi/core/structure/chain.py +0 -1
- lionagi/core/structure/forest.py +0 -1
- lionagi/core/structure/graph.py +0 -1
- lionagi/core/structure/tree.py +0 -1
- lionagi/core/unit/__init__.py +0 -4
- lionagi/core/unit/parallel_unit.py +0 -234
- lionagi/core/unit/template/action.py +0 -65
- lionagi/core/unit/template/base.py +0 -35
- lionagi/core/unit/template/plan.py +0 -69
- lionagi/core/unit/template/predict.py +0 -95
- lionagi/core/unit/template/score.py +0 -108
- lionagi/core/unit/template/select.py +0 -91
- lionagi/core/unit/unit.py +0 -452
- lionagi/core/unit/unit_form.py +0 -290
- lionagi/core/unit/unit_mixin.py +0 -1166
- lionagi/core/unit/util.py +0 -103
- lionagi/core/validator/validator.py +0 -376
- lionagi/core/work/work.py +0 -59
- lionagi/core/work/work_edge.py +0 -102
- lionagi/core/work/work_function.py +0 -114
- lionagi/core/work/work_function_node.py +0 -50
- lionagi/core/work/work_queue.py +0 -90
- lionagi/core/work/work_task.py +0 -151
- lionagi/core/work/worker.py +0 -410
- lionagi/core/work/worker_engine.py +0 -208
- lionagi/core/work/worklog.py +0 -108
- lionagi/experimental/compressor/base.py +0 -47
- lionagi/experimental/compressor/llm_compressor.py +0 -265
- lionagi/experimental/compressor/llm_summarizer.py +0 -61
- lionagi/experimental/compressor/util.py +0 -70
- lionagi/experimental/directive/README.md +0 -1
- lionagi/experimental/directive/__init__.py +0 -19
- lionagi/experimental/directive/parser/base_parser.py +0 -294
- lionagi/experimental/directive/parser/base_syntax.txt +0 -200
- lionagi/experimental/directive/template/base_template.py +0 -71
- lionagi/experimental/directive/template/schema.py +0 -36
- lionagi/experimental/directive/tokenizer.py +0 -59
- lionagi/experimental/evaluator/README.md +0 -1
- lionagi/experimental/evaluator/ast_evaluator.py +0 -119
- lionagi/experimental/evaluator/base_evaluator.py +0 -213
- lionagi/experimental/knowledge/__init__.py +0 -0
- lionagi/experimental/knowledge/base.py +0 -10
- lionagi/experimental/knowledge/graph.py +0 -0
- lionagi/experimental/memory/__init__.py +0 -0
- lionagi/experimental/strategies/__init__.py +0 -0
- lionagi/experimental/strategies/base.py +0 -1
- lionagi/integrations/bridge/__init__.py +0 -4
- lionagi/integrations/bridge/autogen_/__init__.py +0 -0
- lionagi/integrations/bridge/autogen_/autogen_.py +0 -127
- lionagi/integrations/bridge/langchain_/__init__.py +0 -0
- lionagi/integrations/bridge/langchain_/documents.py +0 -138
- lionagi/integrations/bridge/langchain_/langchain_bridge.py +0 -68
- lionagi/integrations/bridge/llamaindex_/__init__.py +0 -0
- lionagi/integrations/bridge/llamaindex_/index.py +0 -36
- lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +0 -108
- lionagi/integrations/bridge/llamaindex_/llama_pack.py +0 -256
- lionagi/integrations/bridge/llamaindex_/node_parser.py +0 -92
- lionagi/integrations/bridge/llamaindex_/reader.py +0 -201
- lionagi/integrations/bridge/llamaindex_/textnode.py +0 -59
- lionagi/integrations/bridge/pydantic_/__init__.py +0 -0
- lionagi/integrations/bridge/pydantic_/pydantic_bridge.py +0 -7
- lionagi/integrations/bridge/transformers_/__init__.py +0 -0
- lionagi/integrations/bridge/transformers_/install_.py +0 -39
- lionagi/integrations/chunker/__init__.py +0 -0
- lionagi/integrations/chunker/chunk.py +0 -314
- lionagi/integrations/config/__init__.py +0 -4
- lionagi/integrations/config/mlx_configs.py +0 -1
- lionagi/integrations/config/oai_configs.py +0 -154
- lionagi/integrations/config/ollama_configs.py +0 -1
- lionagi/integrations/config/openrouter_configs.py +0 -74
- lionagi/integrations/langchain_/__init__.py +0 -0
- lionagi/integrations/llamaindex_/__init__.py +0 -0
- lionagi/integrations/loader/__init__.py +0 -0
- lionagi/integrations/loader/load.py +0 -257
- lionagi/integrations/loader/load_util.py +0 -214
- lionagi/integrations/provider/__init__.py +0 -11
- lionagi/integrations/provider/_mapping.py +0 -47
- lionagi/integrations/provider/litellm.py +0 -53
- lionagi/integrations/provider/mistralai.py +0 -1
- lionagi/integrations/provider/mlx_service.py +0 -55
- lionagi/integrations/provider/oai.py +0 -196
- lionagi/integrations/provider/ollama.py +0 -55
- lionagi/integrations/provider/openrouter.py +0 -170
- lionagi/integrations/provider/services.py +0 -138
- lionagi/integrations/provider/transformers.py +0 -108
- lionagi/integrations/storage/__init__.py +0 -3
- lionagi/integrations/storage/neo4j.py +0 -681
- lionagi/integrations/storage/storage_util.py +0 -302
- lionagi/integrations/storage/structure_excel.py +0 -291
- lionagi/integrations/storage/to_csv.py +0 -70
- lionagi/integrations/storage/to_excel.py +0 -91
- lionagi/libs/ln_api.py +0 -944
- lionagi/libs/ln_async.py +0 -208
- lionagi/libs/ln_context.py +0 -37
- lionagi/libs/ln_convert.py +0 -671
- lionagi/libs/ln_dataframe.py +0 -187
- lionagi/libs/ln_func_call.py +0 -1328
- lionagi/libs/ln_image.py +0 -114
- lionagi/libs/ln_knowledge_graph.py +0 -422
- lionagi/libs/ln_nested.py +0 -822
- lionagi/libs/ln_parse.py +0 -750
- lionagi/libs/ln_queue.py +0 -107
- lionagi/libs/ln_tokenize.py +0 -179
- lionagi/libs/ln_validate.py +0 -299
- lionagi/libs/special_tokens.py +0 -172
- lionagi/libs/sys_util.py +0 -710
- lionagi/lions/__init__.py +0 -0
- lionagi/lions/coder/__init__.py +0 -0
- lionagi/lions/coder/add_feature.py +0 -20
- lionagi/lions/coder/base_prompts.py +0 -22
- lionagi/lions/coder/code_form.py +0 -15
- lionagi/lions/coder/coder.py +0 -184
- lionagi/lions/coder/util.py +0 -101
- lionagi/lions/director/__init__.py +0 -0
- lionagi/lions/judge/__init__.py +0 -0
- lionagi/lions/judge/config.py +0 -8
- lionagi/lions/judge/data/__init__.py +0 -0
- lionagi/lions/judge/data/sample_codes.py +0 -526
- lionagi/lions/judge/data/sample_rurbic.py +0 -48
- lionagi/lions/judge/forms/__init__.py +0 -0
- lionagi/lions/judge/forms/code_analysis_form.py +0 -126
- lionagi/lions/judge/rubric.py +0 -34
- lionagi/lions/judge/services/__init__.py +0 -0
- lionagi/lions/judge/services/judge_code.py +0 -49
- lionagi/lions/researcher/__init__.py +0 -0
- lionagi/lions/researcher/data_source/__init__.py +0 -0
- lionagi/lions/researcher/data_source/finhub_.py +0 -192
- lionagi/lions/researcher/data_source/google_.py +0 -207
- lionagi/lions/researcher/data_source/wiki_.py +0 -98
- lionagi/lions/researcher/data_source/yfinance_.py +0 -21
- lionagi/operations/brainstorm.py +0 -87
- lionagi/operations/config.py +0 -6
- lionagi/operations/rank.py +0 -102
- lionagi/operations/score.py +0 -144
- lionagi/operations/select.py +0 -141
- lionagi-0.4.0.dist-info/METADATA +0 -241
- lionagi-0.4.0.dist-info/RECORD +0 -249
- /lionagi/{core/_setting → integrations/anthropic_/api_endpoints/messages/response}/__init__.py +0 -0
- /lionagi/{core/agent → integrations/groq_/api_endpoints}/__init__.py +0 -0
- /lionagi/{core/agent/eval → integrations/ollama_/api_endpoints/completion}/__init__.py +0 -0
- /lionagi/{core/agent/learn → integrations/ollama_/api_endpoints/embedding}/__init__.py +0 -0
- /lionagi/{core/agent/plan → integrations/openai_}/__init__.py +0 -0
- /lionagi/{core/director → integrations/openai_/api_endpoints/chat_completions/response}/__init__.py +0 -0
- /lionagi/{core/director/operations → integrations/openai_/image_token_calculator}/__init__.py +0 -0
- /lionagi/{core/engine → integrations/perplexity_/api_endpoints}/__init__.py +0 -0
- /lionagi/{core/executor → integrations/perplexity_/api_endpoints/chat_completions}/__init__.py +0 -0
- /lionagi/{core/generic/registry/component_registry → integrations/perplexity_/api_endpoints/chat_completions/request}/__init__.py +0 -0
- /lionagi/{core/rule → integrations/perplexity_/api_endpoints/chat_completions/response}/__init__.py +0 -0
- /lionagi/{core/unit/template → libs/compress}/__init__.py +0 -0
- /lionagi/{core/validator → libs/file}/__init__.py +0 -0
- /lionagi/{core/work → libs/func}/__init__.py +0 -0
- /lionagi/{experimental → libs/package}/__init__.py +0 -0
- /lionagi/{core/agent/plan/plan.py → libs/parse/params.py} +0 -0
- /lionagi/{experimental/compressor → protocols}/__init__.py +0 -0
- /lionagi/{experimental/directive/parser → protocols/adapters}/__init__.py +0 -0
- /lionagi/{experimental/directive/template → protocols/registries}/__init__.py +0 -0
- /lionagi/{experimental/evaluator → strategies}/__init__.py +0 -0
- {lionagi-0.4.0.dist-info → lionagi-0.5.0.dist-info/licenses}/LICENSE +0 -0
@@ -1,154 +0,0 @@
|
|
1
|
-
# Default configs for the OpenAI API
|
2
|
-
|
3
|
-
API_key_schema = ("OPENAI_API_KEY",)
|
4
|
-
|
5
|
-
# ChatCompletion
|
6
|
-
oai_chat_llmconfig = {
|
7
|
-
"model": "gpt-4o-2024-08-06",
|
8
|
-
"frequency_penalty": 0,
|
9
|
-
"max_tokens": None,
|
10
|
-
"n": 1,
|
11
|
-
"presence_penalty": 0,
|
12
|
-
"response_format": {"type": "text"},
|
13
|
-
"seed": None,
|
14
|
-
"stop": None,
|
15
|
-
"stream": False,
|
16
|
-
"temperature": 0.1,
|
17
|
-
"top_p": 1,
|
18
|
-
"tools": None,
|
19
|
-
"tool_choice": "none",
|
20
|
-
"user": None,
|
21
|
-
"logprobs": False,
|
22
|
-
"top_logprobs": None,
|
23
|
-
}
|
24
|
-
|
25
|
-
oai_chat_schema = {
|
26
|
-
"required": [
|
27
|
-
"model",
|
28
|
-
"frequency_penalty",
|
29
|
-
"n",
|
30
|
-
"presence_penalty",
|
31
|
-
"response_format",
|
32
|
-
"temperature",
|
33
|
-
"top_p",
|
34
|
-
],
|
35
|
-
"optional": [
|
36
|
-
"seed",
|
37
|
-
"stop",
|
38
|
-
"stream",
|
39
|
-
"tools",
|
40
|
-
"tool_choice",
|
41
|
-
"user",
|
42
|
-
"max_tokens",
|
43
|
-
"logprobs",
|
44
|
-
"top_logprobs",
|
45
|
-
],
|
46
|
-
"input_": "messages",
|
47
|
-
"config": oai_chat_llmconfig,
|
48
|
-
"token_encoding_name": "cl100k_base",
|
49
|
-
"token_limit": 128_000,
|
50
|
-
"interval_tokens": 1_000_000,
|
51
|
-
"interval_requests": 1_000,
|
52
|
-
"interval": 60,
|
53
|
-
}
|
54
|
-
|
55
|
-
# Finetune
|
56
|
-
oai_finetune_llmconfig = {
|
57
|
-
"model": "gpt-3.5-turbo",
|
58
|
-
"hyperparameters": {
|
59
|
-
"batch_size": "auto",
|
60
|
-
"learning_rate_multiplier": "auto",
|
61
|
-
"n_epochs": "auto",
|
62
|
-
},
|
63
|
-
"suffix": None,
|
64
|
-
"training_file": None,
|
65
|
-
}
|
66
|
-
|
67
|
-
oai_finetune_schema = {
|
68
|
-
"required": ["model", "training_file"],
|
69
|
-
"optional": ["hyperparameters", "suffix", "validate_file"],
|
70
|
-
"input_": ["training_file"],
|
71
|
-
"config": oai_finetune_llmconfig,
|
72
|
-
}
|
73
|
-
|
74
|
-
# Audio ---- create speech
|
75
|
-
|
76
|
-
oai_audio_speech_llmconfig = {
|
77
|
-
"model": "tts-1",
|
78
|
-
"voice": "alloy",
|
79
|
-
"response_format": "mp3",
|
80
|
-
"speed": 1,
|
81
|
-
}
|
82
|
-
oai_audio_speech_schema = {
|
83
|
-
"required": ["model", "voice"],
|
84
|
-
"optional": ["response_format", "speed"],
|
85
|
-
"input_": "input_",
|
86
|
-
"config": oai_audio_speech_llmconfig,
|
87
|
-
}
|
88
|
-
|
89
|
-
# Audio ----------- create transcription
|
90
|
-
oai_audio_transcriptions_llmconfig = {
|
91
|
-
"model": "whisper-1",
|
92
|
-
"language": None,
|
93
|
-
"format_prompt": None,
|
94
|
-
"response_format": "json",
|
95
|
-
"temperature": 0,
|
96
|
-
}
|
97
|
-
oai_audio_transcriptions_schema = {
|
98
|
-
"required": ["model", "voice"],
|
99
|
-
"optional": [
|
100
|
-
"response_format",
|
101
|
-
"language",
|
102
|
-
"format_prompt",
|
103
|
-
"response_format",
|
104
|
-
"temperature",
|
105
|
-
],
|
106
|
-
"input_": "file",
|
107
|
-
"config": oai_audio_transcriptions_llmconfig,
|
108
|
-
}
|
109
|
-
|
110
|
-
# Audio ------------ translations
|
111
|
-
oai_audio_translations_llmconfig = {
|
112
|
-
"model": "whisper-1",
|
113
|
-
"format_prompt": None,
|
114
|
-
"response_format": "json",
|
115
|
-
"temperature": 0,
|
116
|
-
}
|
117
|
-
|
118
|
-
oai_audio_translations_schema = {
|
119
|
-
"required": ["model"],
|
120
|
-
"optional": ["response_format", "speed", "format_prompt", "temperature"],
|
121
|
-
"input_": "file",
|
122
|
-
"config": oai_audio_translations_llmconfig,
|
123
|
-
}
|
124
|
-
|
125
|
-
# embeddings
|
126
|
-
|
127
|
-
oai_embeddings_llmconfig = {
|
128
|
-
"model": "text-embedding-ada-002",
|
129
|
-
"encoding_format": "float",
|
130
|
-
"user": None,
|
131
|
-
"dimensions": None,
|
132
|
-
}
|
133
|
-
|
134
|
-
oai_embeddings_schema = {
|
135
|
-
"required": ["model", "encoding_format"],
|
136
|
-
"optional": ["user", "dimensions"],
|
137
|
-
"input_": "input",
|
138
|
-
"config": oai_embeddings_llmconfig,
|
139
|
-
"token_encoding_name": "cl100k_base",
|
140
|
-
"token_limit": 8192,
|
141
|
-
"interval_tokens": 1_000_000,
|
142
|
-
"interval_requests": 1_000,
|
143
|
-
"interval": 60,
|
144
|
-
}
|
145
|
-
|
146
|
-
oai_schema = {
|
147
|
-
"chat/completions": oai_chat_schema,
|
148
|
-
"finetune": oai_finetune_schema,
|
149
|
-
"audio_speech": oai_audio_speech_schema,
|
150
|
-
"audio_transcriptions": oai_audio_transcriptions_schema,
|
151
|
-
"audio_translations": oai_audio_translations_schema,
|
152
|
-
"API_key_schema": API_key_schema,
|
153
|
-
"embeddings": oai_embeddings_schema,
|
154
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
model = "llama3"
|
@@ -1,74 +0,0 @@
|
|
1
|
-
API_key_schema = ("OPENROUTER_API_KEY",)
|
2
|
-
|
3
|
-
openrouter_chat_llmconfig = {
|
4
|
-
"model": "gpt-4o",
|
5
|
-
"frequency_penalty": 0,
|
6
|
-
"max_tokens": None,
|
7
|
-
"num": 1,
|
8
|
-
"presence_penalty": 0,
|
9
|
-
"response_format": {"type": "text"},
|
10
|
-
"seed": None,
|
11
|
-
"stop": None,
|
12
|
-
"stream": False,
|
13
|
-
"temperature": 0.1,
|
14
|
-
"top_p": 1,
|
15
|
-
"tools": None,
|
16
|
-
"tool_choice": "none",
|
17
|
-
"user": None,
|
18
|
-
"logprobs": False,
|
19
|
-
"top_logprobs": None,
|
20
|
-
}
|
21
|
-
|
22
|
-
openrouter_chat_schema = {
|
23
|
-
"required": [
|
24
|
-
"model",
|
25
|
-
"frequency_penalty",
|
26
|
-
"num",
|
27
|
-
"presence_penalty",
|
28
|
-
"response_format",
|
29
|
-
"temperature",
|
30
|
-
"top_p",
|
31
|
-
],
|
32
|
-
"optional": [
|
33
|
-
"seed",
|
34
|
-
"stop",
|
35
|
-
"stream",
|
36
|
-
"tools",
|
37
|
-
"tool_choice",
|
38
|
-
"user",
|
39
|
-
"max_tokens",
|
40
|
-
"logprobs",
|
41
|
-
"top_logprobs",
|
42
|
-
],
|
43
|
-
"input_": "messages",
|
44
|
-
"config": openrouter_chat_llmconfig,
|
45
|
-
"token_encoding_name": "cl100k_base",
|
46
|
-
"token_limit": 128_000,
|
47
|
-
"interval_tokens": 10_000,
|
48
|
-
"interval_requests": 100,
|
49
|
-
"interval": 60,
|
50
|
-
}
|
51
|
-
|
52
|
-
openrouter_finetune_llmconfig = {
|
53
|
-
"model": "gpt-3.5-turbo",
|
54
|
-
"hyperparameters": {
|
55
|
-
"batch_size": "auto",
|
56
|
-
"learning_rate_multiplier": "auto",
|
57
|
-
"n_epochs": "auto",
|
58
|
-
},
|
59
|
-
"suffix": None,
|
60
|
-
"training_file": None,
|
61
|
-
}
|
62
|
-
|
63
|
-
openrouter_finetune_schema = {
|
64
|
-
"required": ["model", "training_file"],
|
65
|
-
"optional": ["hyperparameters", "suffix", "validate_file"],
|
66
|
-
"input_": ["training_file"],
|
67
|
-
"config": openrouter_finetune_llmconfig,
|
68
|
-
}
|
69
|
-
|
70
|
-
openrouter_schema = {
|
71
|
-
"chat/completions": openrouter_chat_schema,
|
72
|
-
"finetune": openrouter_finetune_schema,
|
73
|
-
"API_key_schema": API_key_schema,
|
74
|
-
}
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,257 +0,0 @@
|
|
1
|
-
from collections.abc import Callable
|
2
|
-
|
3
|
-
from lionagi.core.collections import pile
|
4
|
-
from lionagi.core.generic import Node
|
5
|
-
|
6
|
-
from ..bridge.langchain_.langchain_bridge import LangchainBridge
|
7
|
-
from ..bridge.llamaindex_.llama_index_bridge import LlamaIndexBridge
|
8
|
-
from .load_util import ReaderType, _datanode_parser, dir_to_nodes
|
9
|
-
|
10
|
-
|
11
|
-
def text_reader(args, kwargs):
|
12
|
-
"""
|
13
|
-
Reads text files from a directory and converts them to Node instances.
|
14
|
-
|
15
|
-
Args:
|
16
|
-
args: Positional arguments for the dir_to_nodes function.
|
17
|
-
kwargs: Keyword arguments for the dir_to_nodes function.
|
18
|
-
|
19
|
-
Returns:
|
20
|
-
A list of Node instances.
|
21
|
-
|
22
|
-
Example usage:
|
23
|
-
>>> args = ['path/to/text/files']
|
24
|
-
>>> kwargs = {'file_extension': 'txt'}
|
25
|
-
>>> nodes = text_reader(args, kwargs)
|
26
|
-
"""
|
27
|
-
return dir_to_nodes(*args, **kwargs)
|
28
|
-
|
29
|
-
|
30
|
-
def load(
|
31
|
-
reader: str | Callable = "text_reader",
|
32
|
-
input_dir=None,
|
33
|
-
input_files=None,
|
34
|
-
recursive: bool = False,
|
35
|
-
required_exts: list[str] = None,
|
36
|
-
reader_type=ReaderType.PLAIN,
|
37
|
-
reader_args=None,
|
38
|
-
reader_kwargs=None,
|
39
|
-
load_args=None,
|
40
|
-
load_kwargs=None,
|
41
|
-
to_lion: bool | Callable = True,
|
42
|
-
):
|
43
|
-
"""
|
44
|
-
Loads data using the specified reader and converts it to Node instances.
|
45
|
-
|
46
|
-
Args:
|
47
|
-
reader (str | Callable): The reader function or its name. Defaults to "text_reader".
|
48
|
-
input_dir (str, optional): The directory to read files from. Defaults to None.
|
49
|
-
input_files (list[str], optional): Specific files to read. Defaults to None.
|
50
|
-
recursive (bool, optional): Whether to read files recursively. Defaults to False.
|
51
|
-
required_exts (list[str], optional): List of required file extensions. Defaults to None.
|
52
|
-
reader_type (ReaderType, optional): The type of reader to use. Defaults to ReaderType.PLAIN.
|
53
|
-
reader_args (list, optional): Positional arguments for the reader function. Defaults to None.
|
54
|
-
reader_kwargs (dict, optional): Keyword arguments for the reader function. Defaults to None.
|
55
|
-
load_args (list, optional): Positional arguments for loading. Defaults to None.
|
56
|
-
load_kwargs (dict, optional): Keyword arguments for loading. Defaults to None.
|
57
|
-
to_lion (bool | Callable, optional): Whether to convert the data to Node instances or a custom parser. Defaults to True.
|
58
|
-
|
59
|
-
Returns:
|
60
|
-
pile: A pile of Node instances.
|
61
|
-
|
62
|
-
Raises:
|
63
|
-
ValueError: If the reader_type is not supported.
|
64
|
-
|
65
|
-
Example usage:
|
66
|
-
>>> nodes = load(input_dir='path/to/text/files', required_exts=['txt'])
|
67
|
-
"""
|
68
|
-
|
69
|
-
if reader_args is None:
|
70
|
-
reader_args = []
|
71
|
-
if reader_kwargs is None:
|
72
|
-
reader_kwargs = {}
|
73
|
-
if load_args is None:
|
74
|
-
load_args = []
|
75
|
-
if load_kwargs is None:
|
76
|
-
load_kwargs = {}
|
77
|
-
|
78
|
-
if reader_type == ReaderType.PLAIN:
|
79
|
-
reader_kwargs["dir_"] = input_dir
|
80
|
-
reader_kwargs["ext"] = required_exts
|
81
|
-
reader_kwargs["recursive"] = recursive
|
82
|
-
|
83
|
-
return read_funcs[ReaderType.PLAIN](reader, reader_args, reader_kwargs)
|
84
|
-
|
85
|
-
if reader_type == ReaderType.LANGCHAIN:
|
86
|
-
return read_funcs[ReaderType.LANGCHAIN](
|
87
|
-
reader, reader_args, reader_kwargs, to_lion
|
88
|
-
)
|
89
|
-
|
90
|
-
elif reader_type == ReaderType.LLAMAINDEX:
|
91
|
-
if input_dir is not None:
|
92
|
-
reader_kwargs["input_dir"] = input_dir
|
93
|
-
if input_files is not None:
|
94
|
-
reader_kwargs["input_files"] = input_files
|
95
|
-
if recursive:
|
96
|
-
reader_kwargs["recursive"] = True
|
97
|
-
if required_exts is not None:
|
98
|
-
reader_kwargs["required_exts"] = required_exts
|
99
|
-
|
100
|
-
return read_funcs[ReaderType.LLAMAINDEX](
|
101
|
-
reader, reader_args, reader_kwargs, load_args, load_kwargs, to_lion
|
102
|
-
)
|
103
|
-
|
104
|
-
elif reader_type == ReaderType.SELFDEFINED:
|
105
|
-
return read_funcs[ReaderType.SELFDEFINED](
|
106
|
-
reader, reader_args, reader_kwargs, load_args, load_kwargs, to_lion
|
107
|
-
)
|
108
|
-
|
109
|
-
else:
|
110
|
-
raise ValueError(
|
111
|
-
f"{reader_type} is not supported. Please choose from {list(ReaderType)}"
|
112
|
-
)
|
113
|
-
|
114
|
-
|
115
|
-
def _plain_reader(reader, reader_args, reader_kwargs):
|
116
|
-
"""
|
117
|
-
Reads data using a plain reader.
|
118
|
-
|
119
|
-
Args:
|
120
|
-
reader (str | Callable): The reader function or its name.
|
121
|
-
reader_args (list): Positional arguments for the reader function.
|
122
|
-
reader_kwargs (dict): Keyword arguments for the reader function.
|
123
|
-
|
124
|
-
Returns:
|
125
|
-
pile: A pile of Node instances.
|
126
|
-
|
127
|
-
Raises:
|
128
|
-
ValueError: If the reader is not supported.
|
129
|
-
|
130
|
-
Example usage:
|
131
|
-
>>> nodes = _plain_reader('text_reader', ['path/to/files'], {'ext': 'txt'})
|
132
|
-
"""
|
133
|
-
try:
|
134
|
-
if reader == "text_reader":
|
135
|
-
reader = text_reader
|
136
|
-
nodes = reader(reader_args, reader_kwargs)
|
137
|
-
return pile(nodes)
|
138
|
-
except Exception as e:
|
139
|
-
raise ValueError(
|
140
|
-
f"Reader {reader} is currently not supported. Error: {e}"
|
141
|
-
) from e
|
142
|
-
|
143
|
-
|
144
|
-
def _langchain_reader(
|
145
|
-
reader, reader_args, reader_kwargs, to_lion: bool | Callable
|
146
|
-
):
|
147
|
-
"""
|
148
|
-
Reads data using a Langchain reader.
|
149
|
-
|
150
|
-
Args:
|
151
|
-
reader (str | Callable): The reader function or its name.
|
152
|
-
reader_args (list): Positional arguments for the reader function.
|
153
|
-
reader_kwargs (dict): Keyword arguments for the reader function.
|
154
|
-
to_lion (bool | Callable): Whether to convert the data to Node instances or a custom parser.
|
155
|
-
|
156
|
-
Returns:
|
157
|
-
pile: A pile of Node instances or custom parsed nodes.
|
158
|
-
|
159
|
-
Example usage:
|
160
|
-
>>> nodes = _langchain_reader('langchain_reader', ['arg1'], {'key': 'value'}, True)
|
161
|
-
"""
|
162
|
-
nodes = LangchainBridge.langchain_loader(
|
163
|
-
reader, reader_args, reader_kwargs
|
164
|
-
)
|
165
|
-
if isinstance(to_lion, bool) and to_lion is True:
|
166
|
-
return pile([Node.from_langchain(i) for i in nodes])
|
167
|
-
|
168
|
-
elif isinstance(to_lion, Callable):
|
169
|
-
nodes = _datanode_parser(nodes, to_lion)
|
170
|
-
return nodes
|
171
|
-
|
172
|
-
|
173
|
-
def _llama_index_reader(
|
174
|
-
reader,
|
175
|
-
reader_args,
|
176
|
-
reader_kwargs,
|
177
|
-
load_args,
|
178
|
-
load_kwargs,
|
179
|
-
to_lion: bool | Callable,
|
180
|
-
):
|
181
|
-
"""
|
182
|
-
Reads data using a LlamaIndex reader.
|
183
|
-
|
184
|
-
Args:
|
185
|
-
reader (str | Callable): The reader function or its name.
|
186
|
-
reader_args (list): Positional arguments for the reader function.
|
187
|
-
reader_kwargs (dict): Keyword arguments for the reader function.
|
188
|
-
load_args (list): Positional arguments for loading.
|
189
|
-
load_kwargs (dict): Keyword arguments for loading.
|
190
|
-
to_lion (bool | Callable): Whether to convert the data to Node instances or a custom parser.
|
191
|
-
|
192
|
-
Returns:
|
193
|
-
pile: A pile of Node instances or custom parsed nodes.
|
194
|
-
|
195
|
-
Example usage:
|
196
|
-
>>> nodes = _llama_index_reader('llama_reader', ['arg1'], {'key': 'value'}, [], {}, True)
|
197
|
-
"""
|
198
|
-
nodes = LlamaIndexBridge.llama_index_read_data(
|
199
|
-
reader, reader_args, reader_kwargs, load_args, load_kwargs
|
200
|
-
)
|
201
|
-
if isinstance(to_lion, bool) and to_lion is True:
|
202
|
-
return pile([Node.from_llama_index(i) for i in nodes])
|
203
|
-
|
204
|
-
elif isinstance(to_lion, Callable):
|
205
|
-
nodes = _datanode_parser(nodes, to_lion)
|
206
|
-
return nodes
|
207
|
-
|
208
|
-
|
209
|
-
def _self_defined_reader(
|
210
|
-
reader,
|
211
|
-
reader_args,
|
212
|
-
reader_kwargs,
|
213
|
-
load_args,
|
214
|
-
load_kwargs,
|
215
|
-
to_lion: bool | Callable,
|
216
|
-
):
|
217
|
-
"""
|
218
|
-
Reads data using a self-defined reader.
|
219
|
-
|
220
|
-
Args:
|
221
|
-
reader (str | Callable): The reader function or its name.
|
222
|
-
reader_args (list): Positional arguments for the reader function.
|
223
|
-
reader_kwargs (dict): Keyword arguments for the reader function.
|
224
|
-
load_args (list): Positional arguments for loading.
|
225
|
-
load_kwargs (dict): Keyword arguments for loading.
|
226
|
-
to_lion (bool | Callable): Whether to convert the data to Node instances or a custom parser.
|
227
|
-
|
228
|
-
Returns:
|
229
|
-
pile: A pile of Node instances or custom parsed nodes.
|
230
|
-
|
231
|
-
Raises:
|
232
|
-
ValueError: If the self-defined reader is not valid.
|
233
|
-
|
234
|
-
Example usage:
|
235
|
-
>>> nodes = _self_defined_reader(custom_reader, ['arg1'], {'key': 'value'}, [], {}, custom_parser)
|
236
|
-
"""
|
237
|
-
try:
|
238
|
-
loader = reader(*reader_args, **reader_kwargs)
|
239
|
-
nodes = loader.load(*load_args, **load_kwargs)
|
240
|
-
except Exception as e:
|
241
|
-
raise ValueError(
|
242
|
-
f"Self defined reader {reader} is not valid. Error: {e}"
|
243
|
-
) from e
|
244
|
-
|
245
|
-
if isinstance(to_lion, bool) and to_lion is True:
|
246
|
-
raise ValueError("Please define a valid parser to Node.")
|
247
|
-
elif isinstance(to_lion, Callable):
|
248
|
-
nodes = _datanode_parser(nodes, to_lion)
|
249
|
-
return nodes
|
250
|
-
|
251
|
-
|
252
|
-
read_funcs = {
|
253
|
-
ReaderType.PLAIN: _plain_reader,
|
254
|
-
ReaderType.LANGCHAIN: _langchain_reader,
|
255
|
-
ReaderType.LLAMAINDEX: _llama_index_reader,
|
256
|
-
ReaderType.SELFDEFINED: _self_defined_reader,
|
257
|
-
}
|
@@ -1,214 +0,0 @@
|
|
1
|
-
# use utils and schema
|
2
|
-
from enum import Enum
|
3
|
-
from pathlib import Path
|
4
|
-
from typing import Any, Dict, List, Tuple, Union
|
5
|
-
|
6
|
-
from lionagi.core.generic import Node
|
7
|
-
from lionagi.libs import convert, func_call
|
8
|
-
from lionagi.libs.ln_tokenize import TokenizeUtil
|
9
|
-
|
10
|
-
|
11
|
-
class ReaderType(str, Enum):
|
12
|
-
PLAIN = "plain"
|
13
|
-
LANGCHAIN = "langchain"
|
14
|
-
LLAMAINDEX = "llama_index"
|
15
|
-
SELFDEFINED = "self_defined"
|
16
|
-
|
17
|
-
|
18
|
-
class ChunkerType(str, Enum):
|
19
|
-
PLAIN = "plain" # default
|
20
|
-
LANGCHAIN = "langchain" # using langchain functions
|
21
|
-
LLAMAINDEX = "llama_index" # using llamaindex functions
|
22
|
-
SELFDEFINED = "self_defined" # create custom functions
|
23
|
-
|
24
|
-
|
25
|
-
def dir_to_path(
|
26
|
-
dir: str, ext: str, recursive: bool = False, flatten: bool = True
|
27
|
-
) -> list[Path]:
|
28
|
-
"""
|
29
|
-
Generates a list of file paths from a directory with the given file extension.
|
30
|
-
|
31
|
-
Parameters:
|
32
|
-
dir (str): The directory to search for files.
|
33
|
-
|
34
|
-
ext (str): The file extension to filter by.
|
35
|
-
|
36
|
-
recursive (bool): Whether to search subdirectories recursively. Defaults to False.
|
37
|
-
|
38
|
-
flatten (bool): Whether to flatten the list. Defaults to True.
|
39
|
-
|
40
|
-
Returns:
|
41
|
-
List[Path]: A list of Paths to the files.
|
42
|
-
|
43
|
-
Raises:
|
44
|
-
ValueError: If the directory or extension is invalid.
|
45
|
-
"""
|
46
|
-
|
47
|
-
def _dir_to_path(ext):
|
48
|
-
tem = "**/*" if recursive else "*"
|
49
|
-
return list(Path(dir).glob(tem + ext))
|
50
|
-
|
51
|
-
try:
|
52
|
-
return convert.to_list(
|
53
|
-
func_call.lcall(ext, _dir_to_path, flatten=True), flatten=flatten
|
54
|
-
)
|
55
|
-
except:
|
56
|
-
raise ValueError(
|
57
|
-
"Invalid directory or extension, please check the path"
|
58
|
-
)
|
59
|
-
|
60
|
-
|
61
|
-
def dir_to_nodes(
|
62
|
-
dir_: str,
|
63
|
-
ext: list[str] | str,
|
64
|
-
recursive: bool = False,
|
65
|
-
flatten: bool = True,
|
66
|
-
clean_text: bool = True,
|
67
|
-
) -> list[Node]:
|
68
|
-
"""
|
69
|
-
Converts directory contents into Node objects based on specified file extensions.
|
70
|
-
|
71
|
-
This function first retrieves a list of file paths from the specified directory, matching the given file extension. It then reads the content of these files, optionally cleaning the text, and converts each file's content into a Node object.
|
72
|
-
|
73
|
-
Parameters:
|
74
|
-
dir (str): The directory path from which to read files.
|
75
|
-
ext: The file extension(s) to include. Can be a single string or a list/tuple of strings.
|
76
|
-
recursive (bool, optional): If True, the function searches for files recursively in subdirectories. Defaults to False.
|
77
|
-
flatten (bool, optional): If True, flattens the directory structure in the returned paths. Defaults to True.
|
78
|
-
clean_text (bool, optional): If True, cleans the text read from files. Defaults to True.
|
79
|
-
|
80
|
-
Returns:
|
81
|
-
list: A list of Node objects created from the files in the specified directory.
|
82
|
-
|
83
|
-
Example:
|
84
|
-
nodes = dir_to_nodes("/path/to/dir", ".txt", recursive=True)
|
85
|
-
# This would read all .txt files in /path/to/dir and its subdirectories,
|
86
|
-
# converting them into Node objects.
|
87
|
-
"""
|
88
|
-
|
89
|
-
path_list = dir_to_path(
|
90
|
-
dir=dir_, ext=ext, recursive=recursive, flatten=flatten
|
91
|
-
)
|
92
|
-
files_info = func_call.lcall(path_list, read_text, clean=clean_text)
|
93
|
-
return func_call.lcall(
|
94
|
-
files_info, lambda x: Node(content=x[0], metadata=x[1])
|
95
|
-
)
|
96
|
-
|
97
|
-
|
98
|
-
def read_text(filepath: str, clean: bool = True) -> tuple[str, dict]:
|
99
|
-
"""
|
100
|
-
Reads text from a file and optionally cleans it, returning the content and metadata.
|
101
|
-
|
102
|
-
Parameters:
|
103
|
-
filepath (str): The path to the file to read.
|
104
|
-
|
105
|
-
clean (bool): Whether to clean the text by replacing certain characters. Defaults to True.
|
106
|
-
|
107
|
-
Returns:
|
108
|
-
Tuple[str, dict]: A tuple containing the content and metadata of the file.
|
109
|
-
|
110
|
-
Raises:
|
111
|
-
FileNotFoundError: If the file cannot be found.
|
112
|
-
|
113
|
-
PermissionError: If there are permissions issues.
|
114
|
-
|
115
|
-
OSError: For other OS-related errors.
|
116
|
-
"""
|
117
|
-
|
118
|
-
def _get_metadata():
|
119
|
-
import os
|
120
|
-
from datetime import datetime
|
121
|
-
|
122
|
-
file = filepath
|
123
|
-
size = os.path.getsize(filepath)
|
124
|
-
creation_date = datetime.fromtimestamp(
|
125
|
-
os.path.getctime(filepath)
|
126
|
-
).date()
|
127
|
-
modified_date = datetime.fromtimestamp(
|
128
|
-
os.path.getmtime(filepath)
|
129
|
-
).date()
|
130
|
-
last_accessed_date = datetime.fromtimestamp(
|
131
|
-
os.path.getatime(filepath)
|
132
|
-
).date()
|
133
|
-
return {
|
134
|
-
"file": convert.to_str(file),
|
135
|
-
"size": size,
|
136
|
-
"creation_date": str(creation_date),
|
137
|
-
"modified_date": str(modified_date),
|
138
|
-
"last_accessed_date": str(last_accessed_date),
|
139
|
-
}
|
140
|
-
|
141
|
-
try:
|
142
|
-
with open(filepath) as f:
|
143
|
-
content = f.read()
|
144
|
-
if clean:
|
145
|
-
# Define characters to replace and their replacements
|
146
|
-
replacements = {"\\": "", "\n\n": "\n"}
|
147
|
-
for old, new in replacements.items():
|
148
|
-
content = content.replace(old, new).strip()
|
149
|
-
metadata = _get_metadata()
|
150
|
-
return content, metadata
|
151
|
-
except Exception as e:
|
152
|
-
raise e
|
153
|
-
|
154
|
-
|
155
|
-
def _file_to_chunks(
|
156
|
-
input: dict[str, Any],
|
157
|
-
field: str = "content",
|
158
|
-
chunk_size: int = 1500,
|
159
|
-
overlap: float = 0.1,
|
160
|
-
threshold: int = 200,
|
161
|
-
) -> list[dict[str, Any]]:
|
162
|
-
try:
|
163
|
-
out = {key: value for key, value in input.items() if key != field} | {
|
164
|
-
"chunk_overlap": overlap,
|
165
|
-
"chunk_threshold": threshold,
|
166
|
-
}
|
167
|
-
chunks = TokenizeUtil.chunk_by_chars(
|
168
|
-
input[field],
|
169
|
-
chunk_size=chunk_size,
|
170
|
-
overlap=overlap,
|
171
|
-
threshold=threshold,
|
172
|
-
)
|
173
|
-
logs = []
|
174
|
-
for i, chunk in enumerate(chunks):
|
175
|
-
chunk_dict = out | {
|
176
|
-
"file_chunks": len(chunks),
|
177
|
-
"chunk_id": i + 1,
|
178
|
-
"chunk_size": len(chunk),
|
179
|
-
f"chunk_{field}": chunk,
|
180
|
-
}
|
181
|
-
logs.append(chunk_dict)
|
182
|
-
|
183
|
-
return logs
|
184
|
-
|
185
|
-
except Exception as e:
|
186
|
-
raise ValueError(
|
187
|
-
f"An error occurred while chunking the file. {e}"
|
188
|
-
) from e
|
189
|
-
|
190
|
-
|
191
|
-
# needs doing TODO
|
192
|
-
def file_to_chunks(
|
193
|
-
input,
|
194
|
-
# project='project',
|
195
|
-
# output_dir='data/logs/sources/',
|
196
|
-
chunk_func=_file_to_chunks,
|
197
|
-
**kwargs,
|
198
|
-
):
|
199
|
-
# out_to_csv=False,
|
200
|
-
# filename=None,
|
201
|
-
# verbose=True,
|
202
|
-
# timestamp=True,
|
203
|
-
# logger=None,
|
204
|
-
return convert.to_list(
|
205
|
-
func_call.lcall(input, chunk_func, **kwargs), flatten=True
|
206
|
-
)
|
207
|
-
|
208
|
-
|
209
|
-
def _datanode_parser(nodes, parser):
|
210
|
-
|
211
|
-
try:
|
212
|
-
return parser(nodes)
|
213
|
-
except Exception as e:
|
214
|
-
raise ValueError(f"Node parser {parser} failed. Error:{e}") from e
|