lionagi 0.3.6__py3-none-any.whl → 0.3.7__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. lionagi/core/collections/abc/component.py +26 -29
  2. lionagi/core/collections/abc/concepts.py +0 -6
  3. lionagi/core/collections/flow.py +0 -1
  4. lionagi/core/collections/model.py +3 -2
  5. lionagi/core/collections/pile.py +1 -1
  6. lionagi/core/collections/progression.py +4 -5
  7. lionagi/core/generic/registry/component_registry/__init__.py +0 -0
  8. lionagi/core/operations/__init__.py +0 -0
  9. lionagi/core/operations/chat/__init__.py +0 -0
  10. lionagi/core/operations/direct/__init__.py +0 -0
  11. lionagi/core/operative/__init__.py +0 -0
  12. lionagi/core/unit/unit_mixin.py +3 -3
  13. lionagi/integrations/langchain_/__init__.py +0 -0
  14. lionagi/integrations/llamaindex_/__init__.py +0 -0
  15. lionagi/libs/sys_util.py +196 -32
  16. lionagi/lions/director/__init__.py +0 -0
  17. lionagi/operations/brainstorm/__init__.py +0 -0
  18. lionagi/operations/brainstorm.py +0 -0
  19. lionagi/operations/chat/__init__.py +0 -0
  20. lionagi/operations/models/__init__.py +0 -0
  21. lionagi/operations/plan/__init__.py +0 -0
  22. lionagi/operations/plan/base.py +0 -0
  23. lionagi/operations/query/__init__.py +0 -0
  24. lionagi/operations/rank/__init__.py +0 -0
  25. lionagi/operations/react/__init__.py +0 -0
  26. lionagi/operations/route/__init__.py +0 -0
  27. lionagi/operations/score/__init__.py +0 -0
  28. lionagi/operations/select/__init__.py +0 -0
  29. lionagi/operations/strategize/__init__.py +0 -0
  30. lionagi/version.py +1 -1
  31. {lionagi-0.3.6.dist-info → lionagi-0.3.7.dist-info}/METADATA +2 -1
  32. {lionagi-0.3.6.dist-info → lionagi-0.3.7.dist-info}/RECORD +34 -13
  33. {lionagi-0.3.6.dist-info → lionagi-0.3.7.dist-info}/LICENSE +0 -0
  34. {lionagi-0.3.6.dist-info → lionagi-0.3.7.dist-info}/WHEEL +0 -0
@@ -1,11 +1,11 @@
1
1
  """Component class, base building block in LionAGI."""
2
2
 
3
3
  import contextlib
4
- from abc import ABC
5
- from collections.abc import Sequence
6
4
  from functools import singledispatchmethod
7
- from typing import Any, Type, TypeAlias, TypeVar, Union
5
+ from typing import Any, TypeAlias, TypeVar, Union
8
6
 
7
+ import lionfuncs as ln
8
+ from lionabc import Observable
9
9
  from pandas import DataFrame, Series
10
10
  from pydantic import AliasChoices, BaseModel, Field, ValidationError
11
11
 
@@ -22,7 +22,13 @@ T = TypeVar("T")
22
22
  _init_class = {}
23
23
 
24
24
 
25
- class Element(BaseModel, ABC):
25
+ def change_dict_key(dict_: dict, old_key: str, new_key: str) -> None:
26
+ """Change a key in a dictionary."""
27
+ if old_key in dict_:
28
+ dict_[new_key] = dict_.pop(old_key)
29
+
30
+
31
+ class Element(BaseModel, Observable):
26
32
  """Base class for elements within the LionAGI system.
27
33
 
28
34
  Attributes:
@@ -31,15 +37,14 @@ class Element(BaseModel, ABC):
31
37
  """
32
38
 
33
39
  ln_id: str = Field(
34
- default_factory=SysUtil.create_id,
40
+ default_factory=SysUtil.id,
35
41
  title="ID",
36
- description="A 32-char unique hash identifier.",
37
42
  frozen=True,
38
43
  validation_alias=AliasChoices("node_id", "ID", "id"),
39
44
  )
40
45
 
41
46
  timestamp: str = Field(
42
- default_factory=lambda: SysUtil.get_timestamp(sep=None)[:-6],
47
+ default_factory=lambda: ln.time(type_="iso"),
43
48
  title="Creation Timestamp",
44
49
  description="The UTC timestamp of creation",
45
50
  frozen=True,
@@ -57,7 +62,7 @@ class Element(BaseModel, ABC):
57
62
  return True
58
63
 
59
64
 
60
- class Component(Element, ABC):
65
+ class Component(Element):
61
66
  """
62
67
  Represents a distinguishable, temporal entity in LionAGI.
63
68
 
@@ -195,17 +200,15 @@ class Component(Element, ABC):
195
200
  """Create a Component instance from a LlamaIndex object."""
196
201
  dict_ = obj.to_dict()
197
202
 
198
- SysUtil.change_dict_key(dict_, "text", "content")
203
+ change_dict_key(dict_, "text", "content")
199
204
  metadata = dict_.pop("metadata", {})
200
205
 
201
206
  for field in llama_meta_fields:
202
207
  metadata[field] = dict_.pop(field, None)
203
208
 
204
- SysUtil.change_dict_key(metadata, "class_name", "llama_index_class")
205
- SysUtil.change_dict_key(metadata, "id_", "llama_index_id")
206
- SysUtil.change_dict_key(
207
- metadata, "relationships", "llama_index_relationships"
208
- )
209
+ change_dict_key(metadata, "class_name", "llama_index_class")
210
+ change_dict_key(metadata, "id_", "llama_index_id")
211
+ change_dict_key(metadata, "relationships", "llama_index_relationships")
209
212
 
210
213
  dict_["metadata"] = metadata
211
214
  return cls.from_obj(dict_)
@@ -244,7 +247,7 @@ class Component(Element, ABC):
244
247
  @classmethod
245
248
  def _process_langchain_dict(cls, dict_: dict) -> dict:
246
249
  """Process a dictionary containing Langchain-specific data."""
247
- SysUtil.change_dict_key(dict_, "page_content", "content")
250
+ change_dict_key(dict_, "page_content", "content")
248
251
 
249
252
  metadata = dict_.pop("metadata", {})
250
253
  metadata.update(dict_.pop("kwargs", {}))
@@ -264,9 +267,9 @@ class Component(Element, ABC):
264
267
  if field in dict_:
265
268
  metadata[field] = dict_.pop(field)
266
269
 
267
- SysUtil.change_dict_key(metadata, "lc", "langchain")
268
- SysUtil.change_dict_key(metadata, "type", "lc_type")
269
- SysUtil.change_dict_key(metadata, "id", "lc_id")
270
+ change_dict_key(metadata, "lc", "langchain")
271
+ change_dict_key(metadata, "type", "lc_type")
272
+ change_dict_key(metadata, "id", "lc_id")
270
273
 
271
274
  extra_fields = {
272
275
  k: v for k, v in metadata.items() if k not in lc_meta_fields
@@ -298,9 +301,9 @@ class Component(Element, ABC):
298
301
  dict_["metadata"] = meta_
299
302
 
300
303
  if "ln_id" not in dict_:
301
- dict_["ln_id"] = meta_.pop("ln_id", SysUtil.create_id())
304
+ dict_["ln_id"] = meta_.pop("ln_id", SysUtil.id())
302
305
  if "timestamp" not in dict_:
303
- dict_["timestamp"] = SysUtil.get_timestamp(sep=None)[:-6]
306
+ dict_["timestamp"] = ln.time(type_="iso")
304
307
  if "metadata" not in dict_:
305
308
  dict_["metadata"] = {}
306
309
  if "extra_fields" not in dict_:
@@ -453,13 +456,13 @@ class Component(Element, ABC):
453
456
  ninsert(
454
457
  self.metadata,
455
458
  ["last_updated", name],
456
- SysUtil.get_timestamp(sep=None)[:-6],
459
+ ln.time(type_="iso")[:-6],
457
460
  )
458
461
  elif isinstance(a, tuple) and isinstance(a[0], int):
459
462
  nset(
460
463
  self.metadata,
461
464
  ["last_updated", name],
462
- SysUtil.get_timestamp(sep=None)[:-6],
465
+ ln.time(type_="iso")[:-6],
463
466
  )
464
467
 
465
468
  def _meta_pop(self, indices, default=...):
@@ -614,10 +617,4 @@ LionIDable: TypeAlias = Union[str, Element]
614
617
 
615
618
  def get_lion_id(item: LionIDable) -> str:
616
619
  """Get the Lion ID of an item."""
617
- if isinstance(item, Sequence) and len(item) == 1:
618
- item = item[0]
619
- if isinstance(item, str) and len(item) == 32:
620
- return item
621
- if getattr(item, "ln_id", None) is not None:
622
- return item.ln_id
623
- raise LionTypeError("Item must be a single LionIDable object.")
620
+ return SysUtil.get_id(item)
@@ -227,12 +227,6 @@ class Sendable(BaseModel, ABC):
227
227
  return value
228
228
 
229
229
  a = get_lion_id(value)
230
- if not isinstance(a, str) or len(a) != 32:
231
- raise LionTypeError(
232
- "Invalid sender or recipient value. "
233
- "Expected a valid node id or one of "
234
- "'system' or 'user'."
235
- )
236
230
  return a
237
231
 
238
232
 
@@ -1,7 +1,6 @@
1
1
  import contextlib
2
2
  from collections import deque
3
3
  from collections.abc import Mapping
4
- from typing import Tuple
5
4
 
6
5
  from pydantic import Field
7
6
 
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  import os
3
3
 
4
+ import lionfuncs as ln
4
5
  import numpy as np
5
6
  from dotenv import load_dotenv
6
7
 
@@ -91,8 +92,8 @@ class iModel:
91
92
  service (BaseService, optional): An instance of BaseService.
92
93
  **kwargs: Additional parameters for the model.
93
94
  """
94
- self.ln_id: str = SysUtil.create_id()
95
- self.timestamp: str = SysUtil.get_timestamp(sep=None)[:-6]
95
+ self.ln_id: str = SysUtil.id()
96
+ self.timestamp: str = ln.time(type_="iso")
96
97
  self.endpoint = endpoint
97
98
  self.allowed_parameters = allowed_parameters
98
99
  if isinstance(provider, type):
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  from collections.abc import AsyncIterator, Callable, Iterable
5
5
  from functools import wraps
6
- from typing import Any, Generic, Type, TypeVar
6
+ from typing import Any, Generic, TypeVar
7
7
 
8
8
  from pydantic import Field, field_validator
9
9
 
@@ -1,9 +1,8 @@
1
1
  import contextlib
2
2
 
3
+ import lionfuncs as ln
3
4
  from pydantic import Field, field_validator
4
5
 
5
- from lionagi.libs import SysUtil
6
-
7
6
  from .abc import Element, ItemNotFoundError, LionIDable, Ordering, get_lion_id
8
7
  from .util import _validate_order
9
8
 
@@ -90,7 +89,7 @@ class Progression(Element, Ordering):
90
89
  """Remove the next occurrence of an item from the progression."""
91
90
  if item in self:
92
91
  item = self._validate_order(item)
93
- l_ = SysUtil.create_copy(self.order)
92
+ l_ = ln.copy(self.order)
94
93
 
95
94
  with contextlib.suppress(Exception):
96
95
  for i in item:
@@ -143,7 +142,7 @@ class Progression(Element, Ordering):
143
142
  def __radd__(self, other):
144
143
  if not isinstance(other, Progression):
145
144
  _copy = self.copy()
146
- l_ = SysUtil.create_copy(_copy.order)
145
+ l_ = ln.copy(_copy.order)
147
146
  l_.insert(0, get_lion_id(other))
148
147
  _copy.order = l_
149
148
  return _copy
@@ -190,7 +189,7 @@ class Progression(Element, Ordering):
190
189
 
191
190
  def __list__(self):
192
191
  """Return a list representation of the progression."""
193
- return SysUtil.create_copy(self.order)
192
+ return ln.copy(self.order)
194
193
 
195
194
  def __reversed__(self):
196
195
  """Return a reversed progression."""
File without changes
File without changes
File without changes
File without changes
@@ -2,9 +2,9 @@ import asyncio
2
2
  import contextlib
3
3
  import re
4
4
  from abc import ABC
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
 
7
- from lionfuncs import extract_json_block, to_dict, validate_mapping
7
+ from lionfuncs import extract_block, to_dict, validate_mapping
8
8
 
9
9
  from lionagi.core.collections.abc import ActionError
10
10
  from lionagi.core.message import ActionRequest, ActionResponse, Instruction
@@ -1156,7 +1156,7 @@ class DirectiveMixin(ABC):
1156
1156
  return to_dict(out_, fuzzy_parse=True)
1157
1157
 
1158
1158
  with contextlib.suppress(Exception):
1159
- return extract_json_block(out_)
1159
+ return extract_block(out_)
1160
1160
 
1161
1161
  with contextlib.suppress(Exception):
1162
1162
  match = re.search(r"```json\n({.*?})\n```", out_, re.DOTALL)
File without changes
File without changes
lionagi/libs/sys_util.py CHANGED
@@ -7,11 +7,17 @@ import re
7
7
  import subprocess
8
8
  import sys
9
9
  import time
10
+ from collections.abc import Sequence
10
11
  from datetime import datetime, timezone
11
12
  from hashlib import sha256
12
13
  from pathlib import Path
13
14
  from typing import Any
14
15
 
16
+ from lion_core.setting import DEFAULT_LION_ID_CONFIG, LionIDConfig
17
+ from lion_core.sys_utils import SysUtil as _u
18
+ from lionabc import Observable
19
+ from typing_extensions import deprecated
20
+
15
21
  _timestamp_syms = ["-", ":", "."]
16
22
 
17
23
  PATH_TYPE = str | Path
@@ -20,24 +26,74 @@ PATH_TYPE = str | Path
20
26
  class SysUtil:
21
27
 
22
28
  @staticmethod
29
+ def id(
30
+ config: LionIDConfig = DEFAULT_LION_ID_CONFIG,
31
+ n: int = None,
32
+ prefix: str = None,
33
+ postfix: str = None,
34
+ random_hyphen: bool = None,
35
+ num_hyphens: int = None,
36
+ hyphen_start_index: int = None,
37
+ hyphen_end_index: int = None,
38
+ ) -> str:
39
+ return _u.id(
40
+ config=config,
41
+ n=n,
42
+ prefix=prefix,
43
+ postfix=postfix,
44
+ random_hyphen=random_hyphen,
45
+ num_hyphens=num_hyphens,
46
+ hyphen_start_index=hyphen_start_index,
47
+ hyphen_end_index=hyphen_end_index,
48
+ )
49
+
50
+ @staticmethod
51
+ def get_id(
52
+ item: Sequence[Observable] | Observable | str,
53
+ config: LionIDConfig = DEFAULT_LION_ID_CONFIG,
54
+ /,
55
+ ) -> str:
56
+ return _u.get_id(item, config)
57
+
58
+ @staticmethod
59
+ def is_id(
60
+ item: Sequence[Observable] | Observable | str,
61
+ config: LionIDConfig = DEFAULT_LION_ID_CONFIG,
62
+ /,
63
+ ) -> bool:
64
+ return _u.is_id(item, config)
65
+
66
+ # legacy methods, kept for backward compatibility
67
+
68
+ @staticmethod
69
+ @deprecated(
70
+ "Deprecated since v0.3, will be removed in v1.0. Use time.sleep instead.",
71
+ category=DeprecationWarning,
72
+ stacklevel=2,
73
+ )
23
74
  def sleep(delay: float) -> None:
24
75
  """
25
76
  Pauses execution for a specified duration.
26
77
 
27
78
  Args:
28
- delay (float): The amount of time, in seconds, to pause execution.
79
+ delay (float): The amount of time, in seconds, to pause execution.
29
80
  """
30
81
  time.sleep(delay)
31
82
 
32
83
  @staticmethod
84
+ @deprecated(
85
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.time instead",
86
+ category=DeprecationWarning,
87
+ stacklevel=2,
88
+ )
33
89
  def get_now(datetime_: bool = False, tz=None) -> float | datetime:
34
90
  """Returns the current time either as a Unix timestamp or a datetime object.
35
91
 
36
92
  Args:
37
- datetime_ (bool): If True, returns a datetime object; otherwise, returns a Unix timestamp.
93
+ datetime_ (bool): If True, returns a datetime object; otherwise, returns a Unix timestamp.
38
94
 
39
95
  Returns:
40
- Union[float, datetime.datetime]: The current time as a Unix timestamp or a datetime object.
96
+ Union[float, datetime.datetime]: The current time as a Unix timestamp or a datetime object.
41
97
  """
42
98
 
43
99
  if not datetime_:
@@ -48,6 +104,11 @@ class SysUtil:
48
104
  return datetime.now(**config_)
49
105
 
50
106
  @staticmethod
107
+ @deprecated(
108
+ "Deprecated since v0.3, will be removed in v1.0. Use d_[k2] = d_.pop(k1) instead",
109
+ category=DeprecationWarning,
110
+ stacklevel=2,
111
+ )
51
112
  def change_dict_key(
52
113
  dict_: dict[Any, Any], old_key: str, new_key: str
53
114
  ) -> None:
@@ -65,15 +126,20 @@ class SysUtil:
65
126
  dict_[new_key] = dict_.pop(old_key)
66
127
 
67
128
  @staticmethod
129
+ @deprecated(
130
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.time instead",
131
+ category=DeprecationWarning,
132
+ stacklevel=2,
133
+ )
68
134
  def get_timestamp(tz: timezone = timezone.utc, sep: str = "_") -> str:
69
135
  """Returns a timestamp string with optional custom separators and timezone.
70
136
 
71
137
  Args:
72
- tz (timezone): The timezone for the timestamp.
73
- sep (str): The separator to use in the timestamp string, replacing '-', ':', and '.'.
138
+ tz (timezone): The timezone for the timestamp.
139
+ sep (str): The separator to use in the timestamp string, replacing '-', ':', and '.'.
74
140
 
75
141
  Returns:
76
- str: A string representation of the current timestamp.
142
+ str: A string representation of the current timestamp.
77
143
  """
78
144
  str_ = datetime.now(tz=tz).isoformat()
79
145
  if sep is not None:
@@ -82,6 +148,11 @@ class SysUtil:
82
148
  return str_
83
149
 
84
150
  @staticmethod
151
+ @deprecated(
152
+ "Deprecated since v0.3, will be removed in v1.0. Deprecated without replacement",
153
+ category=DeprecationWarning,
154
+ stacklevel=2,
155
+ )
85
156
  def is_schema(dict_: dict[Any, Any], schema: dict[Any, type]) -> bool:
86
157
  """Validates if the given dictionary matches the expected schema types."""
87
158
  return all(
@@ -90,6 +161,11 @@ class SysUtil:
90
161
  )
91
162
 
92
163
  @staticmethod
164
+ @deprecated(
165
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.copy instead",
166
+ category=DeprecationWarning,
167
+ stacklevel=2,
168
+ )
93
169
  def create_copy(input_: Any, num: int = 1) -> Any | list[Any]:
94
170
  """Creates deep copies of the input, either as a single copy or a list of copies.
95
171
 
@@ -109,6 +185,11 @@ class SysUtil:
109
185
  )
110
186
 
111
187
  @staticmethod
188
+ @deprecated(
189
+ "Deprecated since v0.3, will be removed in v1.0. Use SysUtil.id instead",
190
+ category=DeprecationWarning,
191
+ stacklevel=2,
192
+ )
112
193
  def create_id(n: int = 32) -> str:
113
194
  """
114
195
  Generates a unique identifier based on the current time and random bytes.
@@ -124,17 +205,22 @@ class SysUtil:
124
205
  return sha256(current_time + random_bytes).hexdigest()[:n]
125
206
 
126
207
  @staticmethod
208
+ @deprecated(
209
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.get_bins instead",
210
+ category=DeprecationWarning,
211
+ stacklevel=2,
212
+ )
127
213
  def get_bins(
128
214
  input_: list[str], upper: int | None = 2000
129
215
  ) -> list[list[int]]:
130
216
  """Organizes indices of strings into bins based on a cumulative upper limit.
131
217
 
132
218
  Args:
133
- input_ (List[str]): The list of strings to be binned.
134
- upper (int): The cumulative length upper limit for each bin.
219
+ input_ (List[str]): The list of strings to be binned.
220
+ upper (int): The cumulative length upper limit for each bin.
135
221
 
136
222
  Returns:
137
- List[List[int]]: A list of bins, each bin is a list of indices from the input list.
223
+ List[List[int]]: A list of bins, each bin is a list of indices from the input list.
138
224
  """
139
225
  current = 0
140
226
  bins = []
@@ -152,13 +238,18 @@ class SysUtil:
152
238
  return bins
153
239
 
154
240
  @staticmethod
241
+ @deprecated(
242
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.get_cpu_architecture instead",
243
+ category=DeprecationWarning,
244
+ stacklevel=2,
245
+ )
155
246
  def get_cpu_architecture() -> str:
156
247
  """Returns a string identifying the CPU architecture.
157
248
 
158
249
  This method categorizes some architectures as 'apple_silicon'.
159
250
 
160
251
  Returns:
161
- str: A string identifying the CPU architecture ('apple_silicon' or 'other_cpu').
252
+ str: A string identifying the CPU architecture ('apple_silicon' or 'other_cpu').
162
253
  """
163
254
  arch: str = platform.machine().lower()
164
255
  return (
@@ -168,6 +259,11 @@ class SysUtil:
168
259
  )
169
260
 
170
261
  @staticmethod
262
+ @deprecated(
263
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.install_import instead",
264
+ category=DeprecationWarning,
265
+ stacklevel=2,
266
+ )
171
267
  def install_import(
172
268
  package_name: str,
173
269
  module_name: str = None,
@@ -180,10 +276,10 @@ class SysUtil:
180
276
  to install the package using pip and then retries the import.
181
277
 
182
278
  Args:
183
- package_name: The base name of the package to import.
184
- module_name: The submodule name to import from the package, if applicable. Defaults to None.
185
- import_name: The specific name to import from the module or package. Defaults to None.
186
- pip_name: The pip package name if different from `package_name`. Defaults to None.
279
+ package_name: The base name of the package to import.
280
+ module_name: The submodule name to import from the package, if applicable. Defaults to None.
281
+ import_name: The specific name to import from the module or package. Defaults to None.
282
+ pip_name: The pip package name if different from `package_name`. Defaults to None.
187
283
 
188
284
  Prints a message indicating success or attempts installation if the import fails.
189
285
  """
@@ -215,23 +311,38 @@ class SysUtil:
215
311
  __import__(full_import_path)
216
312
 
217
313
  @staticmethod
314
+ @deprecated(
315
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.import_module instead",
316
+ category=DeprecationWarning,
317
+ stacklevel=2,
318
+ )
218
319
  def import_module(module_path: str):
219
320
  return importlib.import_module(module_path)
220
321
 
221
322
  @staticmethod
323
+ @deprecated(
324
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.is_package_installed instead",
325
+ category=DeprecationWarning,
326
+ stacklevel=2,
327
+ )
222
328
  def is_package_installed(package_name: str) -> bool:
223
329
  """Checks if a package is currently installed.
224
330
 
225
331
  Args:
226
- package_name: The name of the package to check.
332
+ package_name: The name of the package to check.
227
333
 
228
334
  Returns:
229
- A boolean indicating whether the package is installed.
335
+ A boolean indicating whether the package is installed.
230
336
  """
231
337
  package_spec = importlib.util.find_spec(package_name)
232
338
  return package_spec is not None
233
339
 
234
340
  @staticmethod
341
+ @deprecated(
342
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.check_import instead",
343
+ category=DeprecationWarning,
344
+ stacklevel=2,
345
+ )
235
346
  def check_import(
236
347
  package_name: str,
237
348
  module_name: str | None = None,
@@ -246,12 +357,12 @@ class SysUtil:
246
357
  it attempts to install the package using `install_import` and then retries the import.
247
358
 
248
359
  Args:
249
- package_name: The name of the package to check and potentially install.
250
- module_name: The submodule name to import from the package, if applicable. Defaults to None.
251
- import_name: The specific name to import from the module or package. Defaults to None.
252
- pip_name: The pip package name if different from `package_name`. Defaults to None.
253
- attempt_install: If attempt to install the package if uninstalled. Defaults to True.
254
- error_message: Error message when the package is not installed and not attempt to install.
360
+ package_name: The name of the package to check and potentially install.
361
+ module_name: The submodule name to import from the package, if applicable. Defaults to None.
362
+ import_name: The specific name to import from the module or package. Defaults to None.
363
+ pip_name: The pip package name if different from `package_name`. Defaults to None.
364
+ attempt_install: If attempt to install the package if uninstalled. Defaults to True.
365
+ error_message: Error message when the package is not installed and not attempt to install.
255
366
  """
256
367
  try:
257
368
  if not SysUtil.is_package_installed(package_name):
@@ -277,6 +388,11 @@ class SysUtil:
277
388
  ) from e
278
389
 
279
390
  @staticmethod
391
+ @deprecated(
392
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.list_installed_packages instead",
393
+ category=DeprecationWarning,
394
+ stacklevel=2,
395
+ )
280
396
  def list_installed_packages() -> list:
281
397
  """list all installed packages using importlib.metadata."""
282
398
  return [
@@ -285,6 +401,11 @@ class SysUtil:
285
401
  ]
286
402
 
287
403
  @staticmethod
404
+ @deprecated(
405
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.uninstall_package instead",
406
+ category=DeprecationWarning,
407
+ stacklevel=2,
408
+ )
288
409
  def uninstall_package(package_name: str) -> None:
289
410
  """Uninstall a specified package."""
290
411
  try:
@@ -296,6 +417,11 @@ class SysUtil:
296
417
  print(f"Failed to uninstall {package_name}. Error: {e}")
297
418
 
298
419
  @staticmethod
420
+ @deprecated(
421
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.update_package instead",
422
+ category=DeprecationWarning,
423
+ stacklevel=2,
424
+ )
299
425
  def update_package(package_name: str) -> None:
300
426
  """Update a specified package."""
301
427
  try:
@@ -314,6 +440,11 @@ class SysUtil:
314
440
  print(f"Failed to update {package_name}. Error: {e}")
315
441
 
316
442
  @staticmethod
443
+ @deprecated(
444
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.clear_path instead",
445
+ category=DeprecationWarning,
446
+ stacklevel=2,
447
+ )
317
448
  def clear_dir(
318
449
  dir_path: Path | str,
319
450
  recursive: bool = False,
@@ -324,12 +455,12 @@ class SysUtil:
324
455
  excluding files that match any pattern in the exclude list.
325
456
 
326
457
  Args:
327
- dir_path (Union[Path, str]): The path to the directory to clear.
328
- recursive (bool): If True, clears directories recursively. Defaults to False.
329
- exclude (List[str]): A list of string patterns to exclude from deletion. Defaults to None.
458
+ dir_path (Union[Path, str]): The path to the directory to clear.
459
+ recursive (bool): If True, clears directories recursively. Defaults to False.
460
+ exclude (List[str]): A list of string patterns to exclude from deletion. Defaults to None.
330
461
 
331
462
  Raises:
332
- FileNotFoundError: If the specified directory does not exist.
463
+ FileNotFoundError: If the specified directory does not exist.
333
464
  """
334
465
  dir_path = Path(dir_path)
335
466
  if not dir_path.exists():
@@ -356,6 +487,11 @@ class SysUtil:
356
487
  raise
357
488
 
358
489
  @staticmethod
490
+ @deprecated(
491
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.split_path instead",
492
+ category=DeprecationWarning,
493
+ stacklevel=2,
494
+ )
359
495
  def split_path(path: Path | str) -> tuple[Path, str]:
360
496
  """
361
497
  Splits a path into its directory and filename components.
@@ -370,6 +506,11 @@ class SysUtil:
370
506
  return path.parent, path.name
371
507
 
372
508
  @staticmethod
509
+ @deprecated(
510
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.create_path instead",
511
+ category=DeprecationWarning,
512
+ stacklevel=2,
513
+ )
373
514
  def create_path(
374
515
  directory: Path | str,
375
516
  filename: str,
@@ -383,12 +524,12 @@ class SysUtil:
383
524
  Creates a path with an optional timestamp in the specified directory.
384
525
 
385
526
  Args:
386
- directory (Union[Path, str]): The directory where the file will be located.
387
- filename (str): The filename. Must include a valid extension.
388
- timestamp (bool): If True, adds a timestamp to the filename. Defaults to True.
389
- dir_exist_ok (bool): If True, does not raise an error if the directory exists. Defaults to True.
390
- time_prefix (bool): If True, adds the timestamp as a prefix; otherwise, as a suffix. Defaults to False.
391
- custom_timestamp_format (str): A custom format for the timestamp. Defaults to "%Y%m%d%H%M%S".
527
+ directory (Union[Path, str]): The directory where the file will be located.
528
+ filename (str): The filename. Must include a valid extension.
529
+ timestamp (bool): If True, adds a timestamp to the filename. Defaults to True.
530
+ dir_exist_ok (bool): If True, does not raise an error if the directory exists. Defaults to True.
531
+ time_prefix (bool): If True, adds the timestamp as a prefix; otherwise, as a suffix. Defaults to False.
532
+ custom_timestamp_format (str): A custom format for the timestamp. Defaults to "%Y%m%d%H%M%S".
392
533
 
393
534
  Returns:
394
535
  Path: The full path to the file.
@@ -432,6 +573,11 @@ class SysUtil:
432
573
  return full_path
433
574
 
434
575
  @staticmethod
576
+ @deprecated(
577
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.list_files instead",
578
+ category=DeprecationWarning,
579
+ stacklevel=2,
580
+ )
435
581
  def list_files(dir_path: Path | str, extension: str = None) -> list[Path]:
436
582
  """
437
583
  Lists all files in a specified directory with an optional filter for file extensions.
@@ -455,6 +601,11 @@ class SysUtil:
455
601
  return list(dir_path.glob("*"))
456
602
 
457
603
  @staticmethod
604
+ @deprecated(
605
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.copy_file instead",
606
+ category=DeprecationWarning,
607
+ stacklevel=2,
608
+ )
458
609
  def copy_file(src: Path | str, dest: Path | str) -> None:
459
610
  """
460
611
  Copies a file from a source path to a destination path.
@@ -475,6 +626,11 @@ class SysUtil:
475
626
  copy2(src, dest)
476
627
 
477
628
  @staticmethod
629
+ @deprecated(
630
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.get_file_size instead",
631
+ category=DeprecationWarning,
632
+ stacklevel=2,
633
+ )
478
634
  def get_size(path: Path | str) -> int:
479
635
  """
480
636
  Gets the size of a file or total size of files in a directory.
@@ -499,6 +655,11 @@ class SysUtil:
499
655
  raise FileNotFoundError(f"{path} does not exist.")
500
656
 
501
657
  @staticmethod
658
+ @deprecated(
659
+ "Deprecated since v0.3, will be removed in v1.0. Use lionfuncs.save_to_file instead",
660
+ category=DeprecationWarning,
661
+ stacklevel=2,
662
+ )
502
663
  def save_to_file(
503
664
  text,
504
665
  directory: Path | str,
@@ -544,3 +705,6 @@ class SysUtil:
544
705
  print(f"Text saved to: {file_path}")
545
706
 
546
707
  return True
708
+
709
+
710
+ __all__ = ["SysUtil"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
lionagi/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.3.6"
1
+ __version__ = "0.3.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lionagi
3
- Version: 0.3.6
3
+ Version: 0.3.7
4
4
  Summary: Towards automated general intelligence.
5
5
  Author: HaiyangLi
6
6
  Author-email: quantocean.li@gmail.com
@@ -13,6 +13,7 @@ Requires-Dist: aiocache (>=0.12.0,<0.13.0)
13
13
  Requires-Dist: ipython (>=8.0.0,<9.0.0)
14
14
  Requires-Dist: lion-core (>=0.4.0,<0.5.0)
15
15
  Requires-Dist: lion-openai (>=0.1.5,<0.2.0)
16
+ Requires-Dist: lionfuncs (>=1.2.1,<2.0.0)
16
17
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
17
18
  Description-Content-Type: text/markdown
18
19
 
@@ -26,15 +26,15 @@ lionagi/core/collections/__init__.py,sha256=RgnaBHgeUlPQyPfraE2MI86wAZpHAtmfgU0h
26
26
  lionagi/core/collections/_logger.py,sha256=zAGvx5SWWkeI2_n8Jh69ToYvyn5LLlww91SRKcrxLDU,11696
27
27
  lionagi/core/collections/abc/README.md,sha256=N3s0qQglL2PkriZ0hWDTh0ytJjubqkXVyUB0x9kpi6U,5524
28
28
  lionagi/core/collections/abc/__init__.py,sha256=cCPlUaXtXXPdQamXWQAf8MHKck7sa1asu6TDLX1W6S0,984
29
- lionagi/core/collections/abc/component.py,sha256=4Z588KENh0yULM4sFfvpvfeEi13yApOxQ7OpCI_itUQ,21575
30
- lionagi/core/collections/abc/concepts.py,sha256=4IM2uQGhMjBzfa1wjNX4ZMbcxCqtjQTFXFJBye47IQg,8043
29
+ lionagi/core/collections/abc/component.py,sha256=R3lU2I9cefeKNQ-2EmUq487MRYdBHR50g5iZ9BmudKU,21280
30
+ lionagi/core/collections/abc/concepts.py,sha256=iYaI97A9qWrH_aPt_Fx60qgMfoGKqhzD0-efgH8lSj0,7799
31
31
  lionagi/core/collections/abc/exceptions.py,sha256=raqjWSHGYhm-tUAmn1QK_NlkM3MQfjc1cOD_kobUdyc,4065
32
32
  lionagi/core/collections/abc/util.py,sha256=CjJs-PgK0t4MAG1AJUdgrxQg7v2Ou-ixv-gWjatu7d4,779
33
33
  lionagi/core/collections/exchange.py,sha256=7h9kI7gNRyCYFZUd-686ClPZXFZLtrEn7pVHjk4ol60,4274
34
- lionagi/core/collections/flow.py,sha256=oo4PjNpMhRgYeKfJ6aorxp7CjKk7iIizVC9WuwYrPcQ,12751
35
- lionagi/core/collections/model.py,sha256=uZhTBuKFa7OzxtFwO7sVV8RPmdydgWasso1g5os0dGg,15848
36
- lionagi/core/collections/pile.py,sha256=X4j_Zbt2TCQTWPGYkOgfFBzIepcqFeoultFh6KnS6QU,37943
37
- lionagi/core/collections/progression.py,sha256=YIN-qVNZPMHN3f3UflUgH1jzdkQPwdnBZSOVvZZ7OeQ,6704
34
+ lionagi/core/collections/flow.py,sha256=yaCdLhilcBrPdsZ46RcApgi8p-7O0D97OYnNVkEZja4,12726
35
+ lionagi/core/collections/model.py,sha256=dU6NOmy3c2aX9XqM5Y2CMx9_wuRCDtFAJyu5njBEysM,15848
36
+ lionagi/core/collections/pile.py,sha256=Zjzjo1eb0V7_9ONDpZgT65jLaAM04_zWK01zNS3OI_M,37937
37
+ lionagi/core/collections/progression.py,sha256=oFXvsGe84ZcHvacGc1MDGn4bE4h5wRUq8h9wcBXr8Ok,6657
38
38
  lionagi/core/collections/util.py,sha256=AWfwuIIwbakpF0_swWUVSGTeN26XWL6UlmgW5mh4qDA,2005
39
39
  lionagi/core/director/README.md,sha256=HoIDnEmWmWXVeDfUvkyf4nXQOYqzy2jhToZcJz0zmUw,55
40
40
  lionagi/core/director/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -65,6 +65,7 @@ lionagi/core/generic/edge_condition.py,sha256=ZvQMYDl4WFXrwkvjQajVFluF5FNosw_OLe
65
65
  lionagi/core/generic/graph.py,sha256=kOq2DvZaAFmgHIZUlFlxUgSh4rzqQP6fMmQtrWhTjfM,7838
66
66
  lionagi/core/generic/hyperedge.py,sha256=DkeLUlrb7rGx3nZ04aADU9HXXu5mZTf_DBwT0xhzIv4,7
67
67
  lionagi/core/generic/node.py,sha256=vf26Q8-V3wh5qr8TdFGena_SCkp_39eCO6n23TjbuMo,7156
68
+ lionagi/core/generic/registry/component_registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
69
  lionagi/core/generic/tree.py,sha256=YVlJT1_gN96utEUB1Uc4pmHEeFVyJrtSF6cqIBWZDJI,1541
69
70
  lionagi/core/generic/tree_node.py,sha256=vHOELePsn-Vqlpi7V4-UteGR-Vht4FddJL6UmNVbab8,2475
70
71
  lionagi/core/mail/__init__.py,sha256=_-C11e519cBCuEuYhCgsQnzph2vDpUaLEfsKNwz33AQ,202
@@ -80,6 +81,10 @@ lionagi/core/message/instruction.py,sha256=I_ZqMx3IjIwGlAx3bdlBuyVycTZ9yO1i-kEP5
80
81
  lionagi/core/message/message.py,sha256=Etl4a3mUrXLsym7i6ILqTV_Xun0xZw0UCoBMl1OtsNE,2403
81
82
  lionagi/core/message/system.py,sha256=48mvib50mno9F-8fkLa8SzPxz3G1KlRgz3GkIluMFUQ,2318
82
83
  lionagi/core/message/util.py,sha256=7CFw90QA3CdnV43aQ3PU6p1fhtaTixnlj_SBkLyQmpM,9313
84
+ lionagi/core/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
+ lionagi/core/operations/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
+ lionagi/core/operations/direct/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ lionagi/core/operative/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
88
  lionagi/core/report/__init__.py,sha256=KqfJNaSx9fzRw3eyrlIlYIiueo-jVYMgjaOdfzTUAN4,80
84
89
  lionagi/core/report/base.py,sha256=_PRSd92JttwEKnW_UX7SszpV29bLg6wPwJ_Lav-Z-9k,7173
85
90
  lionagi/core/report/form.py,sha256=IPZk5D5Ai-GV6DrvrZBoEkwIFT7_vwv8h3qME8Tph-M,7040
@@ -116,7 +121,7 @@ lionagi/core/unit/template/score.py,sha256=ReUaIIr-NLjunSy4NNXQpIsH28NNceGBAUuPC
116
121
  lionagi/core/unit/template/select.py,sha256=VSpkphJl9bHSE8i0X6MMJD8LB5QwOj1UORHm8VDIRKE,3047
117
122
  lionagi/core/unit/unit.py,sha256=a3rauBXe50SBUgndv7Q9bqF4h7pJCYdsoTfPf1e8GCs,15548
118
123
  lionagi/core/unit/unit_form.py,sha256=zK_ij3Tod5FwMVdIIhdVoEFvD3br-YM9RPe7WsOIW2s,10980
119
- lionagi/core/unit/unit_mixin.py,sha256=c8GvHzgc65iJKQBKv71ET3afLPsIz5-Ce-4Eo6_bZiw,38823
124
+ lionagi/core/unit/unit_mixin.py,sha256=gLyqtyiwWIyfibhNUJzMpAGfcMmLdo86xjbGZFyGILA,38803
120
125
  lionagi/core/unit/util.py,sha256=WN2Jop-LUwQNYJNubFPhOZrisQ6SQq-XMhD_KhzLkgE,2707
121
126
  lionagi/core/validator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
127
  lionagi/core/validator/validator.py,sha256=901wwmqL92XNi25ajv57bNKIKZhmu-KprNLArMUiGqg,12255
@@ -180,6 +185,8 @@ lionagi/integrations/config/mlx_configs.py,sha256=xbostqjnk3aAN-qKyC54YBprHPA38C
180
185
  lionagi/integrations/config/oai_configs.py,sha256=fgby-3o_tO24QhSiPyko-oeAMEa0cWCThh6L6ChiXoo,3625
181
186
  lionagi/integrations/config/ollama_configs.py,sha256=GUn0kagrQA3gpIiaxYyfdi2LAf_Ohz1sVrsAb20OBwo,17
182
187
  lionagi/integrations/config/openrouter_configs.py,sha256=x5LjLx-aqCLzzrqr15gVzuTTG4Y_BVS6tRrKout5vPQ,1690
188
+ lionagi/integrations/langchain_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
+ lionagi/integrations/llamaindex_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
190
  lionagi/integrations/loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
191
  lionagi/integrations/loader/load.py,sha256=KhsbLPwqNK1wRDKSoZPd5yeyMGAPc9Xt_ISR8PK6PCk,8651
185
192
  lionagi/integrations/loader/load_util.py,sha256=65qP5kytBJFTaSg7lNCO7rfw6GpPQuvZxoqJ7s83A48,6616
@@ -214,7 +221,7 @@ lionagi/libs/ln_queue.py,sha256=kJ-81XNnu2gcHyQ9XL62kCnAzk_0tmRmvhAaj30wIjM,3498
214
221
  lionagi/libs/ln_tokenize.py,sha256=SP3mGljwaaxqH0ced54v4lFs8LXU-oIpb33mdrzRSEA,5400
215
222
  lionagi/libs/ln_validate.py,sha256=huTnLNaAITni49PK_uI2CXvnFETt87j8-4lF8e5yy0o,8469
216
223
  lionagi/libs/special_tokens.py,sha256=ViFaql64LgEGHSXzODzaVMh4GfteN8D2ogmqWYTYwiQ,2411
217
- lionagi/libs/sys_util.py,sha256=iwzbvt_lGCeRdD1JdPNKE3E3bsrO45JWbWQ-OEQ7fTc,19675
224
+ lionagi/libs/sys_util.py,sha256=Xin0U3-oBUJZJUhdHRjDyyNVJS-resfGFooDUTAtH0M,24919
218
225
  lionagi/lions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
219
226
  lionagi/lions/coder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
227
  lionagi/lions/coder/add_feature.py,sha256=mLMfz9V9yYbdH6DJs39FOz9IHdhdyPZajocQtQhjgcA,703
@@ -222,6 +229,7 @@ lionagi/lions/coder/base_prompts.py,sha256=SLpC442nZm2cEkB8o9j28kpkB-WzKLjH6sOTS
222
229
  lionagi/lions/coder/code_form.py,sha256=xW66cWCsrZu2qGu-wGUGSIPL1uZevGQVCE_vBRH9Kmc,384
223
230
  lionagi/lions/coder/coder.py,sha256=u-n_7PVdKCAz28SAA2bO4oy1qxGIzEl1PX6iqz7oSoI,5829
224
231
  lionagi/lions/coder/util.py,sha256=m9H18JrePpuP1VyjxVXQaLXCGBed04jZIkfNXvF7_gU,2751
232
+ lionagi/lions/director/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
233
  lionagi/lions/judge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
234
  lionagi/lions/judge/config.py,sha256=hJNMI-07zf5cqU2tr22fzkGvhR7RdtckkYg8UhLTKec,185
227
235
  lionagi/lions/judge/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -238,8 +246,21 @@ lionagi/lions/researcher/data_source/finhub_.py,sha256=W63daXgIwHJQ6TDMR2ALQIDk1
238
246
  lionagi/lions/researcher/data_source/google_.py,sha256=401SKHQaSpxiOUoXl7stadl4qeF7SIX72lUNK7bKesg,6797
239
247
  lionagi/lions/researcher/data_source/wiki_.py,sha256=UPoa2dk_y5sELu7_rkdme2auDpUmc_Dn0Avgjwr2X2g,3145
240
248
  lionagi/lions/researcher/data_source/yfinance_.py,sha256=snAf897J69MyAc6fcFjF0irrMjbAh81EZ3RvaFT3hxE,977
241
- lionagi/version.py,sha256=W_9dCm49nLvZulVAvvsafxLJjVBSKDBHz9K7szFZllo,22
242
- lionagi-0.3.6.dist-info/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
243
- lionagi-0.3.6.dist-info/METADATA,sha256=YBvJNxfI2QZFGB4DW2WcHwG-WpcVaGSFUgq54xY0-KI,3148
244
- lionagi-0.3.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
245
- lionagi-0.3.6.dist-info/RECORD,,
249
+ lionagi/operations/brainstorm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
+ lionagi/operations/brainstorm.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
251
+ lionagi/operations/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
252
+ lionagi/operations/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
253
+ lionagi/operations/plan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
+ lionagi/operations/plan/base.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
+ lionagi/operations/query/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
+ lionagi/operations/rank/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
257
+ lionagi/operations/react/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
+ lionagi/operations/route/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
259
+ lionagi/operations/score/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
260
+ lionagi/operations/select/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
261
+ lionagi/operations/strategize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
262
+ lionagi/version.py,sha256=J0I0c7-a50EOnWXMryTu_E6xhXSYFBPjVpeYP_a3vRI,22
263
+ lionagi-0.3.7.dist-info/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
264
+ lionagi-0.3.7.dist-info/METADATA,sha256=6F2nnUX1ORQQo6giNHPHh3iuZb8AZxNs5Nw-XsqqutQ,3190
265
+ lionagi-0.3.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
266
+ lionagi-0.3.7.dist-info/RECORD,,