lionagi 0.17.5__py3-none-any.whl → 0.17.6__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/config.py +26 -0
- lionagi/fields/action.py +5 -3
- lionagi/libs/file/chunk.py +3 -14
- lionagi/libs/file/process.py +10 -92
- lionagi/libs/schema/breakdown_pydantic_annotation.py +45 -0
- lionagi/ln/_async_call.py +6 -6
- lionagi/ln/fuzzy/_fuzzy_match.py +3 -6
- lionagi/ln/fuzzy/_fuzzy_validate.py +3 -4
- lionagi/ln/fuzzy/_string_similarity.py +11 -5
- lionagi/ln/fuzzy/_to_dict.py +19 -19
- lionagi/ln/types.py +15 -0
- lionagi/operations/operate/operate.py +7 -11
- lionagi/operations/parse/parse.py +5 -3
- lionagi/protocols/generic/element.py +3 -6
- lionagi/protocols/generic/event.py +1 -1
- lionagi/protocols/mail/package.py +2 -2
- lionagi/protocols/messages/instruction.py +9 -1
- lionagi/protocols/operatives/operative.py +4 -3
- lionagi/service/broadcaster.py +61 -0
- lionagi/service/connections/api_calling.py +21 -140
- lionagi/service/hooks/__init__.py +2 -10
- lionagi/service/hooks/_types.py +1 -0
- lionagi/service/hooks/hooked_event.py +142 -0
- lionagi/service/imodel.py +2 -2
- lionagi/session/branch.py +46 -169
- lionagi/session/session.py +1 -44
- lionagi/tools/file/reader.py +6 -4
- lionagi/utils.py +3 -334
- lionagi/version.py +1 -1
- {lionagi-0.17.5.dist-info → lionagi-0.17.6.dist-info}/METADATA +2 -2
- {lionagi-0.17.5.dist-info → lionagi-0.17.6.dist-info}/RECORD +33 -37
- lionagi/libs/file/_utils.py +0 -10
- lionagi/libs/file/concat.py +0 -121
- lionagi/libs/file/concat_files.py +0 -85
- lionagi/libs/file/file_ops.py +0 -118
- lionagi/libs/file/save.py +0 -103
- lionagi/ln/concurrency/throttle.py +0 -83
- lionagi/settings.py +0 -71
- {lionagi-0.17.5.dist-info → lionagi-0.17.6.dist-info}/WHEEL +0 -0
- {lionagi-0.17.5.dist-info → lionagi-0.17.6.dist-info}/licenses/LICENSE +0 -0
lionagi/utils.py
CHANGED
@@ -6,22 +6,10 @@ import copy as _copy
|
|
6
6
|
import logging
|
7
7
|
import types
|
8
8
|
import uuid
|
9
|
-
from collections.abc import
|
10
|
-
from datetime import datetime
|
11
|
-
from inspect import isclass
|
9
|
+
from collections.abc import Mapping
|
10
|
+
from datetime import datetime
|
12
11
|
from pathlib import Path
|
13
|
-
from typing import
|
14
|
-
Annotated,
|
15
|
-
Any,
|
16
|
-
Literal,
|
17
|
-
TypeVar,
|
18
|
-
Union,
|
19
|
-
get_args,
|
20
|
-
get_origin,
|
21
|
-
)
|
22
|
-
|
23
|
-
from pydantic import BaseModel
|
24
|
-
from typing_extensions import deprecated
|
12
|
+
from typing import Annotated, Any, TypeVar, Union, get_args, get_origin
|
25
13
|
|
26
14
|
from .ln import (
|
27
15
|
extract_json,
|
@@ -47,19 +35,14 @@ from .ln.types import (
|
|
47
35
|
Unset,
|
48
36
|
UnsetType,
|
49
37
|
)
|
50
|
-
from .settings import Settings
|
51
38
|
|
52
39
|
R = TypeVar("R")
|
53
40
|
T = TypeVar("T")
|
54
|
-
B = TypeVar("B", bound=BaseModel)
|
55
41
|
|
56
42
|
logger = logging.getLogger(__name__)
|
57
43
|
|
58
44
|
UNDEFINED = Undefined
|
59
45
|
|
60
|
-
to_json = extract_json
|
61
|
-
fuzzy_parse_json = fuzzy_json
|
62
|
-
|
63
46
|
__all__ = (
|
64
47
|
"UndefinedType",
|
65
48
|
"KeysDict",
|
@@ -72,26 +55,15 @@ __all__ = (
|
|
72
55
|
"get_class_file_registry",
|
73
56
|
"get_class_objects",
|
74
57
|
"is_coro_func",
|
75
|
-
"custom_error_handler",
|
76
58
|
"to_list",
|
77
|
-
"lcall",
|
78
|
-
"alcall",
|
79
|
-
"bcall",
|
80
59
|
"create_path",
|
81
|
-
"time",
|
82
|
-
"fuzzy_parse_json",
|
83
|
-
"fix_json_string",
|
84
60
|
"get_bins",
|
85
61
|
"EventStatus",
|
86
62
|
"logger",
|
87
|
-
"max_concurrent",
|
88
|
-
"force_async",
|
89
|
-
"breakdown_pydantic_annotation",
|
90
63
|
"Enum",
|
91
64
|
"hash_dict",
|
92
65
|
"is_union_type",
|
93
66
|
"union_members",
|
94
|
-
"to_json",
|
95
67
|
"Unset",
|
96
68
|
"UnsetType",
|
97
69
|
"Undefined",
|
@@ -104,62 +76,6 @@ __all__ = (
|
|
104
76
|
)
|
105
77
|
|
106
78
|
|
107
|
-
# --- General Global Utilities Functions ---
|
108
|
-
def time(
|
109
|
-
*,
|
110
|
-
tz: timezone = Settings.Config.TIMEZONE,
|
111
|
-
type_: Literal["timestamp", "datetime", "iso", "custom"] = "timestamp",
|
112
|
-
sep: str | None = "T",
|
113
|
-
timespec: str | None = "auto",
|
114
|
-
custom_format: str | None = None,
|
115
|
-
custom_sep: str | None = None,
|
116
|
-
) -> float | str | datetime:
|
117
|
-
"""
|
118
|
-
Get current time in various formats.
|
119
|
-
|
120
|
-
Args:
|
121
|
-
tz: Timezone for the time (default: utc).
|
122
|
-
type_: Type of time to return (default: "timestamp").
|
123
|
-
Options: "timestamp", "datetime", "iso", "custom".
|
124
|
-
sep: Separator for ISO format (default: "T").
|
125
|
-
timespec: Timespec for ISO format (default: "auto").
|
126
|
-
custom_format: Custom strftime format string for
|
127
|
-
type_="custom".
|
128
|
-
custom_sep: Custom separator for type_="custom",
|
129
|
-
replaces "-", ":", ".".
|
130
|
-
|
131
|
-
Returns:
|
132
|
-
Current time in the specified format.
|
133
|
-
|
134
|
-
Raises:
|
135
|
-
ValueError: If an invalid type_ is provided or if custom_format
|
136
|
-
is not provided when type_="custom".
|
137
|
-
"""
|
138
|
-
now = datetime.now(tz=tz)
|
139
|
-
|
140
|
-
if type_ == "iso":
|
141
|
-
return now.isoformat(sep=sep, timespec=timespec)
|
142
|
-
elif type_ == "timestamp":
|
143
|
-
return now.timestamp()
|
144
|
-
elif type_ == "datetime":
|
145
|
-
return now
|
146
|
-
elif type_ == "custom":
|
147
|
-
if not custom_format:
|
148
|
-
raise ValueError(
|
149
|
-
"custom_format must be provided when type_='custom'"
|
150
|
-
)
|
151
|
-
formatted_time = now.strftime(custom_format)
|
152
|
-
if custom_sep is not None:
|
153
|
-
for old_sep in ("-", ":", "."):
|
154
|
-
formatted_time = formatted_time.replace(old_sep, custom_sep)
|
155
|
-
return formatted_time
|
156
|
-
|
157
|
-
raise ValueError(
|
158
|
-
f"Invalid value <{type_}> for `type_`, must be"
|
159
|
-
" one of 'timestamp', 'datetime', 'iso', or 'custom'."
|
160
|
-
)
|
161
|
-
|
162
|
-
|
163
79
|
def copy(obj: T, /, *, deep: bool = True, num: int = 1) -> T | list[T]:
|
164
80
|
if num < 1:
|
165
81
|
raise ValueError("Number of copies must be at least 1")
|
@@ -232,214 +148,6 @@ def union_members(
|
|
232
148
|
return members
|
233
149
|
|
234
150
|
|
235
|
-
async def custom_error_handler(
|
236
|
-
error: Exception, error_map: dict[type, Callable[[Exception], None]]
|
237
|
-
) -> None:
|
238
|
-
if type(error) in error_map:
|
239
|
-
if is_coro_func(error_map[type(error)]):
|
240
|
-
return await error_map[type(error)](error)
|
241
|
-
return error_map[type(error)](error)
|
242
|
-
logging.error(f"Unhandled error: {error}")
|
243
|
-
raise error
|
244
|
-
|
245
|
-
|
246
|
-
@deprecated(
|
247
|
-
"Use `lionagi.ln.lcall` instead, function signature has changed, this will be removed in future versions."
|
248
|
-
)
|
249
|
-
def lcall(
|
250
|
-
input_: Iterable[T] | T,
|
251
|
-
func: Callable[[T], R] | Iterable[Callable[[T], R]],
|
252
|
-
/,
|
253
|
-
*args: Any,
|
254
|
-
sanitize_input: bool = False,
|
255
|
-
unique_input: bool = False,
|
256
|
-
flatten: bool = False,
|
257
|
-
dropna: bool = False,
|
258
|
-
unique_output: bool = False,
|
259
|
-
flatten_tuple_set: bool = False,
|
260
|
-
use_input_values: bool = False,
|
261
|
-
**kwargs: Any,
|
262
|
-
) -> list[R]:
|
263
|
-
"""Apply function to each element in input list with optional processing.
|
264
|
-
|
265
|
-
Maps a function over input elements and processes results. Can sanitize input
|
266
|
-
and output using various filtering options.
|
267
|
-
|
268
|
-
Args:
|
269
|
-
input_: Single item or iterable to process.
|
270
|
-
func: Function to apply or single-item iterable containing function.
|
271
|
-
*args: Additional positional arguments passed to func.
|
272
|
-
sanitize_input: If True, sanitize input using to_list.
|
273
|
-
unique_input: If True with sanitize_input, remove input duplicates.
|
274
|
-
flatten: If True, flatten output nested structures.
|
275
|
-
dropna: If True, remove None values from output.
|
276
|
-
unique_output: If True with flatten/dropna, remove output duplicates.
|
277
|
-
flatten_tuple_set: If True, flatten tuples and sets.
|
278
|
-
**kwargs: Additional keyword arguments passed to func.
|
279
|
-
|
280
|
-
Returns:
|
281
|
-
list: Results of applying func to each input element.
|
282
|
-
|
283
|
-
Raises:
|
284
|
-
ValueError: If func is not callable or unique_output used incorrectly.
|
285
|
-
TypeError: If func or input processing fails.
|
286
|
-
|
287
|
-
Examples:
|
288
|
-
>>> lcall([1, 2, 3], str)
|
289
|
-
['1', '2', '3']
|
290
|
-
>>> lcall([1, [2, 3]], str, flatten=True)
|
291
|
-
['1', '2', '3']
|
292
|
-
"""
|
293
|
-
from lionagi.ln import lcall as _lcall
|
294
|
-
|
295
|
-
return _lcall(
|
296
|
-
input_,
|
297
|
-
func,
|
298
|
-
*args,
|
299
|
-
input_flatten=sanitize_input,
|
300
|
-
input_dropna=sanitize_input,
|
301
|
-
input_flatten_tuple_set=flatten_tuple_set,
|
302
|
-
input_unique=unique_input,
|
303
|
-
input_use_values=use_input_values,
|
304
|
-
output_flatten=flatten,
|
305
|
-
output_dropna=dropna,
|
306
|
-
output_flatten_tuple_set=flatten_tuple_set,
|
307
|
-
output_unique=unique_output,
|
308
|
-
**kwargs,
|
309
|
-
)
|
310
|
-
|
311
|
-
|
312
|
-
@deprecated(
|
313
|
-
"Use `lionagi.ln.alcall` instead, function signature has changed, this will be removed in future versions."
|
314
|
-
)
|
315
|
-
async def alcall(
|
316
|
-
input_: list[Any],
|
317
|
-
func: Callable[..., T],
|
318
|
-
/,
|
319
|
-
*,
|
320
|
-
sanitize_input: bool = False,
|
321
|
-
unique_input: bool = False,
|
322
|
-
num_retries: int = 0,
|
323
|
-
initial_delay: float = 0,
|
324
|
-
retry_delay: float = 0,
|
325
|
-
backoff_factor: float = 1,
|
326
|
-
retry_default: Any = UNDEFINED,
|
327
|
-
retry_timeout: float | None = None,
|
328
|
-
max_concurrent: int | None = None,
|
329
|
-
throttle_period: float | None = None,
|
330
|
-
flatten: bool = False,
|
331
|
-
dropna: bool = False,
|
332
|
-
unique_output: bool = False,
|
333
|
-
flatten_tuple_set: bool = False,
|
334
|
-
**kwargs: Any,
|
335
|
-
) -> list[T]:
|
336
|
-
"""
|
337
|
-
Asynchronously apply a function to each element of a list, with optional input sanitization,
|
338
|
-
retries, timeout, and output processing.
|
339
|
-
|
340
|
-
Args:
|
341
|
-
input_ (list[Any]): The list of inputs to process.
|
342
|
-
func (Callable[..., T]): The function to apply (async or sync).
|
343
|
-
sanitize_input (bool): If True, input is flattened, dropna applied, and made unique if unique_input.
|
344
|
-
unique_input (bool): If True and sanitize_input is True, input is made unique.
|
345
|
-
num_retries (int): Number of retry attempts on exception.
|
346
|
-
initial_delay (float): Initial delay before starting executions.
|
347
|
-
retry_delay (float): Delay between retries.
|
348
|
-
backoff_factor (float): Multiplier for delay after each retry.
|
349
|
-
retry_default (Any): Default value if all retries fail.
|
350
|
-
retry_timeout (float | None): Timeout for each function call.
|
351
|
-
max_concurrent (int | None): Maximum number of concurrent operations.
|
352
|
-
throttle_period (float | None): Delay after each completed operation.
|
353
|
-
flatten (bool): Flatten the final result if True.
|
354
|
-
dropna (bool): Remove None values from the final result if True.
|
355
|
-
unique_output (bool): Deduplicate the output if True.
|
356
|
-
flatten_tuple_set (bool): Tuples and sets will be flattened if True.
|
357
|
-
**kwargs: Additional arguments passed to func.
|
358
|
-
|
359
|
-
Returns:
|
360
|
-
list[T]: The processed results.
|
361
|
-
|
362
|
-
Raises:
|
363
|
-
asyncio.TimeoutError: If a call times out and no default is provided.
|
364
|
-
Exception: If retries are exhausted and no default is provided.
|
365
|
-
"""
|
366
|
-
from .ln._async_call import alcall as _alcall
|
367
|
-
|
368
|
-
return await _alcall(
|
369
|
-
input_,
|
370
|
-
func,
|
371
|
-
input_flatten=sanitize_input,
|
372
|
-
input_dropna=sanitize_input,
|
373
|
-
input_unique=unique_input,
|
374
|
-
input_flatten_tuple_set=flatten_tuple_set,
|
375
|
-
output_flatten=flatten,
|
376
|
-
output_dropna=dropna,
|
377
|
-
output_unique=unique_output,
|
378
|
-
output_flatten_tuple_set=flatten_tuple_set,
|
379
|
-
delay_before_start=initial_delay,
|
380
|
-
retry_initial_deplay=retry_delay,
|
381
|
-
retry_backoff=backoff_factor,
|
382
|
-
retry_default=retry_default,
|
383
|
-
retry_timeout=retry_timeout,
|
384
|
-
retry_attempts=num_retries,
|
385
|
-
max_concurrent=max_concurrent,
|
386
|
-
throttle_period=throttle_period,
|
387
|
-
**kwargs,
|
388
|
-
)
|
389
|
-
|
390
|
-
|
391
|
-
@deprecated(
|
392
|
-
"Use `lionagi.ln.alcall` instead, function signature has changed, this will be removed in future versions."
|
393
|
-
)
|
394
|
-
async def bcall(
|
395
|
-
input_: Any,
|
396
|
-
func: Callable[..., T],
|
397
|
-
/,
|
398
|
-
batch_size: int,
|
399
|
-
*,
|
400
|
-
sanitize_input: bool = False,
|
401
|
-
unique_input: bool = False,
|
402
|
-
num_retries: int = 0,
|
403
|
-
initial_delay: float = 0,
|
404
|
-
retry_delay: float = 0,
|
405
|
-
backoff_factor: float = 1,
|
406
|
-
retry_default: Any = UNDEFINED,
|
407
|
-
retry_timeout: float | None = None,
|
408
|
-
max_concurrent: int | None = None,
|
409
|
-
throttle_period: float | None = None,
|
410
|
-
flatten: bool = False,
|
411
|
-
dropna: bool = False,
|
412
|
-
unique_output: bool = False,
|
413
|
-
flatten_tuple_set: bool = False,
|
414
|
-
**kwargs: Any,
|
415
|
-
) -> AsyncGenerator[list[T | tuple[T, float]], None]:
|
416
|
-
from .ln._async_call import bcall as _bcall
|
417
|
-
|
418
|
-
async for i in _bcall(
|
419
|
-
input_,
|
420
|
-
func,
|
421
|
-
batch_size,
|
422
|
-
input_flatten=sanitize_input,
|
423
|
-
input_dropna=sanitize_input,
|
424
|
-
input_unique=unique_input,
|
425
|
-
input_flatten_tuple_set=flatten_tuple_set,
|
426
|
-
output_flatten=flatten,
|
427
|
-
output_dropna=dropna,
|
428
|
-
output_unique=unique_output,
|
429
|
-
output_flatten_tuple_set=flatten_tuple_set,
|
430
|
-
delay_before_start=initial_delay,
|
431
|
-
retry_initial_deplay=retry_delay,
|
432
|
-
retry_backoff=backoff_factor,
|
433
|
-
retry_default=retry_default,
|
434
|
-
retry_timeout=retry_timeout,
|
435
|
-
retry_attempts=num_retries,
|
436
|
-
max_concurrent=max_concurrent,
|
437
|
-
throttle_period=throttle_period,
|
438
|
-
**kwargs,
|
439
|
-
):
|
440
|
-
yield i
|
441
|
-
|
442
|
-
|
443
151
|
def create_path(
|
444
152
|
directory: Path | str,
|
445
153
|
filename: str,
|
@@ -537,42 +245,3 @@ def get_bins(input_: list[str], upper: int) -> list[list[int]]:
|
|
537
245
|
if current_bin:
|
538
246
|
bins.append(current_bin)
|
539
247
|
return bins
|
540
|
-
|
541
|
-
|
542
|
-
def breakdown_pydantic_annotation(
|
543
|
-
model: type[B], max_depth: int | None = None, current_depth: int = 0
|
544
|
-
) -> dict[str, Any]:
|
545
|
-
if not _is_pydantic_model(model):
|
546
|
-
raise TypeError("Input must be a Pydantic model")
|
547
|
-
|
548
|
-
if max_depth is not None and current_depth >= max_depth:
|
549
|
-
raise RecursionError("Maximum recursion depth reached")
|
550
|
-
|
551
|
-
out: dict[str, Any] = {}
|
552
|
-
for k, v in model.__annotations__.items():
|
553
|
-
origin = get_origin(v)
|
554
|
-
if _is_pydantic_model(v):
|
555
|
-
out[k] = breakdown_pydantic_annotation(
|
556
|
-
v, max_depth, current_depth + 1
|
557
|
-
)
|
558
|
-
elif origin is list:
|
559
|
-
args = get_args(v)
|
560
|
-
if args and _is_pydantic_model(args[0]):
|
561
|
-
out[k] = [
|
562
|
-
breakdown_pydantic_annotation(
|
563
|
-
args[0], max_depth, current_depth + 1
|
564
|
-
)
|
565
|
-
]
|
566
|
-
else:
|
567
|
-
out[k] = [args[0] if args else Any]
|
568
|
-
else:
|
569
|
-
out[k] = v
|
570
|
-
|
571
|
-
return out
|
572
|
-
|
573
|
-
|
574
|
-
def _is_pydantic_model(x: Any) -> bool:
|
575
|
-
try:
|
576
|
-
return isclass(x) and issubclass(x, BaseModel)
|
577
|
-
except TypeError:
|
578
|
-
return False
|
lionagi/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.17.
|
1
|
+
__version__ = "0.17.6"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: lionagi
|
3
|
-
Version: 0.17.
|
3
|
+
Version: 0.17.6
|
4
4
|
Summary: An Intelligence Operating System.
|
5
5
|
Author-email: HaiyangLi <quantocean.li@gmail.com>
|
6
6
|
License: Apache License
|
@@ -228,7 +228,7 @@ Requires-Dist: json-repair>=0.40.0
|
|
228
228
|
Requires-Dist: msgspec>=0.18.0
|
229
229
|
Requires-Dist: pydantic-settings>=2.8.0
|
230
230
|
Requires-Dist: pydantic>=2.8.0
|
231
|
-
Requires-Dist: pydapter>=1.1.1
|
231
|
+
Requires-Dist: pydapter[pandas]>=1.1.1
|
232
232
|
Requires-Dist: python-dotenv>=1.1.0
|
233
233
|
Requires-Dist: tiktoken>=0.9.0
|
234
234
|
Provides-Extra: all
|
@@ -2,16 +2,15 @@ lionagi/__init__.py,sha256=MeFKg1esCCVXzKG_ZSS68dg-q2W26sVzRSju_prw37w,2398
|
|
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
|
-
lionagi/config.py,sha256=
|
5
|
+
lionagi/config.py,sha256=yGnzj5D14B2TBhqVeyp1uccvAK6mk4hm0QA8dAEJUeQ,4776
|
6
6
|
lionagi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
-
lionagi/
|
8
|
-
lionagi/
|
9
|
-
lionagi/version.py,sha256=ZIYpuZI41Jfj-0NfW9-SGHVIJ9A014nURtKnLa84glc,23
|
7
|
+
lionagi/utils.py,sha256=yRHKN_v9xRnUa-nYg1lTpCCK2wNDg4pCpicUEIyFwKg,7084
|
8
|
+
lionagi/version.py,sha256=mmrB6n6zH1c3iHQ4iJcecY24GV6KoBQ8Vbb5t5vYe3E,23
|
10
9
|
lionagi/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
10
|
lionagi/adapters/_utils.py,sha256=sniMG1LDDkwJNzUF2K32jv7rA6Y1QcohgyNclYsptzI,453
|
12
11
|
lionagi/adapters/async_postgres_adapter.py,sha256=2XlxYNPow78dFHIQs8W1oJ2zkVD5Udn3aynMBF9Nf3k,3498
|
13
12
|
lionagi/fields/__init__.py,sha256=yrn9NDAM6_v73kK7aJeb-Pvqigeu8WASaV-My-6CDsc,939
|
14
|
-
lionagi/fields/action.py,sha256=
|
13
|
+
lionagi/fields/action.py,sha256=nFr1u0d-t3gRaiA6XrqyEadHkfys2E_ReSmJwCe-oZk,5833
|
15
14
|
lionagi/fields/base.py,sha256=mvgqxLonCROszMjnG8QWt00l-MvIr_mnGvCtaH-SQ_k,3814
|
16
15
|
lionagi/fields/code.py,sha256=TFym51obzaSfCmeRoHZJyBtjfDI4tvl9F-1sjFc9rMw,7713
|
17
16
|
lionagi/fields/file.py,sha256=DhQ_HE0RvTNzkvBGQHRgbMYSokDkzE8GEu814i6jw5Q,7297
|
@@ -20,15 +19,11 @@ lionagi/fields/reason.py,sha256=6IjgJWv-dhsGmg5O1sq2J5syBibYfRBy3--7q7_ZpMY,1452
|
|
20
19
|
lionagi/fields/research.py,sha256=eEPKocx8eQy2E9FExRWVIo6MK_xvmwBAoRZciBY3RG0,1421
|
21
20
|
lionagi/libs/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
22
21
|
lionagi/libs/file/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
23
|
-
lionagi/libs/file/
|
24
|
-
lionagi/libs/file/
|
25
|
-
lionagi/libs/file/concat.py,sha256=YSauXVBL3WWx5Mvpn208Cj7q9TLt_aq-0M9J1fm-ins,3864
|
26
|
-
lionagi/libs/file/concat_files.py,sha256=FoI983oWFzp9VfFDP7kmbRb3t1CPe5F5LCtsux0ASAs,3089
|
27
|
-
lionagi/libs/file/file_ops.py,sha256=HBiIh1EljIJ5VTIXuyvJM0ppSs0YYOPUWmgDMJT634U,3430
|
28
|
-
lionagi/libs/file/process.py,sha256=XTfh1JDPancjFU0qr4-ONB2OXfKKkhQxL49sChYLl-0,8672
|
29
|
-
lionagi/libs/file/save.py,sha256=jTiJMTOK3IiuCz1XbYZlzFmsqiy2q_Xz6subc4ZTJps,3063
|
22
|
+
lionagi/libs/file/chunk.py,sha256=jvjSM8BNgqP1awJT5Soodoz1rHQVN3gg-1q5Lt38XoM,8974
|
23
|
+
lionagi/libs/file/process.py,sha256=_lfpPuvaeRl1q1EA7cjRlA7o08JDwsSLCU1k79S5_2k,6078
|
30
24
|
lionagi/libs/schema/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
31
25
|
lionagi/libs/schema/as_readable.py,sha256=p8ke8ZxLwLQxmsJWD_N7Q_AYDYK60nuHztUREbTa5sk,12027
|
26
|
+
lionagi/libs/schema/breakdown_pydantic_annotation.py,sha256=x-mfXroICPHXtNcLtAoC_SyFwao42dEaEAUZA9l3yWQ,1296
|
32
27
|
lionagi/libs/schema/extract_code_block.py,sha256=PuJbJj1JnqR5fSZudowPcVPpEoKISLr0MjTOOVXSzwY,2394
|
33
28
|
lionagi/libs/schema/extract_docstring.py,sha256=uWyUevXS4JSN60tfouoBBAyE4_jyE-fz45CiS-fvKeI,5714
|
34
29
|
lionagi/libs/schema/function_to_schema.py,sha256=XAB031WbYu3a7eFJyYjXVMAjmtWYSYr5kC_DYgjiuyM,5604
|
@@ -38,13 +33,13 @@ lionagi/libs/validate/common_field_validators.py,sha256=1BHznXnJYcLQrHqvHKUnP6aq
|
|
38
33
|
lionagi/libs/validate/to_num.py,sha256=ZRHDjpTCykPfDIZZa4rZKNaR_8ZHbPDFlw9rc02DrII,11610
|
39
34
|
lionagi/libs/validate/validate_boolean.py,sha256=bjiX_WZ3Bg8XcqoWLzE1G9BpO0AisrlZUxrpye_mlGk,3614
|
40
35
|
lionagi/ln/__init__.py,sha256=dQvfTU1MHUrG4C4KoqEs7Xg801seML-GNjihbdUtp3E,1575
|
41
|
-
lionagi/ln/_async_call.py,sha256=
|
36
|
+
lionagi/ln/_async_call.py,sha256=hjei0sW-G92xDwQo_OI4qKVp1iP8N2eccJT1fAftV9w,9607
|
42
37
|
lionagi/ln/_hash.py,sha256=dIrQgOAdrWkVQcaCJXN-XIaA1sIZSYtAU302fywrtJU,4756
|
43
38
|
lionagi/ln/_json_dump.py,sha256=zOeoOE3JbaGAzL-lfAdMqdgaXWYXFliqcgXsZ_pxonI,10347
|
44
39
|
lionagi/ln/_list_call.py,sha256=zvISmCeNAH7yjBcusQI1s17n556tILgePhRMdAM2plA,2831
|
45
40
|
lionagi/ln/_to_list.py,sha256=V9hC3dpyMhRJwuuyOCU_wJygzEB6sJVZ0fmIRtM6uTg,6993
|
46
41
|
lionagi/ln/_utils.py,sha256=5Z_AsDxdtH5wNB-P4IiihhH0dYUcZMT-hTxFQBQPwL0,4303
|
47
|
-
lionagi/ln/types.py,sha256=
|
42
|
+
lionagi/ln/types.py,sha256=_6zW86nW0aq34uB94Y9iNsw19UShF5yrUv0M9ShAPjo,8870
|
48
43
|
lionagi/ln/concurrency/__init__.py,sha256=xt_GLZ1Zb-nC-RnrNt8jOBWb_uf1md__B1R5cplMShg,1190
|
49
44
|
lionagi/ln/concurrency/_compat.py,sha256=itxdRzl95PLEBQvNY0zTriF39kymaNRpKncT8QsOomA,2065
|
50
45
|
lionagi/ln/concurrency/cancel.py,sha256=8JlWy_EVto4Fls1yQLBteCbpn4zP6ydnqIa_EL5kxZc,3313
|
@@ -53,15 +48,14 @@ lionagi/ln/concurrency/patterns.py,sha256=08eebVxbBxkcMFgJqZB-cXS7lRZduH1Y-zorb8
|
|
53
48
|
lionagi/ln/concurrency/primitives.py,sha256=-mXU-mUThbr9YUH2viw8mY5iOuKn5E5CoiTlG41NO3k,9543
|
54
49
|
lionagi/ln/concurrency/resource_tracker.py,sha256=ffLr0FkHyaHsUa4UDyWwse-8wGLaLMnAyfyeTDyzrDA,1512
|
55
50
|
lionagi/ln/concurrency/task.py,sha256=VS5keFI3Ct0fqCKbFl4kEWT5I2CgjIYizPU-S2YjGKo,2675
|
56
|
-
lionagi/ln/concurrency/throttle.py,sha256=yUAM4hnone6VzlFEos0fWERkZU9YC4J6TncZL-MqkG4,2319
|
57
51
|
lionagi/ln/concurrency/utils.py,sha256=MUWupnFtWxR15hWnligLZrS4Z1SAQ7j3cuCG08cK3GQ,431
|
58
52
|
lionagi/ln/fuzzy/__init__.py,sha256=Py7hPV7uk5rPRGvQ4yPjMzXS32aQ7QVkO-mX69FfsMM,544
|
59
53
|
lionagi/ln/fuzzy/_extract_json.py,sha256=rYHaK36yzRpie8qO-T7mZKOue2yqCLx3ixiuKhsaKvg,2224
|
60
54
|
lionagi/ln/fuzzy/_fuzzy_json.py,sha256=S0lCkNvprn7XZHoYdRfzXueexSbjxTeLPkpyJ9IAO3A,3860
|
61
|
-
lionagi/ln/fuzzy/_fuzzy_match.py,sha256
|
62
|
-
lionagi/ln/fuzzy/_fuzzy_validate.py,sha256=
|
63
|
-
lionagi/ln/fuzzy/_string_similarity.py,sha256=
|
64
|
-
lionagi/ln/fuzzy/_to_dict.py,sha256=
|
55
|
+
lionagi/ln/fuzzy/_fuzzy_match.py,sha256=-rmYVjPtiAYaUAacQfhSwahVqQP03FBpfZrGFH7Zq98,5832
|
56
|
+
lionagi/ln/fuzzy/_fuzzy_validate.py,sha256=XuafNXflTerQrQYV0S6MrQHR3_6DuYBv6BAYTLSxgfI,5161
|
57
|
+
lionagi/ln/fuzzy/_string_similarity.py,sha256=D_pblW4ecDJNlsC7P3bV_54XgcXSvCLs7ZOb8hngT-Q,8796
|
58
|
+
lionagi/ln/fuzzy/_to_dict.py,sha256=Crz4sDIIcTZS3idxynWK7U4EdHvZooPDJIsOH3t6xgQ,12068
|
65
59
|
lionagi/models/__init__.py,sha256=b7A4AaVGq4pZvYyTG8N_yvtRzwWJ8MxE9Y6mDZb8U0k,422
|
66
60
|
lionagi/models/field_model.py,sha256=JdmCp2pmwoy5HuduF21ivqyvMaJ04CTXu6Un-AeSwLU,23652
|
67
61
|
lionagi/models/hashable_model.py,sha256=oOqR3OJCU9cJfWHiG0WaEw0GMqfE2WTt4cy7WsAsiRg,829
|
@@ -93,9 +87,9 @@ lionagi/operations/instruct/instruct.py,sha256=7pxhyP5jxwpgqjmQNb1rnGF4QAVlbMENp
|
|
93
87
|
lionagi/operations/interpret/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
94
88
|
lionagi/operations/interpret/interpret.py,sha256=yl1NSp2iOm3dbycVLEcnV3absnqKoubfH15v6lQgySU,1500
|
95
89
|
lionagi/operations/operate/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
96
|
-
lionagi/operations/operate/operate.py,sha256=
|
90
|
+
lionagi/operations/operate/operate.py,sha256=pLGuoZkiGBsltIfT4TAs2fjFLXp-Rk6TVf-UAJog5NU,7488
|
97
91
|
lionagi/operations/parse/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
98
|
-
lionagi/operations/parse/parse.py,sha256=
|
92
|
+
lionagi/operations/parse/parse.py,sha256=1JutfUx1VLYXq1wvdDBswHlMPK6PyVVOt9Gju_3uvu4,6651
|
99
93
|
lionagi/operations/plan/__init__.py,sha256=yGBPll6lOqVjadbTvDLGrTlMx3FfBW-e00z7AMvg7Uo,156
|
100
94
|
lionagi/operations/plan/plan.py,sha256=qonV5kJjJCBAWfsvH7gqUj5Gyo-N-Nh_2dr-OZcDQ1Q,15315
|
101
95
|
lionagi/operations/plan/prompt.py,sha256=GUNZ8RpHIa89D-_y7GK--Spg0JADI3K13sjf_w3a2mI,993
|
@@ -117,8 +111,8 @@ lionagi/protocols/forms/flow.py,sha256=t9Ycvmb-stj0rCyvXXwd7WBcDtuCCTEKYst2aqFDV
|
|
117
111
|
lionagi/protocols/forms/form.py,sha256=B4903km_Ljz-OxYkb1ZT_cpHZSaAYYJpZMsffWlooo8,3062
|
118
112
|
lionagi/protocols/forms/report.py,sha256=SvJJjOSCTfVuqK7AKaY8ldQIGJeSK2zoyPWUV41ge2c,1609
|
119
113
|
lionagi/protocols/generic/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
120
|
-
lionagi/protocols/generic/element.py,sha256=
|
121
|
-
lionagi/protocols/generic/event.py,sha256=
|
114
|
+
lionagi/protocols/generic/element.py,sha256=w0pxw_SvDaHOgEFecQgEFg9bcGg2abTDN1v2TOe-eAQ,15717
|
115
|
+
lionagi/protocols/generic/event.py,sha256=nAhGo1-6wYprB-o5I0XkqYz0F-3xb_cqfF79G1lygPI,6550
|
122
116
|
lionagi/protocols/generic/log.py,sha256=AnPr2RweSZcJdxOK0KGb1eyvAPZmME3hEm9HraUoftQ,8212
|
123
117
|
lionagi/protocols/generic/pile.py,sha256=rB13BzHhGHcJlijXmKNUdTS1WzcBzpMM1wycPv9ogk4,37090
|
124
118
|
lionagi/protocols/generic/processor.py,sha256=uiNIldAYPEujuboLFyrIJADMlhRghy3H86hYintj5D4,11705
|
@@ -132,13 +126,13 @@ lionagi/protocols/mail/exchange.py,sha256=P1PcrFylIBeiQa8kox9H1qyJ4kjhUlbLiTUT8r
|
|
132
126
|
lionagi/protocols/mail/mail.py,sha256=RB5CUft_4J85H9nM9g6aRXomTaqKwF5xVjJacPAhoa8,1356
|
133
127
|
lionagi/protocols/mail/mailbox.py,sha256=RFQ3oi7n0ufRgeUoXwOC2Upvagf7vUspC7rTpASXNyA,2733
|
134
128
|
lionagi/protocols/mail/manager.py,sha256=Ldk2Kj3Z_N1__q0xUXWshw31pVT9s4mNndoHYM_3dSU,6964
|
135
|
-
lionagi/protocols/mail/package.py,sha256=
|
129
|
+
lionagi/protocols/mail/package.py,sha256=Rhw8zsQ7qkbvZuS7UrIqbNPTp7SnbsdWUVLIug6ugoI,2659
|
136
130
|
lionagi/protocols/messages/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
137
131
|
lionagi/protocols/messages/action_request.py,sha256=-tG9ViTSiZ2beM0onE6C552H5oth-sHLHP6KsBV8OMk,6868
|
138
132
|
lionagi/protocols/messages/action_response.py,sha256=SM3_vA9QPXz3Gc9uPhXm3zOXYheHZZGtl67Yff48Vu8,5272
|
139
133
|
lionagi/protocols/messages/assistant_response.py,sha256=e7seqUyYCXwInQrHWhNwIf9y40hgP_mH_-9-juItflw,7121
|
140
134
|
lionagi/protocols/messages/base.py,sha256=Ng1Q8yIIIFauUv53LnwDeyOrM-cSCfsHM1GwkxChf2o,2317
|
141
|
-
lionagi/protocols/messages/instruction.py,sha256=
|
135
|
+
lionagi/protocols/messages/instruction.py,sha256=HoPvxiYY_OPoIIExcVfZa4lgpVidFOlaL1GUSsw4FU4,21336
|
142
136
|
lionagi/protocols/messages/manager.py,sha256=ABDiN-QULbfbSrHVlPe3kqBxr7e7sYoT49wHQMLiT6c,16897
|
143
137
|
lionagi/protocols/messages/message.py,sha256=invP8Lu7bep_y5ve97LD9engQCHmhg7BhV5H3B0umvc,7941
|
144
138
|
lionagi/protocols/messages/system.py,sha256=x0F1C57SFHaO2-Z9cy1QshYlxv8wjl7VppooaGKbMIg,4658
|
@@ -150,17 +144,18 @@ lionagi/protocols/messages/templates/instruction_message.jinja2,sha256=L-ptw5OHx
|
|
150
144
|
lionagi/protocols/messages/templates/system_message.jinja2,sha256=JRKJ0aFpYfaXSFouKc_N4unZ35C3yZTOWhIrIdCB5qk,215
|
151
145
|
lionagi/protocols/messages/templates/tool_schemas.jinja2,sha256=ozIaSDCRjIAhLyA8VM6S-YqS0w2NcctALSwx4LjDwII,126
|
152
146
|
lionagi/protocols/operatives/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
153
|
-
lionagi/protocols/operatives/operative.py,sha256=
|
147
|
+
lionagi/protocols/operatives/operative.py,sha256=V7SvjQf9nT9GT3Ft36atrBSOKLfylGvwS2oeykbTCfk,13368
|
154
148
|
lionagi/protocols/operatives/step.py,sha256=uF92QO2KZiY3YR1cxhrbD844VFidOKfmeQn2Fv637iY,9280
|
155
149
|
lionagi/service/__init__.py,sha256=qcscXOKVQtDDQ7YV-_D9jcIABDkGaxAEsCKsBBtf4XE,992
|
156
|
-
lionagi/service/
|
150
|
+
lionagi/service/broadcaster.py,sha256=XvaUaBb6awcq-DJGVNJnnAIZUrrtOPnhWcgVgZTnGq8,1941
|
151
|
+
lionagi/service/imodel.py,sha256=kdoV3X_hwZ-PuHCtE3vDP-nfHr6pp-A4ilo_gwmDcaA,16386
|
157
152
|
lionagi/service/manager.py,sha256=tN3p0kM7pg_CEs6wXK62_B_h49Q3nrU-9qniFhw2ABE,1164
|
158
153
|
lionagi/service/rate_limited_processor.py,sha256=h2_F71aVeBrgZ0a7ARS8-8NDaAHvfWrLykI5QcNuYbk,6099
|
159
154
|
lionagi/service/resilience.py,sha256=91RPFtQY4QyNga_nuSNLsbzNE26pXJMTAfLaQqVdvmg,18714
|
160
155
|
lionagi/service/token_calculator.py,sha256=piTidArzUkIMCtOLC_HBLoZNYZcENQywgeKM31bxezM,6457
|
161
156
|
lionagi/service/types.py,sha256=KxUM3m6LMPqIO3l1nNdaSJ8vt46ozOKWFZyI4LXBTRk,1532
|
162
157
|
lionagi/service/connections/__init__.py,sha256=yHQZ7OJpCftd6CStYR8inbxjJydYdmv9kCvbUBhJ2zU,362
|
163
|
-
lionagi/service/connections/api_calling.py,sha256=
|
158
|
+
lionagi/service/connections/api_calling.py,sha256=cTPK1dEJZMkcS5qEkC_pnQQzDeVFaoDY_fnCoPaMFA0,6000
|
164
159
|
lionagi/service/connections/endpoint.py,sha256=0r4-8NPyAvLNey09BBsUr5KGJCXchBmVZm2pCe3Nbq4,15165
|
165
160
|
lionagi/service/connections/endpoint_config.py,sha256=6sA06uCzriT6p0kFxhDCFH8N6V6MVp8ytlOw5ctBhDI,5169
|
166
161
|
lionagi/service/connections/header_factory.py,sha256=IYeTQQk7r8FXcdhmW7orCxHjNO-Nb1EOXhgNK7CAp-I,1821
|
@@ -176,11 +171,12 @@ lionagi/service/connections/providers/oai_.py,sha256=3x5d6Ei1hKu8Mix0N2V2K21O9dd
|
|
176
171
|
lionagi/service/connections/providers/ollama_.py,sha256=oqYLWn81KrWoQgId4e4GD_bgrDjQLPOmhqlc5uBuFGk,4569
|
177
172
|
lionagi/service/connections/providers/perplexity_.py,sha256=1GMmxAXsKGsB-xlqxO6hW-QdqoqkU2705NLyejetFSw,1646
|
178
173
|
lionagi/service/connections/providers/types.py,sha256=omKWbmJYu_ozK_qJLcxQezVcauXTqhp4ClOWAyENEFU,807
|
179
|
-
lionagi/service/hooks/__init__.py,sha256=
|
180
|
-
lionagi/service/hooks/_types.py,sha256=
|
174
|
+
lionagi/service/hooks/__init__.py,sha256=WCfzc-Aco5PkKufDMvSYxbrLqlEvmOsaZELlWKAuG2w,464
|
175
|
+
lionagi/service/hooks/_types.py,sha256=piByW73lJ9sSfPFOO9NWhQ9aogyDBS6936jvvVXqMZw,1255
|
181
176
|
lionagi/service/hooks/_utils.py,sha256=51dqdRrln2aJCkCz8g4L6Ik_v9atdFHPzjm9ASu6OvA,2560
|
182
177
|
lionagi/service/hooks/hook_event.py,sha256=NH3PdoWwAt96GQQi99TjqAu-zU-zTgWz6pDdIaKureE,2418
|
183
178
|
lionagi/service/hooks/hook_registry.py,sha256=IEJF3UpLCmTXkd-7daFIo_p0CVTuAoA6Z8gzXkMIGsg,7870
|
179
|
+
lionagi/service/hooks/hooked_event.py,sha256=GBM-d8OdSoB59pmmH7oFyO-bLxpJjzKuJLpVKgKLNkM,4339
|
184
180
|
lionagi/service/third_party/README.md,sha256=qFjWnI8rmLivIyr6Tc-hRZh-rQwntROp76af4MBNJJc,2214
|
185
181
|
lionagi/service/third_party/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
186
182
|
lionagi/service/third_party/anthropic_models.py,sha256=oqSPSlcayYG-fS5BLiLeTtkrpaxgkPhEK_YgneumrOo,4004
|
@@ -189,15 +185,15 @@ lionagi/service/third_party/exa_models.py,sha256=G_hnekcy-DillPLzMoDQ8ZisVAL8Mp7
|
|
189
185
|
lionagi/service/third_party/openai_model_names.py,sha256=C44tnqexgc4ZU2-3I_sn5d688hf3WWx-25xBd50bvas,5121
|
190
186
|
lionagi/service/third_party/pplx_models.py,sha256=-EhyJgOWR6rzSv3zczUtk80X6c19p18Dg9KC6l8BFRQ,6473
|
191
187
|
lionagi/session/__init__.py,sha256=kDypY6L3kGPnatAw7YNQAykgg-9MlIBnlhHExaXvt-c,202
|
192
|
-
lionagi/session/branch.py,sha256=
|
188
|
+
lionagi/session/branch.py,sha256=3DnAp2UmU-41bWn_So9YLo-CJHYc7VdpcNKW6RHmE_A,59915
|
193
189
|
lionagi/session/prompts.py,sha256=GPr0jibyAAqS3awDzGC8SoCL6aWJLLCCbXY0JUuxOC0,3170
|
194
|
-
lionagi/session/session.py,sha256=
|
190
|
+
lionagi/session/session.py,sha256=WDul2I0bODztI1nNFlgr33aOt1AFqCJqH2FOdT0ADFQ,12937
|
195
191
|
lionagi/tools/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
196
192
|
lionagi/tools/base.py,sha256=hEGnE4MD0CM4UqnF0xsDRKB0aM-pyrTFHl8utHhyJLU,1897
|
197
193
|
lionagi/tools/types.py,sha256=XtJLY0m-Yi_ZLWhm0KycayvqMCZd--HxfQ0x9vFUYDE,230
|
198
194
|
lionagi/tools/file/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
|
199
|
-
lionagi/tools/file/reader.py,sha256=
|
200
|
-
lionagi-0.17.
|
201
|
-
lionagi-0.17.
|
202
|
-
lionagi-0.17.
|
203
|
-
lionagi-0.17.
|
195
|
+
lionagi/tools/file/reader.py,sha256=Q9x1UP7YmBqN53e1kUN68OmIs-D1m9EM9VVbWfM35js,9658
|
196
|
+
lionagi-0.17.6.dist-info/METADATA,sha256=yH4RA6fcmW5nqU8Y4rbA7OIUsdUfRJEU_cly2QsMj1U,23448
|
197
|
+
lionagi-0.17.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
198
|
+
lionagi-0.17.6.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
|
199
|
+
lionagi-0.17.6.dist-info/RECORD,,
|
lionagi/libs/file/_utils.py
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
def check_docling_available():
|
2
|
-
try:
|
3
|
-
from docling.document_converter import DocumentConverter # noqa: F401
|
4
|
-
|
5
|
-
return True
|
6
|
-
except Exception:
|
7
|
-
return ImportError(
|
8
|
-
"The 'docling' package is required for this feature. "
|
9
|
-
"Please install it via 'pip install lionagi[reader]'."
|
10
|
-
)
|