lionagi 0.5.1__py3-none-any.whl → 0.5.2__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- lionagi/__init__.py +0 -1
- lionagi/core/action/tool.py +3 -5
- lionagi/core/communication/action_request.py +3 -3
- lionagi/core/communication/message.py +3 -3
- lionagi/core/communication/utils.py +3 -3
- lionagi/core/generic/component.py +4 -4
- lionagi/core/generic/element.py +51 -47
- lionagi/core/generic/graph.py +1 -1
- lionagi/core/generic/log.py +2 -2
- lionagi/core/generic/pile.py +10 -11
- lionagi/core/generic/progression.py +19 -12
- lionagi/core/generic/utils.py +6 -3
- lionagi/core/models/base.py +11 -68
- lionagi/core/models/field_model.py +42 -19
- lionagi/core/models/{new_model_params.py → model_params.py} +5 -6
- lionagi/core/models/note.py +2 -2
- lionagi/core/models/operable_model.py +8 -4
- lionagi/core/models/schema_model.py +9 -31
- lionagi/core/models/types.py +15 -6
- lionagi/core/session/branch.py +10 -7
- lionagi/core/session/branch_mixins.py +11 -12
- lionagi/core/session/session.py +1 -2
- lionagi/core/typing/__init__.py +4 -4
- lionagi/core/typing/{concepts.py → _concepts.py} +43 -2
- lionagi/core/typing/_id.py +104 -0
- lionagi/integrations/anthropic_/AnthropicModel.py +8 -3
- lionagi/integrations/groq_/GroqModel.py +11 -4
- lionagi/integrations/litellm_/imodel.py +6 -8
- lionagi/integrations/openai_/OpenAIModel.py +8 -3
- lionagi/integrations/openai_/image_token_calculator/image_token_calculator.py +14 -8
- lionagi/integrations/perplexity_/PerplexityModel.py +8 -3
- lionagi/libs/func/async_calls/__init__.py +6 -3
- lionagi/libs/func/async_calls/alcall.py +46 -0
- lionagi/libs/func/async_calls/bcall.py +49 -1
- lionagi/libs/func/async_calls/rcall.py +32 -0
- lionagi/libs/utils.py +12 -1
- lionagi/operations/brainstorm/brainstorm.py +3 -3
- lionagi/operations/plan/plan.py +3 -3
- lionagi/protocols/__init__.py +3 -0
- lionagi/protocols/configs/__init__.py +0 -15
- lionagi/protocols/configs/branch_config.py +1 -1
- lionagi/protocols/configs/imodel_config.py +2 -2
- lionagi/protocols/configs/log_config.py +1 -1
- lionagi/protocols/configs/types.py +15 -0
- lionagi/protocols/operatives/__init__.py +3 -15
- lionagi/protocols/operatives/action.py +4 -0
- lionagi/protocols/operatives/instruct.py +6 -2
- lionagi/protocols/operatives/operative.py +9 -21
- lionagi/protocols/operatives/prompts.py +4 -0
- lionagi/protocols/operatives/reason.py +4 -0
- lionagi/protocols/operatives/step.py +11 -23
- lionagi/protocols/operatives/types.py +19 -0
- lionagi/protocols/registries/__init__.py +3 -0
- lionagi/protocols/registries/_component_registry.py +4 -0
- lionagi/protocols/registries/_pile_registry.py +4 -0
- lionagi/service/__init__.py +3 -0
- lionagi/service/service_match_util.py +4 -4
- lionagi/settings.py +10 -18
- lionagi/strategies/base.py +4 -5
- lionagi/strategies/concurrent.py +4 -3
- lionagi/strategies/concurrent_chunk.py +3 -3
- lionagi/strategies/concurrent_sequential_chunk.py +3 -3
- lionagi/strategies/params.py +7 -4
- lionagi/version.py +1 -1
- {lionagi-0.5.1.dist-info → lionagi-0.5.2.dist-info}/METADATA +4 -2
- {lionagi-0.5.1.dist-info → lionagi-0.5.2.dist-info}/RECORD +71 -70
- lionagi/core/typing/config.py +0 -15
- lionagi/core/typing/id.py +0 -221
- /lionagi/core/typing/{pydantic_.py → _pydantic.py} +0 -0
- /lionagi/core/typing/{typing_.py → _typing.py} +0 -0
- /lionagi/integrations/{services.py → _services.py} +0 -0
- {lionagi-0.5.1.dist-info → lionagi-0.5.2.dist-info}/WHEEL +0 -0
- {lionagi-0.5.1.dist-info → lionagi-0.5.2.dist-info}/licenses/LICENSE +0 -0
@@ -5,13 +5,6 @@
|
|
5
5
|
import json
|
6
6
|
import os
|
7
7
|
|
8
|
-
import litellm
|
9
|
-
from dotenv import load_dotenv
|
10
|
-
|
11
|
-
litellm.drop_params = True
|
12
|
-
load_dotenv()
|
13
|
-
|
14
|
-
|
15
8
|
RESERVED_PARAMS = [
|
16
9
|
"invoke_action",
|
17
10
|
"instruction",
|
@@ -21,6 +14,11 @@ RESERVED_PARAMS = [
|
|
21
14
|
|
22
15
|
class LiteiModel:
|
23
16
|
|
17
|
+
from lionagi.libs.package.imports import check_import
|
18
|
+
|
19
|
+
litellm = check_import("litellm")
|
20
|
+
litellm.drop_params = True
|
21
|
+
|
24
22
|
def __init__(self, **kwargs):
|
25
23
|
if "api_key" in kwargs:
|
26
24
|
try:
|
@@ -33,7 +31,7 @@ class LiteiModel:
|
|
33
31
|
except Exception:
|
34
32
|
pass
|
35
33
|
self.kwargs = kwargs
|
36
|
-
self.acompletion = litellm.acompletion
|
34
|
+
self.acompletion = self.litellm.acompletion
|
37
35
|
|
38
36
|
def to_dict(self) -> dict:
|
39
37
|
dict_ = {
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import warnings
|
2
2
|
from pathlib import Path
|
3
3
|
|
4
|
-
import yaml
|
5
4
|
from dotenv import load_dotenv
|
6
5
|
from pydantic import (
|
7
6
|
BaseModel,
|
@@ -35,6 +34,12 @@ price_config_file_name = path / "openai_max_output_token_data.yaml"
|
|
35
34
|
max_output_token_file_name = path / "openai_price_data.yaml"
|
36
35
|
|
37
36
|
|
37
|
+
class _ModuleImportClass:
|
38
|
+
from lionagi.libs.package.imports import check_import
|
39
|
+
|
40
|
+
yaml = check_import("yaml", pip_name="pyyaml")
|
41
|
+
|
42
|
+
|
38
43
|
class OpenAIModel(BaseModel):
|
39
44
|
model: str = Field(description="ID of the model to use.")
|
40
45
|
|
@@ -303,7 +308,7 @@ class OpenAIModel(BaseModel):
|
|
303
308
|
)
|
304
309
|
if estimated_output_len == 0:
|
305
310
|
with open(max_output_token_file_name) as file:
|
306
|
-
output_token_config = yaml.safe_load(file)
|
311
|
+
output_token_config = _ModuleImportClass.yaml.safe_load(file)
|
307
312
|
estimated_output_len = output_token_config.get(self.model, 0)
|
308
313
|
self.estimated_output_len = (
|
309
314
|
estimated_output_len # update to default max output len
|
@@ -388,7 +393,7 @@ class OpenAIModel(BaseModel):
|
|
388
393
|
|
389
394
|
# read openai price info from config file
|
390
395
|
with open(price_config_file_name) as file:
|
391
|
-
price_config = yaml.safe_load(file)
|
396
|
+
price_config = _ModuleImportClass.yaml.safe_load(file)
|
392
397
|
|
393
398
|
if self.request_model.endpoint == "chat/completions":
|
394
399
|
model_price_info_dict = price_config["model"][self.model]
|
@@ -4,9 +4,6 @@ import os
|
|
4
4
|
from io import BytesIO
|
5
5
|
from typing import Literal
|
6
6
|
|
7
|
-
import aiohttp
|
8
|
-
import yaml
|
9
|
-
from PIL import Image
|
10
7
|
from pydantic import BaseModel, Field, field_validator
|
11
8
|
|
12
9
|
image_token_config_file_name = os.path.join(
|
@@ -14,6 +11,15 @@ image_token_config_file_name = os.path.join(
|
|
14
11
|
)
|
15
12
|
|
16
13
|
|
14
|
+
class _ModuelImportClass:
|
15
|
+
|
16
|
+
from lionagi.libs.package.imports import check_import
|
17
|
+
|
18
|
+
yaml = check_import("yaml", pip_name="pyyaml")
|
19
|
+
Image = check_import("PIL.Image", pip_name="Pillow")
|
20
|
+
aiohttp = check_import("aiohttp")
|
21
|
+
|
22
|
+
|
17
23
|
class OpenAIImageTokenCalculator(BaseModel):
|
18
24
|
model: str = Field(description="ID of the model to use.")
|
19
25
|
|
@@ -21,7 +27,7 @@ class OpenAIImageTokenCalculator(BaseModel):
|
|
21
27
|
@classmethod
|
22
28
|
def validate_model_image_function(cls, value: str):
|
23
29
|
with open(image_token_config_file_name) as file:
|
24
|
-
token_config = yaml.safe_load(file)
|
30
|
+
token_config = _ModuelImportClass.yaml.safe_load(file)
|
25
31
|
|
26
32
|
token_config = token_config.get(value, None)
|
27
33
|
|
@@ -36,16 +42,16 @@ class OpenAIImageTokenCalculator(BaseModel):
|
|
36
42
|
image_base64 = url.split("data:image/jpeg;base64,")[1]
|
37
43
|
image_base64.strip("{}")
|
38
44
|
image_data = base64.b64decode(image_base64)
|
39
|
-
image = Image.open(BytesIO(image_data))
|
45
|
+
image = _ModuelImportClass.Image.open(BytesIO(image_data))
|
40
46
|
else:
|
41
47
|
# image url
|
42
|
-
async with aiohttp.ClientSession() as client:
|
48
|
+
async with _ModuelImportClass.aiohttp.ClientSession() as client:
|
43
49
|
async with client.get(url=url) as response:
|
44
50
|
response.raise_for_status()
|
45
51
|
|
46
52
|
content = await response.read()
|
47
53
|
|
48
|
-
image = Image.open(BytesIO(content))
|
54
|
+
image = _ModuelImportClass.Image.open(BytesIO(content))
|
49
55
|
|
50
56
|
return image.size
|
51
57
|
|
@@ -58,7 +64,7 @@ class OpenAIImageTokenCalculator(BaseModel):
|
|
58
64
|
)
|
59
65
|
|
60
66
|
with open(image_token_config_file_name) as file:
|
61
|
-
token_config = yaml.safe_load(file)
|
67
|
+
token_config = _ModuelImportClass.yaml.safe_load(file)
|
62
68
|
|
63
69
|
token_config = token_config.get(self.model, None)
|
64
70
|
|
@@ -5,7 +5,6 @@
|
|
5
5
|
import os
|
6
6
|
from pathlib import Path
|
7
7
|
|
8
|
-
import yaml
|
9
8
|
from dotenv import load_dotenv
|
10
9
|
from pydantic import (
|
11
10
|
BaseModel,
|
@@ -35,6 +34,12 @@ price_config_file_name = path / "perplexity_price_data.yaml"
|
|
35
34
|
max_output_token_file_name = path / "perplexity_max_output_token_data.yaml"
|
36
35
|
|
37
36
|
|
37
|
+
class _ModuleImportClass:
|
38
|
+
from lionagi.libs.package.imports import check_import
|
39
|
+
|
40
|
+
yaml = check_import("yaml", pip_name="pyyaml")
|
41
|
+
|
42
|
+
|
38
43
|
class PerplexityModel(BaseModel):
|
39
44
|
model: str = Field(description="ID of the model to use.")
|
40
45
|
|
@@ -235,7 +240,7 @@ class PerplexityModel(BaseModel):
|
|
235
240
|
)
|
236
241
|
if estimated_output_len == 0:
|
237
242
|
with open(max_output_token_file_name) as file:
|
238
|
-
output_token_config = yaml.safe_load(file)
|
243
|
+
output_token_config = _ModuleImportClass.yaml.safe_load(file)
|
239
244
|
estimated_output_len = output_token_config.get(self.model, 0)
|
240
245
|
self.estimated_output_len = estimated_output_len
|
241
246
|
|
@@ -257,7 +262,7 @@ class PerplexityModel(BaseModel):
|
|
257
262
|
num_of_input_tokens = self.text_token_calculator.calculate(input_text)
|
258
263
|
|
259
264
|
with open(price_config_file_name) as file:
|
260
|
-
price_config = yaml.safe_load(file)
|
265
|
+
price_config = _ModuleImportClass.yaml.safe_load(file)
|
261
266
|
|
262
267
|
model_price_info_dict = price_config["model"][self.model]
|
263
268
|
estimated_price = (
|
@@ -2,11 +2,11 @@
|
|
2
2
|
#
|
3
3
|
# SPDX-License-Identifier: Apache-2.0
|
4
4
|
|
5
|
-
from .alcall import alcall
|
6
|
-
from .bcall import bcall
|
5
|
+
from .alcall import ALCallParams, alcall
|
6
|
+
from .bcall import BCallParams, bcall
|
7
7
|
from .mcall import mcall
|
8
8
|
from .pcall import pcall
|
9
|
-
from .rcall import rcall
|
9
|
+
from .rcall import RCallParams, rcall
|
10
10
|
from .tcall import tcall
|
11
11
|
from .ucall import ucall
|
12
12
|
|
@@ -18,4 +18,7 @@ __all__ = [
|
|
18
18
|
"rcall",
|
19
19
|
"tcall",
|
20
20
|
"ucall",
|
21
|
+
"ALCallParams",
|
22
|
+
"BCallParams",
|
23
|
+
"RCallParams",
|
21
24
|
]
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import asyncio
|
2
2
|
from collections.abc import Callable
|
3
|
+
from dataclasses import dataclass
|
3
4
|
from typing import Any, TypeVar
|
4
5
|
|
6
|
+
from lionagi.libs.utils import DataClass
|
7
|
+
|
5
8
|
from ...constants import UNDEFINED
|
6
9
|
from ...parse import to_list
|
7
10
|
from .ucall import ucall
|
@@ -9,6 +12,49 @@ from .ucall import ucall
|
|
9
12
|
T = TypeVar("T")
|
10
13
|
|
11
14
|
|
15
|
+
@dataclass
|
16
|
+
class ALCallParams(DataClass):
|
17
|
+
function: Callable[..., T]
|
18
|
+
num_retries: int = 0
|
19
|
+
initial_delay: float = 0
|
20
|
+
retry_delay: float = 0
|
21
|
+
backoff_factor: float = 1
|
22
|
+
retry_default: Any = UNDEFINED
|
23
|
+
retry_timeout: float | None = None
|
24
|
+
retry_timing: bool = False
|
25
|
+
verbose: bool = True
|
26
|
+
error_msg: str | None = None
|
27
|
+
error_map: dict[type, Callable[[Exception], None]] | None = None
|
28
|
+
max_concurrent: int | None = None
|
29
|
+
throttle_period: float | None = None
|
30
|
+
flatten: bool = False
|
31
|
+
dropna: bool = False
|
32
|
+
unique: bool = False
|
33
|
+
|
34
|
+
async def __call__(self, input_, *args, **kwargs):
|
35
|
+
return await alcall(
|
36
|
+
input_,
|
37
|
+
self.function,
|
38
|
+
*args,
|
39
|
+
num_retries=self.num_retries,
|
40
|
+
initial_delay=self.initial_delay,
|
41
|
+
retry_delay=self.retry_delay,
|
42
|
+
backoff_factor=self.backoff_factor,
|
43
|
+
retry_default=self.retry_default,
|
44
|
+
retry_timeout=self.retry_timeout,
|
45
|
+
retry_timing=self.retry_timing,
|
46
|
+
verbose_retry=self.verbose,
|
47
|
+
error_msg=self.error_msg,
|
48
|
+
error_map=self.error_map,
|
49
|
+
max_concurrent=self.max_concurrent,
|
50
|
+
throttle_period=self.throttle_period,
|
51
|
+
flatten=self.flatten,
|
52
|
+
dropna=self.dropna,
|
53
|
+
unique=self.unique,
|
54
|
+
**kwargs,
|
55
|
+
)
|
56
|
+
|
57
|
+
|
12
58
|
async def alcall(
|
13
59
|
input_: list[Any],
|
14
60
|
func: Callable[..., T],
|
@@ -1,13 +1,61 @@
|
|
1
|
-
import asyncio
|
2
1
|
from collections.abc import AsyncGenerator, Callable
|
2
|
+
from dataclasses import dataclass
|
3
3
|
from typing import Any, TypeVar
|
4
4
|
|
5
|
+
from lionagi.libs.constants import UNDEFINED
|
6
|
+
from lionagi.libs.utils import DataClass
|
7
|
+
|
5
8
|
from ...parse import to_list
|
6
9
|
from .alcall import alcall
|
7
10
|
|
8
11
|
T = TypeVar("T")
|
9
12
|
|
10
13
|
|
14
|
+
@dataclass
|
15
|
+
class BCallParams(DataClass):
|
16
|
+
function: Callable[..., T]
|
17
|
+
batch_size: int
|
18
|
+
num_retries: int = 0
|
19
|
+
initial_delay: float = 0
|
20
|
+
retry_delay: float = 0
|
21
|
+
backoff_factor: float = 1
|
22
|
+
retry_default: Any = UNDEFINED
|
23
|
+
retry_timeout: float | None = None
|
24
|
+
retry_timing: bool = False
|
25
|
+
verbose_retry: bool = True
|
26
|
+
error_msg: str | None = None
|
27
|
+
error_map: dict[type, Callable[[Exception], None]] | None = None
|
28
|
+
max_concurrent: int | None = None
|
29
|
+
throttle_period: float | None = None
|
30
|
+
flatten: bool = False
|
31
|
+
dropna: bool = False
|
32
|
+
unique: bool = False
|
33
|
+
|
34
|
+
async def __call__(self, input_, *args, **kwargs):
|
35
|
+
return await bcall(
|
36
|
+
input_,
|
37
|
+
self.function,
|
38
|
+
*args,
|
39
|
+
batch_size=self.batch_size,
|
40
|
+
num_retries=self.num_retries,
|
41
|
+
initial_delay=self.initial_delay,
|
42
|
+
retry_delay=self.retry_delay,
|
43
|
+
backoff_factor=self.backoff_factor,
|
44
|
+
default=self.retry_default,
|
45
|
+
timeout=self.retry_timeout,
|
46
|
+
timing=self.retry_timing,
|
47
|
+
verbose=self.verbose_retry,
|
48
|
+
error_msg=self.error_msg,
|
49
|
+
error_map=self.error_map,
|
50
|
+
max_concurrent=self.max_concurrent,
|
51
|
+
throttle_period=self.throttle_period,
|
52
|
+
flatten=self.flatten,
|
53
|
+
dropna=self.dropna,
|
54
|
+
unique=self.unique,
|
55
|
+
**kwargs,
|
56
|
+
)
|
57
|
+
|
58
|
+
|
11
59
|
async def bcall(
|
12
60
|
input_: Any,
|
13
61
|
func: Callable[..., T],
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import asyncio
|
2
2
|
from collections.abc import Callable
|
3
|
+
from dataclasses import dataclass
|
3
4
|
from typing import Any, TypeVar
|
4
5
|
|
6
|
+
from lionagi.libs.utils import DataClass
|
7
|
+
|
5
8
|
from ...constants import UNDEFINED
|
6
9
|
from ...utils import time as _t
|
7
10
|
from .ucall import ucall
|
@@ -9,6 +12,35 @@ from .ucall import ucall
|
|
9
12
|
T = TypeVar("T")
|
10
13
|
|
11
14
|
|
15
|
+
@dataclass
|
16
|
+
class RCallParams(DataClass):
|
17
|
+
function: Callable[..., T]
|
18
|
+
num_retries: int = 0
|
19
|
+
initial_delay: float = 0
|
20
|
+
retry_delay: float = 0
|
21
|
+
backoff_factor: float = 1
|
22
|
+
retry_default: Any = UNDEFINED
|
23
|
+
retry_timeout: float | None = None
|
24
|
+
retry_timing: bool = False
|
25
|
+
verbose_retry: bool = True
|
26
|
+
|
27
|
+
async def __call__(self, input_, *args, **kwargs):
|
28
|
+
return await rcall(
|
29
|
+
input_,
|
30
|
+
self.function,
|
31
|
+
*args,
|
32
|
+
num_retries=self.num_retries,
|
33
|
+
initial_delay=self.initial_delay,
|
34
|
+
retry_delay=self.retry_delay,
|
35
|
+
backoff_factor=self.backoff_factor,
|
36
|
+
retry_default=self.retry_default,
|
37
|
+
retry_timeout=self.retry_timeout,
|
38
|
+
retry_timing=self.retry_timing,
|
39
|
+
verbose_retry=self.verbose_retry,
|
40
|
+
**kwargs,
|
41
|
+
)
|
42
|
+
|
43
|
+
|
12
44
|
async def rcall(
|
13
45
|
func: Callable[..., T],
|
14
46
|
/,
|
lionagi/libs/utils.py
CHANGED
@@ -8,13 +8,24 @@ import random
|
|
8
8
|
import subprocess
|
9
9
|
import sys
|
10
10
|
from collections.abc import Mapping, Sequence
|
11
|
+
from dataclasses import asdict
|
11
12
|
from datetime import datetime, timezone
|
12
13
|
from hashlib import sha256
|
13
|
-
from typing import Literal, TypeVar
|
14
|
+
from typing import Literal, Self, TypeVar
|
14
15
|
|
15
16
|
T = TypeVar("T")
|
16
17
|
|
17
18
|
|
19
|
+
class DataClass:
|
20
|
+
|
21
|
+
def to_dict(self) -> dict:
|
22
|
+
return asdict(self)
|
23
|
+
|
24
|
+
@classmethod
|
25
|
+
def from_dict(cls, data: dict) -> Self:
|
26
|
+
return cls(**data)
|
27
|
+
|
28
|
+
|
18
29
|
def unique_hash(n: int = 32) -> str:
|
19
30
|
"""unique random hash"""
|
20
31
|
current_time = datetime.now().isoformat().encode("utf-8")
|
@@ -9,7 +9,7 @@ from lionagi.core.typing import ID, Any, BaseModel
|
|
9
9
|
from lionagi.libs.func import alcall
|
10
10
|
from lionagi.libs.parse import to_flat_list
|
11
11
|
from lionagi.protocols.operatives.instruct import (
|
12
|
-
|
12
|
+
INSTRUCT_FIELD_MODEL,
|
13
13
|
Instruct,
|
14
14
|
InstructResponse,
|
15
15
|
)
|
@@ -118,8 +118,8 @@ async def brainstorm(
|
|
118
118
|
print(f"Starting brainstorming...")
|
119
119
|
|
120
120
|
field_models: list = kwargs.get("field_models", [])
|
121
|
-
if
|
122
|
-
field_models.append(
|
121
|
+
if INSTRUCT_FIELD_MODEL not in field_models:
|
122
|
+
field_models.append(INSTRUCT_FIELD_MODEL)
|
123
123
|
|
124
124
|
kwargs["field_models"] = field_models
|
125
125
|
session, branch = prepare_session(session, branch, branch_kwargs)
|
lionagi/operations/plan/plan.py
CHANGED
@@ -7,7 +7,7 @@ from lionagi.core.session.branch import Branch
|
|
7
7
|
from lionagi.core.session.session import Session
|
8
8
|
from lionagi.core.typing import ID, Any, BaseModel, Literal
|
9
9
|
from lionagi.protocols.operatives.instruct import (
|
10
|
-
|
10
|
+
INSTRUCT_FIELD_MODEL,
|
11
11
|
Instruct,
|
12
12
|
InstructResponse,
|
13
13
|
)
|
@@ -95,8 +95,8 @@ async def plan(
|
|
95
95
|
print(f"Planning execution with {num_steps} steps...")
|
96
96
|
|
97
97
|
field_models: list = kwargs.get("field_models", [])
|
98
|
-
if
|
99
|
-
field_models.append(
|
98
|
+
if INSTRUCT_FIELD_MODEL not in field_models:
|
99
|
+
field_models.append(INSTRUCT_FIELD_MODEL)
|
100
100
|
kwargs["field_models"] = field_models
|
101
101
|
session, branch = prepare_session(session, branch, branch_kwargs)
|
102
102
|
execute_branch: Branch = session.split(branch)
|
lionagi/protocols/__init__.py
CHANGED
@@ -1,15 +0,0 @@
|
|
1
|
-
from .branch_config import BranchConfig, MessageConfig
|
2
|
-
from .id_config import LionIDConfig
|
3
|
-
from .imodel_config import iModelConfig
|
4
|
-
from .log_config import LogConfig
|
5
|
-
from .retry_config import RetryConfig, TimedFuncCallConfig
|
6
|
-
|
7
|
-
__all__ = [
|
8
|
-
"LogConfig",
|
9
|
-
"LionIDConfig",
|
10
|
-
"RetryConfig",
|
11
|
-
"TimedFuncCallConfig",
|
12
|
-
"iModelConfig",
|
13
|
-
"BranchConfig",
|
14
|
-
"MessageConfig",
|
15
|
-
]
|
@@ -5,7 +5,7 @@
|
|
5
5
|
from typing import Any, Literal
|
6
6
|
|
7
7
|
from lionagi.core.models.schema_model import SchemaModel
|
8
|
-
from lionagi.core.typing.
|
8
|
+
from lionagi.core.typing._pydantic import Field
|
9
9
|
|
10
10
|
from .imodel_config import iModelConfig
|
11
11
|
from .log_config import LogConfig
|
@@ -6,8 +6,8 @@ import json
|
|
6
6
|
import os
|
7
7
|
|
8
8
|
from lionagi.core.models.schema_model import SchemaModel
|
9
|
-
from lionagi.core.typing.
|
10
|
-
from lionagi.core.typing.
|
9
|
+
from lionagi.core.typing._pydantic import Field
|
10
|
+
from lionagi.core.typing._typing import Any
|
11
11
|
|
12
12
|
|
13
13
|
class iModelConfig(SchemaModel):
|
@@ -8,7 +8,7 @@ from typing import Any
|
|
8
8
|
from pydantic import field_validator
|
9
9
|
|
10
10
|
from lionagi.core.models.schema_model import SchemaModel
|
11
|
-
from lionagi.core.typing.
|
11
|
+
from lionagi.core.typing._pydantic import Field
|
12
12
|
|
13
13
|
|
14
14
|
class LogConfig(SchemaModel):
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from .branch_config import BranchConfig, MessageConfig
|
2
|
+
from .id_config import LionIDConfig
|
3
|
+
from .imodel_config import iModelConfig
|
4
|
+
from .log_config import LogConfig
|
5
|
+
from .retry_config import RetryConfig, TimedFuncCallConfig
|
6
|
+
|
7
|
+
__all__ = [
|
8
|
+
"LogConfig",
|
9
|
+
"LionIDConfig",
|
10
|
+
"RetryConfig",
|
11
|
+
"TimedFuncCallConfig",
|
12
|
+
"iModelConfig",
|
13
|
+
"BranchConfig",
|
14
|
+
"MessageConfig",
|
15
|
+
]
|
@@ -1,15 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
from .reason import ReasonModel
|
5
|
-
from .step import Step, StepModel
|
6
|
-
|
7
|
-
__all__: list[str] = [
|
8
|
-
"Operative",
|
9
|
-
"Step",
|
10
|
-
"ActionRequestModel",
|
11
|
-
"ActionResponseModel",
|
12
|
-
"StepModel",
|
13
|
-
"Instruct",
|
14
|
-
"ReasonModel",
|
15
|
-
]
|
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
|
"""Field definitions and validation for InstructModel components."""
|
2
6
|
|
3
7
|
from typing import Any, ClassVar
|
@@ -169,7 +173,7 @@ class OperationInstruct(Instruct):
|
|
169
173
|
return ACTIONS_FIELD.validator(cls, v)
|
170
174
|
|
171
175
|
|
172
|
-
|
176
|
+
INSTRUCT_FIELD_MODEL = FieldModel(
|
173
177
|
name="instruct_models",
|
174
178
|
annotation=list[Instruct],
|
175
179
|
default_factory=list,
|
@@ -191,6 +195,6 @@ __all__ = [
|
|
191
195
|
"REASON_FIELD",
|
192
196
|
"ACTIONS_FIELD",
|
193
197
|
"Instruct",
|
194
|
-
"
|
198
|
+
"INSTRUCT_FIELD_MODEL",
|
195
199
|
"InstructResponse",
|
196
200
|
]
|
@@ -1,25 +1,13 @@
|
|
1
|
-
|
2
|
-
|
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,
|
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:
|
20
|
+
request_params: ModelParams | None = Field(default=None)
|
33
21
|
request_type: type[BaseModel] | None = Field(default=None)
|
34
22
|
|
35
|
-
response_params:
|
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:
|
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 (
|
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
|
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,
|