mistralai 1.1.0__py3-none-any.whl → 1.2.1__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.
Files changed (187) hide show
  1. mistralai/__init__.py +4 -0
  2. mistralai/_version.py +12 -0
  3. mistralai/agents.py +56 -22
  4. mistralai/batch.py +17 -0
  5. mistralai/chat.py +64 -30
  6. mistralai/classifiers.py +396 -0
  7. mistralai/embeddings.py +10 -6
  8. mistralai/files.py +252 -19
  9. mistralai/fim.py +40 -30
  10. mistralai/jobs.py +40 -20
  11. mistralai/mistral_jobs.py +733 -0
  12. mistralai/models/__init__.py +108 -18
  13. mistralai/models/agentscompletionrequest.py +27 -10
  14. mistralai/models/agentscompletionstreamrequest.py +27 -10
  15. mistralai/models/apiendpoint.py +9 -0
  16. mistralai/models/archiveftmodelout.py +11 -5
  17. mistralai/models/assistantmessage.py +11 -6
  18. mistralai/models/basemodelcard.py +22 -6
  19. mistralai/models/batcherror.py +17 -0
  20. mistralai/models/batchjobin.py +58 -0
  21. mistralai/models/batchjobout.py +117 -0
  22. mistralai/models/batchjobsout.py +30 -0
  23. mistralai/models/batchjobstatus.py +15 -0
  24. mistralai/models/chatclassificationrequest.py +104 -0
  25. mistralai/models/chatcompletionchoice.py +9 -4
  26. mistralai/models/chatcompletionrequest.py +32 -13
  27. mistralai/models/chatcompletionresponse.py +2 -2
  28. mistralai/models/chatcompletionstreamrequest.py +32 -13
  29. mistralai/models/checkpointout.py +1 -1
  30. mistralai/models/classificationobject.py +21 -0
  31. mistralai/models/classificationrequest.py +59 -0
  32. mistralai/models/classificationresponse.py +21 -0
  33. mistralai/models/completionchunk.py +2 -2
  34. mistralai/models/completionevent.py +1 -1
  35. mistralai/models/completionresponsestreamchoice.py +11 -5
  36. mistralai/models/delete_model_v1_models_model_id_deleteop.py +1 -2
  37. mistralai/models/deletefileout.py +1 -1
  38. mistralai/models/deletemodelout.py +2 -2
  39. mistralai/models/deltamessage.py +14 -7
  40. mistralai/models/detailedjobout.py +11 -5
  41. mistralai/models/embeddingrequest.py +5 -5
  42. mistralai/models/embeddingresponse.py +2 -1
  43. mistralai/models/embeddingresponsedata.py +2 -2
  44. mistralai/models/eventout.py +2 -2
  45. mistralai/models/filepurpose.py +8 -0
  46. mistralai/models/files_api_routes_delete_fileop.py +1 -2
  47. mistralai/models/files_api_routes_download_fileop.py +16 -0
  48. mistralai/models/files_api_routes_list_filesop.py +96 -0
  49. mistralai/models/files_api_routes_retrieve_fileop.py +1 -2
  50. mistralai/models/files_api_routes_upload_fileop.py +9 -9
  51. mistralai/models/fileschema.py +7 -21
  52. mistralai/models/fimcompletionrequest.py +20 -13
  53. mistralai/models/fimcompletionresponse.py +2 -2
  54. mistralai/models/fimcompletionstreamrequest.py +20 -13
  55. mistralai/models/ftmodelcapabilitiesout.py +2 -2
  56. mistralai/models/ftmodelcard.py +24 -6
  57. mistralai/models/ftmodelout.py +9 -5
  58. mistralai/models/function.py +2 -2
  59. mistralai/models/functioncall.py +2 -1
  60. mistralai/models/functionname.py +1 -1
  61. mistralai/models/githubrepositoryin.py +11 -5
  62. mistralai/models/githubrepositoryout.py +11 -5
  63. mistralai/models/httpvalidationerror.py +0 -2
  64. mistralai/models/imageurl.py +1 -2
  65. mistralai/models/imageurlchunk.py +11 -5
  66. mistralai/models/jobin.py +2 -2
  67. mistralai/models/jobmetadataout.py +1 -2
  68. mistralai/models/jobout.py +10 -5
  69. mistralai/models/jobs_api_routes_batch_cancel_batch_jobop.py +16 -0
  70. mistralai/models/jobs_api_routes_batch_get_batch_jobop.py +16 -0
  71. mistralai/models/jobs_api_routes_batch_get_batch_jobsop.py +95 -0
  72. mistralai/models/jobs_api_routes_fine_tuning_archive_fine_tuned_modelop.py +1 -2
  73. mistralai/models/jobs_api_routes_fine_tuning_cancel_fine_tuning_jobop.py +1 -2
  74. mistralai/models/jobs_api_routes_fine_tuning_get_fine_tuning_jobop.py +1 -2
  75. mistralai/models/jobs_api_routes_fine_tuning_get_fine_tuning_jobsop.py +2 -2
  76. mistralai/models/jobs_api_routes_fine_tuning_start_fine_tuning_jobop.py +1 -2
  77. mistralai/models/jobs_api_routes_fine_tuning_unarchive_fine_tuned_modelop.py +1 -2
  78. mistralai/models/jobs_api_routes_fine_tuning_update_fine_tuned_modelop.py +1 -2
  79. mistralai/models/jobsout.py +9 -5
  80. mistralai/models/legacyjobmetadataout.py +12 -5
  81. mistralai/models/listfilesout.py +5 -1
  82. mistralai/models/metricout.py +1 -2
  83. mistralai/models/modelcapabilities.py +2 -2
  84. mistralai/models/modellist.py +2 -2
  85. mistralai/models/responseformat.py +2 -2
  86. mistralai/models/retrieve_model_v1_models_model_id_getop.py +2 -2
  87. mistralai/models/retrievefileout.py +10 -21
  88. mistralai/models/sampletype.py +6 -2
  89. mistralai/models/security.py +2 -2
  90. mistralai/models/source.py +3 -2
  91. mistralai/models/systemmessage.py +6 -6
  92. mistralai/models/textchunk.py +9 -5
  93. mistralai/models/tool.py +2 -2
  94. mistralai/models/toolcall.py +2 -2
  95. mistralai/models/toolchoice.py +2 -2
  96. mistralai/models/toolmessage.py +2 -2
  97. mistralai/models/trainingfile.py +2 -2
  98. mistralai/models/trainingparameters.py +7 -2
  99. mistralai/models/trainingparametersin.py +7 -2
  100. mistralai/models/unarchiveftmodelout.py +11 -5
  101. mistralai/models/updateftmodelin.py +1 -2
  102. mistralai/models/uploadfileout.py +7 -21
  103. mistralai/models/usageinfo.py +1 -1
  104. mistralai/models/usermessage.py +36 -5
  105. mistralai/models/validationerror.py +2 -1
  106. mistralai/models/wandbintegration.py +11 -5
  107. mistralai/models/wandbintegrationout.py +12 -6
  108. mistralai/models_.py +48 -24
  109. mistralai/sdk.py +7 -0
  110. mistralai/sdkconfiguration.py +7 -7
  111. mistralai/utils/__init__.py +8 -0
  112. mistralai/utils/annotations.py +13 -2
  113. mistralai/utils/serializers.py +25 -0
  114. {mistralai-1.1.0.dist-info → mistralai-1.2.1.dist-info}/METADATA +90 -14
  115. mistralai-1.2.1.dist-info/RECORD +276 -0
  116. {mistralai-1.1.0.dist-info → mistralai-1.2.1.dist-info}/WHEEL +1 -1
  117. mistralai_azure/__init__.py +4 -0
  118. mistralai_azure/_version.py +12 -0
  119. mistralai_azure/chat.py +64 -30
  120. mistralai_azure/models/__init__.py +9 -3
  121. mistralai_azure/models/assistantmessage.py +11 -6
  122. mistralai_azure/models/chatcompletionchoice.py +10 -5
  123. mistralai_azure/models/chatcompletionrequest.py +32 -13
  124. mistralai_azure/models/chatcompletionresponse.py +2 -2
  125. mistralai_azure/models/chatcompletionstreamrequest.py +32 -13
  126. mistralai_azure/models/completionchunk.py +2 -2
  127. mistralai_azure/models/completionevent.py +1 -1
  128. mistralai_azure/models/completionresponsestreamchoice.py +9 -4
  129. mistralai_azure/models/deltamessage.py +14 -7
  130. mistralai_azure/models/function.py +2 -2
  131. mistralai_azure/models/functioncall.py +2 -1
  132. mistralai_azure/models/functionname.py +1 -1
  133. mistralai_azure/models/httpvalidationerror.py +0 -2
  134. mistralai_azure/models/responseformat.py +2 -2
  135. mistralai_azure/models/security.py +1 -2
  136. mistralai_azure/models/systemmessage.py +6 -6
  137. mistralai_azure/models/textchunk.py +9 -5
  138. mistralai_azure/models/tool.py +2 -2
  139. mistralai_azure/models/toolcall.py +2 -2
  140. mistralai_azure/models/toolchoice.py +2 -2
  141. mistralai_azure/models/toolmessage.py +2 -2
  142. mistralai_azure/models/usageinfo.py +1 -1
  143. mistralai_azure/models/usermessage.py +36 -5
  144. mistralai_azure/models/validationerror.py +2 -1
  145. mistralai_azure/sdkconfiguration.py +7 -7
  146. mistralai_azure/utils/__init__.py +8 -0
  147. mistralai_azure/utils/annotations.py +13 -2
  148. mistralai_azure/utils/serializers.py +25 -0
  149. mistralai_gcp/__init__.py +4 -0
  150. mistralai_gcp/_version.py +12 -0
  151. mistralai_gcp/chat.py +64 -30
  152. mistralai_gcp/fim.py +40 -30
  153. mistralai_gcp/models/__init__.py +9 -3
  154. mistralai_gcp/models/assistantmessage.py +11 -6
  155. mistralai_gcp/models/chatcompletionchoice.py +10 -5
  156. mistralai_gcp/models/chatcompletionrequest.py +32 -13
  157. mistralai_gcp/models/chatcompletionresponse.py +2 -2
  158. mistralai_gcp/models/chatcompletionstreamrequest.py +32 -13
  159. mistralai_gcp/models/completionchunk.py +2 -2
  160. mistralai_gcp/models/completionevent.py +1 -1
  161. mistralai_gcp/models/completionresponsestreamchoice.py +9 -4
  162. mistralai_gcp/models/deltamessage.py +14 -7
  163. mistralai_gcp/models/fimcompletionrequest.py +20 -13
  164. mistralai_gcp/models/fimcompletionresponse.py +2 -2
  165. mistralai_gcp/models/fimcompletionstreamrequest.py +20 -13
  166. mistralai_gcp/models/function.py +2 -2
  167. mistralai_gcp/models/functioncall.py +2 -1
  168. mistralai_gcp/models/functionname.py +1 -1
  169. mistralai_gcp/models/httpvalidationerror.py +0 -2
  170. mistralai_gcp/models/responseformat.py +2 -2
  171. mistralai_gcp/models/security.py +1 -2
  172. mistralai_gcp/models/systemmessage.py +6 -6
  173. mistralai_gcp/models/textchunk.py +9 -5
  174. mistralai_gcp/models/tool.py +2 -2
  175. mistralai_gcp/models/toolcall.py +2 -2
  176. mistralai_gcp/models/toolchoice.py +2 -2
  177. mistralai_gcp/models/toolmessage.py +2 -2
  178. mistralai_gcp/models/usageinfo.py +1 -1
  179. mistralai_gcp/models/usermessage.py +36 -5
  180. mistralai_gcp/models/validationerror.py +2 -1
  181. mistralai_gcp/sdk.py +20 -11
  182. mistralai_gcp/sdkconfiguration.py +7 -7
  183. mistralai_gcp/utils/__init__.py +8 -0
  184. mistralai_gcp/utils/annotations.py +13 -2
  185. mistralai_gcp/utils/serializers.py +25 -0
  186. mistralai-1.1.0.dist-info/RECORD +0 -254
  187. {mistralai-1.1.0.dist-info → mistralai-1.2.1.dist-info}/LICENSE +0 -0
@@ -2,7 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from mistralai_gcp.types import BaseModel
5
- from typing import Any, Dict, TypedDict, Union
5
+ from typing import Any, Dict, Union
6
+ from typing_extensions import TypedDict
6
7
 
7
8
 
8
9
  ArgumentsTypedDict = Union[Dict[str, Any], str]
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from mistralai_gcp.types import BaseModel
5
- from typing import TypedDict
5
+ from typing_extensions import TypedDict
6
6
 
7
7
 
8
8
  class FunctionNameTypedDict(TypedDict):
@@ -12,8 +12,6 @@ class HTTPValidationErrorData(BaseModel):
12
12
 
13
13
 
14
14
  class HTTPValidationError(Exception):
15
- r"""Validation Error"""
16
-
17
15
  data: HTTPValidationErrorData
18
16
 
19
17
  def __init__(self, data: HTTPValidationErrorData):
@@ -3,8 +3,8 @@
3
3
  from __future__ import annotations
4
4
  from .responseformats import ResponseFormats
5
5
  from mistralai_gcp.types import BaseModel
6
- from typing import Optional, TypedDict
7
- from typing_extensions import NotRequired
6
+ from typing import Optional
7
+ from typing_extensions import NotRequired, TypedDict
8
8
 
9
9
 
10
10
  class ResponseFormatTypedDict(TypedDict):
@@ -3,8 +3,7 @@
3
3
  from __future__ import annotations
4
4
  from mistralai_gcp.types import BaseModel
5
5
  from mistralai_gcp.utils import FieldMetadata, SecurityMetadata
6
- from typing import TypedDict
7
- from typing_extensions import Annotated
6
+ from typing_extensions import Annotated, TypedDict
8
7
 
9
8
 
10
9
  class SecurityTypedDict(TypedDict):
@@ -3,25 +3,25 @@
3
3
  from __future__ import annotations
4
4
  from .textchunk import TextChunk, TextChunkTypedDict
5
5
  from mistralai_gcp.types import BaseModel
6
- from typing import List, Literal, Optional, TypedDict, Union
7
- from typing_extensions import NotRequired
6
+ from typing import List, Literal, Optional, Union
7
+ from typing_extensions import NotRequired, TypedDict
8
8
 
9
9
 
10
- ContentTypedDict = Union[str, List[TextChunkTypedDict]]
10
+ SystemMessageContentTypedDict = Union[str, List[TextChunkTypedDict]]
11
11
 
12
12
 
13
- Content = Union[str, List[TextChunk]]
13
+ SystemMessageContent = Union[str, List[TextChunk]]
14
14
 
15
15
 
16
16
  Role = Literal["system"]
17
17
 
18
18
 
19
19
  class SystemMessageTypedDict(TypedDict):
20
- content: ContentTypedDict
20
+ content: SystemMessageContentTypedDict
21
21
  role: NotRequired[Role]
22
22
 
23
23
 
24
24
  class SystemMessage(BaseModel):
25
- content: Content
25
+ content: SystemMessageContent
26
26
 
27
27
  role: Optional[Role] = "system"
@@ -2,9 +2,11 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from mistralai_gcp.types import BaseModel
5
+ from mistralai_gcp.utils import validate_const
5
6
  import pydantic
6
- from typing import Final, Literal, Optional, TypedDict
7
- from typing_extensions import Annotated
7
+ from pydantic.functional_validators import AfterValidator
8
+ from typing import Literal, Optional
9
+ from typing_extensions import Annotated, TypedDict
8
10
 
9
11
 
10
12
  Type = Literal["text"]
@@ -12,11 +14,13 @@ Type = Literal["text"]
12
14
 
13
15
  class TextChunkTypedDict(TypedDict):
14
16
  text: str
17
+ type: Type
15
18
 
16
19
 
17
20
  class TextChunk(BaseModel):
18
21
  text: str
19
22
 
20
- # fmt: off
21
- TYPE: Annotated[Final[Optional[Type]], pydantic.Field(alias="type")] = "text" # type: ignore
22
- # fmt: on
23
+ TYPE: Annotated[
24
+ Annotated[Optional[Type], AfterValidator(validate_const("text"))],
25
+ pydantic.Field(alias="type"),
26
+ ] = "text"
@@ -6,8 +6,8 @@ from .tooltypes import ToolTypes
6
6
  from mistralai_gcp.types import BaseModel
7
7
  from mistralai_gcp.utils import validate_open_enum
8
8
  from pydantic.functional_validators import PlainValidator
9
- from typing import Optional, TypedDict
10
- from typing_extensions import Annotated, NotRequired
9
+ from typing import Optional
10
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
11
 
12
12
 
13
13
  class ToolTypedDict(TypedDict):
@@ -6,8 +6,8 @@ from .tooltypes import ToolTypes
6
6
  from mistralai_gcp.types import BaseModel
7
7
  from mistralai_gcp.utils import validate_open_enum
8
8
  from pydantic.functional_validators import PlainValidator
9
- from typing import Optional, TypedDict
10
- from typing_extensions import Annotated, NotRequired
9
+ from typing import Optional
10
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
11
 
12
12
 
13
13
  class ToolCallTypedDict(TypedDict):
@@ -6,8 +6,8 @@ from .tooltypes import ToolTypes
6
6
  from mistralai_gcp.types import BaseModel
7
7
  from mistralai_gcp.utils import validate_open_enum
8
8
  from pydantic.functional_validators import PlainValidator
9
- from typing import Optional, TypedDict
10
- from typing_extensions import Annotated, NotRequired
9
+ from typing import Optional
10
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
11
 
12
12
 
13
13
  class ToolChoiceTypedDict(TypedDict):
@@ -9,8 +9,8 @@ from mistralai_gcp.types import (
9
9
  UNSET_SENTINEL,
10
10
  )
11
11
  from pydantic import model_serializer
12
- from typing import Literal, Optional, TypedDict
13
- from typing_extensions import NotRequired
12
+ from typing import Literal, Optional
13
+ from typing_extensions import NotRequired, TypedDict
14
14
 
15
15
 
16
16
  ToolMessageRole = Literal["tool"]
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from mistralai_gcp.types import BaseModel
5
- from typing import TypedDict
5
+ from typing_extensions import TypedDict
6
6
 
7
7
 
8
8
  class UsageInfoTypedDict(TypedDict):
@@ -2,9 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from .contentchunk import ContentChunk, ContentChunkTypedDict
5
- from mistralai_gcp.types import BaseModel
6
- from typing import List, Literal, Optional, TypedDict, Union
7
- from typing_extensions import NotRequired
5
+ from mistralai_gcp.types import BaseModel, Nullable, UNSET_SENTINEL
6
+ from pydantic import model_serializer
7
+ from typing import List, Literal, Optional, Union
8
+ from typing_extensions import NotRequired, TypedDict
8
9
 
9
10
 
10
11
  UserMessageContentTypedDict = Union[str, List[ContentChunkTypedDict]]
@@ -17,11 +18,41 @@ UserMessageRole = Literal["user"]
17
18
 
18
19
 
19
20
  class UserMessageTypedDict(TypedDict):
20
- content: UserMessageContentTypedDict
21
+ content: Nullable[UserMessageContentTypedDict]
21
22
  role: NotRequired[UserMessageRole]
22
23
 
23
24
 
24
25
  class UserMessage(BaseModel):
25
- content: UserMessageContent
26
+ content: Nullable[UserMessageContent]
26
27
 
27
28
  role: Optional[UserMessageRole] = "user"
29
+
30
+ @model_serializer(mode="wrap")
31
+ def serialize_model(self, handler):
32
+ optional_fields = ["role"]
33
+ nullable_fields = ["content"]
34
+ null_default_fields = []
35
+
36
+ serialized = handler(self)
37
+
38
+ m = {}
39
+
40
+ for n, f in self.model_fields.items():
41
+ k = f.alias or n
42
+ val = serialized.get(k)
43
+ serialized.pop(k, None)
44
+
45
+ optional_nullable = k in optional_fields and k in nullable_fields
46
+ is_set = (
47
+ self.__pydantic_fields_set__.intersection({n})
48
+ or k in null_default_fields
49
+ ) # pylint: disable=no-member
50
+
51
+ if val is not None and val != UNSET_SENTINEL:
52
+ m[k] = val
53
+ elif val != UNSET_SENTINEL and (
54
+ not k in optional_fields or (optional_nullable and is_set)
55
+ ):
56
+ m[k] = val
57
+
58
+ return m
@@ -2,7 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  from mistralai_gcp.types import BaseModel
5
- from typing import List, TypedDict, Union
5
+ from typing import List, Union
6
+ from typing_extensions import TypedDict
6
7
 
7
8
 
8
9
  LocTypedDict = Union[str, int]
mistralai_gcp/sdk.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
2
2
 
3
3
  import json
4
- from typing import Optional, Union
4
+ from typing import Optional, Tuple, Union
5
5
 
6
6
  import google.auth
7
7
  import google.auth.credentials
@@ -20,6 +20,19 @@ from .sdkconfiguration import SDKConfiguration
20
20
  from .utils.logger import Logger, NoOpLogger
21
21
  from .utils.retries import RetryConfig
22
22
 
23
+ LEGACY_MODEL_ID_FORMAT = {
24
+ "codestral-2405": "codestral@2405",
25
+ "mistral-large-2407": "mistral-large@2407",
26
+ "mistral-nemo-2407": "mistral-nemo@2407",
27
+ }
28
+
29
+ def get_model_info(model: str) -> Tuple[str,str]:
30
+ # if the model requiers the legacy fomat, use it, else do nothing.
31
+ model_id = LEGACY_MODEL_ID_FORMAT.get(model, model)
32
+ model = "-".join(model.split("-")[:-1])
33
+ return model, model_id
34
+
35
+
23
36
 
24
37
  class MistralGoogleCloud(BaseSDK):
25
38
  r"""Mistral AI API: Our Chat Completion and Embeddings APIs specification. Create your account on [La Plateforme](https://console.mistral.ai) to get access and read the [docs](https://docs.mistral.ai) to learn how to use it."""
@@ -140,28 +153,24 @@ class GoogleCloudBeforeRequestHook(BeforeRequestHook):
140
153
  def before_request(
141
154
  self, hook_ctx, request: httpx.Request
142
155
  ) -> Union[httpx.Request, Exception]:
143
- # The goal of this function is to template in the region, project, model, and model_version into the URL path
156
+ # The goal of this function is to template in the region, project and model into the URL path
144
157
  # We do this here so that the API remains more user-friendly
145
- model = None
146
- model_version = None
158
+ model_id = None
147
159
  new_content = None
148
160
  if request.content:
149
161
  parsed = json.loads(request.content.decode("utf-8"))
150
162
  model_raw = parsed.get("model")
151
- model = "-".join(model_raw.split("-")[:-1])
152
- model_version = model_raw.split("-")[-1]
153
- parsed["model"] = model
163
+ model_name, model_id = get_model_info(model_raw)
164
+ parsed["model"] = model_name
154
165
  new_content = json.dumps(parsed).encode("utf-8")
155
166
 
156
- if model == "":
167
+ if model_id == "":
157
168
  raise models.SDKError("model must be provided")
158
169
 
159
- if model_version is None:
160
- raise models.SDKError("model_version must be provided")
161
170
 
162
171
  stream = "streamRawPredict" in request.url.path
163
172
  specifier = "streamRawPredict" if stream else "rawPredict"
164
- url = f"/v1/projects/{self.project_id}/locations/{self.region}/publishers/mistralai/models/{model}@{model_version}:{specifier}"
173
+ url = f"/v1/projects/{self.project_id}/locations/{self.region}/publishers/mistralai/models/{model_id}:{specifier}"
165
174
 
166
175
  headers = dict(request.headers)
167
176
  # Delete content-length header as it will need to be recalculated
@@ -10,10 +10,10 @@ from pydantic import Field
10
10
  from typing import Callable, Dict, Optional, Tuple, Union
11
11
 
12
12
 
13
- SERVER_PROD = "prod"
14
- r"""Production server"""
13
+ SERVER_EU = "eu"
14
+ r"""EU Production server"""
15
15
  SERVERS = {
16
- SERVER_PROD: "https://api.mistral.ai",
16
+ SERVER_EU: "https://api.mistral.ai",
17
17
  }
18
18
  """Contains the list of servers available to the SDK"""
19
19
 
@@ -28,9 +28,9 @@ class SDKConfiguration:
28
28
  server: Optional[str] = ""
29
29
  language: str = "python"
30
30
  openapi_doc_version: str = "0.0.2"
31
- sdk_version: str = "1.2.2"
32
- gen_version: str = "2.415.6"
33
- user_agent: str = "speakeasy-sdk/python 1.2.2 2.415.6 0.0.2 mistralai-gcp"
31
+ sdk_version: str = "1.2.0"
32
+ gen_version: str = "2.452.0"
33
+ user_agent: str = "speakeasy-sdk/python 1.2.0 2.452.0 0.0.2 mistralai-gcp"
34
34
  retry_config: OptionalNullable[RetryConfig] = Field(default_factory=lambda: UNSET)
35
35
  timeout_ms: Optional[int] = None
36
36
 
@@ -41,7 +41,7 @@ class SDKConfiguration:
41
41
  if self.server_url is not None and self.server_url:
42
42
  return remove_suffix(self.server_url, "/"), {}
43
43
  if not self.server:
44
- self.server = SERVER_PROD
44
+ self.server = SERVER_EU
45
45
 
46
46
  if self.server not in SERVERS:
47
47
  raise ValueError(f'Invalid server "{self.server}"')
@@ -27,6 +27,10 @@ from .serializers import (
27
27
  serialize_float,
28
28
  serialize_int,
29
29
  stream_to_text,
30
+ stream_to_text_async,
31
+ stream_to_bytes,
32
+ stream_to_bytes_async,
33
+ validate_const,
30
34
  validate_decimal,
31
35
  validate_float,
32
36
  validate_int,
@@ -79,10 +83,14 @@ __all__ = [
79
83
  "serialize_request_body",
80
84
  "SerializedRequestBody",
81
85
  "stream_to_text",
86
+ "stream_to_text_async",
87
+ "stream_to_bytes",
88
+ "stream_to_bytes_async",
82
89
  "template_url",
83
90
  "unmarshal",
84
91
  "unmarshal_json",
85
92
  "validate_decimal",
93
+ "validate_const",
86
94
  "validate_float",
87
95
  "validate_int",
88
96
  "validate_open_enum",
@@ -1,5 +1,6 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
+ from enum import Enum
3
4
  from typing import Any
4
5
 
5
6
  def get_discriminator(model: Any, fieldname: str, key: str) -> str:
@@ -10,10 +11,20 @@ def get_discriminator(model: Any, fieldname: str, key: str) -> str:
10
11
  raise ValueError(f'Could not find discriminator key {key} in {model}') from e
11
12
 
12
13
  if hasattr(model, fieldname):
13
- return f'{getattr(model, fieldname)}'
14
+ attr = getattr(model, fieldname)
15
+
16
+ if isinstance(attr, Enum):
17
+ return f'{attr.value}'
18
+
19
+ return f'{attr}'
14
20
 
15
21
  fieldname = fieldname.upper()
16
22
  if hasattr(model, fieldname):
17
- return f'{getattr(model, fieldname)}'
23
+ attr = getattr(model, fieldname)
24
+
25
+ if isinstance(attr, Enum):
26
+ return f'{attr.value}'
27
+
28
+ return f'{attr}'
18
29
 
19
30
  raise ValueError(f'Could not find discriminator field {fieldname} in {model}')
@@ -116,6 +116,19 @@ def validate_open_enum(is_int: bool):
116
116
  return validate
117
117
 
118
118
 
119
+ def validate_const(v):
120
+ def validate(c):
121
+ if is_optional_type(type(c)) and c is None:
122
+ return None
123
+
124
+ if v != c:
125
+ raise ValueError(f"Expected {v}")
126
+
127
+ return c
128
+
129
+ return validate
130
+
131
+
119
132
  def unmarshal_json(raw, typ: Any) -> Any:
120
133
  return unmarshal(from_json(raw), typ)
121
134
 
@@ -172,6 +185,18 @@ def stream_to_text(stream: httpx.Response) -> str:
172
185
  return "".join(stream.iter_text())
173
186
 
174
187
 
188
+ async def stream_to_text_async(stream: httpx.Response) -> str:
189
+ return "".join([chunk async for chunk in stream.aiter_text()])
190
+
191
+
192
+ def stream_to_bytes(stream: httpx.Response) -> bytes:
193
+ return stream.content
194
+
195
+
196
+ async def stream_to_bytes_async(stream: httpx.Response) -> bytes:
197
+ return await stream.aread()
198
+
199
+
175
200
  def get_pydantic_model(data: Any, typ: Any) -> Any:
176
201
  if not _contains_pydantic_model(data):
177
202
  return unmarshal(data, typ)