lionagi 0.17.6__py3-none-any.whl → 0.17.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lionagi/__init__.py +5 -2
- lionagi/service/__init__.py +67 -8
- lionagi/service/hooks/_types.py +4 -4
- lionagi/service/hooks/_utils.py +4 -4
- lionagi/service/hooks/hook_event.py +17 -4
- lionagi/service/hooks/hook_registry.py +43 -24
- lionagi/service/hooks/hooked_event.py +2 -2
- lionagi/service/imodel.py +9 -4
- lionagi/version.py +1 -1
- {lionagi-0.17.6.dist-info → lionagi-0.17.8.dist-info}/METADATA +1 -1
- {lionagi-0.17.6.dist-info → lionagi-0.17.8.dist-info}/RECORD +13 -13
- {lionagi-0.17.6.dist-info → lionagi-0.17.8.dist-info}/WHEEL +0 -0
- {lionagi-0.17.6.dist-info → lionagi-0.17.8.dist-info}/licenses/LICENSE +0 -0
lionagi/__init__.py
CHANGED
@@ -5,17 +5,20 @@
|
|
5
5
|
import logging
|
6
6
|
from typing import TYPE_CHECKING
|
7
7
|
|
8
|
-
from . import ln as ln
|
8
|
+
from . import ln as ln
|
9
9
|
from .version import __version__
|
10
10
|
|
11
11
|
if TYPE_CHECKING:
|
12
|
-
# Type hints only - not imported at runtime
|
13
12
|
from pydantic import BaseModel, Field
|
14
13
|
|
14
|
+
from . import _types as types
|
15
|
+
from .operations.builder import OperationGraphBuilder as Builder
|
15
16
|
from .operations.node import Operation
|
17
|
+
from .protocols.action.manager import load_mcp_tools
|
16
18
|
from .service.imodel import iModel
|
17
19
|
from .session.session import Branch, Session
|
18
20
|
|
21
|
+
|
19
22
|
logger = logging.getLogger(__name__)
|
20
23
|
logger.setLevel(logging.INFO)
|
21
24
|
|
lionagi/service/__init__.py
CHANGED
@@ -1,12 +1,26 @@
|
|
1
1
|
# Eager imports for core functionality
|
2
|
-
from
|
3
|
-
|
4
|
-
from .hooks import
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
from typing import TYPE_CHECKING
|
3
|
+
|
4
|
+
from .hooks import (
|
5
|
+
AssosiatedEventInfo,
|
6
|
+
HookDict,
|
7
|
+
HookedEvent,
|
8
|
+
HookEvent,
|
9
|
+
HookEventTypes,
|
10
|
+
HookRegistry,
|
11
|
+
global_hook_logger,
|
12
|
+
)
|
13
|
+
|
14
|
+
if TYPE_CHECKING:
|
15
|
+
from .broadcaster import Broadcaster
|
16
|
+
from .connections.api_calling import APICalling
|
17
|
+
from .connections.endpoint import Endpoint, EndpointConfig
|
18
|
+
from .imodel import iModel
|
19
|
+
from .manager import iModelManager
|
20
|
+
from .rate_limited_processor import RateLimitedAPIExecutor
|
21
|
+
from .token_calculator import TokenCalculator
|
22
|
+
|
23
|
+
|
10
24
|
_lazy_imports = {}
|
11
25
|
|
12
26
|
|
@@ -15,12 +29,49 @@ def __getattr__(name: str):
|
|
15
29
|
if name in _lazy_imports:
|
16
30
|
return _lazy_imports[name]
|
17
31
|
|
32
|
+
if name == "RateLimitedAPIExecutor":
|
33
|
+
from .rate_limited_processor import RateLimitedAPIExecutor
|
34
|
+
|
35
|
+
_lazy_imports["RateLimitedAPIExecutor"] = RateLimitedAPIExecutor
|
36
|
+
return RateLimitedAPIExecutor
|
37
|
+
|
38
|
+
if name in ("Endpoint", "EndpointConfig"):
|
39
|
+
from .connections.endpoint import Endpoint, EndpointConfig
|
40
|
+
|
41
|
+
_lazy_imports["Endpoint"] = Endpoint
|
42
|
+
_lazy_imports["EndpointConfig"] = EndpointConfig
|
43
|
+
return Endpoint if name == "Endpoint" else EndpointConfig
|
44
|
+
|
45
|
+
if name == "iModelManager":
|
46
|
+
from .manager import iModelManager
|
47
|
+
|
48
|
+
_lazy_imports["iModelManager"] = iModelManager
|
49
|
+
return iModelManager
|
50
|
+
|
51
|
+
if name == "iModel":
|
52
|
+
from .imodel import iModel
|
53
|
+
|
54
|
+
_lazy_imports["iModel"] = iModel
|
55
|
+
return iModel
|
56
|
+
|
57
|
+
if name == "APICalling":
|
58
|
+
from .connections.api_calling import APICalling
|
59
|
+
|
60
|
+
_lazy_imports["APICalling"] = APICalling
|
61
|
+
return APICalling
|
62
|
+
|
18
63
|
if name == "TokenCalculator":
|
19
64
|
from .token_calculator import TokenCalculator
|
20
65
|
|
21
66
|
_lazy_imports["TokenCalculator"] = TokenCalculator
|
22
67
|
return TokenCalculator
|
23
68
|
|
69
|
+
if name == "Broadcaster":
|
70
|
+
from .broadcaster import Broadcaster
|
71
|
+
|
72
|
+
_lazy_imports["Broadcaster"] = Broadcaster
|
73
|
+
return Broadcaster
|
74
|
+
|
24
75
|
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
25
76
|
|
26
77
|
|
@@ -37,4 +88,12 @@ __all__ = (
|
|
37
88
|
"AssosiatedEventInfo",
|
38
89
|
"HookEvent",
|
39
90
|
"HookRegistry",
|
91
|
+
"Broadcaster",
|
92
|
+
"HookEventTypes",
|
93
|
+
"HookDict",
|
94
|
+
"AssosiatedEventInfo",
|
95
|
+
"HookEvent",
|
96
|
+
"HookRegistry",
|
97
|
+
"global_hook_logger",
|
98
|
+
"HookedEvent",
|
40
99
|
)
|
lionagi/service/hooks/_types.py
CHANGED
@@ -23,8 +23,8 @@ __all__ = (
|
|
23
23
|
|
24
24
|
class HookEventTypes(str, Enum):
|
25
25
|
PreEventCreate = "pre_event_create"
|
26
|
-
|
27
|
-
|
26
|
+
PreInvocation = "pre_invocation"
|
27
|
+
PostInvocation = "post_invocation"
|
28
28
|
|
29
29
|
|
30
30
|
ALLOWED_HOOKS_TYPES = HookEventTypes.allowed()
|
@@ -32,8 +32,8 @@ ALLOWED_HOOKS_TYPES = HookEventTypes.allowed()
|
|
32
32
|
|
33
33
|
class HookDict(TypedDict):
|
34
34
|
pre_event_create: Callable | None
|
35
|
-
|
36
|
-
|
35
|
+
pre_invocation: Callable | None
|
36
|
+
post_invocation: Callable | None
|
37
37
|
|
38
38
|
|
39
39
|
StreamHandlers = dict[str, Callable[[SC], Awaitable[None]]]
|
lionagi/service/hooks/_utils.py
CHANGED
@@ -25,16 +25,16 @@ def get_handler(d_: dict, k: str | type, get: bool = False, /):
|
|
25
25
|
if handler is not None:
|
26
26
|
if not is_coro_func(handler):
|
27
27
|
|
28
|
-
async def _func(
|
28
|
+
async def _func(*args, **kwargs):
|
29
29
|
await sleep(0)
|
30
|
-
return handler(
|
30
|
+
return handler(*args, **kwargs)
|
31
31
|
|
32
32
|
return _func
|
33
33
|
return handler
|
34
34
|
|
35
|
-
async def _func(
|
35
|
+
async def _func(*args, **_kwargs):
|
36
36
|
await sleep(0)
|
37
|
-
return
|
37
|
+
return args[0] if args else None
|
38
38
|
|
39
39
|
return _func
|
40
40
|
|
@@ -3,16 +3,21 @@
|
|
3
3
|
|
4
4
|
from __future__ import annotations
|
5
5
|
|
6
|
-
from typing import Any
|
6
|
+
from typing import TYPE_CHECKING, Any
|
7
7
|
|
8
8
|
import anyio
|
9
|
-
from pydantic import Field, PrivateAttr
|
9
|
+
from pydantic import Field, PrivateAttr, field_validator
|
10
10
|
|
11
11
|
from lionagi.ln.concurrency import fail_after, get_cancelled_exc_class
|
12
12
|
from lionagi.protocols.types import Event, EventStatus
|
13
13
|
|
14
14
|
from ._types import AssosiatedEventInfo, HookEventTypes
|
15
|
-
|
15
|
+
|
16
|
+
if TYPE_CHECKING:
|
17
|
+
from .hook_registry import HookRegistry
|
18
|
+
else:
|
19
|
+
# Import at runtime for Pydantic
|
20
|
+
from .hook_registry import HookRegistry
|
16
21
|
|
17
22
|
|
18
23
|
class HookEvent(Event):
|
@@ -27,6 +32,12 @@ class HookEvent(Event):
|
|
27
32
|
|
28
33
|
assosiated_event_info: AssosiatedEventInfo | None = None
|
29
34
|
|
35
|
+
@field_validator("exit", mode="before")
|
36
|
+
def _validate_exit(cls, v: Any) -> bool:
|
37
|
+
if v is None:
|
38
|
+
return False
|
39
|
+
return v
|
40
|
+
|
30
41
|
async def invoke(self):
|
31
42
|
start = anyio.current_time()
|
32
43
|
self.execution.status = EventStatus.PROCESSING
|
@@ -61,7 +72,9 @@ class HookEvent(Event):
|
|
61
72
|
self.execution.status = EventStatus.FAILED
|
62
73
|
self.execution.response = None
|
63
74
|
self.execution.error = str(e)
|
64
|
-
|
75
|
+
# Registry/wiring failures should obey the configured policy
|
76
|
+
self._exit_cause = e
|
77
|
+
self._should_exit = bool(self.exit)
|
65
78
|
|
66
79
|
finally:
|
67
80
|
self.execution.duration = anyio.current_time() - start
|
@@ -10,7 +10,7 @@ from lionagi.protocols.types import Event, EventStatus
|
|
10
10
|
from lionagi.utils import UNDEFINED
|
11
11
|
|
12
12
|
from ._types import HookDict, HookEventTypes, StreamHandlers
|
13
|
-
from ._utils import validate_hooks, validate_stream_handlers
|
13
|
+
from ._utils import get_handler, validate_hooks, validate_stream_handlers
|
14
14
|
|
15
15
|
E = TypeVar("E", bound=Event)
|
16
16
|
|
@@ -48,17 +48,17 @@ class HookRegistry:
|
|
48
48
|
raise RuntimeError(
|
49
49
|
"Either hook_type or chunk_type must be provided"
|
50
50
|
)
|
51
|
-
if ht_ and (
|
52
|
-
validate_hooks({ht_:
|
51
|
+
if ht_ and (self._hooks.get(ht_)):
|
52
|
+
validate_hooks({ht_: self._hooks[ht_]})
|
53
|
+
h = get_handler(self._hooks, ht_, True)
|
53
54
|
return await h(ev_, **kw)
|
54
55
|
elif not ct_:
|
55
56
|
raise RuntimeError(
|
56
57
|
"Hook type is required when chunk_type is not provided"
|
57
58
|
)
|
58
59
|
else:
|
59
|
-
validate_stream_handlers(
|
60
|
-
|
61
|
-
)
|
60
|
+
validate_stream_handlers({ct_: self._stream_handlers.get(ct_)})
|
61
|
+
h = get_handler(self._stream_handlers, ct_, True)
|
62
62
|
return await h(ev_, ct_, ch_, **kw)
|
63
63
|
|
64
64
|
async def _call_stream_handler(
|
@@ -69,8 +69,8 @@ class HookRegistry:
|
|
69
69
|
/,
|
70
70
|
**kw,
|
71
71
|
):
|
72
|
-
|
73
|
-
|
72
|
+
validate_stream_handlers({ct_: self._stream_handlers.get(ct_)})
|
73
|
+
handler = get_handler(self._stream_handlers, ct_, True)
|
74
74
|
return await handler(ev_, ct_, ch_, **kw)
|
75
75
|
|
76
76
|
async def pre_event_create(
|
@@ -94,6 +94,7 @@ class HookRegistry:
|
|
94
94
|
None,
|
95
95
|
None,
|
96
96
|
event_type,
|
97
|
+
exit=exit,
|
97
98
|
**kw,
|
98
99
|
)
|
99
100
|
return (res, False, EventStatus.COMPLETED)
|
@@ -102,7 +103,7 @@ class HookRegistry:
|
|
102
103
|
except Exception as e:
|
103
104
|
return (e, exit, EventStatus.CANCELLED)
|
104
105
|
|
105
|
-
async def
|
106
|
+
async def pre_invocation(
|
106
107
|
self, event: E, /, exit: bool = False, **kw
|
107
108
|
) -> tuple[Any, bool, EventStatus]:
|
108
109
|
"""Hook to be called when an event is dequeued and right before it is invoked.
|
@@ -110,15 +111,16 @@ class HookRegistry:
|
|
110
111
|
Typically used to check permissions.
|
111
112
|
|
112
113
|
The hook function takes the content of the event as a dictionary.
|
113
|
-
It can either raise an exception to abort the event
|
114
|
+
It can either raise an exception to abort the event invocation or pass to continue (status: cancelled).
|
114
115
|
It cannot modify the event itself, and won't be able to access the event instance.
|
115
116
|
"""
|
116
117
|
try:
|
117
118
|
res = await self._call(
|
118
|
-
HookEventTypes.
|
119
|
+
HookEventTypes.PreInvocation,
|
119
120
|
None,
|
120
121
|
None,
|
121
122
|
event,
|
123
|
+
exit=exit,
|
122
124
|
**kw,
|
123
125
|
)
|
124
126
|
return (res, False, EventStatus.COMPLETED)
|
@@ -127,19 +129,20 @@ class HookRegistry:
|
|
127
129
|
except Exception as e:
|
128
130
|
return (e, exit, EventStatus.CANCELLED)
|
129
131
|
|
130
|
-
async def
|
132
|
+
async def post_invocation(
|
131
133
|
self, event: E, /, exit: bool = False, **kw
|
132
|
-
) -> tuple[None | Exception, bool, EventStatus
|
134
|
+
) -> tuple[None | Exception, bool, EventStatus]:
|
133
135
|
"""Hook to be called right after event finished its execution.
|
134
|
-
It can either raise an exception to abort the event
|
136
|
+
It can either raise an exception to abort the event invocation or pass to continue (status: aborted).
|
135
137
|
It cannot modify the event itself, and won't be able to access the event instance.
|
136
138
|
"""
|
137
139
|
try:
|
138
140
|
res = await self._call(
|
139
|
-
HookEventTypes.
|
141
|
+
HookEventTypes.PostInvocation,
|
140
142
|
None,
|
141
143
|
None,
|
142
144
|
event,
|
145
|
+
exit=exit,
|
143
146
|
**kw,
|
144
147
|
)
|
145
148
|
return (res, False, EventStatus.COMPLETED)
|
@@ -156,13 +159,14 @@ class HookRegistry:
|
|
156
159
|
Typically used for logging or stream event abortion.
|
157
160
|
|
158
161
|
The handler function signature should be: `async def handler(chunk: Any) -> None`
|
159
|
-
It can either raise an exception to mark the event
|
162
|
+
It can either raise an exception to mark the event invocation as "failed" or pass to continue (status: aborted).
|
160
163
|
"""
|
161
164
|
try:
|
162
165
|
res = await self._call_stream_handler(
|
163
166
|
chunk_type,
|
164
167
|
chunk,
|
165
168
|
None,
|
169
|
+
exit=exit,
|
166
170
|
**kw,
|
167
171
|
)
|
168
172
|
return (res, False, None)
|
@@ -191,20 +195,35 @@ class HookRegistry:
|
|
191
195
|
if hook_type is None and chunk_type is None:
|
192
196
|
raise ValueError("Either method or chunk_type must be provided")
|
193
197
|
if hook_type:
|
194
|
-
|
195
|
-
meta
|
198
|
+
# Align with AssosiatedEventInfo
|
199
|
+
meta = {"lion_class": event_like.class_name(full=True)}
|
196
200
|
match hook_type:
|
197
201
|
case HookEventTypes.PreEventCreate:
|
198
|
-
return
|
199
|
-
|
202
|
+
return (
|
203
|
+
await self.pre_event_create(
|
204
|
+
event_like, exit=exit, **kw
|
205
|
+
),
|
206
|
+
meta,
|
207
|
+
)
|
208
|
+
case HookEventTypes.PreInvocation:
|
200
209
|
meta["event_id"] = str(event_like.id)
|
201
210
|
meta["event_created_at"] = event_like.created_at
|
202
|
-
return
|
203
|
-
|
211
|
+
return (
|
212
|
+
await self.pre_invocation(event_like, exit=exit, **kw),
|
213
|
+
meta,
|
214
|
+
)
|
215
|
+
case HookEventTypes.PostInvocation:
|
204
216
|
meta["event_id"] = str(event_like.id)
|
205
217
|
meta["event_created_at"] = event_like.created_at
|
206
|
-
return
|
207
|
-
|
218
|
+
return (
|
219
|
+
await self.post_invocation(
|
220
|
+
event_like, exit=exit, **kw
|
221
|
+
),
|
222
|
+
meta,
|
223
|
+
)
|
224
|
+
return await self.handle_streaming_chunk(
|
225
|
+
chunk_type, chunk, exit=exit, **kw
|
226
|
+
)
|
208
227
|
|
209
228
|
def _can_handle(
|
210
229
|
self,
|
@@ -115,7 +115,7 @@ class HookedEvent(Event):
|
|
115
115
|
hook_params: dict = None,
|
116
116
|
):
|
117
117
|
h_ev = HookEvent(
|
118
|
-
hook_type=HookEventTypes.
|
118
|
+
hook_type=HookEventTypes.PreInvocation,
|
119
119
|
event_like=self,
|
120
120
|
registry=hook_registry,
|
121
121
|
exit=exit_hook,
|
@@ -132,7 +132,7 @@ class HookedEvent(Event):
|
|
132
132
|
hook_params: dict = None,
|
133
133
|
):
|
134
134
|
h_ev = HookEvent(
|
135
|
-
hook_type=HookEventTypes.
|
135
|
+
hook_type=HookEventTypes.PostInvocation,
|
136
136
|
event_like=self,
|
137
137
|
registry=hook_registry,
|
138
138
|
exit=exit_hook,
|
lionagi/service/imodel.py
CHANGED
@@ -11,6 +11,7 @@ from lionagi.ln import is_coro_func, now_utc
|
|
11
11
|
from lionagi.protocols.generic.log import Log
|
12
12
|
from lionagi.protocols.types import ID, Event, EventStatus, IDType
|
13
13
|
from lionagi.service.hooks.hook_event import HookEventTypes
|
14
|
+
from lionagi.service.hooks.hooked_event import HookedEvent
|
14
15
|
|
15
16
|
from .connections.api_calling import APICalling
|
16
17
|
from .connections.endpoint import Endpoint
|
@@ -186,8 +187,12 @@ class iModel:
|
|
186
187
|
"PreEventCreate hook requested exit without a cause"
|
187
188
|
)
|
188
189
|
|
189
|
-
if create_event_type
|
190
|
-
api_call =
|
190
|
+
if issubclass(create_event_type, HookedEvent):
|
191
|
+
api_call = None
|
192
|
+
if create_event_type is APICalling:
|
193
|
+
api_call = self.create_api_calling(**kwargs)
|
194
|
+
else:
|
195
|
+
api_call = create_event_type(**kwargs)
|
191
196
|
if h_ev:
|
192
197
|
h_ev.assosiated_event_info["event_id"] = str(api_call.id)
|
193
198
|
h_ev.assosiated_event_info["event_created_at"] = (
|
@@ -196,7 +201,7 @@ class iModel:
|
|
196
201
|
await global_hook_logger.alog(Log(content=h_ev.to_dict()))
|
197
202
|
|
198
203
|
if self.hook_registry._can_handle(
|
199
|
-
ht_=HookEventTypes.
|
204
|
+
ht_=HookEventTypes.PreInvocation
|
200
205
|
):
|
201
206
|
api_call.create_pre_invoke_hook(
|
202
207
|
hook_registry=self.hook_registry,
|
@@ -210,7 +215,7 @@ class iModel:
|
|
210
215
|
)
|
211
216
|
|
212
217
|
if self.hook_registry._can_handle(
|
213
|
-
ht_=HookEventTypes.
|
218
|
+
ht_=HookEventTypes.PostInvocation
|
214
219
|
):
|
215
220
|
api_call.create_post_invoke_hook(
|
216
221
|
hook_registry=self.hook_registry,
|
lionagi/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.17.
|
1
|
+
__version__ = "0.17.8"
|
@@ -1,11 +1,11 @@
|
|
1
|
-
lionagi/__init__.py,sha256=
|
1
|
+
lionagi/__init__.py,sha256=iS8Y4ZSsP2EPwEsqeodelqdoL1BdiK1bCAYJHak1AUM,2474
|
2
2
|
lionagi/_class_registry.py,sha256=pfUO1DjFZIqr3OwnNMkFqL_fiEBrrf8-swkGmP_KDLE,3112
|
3
3
|
lionagi/_errors.py,sha256=ia_VWhPSyr5FIJLSdPpl04SrNOLI2skN40VC8ePmzeQ,3748
|
4
4
|
lionagi/_types.py,sha256=COWRrmstmABGKKn-h_cKiAREGsMp_Ik49OdR4lSS3P8,1263
|
5
5
|
lionagi/config.py,sha256=yGnzj5D14B2TBhqVeyp1uccvAK6mk4hm0QA8dAEJUeQ,4776
|
6
6
|
lionagi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
lionagi/utils.py,sha256=yRHKN_v9xRnUa-nYg1lTpCCK2wNDg4pCpicUEIyFwKg,7084
|
8
|
-
lionagi/version.py,sha256=
|
8
|
+
lionagi/version.py,sha256=H2Y9686JbmOVItv-s7YNC6eYseSRZPwHCIXOoDgBIEM,23
|
9
9
|
lionagi/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
lionagi/adapters/_utils.py,sha256=sniMG1LDDkwJNzUF2K32jv7rA6Y1QcohgyNclYsptzI,453
|
11
11
|
lionagi/adapters/async_postgres_adapter.py,sha256=2XlxYNPow78dFHIQs8W1oJ2zkVD5Udn3aynMBF9Nf3k,3498
|
@@ -146,9 +146,9 @@ lionagi/protocols/messages/templates/tool_schemas.jinja2,sha256=ozIaSDCRjIAhLyA8
|
|
146
146
|
lionagi/protocols/operatives/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
147
147
|
lionagi/protocols/operatives/operative.py,sha256=V7SvjQf9nT9GT3Ft36atrBSOKLfylGvwS2oeykbTCfk,13368
|
148
148
|
lionagi/protocols/operatives/step.py,sha256=uF92QO2KZiY3YR1cxhrbD844VFidOKfmeQn2Fv637iY,9280
|
149
|
-
lionagi/service/__init__.py,sha256=
|
149
|
+
lionagi/service/__init__.py,sha256=MYcfEFFLSdRS4blwYdx883T8Px2bn81JAeqSIPW9SFs,2545
|
150
150
|
lionagi/service/broadcaster.py,sha256=XvaUaBb6awcq-DJGVNJnnAIZUrrtOPnhWcgVgZTnGq8,1941
|
151
|
-
lionagi/service/imodel.py,sha256=
|
151
|
+
lionagi/service/imodel.py,sha256=k-G7dowF7JOyy5qoXLgq9wjW5DYTe-pI4Gjf4nTOj7w,16609
|
152
152
|
lionagi/service/manager.py,sha256=tN3p0kM7pg_CEs6wXK62_B_h49Q3nrU-9qniFhw2ABE,1164
|
153
153
|
lionagi/service/rate_limited_processor.py,sha256=h2_F71aVeBrgZ0a7ARS8-8NDaAHvfWrLykI5QcNuYbk,6099
|
154
154
|
lionagi/service/resilience.py,sha256=91RPFtQY4QyNga_nuSNLsbzNE26pXJMTAfLaQqVdvmg,18714
|
@@ -172,11 +172,11 @@ lionagi/service/connections/providers/ollama_.py,sha256=oqYLWn81KrWoQgId4e4GD_bg
|
|
172
172
|
lionagi/service/connections/providers/perplexity_.py,sha256=1GMmxAXsKGsB-xlqxO6hW-QdqoqkU2705NLyejetFSw,1646
|
173
173
|
lionagi/service/connections/providers/types.py,sha256=omKWbmJYu_ozK_qJLcxQezVcauXTqhp4ClOWAyENEFU,807
|
174
174
|
lionagi/service/hooks/__init__.py,sha256=WCfzc-Aco5PkKufDMvSYxbrLqlEvmOsaZELlWKAuG2w,464
|
175
|
-
lionagi/service/hooks/_types.py,sha256=
|
176
|
-
lionagi/service/hooks/_utils.py,sha256=
|
177
|
-
lionagi/service/hooks/hook_event.py,sha256=
|
178
|
-
lionagi/service/hooks/hook_registry.py,sha256=
|
179
|
-
lionagi/service/hooks/hooked_event.py,sha256=
|
175
|
+
lionagi/service/hooks/_types.py,sha256=e1vmA24arGKweS45jEXK6pw8Ysk2NOvlBc6m1ABsKws,1255
|
176
|
+
lionagi/service/hooks/_utils.py,sha256=VVPWL7HE61xc4UPYF0DIuMeFhVb3gSzPNJTNZK7ssqA,2627
|
177
|
+
lionagi/service/hooks/hook_event.py,sha256=cJCnE3dQnOvjPj9wptBvPGGJx2LQqtXgwPMU8JLQSkM,2831
|
178
|
+
lionagi/service/hooks/hook_registry.py,sha256=V25UwTVoOixL1CKfRAyR0__fggCvF5pBK5fF4PzcZd8,8527
|
179
|
+
lionagi/service/hooks/hooked_event.py,sha256=D_1HtWCH3CriNlmsksi5lerXuF_LV2lbktcEdhZqXw0,4339
|
180
180
|
lionagi/service/third_party/README.md,sha256=qFjWnI8rmLivIyr6Tc-hRZh-rQwntROp76af4MBNJJc,2214
|
181
181
|
lionagi/service/third_party/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
182
182
|
lionagi/service/third_party/anthropic_models.py,sha256=oqSPSlcayYG-fS5BLiLeTtkrpaxgkPhEK_YgneumrOo,4004
|
@@ -193,7 +193,7 @@ lionagi/tools/base.py,sha256=hEGnE4MD0CM4UqnF0xsDRKB0aM-pyrTFHl8utHhyJLU,1897
|
|
193
193
|
lionagi/tools/types.py,sha256=XtJLY0m-Yi_ZLWhm0KycayvqMCZd--HxfQ0x9vFUYDE,230
|
194
194
|
lionagi/tools/file/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
195
195
|
lionagi/tools/file/reader.py,sha256=Q9x1UP7YmBqN53e1kUN68OmIs-D1m9EM9VVbWfM35js,9658
|
196
|
-
lionagi-0.17.
|
197
|
-
lionagi-0.17.
|
198
|
-
lionagi-0.17.
|
199
|
-
lionagi-0.17.
|
196
|
+
lionagi-0.17.8.dist-info/METADATA,sha256=d_5YV53ajCQjD7HDhICy31gl4NjaJlDCt2n6pXHF4wg,23448
|
197
|
+
lionagi-0.17.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
198
|
+
lionagi-0.17.8.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
|
199
|
+
lionagi-0.17.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|