lionagi 0.0.305__py3-none-any.whl → 0.0.307__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.
Files changed (84) hide show
  1. lionagi/__init__.py +2 -5
  2. lionagi/core/__init__.py +7 -4
  3. lionagi/core/agent/__init__.py +3 -0
  4. lionagi/core/agent/base_agent.py +46 -0
  5. lionagi/core/branch/__init__.py +4 -0
  6. lionagi/core/branch/base/__init__.py +0 -0
  7. lionagi/core/branch/base_branch.py +100 -78
  8. lionagi/core/branch/branch.py +22 -34
  9. lionagi/core/branch/branch_flow_mixin.py +3 -7
  10. lionagi/core/branch/executable_branch.py +192 -0
  11. lionagi/core/branch/util.py +77 -162
  12. lionagi/core/direct/__init__.py +13 -0
  13. lionagi/core/direct/parallel_predict.py +127 -0
  14. lionagi/core/direct/parallel_react.py +0 -0
  15. lionagi/core/direct/parallel_score.py +0 -0
  16. lionagi/core/direct/parallel_select.py +0 -0
  17. lionagi/core/direct/parallel_sentiment.py +0 -0
  18. lionagi/core/direct/predict.py +174 -0
  19. lionagi/core/direct/react.py +33 -0
  20. lionagi/core/direct/score.py +163 -0
  21. lionagi/core/direct/select.py +144 -0
  22. lionagi/core/direct/sentiment.py +51 -0
  23. lionagi/core/direct/utils.py +83 -0
  24. lionagi/core/flow/__init__.py +0 -3
  25. lionagi/core/flow/monoflow/{mono_react.py → ReAct.py} +52 -9
  26. lionagi/core/flow/monoflow/__init__.py +9 -0
  27. lionagi/core/flow/monoflow/{mono_chat.py → chat.py} +11 -11
  28. lionagi/core/flow/monoflow/{mono_chat_mixin.py → chat_mixin.py} +33 -27
  29. lionagi/core/flow/monoflow/{mono_followup.py → followup.py} +7 -6
  30. lionagi/core/flow/polyflow/__init__.py +1 -0
  31. lionagi/core/flow/polyflow/{polychat.py → chat.py} +15 -3
  32. lionagi/core/mail/__init__.py +8 -0
  33. lionagi/core/mail/mail_manager.py +88 -40
  34. lionagi/core/mail/schema.py +32 -6
  35. lionagi/core/messages/__init__.py +3 -0
  36. lionagi/core/messages/schema.py +56 -25
  37. lionagi/core/prompt/__init__.py +0 -0
  38. lionagi/core/prompt/prompt_template.py +0 -0
  39. lionagi/core/schema/__init__.py +7 -5
  40. lionagi/core/schema/action_node.py +29 -0
  41. lionagi/core/schema/base_mixin.py +56 -59
  42. lionagi/core/schema/base_node.py +35 -38
  43. lionagi/core/schema/condition.py +24 -0
  44. lionagi/core/schema/data_logger.py +98 -98
  45. lionagi/core/schema/data_node.py +19 -19
  46. lionagi/core/schema/prompt_template.py +0 -0
  47. lionagi/core/schema/structure.py +293 -190
  48. lionagi/core/session/__init__.py +1 -3
  49. lionagi/core/session/session.py +196 -214
  50. lionagi/core/tool/tool_manager.py +95 -103
  51. lionagi/integrations/__init__.py +1 -3
  52. lionagi/integrations/bridge/langchain_/documents.py +17 -18
  53. lionagi/integrations/bridge/langchain_/langchain_bridge.py +14 -14
  54. lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +22 -22
  55. lionagi/integrations/bridge/llamaindex_/node_parser.py +12 -12
  56. lionagi/integrations/bridge/llamaindex_/reader.py +11 -11
  57. lionagi/integrations/bridge/llamaindex_/textnode.py +7 -7
  58. lionagi/integrations/config/openrouter_configs.py +0 -1
  59. lionagi/integrations/provider/oai.py +26 -26
  60. lionagi/integrations/provider/services.py +38 -38
  61. lionagi/libs/__init__.py +34 -1
  62. lionagi/libs/ln_api.py +211 -221
  63. lionagi/libs/ln_async.py +53 -60
  64. lionagi/libs/ln_convert.py +118 -120
  65. lionagi/libs/ln_dataframe.py +32 -33
  66. lionagi/libs/ln_func_call.py +334 -342
  67. lionagi/libs/ln_nested.py +99 -107
  68. lionagi/libs/ln_parse.py +175 -158
  69. lionagi/libs/sys_util.py +52 -52
  70. lionagi/tests/test_core/test_base_branch.py +427 -427
  71. lionagi/tests/test_core/test_branch.py +292 -292
  72. lionagi/tests/test_core/test_mail_manager.py +57 -57
  73. lionagi/tests/test_core/test_session.py +254 -266
  74. lionagi/tests/test_core/test_session_base_util.py +299 -300
  75. lionagi/tests/test_core/test_tool_manager.py +70 -74
  76. lionagi/tests/test_libs/test_nested.py +2 -7
  77. lionagi/tests/test_libs/test_parse.py +2 -2
  78. lionagi/version.py +1 -1
  79. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/METADATA +4 -2
  80. lionagi-0.0.307.dist-info/RECORD +115 -0
  81. lionagi-0.0.305.dist-info/RECORD +0 -94
  82. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/LICENSE +0 -0
  83. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/WHEEL +0 -0
  84. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/top_level.txt +0 -0
@@ -5,14 +5,11 @@ Module for base component model definition using Pydantic.
5
5
  from abc import ABC
6
6
  from typing import Any, TypeVar
7
7
 
8
- import lionagi.integrations.bridge.pydantic_.base_model as pyd
9
- from lionagi.libs.sys_util import SysUtil
10
-
11
- from lionagi.libs import ln_convert as convert
8
+ from pydantic import Field, field_serializer, AliasChoices
9
+ from lionagi.libs import SysUtil, convert
12
10
 
13
11
  from .base_mixin import BaseComponentMixin
14
12
 
15
-
16
13
  T = TypeVar("T", bound="BaseComponent")
17
14
 
18
15
 
@@ -23,16 +20,16 @@ class BaseComponent(BaseComponentMixin, ABC):
23
20
  and validating metadata keys and values.
24
21
 
25
22
  Attributes:
26
- id_ (str): Unique identifier, defaulted using SysUtil.create_id.
27
- timestamp (str | None): Timestamp of creation or modification.
28
- metadata (dict[str, Any]): Metadata associated with the component.
23
+ id_ (str): Unique identifier, defaulted using SysUtil.create_id.
24
+ timestamp (str | None): Timestamp of creation or modification.
25
+ metadata (dict[str, Any]): Metadata associated with the component.
29
26
  """
30
27
 
31
- id_: str = pyd.ln_Field(default_factory=SysUtil.create_id, alias="node_id")
32
- timestamp: str | None = pyd.ln_Field(default_factory=SysUtil.get_timestamp)
33
- metadata: dict[str, Any] = pyd.ln_Field(default_factory=dict, alias="meta")
28
+ id_: str = Field(default_factory=SysUtil.create_id, alias="node_id")
29
+ timestamp: str | None = Field(default_factory=SysUtil.get_timestamp)
30
+ metadata: dict[str, Any] = Field(default_factory=dict, alias="meta")
34
31
 
35
- class Config:
32
+ class ConfigDict:
36
33
  """Model configuration settings."""
37
34
 
38
35
  extra = "allow"
@@ -46,11 +43,11 @@ class BaseComponent(BaseComponentMixin, ABC):
46
43
  Creates a deep copy of the instance, with an option to update specific fields.
47
44
 
48
45
  Args:
49
- *args: Variable length argument list for additional options.
50
- **kwargs: Arbitrary keyword arguments specifying updates to the instance.
46
+ *args: Variable length argument list for additional options.
47
+ **kwargs: Arbitrary keyword arguments specifying updates to the instance.
51
48
 
52
49
  Returns:
53
- BaseComponent: A new instance of BaseComponent as a deep copy of the original, with updates applied.
50
+ BaseComponent: A new instance of BaseComponent as a deep copy of the original, with updates applied.
54
51
  """
55
52
  return self.model_copy(*args, **kwargs)
56
53
 
@@ -64,15 +61,15 @@ class BaseNode(BaseComponent):
64
61
  extending BaseComponent with content handling capabilities.
65
62
 
66
63
  Attributes:
67
- content: The content of the node, which can be a string, a dictionary with any structure,
68
- None, or any other type. It is flexible to accommodate various types of content.
69
- This attribute also supports aliasing through validation_alias for compatibility with
70
- different naming conventions like "text", "page_content", or "chunk_content".
64
+ content: The content of the node, which can be a string, a dictionary with any structure,
65
+ None, or any other type. It is flexible to accommodate various types of content.
66
+ This attribute also supports aliasing through validation_alias for compatibility with
67
+ different naming conventions like "text", "page_content", or "chunk_content".
71
68
  """
72
69
 
73
- content: str | dict[str, Any] | None | Any = pyd.ln_Field(
70
+ content: str | dict[str, Any] | None | Any = Field(
74
71
  default=None,
75
- validation_alias=pyd.ln_AliasChoices("text", "page_content", "chunk_content"),
72
+ validation_alias=AliasChoices("text", "page_content", "chunk_content"),
76
73
  )
77
74
 
78
75
  @property
@@ -81,8 +78,8 @@ class BaseNode(BaseComponent):
81
78
  Attempts to serialize the node's content to a string.
82
79
 
83
80
  Returns:
84
- str: The serialized content string. If serialization fails, returns "null" and
85
- logs an error message indicating the content is not serializable.
81
+ str: The serialized content string. If serialization fails, returns "null" and
82
+ logs an error message indicating the content is not serializable.
86
83
  """
87
84
  try:
88
85
  return convert.to_str(self.content)
@@ -98,17 +95,17 @@ class BaseNode(BaseComponent):
98
95
  metadata preview, and optionally the timestamp if present.
99
96
 
100
97
  Returns:
101
- str: A string representation of the instance.
98
+ str: A string representation of the instance.
102
99
  """
103
100
  timestamp = f" ({self.timestamp})" if self.timestamp else ""
104
101
  if self.content:
105
102
  content_preview = (
106
- self.content[:50] + "..." if len(self.content) > 50 else self.content
103
+ f"{self.content[:50]}..." if len(self.content) > 50 else self.content
107
104
  )
108
105
  else:
109
106
  content_preview = ""
110
107
  meta_preview = (
111
- str(self.metadata)[:50] + "..."
108
+ f"{str(self.metadata)[:50]}..."
112
109
  if len(str(self.metadata)) > 50
113
110
  else str(self.metadata)
114
111
  )
@@ -123,11 +120,11 @@ class BaseRelatableNode(BaseNode):
123
120
  Extends BaseNode with functionality to manage relationships with other nodes.
124
121
 
125
122
  Attributes:
126
- related_nodes: A list of identifiers (str) for nodes that are related to this node.
127
- label: An optional label for the node, providing additional context or classification.
123
+ related_nodes: A list of identifiers (str) for nodes that are related to this node.
124
+ label: An optional label for the node, providing additional context or classification.
128
125
  """
129
126
 
130
- related_nodes: list[str] = pyd.ln_Field(default_factory=list)
127
+ related_nodes: list[str] = Field(default_factory=list)
131
128
  label: str | None = None
132
129
 
133
130
  def add_related_node(self, node_id: str) -> bool:
@@ -135,10 +132,10 @@ class BaseRelatableNode(BaseNode):
135
132
  Adds a node to the list of related nodes if it's not already present.
136
133
 
137
134
  Args:
138
- node_id: The identifier of the node to add.
135
+ node_id: The identifier of the node to add.
139
136
 
140
137
  Returns:
141
- bool: True if the node was added, False if it was already in the list.
138
+ bool: True if the node was added, False if it was already in the list.
142
139
  """
143
140
  if node_id not in self.related_nodes:
144
141
  self.related_nodes.append(node_id)
@@ -150,10 +147,10 @@ class BaseRelatableNode(BaseNode):
150
147
  Removes a node from the list of related nodes if it's present.
151
148
 
152
149
  Args:
153
- node_id: The identifier of the node to remove.
150
+ node_id: The identifier of the node to remove.
154
151
 
155
152
  Returns:
156
- bool: True if the node was removed, False if it was not found in the list.
153
+ bool: True if the node was removed, False if it was not found in the list.
157
154
  """
158
155
 
159
156
  if node_id in self.related_nodes:
@@ -167,10 +164,10 @@ class Tool(BaseRelatableNode):
167
164
  Represents a tool, extending BaseRelatableNode with specific functionalities and configurations.
168
165
 
169
166
  Attributes:
170
- func: The main function or capability of the tool.
171
- schema_: An optional schema defining the structure and constraints of data the tool works with.
172
- manual: Optional documentation or manual for using the tool.
173
- parser: An optional parser associated with the tool for data processing or interpretation.
167
+ func: The main function or capability of the tool.
168
+ schema_: An optional schema defining the structure and constraints of data the tool works with.
169
+ manual: Optional documentation or manual for using the tool.
170
+ parser: An optional parser associated with the tool for data processing or interpretation.
174
171
  """
175
172
 
176
173
  func: Any
@@ -178,7 +175,7 @@ class Tool(BaseRelatableNode):
178
175
  manual: Any | None = None
179
176
  parser: Any | None = None
180
177
 
181
- @pyd.ln_field_serializer("func")
178
+ @field_serializer("func")
182
179
  def serialize_func(self, func):
183
180
  return func.__name__
184
181
 
@@ -0,0 +1,24 @@
1
+ from abc import ABC, abstractmethod
2
+ from enum import Enum
3
+
4
+
5
+ class SourceType(str, Enum):
6
+ STRUCTURE = "structure"
7
+ EXECUTABLE = "executable"
8
+
9
+
10
+ class Condition(ABC):
11
+ def __init__(self, source_type):
12
+ try:
13
+ if isinstance(source_type, str):
14
+ source_type = SourceType(source_type)
15
+ if isinstance(source_type, SourceType):
16
+ self.source_type = source_type
17
+ except:
18
+ raise ValueError(
19
+ f"Invalid source_type. Valid source types are {list(SourceType)}"
20
+ )
21
+
22
+ @abstractmethod
23
+ def __call__(self, source_obj):
24
+ pass
@@ -4,10 +4,10 @@ from dataclasses import dataclass
4
4
  from pathlib import Path
5
5
  from typing import Any, Dict, List
6
6
 
7
- from lionagi.libs.sys_util import SysUtil
7
+ from lionagi.libs import SysUtil, convert, nested
8
8
 
9
- from lionagi.libs import ln_convert as convert
10
- from lionagi.libs import ln_nested as nested
9
+
10
+ # TODO: there should be a global data logger, under setting
11
11
 
12
12
 
13
13
  @dataclass
@@ -23,12 +23,12 @@ class DLog:
23
23
  operations.
24
24
 
25
25
  Attributes:
26
- input_data (Any): The data received by the operation. This attribute can be of
27
- any type, reflecting the flexible nature of input data to
28
- various processes.
29
- output_data (Any): The data produced by the operation. Similar to `input_data`,
30
- this attribute supports any type, accommodating the diverse
31
- outputs that different operations may generate.
26
+ input_data (Any): The data received by the operation. This attribute can be of
27
+ any type, reflecting the flexible nature of input data to
28
+ various processes.
29
+ output_data (Any): The data produced by the operation. Similar to `input_data`,
30
+ this attribute supports any type, accommodating the diverse
31
+ outputs that different operations may generate.
32
32
 
33
33
  Methods: serialize: Converts the instance into a dictionary, suitable for
34
34
  serialization, and appends a timestamp to this dictionary, reflecting the current
@@ -46,8 +46,8 @@ class DLog:
46
46
  dictionary, capturing the exact time the log entry was serialized.
47
47
 
48
48
  Returns:
49
- Dict[str, Any]: A dictionary representation of the DLog instance, including
50
- 'input_data', 'output_data', and 'timestamp' keys.
49
+ Dict[str, Any]: A dictionary representation of the DLog instance, including
50
+ 'input_data', 'output_data', and 'timestamp' keys.
51
51
  """
52
52
  log_dict = {}
53
53
 
@@ -83,8 +83,8 @@ class DLog:
83
83
  dictionary, capturing the exact time the log entry was serialized.
84
84
 
85
85
  Returns:
86
- Dict[str, Any]: A dictionary representation of the DLog instance, including
87
- 'input_data', 'output_data', and 'timestamp' keys.
86
+ Dict[str, Any]: A dictionary representation of the DLog instance, including
87
+ 'input_data', 'output_data', and 'timestamp' keys.
88
88
  """
89
89
  input_data = ""
90
90
  output_data = ""
@@ -113,27 +113,27 @@ class DataLogger:
113
113
  at program exit, among other features.
114
114
 
115
115
  Attributes:
116
- persist_path (Path): The filesystem path to the directory where log files will
117
- be saved. Defaults to a subdirectory 'data/logs/' within
118
- the current working directory.
119
- log (Deque[Dict]): A deque object that acts as the container for log entries.
120
- Each log entry is stored as a dictionary, facilitating easy
121
- conversion to various data formats.
122
- filename (str): The base name used for log files when saved. The actual filepath
123
- may include a timestamp or other modifiers based on the class's
124
- configuration.
116
+ persist_path (Path): The filesystem path to the directory where log files will
117
+ be saved. Defaults to a subdirectory 'data/logs/' within
118
+ the current working directory.
119
+ log (Deque[Dict]): A deque object that acts as the container for log entries.
120
+ Each log entry is stored as a dictionary, facilitating easy
121
+ conversion to various data formats.
122
+ filename (str): The base name used for log files when saved. The actual filepath
123
+ may include a timestamp or other modifiers based on the class's
124
+ configuration.
125
125
 
126
126
  Methods:
127
- append: Adds a new log entry to the datalogger.
128
- to_csv_file: Exports accumulated log entries to a CSV file.
129
- to_json_file: Exports accumulated log entries to a JSON file.
130
- save_at_exit: Ensures that unsaved log entries are persisted to a CSV file when
131
- the program terminates.
127
+ append: Adds a new log entry to the datalogger.
128
+ to_csv_file: Exports accumulated log entries to a CSV file.
129
+ to_json_file: Exports accumulated log entries to a JSON file.
130
+ save_at_exit: Ensures that unsaved log entries are persisted to a CSV file when
131
+ the program terminates.
132
132
 
133
133
  Usage Example:
134
- >>> datalogger = DataLogger(persist_path='my/logs/directory', filepath='process_logs')
135
- >>> datalogger.append(input_data="Example input", output_data="Example output")
136
- >>> datalogger.to_csv_file('finalized_logs.csv', clear=True)
134
+ >>> datalogger = DataLogger(persist_path='my/logs/directory', filepath='process_logs')
135
+ >>> datalogger.append(input_data="Example input", output_data="Example output")
136
+ >>> datalogger.to_csv_file('finalized_logs.csv', clear=True)
137
137
 
138
138
  This example demonstrates initializing a `DataLogger` with a custom directory and
139
139
  filepath, appending a log entry, and then exporting the log to a CSV file.
@@ -151,18 +151,18 @@ class DataLogger:
151
151
  logs, and base filepath for exports.
152
152
 
153
153
  Args:
154
- persist_path (str | Path | None, optional):
155
- The file system path to the directory where log files will be persisted.
156
- if not provided, defaults to 'data/logs/' within the current working
157
- directory. this path is used for all subsequent log export operations.
158
- log (list[Dict[str, Any]] | None, optional):
159
- An initial collection of log entries to populate the datalogger. each entry
160
- should be a dictionary reflecting the structure used by the datalogger
161
- (input, output, timestamp). if omitted, the datalogger starts empty.
162
- filename (str | None, optional):
163
- The base name for exported log files. this name may be augmented with
164
- timestamps and format-specific extensions during export operations.
165
- defaults to 'log'.
154
+ persist_path (str | Path | None, optional):
155
+ The file system path to the directory where log files will be persisted.
156
+ if not provided, defaults to 'data/logs/' within the current working
157
+ directory. this path is used for all subsequent log export operations.
158
+ log (list[Dict[str, Any]] | None, optional):
159
+ An initial collection of log entries to populate the datalogger. each entry
160
+ should be a dictionary reflecting the structure used by the datalogger
161
+ (input, output, timestamp). if omitted, the datalogger starts empty.
162
+ filename (str | None, optional):
163
+ The base name for exported log files. this name may be augmented with
164
+ timestamps and format-specific extensions during export operations.
165
+ defaults to 'log'.
166
166
 
167
167
  register an at-exit handler to ensure unsaved logs are automatically persisted to
168
168
  a CSV file upon program termination.
@@ -184,10 +184,10 @@ class DataLogger:
184
184
  record deque.
185
185
 
186
186
  Args:
187
- input_data (Any):
188
- Data provided as input to a tracked operation or process.
189
- output_data (Any):
190
- Data resulting from the operation, recorded as the output.
187
+ input_data (Any):
188
+ Data provided as input to a tracked operation or process.
189
+ output_data (Any):
190
+ Data resulting from the operation, recorded as the output.
191
191
 
192
192
  constructs a log entry from the provided data and automatically includes a
193
193
  timestamp upon serialization.
@@ -214,25 +214,25 @@ class DataLogger:
214
214
  and timestamping options.
215
215
 
216
216
  Args:
217
- filename (str, optional):
218
- Filename for the CSV output, appended with '.csv' if not included, saved
219
- within the specified persisting directory.
220
- dir_exist_ok (bool, optional):
221
- If False, raises an error if the directory already exists; otherwise,
222
- writes without an error.
223
- timestamp (bool, optional):
224
- If True, appends a current timestamp to the filepath for uniqueness.
225
- time_prefix (bool, optional):
226
- If True, place the timestamp prefix before the filepath; otherwise,
227
- it's suffixed.
228
- verbose (bool, optional):
229
- If True, print a message upon successful file save, detailing the file
230
- path and number of logs saved.
231
- clear (bool, optional):
232
- If True, empties the internal log record after saving.
233
- **kwargs:
234
- Additional keyword arguments for pandas.DataFrame.to_csv(), allowing
235
- customization of the CSV output, such as excluding the index.
217
+ filename (str, optional):
218
+ Filename for the CSV output, appended with '.csv' if not included, saved
219
+ within the specified persisting directory.
220
+ dir_exist_ok (bool, optional):
221
+ If False, raises an error if the directory already exists; otherwise,
222
+ writes without an error.
223
+ timestamp (bool, optional):
224
+ If True, appends a current timestamp to the filepath for uniqueness.
225
+ time_prefix (bool, optional):
226
+ If True, place the timestamp prefix before the filepath; otherwise,
227
+ it's suffixed.
228
+ verbose (bool, optional):
229
+ If True, print a message upon successful file save, detailing the file
230
+ path and number of logs saved.
231
+ clear (bool, optional):
232
+ If True, empties the internal log record after saving.
233
+ **kwargs:
234
+ Additional keyword arguments for pandas.DataFrame.to_csv(), allowing
235
+ customization of the CSV output, such as excluding the index.
236
236
 
237
237
  raises a ValueError with an explanatory message if an error occurs during the file
238
238
  writing or DataFrame conversion process.
@@ -257,7 +257,7 @@ class DataLogger:
257
257
  if clear:
258
258
  self.log.clear()
259
259
  except Exception as e:
260
- raise ValueError(f"Error in saving to csv: {e}")
260
+ raise ValueError(f"Error in saving to csv: {e}") from e
261
261
 
262
262
  def to_json_file(
263
263
  self,
@@ -278,41 +278,41 @@ class DataLogger:
278
278
  offering customization for file naming and timestamping.
279
279
 
280
280
  Args:
281
- filename (str, optional):
282
- The filepath for the JSON output.'.json' is appended if not specified.
283
- The file is saved within the designated persisting directory.
284
- timestamp (bool, optional):
285
- If True, adds a timestamp to the filepath to ensure uniqueness.
286
- time_prefix (bool, optional):
287
- Determines the placement of the timestamp in the filepath. A prefix if
288
- True; otherwise, a suffix.
289
- dir_exist_ok (bool, optional):
290
- Allows writing to an existing directory without raising an error.
291
- If False, an error is raised when attempting to write to an existing
292
- directory.
293
- verbose (bool, optional):
294
- Print a message upon successful save, indicating the file path and
295
- number of logs saved.
296
- clear (bool, optional):
297
- Clears the log deque after saving, aiding in memory management.
298
- **kwargs:
299
- Additional arguments passed to pandas.DataFrame.to_json(),
300
- enabling customization of the JSON output.
281
+ filename (str, optional):
282
+ The filepath for the JSON output.'.json' is appended if not specified.
283
+ The file is saved within the designated persisting directory.
284
+ timestamp (bool, optional):
285
+ If True, adds a timestamp to the filepath to ensure uniqueness.
286
+ time_prefix (bool, optional):
287
+ Determines the placement of the timestamp in the filepath. A prefix if
288
+ True; otherwise, a suffix.
289
+ dir_exist_ok (bool, optional):
290
+ Allows writing to an existing directory without raising an error.
291
+ If False, an error is raised when attempting to write to an existing
292
+ directory.
293
+ verbose (bool, optional):
294
+ Print a message upon successful save, indicating the file path and
295
+ number of logs saved.
296
+ clear (bool, optional):
297
+ Clears the log deque after saving, aiding in memory management.
298
+ **kwargs:
299
+ Additional arguments passed to pandas.DataFrame.to_json(),
300
+ enabling customization of the JSON output.
301
301
 
302
302
  Raises:
303
- ValueError: When an error occurs during file writing or DataFrame conversion,
304
- encapsulating
305
- the exception with a descriptive message.
303
+ ValueError: When an error occurs during file writing or DataFrame conversion,
304
+ encapsulating
305
+ the exception with a descriptive message.
306
306
 
307
307
  Examples:
308
- Default usage saving logs to 'log.json' within the specified persisting
309
- directory:
310
- >>> datalogger.to_json_file()
311
- # Save path: 'data/logs/log.json'
312
-
313
- Custom filepath without a timestamp, using additional pandas options:
314
- >>> datalogger.to_json_file(filepath='detailed_log.json', orient='records')
315
- # Save a path: 'data/logs/detailed_log.json'
308
+ Default usage saving logs to 'log.json' within the specified persisting
309
+ directory:
310
+ >>> datalogger.to_json_file()
311
+ # Save path: 'data/logs/log.json'
312
+
313
+ Custom filepath without a timestamp, using additional pandas options:
314
+ >>> datalogger.to_json_file(filepath='detailed_log.json', orient='records')
315
+ # Save a path: 'data/logs/detailed_log.json'
316
316
  """
317
317
  if not filename.endswith(".json"):
318
318
  filename += ".json"
@@ -334,7 +334,7 @@ class DataLogger:
334
334
  if clear:
335
335
  self.log.clear()
336
336
  except Exception as e:
337
- raise ValueError(f"Error in saving to csv: {e}")
337
+ raise ValueError(f"Error in saving to csv: {e}") from e
338
338
 
339
339
  def save_at_exit(self):
340
340
  """
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from lionagi.core.schema.base_node import BaseNode
2
+ from .base_node import BaseNode
3
3
 
4
4
  from lionagi.integrations.bridge import LlamaIndexBridge, LangchainBridge
5
5
 
@@ -22,15 +22,15 @@ class DataNode(BaseNode):
22
22
  integration and usage within that ecosystem.
23
23
 
24
24
  Args:
25
- node_type:
26
- **kwargs: Additional keyword arguments for customization.
25
+ node_type:
26
+ **kwargs: Additional keyword arguments for customization.
27
27
 
28
28
  Returns:
29
- Any: The llama index format representation of the node.
29
+ Any: The llama index format representation of the node.
30
30
 
31
31
  Examples:
32
- >>> node = DataNode(content="Example content")
33
- >>> llama_index = node.to_llama_index()
32
+ >>> node = DataNode(content="Example content")
33
+ >>> llama_index = node.to_llama_index()
34
34
  """
35
35
  return LlamaIndexBridge.to_llama_index_node(self, node_type=node_type, **kwargs)
36
36
 
@@ -42,14 +42,14 @@ class DataNode(BaseNode):
42
42
  use within langchain_ applications and workflows.
43
43
 
44
44
  Args:
45
- **kwargs: Additional keyword arguments for customization.
45
+ **kwargs: Additional keyword arguments for customization.
46
46
 
47
47
  Returns:
48
- Any: The langchain_ document representation of the node.
48
+ Any: The langchain_ document representation of the node.
49
49
 
50
50
  Examples:
51
- >>> node = DataNode(content="Example content")
52
- >>> langchain_doc = node.to_langchain()
51
+ >>> node = DataNode(content="Example content")
52
+ >>> langchain_doc = node.to_langchain()
53
53
  """
54
54
  return LangchainBridge.to_langchain_document(self, **kwargs)
55
55
 
@@ -59,15 +59,15 @@ class DataNode(BaseNode):
59
59
  Creates a DataNode instance from a llama index node.
60
60
 
61
61
  Args:
62
- llama_node: The llama index node object.
63
- **kwargs: Variable length argument list.
62
+ llama_node: The llama index node object.
63
+ **kwargs: Variable length argument list.
64
64
 
65
65
  Returns:
66
- An instance of DataNode.
66
+ An instance of DataNode.
67
67
 
68
68
  Examples:
69
- llama_node = SomeLlamaIndexNode()
70
- data_node = DataNode.from_llama_index(llama_node)
69
+ llama_node = SomeLlamaIndexNode()
70
+ data_node = DataNode.from_llama_index(llama_node)
71
71
  """
72
72
  llama_dict = llama_node.to_dict(**kwargs)
73
73
  return cls.from_obj(llama_dict)
@@ -78,14 +78,14 @@ class DataNode(BaseNode):
78
78
  Creates a DataNode instance from a langchain_ document.
79
79
 
80
80
  Args:
81
- lc_doc: The langchain_ document object.
81
+ lc_doc: The langchain_ document object.
82
82
 
83
83
  Returns:
84
- An instance of DataNode.
84
+ An instance of DataNode.
85
85
 
86
86
  Examples:
87
- lc_doc = SomeLangChainDocument()
88
- data_node = DataNode.from_langchain(lc_doc)
87
+ lc_doc = SomeLangChainDocument()
88
+ data_node = DataNode.from_langchain(lc_doc)
89
89
  """
90
90
  info_json = lc_doc.to_json()
91
91
  info_node = {"lc_id": info_json["id"]}
File without changes