meshapi 0.1.0__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.
@@ -0,0 +1,43 @@
1
+ """Compare resource — POST /v1/chat/compare."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import AsyncIterator, Iterator
6
+
7
+ from .._http import AsyncHttpClient, SyncHttpClient
8
+ from .._types import CompareParams, CompareResponse, CompareStreamEvent
9
+
10
+
11
+ class CompareResource:
12
+ def __init__(self, http: SyncHttpClient) -> None:
13
+ self._http = http
14
+
15
+ def create(self, params: CompareParams) -> CompareResponse:
16
+ body = params.model_dump(exclude_none=True)
17
+ if body.get("stream"):
18
+ raise ValueError("Use stream() for streaming compare requests.")
19
+ data = self._http.post("/v1/chat/compare", body)
20
+ return CompareResponse.model_validate(data)
21
+
22
+ def stream(self, params: CompareParams) -> Iterator[CompareStreamEvent]:
23
+ body = params.model_dump(exclude_none=True)
24
+ body["stream"] = True
25
+ yield from self._http.stream_json("/v1/chat/compare", body, CompareStreamEvent)
26
+
27
+
28
+ class AsyncCompareResource:
29
+ def __init__(self, http: AsyncHttpClient) -> None:
30
+ self._http = http
31
+
32
+ async def create(self, params: CompareParams) -> CompareResponse:
33
+ body = params.model_dump(exclude_none=True)
34
+ if body.get("stream"):
35
+ raise ValueError("Use stream() for streaming compare requests.")
36
+ data = await self._http.post("/v1/chat/compare", body)
37
+ return CompareResponse.model_validate(data)
38
+
39
+ async def stream(self, params: CompareParams) -> AsyncIterator[CompareStreamEvent]:
40
+ body = params.model_dump(exclude_none=True)
41
+ body["stream"] = True
42
+ async for event in self._http.stream_json("/v1/chat/compare", body, CompareStreamEvent):
43
+ yield event
@@ -0,0 +1,24 @@
1
+ """Embeddings resource — POST /v1/embeddings."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from .._http import AsyncHttpClient, SyncHttpClient
6
+ from .._types import EmbeddingsParams, EmbeddingsResponse
7
+
8
+
9
+ class EmbeddingsResource:
10
+ def __init__(self, http: SyncHttpClient) -> None:
11
+ self._http = http
12
+
13
+ def create(self, params: EmbeddingsParams) -> EmbeddingsResponse:
14
+ data = self._http.post("/v1/embeddings", params.model_dump(exclude_none=True))
15
+ return EmbeddingsResponse.model_validate(data)
16
+
17
+
18
+ class AsyncEmbeddingsResource:
19
+ def __init__(self, http: AsyncHttpClient) -> None:
20
+ self._http = http
21
+
22
+ async def create(self, params: EmbeddingsParams) -> EmbeddingsResponse:
23
+ data = await self._http.post("/v1/embeddings", params.model_dump(exclude_none=True))
24
+ return EmbeddingsResponse.model_validate(data)
@@ -0,0 +1,44 @@
1
+ """Files resource — /v1/files endpoints for batch workflows."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from .._http import AsyncHttpClient, SyncHttpClient
6
+ from .._types import FileObject, UploadBatchFileParams
7
+
8
+
9
+ class FilesResource:
10
+ def __init__(self, http: SyncHttpClient) -> None:
11
+ self._http = http
12
+
13
+ def upload(self, params: UploadBatchFileParams) -> FileObject:
14
+ data = self._http.post("/v1/files", params.model_dump(exclude_none=True))
15
+ return FileObject.model_validate(data)
16
+
17
+ def get(self, file_id: str) -> FileObject:
18
+ data = self._http.get(f"/v1/files/{file_id}")
19
+ return FileObject.model_validate(data)
20
+
21
+ def delete(self, file_id: str) -> None:
22
+ self._http.delete(f"/v1/files/{file_id}")
23
+
24
+ def content(self, file_id: str) -> bytes:
25
+ return self._http.get_bytes(f"/v1/files/{file_id}/content")
26
+
27
+
28
+ class AsyncFilesResource:
29
+ def __init__(self, http: AsyncHttpClient) -> None:
30
+ self._http = http
31
+
32
+ async def upload(self, params: UploadBatchFileParams) -> FileObject:
33
+ data = await self._http.post("/v1/files", params.model_dump(exclude_none=True))
34
+ return FileObject.model_validate(data)
35
+
36
+ async def get(self, file_id: str) -> FileObject:
37
+ data = await self._http.get(f"/v1/files/{file_id}")
38
+ return FileObject.model_validate(data)
39
+
40
+ async def delete(self, file_id: str) -> None:
41
+ await self._http.delete(f"/v1/files/{file_id}")
42
+
43
+ async def content(self, file_id: str) -> bytes:
44
+ return await self._http.get_bytes(f"/v1/files/{file_id}/content")
@@ -0,0 +1,48 @@
1
+ """Models resource — GET /v1/models, /v1/models/free, /v1/models/paid."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List, Optional
6
+
7
+ from .._http import AsyncHttpClient, SyncHttpClient
8
+ from .._types import ModelInfo
9
+
10
+
11
+ class ModelsResource:
12
+ def __init__(self, http: SyncHttpClient) -> None:
13
+ self._http = http
14
+
15
+ def list(self, *, free: Optional[bool] = None) -> List[ModelInfo]:
16
+ params = {}
17
+ if free is not None:
18
+ params["free"] = str(free).lower()
19
+ data = self._http.get("/v1/models", params=params or None)
20
+ return [ModelInfo.model_validate(m) for m in (data or [])]
21
+
22
+ def free(self) -> List[ModelInfo]:
23
+ data = self._http.get("/v1/models/free")
24
+ return [ModelInfo.model_validate(m) for m in (data or [])]
25
+
26
+ def paid(self) -> List[ModelInfo]:
27
+ data = self._http.get("/v1/models/paid")
28
+ return [ModelInfo.model_validate(m) for m in (data or [])]
29
+
30
+
31
+ class AsyncModelsResource:
32
+ def __init__(self, http: AsyncHttpClient) -> None:
33
+ self._http = http
34
+
35
+ async def list(self, *, free: Optional[bool] = None) -> List[ModelInfo]:
36
+ params = {}
37
+ if free is not None:
38
+ params["free"] = str(free).lower()
39
+ data = await self._http.get("/v1/models", params=params or None)
40
+ return [ModelInfo.model_validate(m) for m in (data or [])]
41
+
42
+ async def free(self) -> List[ModelInfo]:
43
+ data = await self._http.get("/v1/models/free")
44
+ return [ModelInfo.model_validate(m) for m in (data or [])]
45
+
46
+ async def paid(self) -> List[ModelInfo]:
47
+ data = await self._http.get("/v1/models/paid")
48
+ return [ModelInfo.model_validate(m) for m in (data or [])]
@@ -0,0 +1,43 @@
1
+ """Responses resource — POST /v1/responses."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import AsyncIterator, Iterator
6
+
7
+ from .._http import AsyncHttpClient, SyncHttpClient
8
+ from .._types import ResponsesParams, ResponsesResponse, ResponsesStreamEvent
9
+
10
+
11
+ class ResponsesResource:
12
+ def __init__(self, http: SyncHttpClient) -> None:
13
+ self._http = http
14
+
15
+ def create(self, params: ResponsesParams) -> ResponsesResponse:
16
+ body = params.model_dump(exclude_none=True)
17
+ if body.get("stream"):
18
+ raise ValueError("Use stream() for streaming responses requests.")
19
+ data = self._http.post("/v1/responses", body)
20
+ return ResponsesResponse.model_validate(data)
21
+
22
+ def stream(self, params: ResponsesParams) -> Iterator[ResponsesStreamEvent]:
23
+ body = params.model_dump(exclude_none=True)
24
+ body["stream"] = True
25
+ yield from self._http.stream_json("/v1/responses", body, ResponsesStreamEvent)
26
+
27
+
28
+ class AsyncResponsesResource:
29
+ def __init__(self, http: AsyncHttpClient) -> None:
30
+ self._http = http
31
+
32
+ async def create(self, params: ResponsesParams) -> ResponsesResponse:
33
+ body = params.model_dump(exclude_none=True)
34
+ if body.get("stream"):
35
+ raise ValueError("Use stream() for streaming responses requests.")
36
+ data = await self._http.post("/v1/responses", body)
37
+ return ResponsesResponse.model_validate(data)
38
+
39
+ async def stream(self, params: ResponsesParams) -> AsyncIterator[ResponsesStreamEvent]:
40
+ body = params.model_dump(exclude_none=True)
41
+ body["stream"] = True
42
+ async for event in self._http.stream_json("/v1/responses", body, ResponsesStreamEvent):
43
+ yield event
@@ -0,0 +1,60 @@
1
+ """Templates resource — CRUD on /v1/templates."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List
6
+
7
+ from .._http import AsyncHttpClient, SyncHttpClient
8
+ from .._types import CreateTemplateParams, TemplateSummary, UpdateTemplateParams
9
+
10
+
11
+ class TemplatesResource:
12
+ def __init__(self, http: SyncHttpClient) -> None:
13
+ self._http = http
14
+
15
+ def create(self, params: CreateTemplateParams) -> TemplateSummary:
16
+ data = self._http.post("/v1/templates", params.model_dump(exclude_none=True))
17
+ return TemplateSummary.model_validate(data)
18
+
19
+ def list(self) -> List[TemplateSummary]:
20
+ data = self._http.get("/v1/templates")
21
+ return [TemplateSummary.model_validate(t) for t in (data or [])]
22
+
23
+ def get(self, template_id: str) -> TemplateSummary:
24
+ data = self._http.get(f"/v1/templates/{template_id}")
25
+ return TemplateSummary.model_validate(data)
26
+
27
+ def update(self, template_id: str, params: UpdateTemplateParams) -> TemplateSummary:
28
+ data = self._http.patch(
29
+ f"/v1/templates/{template_id}", params.model_dump(exclude_none=True)
30
+ )
31
+ return TemplateSummary.model_validate(data)
32
+
33
+ def delete(self, template_id: str) -> None:
34
+ self._http.delete(f"/v1/templates/{template_id}")
35
+
36
+
37
+ class AsyncTemplatesResource:
38
+ def __init__(self, http: AsyncHttpClient) -> None:
39
+ self._http = http
40
+
41
+ async def create(self, params: CreateTemplateParams) -> TemplateSummary:
42
+ data = await self._http.post("/v1/templates", params.model_dump(exclude_none=True))
43
+ return TemplateSummary.model_validate(data)
44
+
45
+ async def list(self) -> List[TemplateSummary]:
46
+ data = await self._http.get("/v1/templates")
47
+ return [TemplateSummary.model_validate(t) for t in (data or [])]
48
+
49
+ async def get(self, template_id: str) -> TemplateSummary:
50
+ data = await self._http.get(f"/v1/templates/{template_id}")
51
+ return TemplateSummary.model_validate(data)
52
+
53
+ async def update(self, template_id: str, params: UpdateTemplateParams) -> TemplateSummary:
54
+ data = await self._http.patch(
55
+ f"/v1/templates/{template_id}", params.model_dump(exclude_none=True)
56
+ )
57
+ return TemplateSummary.model_validate(data)
58
+
59
+ async def delete(self, template_id: str) -> None:
60
+ await self._http.delete(f"/v1/templates/{template_id}")