mistralai 0.4.2__py3-none-any.whl → 0.5.5a50__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 (240) hide show
  1. mistralai/__init__.py +5 -0
  2. mistralai/_hooks/__init__.py +5 -0
  3. mistralai/_hooks/custom_user_agent.py +16 -0
  4. mistralai/_hooks/deprecation_warning.py +26 -0
  5. mistralai/_hooks/registration.py +17 -0
  6. mistralai/_hooks/sdkhooks.py +57 -0
  7. mistralai/_hooks/types.py +76 -0
  8. mistralai/async_client.py +5 -413
  9. mistralai/basesdk.py +216 -0
  10. mistralai/chat.py +475 -0
  11. mistralai/client.py +5 -414
  12. mistralai/embeddings.py +182 -0
  13. mistralai/files.py +600 -84
  14. mistralai/fim.py +439 -0
  15. mistralai/fine_tuning.py +855 -0
  16. mistralai/httpclient.py +78 -0
  17. mistralai/models/__init__.py +80 -0
  18. mistralai/models/archiveftmodelout.py +19 -0
  19. mistralai/models/assistantmessage.py +58 -0
  20. mistralai/models/chatcompletionchoice.py +33 -0
  21. mistralai/models/chatcompletionrequest.py +114 -0
  22. mistralai/models/chatcompletionresponse.py +27 -0
  23. mistralai/models/chatcompletionstreamrequest.py +112 -0
  24. mistralai/models/checkpointout.py +25 -0
  25. mistralai/models/completionchunk.py +27 -0
  26. mistralai/models/completionevent.py +15 -0
  27. mistralai/models/completionresponsestreamchoice.py +53 -0
  28. mistralai/models/contentchunk.py +17 -0
  29. mistralai/models/delete_model_v1_models_model_id_deleteop.py +16 -0
  30. mistralai/models/deletefileout.py +24 -0
  31. mistralai/models/deletemodelout.py +25 -0
  32. mistralai/models/deltamessage.py +52 -0
  33. mistralai/models/detailedjobout.py +96 -0
  34. mistralai/models/embeddingrequest.py +66 -0
  35. mistralai/models/embeddingresponse.py +24 -0
  36. mistralai/models/embeddingresponsedata.py +19 -0
  37. mistralai/models/eventout.py +55 -0
  38. mistralai/models/files_api_routes_delete_fileop.py +16 -0
  39. mistralai/models/files_api_routes_retrieve_fileop.py +16 -0
  40. mistralai/models/files_api_routes_upload_fileop.py +51 -0
  41. mistralai/models/fileschema.py +76 -0
  42. mistralai/models/fimcompletionrequest.py +99 -0
  43. mistralai/models/fimcompletionresponse.py +27 -0
  44. mistralai/models/fimcompletionstreamrequest.py +97 -0
  45. mistralai/models/finetuneablemodel.py +8 -0
  46. mistralai/models/ftmodelcapabilitiesout.py +21 -0
  47. mistralai/models/ftmodelout.py +70 -0
  48. mistralai/models/function.py +19 -0
  49. mistralai/models/functioncall.py +16 -0
  50. mistralai/models/githubrepositoryin.py +57 -0
  51. mistralai/models/githubrepositoryout.py +57 -0
  52. mistralai/models/httpvalidationerror.py +23 -0
  53. mistralai/models/jobin.py +78 -0
  54. mistralai/models/jobmetadataout.py +59 -0
  55. mistralai/models/jobout.py +112 -0
  56. mistralai/models/jobs_api_routes_fine_tuning_archive_fine_tuned_modelop.py +16 -0
  57. mistralai/models/jobs_api_routes_fine_tuning_cancel_fine_tuning_jobop.py +18 -0
  58. mistralai/models/jobs_api_routes_fine_tuning_create_fine_tuning_jobop.py +73 -0
  59. mistralai/models/jobs_api_routes_fine_tuning_get_fine_tuning_jobop.py +18 -0
  60. mistralai/models/jobs_api_routes_fine_tuning_get_fine_tuning_jobsop.py +86 -0
  61. mistralai/models/jobs_api_routes_fine_tuning_start_fine_tuning_jobop.py +16 -0
  62. mistralai/models/jobs_api_routes_fine_tuning_unarchive_fine_tuned_modelop.py +16 -0
  63. mistralai/models/jobs_api_routes_fine_tuning_update_fine_tuned_modelop.py +19 -0
  64. mistralai/models/jobsout.py +20 -0
  65. mistralai/models/legacyjobmetadataout.py +85 -0
  66. mistralai/models/listfilesout.py +17 -0
  67. mistralai/models/metricout.py +55 -0
  68. mistralai/models/modelcapabilities.py +21 -0
  69. mistralai/models/modelcard.py +71 -0
  70. mistralai/models/modellist.py +18 -0
  71. mistralai/models/responseformat.py +18 -0
  72. mistralai/models/retrieve_model_v1_models_model_id_getop.py +16 -0
  73. mistralai/models/retrievefileout.py +76 -0
  74. mistralai/models/sampletype.py +7 -0
  75. mistralai/models/sdkerror.py +22 -0
  76. mistralai/models/security.py +16 -0
  77. mistralai/models/source.py +7 -0
  78. mistralai/models/systemmessage.py +26 -0
  79. mistralai/models/textchunk.py +17 -0
  80. mistralai/models/tool.py +18 -0
  81. mistralai/models/toolcall.py +20 -0
  82. mistralai/models/toolmessage.py +55 -0
  83. mistralai/models/trainingfile.py +17 -0
  84. mistralai/models/trainingparameters.py +53 -0
  85. mistralai/models/trainingparametersin.py +61 -0
  86. mistralai/models/unarchiveftmodelout.py +19 -0
  87. mistralai/models/updateftmodelin.py +49 -0
  88. mistralai/models/uploadfileout.py +76 -0
  89. mistralai/models/usageinfo.py +18 -0
  90. mistralai/models/usermessage.py +26 -0
  91. mistralai/models/validationerror.py +24 -0
  92. mistralai/models/wandbintegration.py +61 -0
  93. mistralai/models/wandbintegrationout.py +57 -0
  94. mistralai/models_.py +928 -0
  95. mistralai/py.typed +1 -0
  96. mistralai/sdk.py +111 -0
  97. mistralai/sdkconfiguration.py +53 -0
  98. mistralai/types/__init__.py +21 -0
  99. mistralai/types/basemodel.py +35 -0
  100. mistralai/utils/__init__.py +82 -0
  101. mistralai/utils/annotations.py +19 -0
  102. mistralai/utils/enums.py +34 -0
  103. mistralai/utils/eventstreaming.py +179 -0
  104. mistralai/utils/forms.py +207 -0
  105. mistralai/utils/headers.py +136 -0
  106. mistralai/utils/metadata.py +118 -0
  107. mistralai/utils/queryparams.py +203 -0
  108. mistralai/utils/requestbodies.py +66 -0
  109. mistralai/utils/retries.py +216 -0
  110. mistralai/utils/security.py +182 -0
  111. mistralai/utils/serializers.py +181 -0
  112. mistralai/utils/url.py +150 -0
  113. mistralai/utils/values.py +128 -0
  114. {mistralai-0.4.2.dist-info → mistralai-0.5.5a50.dist-info}/LICENSE +1 -1
  115. mistralai-0.5.5a50.dist-info/METADATA +626 -0
  116. mistralai-0.5.5a50.dist-info/RECORD +228 -0
  117. mistralai_azure/__init__.py +5 -0
  118. mistralai_azure/_hooks/__init__.py +5 -0
  119. mistralai_azure/_hooks/custom_user_agent.py +16 -0
  120. mistralai_azure/_hooks/registration.py +15 -0
  121. mistralai_azure/_hooks/sdkhooks.py +57 -0
  122. mistralai_azure/_hooks/types.py +76 -0
  123. mistralai_azure/basesdk.py +215 -0
  124. mistralai_azure/chat.py +475 -0
  125. mistralai_azure/httpclient.py +78 -0
  126. mistralai_azure/models/__init__.py +28 -0
  127. mistralai_azure/models/assistantmessage.py +58 -0
  128. mistralai_azure/models/chatcompletionchoice.py +33 -0
  129. mistralai_azure/models/chatcompletionrequest.py +114 -0
  130. mistralai_azure/models/chatcompletionresponse.py +27 -0
  131. mistralai_azure/models/chatcompletionstreamrequest.py +112 -0
  132. mistralai_azure/models/completionchunk.py +27 -0
  133. mistralai_azure/models/completionevent.py +15 -0
  134. mistralai_azure/models/completionresponsestreamchoice.py +53 -0
  135. mistralai_azure/models/contentchunk.py +17 -0
  136. mistralai_azure/models/deltamessage.py +52 -0
  137. mistralai_azure/models/function.py +19 -0
  138. mistralai_azure/models/functioncall.py +16 -0
  139. mistralai_azure/models/httpvalidationerror.py +23 -0
  140. mistralai_azure/models/responseformat.py +18 -0
  141. mistralai_azure/models/sdkerror.py +22 -0
  142. mistralai_azure/models/security.py +16 -0
  143. mistralai_azure/models/systemmessage.py +26 -0
  144. mistralai_azure/models/textchunk.py +17 -0
  145. mistralai_azure/models/tool.py +18 -0
  146. mistralai_azure/models/toolcall.py +20 -0
  147. mistralai_azure/models/toolmessage.py +55 -0
  148. mistralai_azure/models/usageinfo.py +18 -0
  149. mistralai_azure/models/usermessage.py +26 -0
  150. mistralai_azure/models/validationerror.py +24 -0
  151. mistralai_azure/py.typed +1 -0
  152. mistralai_azure/sdk.py +102 -0
  153. mistralai_azure/sdkconfiguration.py +53 -0
  154. mistralai_azure/types/__init__.py +21 -0
  155. mistralai_azure/types/basemodel.py +35 -0
  156. mistralai_azure/utils/__init__.py +80 -0
  157. mistralai_azure/utils/annotations.py +19 -0
  158. mistralai_azure/utils/enums.py +34 -0
  159. mistralai_azure/utils/eventstreaming.py +179 -0
  160. mistralai_azure/utils/forms.py +207 -0
  161. mistralai_azure/utils/headers.py +136 -0
  162. mistralai_azure/utils/metadata.py +118 -0
  163. mistralai_azure/utils/queryparams.py +203 -0
  164. mistralai_azure/utils/requestbodies.py +66 -0
  165. mistralai_azure/utils/retries.py +216 -0
  166. mistralai_azure/utils/security.py +168 -0
  167. mistralai_azure/utils/serializers.py +181 -0
  168. mistralai_azure/utils/url.py +150 -0
  169. mistralai_azure/utils/values.py +128 -0
  170. mistralai_gcp/__init__.py +5 -0
  171. mistralai_gcp/_hooks/__init__.py +5 -0
  172. mistralai_gcp/_hooks/custom_user_agent.py +16 -0
  173. mistralai_gcp/_hooks/registration.py +15 -0
  174. mistralai_gcp/_hooks/sdkhooks.py +57 -0
  175. mistralai_gcp/_hooks/types.py +76 -0
  176. mistralai_gcp/basesdk.py +215 -0
  177. mistralai_gcp/chat.py +463 -0
  178. mistralai_gcp/fim.py +439 -0
  179. mistralai_gcp/httpclient.py +78 -0
  180. mistralai_gcp/models/__init__.py +31 -0
  181. mistralai_gcp/models/assistantmessage.py +58 -0
  182. mistralai_gcp/models/chatcompletionchoice.py +33 -0
  183. mistralai_gcp/models/chatcompletionrequest.py +110 -0
  184. mistralai_gcp/models/chatcompletionresponse.py +27 -0
  185. mistralai_gcp/models/chatcompletionstreamrequest.py +108 -0
  186. mistralai_gcp/models/completionchunk.py +27 -0
  187. mistralai_gcp/models/completionevent.py +15 -0
  188. mistralai_gcp/models/completionresponsestreamchoice.py +53 -0
  189. mistralai_gcp/models/contentchunk.py +17 -0
  190. mistralai_gcp/models/deltamessage.py +52 -0
  191. mistralai_gcp/models/fimcompletionrequest.py +99 -0
  192. mistralai_gcp/models/fimcompletionresponse.py +27 -0
  193. mistralai_gcp/models/fimcompletionstreamrequest.py +97 -0
  194. mistralai_gcp/models/function.py +19 -0
  195. mistralai_gcp/models/functioncall.py +16 -0
  196. mistralai_gcp/models/httpvalidationerror.py +23 -0
  197. mistralai_gcp/models/responseformat.py +18 -0
  198. mistralai_gcp/models/sdkerror.py +22 -0
  199. mistralai_gcp/models/security.py +16 -0
  200. mistralai_gcp/models/systemmessage.py +26 -0
  201. mistralai_gcp/models/textchunk.py +17 -0
  202. mistralai_gcp/models/tool.py +18 -0
  203. mistralai_gcp/models/toolcall.py +20 -0
  204. mistralai_gcp/models/toolmessage.py +55 -0
  205. mistralai_gcp/models/usageinfo.py +18 -0
  206. mistralai_gcp/models/usermessage.py +26 -0
  207. mistralai_gcp/models/validationerror.py +24 -0
  208. mistralai_gcp/py.typed +1 -0
  209. mistralai_gcp/sdk.py +165 -0
  210. mistralai_gcp/sdkconfiguration.py +53 -0
  211. mistralai_gcp/types/__init__.py +21 -0
  212. mistralai_gcp/types/basemodel.py +35 -0
  213. mistralai_gcp/utils/__init__.py +80 -0
  214. mistralai_gcp/utils/annotations.py +19 -0
  215. mistralai_gcp/utils/enums.py +34 -0
  216. mistralai_gcp/utils/eventstreaming.py +179 -0
  217. mistralai_gcp/utils/forms.py +207 -0
  218. mistralai_gcp/utils/headers.py +136 -0
  219. mistralai_gcp/utils/metadata.py +118 -0
  220. mistralai_gcp/utils/queryparams.py +203 -0
  221. mistralai_gcp/utils/requestbodies.py +66 -0
  222. mistralai_gcp/utils/retries.py +216 -0
  223. mistralai_gcp/utils/security.py +168 -0
  224. mistralai_gcp/utils/serializers.py +181 -0
  225. mistralai_gcp/utils/url.py +150 -0
  226. mistralai_gcp/utils/values.py +128 -0
  227. py.typed +1 -0
  228. mistralai/client_base.py +0 -211
  229. mistralai/constants.py +0 -5
  230. mistralai/exceptions.py +0 -54
  231. mistralai/jobs.py +0 -172
  232. mistralai/models/chat_completion.py +0 -93
  233. mistralai/models/common.py +0 -9
  234. mistralai/models/embeddings.py +0 -19
  235. mistralai/models/files.py +0 -23
  236. mistralai/models/jobs.py +0 -100
  237. mistralai/models/models.py +0 -39
  238. mistralai-0.4.2.dist-info/METADATA +0 -82
  239. mistralai-0.4.2.dist-info/RECORD +0 -20
  240. {mistralai-0.4.2.dist-info → mistralai-0.5.5a50.dist-info}/WHEEL +0 -0
@@ -0,0 +1,55 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from mistralai_azure.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
5
+ from pydantic import model_serializer
6
+ from typing import Literal, Optional, TypedDict
7
+ from typing_extensions import NotRequired
8
+
9
+
10
+ ToolMessageRole = Literal["tool"]
11
+
12
+ class ToolMessageTypedDict(TypedDict):
13
+ content: str
14
+ tool_call_id: NotRequired[Nullable[str]]
15
+ name: NotRequired[Nullable[str]]
16
+ role: NotRequired[ToolMessageRole]
17
+
18
+
19
+ class ToolMessage(BaseModel):
20
+ content: str
21
+ tool_call_id: OptionalNullable[str] = UNSET
22
+ name: OptionalNullable[str] = UNSET
23
+ role: Optional[ToolMessageRole] = "tool"
24
+
25
+ @model_serializer(mode="wrap")
26
+ def serialize_model(self, handler):
27
+ optional_fields = ["tool_call_id", "name", "role"]
28
+ nullable_fields = ["tool_call_id", "name"]
29
+ null_default_fields = []
30
+
31
+ serialized = handler(self)
32
+
33
+ m = {}
34
+
35
+ for n, f in self.model_fields.items():
36
+ k = f.alias or n
37
+ val = serialized.get(k)
38
+
39
+ if val is not None and val != UNSET_SENTINEL:
40
+ m[k] = val
41
+ elif val != UNSET_SENTINEL and (
42
+ not k in optional_fields
43
+ or (
44
+ k in optional_fields
45
+ and k in nullable_fields
46
+ and (
47
+ self.__pydantic_fields_set__.intersection({n})
48
+ or k in null_default_fields
49
+ ) # pylint: disable=no-member
50
+ )
51
+ ):
52
+ m[k] = val
53
+
54
+ return m
55
+
@@ -0,0 +1,18 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from mistralai_azure.types import BaseModel
5
+ from typing import TypedDict
6
+
7
+
8
+ class UsageInfoTypedDict(TypedDict):
9
+ prompt_tokens: int
10
+ completion_tokens: int
11
+ total_tokens: int
12
+
13
+
14
+ class UsageInfo(BaseModel):
15
+ prompt_tokens: int
16
+ completion_tokens: int
17
+ total_tokens: int
18
+
@@ -0,0 +1,26 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .textchunk import TextChunk, TextChunkTypedDict
5
+ from mistralai_azure.types import BaseModel
6
+ from typing import List, Literal, Optional, TypedDict, Union
7
+ from typing_extensions import NotRequired
8
+
9
+
10
+ UserMessageRole = Literal["user"]
11
+
12
+ class UserMessageTypedDict(TypedDict):
13
+ content: UserMessageContentTypedDict
14
+ role: NotRequired[UserMessageRole]
15
+
16
+
17
+ class UserMessage(BaseModel):
18
+ content: UserMessageContent
19
+ role: Optional[UserMessageRole] = "user"
20
+
21
+
22
+ UserMessageContentTypedDict = Union[str, List[TextChunkTypedDict]]
23
+
24
+
25
+ UserMessageContent = Union[str, List[TextChunk]]
26
+
@@ -0,0 +1,24 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from mistralai_azure.types import BaseModel
5
+ from typing import List, TypedDict, Union
6
+
7
+
8
+ class ValidationErrorTypedDict(TypedDict):
9
+ loc: List[LocTypedDict]
10
+ msg: str
11
+ type: str
12
+
13
+
14
+ class ValidationError(BaseModel):
15
+ loc: List[Loc]
16
+ msg: str
17
+ type: str
18
+
19
+
20
+ LocTypedDict = Union[str, int]
21
+
22
+
23
+ Loc = Union[str, int]
24
+
@@ -0,0 +1 @@
1
+ # Marker file for PEP 561. The package enables type hints.
mistralai_azure/sdk.py ADDED
@@ -0,0 +1,102 @@
1
+ """Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
2
+
3
+ from typing import Any, Callable, Dict, Optional, Union
4
+
5
+ import httpx
6
+ import mistralai_azure.utils as utils
7
+ from mistralai_azure import models
8
+ from mistralai_azure._hooks import SDKHooks
9
+ from mistralai_azure.chat import Chat
10
+ from mistralai_azure.types import Nullable
11
+
12
+ from .basesdk import BaseSDK
13
+ from .httpclient import AsyncHttpClient, HttpClient
14
+ from .sdkconfiguration import SDKConfiguration
15
+ from .utils.retries import RetryConfig
16
+
17
+
18
+ class MistralAzure(BaseSDK):
19
+ 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."""
20
+
21
+ chat: Chat
22
+ r"""Chat Completion API"""
23
+
24
+ def __init__(
25
+ self,
26
+ azure_api_key: Union[str, Callable[[], str]],
27
+ azure_endpoint: str,
28
+ url_params: Optional[Dict[str, str]] = None,
29
+ client: Optional[HttpClient] = None,
30
+ async_client: Optional[AsyncHttpClient] = None,
31
+ retry_config: Optional[Nullable[RetryConfig]] = None,
32
+ ) -> None:
33
+ r"""Instantiates the SDK configuring it with the provided parameters.
34
+
35
+ :param azure_api_key: The azure_api_key required for authentication
36
+ :param azure_endpoint: The Azure AI endpoint URL to use for all methods
37
+ :param url_params: Parameters to optionally template the server URL with
38
+ :param client: The HTTP client to use for all synchronous methods
39
+ :param async_client: The Async HTTP client to use for all asynchronous methods
40
+ :param retry_config: The retry configuration to use for all supported methods
41
+ """
42
+ # if azure_endpoint doesn't end with `/v1` add it
43
+ if not azure_endpoint.endswith("/"):
44
+ azure_endpoint += "/"
45
+ if not azure_endpoint.endswith("v1/"):
46
+ azure_endpoint += "v1/"
47
+ server_url = azure_endpoint
48
+
49
+ if client is None:
50
+ client = httpx.Client()
51
+
52
+ assert issubclass(
53
+ type(client), HttpClient
54
+ ), "The provided client must implement the HttpClient protocol."
55
+
56
+ if async_client is None:
57
+ async_client = httpx.AsyncClient()
58
+
59
+ assert issubclass(
60
+ type(async_client), AsyncHttpClient
61
+ ), "The provided async_client must implement the AsyncHttpClient protocol."
62
+
63
+ security: Any = None
64
+ if callable(azure_api_key):
65
+ security = lambda: models.Security( # pylint: disable=unnecessary-lambda-assignment
66
+ api_key=azure_api_key()
67
+ )
68
+ else:
69
+ security = models.Security(api_key=azure_api_key)
70
+
71
+ if server_url is not None:
72
+ if url_params is not None:
73
+ server_url = utils.template_url(server_url, url_params)
74
+
75
+ BaseSDK.__init__(
76
+ self,
77
+ SDKConfiguration(
78
+ client=client,
79
+ async_client=async_client,
80
+ security=security,
81
+ server_url=server_url,
82
+ server=None,
83
+ retry_config=retry_config,
84
+ ),
85
+ )
86
+
87
+ hooks = SDKHooks()
88
+
89
+ current_server_url, *_ = self.sdk_configuration.get_server_details()
90
+ server_url, self.sdk_configuration.client = hooks.sdk_init(
91
+ current_server_url, self.sdk_configuration.client
92
+ )
93
+ if current_server_url != server_url:
94
+ self.sdk_configuration.server_url = server_url
95
+
96
+ # pylint: disable=protected-access
97
+ self.sdk_configuration.__dict__["_hooks"] = hooks
98
+
99
+ self._init_sdks()
100
+
101
+ def _init_sdks(self):
102
+ self.chat = Chat(self.sdk_configuration)
@@ -0,0 +1,53 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+
4
+ from ._hooks import SDKHooks
5
+ from .httpclient import AsyncHttpClient, HttpClient
6
+ from .utils import RetryConfig, remove_suffix
7
+ from dataclasses import dataclass
8
+ from mistralai_azure import models
9
+ from mistralai_azure.types import OptionalNullable, UNSET
10
+ from pydantic import Field
11
+ from typing import Callable, Dict, Optional, Tuple, Union
12
+
13
+
14
+ SERVER_PROD = "prod"
15
+ r"""Production server"""
16
+ SERVERS = {
17
+ SERVER_PROD: "https://api.mistral.ai",
18
+ }
19
+ """Contains the list of servers available to the SDK"""
20
+
21
+
22
+ @dataclass
23
+ class SDKConfiguration:
24
+ client: HttpClient
25
+ async_client: AsyncHttpClient
26
+ security: Optional[Union[models.Security,Callable[[], models.Security]]] = None
27
+ server_url: Optional[str] = ""
28
+ server: Optional[str] = ""
29
+ language: str = "python"
30
+ openapi_doc_version: str = "0.0.2"
31
+ sdk_version: str = "0.5.5-alpha.54"
32
+ gen_version: str = "2.382.1"
33
+ user_agent: str = "speakeasy-sdk/python 0.5.5-alpha.54 2.382.1 0.0.2 mistralai_azure"
34
+ retry_config: OptionalNullable[RetryConfig] = Field(default_factory=lambda: UNSET)
35
+ timeout_ms: Optional[int] = None
36
+
37
+ def __post_init__(self):
38
+ self._hooks = SDKHooks()
39
+
40
+ def get_server_details(self) -> Tuple[str, Dict[str, str]]:
41
+ if self.server_url is not None and self.server_url:
42
+ return remove_suffix(self.server_url, "/"), {}
43
+ if not self.server:
44
+ self.server = SERVER_PROD
45
+
46
+ if self.server not in SERVERS:
47
+ raise ValueError(f"Invalid server \"{self.server}\"")
48
+
49
+ return SERVERS[self.server], {}
50
+
51
+
52
+ def get_hooks(self) -> SDKHooks:
53
+ return self._hooks
@@ -0,0 +1,21 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from .basemodel import (
4
+ BaseModel,
5
+ Nullable,
6
+ OptionalNullable,
7
+ UnrecognizedInt,
8
+ UnrecognizedStr,
9
+ UNSET,
10
+ UNSET_SENTINEL,
11
+ )
12
+
13
+ __all__ = [
14
+ "BaseModel",
15
+ "Nullable",
16
+ "OptionalNullable",
17
+ "UnrecognizedInt",
18
+ "UnrecognizedStr",
19
+ "UNSET",
20
+ "UNSET_SENTINEL",
21
+ ]
@@ -0,0 +1,35 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from pydantic import ConfigDict, model_serializer
4
+ from pydantic import BaseModel as PydanticBaseModel
5
+ from typing import Literal, Optional, TypeVar, Union, NewType
6
+ from typing_extensions import TypeAliasType
7
+
8
+
9
+ class BaseModel(PydanticBaseModel):
10
+ model_config = ConfigDict(
11
+ populate_by_name=True, arbitrary_types_allowed=True, protected_namespaces=()
12
+ )
13
+
14
+
15
+ class Unset(BaseModel):
16
+ @model_serializer(mode="plain")
17
+ def serialize_model(self):
18
+ return UNSET_SENTINEL
19
+
20
+ def __bool__(self) -> Literal[False]:
21
+ return False
22
+
23
+
24
+ UNSET = Unset()
25
+ UNSET_SENTINEL = "~?~unset~?~sentinel~?~"
26
+
27
+
28
+ T = TypeVar("T")
29
+ Nullable = TypeAliasType("Nullable", Union[T, None], type_params=(T,))
30
+ OptionalNullable = TypeAliasType(
31
+ "OptionalNullable", Union[Optional[Nullable[T]], Unset], type_params=(T,)
32
+ )
33
+
34
+ UnrecognizedInt = NewType("UnrecognizedInt", int)
35
+ UnrecognizedStr = NewType("UnrecognizedStr", str)
@@ -0,0 +1,80 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from .annotations import get_discriminator
4
+ from .enums import OpenEnumMeta
5
+ from .headers import get_headers, get_response_headers
6
+ from .metadata import (
7
+ FieldMetadata,
8
+ find_metadata,
9
+ FormMetadata,
10
+ HeaderMetadata,
11
+ MultipartFormMetadata,
12
+ PathParamMetadata,
13
+ QueryParamMetadata,
14
+ RequestMetadata,
15
+ SecurityMetadata,
16
+ )
17
+ from .queryparams import get_query_params
18
+ from .retries import BackoffStrategy, Retries, retry, retry_async, RetryConfig
19
+ from .requestbodies import serialize_request_body, SerializedRequestBody
20
+ from .security import get_security
21
+ from .serializers import (
22
+ get_pydantic_model,
23
+ marshal_json,
24
+ unmarshal,
25
+ unmarshal_json,
26
+ serialize_decimal,
27
+ serialize_float,
28
+ serialize_int,
29
+ stream_to_text,
30
+ validate_decimal,
31
+ validate_float,
32
+ validate_int,
33
+ validate_open_enum,
34
+ )
35
+ from .url import generate_url, template_url, remove_suffix
36
+ from .values import get_global_from_env, match_content_type, match_status_codes, match_response
37
+
38
+ __all__ = [
39
+ "BackoffStrategy",
40
+ "FieldMetadata",
41
+ "find_metadata",
42
+ "FormMetadata",
43
+ "generate_url",
44
+ "get_discriminator",
45
+ "get_global_from_env",
46
+ "get_headers",
47
+ "get_pydantic_model",
48
+ "get_query_params",
49
+ "get_response_headers",
50
+ "get_security",
51
+ "HeaderMetadata",
52
+ "marshal_json",
53
+ "match_content_type",
54
+ "match_status_codes",
55
+ "match_response",
56
+ "MultipartFormMetadata",
57
+ "OpenEnumMeta",
58
+ "PathParamMetadata",
59
+ "QueryParamMetadata",
60
+ "remove_suffix",
61
+ "Retries",
62
+ "retry",
63
+ "retry_async",
64
+ "RetryConfig",
65
+ "RequestMetadata",
66
+ "SecurityMetadata",
67
+ "serialize_decimal",
68
+ "serialize_float",
69
+ "serialize_int",
70
+ "serialize_request_body",
71
+ "SerializedRequestBody",
72
+ "stream_to_text",
73
+ "template_url",
74
+ "unmarshal",
75
+ "unmarshal_json",
76
+ "validate_decimal",
77
+ "validate_float",
78
+ "validate_int",
79
+ "validate_open_enum",
80
+ ]
@@ -0,0 +1,19 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from typing import Any
4
+
5
+ def get_discriminator(model: Any, fieldname: str, key: str) -> str:
6
+ if isinstance(model, dict):
7
+ try:
8
+ return f'{model.get(key)}'
9
+ except AttributeError as e:
10
+ raise ValueError(f'Could not find discriminator key {key} in {model}') from e
11
+
12
+ if hasattr(model, fieldname):
13
+ return f'{getattr(model, fieldname)}'
14
+
15
+ fieldname = fieldname.upper()
16
+ if hasattr(model, fieldname):
17
+ return f'{getattr(model, fieldname)}'
18
+
19
+ raise ValueError(f'Could not find discriminator field {fieldname} in {model}')
@@ -0,0 +1,34 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ import enum
4
+
5
+
6
+ class OpenEnumMeta(enum.EnumMeta):
7
+ def __call__(
8
+ cls, value, names=None, *, module=None, qualname=None, type=None, start=1
9
+ ):
10
+ # The `type` kwarg also happens to be a built-in that pylint flags as
11
+ # redeclared. Safe to ignore this lint rule with this scope.
12
+ # pylint: disable=redefined-builtin
13
+
14
+ if names is not None:
15
+ return super().__call__(
16
+ value,
17
+ names=names,
18
+ module=module,
19
+ qualname=qualname,
20
+ type=type,
21
+ start=start,
22
+ )
23
+
24
+ try:
25
+ return super().__call__(
26
+ value,
27
+ names=names, # pyright: ignore[reportArgumentType]
28
+ module=module,
29
+ qualname=qualname,
30
+ type=type,
31
+ start=start,
32
+ )
33
+ except ValueError:
34
+ return value
@@ -0,0 +1,179 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ import re
4
+ import json
5
+ from typing import Callable, TypeVar, Optional, Generator, AsyncGenerator, Tuple
6
+ import httpx
7
+
8
+ T = TypeVar("T")
9
+
10
+
11
+ class ServerEvent:
12
+ id: Optional[str] = None
13
+ event: Optional[str] = None
14
+ data: Optional[str] = None
15
+ retry: Optional[int] = None
16
+
17
+
18
+ MESSAGE_BOUNDARIES = [
19
+ b"\r\n\r\n",
20
+ b"\n\n",
21
+ b"\r\r",
22
+ ]
23
+
24
+
25
+ async def stream_events_async(
26
+ response: httpx.Response,
27
+ decoder: Callable[[str], T],
28
+ sentinel: Optional[str] = None,
29
+ ) -> AsyncGenerator[T, None]:
30
+ buffer = bytearray()
31
+ position = 0
32
+ discard = False
33
+ async for chunk in response.aiter_bytes():
34
+ # We've encountered the sentinel value and should no longer process
35
+ # incoming data. Instead we throw new data away until the server closes
36
+ # the connection.
37
+ if discard:
38
+ continue
39
+
40
+ buffer += chunk
41
+ for i in range(position, len(buffer)):
42
+ char = buffer[i : i + 1]
43
+ seq: Optional[bytes] = None
44
+ if char in [b"\r", b"\n"]:
45
+ for boundary in MESSAGE_BOUNDARIES:
46
+ seq = _peek_sequence(i, buffer, boundary)
47
+ if seq is not None:
48
+ break
49
+ if seq is None:
50
+ continue
51
+
52
+ block = buffer[position:i]
53
+ position = i + len(seq)
54
+ event, discard = _parse_event(block, decoder, sentinel)
55
+ if event is not None:
56
+ yield event
57
+
58
+ if position > 0:
59
+ buffer = buffer[position:]
60
+ position = 0
61
+
62
+ event, discard = _parse_event(buffer, decoder, sentinel)
63
+ if event is not None:
64
+ yield event
65
+
66
+
67
+ def stream_events(
68
+ response: httpx.Response,
69
+ decoder: Callable[[str], T],
70
+ sentinel: Optional[str] = None,
71
+ ) -> Generator[T, None, None]:
72
+ buffer = bytearray()
73
+ position = 0
74
+ discard = False
75
+ for chunk in response.iter_bytes():
76
+ # We've encountered the sentinel value and should no longer process
77
+ # incoming data. Instead we throw new data away until the server closes
78
+ # the connection.
79
+ if discard:
80
+ continue
81
+
82
+ buffer += chunk
83
+ for i in range(position, len(buffer)):
84
+ char = buffer[i : i + 1]
85
+ seq: Optional[bytes] = None
86
+ if char in [b"\r", b"\n"]:
87
+ for boundary in MESSAGE_BOUNDARIES:
88
+ seq = _peek_sequence(i, buffer, boundary)
89
+ if seq is not None:
90
+ break
91
+ if seq is None:
92
+ continue
93
+
94
+ block = buffer[position:i]
95
+ position = i + len(seq)
96
+ event, discard = _parse_event(block, decoder, sentinel)
97
+ if event is not None:
98
+ yield event
99
+
100
+ if position > 0:
101
+ buffer = buffer[position:]
102
+ position = 0
103
+
104
+ event, discard = _parse_event(buffer, decoder, sentinel)
105
+ if event is not None:
106
+ yield event
107
+
108
+
109
+ def _parse_event(
110
+ raw: bytearray, decoder: Callable[[str], T], sentinel: Optional[str] = None
111
+ ) -> Tuple[Optional[T], bool]:
112
+ block = raw.decode()
113
+ lines = re.split(r"\r?\n|\r", block)
114
+ publish = False
115
+ event = ServerEvent()
116
+ data = ""
117
+ for line in lines:
118
+ if not line:
119
+ continue
120
+
121
+ delim = line.find(":")
122
+ if delim <= 0:
123
+ continue
124
+
125
+ field = line[0:delim]
126
+ value = line[delim + 1 :] if delim < len(line) - 1 else ""
127
+ if len(value) and value[0] == " ":
128
+ value = value[1:]
129
+
130
+ if field == "event":
131
+ event.event = value
132
+ publish = True
133
+ elif field == "data":
134
+ data += value + "\n"
135
+ publish = True
136
+ elif field == "id":
137
+ event.id = value
138
+ publish = True
139
+ elif field == "retry":
140
+ event.retry = int(value) if value.isdigit() else None
141
+ publish = True
142
+
143
+ if sentinel and data == f"{sentinel}\n":
144
+ return None, True
145
+
146
+ if data:
147
+ data = data[:-1]
148
+ event.data = data
149
+
150
+ if (
151
+ data.isnumeric()
152
+ or data == "true"
153
+ or data == "false"
154
+ or data == "null"
155
+ or data.startswith("{")
156
+ or data.startswith("[")
157
+ or data.startswith('"')
158
+ ):
159
+ try:
160
+ event.data = json.loads(data)
161
+ except Exception:
162
+ pass
163
+
164
+ out = None
165
+ if publish:
166
+ out = decoder(json.dumps(event.__dict__))
167
+
168
+ return out, False
169
+
170
+
171
+ def _peek_sequence(position: int, buffer: bytearray, sequence: bytes):
172
+ if len(sequence) > (len(buffer) - position):
173
+ return None
174
+
175
+ for i, seq in enumerate(sequence):
176
+ if buffer[position + i] != seq:
177
+ return None
178
+
179
+ return sequence