mixpeek 0.6.7__py3-none-any.whl → 0.6.9__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 (84) hide show
  1. mixpeek/__init__.py +1 -106
  2. mixpeek/client.py +21 -65
  3. mixpeek/endpoints/connections.py +16 -0
  4. mixpeek/endpoints/embed.py +50 -0
  5. mixpeek/endpoints/extract.py +16 -0
  6. mixpeek/endpoints/generate.py +17 -0
  7. mixpeek/endpoints/tools.py +23 -0
  8. mixpeek/exceptions.py +13 -0
  9. mixpeek-0.6.9.dist-info/METADATA +68 -0
  10. mixpeek-0.6.9.dist-info/RECORD +13 -0
  11. {mixpeek-0.6.7.dist-info → mixpeek-0.6.9.dist-info}/WHEEL +2 -1
  12. mixpeek-0.6.9.dist-info/top_level.txt +1 -0
  13. mixpeek/base_client.py +0 -989
  14. mixpeek/core/__init__.py +0 -25
  15. mixpeek/core/api_error.py +0 -15
  16. mixpeek/core/client_wrapper.py +0 -83
  17. mixpeek/core/datetime_utils.py +0 -28
  18. mixpeek/core/file.py +0 -38
  19. mixpeek/core/http_client.py +0 -130
  20. mixpeek/core/jsonable_encoder.py +0 -103
  21. mixpeek/core/remove_none_from_dict.py +0 -11
  22. mixpeek/core/request_options.py +0 -32
  23. mixpeek/environment.py +0 -7
  24. mixpeek/errors/__init__.py +0 -17
  25. mixpeek/errors/bad_request_error.py +0 -9
  26. mixpeek/errors/forbidden_error.py +0 -9
  27. mixpeek/errors/internal_server_error.py +0 -9
  28. mixpeek/errors/not_found_error.py +0 -9
  29. mixpeek/errors/unauthorized_error.py +0 -9
  30. mixpeek/errors/unprocessable_entity_error.py +0 -9
  31. mixpeek/pipeline/__init__.py +0 -2
  32. mixpeek/pipeline/client.py +0 -474
  33. mixpeek/storage/__init__.py +0 -5
  34. mixpeek/storage/client.py +0 -145
  35. mixpeek/storage/sample/__init__.py +0 -2
  36. mixpeek/storage/sample/client.py +0 -282
  37. mixpeek/types/__init__.py +0 -81
  38. mixpeek/types/api_key.py +0 -31
  39. mixpeek/types/audio_params.py +0 -29
  40. mixpeek/types/configs_response.py +0 -42
  41. mixpeek/types/connection.py +0 -36
  42. mixpeek/types/connection_engine.py +0 -5
  43. mixpeek/types/csv_params.py +0 -29
  44. mixpeek/types/destination.py +0 -42
  45. mixpeek/types/embedding_response.py +0 -34
  46. mixpeek/types/error_message.py +0 -29
  47. mixpeek/types/error_response.py +0 -30
  48. mixpeek/types/extract_response.py +0 -35
  49. mixpeek/types/field_type.py +0 -5
  50. mixpeek/types/generation_response.py +0 -36
  51. mixpeek/types/html_params.py +0 -29
  52. mixpeek/types/http_validation_error.py +0 -30
  53. mixpeek/types/image_params.py +0 -32
  54. mixpeek/types/message.py +0 -37
  55. mixpeek/types/metadata.py +0 -32
  56. mixpeek/types/modality.py +0 -5
  57. mixpeek/types/model.py +0 -38
  58. mixpeek/types/models.py +0 -5
  59. mixpeek/types/pdf_params.py +0 -41
  60. mixpeek/types/pipeline_response.py +0 -49
  61. mixpeek/types/pipeline_task_response.py +0 -32
  62. mixpeek/types/ppt_params.py +0 -27
  63. mixpeek/types/pptx_params.py +0 -27
  64. mixpeek/types/settings.py +0 -35
  65. mixpeek/types/source.py +0 -43
  66. mixpeek/types/source_destination_mapping.py +0 -44
  67. mixpeek/types/txt_params.py +0 -27
  68. mixpeek/types/user.py +0 -36
  69. mixpeek/types/validation_error.py +0 -32
  70. mixpeek/types/validation_error_loc_item.py +0 -5
  71. mixpeek/types/video_params.py +0 -27
  72. mixpeek/types/workflow_code_response.py +0 -29
  73. mixpeek/types/workflow_response.py +0 -32
  74. mixpeek/types/workflow_settings.py +0 -30
  75. mixpeek/types/xlsx_params.py +0 -29
  76. mixpeek/user/__init__.py +0 -2
  77. mixpeek/user/client.py +0 -308
  78. mixpeek/version.py +0 -4
  79. mixpeek/workflow/__init__.py +0 -2
  80. mixpeek/workflow/client.py +0 -535
  81. mixpeek-0.6.7.dist-info/LICENSE +0 -21
  82. mixpeek-0.6.7.dist-info/METADATA +0 -145
  83. mixpeek-0.6.7.dist-info/RECORD +0 -75
  84. /mixpeek/{py.typed → endpoints/__init__.py} +0 -0
mixpeek/base_client.py DELETED
@@ -1,989 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- import os
4
- import typing
5
- import urllib.parse
6
- from json.decoder import JSONDecodeError
7
-
8
- import httpx
9
-
10
- from .core.api_error import ApiError
11
- from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
12
- from .core.jsonable_encoder import jsonable_encoder
13
- from .core.remove_none_from_dict import remove_none_from_dict
14
- from .core.request_options import RequestOptions
15
- from .environment import MixpeekEnvironment
16
- from .errors.bad_request_error import BadRequestError
17
- from .errors.forbidden_error import ForbiddenError
18
- from .errors.internal_server_error import InternalServerError
19
- from .errors.not_found_error import NotFoundError
20
- from .errors.unauthorized_error import UnauthorizedError
21
- from .errors.unprocessable_entity_error import UnprocessableEntityError
22
- from .pipeline.client import AsyncPipelineClient, PipelineClient
23
- from .storage.client import AsyncStorageClient, StorageClient
24
- from .types.audio_params import AudioParams
25
- from .types.configs_response import ConfigsResponse
26
- from .types.csv_params import CsvParams
27
- from .types.embedding_response import EmbeddingResponse
28
- from .types.error_response import ErrorResponse
29
- from .types.extract_response import ExtractResponse
30
- from .types.generation_response import GenerationResponse
31
- from .types.html_params import HtmlParams
32
- from .types.http_validation_error import HttpValidationError
33
- from .types.image_params import ImageParams
34
- from .types.message import Message
35
- from .types.modality import Modality
36
- from .types.model import Model
37
- from .types.models import Models
38
- from .types.pdf_params import PdfParams
39
- from .types.ppt_params import PptParams
40
- from .types.pptx_params import PptxParams
41
- from .types.settings import Settings
42
- from .types.txt_params import TxtParams
43
- from .types.video_params import VideoParams
44
- from .types.xlsx_params import XlsxParams
45
- from .user.client import AsyncUserClient, UserClient
46
- from .workflow.client import AsyncWorkflowClient, WorkflowClient
47
-
48
- try:
49
- import pydantic.v1 as pydantic # type: ignore
50
- except ImportError:
51
- import pydantic # type: ignore
52
-
53
- # this is used as the default value for optional parameters
54
- OMIT = typing.cast(typing.Any, ...)
55
-
56
-
57
- class BaseMixpeek:
58
- """
59
- Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propogate to these functions.
60
-
61
- Parameters:
62
- - base_url: typing.Optional[str]. The base url to use for requests from the client.
63
-
64
- - environment: MixpeekEnvironment. The environment to use for requests from the client. from .environment import MixpeekEnvironment
65
-
66
- Defaults to MixpeekEnvironment.DEFAULT
67
-
68
- - authorization: typing.Optional[str].
69
-
70
- - index_id: typing.Optional[str].
71
-
72
- - api_key: typing.Optional[typing.Union[str, typing.Callable[[], str]]].
73
-
74
- - timeout: typing.Optional[float]. The timeout to be used, in seconds, for requests by default the timeout is 60 seconds, unless a custom httpx client is used, in which case a default is not set.
75
-
76
- - httpx_client: typing.Optional[httpx.Client]. The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
77
- ---
78
- from mixpeek.client import Mixpeek
79
-
80
- client = Mixpeek(
81
- authorization="YOUR_AUTHORIZATION",
82
- index_id="YOUR_INDEX_ID",
83
- api_key="YOUR_API_KEY",
84
- )
85
- """
86
-
87
- def __init__(
88
- self,
89
- *,
90
- base_url: typing.Optional[str] = None,
91
- environment: MixpeekEnvironment = MixpeekEnvironment.DEFAULT,
92
- authorization: typing.Optional[str] = None,
93
- index_id: typing.Optional[str] = None,
94
- api_key: typing.Optional[typing.Union[str, typing.Callable[[], str]]] = os.getenv("MIXPEEK_API_KEY"),
95
- timeout: typing.Optional[float] = None,
96
- httpx_client: typing.Optional[httpx.Client] = None,
97
- ):
98
- _defaulted_timeout = timeout if timeout is not None else 60 if httpx_client is None else None
99
- if api_key is None:
100
- raise ApiError(
101
- body="The client must be instantiated be either passing in api_key or setting MIXPEEK_API_KEY"
102
- )
103
- self._client_wrapper = SyncClientWrapper(
104
- base_url=_get_base_url(base_url=base_url, environment=environment),
105
- authorization=authorization,
106
- index_id=index_id,
107
- api_key=api_key,
108
- httpx_client=httpx.Client(timeout=_defaulted_timeout) if httpx_client is None else httpx_client,
109
- timeout=_defaulted_timeout,
110
- )
111
- self.user = UserClient(client_wrapper=self._client_wrapper)
112
- self.pipeline = PipelineClient(client_wrapper=self._client_wrapper)
113
- self.workflow = WorkflowClient(client_wrapper=self._client_wrapper)
114
- self.storage = StorageClient(client_wrapper=self._client_wrapper)
115
-
116
- def extract(
117
- self,
118
- *,
119
- file_url: typing.Optional[str] = OMIT,
120
- contents: typing.Optional[str] = OMIT,
121
- should_chunk: typing.Optional[bool] = OMIT,
122
- clean_text: typing.Optional[bool] = OMIT,
123
- max_characters_per_chunk: typing.Optional[int] = OMIT,
124
- extract_tags: typing.Optional[bool] = OMIT,
125
- summarize: typing.Optional[bool] = OMIT,
126
- pdf_settings: typing.Optional[PdfParams] = OMIT,
127
- html_settings: typing.Optional[HtmlParams] = OMIT,
128
- csv_settings: typing.Optional[CsvParams] = OMIT,
129
- ppt_settings: typing.Optional[PptParams] = OMIT,
130
- pptx_settings: typing.Optional[PptxParams] = OMIT,
131
- xlsx_settings: typing.Optional[XlsxParams] = OMIT,
132
- txt_settings: typing.Optional[TxtParams] = OMIT,
133
- audio_settings: typing.Optional[AudioParams] = OMIT,
134
- image_settings: typing.Optional[ImageParams] = OMIT,
135
- video_settings: typing.Optional[VideoParams] = OMIT,
136
- request_options: typing.Optional[RequestOptions] = None,
137
- ) -> ExtractResponse:
138
- """
139
- Parameters:
140
- - file_url: typing.Optional[str].
141
-
142
- - contents: typing.Optional[str].
143
-
144
- - should_chunk: typing.Optional[bool].
145
-
146
- - clean_text: typing.Optional[bool].
147
-
148
- - max_characters_per_chunk: typing.Optional[int].
149
-
150
- - extract_tags: typing.Optional[bool].
151
-
152
- - summarize: typing.Optional[bool].
153
-
154
- - pdf_settings: typing.Optional[PdfParams].
155
-
156
- - html_settings: typing.Optional[HtmlParams].
157
-
158
- - csv_settings: typing.Optional[CsvParams].
159
-
160
- - ppt_settings: typing.Optional[PptParams].
161
-
162
- - pptx_settings: typing.Optional[PptxParams].
163
-
164
- - xlsx_settings: typing.Optional[XlsxParams].
165
-
166
- - txt_settings: typing.Optional[TxtParams].
167
-
168
- - audio_settings: typing.Optional[AudioParams].
169
-
170
- - image_settings: typing.Optional[ImageParams].
171
-
172
- - video_settings: typing.Optional[VideoParams].
173
-
174
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
175
- ---
176
- from mixpeek.client import Mixpeek
177
-
178
- client = Mixpeek(
179
- authorization="YOUR_AUTHORIZATION",
180
- index_id="YOUR_INDEX_ID",
181
- api_key="YOUR_API_KEY",
182
- )
183
- client.extract()
184
- """
185
- _request: typing.Dict[str, typing.Any] = {}
186
- if file_url is not OMIT:
187
- _request["file_url"] = file_url
188
- if contents is not OMIT:
189
- _request["contents"] = contents
190
- if should_chunk is not OMIT:
191
- _request["should_chunk"] = should_chunk
192
- if clean_text is not OMIT:
193
- _request["clean_text"] = clean_text
194
- if max_characters_per_chunk is not OMIT:
195
- _request["max_characters_per_chunk"] = max_characters_per_chunk
196
- if extract_tags is not OMIT:
197
- _request["extract_tags"] = extract_tags
198
- if summarize is not OMIT:
199
- _request["summarize"] = summarize
200
- if pdf_settings is not OMIT:
201
- _request["pdf_settings"] = pdf_settings
202
- if html_settings is not OMIT:
203
- _request["html_settings"] = html_settings
204
- if csv_settings is not OMIT:
205
- _request["csv_settings"] = csv_settings
206
- if ppt_settings is not OMIT:
207
- _request["ppt_settings"] = ppt_settings
208
- if pptx_settings is not OMIT:
209
- _request["pptx_settings"] = pptx_settings
210
- if xlsx_settings is not OMIT:
211
- _request["xlsx_settings"] = xlsx_settings
212
- if txt_settings is not OMIT:
213
- _request["txt_settings"] = txt_settings
214
- if audio_settings is not OMIT:
215
- _request["audio_settings"] = audio_settings
216
- if image_settings is not OMIT:
217
- _request["image_settings"] = image_settings
218
- if video_settings is not OMIT:
219
- _request["video_settings"] = video_settings
220
- _response = self._client_wrapper.httpx_client.request(
221
- "POST",
222
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "extract"),
223
- params=jsonable_encoder(
224
- request_options.get("additional_query_parameters") if request_options is not None else None
225
- ),
226
- json=jsonable_encoder(_request)
227
- if request_options is None or request_options.get("additional_body_parameters") is None
228
- else {
229
- **jsonable_encoder(_request),
230
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
231
- },
232
- headers=jsonable_encoder(
233
- remove_none_from_dict(
234
- {
235
- **self._client_wrapper.get_headers(),
236
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
237
- }
238
- )
239
- ),
240
- timeout=request_options.get("timeout_in_seconds")
241
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
242
- else self._client_wrapper.get_timeout(),
243
- retries=0,
244
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
245
- )
246
- if 200 <= _response.status_code < 300:
247
- return pydantic.parse_obj_as(ExtractResponse, _response.json()) # type: ignore
248
- if _response.status_code == 400:
249
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
250
- if _response.status_code == 401:
251
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
252
- if _response.status_code == 403:
253
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
254
- if _response.status_code == 404:
255
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
256
- if _response.status_code == 422:
257
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
258
- if _response.status_code == 500:
259
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
260
- try:
261
- _response_json = _response.json()
262
- except JSONDecodeError:
263
- raise ApiError(status_code=_response.status_code, body=_response.text)
264
- raise ApiError(status_code=_response.status_code, body=_response_json)
265
-
266
- def base_generate(
267
- self,
268
- *,
269
- model: Model,
270
- response_format: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
271
- context: typing.Optional[str] = OMIT,
272
- messages: typing.Sequence[Message],
273
- settings: typing.Optional[Settings] = OMIT,
274
- request_options: typing.Optional[RequestOptions] = None,
275
- ) -> GenerationResponse:
276
- """
277
- Parameters:
278
- - model: Model. The model to be used.
279
-
280
- - response_format: typing.Optional[typing.Dict[str, typing.Any]].
281
-
282
- - context: typing.Optional[str].
283
-
284
- - messages: typing.Sequence[Message]. The messages for the generation.
285
-
286
- - settings: typing.Optional[Settings].
287
-
288
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
289
- ---
290
- from mixpeek import Message, Model
291
- from mixpeek.client import Mixpeek
292
-
293
- client = Mixpeek(
294
- authorization="YOUR_AUTHORIZATION",
295
- index_id="YOUR_INDEX_ID",
296
- api_key="YOUR_API_KEY",
297
- )
298
- client.base_generate(
299
- model=Model(
300
- provider="provider",
301
- model="gpt-3.5-turbo",
302
- ),
303
- messages=[
304
- Message(
305
- role="role",
306
- content="content",
307
- )
308
- ],
309
- )
310
- """
311
- _request: typing.Dict[str, typing.Any] = {"model": model, "messages": messages}
312
- if response_format is not OMIT:
313
- _request["response_format"] = response_format
314
- if context is not OMIT:
315
- _request["context"] = context
316
- if settings is not OMIT:
317
- _request["settings"] = settings
318
- _response = self._client_wrapper.httpx_client.request(
319
- "POST",
320
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "generate/text"),
321
- params=jsonable_encoder(
322
- request_options.get("additional_query_parameters") if request_options is not None else None
323
- ),
324
- json=jsonable_encoder(_request)
325
- if request_options is None or request_options.get("additional_body_parameters") is None
326
- else {
327
- **jsonable_encoder(_request),
328
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
329
- },
330
- headers=jsonable_encoder(
331
- remove_none_from_dict(
332
- {
333
- **self._client_wrapper.get_headers(),
334
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
335
- }
336
- )
337
- ),
338
- timeout=request_options.get("timeout_in_seconds")
339
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
340
- else self._client_wrapper.get_timeout(),
341
- retries=0,
342
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
343
- )
344
- if 200 <= _response.status_code < 300:
345
- return pydantic.parse_obj_as(GenerationResponse, _response.json()) # type: ignore
346
- if _response.status_code == 400:
347
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
348
- if _response.status_code == 401:
349
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
350
- if _response.status_code == 403:
351
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
352
- if _response.status_code == 404:
353
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
354
- if _response.status_code == 422:
355
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
356
- if _response.status_code == 500:
357
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
358
- try:
359
- _response_json = _response.json()
360
- except JSONDecodeError:
361
- raise ApiError(status_code=_response.status_code, body=_response.text)
362
- raise ApiError(status_code=_response.status_code, body=_response_json)
363
-
364
- def get_model_config(
365
- self,
366
- *,
367
- modality: typing.Optional[Modality] = OMIT,
368
- model: typing.Optional[Models] = OMIT,
369
- request_options: typing.Optional[RequestOptions] = None,
370
- ) -> ConfigsResponse:
371
- """
372
- Parameters:
373
- - modality: typing.Optional[Modality].
374
-
375
- - model: typing.Optional[Models].
376
-
377
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
378
- ---
379
- from mixpeek.client import Mixpeek
380
-
381
- client = Mixpeek(
382
- authorization="YOUR_AUTHORIZATION",
383
- index_id="YOUR_INDEX_ID",
384
- api_key="YOUR_API_KEY",
385
- )
386
- client.get_model_config()
387
- """
388
- _request: typing.Dict[str, typing.Any] = {}
389
- if modality is not OMIT:
390
- _request["modality"] = modality
391
- if model is not OMIT:
392
- _request["model"] = model
393
- _response = self._client_wrapper.httpx_client.request(
394
- "POST",
395
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "embed/config"),
396
- params=jsonable_encoder(
397
- request_options.get("additional_query_parameters") if request_options is not None else None
398
- ),
399
- json=jsonable_encoder(_request)
400
- if request_options is None or request_options.get("additional_body_parameters") is None
401
- else {
402
- **jsonable_encoder(_request),
403
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
404
- },
405
- headers=jsonable_encoder(
406
- remove_none_from_dict(
407
- {
408
- **self._client_wrapper.get_headers(),
409
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
410
- }
411
- )
412
- ),
413
- timeout=request_options.get("timeout_in_seconds")
414
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
415
- else self._client_wrapper.get_timeout(),
416
- retries=0,
417
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
418
- )
419
- if 200 <= _response.status_code < 300:
420
- return pydantic.parse_obj_as(ConfigsResponse, _response.json()) # type: ignore
421
- if _response.status_code == 400:
422
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
423
- if _response.status_code == 401:
424
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
425
- if _response.status_code == 403:
426
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
427
- if _response.status_code == 404:
428
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
429
- if _response.status_code == 422:
430
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
431
- if _response.status_code == 500:
432
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
433
- try:
434
- _response_json = _response.json()
435
- except JSONDecodeError:
436
- raise ApiError(status_code=_response.status_code, body=_response.text)
437
- raise ApiError(status_code=_response.status_code, body=_response_json)
438
-
439
- def embed(
440
- self,
441
- *,
442
- input: str,
443
- modality: typing.Optional[Modality] = OMIT,
444
- model: typing.Optional[str] = OMIT,
445
- request_options: typing.Optional[RequestOptions] = None,
446
- ) -> EmbeddingResponse:
447
- """
448
- Parameters:
449
- - input: str. The input data to be processed.
450
-
451
- - modality: typing.Optional[Modality].
452
-
453
- - model: typing.Optional[str].
454
-
455
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
456
- ---
457
- from mixpeek.client import Mixpeek
458
-
459
- client = Mixpeek(
460
- authorization="YOUR_AUTHORIZATION",
461
- index_id="YOUR_INDEX_ID",
462
- api_key="YOUR_API_KEY",
463
- )
464
- client.embed(
465
- input="input",
466
- )
467
- """
468
- _request: typing.Dict[str, typing.Any] = {"input": input}
469
- if modality is not OMIT:
470
- _request["modality"] = modality
471
- if model is not OMIT:
472
- _request["model"] = model
473
- _response = self._client_wrapper.httpx_client.request(
474
- "POST",
475
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "embed"),
476
- params=jsonable_encoder(
477
- request_options.get("additional_query_parameters") if request_options is not None else None
478
- ),
479
- json=jsonable_encoder(_request)
480
- if request_options is None or request_options.get("additional_body_parameters") is None
481
- else {
482
- **jsonable_encoder(_request),
483
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
484
- },
485
- headers=jsonable_encoder(
486
- remove_none_from_dict(
487
- {
488
- **self._client_wrapper.get_headers(),
489
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
490
- }
491
- )
492
- ),
493
- timeout=request_options.get("timeout_in_seconds")
494
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
495
- else self._client_wrapper.get_timeout(),
496
- retries=0,
497
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
498
- )
499
- if 200 <= _response.status_code < 300:
500
- return pydantic.parse_obj_as(EmbeddingResponse, _response.json()) # type: ignore
501
- if _response.status_code == 400:
502
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
503
- if _response.status_code == 401:
504
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
505
- if _response.status_code == 403:
506
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
507
- if _response.status_code == 404:
508
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
509
- if _response.status_code == 422:
510
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
511
- if _response.status_code == 500:
512
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
513
- try:
514
- _response_json = _response.json()
515
- except JSONDecodeError:
516
- raise ApiError(status_code=_response.status_code, body=_response.text)
517
- raise ApiError(status_code=_response.status_code, body=_response_json)
518
-
519
-
520
- class AsyncBaseMixpeek:
521
- """
522
- Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propogate to these functions.
523
-
524
- Parameters:
525
- - base_url: typing.Optional[str]. The base url to use for requests from the client.
526
-
527
- - environment: MixpeekEnvironment. The environment to use for requests from the client. from .environment import MixpeekEnvironment
528
-
529
- Defaults to MixpeekEnvironment.DEFAULT
530
-
531
- - authorization: typing.Optional[str].
532
-
533
- - index_id: typing.Optional[str].
534
-
535
- - api_key: typing.Optional[typing.Union[str, typing.Callable[[], str]]].
536
-
537
- - timeout: typing.Optional[float]. The timeout to be used, in seconds, for requests by default the timeout is 60 seconds, unless a custom httpx client is used, in which case a default is not set.
538
-
539
- - httpx_client: typing.Optional[httpx.AsyncClient]. The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
540
- ---
541
- from mixpeek.client import AsyncMixpeek
542
-
543
- client = AsyncMixpeek(
544
- authorization="YOUR_AUTHORIZATION",
545
- index_id="YOUR_INDEX_ID",
546
- api_key="YOUR_API_KEY",
547
- )
548
- """
549
-
550
- def __init__(
551
- self,
552
- *,
553
- base_url: typing.Optional[str] = None,
554
- environment: MixpeekEnvironment = MixpeekEnvironment.DEFAULT,
555
- authorization: typing.Optional[str] = None,
556
- index_id: typing.Optional[str] = None,
557
- api_key: typing.Optional[typing.Union[str, typing.Callable[[], str]]] = os.getenv("MIXPEEK_API_KEY"),
558
- timeout: typing.Optional[float] = None,
559
- httpx_client: typing.Optional[httpx.AsyncClient] = None,
560
- ):
561
- _defaulted_timeout = timeout if timeout is not None else 60 if httpx_client is None else None
562
- if api_key is None:
563
- raise ApiError(
564
- body="The client must be instantiated be either passing in api_key or setting MIXPEEK_API_KEY"
565
- )
566
- self._client_wrapper = AsyncClientWrapper(
567
- base_url=_get_base_url(base_url=base_url, environment=environment),
568
- authorization=authorization,
569
- index_id=index_id,
570
- api_key=api_key,
571
- httpx_client=httpx.AsyncClient(timeout=_defaulted_timeout) if httpx_client is None else httpx_client,
572
- timeout=_defaulted_timeout,
573
- )
574
- self.user = AsyncUserClient(client_wrapper=self._client_wrapper)
575
- self.pipeline = AsyncPipelineClient(client_wrapper=self._client_wrapper)
576
- self.workflow = AsyncWorkflowClient(client_wrapper=self._client_wrapper)
577
- self.storage = AsyncStorageClient(client_wrapper=self._client_wrapper)
578
-
579
- async def extract(
580
- self,
581
- *,
582
- file_url: typing.Optional[str] = OMIT,
583
- contents: typing.Optional[str] = OMIT,
584
- should_chunk: typing.Optional[bool] = OMIT,
585
- clean_text: typing.Optional[bool] = OMIT,
586
- max_characters_per_chunk: typing.Optional[int] = OMIT,
587
- extract_tags: typing.Optional[bool] = OMIT,
588
- summarize: typing.Optional[bool] = OMIT,
589
- pdf_settings: typing.Optional[PdfParams] = OMIT,
590
- html_settings: typing.Optional[HtmlParams] = OMIT,
591
- csv_settings: typing.Optional[CsvParams] = OMIT,
592
- ppt_settings: typing.Optional[PptParams] = OMIT,
593
- pptx_settings: typing.Optional[PptxParams] = OMIT,
594
- xlsx_settings: typing.Optional[XlsxParams] = OMIT,
595
- txt_settings: typing.Optional[TxtParams] = OMIT,
596
- audio_settings: typing.Optional[AudioParams] = OMIT,
597
- image_settings: typing.Optional[ImageParams] = OMIT,
598
- video_settings: typing.Optional[VideoParams] = OMIT,
599
- request_options: typing.Optional[RequestOptions] = None,
600
- ) -> ExtractResponse:
601
- """
602
- Parameters:
603
- - file_url: typing.Optional[str].
604
-
605
- - contents: typing.Optional[str].
606
-
607
- - should_chunk: typing.Optional[bool].
608
-
609
- - clean_text: typing.Optional[bool].
610
-
611
- - max_characters_per_chunk: typing.Optional[int].
612
-
613
- - extract_tags: typing.Optional[bool].
614
-
615
- - summarize: typing.Optional[bool].
616
-
617
- - pdf_settings: typing.Optional[PdfParams].
618
-
619
- - html_settings: typing.Optional[HtmlParams].
620
-
621
- - csv_settings: typing.Optional[CsvParams].
622
-
623
- - ppt_settings: typing.Optional[PptParams].
624
-
625
- - pptx_settings: typing.Optional[PptxParams].
626
-
627
- - xlsx_settings: typing.Optional[XlsxParams].
628
-
629
- - txt_settings: typing.Optional[TxtParams].
630
-
631
- - audio_settings: typing.Optional[AudioParams].
632
-
633
- - image_settings: typing.Optional[ImageParams].
634
-
635
- - video_settings: typing.Optional[VideoParams].
636
-
637
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
638
- ---
639
- from mixpeek.client import AsyncMixpeek
640
-
641
- client = AsyncMixpeek(
642
- authorization="YOUR_AUTHORIZATION",
643
- index_id="YOUR_INDEX_ID",
644
- api_key="YOUR_API_KEY",
645
- )
646
- await client.extract()
647
- """
648
- _request: typing.Dict[str, typing.Any] = {}
649
- if file_url is not OMIT:
650
- _request["file_url"] = file_url
651
- if contents is not OMIT:
652
- _request["contents"] = contents
653
- if should_chunk is not OMIT:
654
- _request["should_chunk"] = should_chunk
655
- if clean_text is not OMIT:
656
- _request["clean_text"] = clean_text
657
- if max_characters_per_chunk is not OMIT:
658
- _request["max_characters_per_chunk"] = max_characters_per_chunk
659
- if extract_tags is not OMIT:
660
- _request["extract_tags"] = extract_tags
661
- if summarize is not OMIT:
662
- _request["summarize"] = summarize
663
- if pdf_settings is not OMIT:
664
- _request["pdf_settings"] = pdf_settings
665
- if html_settings is not OMIT:
666
- _request["html_settings"] = html_settings
667
- if csv_settings is not OMIT:
668
- _request["csv_settings"] = csv_settings
669
- if ppt_settings is not OMIT:
670
- _request["ppt_settings"] = ppt_settings
671
- if pptx_settings is not OMIT:
672
- _request["pptx_settings"] = pptx_settings
673
- if xlsx_settings is not OMIT:
674
- _request["xlsx_settings"] = xlsx_settings
675
- if txt_settings is not OMIT:
676
- _request["txt_settings"] = txt_settings
677
- if audio_settings is not OMIT:
678
- _request["audio_settings"] = audio_settings
679
- if image_settings is not OMIT:
680
- _request["image_settings"] = image_settings
681
- if video_settings is not OMIT:
682
- _request["video_settings"] = video_settings
683
- _response = await self._client_wrapper.httpx_client.request(
684
- "POST",
685
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "extract"),
686
- params=jsonable_encoder(
687
- request_options.get("additional_query_parameters") if request_options is not None else None
688
- ),
689
- json=jsonable_encoder(_request)
690
- if request_options is None or request_options.get("additional_body_parameters") is None
691
- else {
692
- **jsonable_encoder(_request),
693
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
694
- },
695
- headers=jsonable_encoder(
696
- remove_none_from_dict(
697
- {
698
- **self._client_wrapper.get_headers(),
699
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
700
- }
701
- )
702
- ),
703
- timeout=request_options.get("timeout_in_seconds")
704
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
705
- else self._client_wrapper.get_timeout(),
706
- retries=0,
707
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
708
- )
709
- if 200 <= _response.status_code < 300:
710
- return pydantic.parse_obj_as(ExtractResponse, _response.json()) # type: ignore
711
- if _response.status_code == 400:
712
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
713
- if _response.status_code == 401:
714
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
715
- if _response.status_code == 403:
716
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
717
- if _response.status_code == 404:
718
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
719
- if _response.status_code == 422:
720
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
721
- if _response.status_code == 500:
722
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
723
- try:
724
- _response_json = _response.json()
725
- except JSONDecodeError:
726
- raise ApiError(status_code=_response.status_code, body=_response.text)
727
- raise ApiError(status_code=_response.status_code, body=_response_json)
728
-
729
- async def base_generate(
730
- self,
731
- *,
732
- model: Model,
733
- response_format: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
734
- context: typing.Optional[str] = OMIT,
735
- messages: typing.Sequence[Message],
736
- settings: typing.Optional[Settings] = OMIT,
737
- request_options: typing.Optional[RequestOptions] = None,
738
- ) -> GenerationResponse:
739
- """
740
- Parameters:
741
- - model: Model. The model to be used.
742
-
743
- - response_format: typing.Optional[typing.Dict[str, typing.Any]].
744
-
745
- - context: typing.Optional[str].
746
-
747
- - messages: typing.Sequence[Message]. The messages for the generation.
748
-
749
- - settings: typing.Optional[Settings].
750
-
751
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
752
- ---
753
- from mixpeek import Message, Model
754
- from mixpeek.client import AsyncMixpeek
755
-
756
- client = AsyncMixpeek(
757
- authorization="YOUR_AUTHORIZATION",
758
- index_id="YOUR_INDEX_ID",
759
- api_key="YOUR_API_KEY",
760
- )
761
- await client.base_generate(
762
- model=Model(
763
- provider="provider",
764
- model="gpt-3.5-turbo",
765
- ),
766
- messages=[
767
- Message(
768
- role="role",
769
- content="content",
770
- )
771
- ],
772
- )
773
- """
774
- _request: typing.Dict[str, typing.Any] = {"model": model, "messages": messages}
775
- if response_format is not OMIT:
776
- _request["response_format"] = response_format
777
- if context is not OMIT:
778
- _request["context"] = context
779
- if settings is not OMIT:
780
- _request["settings"] = settings
781
- _response = await self._client_wrapper.httpx_client.request(
782
- "POST",
783
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "generate/text"),
784
- params=jsonable_encoder(
785
- request_options.get("additional_query_parameters") if request_options is not None else None
786
- ),
787
- json=jsonable_encoder(_request)
788
- if request_options is None or request_options.get("additional_body_parameters") is None
789
- else {
790
- **jsonable_encoder(_request),
791
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
792
- },
793
- headers=jsonable_encoder(
794
- remove_none_from_dict(
795
- {
796
- **self._client_wrapper.get_headers(),
797
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
798
- }
799
- )
800
- ),
801
- timeout=request_options.get("timeout_in_seconds")
802
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
803
- else self._client_wrapper.get_timeout(),
804
- retries=0,
805
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
806
- )
807
- if 200 <= _response.status_code < 300:
808
- return pydantic.parse_obj_as(GenerationResponse, _response.json()) # type: ignore
809
- if _response.status_code == 400:
810
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
811
- if _response.status_code == 401:
812
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
813
- if _response.status_code == 403:
814
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
815
- if _response.status_code == 404:
816
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
817
- if _response.status_code == 422:
818
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
819
- if _response.status_code == 500:
820
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
821
- try:
822
- _response_json = _response.json()
823
- except JSONDecodeError:
824
- raise ApiError(status_code=_response.status_code, body=_response.text)
825
- raise ApiError(status_code=_response.status_code, body=_response_json)
826
-
827
- async def get_model_config(
828
- self,
829
- *,
830
- modality: typing.Optional[Modality] = OMIT,
831
- model: typing.Optional[Models] = OMIT,
832
- request_options: typing.Optional[RequestOptions] = None,
833
- ) -> ConfigsResponse:
834
- """
835
- Parameters:
836
- - modality: typing.Optional[Modality].
837
-
838
- - model: typing.Optional[Models].
839
-
840
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
841
- ---
842
- from mixpeek.client import AsyncMixpeek
843
-
844
- client = AsyncMixpeek(
845
- authorization="YOUR_AUTHORIZATION",
846
- index_id="YOUR_INDEX_ID",
847
- api_key="YOUR_API_KEY",
848
- )
849
- await client.get_model_config()
850
- """
851
- _request: typing.Dict[str, typing.Any] = {}
852
- if modality is not OMIT:
853
- _request["modality"] = modality
854
- if model is not OMIT:
855
- _request["model"] = model
856
- _response = await self._client_wrapper.httpx_client.request(
857
- "POST",
858
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "embed/config"),
859
- params=jsonable_encoder(
860
- request_options.get("additional_query_parameters") if request_options is not None else None
861
- ),
862
- json=jsonable_encoder(_request)
863
- if request_options is None or request_options.get("additional_body_parameters") is None
864
- else {
865
- **jsonable_encoder(_request),
866
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
867
- },
868
- headers=jsonable_encoder(
869
- remove_none_from_dict(
870
- {
871
- **self._client_wrapper.get_headers(),
872
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
873
- }
874
- )
875
- ),
876
- timeout=request_options.get("timeout_in_seconds")
877
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
878
- else self._client_wrapper.get_timeout(),
879
- retries=0,
880
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
881
- )
882
- if 200 <= _response.status_code < 300:
883
- return pydantic.parse_obj_as(ConfigsResponse, _response.json()) # type: ignore
884
- if _response.status_code == 400:
885
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
886
- if _response.status_code == 401:
887
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
888
- if _response.status_code == 403:
889
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
890
- if _response.status_code == 404:
891
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
892
- if _response.status_code == 422:
893
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
894
- if _response.status_code == 500:
895
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
896
- try:
897
- _response_json = _response.json()
898
- except JSONDecodeError:
899
- raise ApiError(status_code=_response.status_code, body=_response.text)
900
- raise ApiError(status_code=_response.status_code, body=_response_json)
901
-
902
- async def embed(
903
- self,
904
- *,
905
- input: str,
906
- modality: typing.Optional[Modality] = OMIT,
907
- model: typing.Optional[str] = OMIT,
908
- request_options: typing.Optional[RequestOptions] = None,
909
- ) -> EmbeddingResponse:
910
- """
911
- Parameters:
912
- - input: str. The input data to be processed.
913
-
914
- - modality: typing.Optional[Modality].
915
-
916
- - model: typing.Optional[str].
917
-
918
- - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
919
- ---
920
- from mixpeek.client import AsyncMixpeek
921
-
922
- client = AsyncMixpeek(
923
- authorization="YOUR_AUTHORIZATION",
924
- index_id="YOUR_INDEX_ID",
925
- api_key="YOUR_API_KEY",
926
- )
927
- await client.embed(
928
- input="input",
929
- )
930
- """
931
- _request: typing.Dict[str, typing.Any] = {"input": input}
932
- if modality is not OMIT:
933
- _request["modality"] = modality
934
- if model is not OMIT:
935
- _request["model"] = model
936
- _response = await self._client_wrapper.httpx_client.request(
937
- "POST",
938
- urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "embed"),
939
- params=jsonable_encoder(
940
- request_options.get("additional_query_parameters") if request_options is not None else None
941
- ),
942
- json=jsonable_encoder(_request)
943
- if request_options is None or request_options.get("additional_body_parameters") is None
944
- else {
945
- **jsonable_encoder(_request),
946
- **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
947
- },
948
- headers=jsonable_encoder(
949
- remove_none_from_dict(
950
- {
951
- **self._client_wrapper.get_headers(),
952
- **(request_options.get("additional_headers", {}) if request_options is not None else {}),
953
- }
954
- )
955
- ),
956
- timeout=request_options.get("timeout_in_seconds")
957
- if request_options is not None and request_options.get("timeout_in_seconds") is not None
958
- else self._client_wrapper.get_timeout(),
959
- retries=0,
960
- max_retries=request_options.get("max_retries") if request_options is not None else 0, # type: ignore
961
- )
962
- if 200 <= _response.status_code < 300:
963
- return pydantic.parse_obj_as(EmbeddingResponse, _response.json()) # type: ignore
964
- if _response.status_code == 400:
965
- raise BadRequestError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
966
- if _response.status_code == 401:
967
- raise UnauthorizedError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
968
- if _response.status_code == 403:
969
- raise ForbiddenError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
970
- if _response.status_code == 404:
971
- raise NotFoundError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
972
- if _response.status_code == 422:
973
- raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json())) # type: ignore
974
- if _response.status_code == 500:
975
- raise InternalServerError(pydantic.parse_obj_as(ErrorResponse, _response.json())) # type: ignore
976
- try:
977
- _response_json = _response.json()
978
- except JSONDecodeError:
979
- raise ApiError(status_code=_response.status_code, body=_response.text)
980
- raise ApiError(status_code=_response.status_code, body=_response_json)
981
-
982
-
983
- def _get_base_url(*, base_url: typing.Optional[str] = None, environment: MixpeekEnvironment) -> str:
984
- if base_url is not None:
985
- return base_url
986
- elif environment is not None:
987
- return environment.value
988
- else:
989
- raise Exception("Please pass in either base_url or environment to construct the client")