lionagi 0.4.0__py3-none-any.whl → 0.5.1__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 +545 -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 +117 -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 +151 -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 +73 -0
- lionagi/integrations/ollama_/OllamaModel.py +244 -0
- lionagi/integrations/ollama_/OllamaService.py +142 -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 +418 -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 +113 -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 +125 -0
- lionagi/service/rate_limiter.py +108 -0
- lionagi/service/service.py +41 -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.1.dist-info/METADATA +545 -0
- lionagi-0.5.1.dist-info/RECORD +373 -0
- {lionagi-0.4.0.dist-info → lionagi-0.5.1.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.1.dist-info/licenses}/LICENSE +0 -0
@@ -1,312 +0,0 @@
|
|
1
|
-
import atexit
|
2
|
-
import contextlib
|
3
|
-
import logging
|
4
|
-
from collections import deque
|
5
|
-
from dataclasses import dataclass
|
6
|
-
from pathlib import Path
|
7
|
-
from typing import Any, Dict, List
|
8
|
-
|
9
|
-
from lionagi.libs import SysUtil, convert, nested
|
10
|
-
|
11
|
-
# TODO: there should be a global data logger, under setting
|
12
|
-
|
13
|
-
|
14
|
-
@dataclass
|
15
|
-
class DLog:
|
16
|
-
"""Defines a log entry structure for data processing operations.
|
17
|
-
|
18
|
-
This class encapsulates both the input to and output from a data processing
|
19
|
-
operation, along with an automatically generated timestamp indicating when
|
20
|
-
the log entry was created. It aims to standardize logging across applications
|
21
|
-
for easier analysis and debugging.
|
22
|
-
|
23
|
-
Attributes:
|
24
|
-
input_data: The data input to the operation. Can be of any type.
|
25
|
-
output_data: The data output by the operation. Can be of any type.
|
26
|
-
"""
|
27
|
-
|
28
|
-
input_data: Any
|
29
|
-
output_data: Any
|
30
|
-
|
31
|
-
def serialize(
|
32
|
-
self, *, flatten_: bool = True, sep: str = "[^_^]"
|
33
|
-
) -> dict[str, Any]:
|
34
|
-
"""Serialize the DLog instance into a dictionary with an added timestamp.
|
35
|
-
|
36
|
-
Args:
|
37
|
-
flatten_ (bool): If True, flattens dictionary inputs for serialization.
|
38
|
-
sep (str): Separator used in flattening nested dictionaries.
|
39
|
-
|
40
|
-
Returns:
|
41
|
-
A dictionary representation of the DLog instance, including 'input_data',
|
42
|
-
'output_data', and 'timestamp'.
|
43
|
-
"""
|
44
|
-
log_dict = {}
|
45
|
-
|
46
|
-
def _process_data(data, field):
|
47
|
-
try:
|
48
|
-
data = convert.to_str(data)
|
49
|
-
if "{" not in data:
|
50
|
-
log_dict[field] = convert.to_str(data)
|
51
|
-
else:
|
52
|
-
with contextlib.suppress(Exception):
|
53
|
-
data = convert.to_dict(data)
|
54
|
-
|
55
|
-
if isinstance(self.input_data, dict) and flatten_:
|
56
|
-
log_dict[field] = convert.to_str(
|
57
|
-
nested.flatten(data, sep=sep)
|
58
|
-
)
|
59
|
-
else:
|
60
|
-
log_dict[field] = convert.to_str(data)
|
61
|
-
|
62
|
-
except Exception as e:
|
63
|
-
log_dict[field] = data
|
64
|
-
logging.error(f"Error in processing {field} to str: {e}")
|
65
|
-
|
66
|
-
_process_data(self.input_data, "input_data")
|
67
|
-
_process_data(self.output_data, "output_data")
|
68
|
-
|
69
|
-
log_dict["timestamp"] = SysUtil.get_timestamp()
|
70
|
-
|
71
|
-
return log_dict
|
72
|
-
|
73
|
-
@classmethod
|
74
|
-
def deserialize(
|
75
|
-
cls,
|
76
|
-
*,
|
77
|
-
input_str: str,
|
78
|
-
output_str: str,
|
79
|
-
unflatten_: bool = True,
|
80
|
-
sep: str = "[^_^]",
|
81
|
-
) -> "DLog":
|
82
|
-
"""Deserialize log entries from string representations.
|
83
|
-
|
84
|
-
This method reconstructs a DLog instance from serialized string data,
|
85
|
-
optionally unflattening nested dictionary structures if they were
|
86
|
-
flattened during the serialization process. The method is particularly
|
87
|
-
useful for reading logs from storage formats like JSON or CSV where
|
88
|
-
data is represented as strings.
|
89
|
-
|
90
|
-
Note:
|
91
|
-
The separator '[^_^]' is reserved and should not be used within
|
92
|
-
dictionary keys to ensure proper structure preservation during
|
93
|
-
unflattening.
|
94
|
-
|
95
|
-
Args:
|
96
|
-
input_str: String representation of the input data.
|
97
|
-
output_str: String representation of the output data.
|
98
|
-
unflatten_ (bool): Indicates whether to unflatten the string data
|
99
|
-
back into nested dictionaries.
|
100
|
-
sep (str): Separator used if unflattening is performed.
|
101
|
-
|
102
|
-
Returns:
|
103
|
-
An instance of DLog reconstructed from the provided string data.
|
104
|
-
|
105
|
-
Raises:
|
106
|
-
ValueError: If deserialization or unflattening fails due to incorrect
|
107
|
-
data format or separator issues.
|
108
|
-
"""
|
109
|
-
|
110
|
-
def _process_data(data):
|
111
|
-
if unflatten_:
|
112
|
-
try:
|
113
|
-
return nested.unflatten(convert.to_dict(data), sep=sep)
|
114
|
-
except Exception:
|
115
|
-
return data
|
116
|
-
else:
|
117
|
-
return data
|
118
|
-
|
119
|
-
input_data = _process_data(input_str)
|
120
|
-
output_data = _process_data(output_str)
|
121
|
-
|
122
|
-
return cls(input_data=input_data, output_data=output_data)
|
123
|
-
|
124
|
-
|
125
|
-
class DataLogger:
|
126
|
-
"""Manages logging for data processing activities within an application.
|
127
|
-
|
128
|
-
This class handles the accumulation, structuring, and persistence of log entries.
|
129
|
-
It supports exporting logs to disk in both CSV and JSON formats, with features for
|
130
|
-
automatic log saving at program exit and customizable file naming.
|
131
|
-
|
132
|
-
Attributes:
|
133
|
-
persist_path: Path to the directory for saving log files.
|
134
|
-
log: Container for log entries.
|
135
|
-
filename: Base name for log files.
|
136
|
-
"""
|
137
|
-
|
138
|
-
def __init__(
|
139
|
-
self,
|
140
|
-
persist_path: str | Path | None = None,
|
141
|
-
log: list[dict] | None = None,
|
142
|
-
filename: str | None = None,
|
143
|
-
) -> None:
|
144
|
-
"""Initialize the DataLogger with optional custom settings for log storage.
|
145
|
-
|
146
|
-
Args:
|
147
|
-
persist_path: The file system path for storing log files.
|
148
|
-
Defaults to 'data/logs/'.
|
149
|
-
log: Initial log entries.
|
150
|
-
filename: Base name for exported log files.
|
151
|
-
"""
|
152
|
-
self.persist_path = (
|
153
|
-
Path(persist_path) if persist_path else Path("data/logs/")
|
154
|
-
)
|
155
|
-
self.log = deque(log) if log else deque()
|
156
|
-
self.filename = filename or "log"
|
157
|
-
atexit.register(self.save_at_exit)
|
158
|
-
|
159
|
-
def extend(self, logs) -> None:
|
160
|
-
"""Extend the log deque with multiple log entries.
|
161
|
-
|
162
|
-
This method allows for bulk addition of log entries, which can be useful for
|
163
|
-
importing logs from external sources or consolidating logs from different parts
|
164
|
-
of an application.
|
165
|
-
|
166
|
-
Args:
|
167
|
-
logs: A list of log entries, each as a dictionary conforming to the log
|
168
|
-
structure (e.g., containing 'input_data', 'output_data', etc.).
|
169
|
-
"""
|
170
|
-
if len(logs) > 0:
|
171
|
-
log1 = convert.to_list(self.log)
|
172
|
-
log1.extend(convert.to_list(logs))
|
173
|
-
self.log = deque(log1)
|
174
|
-
|
175
|
-
def append(self, *, input_data: Any, output_data: Any) -> None:
|
176
|
-
"""Append a new log entry from provided input and output data.
|
177
|
-
|
178
|
-
Args:
|
179
|
-
input_data: Input data to the operation.
|
180
|
-
output_data: Output data from the operation.
|
181
|
-
"""
|
182
|
-
log_entry = DLog(input_data=input_data, output_data=output_data)
|
183
|
-
self.log.append(log_entry)
|
184
|
-
|
185
|
-
def to_csv_file(
|
186
|
-
self,
|
187
|
-
filename: str = "log.csv",
|
188
|
-
*,
|
189
|
-
dir_exist_ok: bool = True,
|
190
|
-
timestamp: bool = True,
|
191
|
-
time_prefix: bool = False,
|
192
|
-
verbose: bool = True,
|
193
|
-
clear: bool = True,
|
194
|
-
flatten_: bool = True,
|
195
|
-
sep: str = "[^_^]",
|
196
|
-
index: bool = False,
|
197
|
-
random_hash_digits: int = 3,
|
198
|
-
**kwargs,
|
199
|
-
) -> None:
|
200
|
-
"""Export log entries to a CSV file with customizable options.
|
201
|
-
|
202
|
-
Args:
|
203
|
-
filename: Filename for the exported CSV. Defaults to 'log.csv'.
|
204
|
-
dir_exist_ok: If True, allows writing to an existing directory.
|
205
|
-
timestamp: If True, appends a timestamp to the filename.
|
206
|
-
time_prefix: If True, places the timestamp prefix before the filename.
|
207
|
-
verbose: If True, prints a message upon successful save.
|
208
|
-
clear: If True, clears the log deque after saving.
|
209
|
-
flatten_: If True, flattens dictionary data for serialization.
|
210
|
-
sep: Separator for flattening nested dictionaries.
|
211
|
-
index: If True, includes an index column in the CSV.
|
212
|
-
random_hash_digits: Number of random hash digits to add to the filename.
|
213
|
-
**kwargs: Additional arguments for DataFrame.to_csv().
|
214
|
-
"""
|
215
|
-
if not filename.endswith(".csv"):
|
216
|
-
filename += ".csv"
|
217
|
-
|
218
|
-
filepath = SysUtil.create_path(
|
219
|
-
self.persist_path,
|
220
|
-
filename,
|
221
|
-
timestamp=timestamp,
|
222
|
-
dir_exist_ok=dir_exist_ok,
|
223
|
-
time_prefix=time_prefix,
|
224
|
-
random_hash_digits=random_hash_digits,
|
225
|
-
)
|
226
|
-
try:
|
227
|
-
logs = [
|
228
|
-
log.serialize(flatten_=flatten_, sep=sep) for log in self.log
|
229
|
-
]
|
230
|
-
df = convert.to_df(convert.to_list(logs, flatten=True))
|
231
|
-
df.to_csv(filepath, index=index, **kwargs)
|
232
|
-
if verbose:
|
233
|
-
print(f"{len(self.log)} logs saved to {filepath}")
|
234
|
-
if clear:
|
235
|
-
self.log.clear()
|
236
|
-
except Exception as e:
|
237
|
-
raise ValueError(f"Error in saving to csv: {e}") from e
|
238
|
-
|
239
|
-
def to_json_file(
|
240
|
-
self,
|
241
|
-
filename: str = "log.json",
|
242
|
-
*,
|
243
|
-
dir_exist_ok: bool = True,
|
244
|
-
timestamp: bool = True,
|
245
|
-
time_prefix: bool = False,
|
246
|
-
verbose: bool = True,
|
247
|
-
clear: bool = True,
|
248
|
-
flatten_: bool = True,
|
249
|
-
sep: str = "[^_^]",
|
250
|
-
index: bool = False,
|
251
|
-
random_hash_digits: int = 3,
|
252
|
-
**kwargs,
|
253
|
-
) -> None:
|
254
|
-
"""Export log entries to a JSON file with customizable options.
|
255
|
-
|
256
|
-
Args:
|
257
|
-
filename: Filename for the exported JSON. Defaults to 'log.json'.
|
258
|
-
dir_exist_ok: If True, allows writing to an existing directory.
|
259
|
-
timestamp: If True, appends a timestamp to the filename.
|
260
|
-
time_prefix: If True, places the timestamp prefix before the filename.
|
261
|
-
verbose: If True, prints a message upon successful save.
|
262
|
-
clear: If True, clears the log deque after saving.
|
263
|
-
flatten_: If True, flattens dictionary data for serialization.
|
264
|
-
sep: Separator for flattening nested dictionaries.
|
265
|
-
index: If True, includes an index in the JSON.
|
266
|
-
random_hash_digits: Number of random hash digits to add to the filename.
|
267
|
-
**kwargs: Additional arguments for DataFrame.to_json().
|
268
|
-
"""
|
269
|
-
if not filename.endswith(".json"):
|
270
|
-
filename += ".json"
|
271
|
-
|
272
|
-
filepath = SysUtil.create_path(
|
273
|
-
self.persist_path,
|
274
|
-
filename,
|
275
|
-
timestamp=timestamp,
|
276
|
-
dir_exist_ok=dir_exist_ok,
|
277
|
-
time_prefix=time_prefix,
|
278
|
-
random_hash_digits=random_hash_digits,
|
279
|
-
)
|
280
|
-
|
281
|
-
try:
|
282
|
-
logs = [
|
283
|
-
log.serialize(flatten_=flatten_, sep=sep) for log in self.log
|
284
|
-
]
|
285
|
-
df = convert.to_df(convert.to_list(logs, flatten=True))
|
286
|
-
df.to_json(filepath, index=index, **kwargs)
|
287
|
-
if verbose:
|
288
|
-
print(f"{len(self.log)} logs saved to {filepath}")
|
289
|
-
if clear:
|
290
|
-
self.log.clear()
|
291
|
-
except Exception as e:
|
292
|
-
raise ValueError(f"Error in saving to json: {e}") from e
|
293
|
-
|
294
|
-
def save_at_exit(self):
|
295
|
-
"""Save any unsaved logs automatically upon program termination.
|
296
|
-
|
297
|
-
This method is registered as an at-exit handler to ensure that any unsaved
|
298
|
-
logs are automatically persisted to a file upon program termination. This
|
299
|
-
safeguard helps prevent the loss of log data due to unexpected shutdowns
|
300
|
-
or program exits.
|
301
|
-
|
302
|
-
The method is configured to save the logs to a CSV file, named
|
303
|
-
'unsaved_logs.csv', which is stored in the designated persisting directory.
|
304
|
-
This automatic save operation is triggered only if there are unsaved logs
|
305
|
-
present at the time of program exit.
|
306
|
-
|
307
|
-
Note:
|
308
|
-
This method does not clear the logs after saving, allowing for the
|
309
|
-
possibility of manual review or recovery after the program has terminated.
|
310
|
-
"""
|
311
|
-
if self.log:
|
312
|
-
self.to_csv_file("unsaved_logs.csv", clear=False)
|
@@ -1,63 +0,0 @@
|
|
1
|
-
# Core Components and Abstractions
|
2
|
-
|
3
|
-
The `lionagi.core.collections.abc` module provides essential building blocks and abstractions for constructing the LionAGI system. These components establish a solid foundation for managing data, relationships, and behaviors within the system's architecture. ^1
|
4
|
-
|
5
|
-
## Component
|
6
|
-
|
7
|
-
The `Component` class, located in `lionagi.core.collections.abc`, serves as a fundamental building block within the LionAGI system architecture. As a subclass of both `Element` and `ABC` (Abstract Base Class), it encapsulates the essential attributes and behaviors required for individual components to function within the larger system.
|
8
|
-
|
9
|
-
### Key Attributes
|
10
|
-
- **ln_id**: A unique 32-character identifier assigned to each component instance.
|
11
|
-
- **timestamp**: The UTC timestamp indicating when the component was created.
|
12
|
-
- **metadata**: A container for additional metadata associated with the component.
|
13
|
-
- **extra_fields**: Customizable fields that can be added to each component as needed.
|
14
|
-
- **content**: The primary data or functionality encapsulated by the component.
|
15
|
-
|
16
|
-
### Key Methods
|
17
|
-
- **Type Conversion**
|
18
|
-
- **from_obj()**: Accepts input in various formats, including dict, string, llamaindex, langchain, pydantic, pd.DataFrame, and pd.Series.
|
19
|
-
- **to**: Provides methods for converting the component to different representations, such as to_dict(), to_xml(), to_pd_series(), to_langchain_doc(), and to_llama_index_node().
|
20
|
-
- **repr**: Returns a string representation of the component in `pd.Series` format.
|
21
|
-
|
22
|
-
## Concepts
|
23
|
-
|
24
|
-
The `concepts.py` file, located in `lionagi.core.collections.abc`, defines a set of abstract base classes that are essential for managing the fundamental behaviors and relationships within the LionAGI system. These classes establish a structured framework for handling collections, sequencing, conditions, actions, and other core concepts.
|
25
|
-
|
26
|
-
### Key Classes
|
27
|
-
1. **Record**: Manages a collection of unique items, offering a standardized interface for item retrieval, addition, and iteration.
|
28
|
-
2. **Ordering**: Ensures a specific order is maintained when sequencing items.
|
29
|
-
3. **Condition**: Represents conditions that can be evaluated asynchronously to determine their applicability to a given context.
|
30
|
-
4. **Actionable**: Encapsulates actions that can be invoked asynchronously with arguments.
|
31
|
-
5. **Progressable**: Manages processes that can progress forward asynchronously.
|
32
|
-
6. **Relatable**: Establishes relationships between items based on provided arguments.
|
33
|
-
7. **Sendable**: Defines message-like objects with sender and recipient fields, including validation.
|
34
|
-
8. **Executable**: Represents objects that can be executed asynchronously.
|
35
|
-
9. **Directive**: Encapsulates higher-level directives for directing operations asynchronously.
|
36
|
-
|
37
|
-
These abstract classes form a consistent and extensible foundation for building complex, interactive components within the LionAGI system, promoting efficient and organized development practices.
|
38
|
-
|
39
|
-
## Exceptions
|
40
|
-
|
41
|
-
The `exceptions.py` file, found in `lionagi.core.collections.abc`, defines a comprehensive set of custom exceptions designed to handle various error conditions that may arise within the LionAGI system. These exceptions provide clear and specific error messages, facilitating easier debugging and error management. ^2
|
42
|
-
|
43
|
-
### Key Exception Classes
|
44
|
-
1. **LionAGIError**: The base class for all exceptions in the LionAGI system, providing a customizable generic error message.
|
45
|
-
2. **LionValueError**: Raised for errors related to input values, ensuring that incorrect values are properly reported.
|
46
|
-
3. **LionTypeError**: Raised for type mismatches or type checking errors, helping to enforce correct data types throughout the system.
|
47
|
-
4. **LionItemError**: A base class for exceptions related to LionAGI items, including specific error messages for item-related issues.
|
48
|
-
5. **ItemNotFoundError**: Raised when a specified item cannot be found within the system, indicating missing or incorrect item references.
|
49
|
-
6. **ItemInvalidError**: Raised when an invalid item is used in an operation, ensuring operations are performed on valid items only.
|
50
|
-
7. **FieldError**: Raised for errors in field validation, highlighting issues with specific data fields.
|
51
|
-
8. **LionOperationError**: A base class for exceptions related to operational failures, providing a framework for more specific operational errors.
|
52
|
-
9. **ConcurrencyError**: Raised for errors due to concurrency issues, ensuring that concurrent operations are properly managed.
|
53
|
-
10. **RelationError**: Raised for errors in relation operations, indicating issues with node relationships.
|
54
|
-
11. **ActionError**: Raised for errors in action operations, signaling problems with executing specified actions.
|
55
|
-
12. **ResourceLimitExceededError**: Raised when a resource limit is exceeded, helping to manage and enforce system resource constraints.
|
56
|
-
13. **TimeoutError**: Raised when an operation times out, ensuring that long-running operations are properly handled.
|
57
|
-
14. **ServiceError**: Raised for errors in endpoint configuration, indicating issues with service availability or configuration.
|
58
|
-
|
59
|
-
These exceptions contribute to a robust error handling mechanism within the LionAGI system, ensuring that errors are clearly reported and managed, ultimately aiding in maintaining the system's stability and reliability.
|
60
|
-
|
61
|
-
^1: [Design Patterns: Elements of Reusable Object-Oriented Software](https://en.wikipedia.org/wiki/Design_Patterns)
|
62
|
-
|
63
|
-
^2: [Python Exceptions: An Introduction](https://realpython.com/python-exceptions/)
|
@@ -1,53 +0,0 @@
|
|
1
|
-
"""abc: Abstract Base Classes for lionagi."""
|
2
|
-
|
3
|
-
from pydantic import Field
|
4
|
-
|
5
|
-
from .component import Component, Element, LionIDable, get_lion_id
|
6
|
-
from .concepts import (
|
7
|
-
Actionable,
|
8
|
-
Condition,
|
9
|
-
Directive,
|
10
|
-
Executable,
|
11
|
-
Ordering,
|
12
|
-
Progressable,
|
13
|
-
Record,
|
14
|
-
Relatable,
|
15
|
-
Sendable,
|
16
|
-
)
|
17
|
-
from .exceptions import (
|
18
|
-
ActionError,
|
19
|
-
FieldError,
|
20
|
-
ItemNotFoundError,
|
21
|
-
LionOperationError,
|
22
|
-
LionTypeError,
|
23
|
-
LionValueError,
|
24
|
-
ModelLimitExceededError,
|
25
|
-
RelationError,
|
26
|
-
)
|
27
|
-
from .util import SYSTEM_FIELDS
|
28
|
-
|
29
|
-
__all__ = [
|
30
|
-
"Element",
|
31
|
-
"Record",
|
32
|
-
"Ordering",
|
33
|
-
"Condition",
|
34
|
-
"Actionable",
|
35
|
-
"Component",
|
36
|
-
"LionIDable",
|
37
|
-
"get_lion_id",
|
38
|
-
"LionTypeError",
|
39
|
-
"LionValueError",
|
40
|
-
"ActionError",
|
41
|
-
"ItemNotFoundError",
|
42
|
-
"FieldError",
|
43
|
-
"LionOperationError",
|
44
|
-
"Relatable",
|
45
|
-
"Progressable",
|
46
|
-
"RelationError",
|
47
|
-
"Sendable",
|
48
|
-
"Field",
|
49
|
-
"Executable",
|
50
|
-
"SYSTEM_FIELDS",
|
51
|
-
"Directive",
|
52
|
-
"ModelLimitExceededError",
|
53
|
-
]
|