lionagi 0.1.2__py3-none-any.whl → 0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lionagi/__init__.py +60 -5
- lionagi/core/__init__.py +0 -25
- lionagi/core/_setting/_setting.py +59 -0
- lionagi/core/action/__init__.py +14 -0
- lionagi/core/action/function_calling.py +136 -0
- lionagi/core/action/manual.py +1 -0
- lionagi/core/action/node.py +109 -0
- lionagi/core/action/tool.py +114 -0
- lionagi/core/action/tool_manager.py +356 -0
- lionagi/core/agent/base_agent.py +27 -13
- lionagi/core/agent/eval/evaluator.py +1 -0
- lionagi/core/agent/eval/vote.py +40 -0
- lionagi/core/agent/learn/learner.py +59 -0
- lionagi/core/agent/plan/unit_template.py +1 -0
- lionagi/core/collections/__init__.py +17 -0
- lionagi/core/{generic/data_logger.py → collections/_logger.py} +69 -55
- lionagi/core/collections/abc/__init__.py +53 -0
- lionagi/core/collections/abc/component.py +615 -0
- lionagi/core/collections/abc/concepts.py +297 -0
- lionagi/core/collections/abc/exceptions.py +150 -0
- lionagi/core/collections/abc/util.py +45 -0
- lionagi/core/collections/exchange.py +161 -0
- lionagi/core/collections/flow.py +426 -0
- lionagi/core/collections/model.py +419 -0
- lionagi/core/collections/pile.py +913 -0
- lionagi/core/collections/progression.py +236 -0
- lionagi/core/collections/util.py +64 -0
- lionagi/core/director/direct.py +314 -0
- lionagi/core/director/director.py +2 -0
- lionagi/core/{execute/branch_executor.py → engine/branch_engine.py} +134 -97
- lionagi/core/{execute/instruction_map_executor.py → engine/instruction_map_engine.py} +80 -55
- lionagi/{experimental/directive/evaluator → core/engine}/script_engine.py +17 -1
- lionagi/core/executor/base_executor.py +90 -0
- lionagi/core/{execute/structure_executor.py → executor/graph_executor.py} +62 -66
- lionagi/core/{execute → executor}/neo4j_executor.py +70 -67
- lionagi/core/generic/__init__.py +3 -33
- lionagi/core/generic/edge.py +29 -79
- lionagi/core/generic/edge_condition.py +16 -0
- lionagi/core/generic/graph.py +236 -0
- lionagi/core/generic/hyperedge.py +1 -0
- lionagi/core/generic/node.py +156 -221
- lionagi/core/generic/tree.py +48 -0
- lionagi/core/generic/tree_node.py +79 -0
- lionagi/core/mail/__init__.py +12 -0
- lionagi/core/mail/mail.py +25 -0
- lionagi/core/mail/mail_manager.py +139 -58
- lionagi/core/mail/package.py +45 -0
- lionagi/core/mail/start_mail.py +36 -0
- lionagi/core/message/__init__.py +19 -0
- lionagi/core/message/action_request.py +133 -0
- lionagi/core/message/action_response.py +135 -0
- lionagi/core/message/assistant_response.py +95 -0
- lionagi/core/message/instruction.py +234 -0
- lionagi/core/message/message.py +101 -0
- lionagi/core/message/system.py +86 -0
- lionagi/core/message/util.py +283 -0
- lionagi/core/report/__init__.py +4 -0
- lionagi/core/report/base.py +217 -0
- lionagi/core/report/form.py +231 -0
- lionagi/core/report/report.py +166 -0
- lionagi/core/report/util.py +28 -0
- lionagi/core/rule/_default.py +16 -0
- lionagi/core/rule/action.py +99 -0
- lionagi/core/rule/base.py +238 -0
- lionagi/core/rule/boolean.py +56 -0
- lionagi/core/rule/choice.py +47 -0
- lionagi/core/rule/mapping.py +96 -0
- lionagi/core/rule/number.py +71 -0
- lionagi/core/rule/rulebook.py +109 -0
- lionagi/core/rule/string.py +52 -0
- lionagi/core/rule/util.py +35 -0
- lionagi/core/session/branch.py +431 -0
- lionagi/core/session/directive_mixin.py +287 -0
- lionagi/core/session/session.py +229 -903
- lionagi/core/structure/__init__.py +1 -0
- lionagi/core/structure/chain.py +1 -0
- lionagi/core/structure/forest.py +1 -0
- lionagi/core/structure/graph.py +1 -0
- lionagi/core/structure/tree.py +1 -0
- lionagi/core/unit/__init__.py +5 -0
- lionagi/core/unit/parallel_unit.py +245 -0
- lionagi/core/unit/template/action.py +81 -0
- lionagi/core/unit/template/base.py +51 -0
- lionagi/core/unit/template/plan.py +84 -0
- lionagi/core/unit/template/predict.py +109 -0
- lionagi/core/unit/template/score.py +124 -0
- lionagi/core/unit/template/select.py +104 -0
- lionagi/core/unit/unit.py +362 -0
- lionagi/core/unit/unit_form.py +305 -0
- lionagi/core/unit/unit_mixin.py +1168 -0
- lionagi/core/unit/util.py +71 -0
- lionagi/core/validator/validator.py +364 -0
- lionagi/core/work/work.py +76 -0
- lionagi/core/work/work_function.py +101 -0
- lionagi/core/work/work_queue.py +103 -0
- lionagi/core/work/worker.py +258 -0
- lionagi/core/work/worklog.py +120 -0
- lionagi/experimental/compressor/base.py +46 -0
- lionagi/experimental/compressor/llm_compressor.py +247 -0
- lionagi/experimental/compressor/llm_summarizer.py +61 -0
- lionagi/experimental/compressor/util.py +70 -0
- lionagi/experimental/directive/__init__.py +19 -0
- lionagi/experimental/directive/parser/base_parser.py +69 -2
- lionagi/experimental/directive/{template_ → template}/base_template.py +17 -1
- lionagi/{libs/ln_tokenizer.py → experimental/directive/tokenizer.py} +16 -0
- lionagi/experimental/{directive/evaluator → evaluator}/ast_evaluator.py +16 -0
- lionagi/experimental/{directive/evaluator → evaluator}/base_evaluator.py +16 -0
- lionagi/experimental/knowledge/base.py +10 -0
- lionagi/experimental/memory/__init__.py +0 -0
- lionagi/experimental/strategies/__init__.py +0 -0
- lionagi/experimental/strategies/base.py +1 -0
- lionagi/integrations/bridge/langchain_/documents.py +4 -0
- lionagi/integrations/bridge/llamaindex_/index.py +30 -0
- lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +6 -0
- lionagi/integrations/chunker/chunk.py +161 -24
- lionagi/integrations/config/oai_configs.py +34 -3
- lionagi/integrations/config/openrouter_configs.py +14 -2
- lionagi/integrations/loader/load.py +122 -21
- lionagi/integrations/loader/load_util.py +6 -77
- lionagi/integrations/provider/_mapping.py +46 -0
- lionagi/integrations/provider/litellm.py +2 -1
- lionagi/integrations/provider/mlx_service.py +16 -9
- lionagi/integrations/provider/oai.py +91 -4
- lionagi/integrations/provider/ollama.py +6 -5
- lionagi/integrations/provider/openrouter.py +115 -8
- lionagi/integrations/provider/services.py +2 -2
- lionagi/integrations/provider/transformers.py +18 -22
- lionagi/integrations/storage/__init__.py +3 -3
- lionagi/integrations/storage/neo4j.py +52 -60
- lionagi/integrations/storage/storage_util.py +44 -46
- lionagi/integrations/storage/structure_excel.py +43 -26
- lionagi/integrations/storage/to_excel.py +11 -4
- lionagi/libs/__init__.py +22 -1
- lionagi/libs/ln_api.py +75 -20
- lionagi/libs/ln_context.py +37 -0
- lionagi/libs/ln_convert.py +21 -9
- lionagi/libs/ln_func_call.py +69 -28
- lionagi/libs/ln_image.py +107 -0
- lionagi/libs/ln_nested.py +26 -11
- lionagi/libs/ln_parse.py +82 -23
- lionagi/libs/ln_queue.py +16 -0
- lionagi/libs/ln_tokenize.py +164 -0
- lionagi/libs/ln_validate.py +16 -0
- lionagi/libs/special_tokens.py +172 -0
- lionagi/libs/sys_util.py +95 -24
- lionagi/lions/coder/code_form.py +13 -0
- lionagi/lions/coder/coder.py +50 -3
- lionagi/lions/coder/util.py +30 -25
- lionagi/tests/libs/test_func_call.py +23 -21
- lionagi/tests/libs/test_nested.py +36 -21
- lionagi/tests/libs/test_parse.py +1 -1
- lionagi/tests/test_core/collections/__init__.py +0 -0
- lionagi/tests/test_core/collections/test_component.py +206 -0
- lionagi/tests/test_core/collections/test_exchange.py +138 -0
- lionagi/tests/test_core/collections/test_flow.py +145 -0
- lionagi/tests/test_core/collections/test_pile.py +171 -0
- lionagi/tests/test_core/collections/test_progression.py +129 -0
- lionagi/tests/test_core/generic/test_edge.py +67 -0
- lionagi/tests/test_core/generic/test_graph.py +96 -0
- lionagi/tests/test_core/generic/test_node.py +106 -0
- lionagi/tests/test_core/generic/test_tree_node.py +73 -0
- lionagi/tests/test_core/test_branch.py +115 -294
- lionagi/tests/test_core/test_form.py +46 -0
- lionagi/tests/test_core/test_report.py +105 -0
- lionagi/tests/test_core/test_validator.py +111 -0
- lionagi/version.py +1 -1
- lionagi-0.2.1.dist-info/LICENSE +202 -0
- lionagi-0.2.1.dist-info/METADATA +272 -0
- lionagi-0.2.1.dist-info/RECORD +240 -0
- lionagi/core/branch/base.py +0 -653
- lionagi/core/branch/branch.py +0 -474
- lionagi/core/branch/flow_mixin.py +0 -96
- lionagi/core/branch/util.py +0 -323
- lionagi/core/direct/__init__.py +0 -19
- lionagi/core/direct/cot.py +0 -123
- lionagi/core/direct/plan.py +0 -164
- lionagi/core/direct/predict.py +0 -166
- lionagi/core/direct/react.py +0 -171
- lionagi/core/direct/score.py +0 -279
- lionagi/core/direct/select.py +0 -170
- lionagi/core/direct/sentiment.py +0 -1
- lionagi/core/direct/utils.py +0 -110
- lionagi/core/direct/vote.py +0 -64
- lionagi/core/execute/base_executor.py +0 -47
- lionagi/core/flow/baseflow.py +0 -23
- lionagi/core/flow/monoflow/ReAct.py +0 -240
- lionagi/core/flow/monoflow/__init__.py +0 -9
- lionagi/core/flow/monoflow/chat.py +0 -95
- lionagi/core/flow/monoflow/chat_mixin.py +0 -253
- lionagi/core/flow/monoflow/followup.py +0 -215
- lionagi/core/flow/polyflow/__init__.py +0 -1
- lionagi/core/flow/polyflow/chat.py +0 -251
- lionagi/core/form/action_form.py +0 -26
- lionagi/core/form/field_validator.py +0 -287
- lionagi/core/form/form.py +0 -302
- lionagi/core/form/mixin.py +0 -214
- lionagi/core/form/scored_form.py +0 -13
- lionagi/core/generic/action.py +0 -26
- lionagi/core/generic/component.py +0 -532
- lionagi/core/generic/condition.py +0 -46
- lionagi/core/generic/mail.py +0 -90
- lionagi/core/generic/mailbox.py +0 -36
- lionagi/core/generic/relation.py +0 -70
- lionagi/core/generic/signal.py +0 -22
- lionagi/core/generic/structure.py +0 -362
- lionagi/core/generic/transfer.py +0 -20
- lionagi/core/generic/work.py +0 -40
- lionagi/core/graph/graph.py +0 -126
- lionagi/core/graph/tree.py +0 -190
- lionagi/core/mail/schema.py +0 -63
- lionagi/core/messages/schema.py +0 -325
- lionagi/core/tool/__init__.py +0 -5
- lionagi/core/tool/tool.py +0 -28
- lionagi/core/tool/tool_manager.py +0 -283
- lionagi/experimental/report/form.py +0 -64
- lionagi/experimental/report/report.py +0 -138
- lionagi/experimental/report/util.py +0 -47
- lionagi/experimental/tool/function_calling.py +0 -43
- lionagi/experimental/tool/manual.py +0 -66
- lionagi/experimental/tool/schema.py +0 -59
- lionagi/experimental/tool/tool_manager.py +0 -138
- lionagi/experimental/tool/util.py +0 -16
- lionagi/experimental/validator/rule.py +0 -139
- lionagi/experimental/validator/validator.py +0 -56
- lionagi/experimental/work/__init__.py +0 -10
- lionagi/experimental/work/async_queue.py +0 -54
- lionagi/experimental/work/schema.py +0 -73
- lionagi/experimental/work/work_function.py +0 -67
- lionagi/experimental/work/worker.py +0 -56
- lionagi/experimental/work2/form.py +0 -371
- lionagi/experimental/work2/report.py +0 -289
- lionagi/experimental/work2/schema.py +0 -30
- lionagi/experimental/work2/tests.py +0 -72
- lionagi/experimental/work2/work_function.py +0 -89
- lionagi/experimental/work2/worker.py +0 -12
- lionagi/integrations/bridge/llamaindex_/get_index.py +0 -294
- lionagi/tests/test_core/generic/test_component.py +0 -89
- lionagi/tests/test_core/test_base_branch.py +0 -426
- lionagi/tests/test_core/test_chat_flow.py +0 -63
- lionagi/tests/test_core/test_mail_manager.py +0 -75
- lionagi/tests/test_core/test_prompts.py +0 -51
- lionagi/tests/test_core/test_session.py +0 -254
- lionagi/tests/test_core/test_session_base_util.py +0 -313
- lionagi/tests/test_core/test_tool_manager.py +0 -95
- lionagi-0.1.2.dist-info/LICENSE +0 -9
- lionagi-0.1.2.dist-info/METADATA +0 -174
- lionagi-0.1.2.dist-info/RECORD +0 -206
- /lionagi/core/{branch → _setting}/__init__.py +0 -0
- /lionagi/core/{execute → agent/eval}/__init__.py +0 -0
- /lionagi/core/{flow → agent/learn}/__init__.py +0 -0
- /lionagi/core/{form → agent/plan}/__init__.py +0 -0
- /lionagi/core/{branch/executable_branch.py → agent/plan/plan.py} +0 -0
- /lionagi/core/{graph → director}/__init__.py +0 -0
- /lionagi/core/{messages → engine}/__init__.py +0 -0
- /lionagi/{experimental/directive/evaluator → core/engine}/sandbox_.py +0 -0
- /lionagi/{experimental/directive/evaluator → core/executor}/__init__.py +0 -0
- /lionagi/{experimental/directive/template_ → core/rule}/__init__.py +0 -0
- /lionagi/{experimental/report → core/unit/template}/__init__.py +0 -0
- /lionagi/{experimental/tool → core/validator}/__init__.py +0 -0
- /lionagi/{experimental/validator → core/work}/__init__.py +0 -0
- /lionagi/experimental/{work2 → compressor}/__init__.py +0 -0
- /lionagi/{core/flow/mono_chat_mixin.py → experimental/directive/template/__init__.py} +0 -0
- /lionagi/experimental/directive/{schema.py → template/schema.py} +0 -0
- /lionagi/experimental/{work2/util.py → evaluator/__init__.py} +0 -0
- /lionagi/experimental/{work2/work.py → knowledge/__init__.py} +0 -0
- /lionagi/{tests/libs/test_async.py → experimental/knowledge/graph.py} +0 -0
- {lionagi-0.1.2.dist-info → lionagi-0.2.1.dist-info}/WHEEL +0 -0
- {lionagi-0.1.2.dist-info → lionagi-0.2.1.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,19 @@
|
|
1
|
+
"""
|
2
|
+
Copyright 2024 HaiyangLi
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
"""
|
16
|
+
|
1
17
|
import atexit
|
2
18
|
import contextlib
|
3
19
|
import logging
|
@@ -14,13 +30,12 @@ from lionagi.libs import SysUtil, convert, nested
|
|
14
30
|
|
15
31
|
@dataclass
|
16
32
|
class DLog:
|
17
|
-
"""
|
18
|
-
Defines a log entry structure for data processing operations.
|
33
|
+
"""Defines a log entry structure for data processing operations.
|
19
34
|
|
20
|
-
This class encapsulates both the input to and output from a data processing
|
21
|
-
along with an automatically generated timestamp indicating when
|
22
|
-
created. It aims to standardize logging across applications
|
23
|
-
and debugging.
|
35
|
+
This class encapsulates both the input to and output from a data processing
|
36
|
+
operation, along with an automatically generated timestamp indicating when
|
37
|
+
the log entry was created. It aims to standardize logging across applications
|
38
|
+
for easier analysis and debugging.
|
24
39
|
|
25
40
|
Attributes:
|
26
41
|
input_data: The data input to the operation. Can be of any type.
|
@@ -31,7 +46,7 @@ class DLog:
|
|
31
46
|
output_data: Any
|
32
47
|
|
33
48
|
def serialize(self, *, flatten_: bool = True, sep: str = "[^_^]") -> dict[str, Any]:
|
34
|
-
"""
|
49
|
+
"""Serialize the DLog instance into a dictionary with an added timestamp.
|
35
50
|
|
36
51
|
Args:
|
37
52
|
flatten_ (bool): If True, flattens dictionary inputs for serialization.
|
@@ -48,14 +63,12 @@ class DLog:
|
|
48
63
|
data = convert.to_str(data)
|
49
64
|
if "{" not in data:
|
50
65
|
log_dict[field] = convert.to_str(data)
|
51
|
-
|
52
66
|
else:
|
53
67
|
with contextlib.suppress(Exception):
|
54
68
|
data = convert.to_dict(data)
|
55
69
|
|
56
70
|
if isinstance(self.input_data, dict) and flatten_:
|
57
71
|
log_dict[field] = convert.to_str(nested.flatten(data, sep=sep))
|
58
|
-
|
59
72
|
else:
|
60
73
|
log_dict[field] = convert.to_str(data)
|
61
74
|
|
@@ -79,37 +92,39 @@ class DLog:
|
|
79
92
|
unflatten_: bool = True,
|
80
93
|
sep: str = "[^_^]",
|
81
94
|
) -> "DLog":
|
82
|
-
"""
|
95
|
+
"""Deserialize log entries from string representations.
|
83
96
|
|
84
|
-
This method reconstructs a DLog instance from serialized string data,
|
85
|
-
unflattening nested dictionary structures if they were
|
86
|
-
serialization process. The method is particularly
|
87
|
-
storage formats like JSON or CSV where
|
97
|
+
This method reconstructs a DLog instance from serialized string data,
|
98
|
+
optionally unflattening nested dictionary structures if they were
|
99
|
+
flattened during the serialization process. The method is particularly
|
100
|
+
useful for reading logs from storage formats like JSON or CSV where
|
101
|
+
data is represented as strings.
|
88
102
|
|
89
103
|
Note:
|
90
|
-
The separator '[^_^]' is reserved and should not be used within
|
91
|
-
keys to ensure proper structure preservation during
|
104
|
+
The separator '[^_^]' is reserved and should not be used within
|
105
|
+
dictionary keys to ensure proper structure preservation during
|
106
|
+
unflattening.
|
92
107
|
|
93
108
|
Args:
|
94
109
|
input_str: String representation of the input data.
|
95
110
|
output_str: String representation of the output data.
|
96
|
-
unflatten_ (bool): Indicates whether to unflatten the string data
|
97
|
-
nested dictionaries.
|
111
|
+
unflatten_ (bool): Indicates whether to unflatten the string data
|
112
|
+
back into nested dictionaries.
|
98
113
|
sep (str): Separator used if unflattening is performed.
|
99
114
|
|
100
115
|
Returns:
|
101
116
|
An instance of DLog reconstructed from the provided string data.
|
102
117
|
|
103
118
|
Raises:
|
104
|
-
ValueError: If deserialization or unflattening fails due to incorrect
|
105
|
-
format or separator issues.
|
119
|
+
ValueError: If deserialization or unflattening fails due to incorrect
|
120
|
+
data format or separator issues.
|
106
121
|
"""
|
107
122
|
|
108
123
|
def _process_data(data):
|
109
124
|
if unflatten_:
|
110
125
|
try:
|
111
126
|
return nested.unflatten(convert.to_dict(data), sep=sep)
|
112
|
-
except:
|
127
|
+
except Exception:
|
113
128
|
return data
|
114
129
|
else:
|
115
130
|
return data
|
@@ -121,13 +136,10 @@ class DLog:
|
|
121
136
|
|
122
137
|
|
123
138
|
class DataLogger:
|
124
|
-
"""
|
125
|
-
Manages logging for data processing activities within an application.
|
139
|
+
"""Manages logging for data processing activities within an application.
|
126
140
|
|
127
|
-
This class handles the accumulation,
|
128
|
-
|
129
|
-
It supports exporting logs to disk in both CSV and JSON formats,
|
130
|
-
with features for
|
141
|
+
This class handles the accumulation, structuring, and persistence of log entries.
|
142
|
+
It supports exporting logs to disk in both CSV and JSON formats, with features for
|
131
143
|
automatic log saving at program exit and customizable file naming.
|
132
144
|
|
133
145
|
Attributes:
|
@@ -142,11 +154,11 @@ class DataLogger:
|
|
142
154
|
log: List[Dict] | None = None,
|
143
155
|
filename: str | None = None,
|
144
156
|
) -> None:
|
145
|
-
"""
|
146
|
-
Initializes the DataLogger with optional custom settings for log storage.
|
157
|
+
"""Initialize the DataLogger with optional custom settings for log storage.
|
147
158
|
|
148
159
|
Args:
|
149
|
-
persist_path: The file system path for storing log files.
|
160
|
+
persist_path: The file system path for storing log files.
|
161
|
+
Defaults to 'data/logs/'.
|
150
162
|
log: Initial log entries.
|
151
163
|
filename: Base name for exported log files.
|
152
164
|
"""
|
@@ -156,8 +168,7 @@ class DataLogger:
|
|
156
168
|
atexit.register(self.save_at_exit)
|
157
169
|
|
158
170
|
def extend(self, logs) -> None:
|
159
|
-
"""
|
160
|
-
Extends the log deque with multiple log entries.
|
171
|
+
"""Extend the log deque with multiple log entries.
|
161
172
|
|
162
173
|
This method allows for bulk addition of log entries, which can be useful for
|
163
174
|
importing logs from external sources or consolidating logs from different parts
|
@@ -173,8 +184,7 @@ class DataLogger:
|
|
173
184
|
self.log = deque(log1)
|
174
185
|
|
175
186
|
def append(self, *, input_data: Any, output_data: Any) -> None:
|
176
|
-
"""
|
177
|
-
Appends a new log entry from provided input and output data.
|
187
|
+
"""Append a new log entry from provided input and output data.
|
178
188
|
|
179
189
|
Args:
|
180
190
|
input_data: Input data to the operation.
|
@@ -192,13 +202,13 @@ class DataLogger:
|
|
192
202
|
time_prefix: bool = False,
|
193
203
|
verbose: bool = True,
|
194
204
|
clear: bool = True,
|
195
|
-
flatten_=True,
|
196
|
-
sep="[^_^]",
|
197
|
-
index=False,
|
198
|
-
random_hash_digits=3,
|
205
|
+
flatten_: bool = True,
|
206
|
+
sep: str = "[^_^]",
|
207
|
+
index: bool = False,
|
208
|
+
random_hash_digits: int = 3,
|
199
209
|
**kwargs,
|
200
210
|
) -> None:
|
201
|
-
"""
|
211
|
+
"""Export log entries to a CSV file with customizable options.
|
202
212
|
|
203
213
|
Args:
|
204
214
|
filename: Filename for the exported CSV. Defaults to 'log.csv'.
|
@@ -210,9 +220,9 @@ class DataLogger:
|
|
210
220
|
flatten_: If True, flattens dictionary data for serialization.
|
211
221
|
sep: Separator for flattening nested dictionaries.
|
212
222
|
index: If True, includes an index column in the CSV.
|
223
|
+
random_hash_digits: Number of random hash digits to add to the filename.
|
213
224
|
**kwargs: Additional arguments for DataFrame.to_csv().
|
214
225
|
"""
|
215
|
-
|
216
226
|
if not filename.endswith(".csv"):
|
217
227
|
filename += ".csv"
|
218
228
|
|
@@ -244,13 +254,13 @@ class DataLogger:
|
|
244
254
|
time_prefix: bool = False,
|
245
255
|
verbose: bool = True,
|
246
256
|
clear: bool = True,
|
247
|
-
flatten_=True,
|
248
|
-
sep="[^_^]",
|
249
|
-
index=False,
|
250
|
-
random_hash_digits=3,
|
257
|
+
flatten_: bool = True,
|
258
|
+
sep: str = "[^_^]",
|
259
|
+
index: bool = False,
|
260
|
+
random_hash_digits: int = 3,
|
251
261
|
**kwargs,
|
252
262
|
) -> None:
|
253
|
-
"""
|
263
|
+
"""Export log entries to a JSON file with customizable options.
|
254
264
|
|
255
265
|
Args:
|
256
266
|
filename: Filename for the exported JSON. Defaults to 'log.json'.
|
@@ -262,6 +272,7 @@ class DataLogger:
|
|
262
272
|
flatten_: If True, flattens dictionary data for serialization.
|
263
273
|
sep: Separator for flattening nested dictionaries.
|
264
274
|
index: If True, includes an index in the JSON.
|
275
|
+
random_hash_digits: Number of random hash digits to add to the filename.
|
265
276
|
**kwargs: Additional arguments for DataFrame.to_json().
|
266
277
|
"""
|
267
278
|
if not filename.endswith(".json"):
|
@@ -285,21 +296,24 @@ class DataLogger:
|
|
285
296
|
if clear:
|
286
297
|
self.log.clear()
|
287
298
|
except Exception as e:
|
288
|
-
raise ValueError(f"Error in saving to
|
299
|
+
raise ValueError(f"Error in saving to json: {e}") from e
|
289
300
|
|
290
301
|
def save_at_exit(self):
|
291
|
-
"""
|
292
|
-
|
293
|
-
|
294
|
-
|
302
|
+
"""Save any unsaved logs automatically upon program termination.
|
303
|
+
|
304
|
+
This method is registered as an at-exit handler to ensure that any unsaved
|
305
|
+
logs are automatically persisted to a file upon program termination. This
|
306
|
+
safeguard helps prevent the loss of log data due to unexpected shutdowns
|
307
|
+
or program exits.
|
295
308
|
|
296
309
|
The method is configured to save the logs to a CSV file, named
|
297
|
-
'unsaved_logs.csv', which is stored in the designated persisting directory.
|
298
|
-
automatic save operation is triggered only if there are unsaved logs
|
299
|
-
the time of program exit.
|
310
|
+
'unsaved_logs.csv', which is stored in the designated persisting directory.
|
311
|
+
This automatic save operation is triggered only if there are unsaved logs
|
312
|
+
present at the time of program exit.
|
300
313
|
|
301
|
-
Note:
|
302
|
-
|
314
|
+
Note:
|
315
|
+
This method does not clear the logs after saving, allowing for the
|
316
|
+
possibility of manual review or recovery after the program has terminated.
|
303
317
|
"""
|
304
318
|
if self.log:
|
305
319
|
self.to_csv_file("unsaved_logs.csv", clear=False)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
"""abc: Abstract Base Classes for lionagi."""
|
2
|
+
|
3
|
+
from pydantic import Field
|
4
|
+
from .exceptions import (
|
5
|
+
LionTypeError,
|
6
|
+
LionValueError,
|
7
|
+
ItemNotFoundError,
|
8
|
+
FieldError,
|
9
|
+
LionOperationError,
|
10
|
+
RelationError,
|
11
|
+
ActionError,
|
12
|
+
ModelLimitExceededError,
|
13
|
+
)
|
14
|
+
from .component import Element, Component, LionIDable, get_lion_id
|
15
|
+
from .concepts import (
|
16
|
+
Record,
|
17
|
+
Ordering,
|
18
|
+
Condition,
|
19
|
+
Actionable,
|
20
|
+
Relatable,
|
21
|
+
Progressable,
|
22
|
+
Sendable,
|
23
|
+
Executable,
|
24
|
+
Directive,
|
25
|
+
)
|
26
|
+
from .util import SYSTEM_FIELDS
|
27
|
+
|
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
|
+
]
|