lionagi 0.5.1__py3-none-any.whl → 0.5.3__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. lionagi/__init__.py +3 -1
  2. lionagi/core/action/tool.py +3 -5
  3. lionagi/core/communication/action_request.py +3 -3
  4. lionagi/core/communication/message.py +3 -3
  5. lionagi/core/communication/utils.py +3 -3
  6. lionagi/core/generic/component.py +4 -4
  7. lionagi/core/generic/element.py +51 -47
  8. lionagi/core/generic/graph.py +1 -1
  9. lionagi/core/generic/log.py +2 -2
  10. lionagi/core/generic/pile.py +10 -11
  11. lionagi/core/generic/progression.py +19 -12
  12. lionagi/core/generic/utils.py +6 -3
  13. lionagi/core/models/base.py +11 -68
  14. lionagi/core/models/field_model.py +42 -19
  15. lionagi/core/models/{new_model_params.py → model_params.py} +5 -6
  16. lionagi/core/models/note.py +2 -2
  17. lionagi/core/models/operable_model.py +8 -4
  18. lionagi/core/models/schema_model.py +9 -31
  19. lionagi/core/models/types.py +15 -6
  20. lionagi/core/session/branch.py +8 -4
  21. lionagi/core/session/branch_mixins.py +11 -12
  22. lionagi/core/session/session.py +1 -2
  23. lionagi/core/typing/__init__.py +4 -4
  24. lionagi/core/typing/{concepts.py → _concepts.py} +43 -2
  25. lionagi/core/typing/_id.py +104 -0
  26. lionagi/integrations/anthropic_/AnthropicModel.py +8 -3
  27. lionagi/integrations/groq_/GroqModel.py +11 -4
  28. lionagi/integrations/litellm_/imodel.py +6 -8
  29. lionagi/integrations/openai_/OpenAIModel.py +8 -3
  30. lionagi/integrations/openai_/image_token_calculator/image_token_calculator.py +14 -8
  31. lionagi/integrations/perplexity_/PerplexityModel.py +8 -3
  32. lionagi/libs/func/async_calls/__init__.py +6 -3
  33. lionagi/libs/func/async_calls/alcall.py +46 -0
  34. lionagi/libs/func/async_calls/bcall.py +49 -1
  35. lionagi/libs/func/async_calls/rcall.py +32 -0
  36. lionagi/libs/utils.py +12 -1
  37. lionagi/operations/brainstorm/brainstorm.py +4 -4
  38. lionagi/operations/brainstorm/prompt.py +8 -1
  39. lionagi/operations/plan/plan.py +3 -3
  40. lionagi/operations/plan/prompt.py +17 -16
  41. lionagi/protocols/__init__.py +3 -0
  42. lionagi/protocols/configs/__init__.py +0 -15
  43. lionagi/protocols/configs/branch_config.py +1 -1
  44. lionagi/protocols/configs/imodel_config.py +2 -2
  45. lionagi/protocols/configs/log_config.py +1 -1
  46. lionagi/protocols/configs/types.py +15 -0
  47. lionagi/protocols/operatives/__init__.py +3 -15
  48. lionagi/protocols/operatives/action.py +4 -0
  49. lionagi/protocols/operatives/instruct.py +6 -8
  50. lionagi/protocols/operatives/operative.py +9 -21
  51. lionagi/protocols/operatives/prompts.py +53 -202
  52. lionagi/protocols/operatives/reason.py +4 -0
  53. lionagi/protocols/operatives/step.py +11 -23
  54. lionagi/protocols/operatives/types.py +19 -0
  55. lionagi/protocols/registries/__init__.py +3 -0
  56. lionagi/protocols/registries/_component_registry.py +4 -0
  57. lionagi/protocols/registries/_pile_registry.py +4 -0
  58. lionagi/service/__init__.py +3 -0
  59. lionagi/service/service_match_util.py +4 -4
  60. lionagi/settings.py +10 -18
  61. lionagi/strategies/base.py +4 -5
  62. lionagi/strategies/concurrent.py +4 -3
  63. lionagi/strategies/concurrent_chunk.py +3 -3
  64. lionagi/strategies/concurrent_sequential_chunk.py +3 -3
  65. lionagi/strategies/params.py +7 -4
  66. lionagi/version.py +1 -1
  67. {lionagi-0.5.1.dist-info → lionagi-0.5.3.dist-info}/METADATA +5 -3
  68. {lionagi-0.5.1.dist-info → lionagi-0.5.3.dist-info}/RECORD +73 -72
  69. lionagi/core/typing/config.py +0 -15
  70. lionagi/core/typing/id.py +0 -221
  71. /lionagi/core/typing/{pydantic_.py → _pydantic.py} +0 -0
  72. /lionagi/core/typing/{typing_.py → _typing.py} +0 -0
  73. /lionagi/integrations/{services.py → _services.py} +0 -0
  74. {lionagi-0.5.1.dist-info → lionagi-0.5.3.dist-info}/WHEEL +0 -0
  75. {lionagi-0.5.1.dist-info → lionagi-0.5.3.dist-info}/licenses/LICENSE +0 -0
@@ -1,25 +1,13 @@
1
- """
2
- Copyright 2024 HaiyangLi
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- """
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
16
4
 
17
5
  from typing import Self
18
6
 
19
7
  from pydantic import BaseModel, Field, PrivateAttr, model_validator
20
8
  from pydantic.fields import FieldInfo
21
9
 
22
- from lionagi.core.models import FieldModel, NewModelParams, OperableModel
10
+ from lionagi.core.models import FieldModel, ModelParams, OperableModel
23
11
  from lionagi.core.typing import UNDEFINED
24
12
  from lionagi.libs.parse import to_json, validate_keys
25
13
 
@@ -29,10 +17,10 @@ class Operative(OperableModel):
29
17
 
30
18
  name: str | None = None
31
19
 
32
- request_params: NewModelParams | None = Field(default=None)
20
+ request_params: ModelParams | None = Field(default=None)
33
21
  request_type: type[BaseModel] | None = Field(default=None)
34
22
 
35
- response_params: NewModelParams | None = Field(default=None)
23
+ response_params: ModelParams | None = Field(default=None)
36
24
  response_type: type[BaseModel] | None = Field(default=None)
37
25
  response_model: OperableModel | None = Field(default=None)
38
26
  response_str_dict: dict | str | None = Field(default=None)
@@ -140,7 +128,7 @@ class Operative(OperableModel):
140
128
 
141
129
  def create_response_type(
142
130
  self,
143
- response_params: NewModelParams | None = None,
131
+ response_params: ModelParams | None = None,
144
132
  field_models: list[FieldModel] | None = None,
145
133
  parameter_fields: dict[str, FieldInfo] | None = None,
146
134
  exclude_fields: list[str] | None = None,
@@ -154,7 +142,7 @@ class Operative(OperableModel):
154
142
  """Creates a new response type based on the provided parameters.
155
143
 
156
144
  Args:
157
- response_params (NewModelParams, optional): Parameters for the new response model.
145
+ response_params (ModelParams, optional): Parameters for the new response model.
158
146
  field_models (list[FieldModel], optional): List of field models.
159
147
  parameter_fields (dict[str, FieldInfo], optional): Dictionary of parameter fields.
160
148
  exclude_fields (list, optional): List of fields to exclude.
@@ -165,7 +153,7 @@ class Operative(OperableModel):
165
153
  frozen (bool, optional): Whether the model is frozen.
166
154
  validators (dict, optional): Dictionary of validators.
167
155
  """
168
- self.response_params = response_params or NewModelParams(
156
+ self.response_params = response_params or ModelParams(
169
157
  parameter_fields=parameter_fields,
170
158
  field_models=field_models,
171
159
  exclude_fields=exclude_fields,
@@ -1,232 +1,83 @@
1
- from pydantic import JsonValue
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
2
4
 
3
5
  function_field_description = (
4
- "Specify the name of the function to execute. **Choose "
5
- "from the provided `tool_schemas`; do not invent function names.**"
6
- "Only provide function names if tool_schemas are provided. Otherwise, "
7
- "must leave blank or set to None."
6
+ "Name of the function to call from the provided `tool_schemas`. "
7
+ "If no `tool_schemas` exist, set to None or leave blank. "
8
+ "Never invent new function names outside what's given."
8
9
  )
9
10
 
10
11
  arguments_field_description = (
11
- "Provide the arguments to pass to the function as a "
12
- "dictionary. **Use argument names and types as specified in the "
13
- "`tool_schemas`; do not invent argument names.**"
12
+ "Dictionary of arguments for the chosen function. "
13
+ "Use only argument names/types defined in `tool_schemas`. "
14
+ "Never introduce extra argument names."
14
15
  )
15
16
 
16
17
  action_required_field_description = (
17
- "Specify whether the step requires actions to be "
18
- "performed. If **True**, the actions in `action_requests` "
19
- "must be performed. If **False**, the actions in "
20
- "`action_requests` are optional. If no tool_schemas"
21
- " are provided, this field is ignored."
18
+ "Whether this step strictly requires performing actions. "
19
+ "If true, the requests in `action_requests` must be fulfilled, "
20
+ "assuming `tool_schemas` are available. "
21
+ "If false or no `tool_schemas` exist, actions are optional."
22
22
  )
23
23
 
24
24
  action_requests_field_description = (
25
- "List of actions to be performed if `action_required` "
26
- "is **True**. Leave empty if no action is required. "
27
- "**When providing actions, you must choose from the "
28
- "provided `tool_schemas`. Do not invent function or "
29
- "argument names.**"
25
+ "List of actions to be executed when `action_required` is true. "
26
+ "Each action must align with the available `tool_schemas`. "
27
+ "Leave empty if no actions are needed."
30
28
  )
31
29
 
32
30
  confidence_description = (
33
- "Provide an objective numeric confidence score between 0 and 1 (with 3 "
34
- "decimal places) indicating how likely you successfully achieved the task"
35
- " according to user expectation. Interpret the score as:\n"
36
- "- **1**: Very confident in a good job.\n"
37
- "- **0**: Not confident at all.\n"
38
- "- **[0.8, 1]**: You can continue the path of reasoning if needed.\n"
39
- "- **[0.5, 0.8)**: Recheck your reasoning and consider reverting to a "
40
- "previous, more confident reasoning path.\n"
41
- "- **[0, 0.5)**: Stop because the reasoning is starting to be off track."
31
+ "Numeric confidence score (0.0 to 1.0, up to three decimals) indicating "
32
+ "how well you've met user expectations. Use this guide:\n"
33
+ " 1.0: Highly confident\n"
34
+ " • 0.8-1.0: Reasonably sure\n"
35
+ " 0.5-0.8: Re-check or refine\n"
36
+ " 0.0-0.5: Off track"
42
37
  )
43
38
 
44
39
  instruction_field_description = (
45
- "Define the core task or instruction to be executed. Your instruction should:\n\n"
46
- "1. Be specific and actionable\n"
47
- "2. Clearly state the expected outcome\n"
48
- "3. Include any critical constraints or requirements\n\n"
49
- "**Guidelines for writing effective instructions:**\n"
50
- "- Start with a clear action verb (e.g., analyze, create, evaluate)\n"
51
- "- Specify the scope and boundaries of the task\n"
52
- "- Include success criteria when applicable\n"
53
- "- Break complex tasks into distinct steps\n\n"
54
- "**Examples:**\n"
55
- "- 'Analyze the provided sales data and identify top 3 performing products'\n"
56
- "- 'Generate a Python function that validates email addresses'\n"
57
- "- 'Create a data visualization showing monthly revenue trends'"
40
+ "A clear, actionable task definition. Specify:\n"
41
+ "1) The primary goal or objective\n"
42
+ "2) Key success criteria or constraints\n"
43
+ "\n"
44
+ "Guidelines:\n"
45
+ "- Start with a direct action verb (e.g., 'Analyze', 'Generate', 'Create')\n"
46
+ "- Include scope, boundaries, or constraints\n"
47
+ "- Provide success criteria if relevant\n"
48
+ "- For complex tasks, break them into logical steps"
58
49
  )
59
50
 
60
51
  guidance_field_description = (
61
- "Provide strategic direction and constraints for task execution.\n\n"
62
- "**Key components to include:**\n"
63
- "1. Methodological preferences\n"
64
- "2. Quality standards and requirements\n"
65
- "3. Specific limitations or boundaries\n"
66
- "4. Performance expectations\n\n"
67
- "**Best practices:**\n"
68
- "- Be explicit about any assumptions that should be made\n"
69
- "- Specify preferred approaches or techniques\n"
70
- "- Detail any constraints on resources or methods\n"
71
- "- Include relevant standards or compliance requirements\n\n"
72
- "Leave as None if no specific guidance is needed beyond the instruction."
52
+ "Strategic direction and constraints for executing the task. "
53
+ "Include:\n"
54
+ "1) Preferred methods or frameworks\n"
55
+ "2) Quality benchmarks (e.g., speed, clarity)\n"
56
+ "3) Resource or environmental constraints\n"
57
+ "4) Relevant compliance or standards\n"
58
+ "Use None if no special guidance."
73
59
  )
74
60
 
75
61
  context_field_description = (
76
- "Supply essential background information and current state data required for "
77
- "task execution.\n\n"
78
- "**Include relevant details about:**\n"
79
- "1. Environmental conditions\n"
80
- "2. Historical context\n"
81
- "3. Related systems or processes\n"
82
- "4. Previous outcomes or decisions\n\n"
83
- "**Context should:**\n"
84
- "- Be directly relevant to the task\n"
85
- "- Provide necessary background without excess detail\n"
86
- "- Include any dependencies or prerequisites\n"
87
- "- Specify the current state of the system\n\n"
88
- "Set to None if no additional context is required."
62
+ "Background information and current-state data needed for the task. "
63
+ "Should be:\n"
64
+ "1) Directly relevant\n"
65
+ "2) Sufficient to perform the task\n"
66
+ "3) Free of extraneous detail\n"
67
+ "Include environment, prior outcomes, system states, or dependencies. "
68
+ "Use None if no additional context is needed."
89
69
  )
90
70
 
91
71
  reason_field_description = (
92
- "Control whether detailed reasoning should be included in the response.\n\n"
93
- "**When set to True:**\n"
94
- "- Must include a ReasonModel explaining decision rationale\n"
95
- "- Should detail key decision points\n"
96
- "- Must provide confidence scores for decisions\n"
97
- "- Should explain trade-offs considered\n\n"
98
- "**When set to False:**\n"
99
- "- Skip detailed reasoning\n"
100
- "- Focus on direct results\n"
101
- "- Omit confidence scoring\n\n"
102
- "Set to None to make reasoning optional based on context."
72
+ "Include a thoughtful explanation of decisions, trade-offs, "
73
+ "and insights. Encourage deeper introspection on why certain "
74
+ "choices were made, potential alternatives, and how confidence "
75
+ "was shaped. If not needed, set to None."
103
76
  )
104
77
 
105
78
  actions_field_description = (
106
- "Specify whether concrete actions should be taken as part of task execution.\n\n"
107
- "**When set to True:**\n"
108
- "- Must include appropriate ActionRequestModels\n"
109
- "- Actions should directly relate to task goals\n"
110
- "- Each action must be properly structured and validated\n"
111
- "- Actions must use available tool schemas\n\n"
112
- "**When set to False:**\n"
113
- "- No actions should be included\n"
114
- "- Focus on analysis and recommendations\n\n"
115
- "Set to None to make actions optional based on requirements."
79
+ "Controls execution mode. "
80
+ "True: Execute specified actions. "
81
+ "False: Analysis/recommendations only. "
82
+ "None: Contextual execution."
116
83
  )
117
-
118
- # Example structures for each field to demonstrate proper formatting
119
- instruction_examples: list[JsonValue] = [
120
- "Analyze the dataset 'sales_2023.csv' and identify revenue trends",
121
- "Create a Python function to process customer feedback data",
122
- {
123
- "task": "data_analysis",
124
- "target": "sales_performance",
125
- "scope": ["revenue", "growth", "seasonality"],
126
- },
127
- ]
128
-
129
- guidance_examples: list[JsonValue] = [
130
- "Use statistical methods for trend analysis",
131
- "Optimize for readability and maintainability",
132
- {
133
- "methods": ["regression", "time_series"],
134
- "constraints": {"memory": "2GB", "time": "5min"},
135
- },
136
- ]
137
-
138
- context_examples: list[JsonValue] = [
139
- "Previous analysis showed seasonal patterns",
140
- {
141
- "prior_results": {"accuracy": 0.95},
142
- "system_state": "production",
143
- "dependencies": ["numpy", "pandas"],
144
- },
145
- ]
146
-
147
- """Field description for InstructModel."""
148
-
149
- instruct_model_description = (
150
- "Generate structured instructions for task execution.\n\n"
151
- "**Key Components:**\n"
152
- "1. Task Definition: Clear description of what needs to be accomplished\n"
153
- "2. Execution Parameters: How the task should be performed\n"
154
- "3. Success Criteria: What constitutes successful completion\n"
155
- "4. Scope and Boundaries: Limits and constraints of the task\n\n"
156
- "**Structure Guidelines:**\n"
157
- "- `instruction`: Core task or objective to accomplish\n"
158
- "- `guidance`: Parameters, preferences, and constraints\n"
159
- "- `context`: Relevant background and environmental information\n"
160
- "- `reason`: Whether to include reasoning in output\n"
161
- "- `actions`: Whether specific actions are required\n\n"
162
- "**Best Practices:**\n"
163
- "- Keep instructions clear and specific\n"
164
- "- Provide necessary but not excessive detail\n"
165
- "- Define measurable outcomes\n"
166
- "- Include relevant dependencies\n"
167
- "- Specify critical constraints\n\n"
168
- "**Common Issues to Avoid:**\n"
169
- "- Vague or ambiguous directives\n"
170
- "- Missing essential context\n"
171
- "- Undefined success criteria\n"
172
- "- Incomplete requirements\n"
173
- "- Conflicting parameters\n\n"
174
- "Structure instructions to enable successful task execution while maintaining "
175
- "appropriate flexibility for implementation details."
176
- )
177
-
178
- instruct_model_examples = [
179
- {
180
- "instruction": "Process the input data according to specified requirements",
181
- "guidance": {
182
- "requirements": ["validation", "transformation", "aggregation"],
183
- "output_format": "structured_report",
184
- "quality_metrics": ["accuracy", "completeness"],
185
- },
186
- "context": {
187
- "input_source": "data_stream",
188
- "domain": "general",
189
- "priority": "standard",
190
- },
191
- "reason": True,
192
- "actions": True,
193
- },
194
- {
195
- "instruction": "Evaluate system performance against baseline metrics",
196
- "guidance": {
197
- "evaluation_criteria": [
198
- "response_time",
199
- "resource_usage",
200
- "error_rate",
201
- ],
202
- "methodology": "standard",
203
- "reporting": "detailed",
204
- },
205
- "context": {
206
- "environment": "test",
207
- "criticality": "medium",
208
- "constraints": {"time": "bounded"},
209
- },
210
- "reason": True,
211
- "actions": False,
212
- },
213
- ]
214
-
215
-
216
- __all__ = [
217
- "function_field_description",
218
- "arguments_field_description",
219
- "action_required_field_description",
220
- "action_requests_field_description",
221
- "confidence_description",
222
- "instruction_field_description",
223
- "guidance_field_description",
224
- "context_field_description",
225
- "reason_field_description",
226
- "actions_field_description",
227
- "instruction_examples",
228
- "guidance_examples",
229
- "context_examples",
230
- "instruct_model_description",
231
- "instruct_model_examples",
232
- ]
@@ -1,3 +1,7 @@
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
1
5
  from pydantic import BaseModel, field_validator
2
6
 
3
7
  from lionagi.core.models import FieldModel
@@ -1,23 +1,11 @@
1
- """
2
- Copyright 2024 HaiyangLi
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- """
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
16
4
 
17
5
  from pydantic import BaseModel
18
6
  from pydantic.fields import FieldInfo
19
7
 
20
- from lionagi.core.typing import FieldModel, NewModelParams
8
+ from lionagi.core.typing import FieldModel, ModelParams
21
9
  from lionagi.protocols.operatives.operative import Operative
22
10
 
23
11
  from .action import (
@@ -54,7 +42,7 @@ class Step:
54
42
  operative_name: str | None = None,
55
43
  reason: bool = False,
56
44
  actions: bool = False,
57
- request_params: NewModelParams | None = None,
45
+ request_params: ModelParams | None = None,
58
46
  parameter_fields: dict[str, FieldInfo] | None = None,
59
47
  base_type: type[BaseModel] | None = None,
60
48
  field_models: list[FieldModel] | None = None,
@@ -72,7 +60,7 @@ class Step:
72
60
  operative_name (str, optional): Name of the operative.
73
61
  reason (bool, optional): Whether to include reason field.
74
62
  actions (bool, optional): Whether to include action fields.
75
- request_params (NewModelParams, optional): Parameters for the new model.
63
+ request_params (ModelParams, optional): Parameters for the new model.
76
64
  parameter_fields (dict[str, FieldInfo], optional): Parameter fields for the model.
77
65
  base_type (type[BaseModel], optional): Base type for the model.
78
66
  field_models (list[FieldModel], optional): List of field models.
@@ -100,7 +88,7 @@ class Step:
100
88
  ACTION_REQUIRED_FIELD,
101
89
  ]
102
90
  )
103
- request_params = request_params or NewModelParams(
91
+ request_params = request_params or ModelParams(
104
92
  parameter_fields=parameter_fields,
105
93
  base_type=base_type,
106
94
  field_models=field_models,
@@ -119,7 +107,7 @@ class Step:
119
107
  *,
120
108
  operative: Operative,
121
109
  additional_data: dict | None = None,
122
- response_params: NewModelParams | None = None,
110
+ response_params: ModelParams | None = None,
123
111
  field_models: list[FieldModel] | None = None,
124
112
  frozen_response: bool = False,
125
113
  response_config_dict: dict | None = None,
@@ -131,7 +119,7 @@ class Step:
131
119
  Args:
132
120
  operative (Operative): The operative instance to update.
133
121
  additional_data (dict | None, optional): Additional data to include in the response.
134
- response_params (NewModelParams | None, optional): Parameters for the response model.
122
+ response_params (ModelParams | None, optional): Parameters for the response model.
135
123
  field_models (list[FieldModel] | None, optional): List of field models.
136
124
  frozen_response (bool, optional): Whether the response model is frozen.
137
125
  response_config_dict (dict | None, optional): Configuration dictionary for the response.
@@ -162,7 +150,7 @@ class Step:
162
150
  @staticmethod
163
151
  def _create_response_type(
164
152
  operative: Operative,
165
- response_params: NewModelParams | None = None,
153
+ response_params: ModelParams | None = None,
166
154
  response_validators: dict | None = None,
167
155
  frozen_response: bool = False,
168
156
  response_config_dict: dict | None = None,
@@ -174,7 +162,7 @@ class Step:
174
162
 
175
163
  Args:
176
164
  operative (Operative): The operative instance.
177
- response_params (NewModelParams | None, optional): Parameters for the response model.
165
+ response_params (ModelParams | None, optional): Parameters for the response model.
178
166
  response_validators (dict | None, optional): Validators for the response model.
179
167
  frozen_response (bool, optional): Whether the response model is frozen.
180
168
  response_config_dict (dict | None, optional): Configuration dictionary for the response.
@@ -0,0 +1,19 @@
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from .action import ActionRequestModel, ActionResponseModel
6
+ from .instruct import Instruct
7
+ from .operative import Operative
8
+ from .reason import ReasonModel
9
+ from .step import Step, StepModel
10
+
11
+ __all__: list[str] = [
12
+ "Operative",
13
+ "Step",
14
+ "ActionRequestModel",
15
+ "ActionResponseModel",
16
+ "StepModel",
17
+ "Instruct",
18
+ "ReasonModel",
19
+ ]
@@ -0,0 +1,3 @@
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
@@ -1,3 +1,7 @@
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
1
5
  from lionagi.protocols.adapters.adapter import AdapterRegistry
2
6
  from lionagi.protocols.adapters.json_adapter import (
3
7
  JsonAdapter,
@@ -1,3 +1,7 @@
1
+ # Copyright (c) 2023 - 2024, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
1
5
  from lionagi.protocols.adapters.adapter import AdapterRegistry
2
6
  from lionagi.protocols.adapters.json_adapter import (
3
7
  JsonAdapter,
@@ -1,3 +1,5 @@
1
+ from lionagi.integrations.litellm_.imodel import LiteiModel
2
+
1
3
  from .imodel import iModel
2
4
  from .rate_limiter import RateLimiter, RateLimitError
3
5
  from .service import Service, register_service
@@ -10,4 +12,5 @@ __all__ = [
10
12
  "RateLimitError",
11
13
  "invoke_retry",
12
14
  "iModel",
15
+ "LiteiModel",
13
16
  ]
@@ -19,7 +19,7 @@ def match_service(service_name: str, **kwargs):
19
19
  return key1 == key2
20
20
 
21
21
  if service_name == "openai":
22
- from lionagi.integrations.services import OpenAIService
22
+ from lionagi.integrations._services import OpenAIService
23
23
 
24
24
  api_key = kwargs.get("api_key")
25
25
  openai_organization = kwargs.get("openai_organization")
@@ -44,7 +44,7 @@ def match_service(service_name: str, **kwargs):
44
44
  )
45
45
 
46
46
  elif service_name == "anthropic":
47
- from lionagi.integrations.services import AnthropicService
47
+ from lionagi.integrations._services import AnthropicService
48
48
 
49
49
  api_key = kwargs.get("api_key")
50
50
  api_version = kwargs.get("api_version", "2023-06-01")
@@ -63,7 +63,7 @@ def match_service(service_name: str, **kwargs):
63
63
  )
64
64
 
65
65
  elif service_name == "perplexity":
66
- from lionagi.integrations.services import PerplexityService
66
+ from lionagi.integrations._services import PerplexityService
67
67
 
68
68
  api_key = kwargs.get("api_key")
69
69
  api_version = kwargs.get("api_version", "2023-06-01")
@@ -77,7 +77,7 @@ def match_service(service_name: str, **kwargs):
77
77
  return PerplexityService(api_key=api_key)
78
78
 
79
79
  elif service_name == "groq":
80
- from lionagi.integrations.services import GroqService
80
+ from lionagi.integrations._services import GroqService
81
81
 
82
82
  api_key = kwargs.get("api_key")
83
83
  for service in ServiceSetting.services.values():
lionagi/settings.py CHANGED
@@ -1,19 +1,18 @@
1
1
  from datetime import timezone
2
2
  from enum import Enum
3
3
 
4
- from lionagi.protocols.configs import (
4
+ from lionagi.protocols.configs.types import (
5
5
  BranchConfig,
6
- LionIDConfig,
6
+ LogConfig,
7
7
  MessageConfig,
8
8
  RetryConfig,
9
9
  TimedFuncCallConfig,
10
10
  iModelConfig,
11
11
  )
12
- from lionagi.protocols.configs.log_config import LogConfig
13
12
 
14
13
 
15
14
  class BaseSystemFields(str, Enum):
16
- ln_id = "ln_id"
15
+ LN_ID = "ln_id"
17
16
  TIMESTAMP = "timestamp"
18
17
  METADATA = "metadata"
19
18
  EXTRA_FIELDS = "extra_fields"
@@ -22,15 +21,8 @@ class BaseSystemFields(str, Enum):
22
21
  EMBEDDING = "embedding"
23
22
 
24
23
 
25
- DEFAULT_ID_CONFIG = LionIDConfig(
26
- n=36,
27
- random_hyphen=True,
28
- num_hyphens=4,
29
- hyphen_start_index=6,
30
- hyphen_end_index=-6,
31
- prefix="ao",
32
- postfix="",
33
- )
24
+ UUID_VERSION = 4
25
+
34
26
 
35
27
  DEFAULT_TIMED_FUNC_CALL_CONFIG = TimedFuncCallConfig(
36
28
  initial_delay=0,
@@ -61,7 +53,7 @@ DEFAULT_CHAT_CONFIG = iModelConfig(
61
53
  )
62
54
 
63
55
 
64
- DEFAULT_RETRY_iMODEL_CONFIG = iModelConfig(
56
+ DEFAULT_PARSE_CONFIG = iModelConfig(
65
57
  provider="openai",
66
58
  task="chat",
67
59
  model="gpt-4o-mini",
@@ -109,7 +101,7 @@ DEFAULT_BRANCH_CONFIG = BranchConfig(
109
101
  auto_register_tools=True,
110
102
  action_call_config=DEFAULT_TIMED_FUNC_CALL_CONFIG,
111
103
  imodel_config=DEFAULT_CHAT_CONFIG,
112
- retry_imodel_config=DEFAULT_RETRY_iMODEL_CONFIG,
104
+ retry_imodel_config=DEFAULT_PARSE_CONFIG,
113
105
  )
114
106
 
115
107
 
@@ -120,7 +112,7 @@ BASE_LION_FIELDS = set(BaseSystemFields.__members__.values())
120
112
  class Settings:
121
113
 
122
114
  class Config:
123
- ID: LionIDConfig = DEFAULT_ID_CONFIG
115
+ UUID_VERSION: int = UUID_VERSION
124
116
  RETRY: RetryConfig = DEFAULT_RETRY_CONFIG
125
117
  TIMED_CALL: TimedFuncCallConfig = DEFAULT_TIMED_FUNC_CALL_CONFIG
126
118
  TIMEZONE: timezone = DEFAULT_TIMEZONE
@@ -129,8 +121,8 @@ class Settings:
129
121
  BRANCH: BranchConfig = DEFAULT_BRANCH_CONFIG
130
122
 
131
123
  class iModel:
132
- CHAT: dict = {"model": "openai/gpt-4o"}
133
- PARSE: iModelConfig = DEFAULT_CHAT_CONFIG
124
+ CHAT: iModelConfig = DEFAULT_CHAT_CONFIG
125
+ PARSE: iModelConfig = DEFAULT_PARSE_CONFIG
134
126
 
135
127
 
136
128
  # File: autoos/setting.py
@@ -1,15 +1,14 @@
1
1
  from typing import ClassVar
2
2
 
3
- from pydantic import model_validator
3
+ from pydantic import BaseModel, model_validator
4
4
 
5
- from lionagi.fields.instruct import Instruct, InstructResponse
5
+ from lionagi.core.session.types import Branch, Session
6
+ from lionagi.protocols.operatives.instruct import Instruct, InstructResponse
6
7
 
7
- from ..protocols.types import BaseLionModel
8
- from ..session.types import Branch, Session
9
8
  from .params import StrategyParams
10
9
 
11
10
 
12
- class StrategyExecutor(BaseLionModel):
11
+ class StrategyExecutor(BaseModel):
13
12
  """Base class for different execution strategies.
14
13
 
15
14
  Each concrete executor should implement `execute()` to run instructions
@@ -1,6 +1,7 @@
1
- from lionagi.fields.instruct import Instruct, InstructResponse
2
- from lionagi.session.types import Branch
3
- from lionagi.utils import alcall, to_list
1
+ from lionagi.core.session.types import Branch
2
+ from lionagi.libs.func.types import alcall
3
+ from lionagi.libs.parse.types import to_list
4
+ from lionagi.protocols.operatives.instruct import Instruct, InstructResponse
4
5
 
5
6
  from .base import StrategyExecutor
6
7