lionagi 0.3.0__py3-none-any.whl → 0.3.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.
@@ -1,4 +1,5 @@
1
1
  # lionagi/core/session/directive_mixin.py
2
+ from pydantic import BaseModel
2
3
 
3
4
  from lionagi.core.unit import Unit
4
5
 
@@ -33,13 +34,14 @@ class DirectiveMixin:
33
34
  default=None,
34
35
  timeout: float = None,
35
36
  timing: bool = False,
36
- return_branch=False,
37
37
  images=None,
38
38
  image_path=None,
39
39
  template=None,
40
40
  verbose=True,
41
41
  formatter=None,
42
42
  format_kwargs=None,
43
+ pydantic_model: type[BaseModel] = None,
44
+ return_pydantic_model: bool = False,
43
45
  **kwargs,
44
46
  ):
45
47
  """
@@ -120,7 +122,7 @@ class DirectiveMixin:
120
122
 
121
123
  images = ImageUtil.read_image_to_base64(image_path)
122
124
 
123
- return await directive.chat(
125
+ output = await directive.chat(
124
126
  instruction=instruction,
125
127
  context=context,
126
128
  sender=sender,
@@ -139,10 +141,19 @@ class DirectiveMixin:
139
141
  timeout=timeout,
140
142
  timing=timing,
141
143
  clear_messages=clear_messages,
142
- return_branch=return_branch,
143
144
  images=images,
145
+ return_pydantic_model=return_pydantic_model,
146
+ pydantic_model=pydantic_model,
147
+ return_branch=False,
144
148
  **kwargs,
145
149
  )
150
+ if (
151
+ isinstance(output, tuple | list)
152
+ and len(output) == 2
153
+ and output[0] == output[1]
154
+ ):
155
+ output = output[0]
156
+ return output
146
157
 
147
158
  async def direct(
148
159
  self,
lionagi/core/unit/unit.py CHANGED
@@ -1,5 +1,9 @@
1
+ import logging
1
2
  from collections.abc import Callable
2
3
 
4
+ from lionfuncs import to_dict
5
+ from pydantic import BaseModel
6
+
3
7
  from lionagi.core.collections import iModel
4
8
  from lionagi.core.collections.abc import Directive
5
9
  from lionagi.core.report.form import Form
@@ -71,6 +75,8 @@ class Unit(Directive, DirectiveMixin):
71
75
  return_branch=False,
72
76
  formatter=None,
73
77
  format_kwargs={},
78
+ pydantic_model: type[BaseModel] = None,
79
+ return_pydantic_model: bool = False,
74
80
  **kwargs,
75
81
  ):
76
82
  """
@@ -100,7 +106,17 @@ class Unit(Directive, DirectiveMixin):
100
106
  Any: The processed response.
101
107
  """
102
108
  kwargs = {**retry_kwargs, **kwargs}
103
- return await rcall(
109
+
110
+ if pydantic_model:
111
+ if form:
112
+ raise ValueError("Cannot use both form and pydantic_model.")
113
+ if requested_fields:
114
+ raise ValueError(
115
+ "Cannot use both requested_fields and pydantic_model."
116
+ )
117
+ requested_fields = pydantic_model.model_json_schema()["properties"]
118
+
119
+ output, branch = await rcall(
104
120
  self._chat,
105
121
  instruction=instruction,
106
122
  context=context,
@@ -118,11 +134,27 @@ class Unit(Directive, DirectiveMixin):
118
134
  imodel=imodel,
119
135
  clear_messages=clear_messages,
120
136
  use_annotation=use_annotation,
121
- return_branch=return_branch,
137
+ return_branch=True,
122
138
  formatter=formatter,
123
139
  format_kwargs=format_kwargs,
124
140
  **kwargs,
125
141
  )
142
+ if isinstance(output, tuple | list) and len(output) == 1:
143
+ output = output[0]
144
+
145
+ if isinstance(output, tuple | list) and len(output) == 2:
146
+ if output[0] == output[1]:
147
+ output = output[0]
148
+
149
+ if return_pydantic_model:
150
+ try:
151
+ a_ = to_dict(output, recursive=True, max_recursive_depth=3)
152
+ output = pydantic_model(**a_)
153
+ return output, branch if return_branch else output
154
+ except Exception as e:
155
+ logging.error(f"Error converting to pydantic model: {e}")
156
+
157
+ return output, branch if return_branch else output
126
158
 
127
159
  async def direct(
128
160
  self,
lionagi/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.3.0"
1
+ __version__ = "0.3.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lionagi
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Towards automated general intelligence.
5
5
  Author: HaiyangLi
6
6
  Author-email: quantocean.li@gmail.com
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Requires-Dist: aiocache (>=0.12.0,<0.13.0)
13
13
  Requires-Dist: ipython (>=8.0.0,<9.0.0)
14
- Requires-Dist: lion-core (>=0.3.15,<0.4.0)
14
+ Requires-Dist: lion-core (>=0.3.17,<0.4.0)
15
15
  Requires-Dist: lion-openai (>=0.1.5,<0.2.0)
16
16
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
17
17
  Description-Content-Type: text/markdown
@@ -89,7 +89,7 @@ lionagi/core/rule/string.py,sha256=ZoTuqidyR_vS0BNKEZEj_Oc5Ie8hhy2qaBFGX5J4CrU,1
89
89
  lionagi/core/rule/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
90
  lionagi/core/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
91
  lionagi/core/session/branch.py,sha256=cs51rCG4OSPENVrniOlvKAKBXlcyLbzP032HuiCaIX8,14381
92
- lionagi/core/session/directive_mixin.py,sha256=Rsm8-hyLmcD9WesI8EpbCPSWcjW9jm64_Rb83TX_gdE,11717
92
+ lionagi/core/session/directive_mixin.py,sha256=bUHuCDH70BZiPKutRXHXgb5vKSJPL9abQLaIkYnC0Kk,12100
93
93
  lionagi/core/session/session.py,sha256=cLieD42-g8s2ticNY2YyzAAwjwxkyk5q7M5dVlHlMBQ,10479
94
94
  lionagi/core/structure/__init__.py,sha256=DkeLUlrb7rGx3nZ04aADU9HXXu5mZTf_DBwT0xhzIv4,7
95
95
  lionagi/core/structure/chain.py,sha256=DkeLUlrb7rGx3nZ04aADU9HXXu5mZTf_DBwT0xhzIv4,7
@@ -105,7 +105,7 @@ 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=_8kV9vUsMLxQcQNp4UiKvCglULecYzINKp51TgMTKkg,14066
108
+ lionagi/core/unit/unit.py,sha256=1kFz_rLM1f8OKn4pbwL2WiVyqTzyEPOmHL9OdIiwzHI,15252
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
111
  lionagi/core/unit/util.py,sha256=yEIf4ksWLB4X0IZNmwvIphvXiRbtWtGqbWCPnIt1u-s,2048
@@ -219,8 +219,8 @@ lionagi/lions/researcher/data_source/finhub_.py,sha256=W63daXgIwHJQ6TDMR2ALQIDk1
219
219
  lionagi/lions/researcher/data_source/google_.py,sha256=401SKHQaSpxiOUoXl7stadl4qeF7SIX72lUNK7bKesg,6797
220
220
  lionagi/lions/researcher/data_source/wiki_.py,sha256=UPoa2dk_y5sELu7_rkdme2auDpUmc_Dn0Avgjwr2X2g,3145
221
221
  lionagi/lions/researcher/data_source/yfinance_.py,sha256=snAf897J69MyAc6fcFjF0irrMjbAh81EZ3RvaFT3hxE,977
222
- lionagi/version.py,sha256=VrXpHDu3erkzwl_WXrqINBm9xWkcyUy53IQOj042dOs,22
223
- lionagi-0.3.0.dist-info/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
224
- lionagi-0.3.0.dist-info/METADATA,sha256=KXd51cEiQSFRu_38WPzaK_0lR47WJrc86x0qXSFAWZo,3149
225
- lionagi-0.3.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
226
- lionagi-0.3.0.dist-info/RECORD,,
222
+ lionagi/version.py,sha256=vNiWJ14r_cw5t_7UDqDQIVZvladKFGyHH2avsLpN7Vg,22
223
+ lionagi-0.3.2.dist-info/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
224
+ lionagi-0.3.2.dist-info/METADATA,sha256=7DrVUgP-AuWQaUBz_bfuAEvjRRRPw-yAmeX7349rf40,3149
225
+ lionagi-0.3.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
226
+ lionagi-0.3.2.dist-info/RECORD,,