lionagi 0.3.3__py3-none-any.whl → 0.3.5__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- lionagi/core/unit/unit.py +14 -5
- lionagi/core/unit/util.py +27 -0
- lionagi/version.py +1 -1
- {lionagi-0.3.3.dist-info → lionagi-0.3.5.dist-info}/METADATA +1 -1
- {lionagi-0.3.3.dist-info → lionagi-0.3.5.dist-info}/RECORD +7 -7
- {lionagi-0.3.3.dist-info → lionagi-0.3.5.dist-info}/LICENSE +0 -0
- {lionagi-0.3.3.dist-info → lionagi-0.3.5.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,11 @@ 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
|
+
}
|
118
122
|
|
119
123
|
output, branch = await rcall(
|
120
124
|
self._chat,
|
@@ -148,8 +152,13 @@ class Unit(Directive, DirectiveMixin):
|
|
148
152
|
|
149
153
|
if return_pydantic_model:
|
150
154
|
try:
|
151
|
-
a_ = to_dict(
|
152
|
-
|
155
|
+
a_ = to_dict(
|
156
|
+
output,
|
157
|
+
recursive=True,
|
158
|
+
max_recursive_depth=5,
|
159
|
+
fuzzy_parse=True,
|
160
|
+
)
|
161
|
+
output = pydantic_model.model_validate(a_)
|
153
162
|
return output, branch if return_branch else output
|
154
163
|
except Exception as e:
|
155
164
|
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.5"
|
@@ -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=a3rauBXe50SBUgndv7Q9bqF4h7pJCYdsoTfPf1e8GCs,15548
|
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=ThnCuF3X7rsQSd5PAea_jfYA70ZmhLvkFcLBxBPwZnY,22
|
233
|
+
lionagi-0.3.5.dist-info/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
|
234
|
+
lionagi-0.3.5.dist-info/METADATA,sha256=preDwKyaqarnjXriVlSdy8ZzqVem9onrDw4BZVwyGpY,3149
|
235
|
+
lionagi-0.3.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
236
|
+
lionagi-0.3.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|