unique_toolkit 0.5.30__py3-none-any.whl → 0.5.32__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.
- unique_toolkit/language_model/infos.py +17 -1
- unique_toolkit/language_model/schemas.py +42 -6
- unique_toolkit/language_model/service.py +3 -3
- {unique_toolkit-0.5.30.dist-info → unique_toolkit-0.5.32.dist-info}/METADATA +7 -1
- {unique_toolkit-0.5.30.dist-info → unique_toolkit-0.5.32.dist-info}/RECORD +7 -7
- {unique_toolkit-0.5.30.dist-info → unique_toolkit-0.5.32.dist-info}/LICENSE +0 -0
- {unique_toolkit-0.5.30.dist-info → unique_toolkit-0.5.32.dist-info}/WHEEL +0 -0
@@ -17,6 +17,7 @@ class LanguageModelName(StrEnum):
|
|
17
17
|
AZURE_GPT_4_32K_0613 = "AZURE_GPT_4_32K_0613"
|
18
18
|
AZURE_GPT_4_TURBO_2024_0409 = "AZURE_GPT_4_TURBO_2024_0409"
|
19
19
|
AZURE_GPT_4o_2024_0513 = "AZURE_GPT_4o_2024_0513"
|
20
|
+
AZURE_GPT_4o_2024_0806 = "AZURE_GPT_4o_2024_0806"
|
20
21
|
AZURE_GPT_4o_MINI_2024_0718 = "AZURE_GPT_4o_MINI_2024_0718"
|
21
22
|
|
22
23
|
|
@@ -42,7 +43,11 @@ def get_encoder_name(model_name: LanguageModelName) -> Optional[EncoderName]:
|
|
42
43
|
| LMN.AZURE_GPT_4_TURBO_2024_0409
|
43
44
|
):
|
44
45
|
return EncoderName.CL100K_BASE
|
45
|
-
case
|
46
|
+
case (
|
47
|
+
LMN.AZURE_GPT_4o_2024_0513
|
48
|
+
| LMN.AZURE_GPT_4o_2024_0806
|
49
|
+
| LMN.AZURE_GPT_4o_MINI_2024_0718
|
50
|
+
):
|
46
51
|
return EncoderName.O200K_BASE
|
47
52
|
case _:
|
48
53
|
print(f"{model_name} is not supported. Please add encoder information.")
|
@@ -369,6 +374,17 @@ AzureGpt4o20240513 = create_language_model(
|
|
369
374
|
published_at=date(2024, 5, 13),
|
370
375
|
)
|
371
376
|
|
377
|
+
AzureGpt4o20240806 = create_language_model(
|
378
|
+
name=LanguageModelName.AZURE_GPT_4o_2024_0806,
|
379
|
+
encoder_name=get_encoder_name(LanguageModelName.AZURE_GPT_4o_2024_0806),
|
380
|
+
provider=LanguageModelProvider.AZURE,
|
381
|
+
version="2024-08-06",
|
382
|
+
token_limit_input=128000,
|
383
|
+
token_limit_output=16384,
|
384
|
+
info_cutoff_at=date(2023, 10, 1),
|
385
|
+
published_at=date(2024, 8, 6),
|
386
|
+
)
|
387
|
+
|
372
388
|
AzureGpt4oMini20240718 = create_language_model(
|
373
389
|
name=LanguageModelName.AZURE_GPT_4o_MINI_2024_0718,
|
374
390
|
provider=LanguageModelProvider.AZURE,
|
@@ -9,6 +9,7 @@ from pydantic import (
|
|
9
9
|
Field,
|
10
10
|
RootModel,
|
11
11
|
field_validator,
|
12
|
+
model_serializer,
|
12
13
|
model_validator,
|
13
14
|
)
|
14
15
|
|
@@ -32,27 +33,54 @@ class LanguageModelFunction(BaseModel):
|
|
32
33
|
|
33
34
|
id: Optional[str] = None
|
34
35
|
name: str
|
35
|
-
arguments: Optional[dict[str,
|
36
|
+
arguments: Optional[dict[str, Any] | str] = None # type: ignore
|
36
37
|
|
37
38
|
@field_validator("arguments", mode="before")
|
38
39
|
def set_arguments(cls, value):
|
39
|
-
|
40
|
+
if isinstance(value, str):
|
41
|
+
return json.loads(value)
|
42
|
+
return value
|
43
|
+
|
44
|
+
@model_serializer()
|
45
|
+
def serialize_model(self):
|
46
|
+
seralization = {}
|
47
|
+
if self.id:
|
48
|
+
seralization["id"] = self.id
|
49
|
+
seralization["name"] = self.name
|
50
|
+
if self.arguments:
|
51
|
+
seralization["arguments"] = json.dumps(self.arguments)
|
52
|
+
return seralization
|
40
53
|
|
41
54
|
|
42
55
|
class LanguageModelFunctionCall(BaseModel):
|
43
56
|
model_config = model_config
|
44
57
|
|
45
|
-
id: str
|
58
|
+
id: Optional[str] = None
|
46
59
|
type: Optional[str] = None
|
47
60
|
function: LanguageModelFunction
|
48
61
|
|
62
|
+
@staticmethod
|
63
|
+
def create_assistant_message_from_tool_calls(
|
64
|
+
tool_calls: list[LanguageModelFunction],
|
65
|
+
):
|
66
|
+
assistant_message = LanguageModelAssistantMessage(
|
67
|
+
content="",
|
68
|
+
tool_calls=[
|
69
|
+
LanguageModelFunctionCall(
|
70
|
+
id=tool_call.id,
|
71
|
+
type="function",
|
72
|
+
function=tool_call,
|
73
|
+
)
|
74
|
+
for tool_call in tool_calls
|
75
|
+
],
|
76
|
+
)
|
77
|
+
return assistant_message
|
78
|
+
|
49
79
|
|
50
80
|
class LanguageModelMessage(BaseModel):
|
51
81
|
model_config = model_config
|
52
|
-
|
53
82
|
role: LanguageModelMessageRole
|
54
83
|
content: Optional[str | list[dict]] = None
|
55
|
-
name: Optional[str] = None
|
56
84
|
tool_calls: Optional[list[LanguageModelFunctionCall]] = None
|
57
85
|
|
58
86
|
|
@@ -82,6 +110,8 @@ class LanguageModelAssistantMessage(LanguageModelMessage):
|
|
82
110
|
|
83
111
|
class LanguageModelToolMessage(LanguageModelMessage):
|
84
112
|
role: LanguageModelMessageRole = LanguageModelMessageRole.TOOL
|
113
|
+
name: str
|
114
|
+
tool_call_id: str
|
85
115
|
|
86
116
|
@field_validator("role", mode="before")
|
87
117
|
def set_role(cls, value):
|
@@ -89,7 +119,13 @@ class LanguageModelToolMessage(LanguageModelMessage):
|
|
89
119
|
|
90
120
|
|
91
121
|
class LanguageModelMessages(RootModel):
|
92
|
-
root: list[
|
122
|
+
root: list[
|
123
|
+
LanguageModelMessage
|
124
|
+
| LanguageModelToolMessage
|
125
|
+
| LanguageModelAssistantMessage
|
126
|
+
| LanguageModelSystemMessage
|
127
|
+
| LanguageModelUserMessage
|
128
|
+
]
|
93
129
|
|
94
130
|
def __iter__(self):
|
95
131
|
return iter(self.root)
|
@@ -127,7 +127,7 @@ class LanguageModelService(BaseService):
|
|
127
127
|
)
|
128
128
|
return LanguageModelResponse(**response)
|
129
129
|
except Exception as e:
|
130
|
-
logger.error(f"Error completing: {e}")
|
130
|
+
logger.error(f"Error completing: {e}") # type: ignore
|
131
131
|
raise e
|
132
132
|
|
133
133
|
async def complete_async(
|
@@ -198,7 +198,7 @@ class LanguageModelService(BaseService):
|
|
198
198
|
options = self._add_tools_to_options({}, tools)
|
199
199
|
options["temperature"] = temperature
|
200
200
|
search_context = self._to_search_context(content_chunks)
|
201
|
-
messages = messages.model_dump(exclude_none=True)
|
201
|
+
messages = messages.model_dump(exclude_none=True, by_alias=True)
|
202
202
|
model = (
|
203
203
|
model_name.name if isinstance(model_name, LanguageModelName) else model_name
|
204
204
|
)
|
@@ -259,7 +259,7 @@ class LanguageModelService(BaseService):
|
|
259
259
|
options = self._add_tools_to_options({}, tools)
|
260
260
|
options["temperature"] = temperature
|
261
261
|
search_context = self._to_search_context(content_chunks)
|
262
|
-
messages = messages.model_dump(exclude_none=True,
|
262
|
+
messages = messages.model_dump(exclude_none=True, by_alias=True)
|
263
263
|
model = (
|
264
264
|
model_name.name if isinstance(model_name, LanguageModelName) else model_name
|
265
265
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: unique_toolkit
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.32
|
4
4
|
Summary:
|
5
5
|
License: Proprietary
|
6
6
|
Author: Martin Fadler
|
@@ -100,6 +100,12 @@ All notable changes to this project will be documented in this file.
|
|
100
100
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
101
101
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
102
102
|
|
103
|
+
## [0.5.32] - 2024-10-30
|
104
|
+
- Extending `LanguageModelName` with GPT-4o-2024-0806. This model is invoked using `AZURE_GPT_4o_2024_0806`.
|
105
|
+
|
106
|
+
## [0.5.31] - 2024-10-29
|
107
|
+
- Adding support for function calling. Assistant message for tool calls can be directly created with `LanguageModelFunctionCall.create_assistant_message_from_tool_calls`. Better separation of schemas for different types of `LanguageModelMessages`.
|
108
|
+
|
103
109
|
## [0.5.30] - 2024-10-28
|
104
110
|
- Correctly use `temperature` parameter in `LanguageModelService.complete` and `LanguageModelService.complete_async` methods
|
105
111
|
|
@@ -36,11 +36,11 @@ unique_toolkit/evaluators/hallucination/utils.py,sha256=507BsX1mFTEne1-LdRCNMgBj
|
|
36
36
|
unique_toolkit/evaluators/output_parser.py,sha256=eI72qkzK1dZyUvnfP2SOAQCGBj_-PwX5wy_aLPMsJMY,883
|
37
37
|
unique_toolkit/evaluators/schemas.py,sha256=Jaue6Uhx75X1CyHKWj8sT3RE1JZXTqoLtfLt2xQNCX8,2507
|
38
38
|
unique_toolkit/language_model/__init__.py,sha256=YuhyczGPj6w9xX-sOVUhmozvzIFxcckHFEkeMBecr5s,1784
|
39
|
-
unique_toolkit/language_model/infos.py,sha256=
|
40
|
-
unique_toolkit/language_model/schemas.py,sha256=
|
41
|
-
unique_toolkit/language_model/service.py,sha256=
|
39
|
+
unique_toolkit/language_model/infos.py,sha256=kQK6F3r8xTN7oT6b39J7rxW-Y4iPXjx_Fr9bCOVQdm0,12509
|
40
|
+
unique_toolkit/language_model/schemas.py,sha256=CLMnhUQeBlsm-XX7Sy54_Gxeqfa7M0z-P7xMwOzfqTg,6089
|
41
|
+
unique_toolkit/language_model/service.py,sha256=s5X6EStyYumiYqlD9gkW4GANif18d9QZOMysmUSfv8M,13433
|
42
42
|
unique_toolkit/language_model/utils.py,sha256=WBPj1XKkDgxy_-T8HCZvsfkkSzj_1w4UZzNmyvdbBLY,1081
|
43
|
-
unique_toolkit-0.5.
|
44
|
-
unique_toolkit-0.5.
|
45
|
-
unique_toolkit-0.5.
|
46
|
-
unique_toolkit-0.5.
|
43
|
+
unique_toolkit-0.5.32.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
|
44
|
+
unique_toolkit-0.5.32.dist-info/METADATA,sha256=xmrbjxQtTkd8prcjxPozsRmi_dUyNxrVAWAm_rsNsiw,13079
|
45
|
+
unique_toolkit-0.5.32.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
46
|
+
unique_toolkit-0.5.32.dist-info/RECORD,,
|
File without changes
|
File without changes
|