lionagi 0.3.3__py3-none-any.whl → 0.3.4__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/core/unit/unit.py +16 -5
- lionagi/core/unit/util.py +27 -0
- lionagi/version.py +1 -1
- {lionagi-0.3.3.dist-info → lionagi-0.3.4.dist-info}/METADATA +1 -1
- {lionagi-0.3.3.dist-info → lionagi-0.3.4.dist-info}/RECORD +7 -7
- {lionagi-0.3.3.dist-info → lionagi-0.3.4.dist-info}/LICENSE +0 -0
- {lionagi-0.3.3.dist-info → lionagi-0.3.4.dist-info}/WHEEL +0 -0
lionagi/core/unit/unit.py
CHANGED
@@ -12,7 +12,7 @@ from lionagi.libs.ln_func_call import rcall
|
|
12
12
|
|
13
13
|
from .unit_form import UnitForm
|
14
14
|
from .unit_mixin import DirectiveMixin
|
15
|
-
from .util import retry_kwargs
|
15
|
+
from .util import break_down_annotation, retry_kwargs
|
16
16
|
|
17
17
|
|
18
18
|
class Unit(Directive, DirectiveMixin):
|
@@ -75,7 +75,7 @@ class Unit(Directive, DirectiveMixin):
|
|
75
75
|
return_branch=False,
|
76
76
|
formatter=None,
|
77
77
|
format_kwargs={},
|
78
|
-
pydantic_model: type[BaseModel] = None,
|
78
|
+
pydantic_model: type[BaseModel] | BaseModel = None,
|
79
79
|
return_pydantic_model: bool = False,
|
80
80
|
**kwargs,
|
81
81
|
):
|
@@ -114,7 +114,13 @@ class Unit(Directive, DirectiveMixin):
|
|
114
114
|
raise ValueError(
|
115
115
|
"Cannot use both requested_fields and pydantic_model."
|
116
116
|
)
|
117
|
-
requested_fields = pydantic_model
|
117
|
+
requested_fields = break_down_annotation(pydantic_model)
|
118
|
+
context = {
|
119
|
+
"info": context,
|
120
|
+
"return_guidance": pydantic_model.model_json_schema()[
|
121
|
+
"properties"
|
122
|
+
],
|
123
|
+
}
|
118
124
|
|
119
125
|
output, branch = await rcall(
|
120
126
|
self._chat,
|
@@ -148,8 +154,13 @@ class Unit(Directive, DirectiveMixin):
|
|
148
154
|
|
149
155
|
if return_pydantic_model:
|
150
156
|
try:
|
151
|
-
a_ = to_dict(
|
152
|
-
|
157
|
+
a_ = to_dict(
|
158
|
+
output,
|
159
|
+
recursive=True,
|
160
|
+
max_recursive_depth=5,
|
161
|
+
fuzzy_parse=True,
|
162
|
+
)
|
163
|
+
output = pydantic_model.model_validate(a_)
|
153
164
|
return output, branch if return_branch else output
|
154
165
|
except Exception as e:
|
155
166
|
logging.error(f"Error converting to pydantic model: {e}")
|
lionagi/core/unit/util.py
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
import inspect
|
2
|
+
from typing import get_args
|
3
|
+
|
4
|
+
from pydantic import BaseModel
|
5
|
+
|
1
6
|
retry_kwargs = {
|
2
7
|
"retries": 0, # kwargs for rcall, number of retries if failed
|
3
8
|
"delay": 0, # number of seconds to delay before retrying
|
@@ -74,3 +79,25 @@ async def _direct(
|
|
74
79
|
)
|
75
80
|
|
76
81
|
return await directive.direct(form=form, return_form=True, **kwargs)
|
82
|
+
|
83
|
+
|
84
|
+
def break_down_annotation(model: type[BaseModel]):
|
85
|
+
|
86
|
+
def _ispydantic_model(x):
|
87
|
+
return inspect.isclass(x) and issubclass(x, BaseModel)
|
88
|
+
|
89
|
+
if not _ispydantic_model(model):
|
90
|
+
return model
|
91
|
+
|
92
|
+
out = {}
|
93
|
+
for k, v in model.__annotations__.items():
|
94
|
+
if _ispydantic_model(v):
|
95
|
+
out[k] = break_down_annotation(v)
|
96
|
+
elif "list" in str(v) and get_args(v):
|
97
|
+
v = get_args(v)[0]
|
98
|
+
if _ispydantic_model(v):
|
99
|
+
v = break_down_annotation(v)
|
100
|
+
out[k] = [v]
|
101
|
+
else:
|
102
|
+
out[k] = v
|
103
|
+
return out
|
lionagi/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.3.
|
1
|
+
__version__ = "0.3.4"
|
@@ -105,10 +105,10 @@ lionagi/core/unit/template/plan.py,sha256=i4FmKEB8eRsRCsTanvfoX-2RZ8SaM1qvLBluuY
|
|
105
105
|
lionagi/core/unit/template/predict.py,sha256=-EIZQo0ZjGKy3MiM0AtqmbnJpbXcrwtSCON5n3jcyVo,3160
|
106
106
|
lionagi/core/unit/template/score.py,sha256=ReUaIIr-NLjunSy4NNXQpIsH28NNceGBAUuPCRptzMc,3809
|
107
107
|
lionagi/core/unit/template/select.py,sha256=VSpkphJl9bHSE8i0X6MMJD8LB5QwOj1UORHm8VDIRKE,3047
|
108
|
-
lionagi/core/unit/unit.py,sha256=
|
108
|
+
lionagi/core/unit/unit.py,sha256=5XJ8k401cqVNLOJpNcHul3IG6WflC--AlSg2IprlSkk,15600
|
109
109
|
lionagi/core/unit/unit_form.py,sha256=zK_ij3Tod5FwMVdIIhdVoEFvD3br-YM9RPe7WsOIW2s,10980
|
110
110
|
lionagi/core/unit/unit_mixin.py,sha256=c8GvHzgc65iJKQBKv71ET3afLPsIz5-Ce-4Eo6_bZiw,38823
|
111
|
-
lionagi/core/unit/util.py,sha256=
|
111
|
+
lionagi/core/unit/util.py,sha256=WN2Jop-LUwQNYJNubFPhOZrisQ6SQq-XMhD_KhzLkgE,2707
|
112
112
|
lionagi/core/validator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
113
113
|
lionagi/core/validator/validator.py,sha256=901wwmqL92XNi25ajv57bNKIKZhmu-KprNLArMUiGqg,12255
|
114
114
|
lionagi/core/work/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -229,8 +229,8 @@ lionagi/lions/researcher/data_source/finhub_.py,sha256=W63daXgIwHJQ6TDMR2ALQIDk1
|
|
229
229
|
lionagi/lions/researcher/data_source/google_.py,sha256=401SKHQaSpxiOUoXl7stadl4qeF7SIX72lUNK7bKesg,6797
|
230
230
|
lionagi/lions/researcher/data_source/wiki_.py,sha256=UPoa2dk_y5sELu7_rkdme2auDpUmc_Dn0Avgjwr2X2g,3145
|
231
231
|
lionagi/lions/researcher/data_source/yfinance_.py,sha256=snAf897J69MyAc6fcFjF0irrMjbAh81EZ3RvaFT3hxE,977
|
232
|
-
lionagi/version.py,sha256=
|
233
|
-
lionagi-0.3.
|
234
|
-
lionagi-0.3.
|
235
|
-
lionagi-0.3.
|
236
|
-
lionagi-0.3.
|
232
|
+
lionagi/version.py,sha256=oYLGMpySamd16KLiaBTfRyrAS7_oyp-TOEHmzmeumwg,22
|
233
|
+
lionagi-0.3.4.dist-info/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
|
234
|
+
lionagi-0.3.4.dist-info/METADATA,sha256=VM0JO4wP1qKYkLZ7Al0lLiOi0ZaWreAjxbJmkyhdaOo,3149
|
235
|
+
lionagi-0.3.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
236
|
+
lionagi-0.3.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|