lionagi 0.1.2__py3-none-any.whl → 0.2.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) hide show
  1. lionagi/__init__.py +60 -5
  2. lionagi/core/__init__.py +0 -25
  3. lionagi/core/_setting/_setting.py +59 -0
  4. lionagi/core/action/__init__.py +14 -0
  5. lionagi/core/action/function_calling.py +136 -0
  6. lionagi/core/action/manual.py +1 -0
  7. lionagi/core/action/node.py +109 -0
  8. lionagi/core/action/tool.py +114 -0
  9. lionagi/core/action/tool_manager.py +356 -0
  10. lionagi/core/agent/base_agent.py +27 -13
  11. lionagi/core/agent/eval/evaluator.py +1 -0
  12. lionagi/core/agent/eval/vote.py +40 -0
  13. lionagi/core/agent/learn/learner.py +59 -0
  14. lionagi/core/agent/plan/unit_template.py +1 -0
  15. lionagi/core/collections/__init__.py +17 -0
  16. lionagi/core/{generic/data_logger.py → collections/_logger.py} +69 -55
  17. lionagi/core/collections/abc/__init__.py +53 -0
  18. lionagi/core/collections/abc/component.py +615 -0
  19. lionagi/core/collections/abc/concepts.py +297 -0
  20. lionagi/core/collections/abc/exceptions.py +150 -0
  21. lionagi/core/collections/abc/util.py +45 -0
  22. lionagi/core/collections/exchange.py +161 -0
  23. lionagi/core/collections/flow.py +426 -0
  24. lionagi/core/collections/model.py +419 -0
  25. lionagi/core/collections/pile.py +913 -0
  26. lionagi/core/collections/progression.py +236 -0
  27. lionagi/core/collections/util.py +64 -0
  28. lionagi/core/director/direct.py +314 -0
  29. lionagi/core/director/director.py +2 -0
  30. lionagi/core/{execute/branch_executor.py → engine/branch_engine.py} +134 -97
  31. lionagi/core/{execute/instruction_map_executor.py → engine/instruction_map_engine.py} +80 -55
  32. lionagi/{experimental/directive/evaluator → core/engine}/script_engine.py +17 -1
  33. lionagi/core/executor/base_executor.py +90 -0
  34. lionagi/core/{execute/structure_executor.py → executor/graph_executor.py} +62 -66
  35. lionagi/core/{execute → executor}/neo4j_executor.py +70 -67
  36. lionagi/core/generic/__init__.py +3 -33
  37. lionagi/core/generic/edge.py +29 -79
  38. lionagi/core/generic/edge_condition.py +16 -0
  39. lionagi/core/generic/graph.py +236 -0
  40. lionagi/core/generic/hyperedge.py +1 -0
  41. lionagi/core/generic/node.py +156 -221
  42. lionagi/core/generic/tree.py +48 -0
  43. lionagi/core/generic/tree_node.py +79 -0
  44. lionagi/core/mail/__init__.py +12 -0
  45. lionagi/core/mail/mail.py +25 -0
  46. lionagi/core/mail/mail_manager.py +139 -58
  47. lionagi/core/mail/package.py +45 -0
  48. lionagi/core/mail/start_mail.py +36 -0
  49. lionagi/core/message/__init__.py +19 -0
  50. lionagi/core/message/action_request.py +133 -0
  51. lionagi/core/message/action_response.py +135 -0
  52. lionagi/core/message/assistant_response.py +95 -0
  53. lionagi/core/message/instruction.py +234 -0
  54. lionagi/core/message/message.py +101 -0
  55. lionagi/core/message/system.py +86 -0
  56. lionagi/core/message/util.py +283 -0
  57. lionagi/core/report/__init__.py +4 -0
  58. lionagi/core/report/base.py +217 -0
  59. lionagi/core/report/form.py +231 -0
  60. lionagi/core/report/report.py +166 -0
  61. lionagi/core/report/util.py +28 -0
  62. lionagi/core/rule/_default.py +16 -0
  63. lionagi/core/rule/action.py +99 -0
  64. lionagi/core/rule/base.py +238 -0
  65. lionagi/core/rule/boolean.py +56 -0
  66. lionagi/core/rule/choice.py +47 -0
  67. lionagi/core/rule/mapping.py +96 -0
  68. lionagi/core/rule/number.py +71 -0
  69. lionagi/core/rule/rulebook.py +109 -0
  70. lionagi/core/rule/string.py +52 -0
  71. lionagi/core/rule/util.py +35 -0
  72. lionagi/core/session/branch.py +431 -0
  73. lionagi/core/session/directive_mixin.py +287 -0
  74. lionagi/core/session/session.py +229 -903
  75. lionagi/core/structure/__init__.py +1 -0
  76. lionagi/core/structure/chain.py +1 -0
  77. lionagi/core/structure/forest.py +1 -0
  78. lionagi/core/structure/graph.py +1 -0
  79. lionagi/core/structure/tree.py +1 -0
  80. lionagi/core/unit/__init__.py +5 -0
  81. lionagi/core/unit/parallel_unit.py +245 -0
  82. lionagi/core/unit/template/action.py +81 -0
  83. lionagi/core/unit/template/base.py +51 -0
  84. lionagi/core/unit/template/plan.py +84 -0
  85. lionagi/core/unit/template/predict.py +109 -0
  86. lionagi/core/unit/template/score.py +124 -0
  87. lionagi/core/unit/template/select.py +104 -0
  88. lionagi/core/unit/unit.py +362 -0
  89. lionagi/core/unit/unit_form.py +305 -0
  90. lionagi/core/unit/unit_mixin.py +1168 -0
  91. lionagi/core/unit/util.py +71 -0
  92. lionagi/core/validator/validator.py +364 -0
  93. lionagi/core/work/work.py +76 -0
  94. lionagi/core/work/work_function.py +101 -0
  95. lionagi/core/work/work_queue.py +103 -0
  96. lionagi/core/work/worker.py +258 -0
  97. lionagi/core/work/worklog.py +120 -0
  98. lionagi/experimental/compressor/base.py +46 -0
  99. lionagi/experimental/compressor/llm_compressor.py +247 -0
  100. lionagi/experimental/compressor/llm_summarizer.py +61 -0
  101. lionagi/experimental/compressor/util.py +70 -0
  102. lionagi/experimental/directive/__init__.py +19 -0
  103. lionagi/experimental/directive/parser/base_parser.py +69 -2
  104. lionagi/experimental/directive/{template_ → template}/base_template.py +17 -1
  105. lionagi/{libs/ln_tokenizer.py → experimental/directive/tokenizer.py} +16 -0
  106. lionagi/experimental/{directive/evaluator → evaluator}/ast_evaluator.py +16 -0
  107. lionagi/experimental/{directive/evaluator → evaluator}/base_evaluator.py +16 -0
  108. lionagi/experimental/knowledge/base.py +10 -0
  109. lionagi/experimental/memory/__init__.py +0 -0
  110. lionagi/experimental/strategies/__init__.py +0 -0
  111. lionagi/experimental/strategies/base.py +1 -0
  112. lionagi/integrations/bridge/langchain_/documents.py +4 -0
  113. lionagi/integrations/bridge/llamaindex_/index.py +30 -0
  114. lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +6 -0
  115. lionagi/integrations/chunker/chunk.py +161 -24
  116. lionagi/integrations/config/oai_configs.py +34 -3
  117. lionagi/integrations/config/openrouter_configs.py +14 -2
  118. lionagi/integrations/loader/load.py +122 -21
  119. lionagi/integrations/loader/load_util.py +6 -77
  120. lionagi/integrations/provider/_mapping.py +46 -0
  121. lionagi/integrations/provider/litellm.py +2 -1
  122. lionagi/integrations/provider/mlx_service.py +16 -9
  123. lionagi/integrations/provider/oai.py +91 -4
  124. lionagi/integrations/provider/ollama.py +6 -5
  125. lionagi/integrations/provider/openrouter.py +115 -8
  126. lionagi/integrations/provider/services.py +2 -2
  127. lionagi/integrations/provider/transformers.py +18 -22
  128. lionagi/integrations/storage/__init__.py +3 -3
  129. lionagi/integrations/storage/neo4j.py +52 -60
  130. lionagi/integrations/storage/storage_util.py +44 -46
  131. lionagi/integrations/storage/structure_excel.py +43 -26
  132. lionagi/integrations/storage/to_excel.py +11 -4
  133. lionagi/libs/__init__.py +22 -1
  134. lionagi/libs/ln_api.py +75 -20
  135. lionagi/libs/ln_context.py +37 -0
  136. lionagi/libs/ln_convert.py +21 -9
  137. lionagi/libs/ln_func_call.py +69 -28
  138. lionagi/libs/ln_image.py +107 -0
  139. lionagi/libs/ln_nested.py +26 -11
  140. lionagi/libs/ln_parse.py +82 -23
  141. lionagi/libs/ln_queue.py +16 -0
  142. lionagi/libs/ln_tokenize.py +164 -0
  143. lionagi/libs/ln_validate.py +16 -0
  144. lionagi/libs/special_tokens.py +172 -0
  145. lionagi/libs/sys_util.py +95 -24
  146. lionagi/lions/coder/code_form.py +13 -0
  147. lionagi/lions/coder/coder.py +50 -3
  148. lionagi/lions/coder/util.py +30 -25
  149. lionagi/tests/libs/test_func_call.py +23 -21
  150. lionagi/tests/libs/test_nested.py +36 -21
  151. lionagi/tests/libs/test_parse.py +1 -1
  152. lionagi/tests/test_core/collections/__init__.py +0 -0
  153. lionagi/tests/test_core/collections/test_component.py +206 -0
  154. lionagi/tests/test_core/collections/test_exchange.py +138 -0
  155. lionagi/tests/test_core/collections/test_flow.py +145 -0
  156. lionagi/tests/test_core/collections/test_pile.py +171 -0
  157. lionagi/tests/test_core/collections/test_progression.py +129 -0
  158. lionagi/tests/test_core/generic/test_edge.py +67 -0
  159. lionagi/tests/test_core/generic/test_graph.py +96 -0
  160. lionagi/tests/test_core/generic/test_node.py +106 -0
  161. lionagi/tests/test_core/generic/test_tree_node.py +73 -0
  162. lionagi/tests/test_core/test_branch.py +115 -294
  163. lionagi/tests/test_core/test_form.py +46 -0
  164. lionagi/tests/test_core/test_report.py +105 -0
  165. lionagi/tests/test_core/test_validator.py +111 -0
  166. lionagi/version.py +1 -1
  167. lionagi-0.2.1.dist-info/LICENSE +202 -0
  168. lionagi-0.2.1.dist-info/METADATA +272 -0
  169. lionagi-0.2.1.dist-info/RECORD +240 -0
  170. lionagi/core/branch/base.py +0 -653
  171. lionagi/core/branch/branch.py +0 -474
  172. lionagi/core/branch/flow_mixin.py +0 -96
  173. lionagi/core/branch/util.py +0 -323
  174. lionagi/core/direct/__init__.py +0 -19
  175. lionagi/core/direct/cot.py +0 -123
  176. lionagi/core/direct/plan.py +0 -164
  177. lionagi/core/direct/predict.py +0 -166
  178. lionagi/core/direct/react.py +0 -171
  179. lionagi/core/direct/score.py +0 -279
  180. lionagi/core/direct/select.py +0 -170
  181. lionagi/core/direct/sentiment.py +0 -1
  182. lionagi/core/direct/utils.py +0 -110
  183. lionagi/core/direct/vote.py +0 -64
  184. lionagi/core/execute/base_executor.py +0 -47
  185. lionagi/core/flow/baseflow.py +0 -23
  186. lionagi/core/flow/monoflow/ReAct.py +0 -240
  187. lionagi/core/flow/monoflow/__init__.py +0 -9
  188. lionagi/core/flow/monoflow/chat.py +0 -95
  189. lionagi/core/flow/monoflow/chat_mixin.py +0 -253
  190. lionagi/core/flow/monoflow/followup.py +0 -215
  191. lionagi/core/flow/polyflow/__init__.py +0 -1
  192. lionagi/core/flow/polyflow/chat.py +0 -251
  193. lionagi/core/form/action_form.py +0 -26
  194. lionagi/core/form/field_validator.py +0 -287
  195. lionagi/core/form/form.py +0 -302
  196. lionagi/core/form/mixin.py +0 -214
  197. lionagi/core/form/scored_form.py +0 -13
  198. lionagi/core/generic/action.py +0 -26
  199. lionagi/core/generic/component.py +0 -532
  200. lionagi/core/generic/condition.py +0 -46
  201. lionagi/core/generic/mail.py +0 -90
  202. lionagi/core/generic/mailbox.py +0 -36
  203. lionagi/core/generic/relation.py +0 -70
  204. lionagi/core/generic/signal.py +0 -22
  205. lionagi/core/generic/structure.py +0 -362
  206. lionagi/core/generic/transfer.py +0 -20
  207. lionagi/core/generic/work.py +0 -40
  208. lionagi/core/graph/graph.py +0 -126
  209. lionagi/core/graph/tree.py +0 -190
  210. lionagi/core/mail/schema.py +0 -63
  211. lionagi/core/messages/schema.py +0 -325
  212. lionagi/core/tool/__init__.py +0 -5
  213. lionagi/core/tool/tool.py +0 -28
  214. lionagi/core/tool/tool_manager.py +0 -283
  215. lionagi/experimental/report/form.py +0 -64
  216. lionagi/experimental/report/report.py +0 -138
  217. lionagi/experimental/report/util.py +0 -47
  218. lionagi/experimental/tool/function_calling.py +0 -43
  219. lionagi/experimental/tool/manual.py +0 -66
  220. lionagi/experimental/tool/schema.py +0 -59
  221. lionagi/experimental/tool/tool_manager.py +0 -138
  222. lionagi/experimental/tool/util.py +0 -16
  223. lionagi/experimental/validator/rule.py +0 -139
  224. lionagi/experimental/validator/validator.py +0 -56
  225. lionagi/experimental/work/__init__.py +0 -10
  226. lionagi/experimental/work/async_queue.py +0 -54
  227. lionagi/experimental/work/schema.py +0 -73
  228. lionagi/experimental/work/work_function.py +0 -67
  229. lionagi/experimental/work/worker.py +0 -56
  230. lionagi/experimental/work2/form.py +0 -371
  231. lionagi/experimental/work2/report.py +0 -289
  232. lionagi/experimental/work2/schema.py +0 -30
  233. lionagi/experimental/work2/tests.py +0 -72
  234. lionagi/experimental/work2/work_function.py +0 -89
  235. lionagi/experimental/work2/worker.py +0 -12
  236. lionagi/integrations/bridge/llamaindex_/get_index.py +0 -294
  237. lionagi/tests/test_core/generic/test_component.py +0 -89
  238. lionagi/tests/test_core/test_base_branch.py +0 -426
  239. lionagi/tests/test_core/test_chat_flow.py +0 -63
  240. lionagi/tests/test_core/test_mail_manager.py +0 -75
  241. lionagi/tests/test_core/test_prompts.py +0 -51
  242. lionagi/tests/test_core/test_session.py +0 -254
  243. lionagi/tests/test_core/test_session_base_util.py +0 -313
  244. lionagi/tests/test_core/test_tool_manager.py +0 -95
  245. lionagi-0.1.2.dist-info/LICENSE +0 -9
  246. lionagi-0.1.2.dist-info/METADATA +0 -174
  247. lionagi-0.1.2.dist-info/RECORD +0 -206
  248. /lionagi/core/{branch → _setting}/__init__.py +0 -0
  249. /lionagi/core/{execute → agent/eval}/__init__.py +0 -0
  250. /lionagi/core/{flow → agent/learn}/__init__.py +0 -0
  251. /lionagi/core/{form → agent/plan}/__init__.py +0 -0
  252. /lionagi/core/{branch/executable_branch.py → agent/plan/plan.py} +0 -0
  253. /lionagi/core/{graph → director}/__init__.py +0 -0
  254. /lionagi/core/{messages → engine}/__init__.py +0 -0
  255. /lionagi/{experimental/directive/evaluator → core/engine}/sandbox_.py +0 -0
  256. /lionagi/{experimental/directive/evaluator → core/executor}/__init__.py +0 -0
  257. /lionagi/{experimental/directive/template_ → core/rule}/__init__.py +0 -0
  258. /lionagi/{experimental/report → core/unit/template}/__init__.py +0 -0
  259. /lionagi/{experimental/tool → core/validator}/__init__.py +0 -0
  260. /lionagi/{experimental/validator → core/work}/__init__.py +0 -0
  261. /lionagi/experimental/{work2 → compressor}/__init__.py +0 -0
  262. /lionagi/{core/flow/mono_chat_mixin.py → experimental/directive/template/__init__.py} +0 -0
  263. /lionagi/experimental/directive/{schema.py → template/schema.py} +0 -0
  264. /lionagi/experimental/{work2/util.py → evaluator/__init__.py} +0 -0
  265. /lionagi/experimental/{work2/work.py → knowledge/__init__.py} +0 -0
  266. /lionagi/{tests/libs/test_async.py → experimental/knowledge/graph.py} +0 -0
  267. {lionagi-0.1.2.dist-info → lionagi-0.2.1.dist-info}/WHEEL +0 -0
  268. {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 operation,
21
- along with an automatically generated timestamp indicating when the log entry was
22
- created. It aims to standardize logging across applications for easier analysis
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
- """Serializes the DLog instance into a dictionary with an added timestamp.
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
- """Deserializes log entries from string representations of input and output data.
95
+ """Deserialize log entries from string representations.
83
96
 
84
- This method reconstructs a DLog instance from serialized string data, optionally
85
- unflattening nested dictionary structures if they were flattened during the
86
- serialization process. The method is particularly useful for reading logs from
87
- storage formats like JSON or CSV where data is represented as strings.
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 dictionary
91
- keys to ensure proper structure preservation during unflattening.
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 back into
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 data
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
- structuring, and persistence of log entries.
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. Defaults to 'data/logs/'.
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
- """Exports log entries to a CSV file with customizable options.
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
- """Exports log entries to a JSON file with customizable options.
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 csv: {e}") from e
299
+ raise ValueError(f"Error in saving to json: {e}") from e
289
300
 
290
301
  def save_at_exit(self):
291
- """
292
- Registers an at-exit handler to ensure that any unsaved logs are automatically
293
- persisted to a file upon program termination. This safeguard helps prevent the
294
- loss of log data due to unexpected shutdowns or program exits.
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. This
298
- automatic save operation is triggered only if there are unsaved logs present at
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: This method does not clear the logs after saving, allowing for the
302
- possibility of manual.py review or recovery after the program has terminated.
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
+ ]