lionagi 0.15.0__py3-none-any.whl → 0.15.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
lionagi/ln/_async_call.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
+ from collections.abc import AsyncGenerator, Callable
2
3
  from dataclasses import dataclass
3
- from typing import Any, AsyncGenerator, Callable, ClassVar
4
+ from typing import Any, ClassVar
4
5
 
5
6
  import anyio
6
7
  from pydantic import BaseModel
lionagi/ln/_list_call.py CHANGED
@@ -1,5 +1,6 @@
1
+ from collections.abc import Callable, Iterable
1
2
  from dataclasses import dataclass
2
- from typing import Any, Callable, ClassVar, Iterable, TypeVar
3
+ from typing import Any, ClassVar, TypeVar
3
4
 
4
5
  from ._models import Params
5
6
  from ._to_list import to_list
lionagi/ln/_to_list.py CHANGED
@@ -1,6 +1,7 @@
1
+ from collections.abc import Iterable, Mapping
1
2
  from dataclasses import dataclass
2
3
  from enum import Enum as _Enum
3
- from typing import Any, ClassVar, Iterable, Mapping
4
+ from typing import Any, ClassVar
4
5
 
5
6
  from pydantic import BaseModel
6
7
  from pydantic_core import PydanticUndefinedType
lionagi/ln/_types.py CHANGED
@@ -31,7 +31,7 @@ class _SingletonMeta(type):
31
31
  allowing safe identity checks with 'is' operator.
32
32
  """
33
33
 
34
- _cache: dict[type, "SingletonType"] = {}
34
+ _cache: dict[type, SingletonType] = {}
35
35
 
36
36
  def __call__(cls, *a, **kw):
37
37
  if cls not in cls._cache:
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
+ from collections.abc import Callable
2
3
  from functools import lru_cache
3
- from typing import Any, Callable
4
+ from typing import Any
4
5
 
5
6
  __all__ = ("is_coro_func",)
6
7
 
@@ -1,6 +1,7 @@
1
1
  from collections.abc import Callable
2
2
 
3
3
  from lionagi.protocols._concepts import Manager
4
+ from lionagi.utils import is_coro_func
4
5
 
5
6
  """
6
7
  experimental
@@ -8,14 +9,15 @@ experimental
8
9
 
9
10
 
10
11
  class OperationManager(Manager):
11
- def __init__(self, *args, **kwargs):
12
+ def __init__(self):
12
13
  super().__init__()
13
14
  self.registry: dict[str, Callable] = {}
14
- self.register_operations(*args, **kwargs)
15
15
 
16
- def register_operations(self, *args, **kwargs) -> None:
17
- operations = {}
18
- if args:
19
- operations = {i.__name__ for i in args if hasattr(i, "__name__")}
20
- operations.update(kwargs)
21
- self.registry.update(operations)
16
+ def register(self, operation: str, func: Callable, update: bool = False):
17
+ if operation in self.registry and not update:
18
+ raise ValueError(f"Operation '{operation}' is already registered.")
19
+ if not is_coro_func(func):
20
+ raise ValueError(
21
+ f"Operation '{operation}' must be an async function."
22
+ )
23
+ self.registry[operation] = func
@@ -26,7 +26,7 @@ logger = logging.getLogger("operation")
26
26
 
27
27
 
28
28
  class Operation(Node, Event):
29
- operation: BranchOperations
29
+ operation: BranchOperations | str
30
30
  parameters: dict[str, Any] | BaseModel = Field(
31
31
  default_factory=dict,
32
32
  description="Parameters for the operation",
@@ -74,12 +74,11 @@ class Operation(Node, Event):
74
74
  return self.execution.response if self.execution else None
75
75
 
76
76
  async def invoke(self, branch: Branch):
77
- meth = getattr(branch, self.operation, None)
77
+ meth = branch.get_operation(self.operation)
78
78
  if meth is None:
79
79
  raise ValueError(f"Unsupported operation type: {self.operation}")
80
80
 
81
81
  start = asyncio.get_event_loop().time()
82
-
83
82
  try:
84
83
  self.execution.status = EventStatus.PROCESSING
85
84
  self.branch_id = branch.id
@@ -2,11 +2,16 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
+ import contextlib
6
+ import json
5
7
  from enum import Enum
6
8
  from typing import Any
7
9
 
8
10
  from pydantic import Field, field_serializer
9
11
 
12
+ from lionagi.ln import Unset
13
+ from lionagi.utils import to_dict
14
+
10
15
  from .element import Element
11
16
 
12
17
  __all__ = (
@@ -16,6 +21,9 @@ __all__ = (
16
21
  )
17
22
 
18
23
 
24
+ _SIMPLE_TYPE = (str, bytes, bytearray, int, float, type(None), Enum)
25
+
26
+
19
27
  class EventStatus(str, Enum):
20
28
  """Status states for tracking action execution progress.
21
29
 
@@ -79,6 +87,44 @@ class Execution:
79
87
  f"response={self.response}, error={self.error})"
80
88
  )
81
89
 
90
+ def to_dict(self) -> dict:
91
+ """Converts the execution state to a dictionary.
92
+
93
+ Returns:
94
+ dict: A dictionary representation of the execution state.
95
+ """
96
+ res_ = Unset
97
+ json_serializable = True
98
+
99
+ if not isinstance(self.response, _SIMPLE_TYPE):
100
+ json_serializable = False
101
+ try:
102
+ # check whether response is JSON serializable
103
+ json.dumps(self.response)
104
+ res_ = self.response
105
+ json_serializable = True
106
+ except Exception:
107
+ with contextlib.suppress(Exception):
108
+ # attempt to convert to dict
109
+ d_ = to_dict(
110
+ self.response,
111
+ recursive=True,
112
+ recursive_python_only=False,
113
+ )
114
+ json.dumps(d_)
115
+ res_ = d_
116
+ json_serializable = True
117
+
118
+ if res_ is Unset and not json_serializable:
119
+ res_ = "<unserializable>"
120
+
121
+ return {
122
+ "status": self.status.value,
123
+ "duration": self.duration,
124
+ "response": res_ or self.response,
125
+ "error": self.error,
126
+ }
127
+
82
128
 
83
129
  class Event(Element):
84
130
  """Extends Element with an execution state.
@@ -101,12 +147,7 @@ class Event(Element):
101
147
  dict: The serialized data containing status, duration, response,
102
148
  and error fields.
103
149
  """
104
- return {
105
- "status": val.status.value,
106
- "duration": val.duration,
107
- "response": val.response,
108
- "error": val.error,
109
- }
150
+ return val.to_dict()
110
151
 
111
152
  @property
112
153
  def response(self) -> Any:
lionagi/session/branch.py CHANGED
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
- from collections.abc import AsyncGenerator
5
+ from collections.abc import AsyncGenerator, Callable
6
6
  from enum import Enum
7
7
  from typing import Any, Literal
8
8
 
@@ -14,6 +14,7 @@ from lionagi.config import settings
14
14
  from lionagi.fields import Instruct
15
15
  from lionagi.libs.schema.as_readable import as_readable
16
16
  from lionagi.models.field_model import FieldModel
17
+ from lionagi.operations.manager import OperationManager
17
18
  from lionagi.protocols.action.tool import FuncTool, Tool, ToolRef
18
19
  from lionagi.protocols.types import (
19
20
  ID,
@@ -49,7 +50,7 @@ from lionagi.settings import Settings
49
50
  from lionagi.tools.base import LionTool
50
51
  from lionagi.utils import UNDEFINED
51
52
  from lionagi.utils import alcall as alcall_legacy
52
- from lionagi.utils import copy
53
+ from lionagi.utils import copy, is_coro_func
53
54
 
54
55
  from .prompts import LION_SYSTEM_MESSAGE
55
56
 
@@ -111,6 +112,7 @@ class Branch(Element, Communicatable, Relational):
111
112
  _action_manager: ActionManager | None = PrivateAttr(None)
112
113
  _imodel_manager: iModelManager | None = PrivateAttr(None)
113
114
  _log_manager: LogManager | None = PrivateAttr(None)
115
+ _operation_manager: OperationManager | None = PrivateAttr(None)
114
116
 
115
117
  def __init__(
116
118
  self,
@@ -231,6 +233,8 @@ class Branch(Element, Communicatable, Relational):
231
233
  else:
232
234
  self._log_manager = LogManager(**Settings.Config.LOG, logs=logs)
233
235
 
236
+ self._operation_manager = OperationManager()
237
+
234
238
  # -------------------------------------------------------------------------
235
239
  # Properties to expose managers and core data
236
240
  # -------------------------------------------------------------------------
@@ -304,6 +308,11 @@ class Branch(Element, Communicatable, Relational):
304
308
  """
305
309
  return self._action_manager.registry
306
310
 
311
+ def get_operation(self, operation: str) -> Callable | None:
312
+ if hasattr(self, operation):
313
+ return getattr(self, operation)
314
+ return self._operation_manager.registry.get(operation)
315
+
307
316
  # -------------------------------------------------------------------------
308
317
  # Cloning
309
318
  # -------------------------------------------------------------------------
@@ -7,7 +7,7 @@ from collections.abc import Callable
7
7
  from typing import Any
8
8
 
9
9
  import pandas as pd
10
- from pydantic import Field, JsonValue, model_validator
10
+ from pydantic import Field, JsonValue, PrivateAttr, model_validator
11
11
  from typing_extensions import Self
12
12
 
13
13
  from lionagi.protocols.types import (
@@ -31,9 +31,9 @@ from lionagi.protocols.types import (
31
31
  )
32
32
 
33
33
  from .._errors import ItemNotFoundError
34
+ from ..ln import lcall
34
35
  from ..service.imodel import iModel
35
- from ..utils import lcall
36
- from .branch import Branch
36
+ from .branch import Branch, OperationManager
37
37
 
38
38
 
39
39
  class Session(Node, Communicatable, Relational):
@@ -56,6 +56,60 @@ class Session(Node, Communicatable, Relational):
56
56
  default_factory=MailManager, exclude=True
57
57
  )
58
58
  name: str = Field(default="Session")
59
+ user: SenderRecipient | None = None
60
+ _operation_manager: OperationManager = PrivateAttr(
61
+ default_factory=OperationManager
62
+ )
63
+
64
+ async def ainclude_branches(self, branches: ID[Branch].ItemSeq):
65
+ async with self.branches:
66
+ self.include_branches(branches)
67
+
68
+ def include_branches(self, branches: ID[Branch].ItemSeq):
69
+ def _take_in_branch(branch: Branch):
70
+ if not branch in self.branches:
71
+ self.branches.include(branch)
72
+ self.mail_manager.add_sources(branch)
73
+
74
+ branch.user = self.id
75
+ branch._operation_manager = self._operation_manager
76
+ if self.default_branch is None:
77
+ self.default_branch = branch
78
+
79
+ branches = [branches] if isinstance(branches, Branch) else branches
80
+
81
+ for i in branches:
82
+ _take_in_branch(i)
83
+
84
+ def register_operation(
85
+ self, operation: str, func: Callable, *, update: bool = False
86
+ ):
87
+ self._operation_manager.register(operation, func, update=update)
88
+
89
+ def operation(self, name: str = None, *, update: bool = False):
90
+ """
91
+ Decorator to automatically register functions as operations.
92
+
93
+ Args:
94
+ name: Operation name. If None, uses the function's __name__.
95
+ update: Whether to update if operation already exists.
96
+
97
+ Usage:
98
+ @session.operation()
99
+ async def read_issue():
100
+ ...
101
+
102
+ @session.operation("custom_name")
103
+ async def some_function():
104
+ ...
105
+ """
106
+
107
+ def decorator(func: Callable) -> Callable:
108
+ operation_name = name if name is not None else func.__name__
109
+ self.register_operation(operation_name, func, update=update)
110
+ return func
111
+
112
+ return decorator
59
113
 
60
114
  @model_validator(mode="after")
61
115
  def _add_mail_sources(self) -> Self:
@@ -64,7 +118,7 @@ class Session(Node, Communicatable, Relational):
64
118
  if self.default_branch not in self.branches:
65
119
  self.branches.include(self.default_branch)
66
120
  if self.branches:
67
- self.mail_manager.add_sources(self.branches)
121
+ self.include_branches(self.branches)
68
122
  return self
69
123
 
70
124
  def _lookup_branch_by_name(self, name: str) -> Branch | None:
@@ -102,7 +156,8 @@ class Session(Node, Communicatable, Relational):
102
156
  progress: Progression = None,
103
157
  tool_manager: ActionManager = None,
104
158
  tools: Tool | Callable | list = None,
105
- **kwargs, # additional branch parameters
159
+ as_default_branch: bool = False,
160
+ **kwargs,
106
161
  ) -> Branch:
107
162
  kwargs["system"] = system
108
163
  kwargs["system_sender"] = system_sender
@@ -116,13 +171,9 @@ class Session(Node, Communicatable, Relational):
116
171
  kwargs["tools"] = tools
117
172
  kwargs = {k: v for k, v in kwargs.items() if v is not None}
118
173
 
119
- from .branch import Branch
120
-
121
174
  branch = Branch(**kwargs) # type: ignore
122
-
123
- self.branches.include(branch)
124
- self.mail_manager.add_sources(branch)
125
- if self.default_branch is None:
175
+ self.include_branches(branch)
176
+ if as_default_branch:
126
177
  self.default_branch = branch
127
178
  return branch
128
179
 
@@ -179,7 +230,7 @@ class Session(Node, Communicatable, Relational):
179
230
  """
180
231
  branch: Branch = self.branches[branch]
181
232
  branch_clone = branch.clone(sender=self.id)
182
- self.branches.append(branch_clone)
233
+ self.include_branches(branch_clone)
183
234
  return branch_clone
184
235
 
185
236
  def change_default_branch(self, branch: ID.Ref):
@@ -230,10 +281,11 @@ class Session(Node, Communicatable, Relational):
230
281
  lambda x: [
231
282
  i for i in self.branches[x].messages if i not in exclude_flag
232
283
  ],
233
- sanitize_input=True,
234
- flatten=True,
235
- unique_input=True,
236
- unique_output=True,
284
+ input_unique=True,
285
+ input_flatten=True,
286
+ input_dropna=True,
287
+ output_flatten=True,
288
+ output_unique=True,
237
289
  )
238
290
  return Pile(
239
291
  collections=messages, item_type={RoledMessage}, strict_type=False
@@ -269,14 +321,15 @@ class Session(Node, Communicatable, Relational):
269
321
  lcall(
270
322
  to_,
271
323
  lambda x: self.mail_manager.send(ID.get_id(x)),
272
- sanitize_input=True,
273
- unique_input=True,
274
- use_input_values=True,
324
+ input_unique=True,
325
+ input_flatten=True,
326
+ input_dropna=True,
327
+ input_use_values=True,
275
328
  )
276
329
  except Exception as e:
277
330
  raise ValueError(f"Failed to send mail. Error: {e}")
278
331
 
279
- async def acollect_send_all(self, receive_all: bool = False):
332
+ async def acollect_send_all(self, receive_all: bool = True):
280
333
  """
281
334
  Collect and send mail for all branches, optionally receiving all mail.
282
335
 
@@ -286,7 +339,7 @@ class Session(Node, Communicatable, Relational):
286
339
  async with self.mail_manager.sources:
287
340
  self.collect_send_all(receive_all)
288
341
 
289
- def collect_send_all(self, receive_all: bool = False):
342
+ def collect_send_all(self, receive_all: bool = True):
290
343
  """
291
344
  Collect and send mail for all branches, optionally receiving all mail.
292
345
 
@@ -296,7 +349,8 @@ class Session(Node, Communicatable, Relational):
296
349
  self.collect()
297
350
  self.send()
298
351
  if receive_all:
299
- lcall(self.branches, lambda x: x.receive_all())
352
+ for i in self.branches:
353
+ i.receive_all()
300
354
 
301
355
  def collect(self, from_: ID.RefSeq = None):
302
356
  """
@@ -316,9 +370,10 @@ class Session(Node, Communicatable, Relational):
316
370
  lcall(
317
371
  from_,
318
372
  lambda x: self.mail_manager.collect(ID.get_id(x)),
319
- sanitize_input=True,
320
- unique_input=True,
321
- use_input_values=True,
373
+ input_flatten=True,
374
+ input_dropna=True,
375
+ input_unique=True,
376
+ input_use_values=True,
322
377
  )
323
378
  except Exception as e:
324
379
  raise ValueError(f"Failed to collect mail. Error: {e}")
lionagi/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.15.0"
1
+ __version__ = "0.15.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.15.0
3
+ Version: 0.15.2
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -497,7 +497,7 @@ We welcome issues, ideas, and pull requests:
497
497
 
498
498
  ```
499
499
  @software{Li_LionAGI_2023,
500
- author = {Haiyang Li, Liangbingyan Luo},
500
+ author = {Haiyang Li},
501
501
  month = {12},
502
502
  year = {2023},
503
503
  title = {LionAGI: Towards Automated General Intelligence},
@@ -6,7 +6,7 @@ lionagi/config.py,sha256=W3JOC_TFad8hFkpTG8yv0-GNupa7x3wX4NAUfWpB59U,3763
6
6
  lionagi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  lionagi/settings.py,sha256=HDuKCEJCpc4HudKodBnhoQUGuTGhRHdlIFhbtf3VBtY,1633
8
8
  lionagi/utils.py,sha256=Adtr1wyrU9Ra-HfHDoHLWasD6V88Z8sqkg2CQ8i8nzI,38686
9
- lionagi/version.py,sha256=wGIgxINRfcIKyk0LjIbc9UF9UwuclyCQZv_axTUzwNw,23
9
+ lionagi/version.py,sha256=BOC5JUFbzkhCG96hrOtH7kEDXF3aNOg4kZ97OzGzruI,23
10
10
  lionagi/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  lionagi/adapters/async_postgres_adapter.py,sha256=Kf2YCzwRqKpEHY3GQCXEiMl201CCIkDvXcvddwZNkkE,12723
12
12
  lionagi/adapters/postgres_model_adapter.py,sha256=e_wfJNyihbpLCXuAs_W9tbLoMXAXbAXtkQDaHfqWz3o,4555
@@ -85,12 +85,12 @@ lionagi/libs/validate/to_num.py,sha256=ZRHDjpTCykPfDIZZa4rZKNaR_8ZHbPDFlw9rc02Dr
85
85
  lionagi/libs/validate/validate_boolean.py,sha256=bjiX_WZ3Bg8XcqoWLzE1G9BpO0AisrlZUxrpye_mlGk,3614
86
86
  lionagi/libs/validate/xml_parser.py,sha256=PHBYAre4hhthPpDP9Yrp3UYSWdANPx60F1qhxe0m4uw,7004
87
87
  lionagi/ln/__init__.py,sha256=N2wBLrZWUTfLAXFU2b0VbbByAmbW5Xwl42eIu0RaYWg,906
88
- lionagi/ln/_async_call.py,sha256=9Uxuwy0J2wrCAy5TCSDcrTdbJNTWP1W2sxe3TAF8BrM,9264
88
+ lionagi/ln/_async_call.py,sha256=O4eY4UehsaamueWVCl6asfs8QAx3FXeVWTB4Nbwnpqk,9291
89
89
  lionagi/ln/_hash.py,sha256=g20yJfuVhAsfsBOWlkO889DHte6cbUCl6vV5QMT8nUo,3499
90
- lionagi/ln/_list_call.py,sha256=7sPPh4Ei7T_eeJxLHSmckZNrRbA8BadOk1IIF9NU5qQ,3908
90
+ lionagi/ln/_list_call.py,sha256=oDCyTzz7F7KVAMjekKftJp7qgIZ9Yo8BUNMHasKoJhU,3935
91
91
  lionagi/ln/_models.py,sha256=23RD2PPMfGNN0JqeHy0s1haRF2H3iF8Vb-_xz9Idvmc,3985
92
- lionagi/ln/_to_list.py,sha256=VngZPuqLV4sRhp5TsnZVTrhHi8iO5cxcsQGNk0-3yig,5573
93
- lionagi/ln/_types.py,sha256=nDit5mM2sKPRMjRCR5LG_h-68jJlzZtDn5EvJreXYAQ,3609
92
+ lionagi/ln/_to_list.py,sha256=DKjZAah6pm6frHls773yTMVK1I3OY7qxwLemOjRPr5A,5600
93
+ lionagi/ln/_types.py,sha256=usVaL2tGnYVQ2W12eUhJYiXY-m55b_5e0tUOFcuDtkc,3607
94
94
  lionagi/ln/concurrency/__init__.py,sha256=cW3Hw5DvV6AVUdC7N6QI0iTF2cIJMjH8Hp5jCBggBbU,1237
95
95
  lionagi/ln/concurrency/cancel.py,sha256=TYLxQ1D7mqhs8J4qJ_yTqP0j01zBe-Qed8-YnJlgKi0,4018
96
96
  lionagi/ln/concurrency/errors.py,sha256=FhLgXGFSbKZYPNfXjdnkV-0ShPF_S34RBLyTO_Pk5C8,938
@@ -99,7 +99,7 @@ lionagi/ln/concurrency/primitives.py,sha256=fgml37nggaEGuvAJHQY6-rpSuAuei56YVSjT
99
99
  lionagi/ln/concurrency/resource_tracker.py,sha256=52Rq7yMWK7DlebBW90imSjYeEAp8Gp9nL0dG2PD8Ivs,5464
100
100
  lionagi/ln/concurrency/task.py,sha256=nVts_yPylkZVSk3l3I4MkUdC7rhoN2qQeFfrsvekVgE,3146
101
101
  lionagi/ln/concurrency/throttle.py,sha256=Ho5zh_3beSXi9cMDDj70xz447BLzBJVopnUlQ18k9Lc,2198
102
- lionagi/ln/concurrency/utils.py,sha256=uQ7JFpdPNDTD2IUY0GnFzVYPPiQuFWWxdyq9moFdCzQ,319
102
+ lionagi/ln/concurrency/utils.py,sha256=4TvDnPKhtbesb6YWZ9QlhskiOb07ai_eJ-PrmqY14IE,346
103
103
  lionagi/models/__init__.py,sha256=R7DEGWuhH-izP7eN6SOw24-I4Mr2IVPXF4gNysmF2zQ,457
104
104
  lionagi/models/field_model.py,sha256=pRFUYs72BRB6jo4NkgeqslCp0xwqzvh00ibh8uaMAws,23674
105
105
  lionagi/models/hashable_model.py,sha256=oOqR3OJCU9cJfWHiG0WaEw0GMqfE2WTt4cy7WsAsiRg,829
@@ -110,8 +110,8 @@ lionagi/models/schema_model.py,sha256=ghRIM8aBNaToAknwNlhQKpuKXcwzyCw5pDE31bVKxs
110
110
  lionagi/operations/__init__.py,sha256=L22n8rRls9oVdzHoDlznHFGiKJMNw3ZhbwVQbm1Fn6M,584
111
111
  lionagi/operations/builder.py,sha256=_fIW5OqPTTond1VUapMMtEwsWmIuTAKy34K24uuK6EQ,22790
112
112
  lionagi/operations/flow.py,sha256=PNEIGVVTKoXVPbtNcoNNO72-NgtGCx1xMsL7JATeH0M,17561
113
- lionagi/operations/manager.py,sha256=7KD6NMWqYJHCPI2LumDRwGinF8WYKFjrr3bsNUi9xzI,564
114
- lionagi/operations/node.py,sha256=_PAN7qdGGdzyh97wRYEoTcZzD3giN7f5yuyKNP_snyk,3131
113
+ lionagi/operations/manager.py,sha256=YZr3VjPAZVVFd_bIjF1aoQqzzKZHNA1kcqefNi5QFFM,683
114
+ lionagi/operations/node.py,sha256=1cKcuAWwbuR5VJqF9oh9o898wO31ky0ev69m3UmnBAI,3135
115
115
  lionagi/operations/types.py,sha256=fM8HphnbBifMzhoKKvdl3JxGCBHlEGPJEYkLWj9b7vE,704
116
116
  lionagi/operations/utils.py,sha256=b8HmpF5vRgmf6PTzg3_fZCIKMnhoGa0HCyOlX6JCz7g,1263
117
117
  lionagi/operations/ReAct/ReAct.py,sha256=UzW3MClv9_w1AqrZIuATOZ9ASTb8HPD0Rlotlp0mYOg,13388
@@ -156,7 +156,7 @@ lionagi/protocols/forms/form.py,sha256=B4903km_Ljz-OxYkb1ZT_cpHZSaAYYJpZMsffWloo
156
156
  lionagi/protocols/forms/report.py,sha256=SvJJjOSCTfVuqK7AKaY8ldQIGJeSK2zoyPWUV41ge2c,1609
157
157
  lionagi/protocols/generic/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
158
158
  lionagi/protocols/generic/element.py,sha256=Eaij2YpTWsGk28Tqjazmjmc_tOnalH7_iGFZrL6QJb4,14420
159
- lionagi/protocols/generic/event.py,sha256=lA-NkpK87Rj7usi22cNqEZee8aRjPwaWKy_aXxdLQ54,5252
159
+ lionagi/protocols/generic/event.py,sha256=hoMWMnis2Ih6xbkBGVydP_TzfDurcJUDovkdZjEseN0,6517
160
160
  lionagi/protocols/generic/log.py,sha256=Y06zAQewkNlaIWjut_c6c45KY_LJfLHwzUaDGLULaas,8212
161
161
  lionagi/protocols/generic/pile.py,sha256=rzhKytyizb5xoyBOeAtDwvLZQhGR04NkgLyr3O_XzS8,30418
162
162
  lionagi/protocols/generic/processor.py,sha256=c_a7HB9WAaCY-HoI19YyStef8WOXcDj9UeiQb5bz_TM,11759
@@ -225,16 +225,16 @@ lionagi/service/third_party/exa_models.py,sha256=G_hnekcy-DillPLzMoDQ8ZisVAL8Mp7
225
225
  lionagi/service/third_party/openai_model_names.py,sha256=C44tnqexgc4ZU2-3I_sn5d688hf3WWx-25xBd50bvas,5121
226
226
  lionagi/service/third_party/pplx_models.py,sha256=-EhyJgOWR6rzSv3zczUtk80X6c19p18Dg9KC6l8BFRQ,6473
227
227
  lionagi/session/__init__.py,sha256=kDypY6L3kGPnatAw7YNQAykgg-9MlIBnlhHExaXvt-c,202
228
- lionagi/session/branch.py,sha256=y-zcauql7z5sgGpeWY1ZBgXOwHNCJ2_snB2haYbWls8,67918
228
+ lionagi/session/branch.py,sha256=yfOtMITbtKzGAcxwZ5JjkXrKtb2PBGRPt53xqbR0lAs,68329
229
229
  lionagi/session/prompts.py,sha256=GPr0jibyAAqS3awDzGC8SoCL6aWJLLCCbXY0JUuxOC0,3170
230
- lionagi/session/session.py,sha256=Gc31wPLFdBOMRs3zEs11KVShvDtLUAqqhbhMoySptqo,11379
230
+ lionagi/session/session.py,sha256=FzsUsqEQ6cnGd57E4HmEucftz5nMKsfj9kemRDqsXwU,13257
231
231
  lionagi/tools/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
232
232
  lionagi/tools/base.py,sha256=hEGnE4MD0CM4UqnF0xsDRKB0aM-pyrTFHl8utHhyJLU,1897
233
233
  lionagi/tools/types.py,sha256=XtJLY0m-Yi_ZLWhm0KycayvqMCZd--HxfQ0x9vFUYDE,230
234
234
  lionagi/tools/file/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
235
235
  lionagi/tools/file/reader.py,sha256=jnSHVSQ66AHZXQrgRuGmlbwKT5JHYoo-1zv1hKgTEfc,9544
236
236
  lionagi/tools/memory/tools.py,sha256=earYkKxSOz_iXkqVZYTEDfE3dwZYIWPXZrqQ1DYGz4I,15941
237
- lionagi-0.15.0.dist-info/METADATA,sha256=FWxuYuHT-118nRA9A2DEup_2Sx1kIleHZYYCYn27w4I,22913
238
- lionagi-0.15.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
239
- lionagi-0.15.0.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
240
- lionagi-0.15.0.dist-info/RECORD,,
237
+ lionagi-0.15.2.dist-info/METADATA,sha256=Q8mXAz46uEMUXIU-VbSsuhXH5yXUcmUkgRvoFkkgz1s,22895
238
+ lionagi-0.15.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
239
+ lionagi-0.15.2.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
240
+ lionagi-0.15.2.dist-info/RECORD,,