lionagi 0.18.1__py3-none-any.whl → 0.18.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,222 +1,203 @@
1
1
  # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
- from pydantic import BaseModel
5
- from pydantic.fields import FieldInfo
4
+ """Step factory methods for creating configured Operative instances."""
6
5
 
7
- from lionagi.models import FieldModel, ModelParams
6
+ from typing import TYPE_CHECKING, Literal
7
+
8
+ from lionagi.ln.types import Operable, Spec
8
9
 
9
10
  from ..fields import get_default_field
10
11
  from .operative import Operative
11
12
 
13
+ if TYPE_CHECKING:
14
+ from pydantic import BaseModel
15
+
12
16
 
13
17
  class Step:
14
- """Utility class providing methods to create and manage Operative instances for steps."""
18
+ """Factory methods for common Operative patterns.
19
+
20
+ Provides methods to create Operative instances with pre-configured
21
+ field specifications for common patterns like ReAct, QA, and task execution.
22
+ """
15
23
 
16
24
  @staticmethod
17
25
  def request_operative(
18
26
  *,
19
- operative: Operative = None,
20
- operative_name: str | None = None,
27
+ name: str | None = None,
28
+ operative_name: str | None = None, # backward compat
29
+ adapter: Literal["pydantic"] = "pydantic",
21
30
  reason: bool = False,
22
31
  actions: bool = False,
23
- request_params: ModelParams | None = None,
24
- parameter_fields: dict[str, FieldInfo] | None = None,
25
- base_type: type[BaseModel] | None = None,
26
- field_models: list[FieldModel] | None = None,
27
- exclude_fields: list[str] | None = None,
28
- new_model_name: str | None = None,
29
- field_descriptions: dict[str, str] | None = None,
32
+ fields: dict[str, Spec] | None = None,
33
+ field_models: list | None = None, # backward compat
34
+ max_retries: int = 3,
35
+ auto_retry_parse: bool = True,
36
+ base_type: type["BaseModel"] | None = None,
37
+ # Deprecated/ignored parameters for backward compatibility
38
+ parse_kwargs: dict | None = None,
39
+ exclude_fields: list | None = None,
40
+ field_descriptions: dict | None = None,
30
41
  inherit_base: bool = True,
31
42
  config_dict: dict | None = None,
32
43
  doc: str | None = None,
33
44
  frozen: bool = False,
34
- max_retries: int = None,
35
- auto_retry_parse: bool = True,
36
- parse_kwargs: dict | None = None,
45
+ new_model_name: str | None = None,
46
+ parameter_fields: dict | None = None,
47
+ request_params: dict | None = None,
48
+ **kwargs,
37
49
  ) -> Operative:
38
- """Creates an Operative instance configured for request handling.
50
+ """Create request-configured Operative with common field patterns.
39
51
 
40
52
  Args:
41
- operative_name (str, optional): Name of the operative.
42
- reason (bool, optional): Whether to include reason field.
43
- actions (bool, optional): Whether to include action fields.
44
- request_params (ModelParams, optional): Parameters for the new model.
45
- parameter_fields (dict[str, FieldInfo], optional): Parameter fields for the model.
46
- base_type (type[BaseModel], optional): Base type for the model.
47
- field_models (list[FieldModel], optional): List of field models.
48
- exclude_fields (list[str], optional): List of fields to exclude.
49
- new_model_name (str | None, optional): Name of the new model.
50
- field_descriptions (dict[str, str], optional): Descriptions for the fields.
51
- inherit_base (bool, optional): Whether to inherit base.
52
- config_dict (dict | None, optional): Configuration dictionary.
53
- doc (str | None, optional): Documentation string.
54
- frozen (bool, optional): Whether the model is frozen.
55
- max_retries (int, optional): Maximum number of retries.
53
+ name: Operative name
54
+ operative_name: (Deprecated) Use 'name' instead
55
+ adapter: Validation framework
56
+ reason: Add reasoning trace field
57
+ actions: Add action request/response fields
58
+ fields: Additional custom field specs (dict[str, Spec])
59
+ field_models: (Deprecated) Use 'fields' instead - list of FieldModel/Spec
60
+ max_retries: Max validation retries
61
+ auto_retry_parse: Auto-retry on parse failure
62
+ base_type: Base Pydantic model to extend
63
+ parse_kwargs: (Deprecated) Ignored - parse config handled internally
64
+ exclude_fields: (Deprecated) Ignored
65
+ field_descriptions: (Deprecated) Ignored
66
+ inherit_base: (Deprecated) Ignored
67
+ config_dict: (Deprecated) Ignored
68
+ doc: (Deprecated) Ignored
69
+ frozen: (Deprecated) Ignored
70
+ new_model_name: (Deprecated) Ignored
71
+ parameter_fields: (Deprecated) Ignored
72
+ request_params: (Deprecated) Ignored
56
73
 
57
74
  Returns:
58
- Operative: The configured operative instance.
75
+ Configured Operative instance
59
76
  """
77
+ # Handle backward compatibility
78
+ name = name or operative_name
79
+
80
+ # Convert field_models list to fields dict if provided
81
+ if field_models and not fields:
82
+ from lionagi.models import FieldModel
83
+
84
+ fields = {}
85
+ for fm in field_models:
86
+ # Convert FieldModel to Spec if needed
87
+ if isinstance(fm, FieldModel):
88
+ spec = fm.to_spec()
89
+ elif isinstance(fm, Spec):
90
+ spec = fm
91
+ else:
92
+ continue # Skip invalid types
93
+
94
+ # Use spec name as key
95
+ if spec.name:
96
+ fields[spec.name] = spec
97
+
98
+ # Build fields dict to avoid duplicates (dict preserves insertion order in Python 3.7+)
99
+ fields_dict = {}
100
+
101
+ # Add common fields (convert FieldModel to Spec)
102
+ if reason:
103
+ reason_spec = get_default_field("reason").to_spec()
104
+ fields_dict["reason"] = reason_spec
105
+
106
+ if actions:
107
+ fields_dict["action_required"] = get_default_field(
108
+ "action_required"
109
+ ).to_spec()
110
+ fields_dict["action_requests"] = get_default_field(
111
+ "action_requests"
112
+ ).to_spec()
113
+ fields_dict["action_responses"] = get_default_field(
114
+ "action_responses"
115
+ ).to_spec()
116
+
117
+ # Add custom fields (will override defaults if same name)
118
+ if fields:
119
+ for field_name, spec in fields.items():
120
+ # Ensure spec has name
121
+ if not spec.name:
122
+ # Update spec with name using Spec metadata update
123
+ spec = Spec(
124
+ spec.base_type,
125
+ name=field_name,
126
+ metadata=spec.metadata,
127
+ )
128
+ fields_dict[spec.name] = spec
129
+
130
+ # Convert to list
131
+ all_fields = list(fields_dict.values())
132
+
133
+ # Create Operable with all fields
134
+ operable = Operable(
135
+ tuple(all_fields),
136
+ name=name or (base_type.__name__ if base_type else "Operative"),
137
+ )
60
138
 
61
- params = {}
62
- if operative:
63
- params = operative.model_dump()
64
- request_params = operative.request_params.model_dump()
65
- field_models = request_params.field_models
66
-
67
- field_models = field_models or []
68
- exclude_fields = exclude_fields or []
69
- field_descriptions = field_descriptions or {}
70
- if reason and (fm := get_default_field("reason")) not in field_models:
71
- field_models.append(fm)
72
- if (
73
- actions
74
- and (fm := get_default_field("action_requests"))
75
- not in field_models
76
- ):
77
- fm2 = get_default_field("action_required")
78
- field_models.extend([fm, fm2])
79
- if isinstance(request_params, ModelParams):
80
- request_params = request_params.to_dict()
81
-
82
- request_params = request_params or {}
83
- request_params_fields = {
84
- "parameter_fields": parameter_fields,
85
- "field_models": field_models,
86
- "exclude_fields": exclude_fields,
87
- "field_descriptions": field_descriptions,
88
- "inherit_base": inherit_base,
89
- "config_dict": config_dict,
90
- "doc": doc,
91
- "frozen": frozen,
92
- "base_type": base_type,
93
- "name": new_model_name,
94
- }
95
- request_params.update(
96
- {k: v for k, v in request_params_fields.items() if v is not None}
139
+ # Request excludes action_responses
140
+ request_exclude = {"action_responses"} if actions else set()
141
+
142
+ return Operative(
143
+ name=name,
144
+ adapter=adapter,
145
+ max_retries=max_retries,
146
+ auto_retry_parse=auto_retry_parse,
147
+ base_type=base_type,
148
+ operable=operable,
149
+ request_exclude=request_exclude,
97
150
  )
98
- request_params = ModelParams(**request_params)
99
- if max_retries:
100
- params["max_retries"] = max_retries
101
- if operative_name:
102
- params["name"] = operative_name
103
- if isinstance(auto_retry_parse, bool):
104
- params["auto_retry_parse"] = auto_retry_parse
105
- if parse_kwargs:
106
- params["parse_kwargs"] = parse_kwargs
107
- params["request_params"] = request_params
108
- return Operative(**params)
109
151
 
110
152
  @staticmethod
111
153
  def respond_operative(
112
- *,
113
154
  operative: Operative,
114
- additional_data: dict | None = None,
115
- response_params: ModelParams | None = None,
116
- field_models: list[FieldModel] | None = None,
117
- frozen_response: bool = False,
118
- response_config_dict: dict | None = None,
119
- response_doc: str | None = None,
120
- exclude_fields: list[str] | None = None,
155
+ additional_fields: dict[str, Spec] | None = None,
121
156
  ) -> Operative:
122
- """Updates the operative with response parameters and data.
157
+ """Create response type from operative.
123
158
 
124
159
  Args:
125
- operative (Operative): The operative instance to update.
126
- additional_data (dict | None, optional): Additional data to include in the response.
127
- response_params (ModelParams | None, optional): Parameters for the response model.
128
- field_models (list[FieldModel] | None, optional): List of field models.
129
- frozen_response (bool, optional): Whether the response model is frozen.
130
- response_config_dict (dict | None, optional): Configuration dictionary for the response.
131
- response_doc (str | None, optional): Documentation string for the response.
132
- exclude_fields (list[str] | None, optional): List of fields to exclude.
160
+ operative: Source operative with all fields
161
+ additional_fields: Extra fields for response
133
162
 
134
163
  Returns:
135
- Operative: The updated operative instance.
164
+ Operative with response type configured
136
165
  """
137
-
138
- additional_data = additional_data or {}
139
- field_models = field_models or []
140
- if hasattr(operative.response_model, "action_required"):
141
- for i in {
142
- "action_requests",
143
- "action_required",
144
- "action_responses",
145
- }:
146
- fm = get_default_field(i)
147
- if fm not in field_models:
148
- field_models.append(fm)
149
-
150
- if "reason" in type(operative.response_model).model_fields:
151
- field_models.append(get_default_field("reason"))
152
-
153
- operative = Step._create_response_type(
154
- operative=operative,
155
- response_params=response_params,
156
- field_models=field_models,
157
- frozen_response=frozen_response,
158
- response_config_dict=response_config_dict,
159
- response_doc=response_doc,
160
- exclude_fields=exclude_fields,
161
- )
162
-
163
- data = operative.response_model.model_dump()
164
- data.update(additional_data or {})
165
- operative.response_model = operative.response_type.model_validate(data)
166
+ # If additional fields provided, create new Operative
167
+ if additional_fields:
168
+ # Get existing fields
169
+ existing_fields = list(operative.operable.__op_fields__)
170
+
171
+ # Add new fields
172
+ for field_name, spec in additional_fields.items():
173
+ if not spec.name:
174
+ spec = Spec(
175
+ spec.base_type,
176
+ name=field_name,
177
+ metadata=spec.metadata,
178
+ )
179
+ existing_fields.append(spec)
180
+
181
+ # Create new Operable
182
+ new_operable = Operable(
183
+ tuple(existing_fields),
184
+ name=operative.name,
185
+ )
186
+
187
+ # Create new Operative
188
+ return Operative(
189
+ name=operative.name,
190
+ adapter=operative.adapter,
191
+ max_retries=operative.max_retries,
192
+ auto_retry_parse=operative.auto_retry_parse,
193
+ base_type=operative.base_type,
194
+ operable=new_operable,
195
+ request_exclude=operative.request_exclude,
196
+ )
197
+
198
+ # Otherwise just create response model
199
+ operative.create_response_model()
166
200
  return operative
167
201
 
168
- @staticmethod
169
- def _create_response_type(
170
- operative: Operative,
171
- response_params: ModelParams | None = None,
172
- response_validators: dict | None = None,
173
- frozen_response: bool = False,
174
- response_config_dict: dict | None = None,
175
- response_doc: str | None = None,
176
- field_models: list[FieldModel] | None = None,
177
- exclude_fields: list[str] | None = None,
178
- ) -> Operative:
179
- """Internal method to create a response type for the operative.
180
-
181
- Args:
182
- operative (Operative): The operative instance.
183
- response_params (ModelParams | None, optional): Parameters for the response model.
184
- response_validators (dict | None, optional): Validators for the response model.
185
- frozen_response (bool, optional): Whether the response model is frozen.
186
- response_config_dict (dict | None, optional): Configuration dictionary for the response.
187
- response_doc (str | None, optional): Documentation string for the response.
188
- field_models (list[FieldModel] | None, optional): List of field models.
189
- exclude_fields (list[str] | None, optional): List of fields to exclude.
190
-
191
- Returns:
192
- Operative: The operative instance with updated response type.
193
- """
194
202
 
195
- field_models = field_models or []
196
-
197
- if (
198
- hasattr(operative.request_type, "action_required")
199
- and operative.response_model.action_required
200
- ):
201
- for i in {
202
- "action_requests",
203
- "action_required",
204
- "action_responses",
205
- }:
206
- fm = get_default_field(i)
207
- if fm not in field_models:
208
- field_models.append(fm)
209
-
210
- if hasattr(operative.request_type, "reason"):
211
- field_models.append(get_default_field("reason"))
212
-
213
- operative.create_response_type(
214
- response_params=response_params,
215
- field_models=field_models,
216
- exclude_fields=exclude_fields or [],
217
- doc=response_doc,
218
- config_dict=response_config_dict,
219
- frozen=frozen_response,
220
- validators=response_validators,
221
- )
222
- return operative
203
+ __all__ = ("Step",)
@@ -9,7 +9,7 @@ from pydantic import BaseModel, JsonValue
9
9
 
10
10
  from lionagi.ln import AlcallParams
11
11
  from lionagi.ln.fuzzy import FuzzyMatchKeysParams
12
- from lionagi.ln.types import Params
12
+ from lionagi.ln.types import ModelConfig, Params
13
13
  from lionagi.protocols.action.tool import ToolRef
14
14
  from lionagi.protocols.types import ID, SenderRecipient
15
15
  from lionagi.service.imodel import iModel
@@ -43,7 +43,7 @@ class MorphParam(Params):
43
43
  transformations between message states with well-defined parameters.
44
44
  """
45
45
 
46
- _none_as_sentinel: ClassVar[bool] = True
46
+ _config: ClassVar[ModelConfig] = ModelConfig(none_as_sentinel=True)
47
47
 
48
48
 
49
49
  @dataclass(slots=True, frozen=True, init=False)
@@ -57,7 +57,7 @@ class ChatParam(MorphParam):
57
57
  This gets mapped to InstructionContent.prompt_context during message creation.
58
58
  """
59
59
 
60
- _none_as_sentinel: ClassVar[bool] = True
60
+ _config: ClassVar[ModelConfig] = ModelConfig(none_as_sentinel=True)
61
61
  guidance: JsonValue = None
62
62
  context: JsonValue = None
63
63
  sender: SenderRecipient = None
@@ -81,7 +81,7 @@ class InterpretParam(MorphParam):
81
81
  transforming content according to specified guidelines.
82
82
  """
83
83
 
84
- _none_as_sentinel: ClassVar[bool] = True
84
+ _config: ClassVar[ModelConfig] = ModelConfig(none_as_sentinel=True)
85
85
  domain: str = None
86
86
  style: str = None
87
87
  sample_writing: str = None
@@ -97,7 +97,7 @@ class ParseParam(MorphParam):
97
97
  fuzzy matching, and error handling strategies.
98
98
  """
99
99
 
100
- _none_as_sentinel: ClassVar[bool] = True
100
+ _config: ClassVar[ModelConfig] = ModelConfig(none_as_sentinel=True)
101
101
  response_format: type[BaseModel] | dict = None
102
102
  fuzzy_match_params: FuzzyMatchKeysParams | dict = None
103
103
  handle_validation: HandleValidation = "raise"
@@ -114,7 +114,7 @@ class ActionParam(MorphParam):
114
114
  for action-based operations.
115
115
  """
116
116
 
117
- _none_as_sentinel: ClassVar[bool] = True
117
+ _config: ClassVar[ModelConfig] = ModelConfig(none_as_sentinel=True)
118
118
  action_call_params: AlcallParams = None
119
119
  tools: ToolRef = None
120
120
  strategy: Literal["concurrent", "sequential"] = "concurrent"
@@ -6,7 +6,7 @@ from typing import Any, ClassVar
6
6
 
7
7
  from pydantic import field_serializer, field_validator
8
8
 
9
- from lionagi.ln.types import DataClass
9
+ from lionagi.ln.types import DataClass, ModelConfig
10
10
 
11
11
  from .._concepts import Sendable
12
12
  from ..graph.node import Node
@@ -22,7 +22,7 @@ from .base import (
22
22
  class MessageContent(DataClass):
23
23
  """A base class for message content structures."""
24
24
 
25
- _none_as_sentinel: ClassVar[bool] = True
25
+ _config: ClassVar[ModelConfig] = ModelConfig(none_as_sentinel=True)
26
26
 
27
27
  @property
28
28
  def rendered(self) -> str:
lionagi/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.18.1"
1
+ __version__ = "0.18.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.18.1
3
+ Version: 0.18.2
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -1,4 +1,4 @@
1
- lionagi/__init__.py,sha256=JJlMMYTLN1B9OradguqKL-HdWec5X0jqc2laoqhSdbQ,2470
1
+ lionagi/__init__.py,sha256=G9dRgXWADxhrceGnTWNy5quGu-LGaeeqJ-e6viHNG5k,4052
2
2
  lionagi/_class_registry.py,sha256=vp3YkOelyv9azuQFfhGN_9N_n5fAKAY2MtpSLeNpjW0,3108
3
3
  lionagi/_errors.py,sha256=QRiBlcArmdJbXbt0fku5LfpPFeK3It9dFsPE-vyikNE,3692
4
4
  lionagi/_types.py,sha256=nGtsaSee7FaIZvym3PH8NPaN5PN8QscTgcZfpMNaMEo,1296
@@ -6,10 +6,13 @@ lionagi/config.py,sha256=meBzsT7xYDh1FwxGz_Q-XfOw3XkxPtlSJ1vqx9xk5YE,4779
6
6
  lionagi/fields.py,sha256=r7r4-3nSvBBRuArztgOTn2zpNBmkQvZvf63IJeeW5_k,2036
7
7
  lionagi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  lionagi/utils.py,sha256=j4wRrPiuHprx7l7j3z8U9NlPWMzrM8lHv5q3K_DJLPU,7080
9
- lionagi/version.py,sha256=i8LHPc0qiYueFP9CAFrtufkGZfMfDAhFNqWW_Pa8HsI,23
9
+ lionagi/version.py,sha256=GYySpgpz2Cs3F3nz_H9h8KIG60jkP6f1a--08qCTJCQ,23
10
10
  lionagi/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  lionagi/adapters/_utils.py,sha256=sniMG1LDDkwJNzUF2K32jv7rA6Y1QcohgyNclYsptzI,453
12
12
  lionagi/adapters/async_postgres_adapter.py,sha256=-7Ah0A8JQvEEYBe2zMkze-65gYiUbpcJGxhYnzrv9ok,3285
13
+ lionagi/adapters/spec_adapters/__init__.py,sha256=5Fe2mZ0hwGKIiUyoZSBe-7uk2IGUbQSmFrB9rZBXmU4,234
14
+ lionagi/adapters/spec_adapters/_protocol.py,sha256=V5og2qjwjtxBE-VskwuI6UrVWdcoFRcOb2ejD_Ml1Ew,6971
15
+ lionagi/adapters/spec_adapters/pydantic_field.py,sha256=kuUwoIHpWAbvtdAh0Xk04GFkNHjU5OA_mVzP9hcQxlQ,5408
13
16
  lionagi/libs/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
14
17
  lionagi/libs/file/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
15
18
  lionagi/libs/file/chunk.py,sha256=_wHdZY9OCDILWWwWOvvS22T9CYGV9bW1zRUi96-UqDg,8970
@@ -27,13 +30,12 @@ lionagi/libs/validate/common_field_validators.py,sha256=9PUabJZVFGeXShOOZ5jliRaX
27
30
  lionagi/libs/validate/to_num.py,sha256=ZRHDjpTCykPfDIZZa4rZKNaR_8ZHbPDFlw9rc02DrII,11610
28
31
  lionagi/libs/validate/validate_boolean.py,sha256=WcszKSMksFBCels2OMd0qElqDauyq53-h7cuOM_nIKU,3610
29
32
  lionagi/ln/__init__.py,sha256=rehWx09QyfPJrl4go_aEdvuW8sSBp_aYPq9mCSoq1Gk,1641
30
- lionagi/ln/_async_call.py,sha256=hjei0sW-G92xDwQo_OI4qKVp1iP8N2eccJT1fAftV9w,9607
33
+ lionagi/ln/_async_call.py,sha256=Nmrain7hI0qL96WKH8PQjmbGjnNi-7JwpuwdtK4vKpQ,9647
31
34
  lionagi/ln/_hash.py,sha256=dIrQgOAdrWkVQcaCJXN-XIaA1sIZSYtAU302fywrtJU,4756
32
35
  lionagi/ln/_json_dump.py,sha256=zOeoOE3JbaGAzL-lfAdMqdgaXWYXFliqcgXsZ_pxonI,10347
33
36
  lionagi/ln/_list_call.py,sha256=zvISmCeNAH7yjBcusQI1s17n556tILgePhRMdAM2plA,2831
34
37
  lionagi/ln/_to_list.py,sha256=V9hC3dpyMhRJwuuyOCU_wJygzEB6sJVZ0fmIRtM6uTg,6993
35
38
  lionagi/ln/_utils.py,sha256=5Z_AsDxdtH5wNB-P4IiihhH0dYUcZMT-hTxFQBQPwL0,4303
36
- lionagi/ln/types.py,sha256=vUprqqW1nfHDNrOGk417NHEeEXpTpJqP9eqlMuEOaBI,11118
37
39
  lionagi/ln/concurrency/__init__.py,sha256=xt_GLZ1Zb-nC-RnrNt8jOBWb_uf1md__B1R5cplMShg,1190
38
40
  lionagi/ln/concurrency/_compat.py,sha256=itxdRzl95PLEBQvNY0zTriF39kymaNRpKncT8QsOomA,2065
39
41
  lionagi/ln/concurrency/cancel.py,sha256=8JlWy_EVto4Fls1yQLBteCbpn4zP6ydnqIa_EL5kxZc,3313
@@ -46,14 +48,19 @@ lionagi/ln/concurrency/utils.py,sha256=MUWupnFtWxR15hWnligLZrS4Z1SAQ7j3cuCG08cK3
46
48
  lionagi/ln/fuzzy/__init__.py,sha256=Py7hPV7uk5rPRGvQ4yPjMzXS32aQ7QVkO-mX69FfsMM,544
47
49
  lionagi/ln/fuzzy/_extract_json.py,sha256=rYHaK36yzRpie8qO-T7mZKOue2yqCLx3ixiuKhsaKvg,2224
48
50
  lionagi/ln/fuzzy/_fuzzy_json.py,sha256=S0lCkNvprn7XZHoYdRfzXueexSbjxTeLPkpyJ9IAO3A,3860
49
- lionagi/ln/fuzzy/_fuzzy_match.py,sha256=-rmYVjPtiAYaUAacQfhSwahVqQP03FBpfZrGFH7Zq98,5832
51
+ lionagi/ln/fuzzy/_fuzzy_match.py,sha256=MUEMrM9JuMEq8ZNURi2TGKkCPRppeV0L61eTjfrOIFM,5872
50
52
  lionagi/ln/fuzzy/_fuzzy_validate.py,sha256=XuafNXflTerQrQYV0S6MrQHR3_6DuYBv6BAYTLSxgfI,5161
51
53
  lionagi/ln/fuzzy/_string_similarity.py,sha256=01u73Bp4YPN-s7YMzQjbYM5d6mjKGSjJpar14Wab_5U,8792
52
54
  lionagi/ln/fuzzy/_to_dict.py,sha256=Crz4sDIIcTZS3idxynWK7U4EdHvZooPDJIsOH3t6xgQ,12068
55
+ lionagi/ln/types/__init__.py,sha256=r2DR6ltl1yKnu_Vyh3RqbQuVbP3E4ym_slSjtvucDbY,806
56
+ lionagi/ln/types/_sentinel.py,sha256=X_9o2BNW-k5z0UcW6xEJFLcrvyidbk6e4MNk4O_YANQ,3927
57
+ lionagi/ln/types/base.py,sha256=d_EuEFi6_jE-pG2tKT-q_W15TJRHJodJmy8tprusjzg,9927
58
+ lionagi/ln/types/operable.py,sha256=dy0sIXVcIIp70r4O04ndshNSozVocQDHjUgEftL4VoU,6845
59
+ lionagi/ln/types/spec.py,sha256=KNqNTttCuYabOiwCJoLFkameupsQprsU9qeIcrSK99o,13828
53
60
  lionagi/models/__init__.py,sha256=Nq0RqoT7DXrpS1_lVgfrlZXl2_E2_E_HHANcbPlDfh8,418
54
- lionagi/models/field_model.py,sha256=TgdkUTvVm50xf91auwbT2l257KGpHqP5P59jYQzl-Q0,29801
61
+ lionagi/models/field_model.py,sha256=uKLcc8ZpJwkSAaJ2hWLa_NF2ZU7oRDgwTEY10JnJJ8g,31511
55
62
  lionagi/models/hashable_model.py,sha256=U2Cw9dSdkX0PjyBY2kZ1UwvL_Rd69sVX4wA6nO_o1UQ,3242
56
- lionagi/models/model_params.py,sha256=ZFknRIm1Qj-gBTNG1_jz7mjmoogXd2NpFObYPK42OK4,12110
63
+ lionagi/models/model_params.py,sha256=NPxVFYQuDuXMYnuG5u_rHR_mL7lVd-GWAMv1HmqRwik,12142
57
64
  lionagi/models/operable_model.py,sha256=t6EKeJzG4wqo4tHroPe873R_hMLpcWq4gUiwCC_8pcM,20175
58
65
  lionagi/models/schema_model.py,sha256=atgySn8e3zcQdFDERMrfSS1ZKzRZjQCAlNNlnp22vIg,663
59
66
  lionagi/operations/__init__.py,sha256=A9GvZqRuzxV98wrwo0-Y2bOTpz0TTPePHDTOj0cYR9Y,440
@@ -63,7 +70,7 @@ lionagi/operations/fields.py,sha256=dEbQUUOutT6DLMqNyVOfUsuhGvWJsXPoMEQtXhMNv3c,
63
70
  lionagi/operations/flow.py,sha256=v7E9_ybTGnOE3kKMoYIgkNqxMp9_SUHHTGNQQQuswrc,25014
64
71
  lionagi/operations/manager.py,sha256=YZr3VjPAZVVFd_bIjF1aoQqzzKZHNA1kcqefNi5QFFM,683
65
72
  lionagi/operations/node.py,sha256=XjnsuqXgYxN6Kj5UvNdjdOWQs4rW2iGAanhNocmHuj0,3437
66
- lionagi/operations/types.py,sha256=yX2N589BAHxCHNm_dtoEd5eIvsp9HoStmAmpdHn8Epw,3935
73
+ lionagi/operations/types.py,sha256=MTnLvkrm1oVfXVFxG-pTxYz4MhpHvZBDJX7XoqoIjrQ,4083
67
74
  lionagi/operations/ReAct/ReAct.py,sha256=zgGo806jwFvDDw9r-e4Q60ERpsIUf1a6D6vPp6QJubM,20671
68
75
  lionagi/operations/ReAct/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
69
76
  lionagi/operations/ReAct/utils.py,sha256=YzKZaqD_Yb016grdx7hqSR2irM-idY9-FgCjgp9zffg,4300
@@ -76,9 +83,9 @@ lionagi/operations/communicate/communicate.py,sha256=zQ-15MwJmw6sic0HdOBl8EJvVUB
76
83
  lionagi/operations/interpret/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
77
84
  lionagi/operations/interpret/interpret.py,sha256=uVK9Yk4-n92DZfEQrNQ-IU7PJd_IfVJWJENbmVCf_Ns,2497
78
85
  lionagi/operations/operate/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
79
- lionagi/operations/operate/operate.py,sha256=hjCODeSv0hft9tXjnDy0bsYXijYelJxsLG9wYQJbPWE,10340
80
- lionagi/operations/operate/operative.py,sha256=nswc7mhZLJES_5m6tfYEUofAICZz1uf2PIR8KzUA09c,14330
81
- lionagi/operations/operate/step.py,sha256=vzNSOyXXj4w5F0d-dmCCUC2GxG1ToEddhiOSKUeyC24,9103
86
+ lionagi/operations/operate/operate.py,sha256=Cv1E5-MKBcJWOoVn1Ek3i_JKbWl5ORwNgzDMzSnteZo,11160
87
+ lionagi/operations/operate/operative.py,sha256=8Mu6m2J9zTUesYxGN64NsGHIuakOubMznbVUv6T3Lgs,6543
88
+ lionagi/operations/operate/step.py,sha256=dNxzmFCe7wj6RYAlbJcpwgWsh1QhNM383EvgDcJRSLw,7093
82
89
  lionagi/operations/parse/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
83
90
  lionagi/operations/parse/parse.py,sha256=LwQoKNbkADSnhkrwMZeOPlTFAjsKC1QmnorbtKsdNX8,6699
84
91
  lionagi/operations/select/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
@@ -111,7 +118,7 @@ lionagi/protocols/messages/assistant_response.py,sha256=jv1svk_pk4sc_AslHMDn7CtI
111
118
  lionagi/protocols/messages/base.py,sha256=xWDX2kpJZmH7NVfzuNZ_9jGVdy3UNZ80ivth45l_Y9Y,2640
112
119
  lionagi/protocols/messages/instruction.py,sha256=GC3PCTthQPJwFkQYqQF1CmijnhhLsE6G1gr6Lgw38JQ,11800
113
120
  lionagi/protocols/messages/manager.py,sha256=ZbQ1VfphbS7ddr4SHmnSqLTo8lnZ4Vtl8pKL8xnLPD0,18900
114
- lionagi/protocols/messages/message.py,sha256=tgy_drcKB-CbAqFaKi6oQkhBPFuBQYREZU8DqQTz2BE,4457
121
+ lionagi/protocols/messages/message.py,sha256=SJHOC7ulNZ4ZYnURqTXFCxaZVc-2_uxx7psKIr8OASw,4497
115
122
  lionagi/protocols/messages/system.py,sha256=A9RqcNUUCFq6GcGBvMpv7Y6R4igFt1sER9sZMXyyFWg,2380
116
123
  lionagi/service/__init__.py,sha256=MYcfEFFLSdRS4blwYdx883T8Px2bn81JAeqSIPW9SFs,2545
117
124
  lionagi/service/broadcaster.py,sha256=XvaUaBb6awcq-DJGVNJnnAIZUrrtOPnhWcgVgZTnGq8,1941
@@ -158,7 +165,7 @@ lionagi/tools/base.py,sha256=ypzT7-XPGW_KzIAAGwlzwRx594zcIPoBqW_WqAozwo4,1893
158
165
  lionagi/tools/types.py,sha256=HD3lkxKFFxVKPgxVLOerJ-VNxQiXA0Cw2TrlxEEBQWU,226
159
166
  lionagi/tools/file/__init__.py,sha256=ySvN2mEd6TEvCVCDGfBS9H_cSrZQ21WomjRC8Herm0Y,108
160
167
  lionagi/tools/file/reader.py,sha256=JCKDyOcKv07Iee8oJls8y5Qg0_PefnfqsIp_FiZQrsQ,9660
161
- lionagi-0.18.1.dist-info/METADATA,sha256=yAExwFITt_CsBqzPe-G8L71lNOX-z2QJ2kJqQVTZVP8,23462
162
- lionagi-0.18.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
163
- lionagi-0.18.1.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
164
- lionagi-0.18.1.dist-info/RECORD,,
168
+ lionagi-0.18.2.dist-info/METADATA,sha256=QekE7MrV8mQrBMwByBIc5BKzQykyZuqEkHcI_MLpfXc,23462
169
+ lionagi-0.18.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
170
+ lionagi-0.18.2.dist-info/licenses/LICENSE,sha256=VXFWsdoN5AAknBCgFqQNgPWYx7OPp-PFEP961zGdOjc,11288
171
+ lionagi-0.18.2.dist-info/RECORD,,