lionagi 0.9.0__py3-none-any.whl → 0.9.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.
@@ -3,11 +3,17 @@
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
5
  import logging
6
- from typing import TYPE_CHECKING, Any
6
+ from collections.abc import AsyncGenerator
7
+ from typing import TYPE_CHECKING, Any, Literal
7
8
 
8
9
  from pydantic import BaseModel
9
10
 
10
11
  from lionagi.libs.schema.as_readable import as_readable
12
+ from lionagi.libs.validate.common_field_validators import (
13
+ validate_model_to_type,
14
+ )
15
+ from lionagi.operatives.models.field_model import FieldModel
16
+ from lionagi.operatives.models.model_params import ModelParams
11
17
  from lionagi.operatives.types import Instruct
12
18
  from lionagi.service.imodel import iModel
13
19
  from lionagi.utils import copy
@@ -30,15 +36,133 @@ async def ReAct(
30
36
  tools: Any = None,
31
37
  tool_schemas: Any = None,
32
38
  response_format: type[BaseModel] | BaseModel = None,
39
+ intermediate_response_options: list[BaseModel] | BaseModel = None,
40
+ intermediate_listable: bool = False,
41
+ reasoning_effort: Literal["low", "medium", "high"] = None,
33
42
  extension_allowed: bool = True,
34
43
  max_extensions: int | None = 3,
35
44
  response_kwargs: dict | None = None,
45
+ display_as: Literal["json", "yaml"] = "yaml",
36
46
  return_analysis: bool = False,
37
47
  analysis_model: iModel | None = None,
38
48
  verbose_analysis: bool = False,
39
49
  verbose_length: int = None,
40
50
  **kwargs,
41
51
  ):
52
+ outs = []
53
+ if verbose_analysis:
54
+ async for i in ReActStream(
55
+ branch=branch,
56
+ instruct=instruct,
57
+ interpret=interpret,
58
+ interpret_domain=interpret_domain,
59
+ interpret_style=interpret_style,
60
+ interpret_sample=interpret_sample,
61
+ interpret_model=interpret_model,
62
+ interpret_kwargs=interpret_kwargs,
63
+ tools=tools,
64
+ tool_schemas=tool_schemas,
65
+ response_format=response_format,
66
+ intermediate_response_options=intermediate_response_options,
67
+ intermediate_listable=intermediate_listable,
68
+ reasoning_effort=reasoning_effort,
69
+ extension_allowed=extension_allowed,
70
+ max_extensions=max_extensions,
71
+ response_kwargs=response_kwargs,
72
+ analysis_model=analysis_model,
73
+ verbose_analysis=verbose_analysis,
74
+ display_as=display_as,
75
+ verbose_length=verbose_length,
76
+ **kwargs,
77
+ ):
78
+ analysis, str_ = i
79
+ str_ += "\n---------\n"
80
+ as_readable(str_, md=True, display_str=True)
81
+ outs.append(analysis)
82
+ else:
83
+ async for i in ReActStream(
84
+ branch=branch,
85
+ instruct=instruct,
86
+ interpret=interpret,
87
+ interpret_domain=interpret_domain,
88
+ interpret_style=interpret_style,
89
+ interpret_sample=interpret_sample,
90
+ interpret_model=interpret_model,
91
+ interpret_kwargs=interpret_kwargs,
92
+ tools=tools,
93
+ tool_schemas=tool_schemas,
94
+ response_format=response_format,
95
+ intermediate_response_options=intermediate_response_options,
96
+ intermediate_listable=intermediate_listable,
97
+ reasoning_effort=reasoning_effort,
98
+ extension_allowed=extension_allowed,
99
+ max_extensions=max_extensions,
100
+ response_kwargs=response_kwargs,
101
+ analysis_model=analysis_model,
102
+ display_as=display_as,
103
+ verbose_length=verbose_length,
104
+ **kwargs,
105
+ ):
106
+ outs.append(i)
107
+ if return_analysis:
108
+ return outs
109
+ return outs[-1]
110
+
111
+
112
+ async def ReActStream(
113
+ branch: "Branch",
114
+ instruct: Instruct | dict[str, Any],
115
+ interpret: bool = False,
116
+ interpret_domain: str | None = None,
117
+ interpret_style: str | None = None,
118
+ interpret_sample: str | None = None,
119
+ interpret_model: str | None = None,
120
+ interpret_kwargs: dict | None = None,
121
+ tools: Any = None,
122
+ tool_schemas: Any = None,
123
+ response_format: type[BaseModel] | BaseModel = None,
124
+ intermediate_response_options: list[BaseModel] | BaseModel = None,
125
+ intermediate_listable: bool = False,
126
+ reasoning_effort: Literal["low", "medium", "high"] = None,
127
+ extension_allowed: bool = True,
128
+ max_extensions: int | None = 3,
129
+ response_kwargs: dict | None = None,
130
+ analysis_model: iModel | None = None,
131
+ verbose_analysis: bool = False,
132
+ display_as: Literal["json", "yaml"] = "yaml",
133
+ verbose_length: int = None,
134
+ **kwargs,
135
+ ) -> AsyncGenerator:
136
+ irfm: FieldModel | None = None
137
+
138
+ if intermediate_response_options is not None:
139
+ iro = (
140
+ [intermediate_response_options]
141
+ if not isinstance(intermediate_response_options, list)
142
+ else intermediate_response_options
143
+ )
144
+ field_models = []
145
+ for i in iro:
146
+ type_ = validate_model_to_type(None, i)
147
+ fm = FieldModel(
148
+ name=str(type_.__name__).lower(),
149
+ annotation=type_ | None,
150
+ validator=lambda cls, x: None if x == {} else x,
151
+ )
152
+ field_models.append(fm)
153
+
154
+ m_ = ModelParams(
155
+ name="IntermediateResponseOptions", field_models=field_models
156
+ ).create_new_model()
157
+
158
+ irfm = FieldModel(
159
+ name="intermediate_response_options",
160
+ annotation=(
161
+ m_ | None if not intermediate_listable else list[m_] | None
162
+ ),
163
+ description="Optional intermediate deliverable outputs. fill as needed ",
164
+ validator=lambda cls, x: None if not x else x,
165
+ )
42
166
 
43
167
  # If no tools or tool schemas are provided, default to "all tools"
44
168
  if not tools and not tool_schemas:
@@ -60,15 +184,16 @@ async def ReAct(
60
184
  **(interpret_kwargs or {}),
61
185
  )
62
186
  if verbose_analysis:
63
- print("\n### Interpreted instruction:\n")
64
- as_readable(
187
+ str_ = "\n### Interpreted instruction:\n"
188
+ str_ += as_readable(
65
189
  instruction_str,
66
190
  md=True,
67
- format_curly=True,
68
- display_str=True,
191
+ format_curly=True if display_as == "yaml" else False,
69
192
  max_chars=verbose_length,
70
193
  )
71
- print("\n----------------------------\n")
194
+ yield instruction_str, str_
195
+ else:
196
+ yield instruction_str
72
197
 
73
198
  # Convert Instruct to dict if necessary
74
199
  instruct_dict = (
@@ -98,19 +223,18 @@ async def ReAct(
98
223
  chat_model=analysis_model or branch.chat_model,
99
224
  **kwargs_for_operate,
100
225
  )
101
- analyses = [analysis]
102
-
103
226
  # If verbose, show round #1 analysis
104
227
  if verbose_analysis:
105
- print("\n### ReAct Round No.1 Analysis:\n")
106
- as_readable(
228
+ str_ = "\n### ReAct Round No.1 Analysis:\n"
229
+ str_ += as_readable(
107
230
  analysis,
108
231
  md=True,
109
- format_curly=True,
110
- display_str=True,
232
+ format_curly=True if display_as == "yaml" else False,
111
233
  max_chars=verbose_length,
112
234
  )
113
- print("\n----------------------------\n")
235
+ yield analysis, str_
236
+ else:
237
+ yield analysis
114
238
 
115
239
  # Validate and clamp max_extensions if needed
116
240
  if max_extensions and max_extensions > 100:
@@ -124,8 +248,13 @@ async def ReAct(
124
248
  round_count = 1
125
249
 
126
250
  while (
127
- extension_allowed
128
- and analysis.extension_needed
251
+ extension_allowed and analysis.extension_needed
252
+ if hasattr(analysis, "extension_needed")
253
+ else (
254
+ analysis.get("extension_needed", None)
255
+ if isinstance(analysis, dict)
256
+ else False
257
+ )
129
258
  and (extensions if max_extensions else 0) > 0
130
259
  ):
131
260
  new_instruction = None
@@ -145,6 +274,21 @@ async def ReAct(
145
274
  operate_kwargs["action_strategy"] = analysis.action_strategy
146
275
  if analysis.action_batch_size:
147
276
  operate_kwargs["action_batch_size"] = analysis.action_batch_size
277
+ if irfm:
278
+ operate_kwargs["field_models"] = operate_kwargs.get(
279
+ "field_models", []
280
+ ) + [irfm]
281
+ if reasoning_effort:
282
+ guide = None
283
+ if reasoning_effort == "low":
284
+ guide = "Quick concise reasoning.\n"
285
+ if reasoning_effort == "medium":
286
+ guide = "Reasonably balanced reasoning.\n"
287
+ if reasoning_effort == "high":
288
+ guide = "Thorough, try as hard as you can in reasoning.\n"
289
+ operate_kwargs["guidance"] = guide + operate_kwargs.get(
290
+ "guidance", ""
291
+ )
148
292
 
149
293
  analysis = await branch.operate(
150
294
  instruction=new_instruction,
@@ -152,20 +296,22 @@ async def ReAct(
152
296
  tool_schemas=tool_schemas,
153
297
  **operate_kwargs,
154
298
  )
155
- analyses.append(analysis)
156
299
  round_count += 1
157
300
 
158
301
  # If verbose, show round analysis
159
302
  if verbose_analysis:
160
- print(f"\n### ReAct Round No.{round_count} Analysis:\n")
161
- as_readable(
303
+ str_ = f"\n### ReAct Round No.{round_count} Analysis:\n"
304
+
305
+ str_ += as_readable(
162
306
  analysis,
163
307
  md=True,
164
- format_curly=True,
165
- display_str=True,
308
+ format_curly=True if display_as == "yaml" else False,
166
309
  max_chars=verbose_length,
167
310
  )
168
- print("\n----------------------------\n")
311
+
312
+ yield analysis, str_
313
+ else:
314
+ yield analysis
169
315
 
170
316
  if extensions:
171
317
  extensions -= 1
@@ -177,28 +323,29 @@ async def ReAct(
177
323
  if not response_format:
178
324
  response_format = Analysis
179
325
 
180
- out = await branch.operate(
181
- instruction=answer_prompt,
182
- response_format=response_format,
183
- **(response_kwargs or {}),
184
- )
326
+ try:
327
+ out = await branch.operate(
328
+ instruction=answer_prompt,
329
+ response_format=response_format,
330
+ **(response_kwargs or {}),
331
+ )
332
+ except Exception:
333
+ out = branch.msgs.last_response.response
334
+
185
335
  if isinstance(out, Analysis):
186
- out = out.analysis
336
+ out = out.answer
187
337
 
188
338
  if verbose_analysis:
189
- print("\n### ReAct Response:\n")
190
- as_readable(
191
- analysis,
339
+ str_ = "\n### ReAct Final Answer:\n"
340
+ str_ += as_readable(
341
+ out,
192
342
  md=True,
193
- format_curly=True,
194
- display_str=True,
343
+ format_curly=True if display_as == "yaml" else False,
195
344
  max_chars=verbose_length,
196
345
  )
197
- print("\n----------------------------\n")
198
-
199
- if return_analysis:
200
- return out, analyses
201
- return out
346
+ yield out, str_
347
+ else:
348
+ yield out
202
349
 
203
350
 
204
351
  # TODO: Do partial intermeditate output for longer analysis with form and report
@@ -36,7 +36,9 @@ class ReActAnalysis(BaseModel):
36
36
  FIRST_EXT_PROMPT: ClassVar[str] = (
37
37
  "You can perform multiple reason-action steps for accuracy. "
38
38
  "If you are not ready to finalize, set extension_needed to True. "
39
- "You have up to {extensions} expansions. Please continue."
39
+ "hint: you should set extension_needed to True if the overall goal"
40
+ "is not yet achieved. Do not set it to False, if you are just providing"
41
+ "an interim answer. You have up to {extensions} expansions. Please continue."
40
42
  )
41
43
  CONTINUE_EXT_PROMPT: ClassVar[str] = (
42
44
  "Another round is available. You may do multiple actions if needed. "
@@ -49,7 +51,11 @@ class ReActAnalysis(BaseModel):
49
51
 
50
52
  analysis: str = Field(
51
53
  ...,
52
- description="Free-form reasoning or chain-of-thought summary. Must be consistent with the plan.",
54
+ description=(
55
+ "Free-form reasoning or chain-of-thought summary. Must be consistent with"
56
+ " the plan. Commonly used for divide_and_conquer, brainstorming, reflections, "
57
+ "regurgitation, review_checkpoints ...etc."
58
+ ),
53
59
  )
54
60
 
55
61
  planned_actions: list[PlannedAction] = Field(
@@ -79,7 +79,7 @@ class EndpointConfig(BaseModel):
79
79
  requires_tokens: bool = False
80
80
  api_version: str | None = None
81
81
  allowed_roles: list[str] | None = None
82
- request_options: type | None = None
82
+ request_options: type | None = Field(None, exclude=True)
83
83
 
84
84
 
85
85
  class EndPoint(ABC):
@@ -1,11 +1,19 @@
1
1
  # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
-
4
+ import warnings
5
5
  from collections.abc import AsyncGenerator
6
6
 
7
7
  from .base import EndPoint
8
8
 
9
+ warnings.filterwarnings(
10
+ "ignore",
11
+ message=".*Valid config keys have changed in V2.*",
12
+ category=UserWarning,
13
+ module="pydantic._internal._config",
14
+ )
15
+
16
+
9
17
  CHAT_COMPLETION_CONFIG = {
10
18
  "endpoint": "chat/completions",
11
19
  "method": "post",
lionagi/service/imodel.py CHANGED
@@ -4,7 +4,6 @@
4
4
 
5
5
  import asyncio
6
6
  import os
7
- import warnings
8
7
  from collections.abc import AsyncGenerator, Callable
9
8
 
10
9
  from pydantic import BaseModel
@@ -16,13 +15,6 @@ from .endpoints.base import APICalling, EndPoint
16
15
  from .endpoints.match_endpoint import match_endpoint
17
16
  from .endpoints.rate_limited_processor import RateLimitedAPIExecutor
18
17
 
19
- warnings.filterwarnings(
20
- "ignore",
21
- message=".*Valid config keys have changed in V2.*",
22
- category=UserWarning,
23
- module="pydantic._internal._config",
24
- )
25
-
26
18
 
27
19
  class iModel:
28
20
  """Manages API calls for a specific provider with optional rate-limiting.
lionagi/session/branch.py CHANGED
@@ -2,6 +2,7 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
+ from collections.abc import AsyncGenerator
5
6
  from enum import Enum
6
7
  from typing import TYPE_CHECKING, Any, Literal
7
8
 
@@ -9,6 +10,7 @@ import pandas as pd
9
10
  from jinja2 import Template
10
11
  from pydantic import BaseModel, Field, JsonValue, PrivateAttr
11
12
 
13
+ from lionagi.libs.schema.as_readable import as_readable
12
14
  from lionagi.operatives.types import (
13
15
  ActionManager,
14
16
  FieldModel,
@@ -1621,13 +1623,18 @@ class Branch(Element, Communicatable, Relational):
1621
1623
  interpret_domain: str | None = None,
1622
1624
  interpret_style: str | None = None,
1623
1625
  interpret_sample: str | None = None,
1626
+ interpret_model: str | None = None,
1624
1627
  interpret_kwargs: dict | None = None,
1625
1628
  tools: Any = None,
1626
1629
  tool_schemas: Any = None,
1627
- response_format: type[BaseModel] = None,
1628
- extension_allowed: bool = False,
1629
- max_extensions: int = None,
1630
+ response_format: type[BaseModel] | BaseModel = None,
1631
+ intermediate_response_options: list[BaseModel] | BaseModel = None,
1632
+ intermediate_listable: bool = False,
1633
+ reasoning_effort: Literal["low", "medium", "high"] = None,
1634
+ extension_allowed: bool = True,
1635
+ max_extensions: int | None = 3,
1630
1636
  response_kwargs: dict | None = None,
1637
+ display_as: Literal["json", "yaml"] = "yaml",
1631
1638
  return_analysis: bool = False,
1632
1639
  analysis_model: iModel | None = None,
1633
1640
  verbose: bool = False,
@@ -1721,8 +1728,69 @@ class Branch(Element, Communicatable, Relational):
1721
1728
  verbose_action=verbose,
1722
1729
  verbose_analysis=verbose,
1723
1730
  verbose_length=verbose_length,
1731
+ interpret_model=interpret_model,
1732
+ intermediate_response_options=intermediate_response_options,
1733
+ intermediate_listable=intermediate_listable,
1734
+ reasoning_effort=reasoning_effort,
1735
+ display_as=display_as,
1724
1736
  **kwargs,
1725
1737
  )
1726
1738
 
1739
+ async def ReActStream(
1740
+ self,
1741
+ instruct: Instruct | dict[str, Any],
1742
+ interpret: bool = False,
1743
+ interpret_domain: str | None = None,
1744
+ interpret_style: str | None = None,
1745
+ interpret_sample: str | None = None,
1746
+ interpret_model: str | None = None,
1747
+ interpret_kwargs: dict | None = None,
1748
+ tools: Any = None,
1749
+ tool_schemas: Any = None,
1750
+ response_format: type[BaseModel] | BaseModel = None,
1751
+ intermediate_response_options: list[BaseModel] | BaseModel = None,
1752
+ intermediate_listable: bool = False,
1753
+ reasoning_effort: Literal["low", "medium", "high"] = None,
1754
+ extension_allowed: bool = True,
1755
+ max_extensions: int | None = 3,
1756
+ response_kwargs: dict | None = None,
1757
+ analysis_model: iModel | None = None,
1758
+ verbose: bool = False,
1759
+ display_as: Literal["json", "yaml"] = "yaml",
1760
+ verbose_length: int = None,
1761
+ **kwargs,
1762
+ ) -> AsyncGenerator:
1763
+ from lionagi.operations.ReAct.ReAct import ReActStream
1764
+
1765
+ async for result in ReActStream(
1766
+ self,
1767
+ instruct,
1768
+ interpret=interpret,
1769
+ interpret_domain=interpret_domain,
1770
+ interpret_style=interpret_style,
1771
+ interpret_sample=interpret_sample,
1772
+ interpret_model=interpret_model,
1773
+ interpret_kwargs=interpret_kwargs,
1774
+ tools=tools,
1775
+ tool_schemas=tool_schemas,
1776
+ response_format=response_format,
1777
+ intermediate_response_options=intermediate_response_options,
1778
+ intermediate_listable=intermediate_listable,
1779
+ reasoning_effort=reasoning_effort,
1780
+ extension_allowed=extension_allowed,
1781
+ max_extensions=max_extensions,
1782
+ response_kwargs=response_kwargs,
1783
+ analysis_model=analysis_model,
1784
+ verbose_analysis=True,
1785
+ display_as=display_as,
1786
+ verbose_length=verbose_length,
1787
+ **kwargs,
1788
+ ):
1789
+ analysis, str_ = result
1790
+ if verbose:
1791
+ str_ += "\n---------\n"
1792
+ as_readable(str_, md=True, display_str=True)
1793
+ yield analysis
1794
+
1727
1795
 
1728
1796
  # File: lionagi/session/branch.py
lionagi/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.9.0"
1
+ __version__ = "0.9.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.9.0
3
+ Version: 0.9.2
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -4,7 +4,7 @@ lionagi/_errors.py,sha256=JlBTFJnRWtVYcRxKb7fWFiJHLbykl1E19mSJ8sXYVxg,455
4
4
  lionagi/_types.py,sha256=9g7iytvSj3UjZxD-jL06_fxuNfgZyWT3Qnp0XYp1wQU,63
5
5
  lionagi/settings.py,sha256=W52mM34E6jXF3GyqCFzVREKZrmnUqtZm_BVDsUiDI_s,1627
6
6
  lionagi/utils.py,sha256=_A98YIoJMeQXKchx9m_cWTOutjdZRZASWTOSIRGTOB4,73177
7
- lionagi/version.py,sha256=H9NWRZb7NbeRRPLP_V1fARmLNXranorVM-OOY-8_2ug,22
7
+ lionagi/version.py,sha256=gqT-BGoeEItda9fICQDvLbxEjWRIBhFJxPxxKvmHLUo,22
8
8
  lionagi/libs/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
9
9
  lionagi/libs/parse.py,sha256=JRS3bql0InHJqATnAatl-hQv4N--XXw4P77JHhTFnrc,1011
10
10
  lionagi/libs/file/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
@@ -48,9 +48,9 @@ lionagi/operations/__init__.py,sha256=2HExKTx2J3iKWsvS9YaF6i5SZgqcpAJkVmWbi2H5A5
48
48
  lionagi/operations/manager.py,sha256=H7UY86PIxvxKdzJY9YVsWyJcqlwLWhVyvm4sYePH_uY,565
49
49
  lionagi/operations/types.py,sha256=fM8HphnbBifMzhoKKvdl3JxGCBHlEGPJEYkLWj9b7vE,704
50
50
  lionagi/operations/utils.py,sha256=LrWr_JEyJmSw5RL03KZhWgDKYsjFk0-OS8SoaGU7Jhs,1220
51
- lionagi/operations/ReAct/ReAct.py,sha256=eYi77GVoVvRiQbddxfxt2SX_Gw3owisDPHu9AdJPfeo,6378
51
+ lionagi/operations/ReAct/ReAct.py,sha256=eBCQOzVHv85uEL4YH1qv8NhbzM0t-qyKZ4JI7tQRXQ8,11971
52
52
  lionagi/operations/ReAct/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
53
- lionagi/operations/ReAct/utils.py,sha256=7o4yMLisxakqjfIuQpevMQ4qMUHYZhXxTiasdltvAMA,3274
53
+ lionagi/operations/ReAct/utils.py,sha256=jXf9LafAg0GtZajXqT4jOLJHW_Y4eL-hbz5_OlFCBh8,3612
54
54
  lionagi/operations/_act/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
55
55
  lionagi/operations/_act/act.py,sha256=CunHTTZcS6xNUe0xKSDgtMJ7-ucSvHeW4BtmVjXnaxk,2958
56
56
  lionagi/operations/brainstorm/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
@@ -161,12 +161,12 @@ lionagi/protocols/messages/templates/instruction_message.jinja2,sha256=L-ptw5OHx
161
161
  lionagi/protocols/messages/templates/system_message.jinja2,sha256=JRKJ0aFpYfaXSFouKc_N4unZ35C3yZTOWhIrIdCB5qk,215
162
162
  lionagi/protocols/messages/templates/tool_schemas.jinja2,sha256=ozIaSDCRjIAhLyA8VM6S-YqS0w2NcctALSwx4LjDwII,126
163
163
  lionagi/service/__init__.py,sha256=DMGXIqPsmut9H5GT0ZeSzQIzYzzPwI-2gLXydpbwiV8,21
164
- lionagi/service/imodel.py,sha256=5V7SPU1EQn5J5YMe-I1B6R_EZeeHZyymeoVpc9jG7nM,14453
164
+ lionagi/service/imodel.py,sha256=SgLLuNXSJwmHJTfRpqaUlC0zF2qOyasTkVqrg_dXrsw,14272
165
165
  lionagi/service/manager.py,sha256=FkuqAtLErqLmXNnDtuAdTUFo4uuE_VL660BBGBhzInU,1435
166
166
  lionagi/service/types.py,sha256=CHPi8Bxl_yJ1pl2jYZBOrTHbT8_oO9sK75d4LMB651g,486
167
167
  lionagi/service/endpoints/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
168
- lionagi/service/endpoints/base.py,sha256=WMbLWORKp6vSzqPLQyQSndP3AApd55JalqisRCDl55s,23461
169
- lionagi/service/endpoints/chat_completion.py,sha256=TBxT7A15MhN9HnpNh35yFD0C7QlYhT9iKNutnLeA0r4,2783
168
+ lionagi/service/endpoints/base.py,sha256=WuXs2tDrOxbbv9-UkiAgpVcM_6nuCNmvvry7eN1GuoI,23482
169
+ lionagi/service/endpoints/chat_completion.py,sha256=nihV7kCYm7ixdm8dH0JW7vKjqH9yIom4QDXGeDwuO6E,2964
170
170
  lionagi/service/endpoints/match_endpoint.py,sha256=hPCqFwVirj5g9Husec980OCUynjRmr0zQzrs7O4yP74,1874
171
171
  lionagi/service/endpoints/rate_limited_processor.py,sha256=P0CsMyhuG8OHCPYe2qez92Bm7v2ZRq4L5I6LOiAoGYs,5199
172
172
  lionagi/service/endpoints/token_calculator.py,sha256=-AKwDvV7C8k8MTmd62ymT0ETSUPWBJ_DQKLZUutlyfg,6161
@@ -188,7 +188,7 @@ lionagi/service/providers/perplexity_/__init__.py,sha256=5y5joOZzfFWERl75auAcNcK
188
188
  lionagi/service/providers/perplexity_/chat_completions.py,sha256=O4MIS_3xIINGjkAZdlw0Bu_jAfBDR4VZA1F8JW2EU1M,1197
189
189
  lionagi/service/providers/perplexity_/models.py,sha256=gXH4XGkhZ4aFxvMSDTlHq9Rz1mhu3aTENXAtE-BIr6U,4866
190
190
  lionagi/session/__init__.py,sha256=5y5joOZzfFWERl75auAcNcKC3lImVJ5ZZGvvHZUFCJM,112
191
- lionagi/session/branch.py,sha256=YInMLLtz4t1FIuYvzRDZSGc4jWi0Lj9yQgkrS8o-WLA,68650
191
+ lionagi/session/branch.py,sha256=XL0P507Jfqk9LhC8rDvajkjVE8FkPx7hnLltb-LdqHw,71503
192
192
  lionagi/session/prompts.py,sha256=AhuHL19s0TijVZX3tMKUKMi6l88xeVdpkuEn2vJSRyU,3236
193
193
  lionagi/session/session.py,sha256=8SuNMiJX6IAW6Ou8aDK0LsVG7zcD5yd22sakMyrd3pw,8987
194
194
  lionagi/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -196,7 +196,7 @@ lionagi/tools/base.py,sha256=ffaIcLF_uwEphCkP_wsa3UfkqVenML3HpsnR5kRCTtA,236
196
196
  lionagi/tools/types.py,sha256=O6ipx7zX0piaIQ3c8V3zHWrXH-1gdIe-KQ4xTPSiLp0,63
197
197
  lionagi/tools/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
198
  lionagi/tools/file/reader.py,sha256=cMkS-r7wQb4gQSldLyCCOyD73VkUDSio9RxzsQ2xBxo,7706
199
- lionagi-0.9.0.dist-info/METADATA,sha256=0llO7nRGPGkUC2xYysYJmVhUYJeetIXNnSfk35I09AI,18053
200
- lionagi-0.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
201
- lionagi-0.9.0.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
202
- lionagi-0.9.0.dist-info/RECORD,,
199
+ lionagi-0.9.2.dist-info/METADATA,sha256=bs44CDbfErTh8xI14pq3HZTcqNpR5j6V-gwjWvPOLho,18053
200
+ lionagi-0.9.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
201
+ lionagi-0.9.2.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
202
+ lionagi-0.9.2.dist-info/RECORD,,