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.
@@ -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 LMN.AZURE_GPT_4o_2024_0513 | LMN.AZURE_GPT_4o_MINI_2024_0718:
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, list | dict | str | int | float | bool]] = None # type: ignore
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
- return json.loads(value)
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[LanguageModelMessage]
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, exclude=["tool_calls"])
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.30
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=Oxkr9_6s8gFubxjox-iCm1GSs1RCAQQ5t8oh20izlC0,12002
40
- unique_toolkit/language_model/schemas.py,sha256=LYWsZcGEPNK9T-fTHC4V0VbtCTNd1Q16UVf1b6WQzrU,5038
41
- unique_toolkit/language_model/service.py,sha256=dtC4I5iDDAJXsOwd_b2COj8tkKIp9LPaxTpGkuV2o3I,13411
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.30.dist-info/LICENSE,sha256=GlN8wHNdh53xwOPg44URnwag6TEolCjoq3YD_KrWgss,193
44
- unique_toolkit-0.5.30.dist-info/METADATA,sha256=Vd_xIuIoQ_lnZNQJUoPUT3XQ32zXeGuAtC7FJdZQXxQ,12670
45
- unique_toolkit-0.5.30.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
46
- unique_toolkit-0.5.30.dist-info/RECORD,,
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,,