openparser-sdk 0.0.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.
- openparser/__init__.py +54 -0
- openparser/_files.py +43 -0
- openparser/_generated/__init__.py +8 -0
- openparser/_generated/api/__init__.py +1 -0
- openparser/_generated/api/extract/__init__.py +1 -0
- openparser/_generated/api/extract/extract_async.py +280 -0
- openparser/_generated/api/extract/extract_batch.py +284 -0
- openparser/_generated/api/extract/extract_sync.py +315 -0
- openparser/_generated/api/extract/suggest_schema.py +260 -0
- openparser/_generated/api/files/__init__.py +1 -0
- openparser/_generated/api/files/create_file.py +237 -0
- openparser/_generated/api/files/delete_file.py +200 -0
- openparser/_generated/api/files/get_file.py +200 -0
- openparser/_generated/api/files/get_file_content.py +198 -0
- openparser/_generated/api/jobs/__init__.py +1 -0
- openparser/_generated/api/jobs/get_job.py +261 -0
- openparser/_generated/api/jobs/get_job_result.py +305 -0
- openparser/_generated/api/jobs/get_job_source.py +233 -0
- openparser/_generated/api/jobs/list_jobs.py +340 -0
- openparser/_generated/api/models/__init__.py +1 -0
- openparser/_generated/api/models/list_llm_models.py +288 -0
- openparser/_generated/api/models/list_ocr_models.py +184 -0
- openparser/_generated/api/parse/__init__.py +1 -0
- openparser/_generated/api/parse/parse_async.py +316 -0
- openparser/_generated/api/parse/parse_batch.py +280 -0
- openparser/_generated/api/parse/parse_sync.py +369 -0
- openparser/_generated/api/pipelines/__init__.py +1 -0
- openparser/_generated/api/pipelines/create_extraction_pipeline.py +242 -0
- openparser/_generated/api/pipelines/delete_extraction_pipeline.py +212 -0
- openparser/_generated/api/pipelines/get_extraction_pipeline.py +212 -0
- openparser/_generated/api/pipelines/list_extraction_pipelines.py +180 -0
- openparser/_generated/api/pipelines/update_extraction_pipeline.py +258 -0
- openparser/_generated/client.py +270 -0
- openparser/_generated/errors.py +14 -0
- openparser/_generated/models/__init__.py +261 -0
- openparser/_generated/models/batch_child_page.py +97 -0
- openparser/_generated/models/batch_child_summary.py +195 -0
- openparser/_generated/models/batch_job_accepted.py +139 -0
- openparser/_generated/models/batch_job_accepted_operation.py +8 -0
- openparser/_generated/models/batch_summary_counts.py +97 -0
- openparser/_generated/models/bounding_box.py +82 -0
- openparser/_generated/models/chunk_provenance_span.py +97 -0
- openparser/_generated/models/content_kind.py +10 -0
- openparser/_generated/models/create_extraction_pipeline_request.py +177 -0
- openparser/_generated/models/create_extraction_pipeline_request_grounding.py +8 -0
- openparser/_generated/models/create_extraction_pipeline_request_llm_options.py +84 -0
- openparser/_generated/models/create_extraction_pipeline_request_llm_options_reasoning_effort_type_1.py +13 -0
- openparser/_generated/models/create_extraction_pipeline_request_ocr_options.py +78 -0
- openparser/_generated/models/create_extraction_pipeline_request_schema.py +68 -0
- openparser/_generated/models/create_file_body.py +78 -0
- openparser/_generated/models/delete_extraction_pipeline_response.py +66 -0
- openparser/_generated/models/delete_file_response.py +57 -0
- openparser/_generated/models/error_body.py +106 -0
- openparser/_generated/models/error_body_details.py +65 -0
- openparser/_generated/models/error_response.py +65 -0
- openparser/_generated/models/extract_async_body.py +136 -0
- openparser/_generated/models/extract_batch_body.py +143 -0
- openparser/_generated/models/extract_batch_item.py +207 -0
- openparser/_generated/models/extract_batch_item_grounding.py +8 -0
- openparser/_generated/models/extract_batch_item_llm_options.py +84 -0
- openparser/_generated/models/extract_batch_item_llm_options_reasoning_effort_type_1.py +13 -0
- openparser/_generated/models/extract_batch_item_ocr_options.py +78 -0
- openparser/_generated/models/extract_batch_item_schema.py +65 -0
- openparser/_generated/models/extract_batch_request.py +99 -0
- openparser/_generated/models/extract_batch_request_items_item.py +201 -0
- openparser/_generated/models/extract_batch_request_items_item_grounding.py +8 -0
- openparser/_generated/models/extract_batch_request_items_item_llm_options.py +84 -0
- openparser/_generated/models/extract_batch_request_items_item_llm_options_reasoning_effort_type_1.py +13 -0
- openparser/_generated/models/extract_batch_request_items_item_ocr_options.py +78 -0
- openparser/_generated/models/extract_batch_request_items_item_schema.py +65 -0
- openparser/_generated/models/extract_batch_request_output_format.py +8 -0
- openparser/_generated/models/extract_request.py +226 -0
- openparser/_generated/models/extract_request_grounding.py +8 -0
- openparser/_generated/models/extract_request_llm_options.py +84 -0
- openparser/_generated/models/extract_request_llm_options_reasoning_effort_type_1.py +13 -0
- openparser/_generated/models/extract_request_ocr_options.py +78 -0
- openparser/_generated/models/extract_request_output_format.py +8 -0
- openparser/_generated/models/extract_request_schema.py +65 -0
- openparser/_generated/models/extract_sync_body.py +136 -0
- openparser/_generated/models/extraction_attempt.py +122 -0
- openparser/_generated/models/extraction_attempt_kind.py +8 -0
- openparser/_generated/models/extraction_attempt_status.py +9 -0
- openparser/_generated/models/extraction_chunk.py +184 -0
- openparser/_generated/models/extraction_citation.py +169 -0
- openparser/_generated/models/extraction_citation_granularity.py +8 -0
- openparser/_generated/models/extraction_citation_source_type.py +16 -0
- openparser/_generated/models/extraction_grounding_field.py +102 -0
- openparser/_generated/models/extraction_grounding_mode.py +8 -0
- openparser/_generated/models/extraction_grounding_result.py +87 -0
- openparser/_generated/models/extraction_pipeline.py +201 -0
- openparser/_generated/models/extraction_pipeline_list_response.py +76 -0
- openparser/_generated/models/extraction_pipeline_llm_options.py +84 -0
- openparser/_generated/models/extraction_pipeline_llm_options_reasoning_effort_type_0_type_1.py +13 -0
- openparser/_generated/models/extraction_pipeline_ocr_options.py +73 -0
- openparser/_generated/models/extraction_pipeline_schema.py +67 -0
- openparser/_generated/models/extraction_terminal_result.py +206 -0
- openparser/_generated/models/extraction_terminal_result_reasoning_effort_type_0.py +13 -0
- openparser/_generated/models/extraction_usage_totals.py +80 -0
- openparser/_generated/models/job.py +437 -0
- openparser/_generated/models/job_accepted.py +131 -0
- openparser/_generated/models/job_accepted_operation.py +8 -0
- openparser/_generated/models/job_extraction_schema.py +65 -0
- openparser/_generated/models/job_failure.py +98 -0
- openparser/_generated/models/job_failure_details.py +65 -0
- openparser/_generated/models/job_list_response.py +91 -0
- openparser/_generated/models/job_operation.py +10 -0
- openparser/_generated/models/job_progress.py +68 -0
- openparser/_generated/models/job_related_extractions_item.py +145 -0
- openparser/_generated/models/job_status.py +11 -0
- openparser/_generated/models/job_summary.py +264 -0
- openparser/_generated/models/json_schema_object.py +66 -0
- openparser/_generated/models/list_llm_models_mode.py +8 -0
- openparser/_generated/models/ocr_llm_model_catalog_entry.py +257 -0
- openparser/_generated/models/ocr_llm_model_catalog_entry_pricing.py +76 -0
- openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0.py +134 -0
- openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0_default_effort_type_0.py +13 -0
- openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0_supported_efforts_type_0_item.py +13 -0
- openparser/_generated/models/ocr_llm_model_catalog_entry_recommendation.py +8 -0
- openparser/_generated/models/ocr_llm_models_response.py +150 -0
- openparser/_generated/models/ocr_llm_models_response_mode.py +8 -0
- openparser/_generated/models/ocr_model.py +7 -0
- openparser/_generated/models/ocr_model_catalog_entry.py +131 -0
- openparser/_generated/models/ocr_model_catalog_entry_availability.py +9 -0
- openparser/_generated/models/ocr_model_catalog_entry_capabilities.py +97 -0
- openparser/_generated/models/ocr_model_catalog_entry_capabilities_options.py +73 -0
- openparser/_generated/models/ocr_model_catalog_entry_option_defaults.py +73 -0
- openparser/_generated/models/ocr_model_catalog_entry_pricing.py +68 -0
- openparser/_generated/models/ocr_models_response.py +76 -0
- openparser/_generated/models/ocr_output_format.py +8 -0
- openparser/_generated/models/paddle_raw_profile.py +76 -0
- openparser/_generated/models/paddle_raw_profile_options.py +115 -0
- openparser/_generated/models/page_block.py +332 -0
- openparser/_generated/models/page_block_kind.py +9 -0
- openparser/_generated/models/page_block_polygon_type_0_item.py +65 -0
- openparser/_generated/models/parse_async_body.py +133 -0
- openparser/_generated/models/parse_batch_body.py +143 -0
- openparser/_generated/models/parse_batch_item.py +109 -0
- openparser/_generated/models/parse_batch_item_ocr_options.py +78 -0
- openparser/_generated/models/parse_batch_request.py +100 -0
- openparser/_generated/models/parse_batch_request_items_item.py +108 -0
- openparser/_generated/models/parse_batch_request_items_item_ocr_options.py +78 -0
- openparser/_generated/models/parse_batch_request_output_format.py +8 -0
- openparser/_generated/models/parse_request.py +112 -0
- openparser/_generated/models/parse_request_ocr_options.py +78 -0
- openparser/_generated/models/parse_request_output_format.py +8 -0
- openparser/_generated/models/parse_sync_body.py +133 -0
- openparser/_generated/models/parsed_document.py +187 -0
- openparser/_generated/models/public_file.py +117 -0
- openparser/_generated/models/raw_parse_result.py +110 -0
- openparser/_generated/models/raw_parse_result_result.py +65 -0
- openparser/_generated/models/region.py +224 -0
- openparser/_generated/models/region_content.py +155 -0
- openparser/_generated/models/region_polygon_type_0_item.py +65 -0
- openparser/_generated/models/region_type.py +16 -0
- openparser/_generated/models/suggest_schema_request.py +69 -0
- openparser/_generated/models/suggest_schema_response.py +74 -0
- openparser/_generated/models/suggest_schema_response_schema.py +66 -0
- openparser/_generated/models/update_extraction_pipeline_request.py +227 -0
- openparser/_generated/models/update_extraction_pipeline_request_grounding.py +8 -0
- openparser/_generated/models/update_extraction_pipeline_request_llm_options_type_0.py +84 -0
- openparser/_generated/models/update_extraction_pipeline_request_llm_options_type_0_reasoning_effort_type_1.py +13 -0
- openparser/_generated/models/update_extraction_pipeline_request_ocr_options_type_0.py +78 -0
- openparser/_generated/models/update_extraction_pipeline_request_schema.py +67 -0
- openparser/_generated/py.typed +1 -0
- openparser/_generated/types.py +53 -0
- openparser/_telemetry.py +34 -0
- openparser/client.py +541 -0
- openparser/errors.py +172 -0
- openparser/py.typed +0 -0
- openparser_sdk-0.0.1.dist-info/METADATA +178 -0
- openparser_sdk-0.0.1.dist-info/RECORD +173 -0
- openparser_sdk-0.0.1.dist-info/WHEEL +4 -0
- openparser_sdk-0.0.1.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..models.job_operation import JobOperation
|
|
12
|
+
from ..models.job_status import JobStatus
|
|
13
|
+
from ..models.ocr_output_format import OcrOutputFormat
|
|
14
|
+
from ..types import UNSET, Unset
|
|
15
|
+
from dateutil.parser import isoparse
|
|
16
|
+
from typing import cast
|
|
17
|
+
import datetime
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from ..models.job_failure import JobFailure
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
T = TypeVar("T", bound="JobSummary")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@_attrs_define
|
|
31
|
+
class JobSummary:
|
|
32
|
+
""" Lightweight list row for `GET /jobs`. Omits result bodies, idempotency keys,
|
|
33
|
+
storage object keys, and provider cost fields.
|
|
34
|
+
|
|
35
|
+
Attributes:
|
|
36
|
+
id (str): Prefixed public id for an OCR job (`opj_…`). Example: opj_V1StGXR8_Z5jdHi6B-myT.
|
|
37
|
+
operation (JobOperation):
|
|
38
|
+
status (JobStatus): Durable job status. For batch parent jobs, status is derived from children after each
|
|
39
|
+
child transition:
|
|
40
|
+
1. If any child is non-terminal, the parent remains `queued` only while every child is
|
|
41
|
+
queued; it becomes `running` once any child is running or terminal.
|
|
42
|
+
2. When every child is terminal and any child is `indeterminate`, the parent is
|
|
43
|
+
`indeterminate`.
|
|
44
|
+
3. When every child is terminal, none are `indeterminate`, and any child is `failed`:
|
|
45
|
+
the parent is `failed` if zero children succeeded, otherwise `succeeded` (mixed
|
|
46
|
+
success/failure closes as parent `succeeded` while preserving failed children in
|
|
47
|
+
summaries).
|
|
48
|
+
4. When every child is `succeeded`, the parent is `succeeded`.
|
|
49
|
+
|
|
50
|
+
Partial failures are always retained on child summaries; parent status does not drop
|
|
51
|
+
failed children from results.
|
|
52
|
+
output_format (OcrOutputFormat):
|
|
53
|
+
page_count (int):
|
|
54
|
+
created_at (datetime.datetime):
|
|
55
|
+
updated_at (datetime.datetime):
|
|
56
|
+
has_result (bool): True when `GET /jobs/{id}` includes a terminal `result`.
|
|
57
|
+
url (str): Path-absolute job resource URL (for example `/jobs/{id}`).
|
|
58
|
+
pipeline_id (None | str): Snapshot of the saved extraction pipeline id at admit time, or `null` for parse jobs,
|
|
59
|
+
inline extract config, and other non-pipeline work.
|
|
60
|
+
pipeline_version (int | None): Snapshot of the saved extraction pipeline version at admit time, or `null` when
|
|
61
|
+
`pipeline_id` is `null`.
|
|
62
|
+
ocr_model (None | str | Unset):
|
|
63
|
+
llm_model (None | str | Unset):
|
|
64
|
+
error (JobFailure | Unset):
|
|
65
|
+
has_source (bool | Unset):
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
id: str
|
|
69
|
+
operation: JobOperation
|
|
70
|
+
status: JobStatus
|
|
71
|
+
output_format: OcrOutputFormat
|
|
72
|
+
page_count: int
|
|
73
|
+
created_at: datetime.datetime
|
|
74
|
+
updated_at: datetime.datetime
|
|
75
|
+
has_result: bool
|
|
76
|
+
url: str
|
|
77
|
+
pipeline_id: None | str
|
|
78
|
+
pipeline_version: int | None
|
|
79
|
+
ocr_model: None | str | Unset = UNSET
|
|
80
|
+
llm_model: None | str | Unset = UNSET
|
|
81
|
+
error: JobFailure | Unset = UNSET
|
|
82
|
+
has_source: bool | Unset = UNSET
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def to_dict(self) -> dict[str, Any]:
|
|
89
|
+
from ..models.job_failure import JobFailure
|
|
90
|
+
id = self.id
|
|
91
|
+
|
|
92
|
+
operation = self.operation.value
|
|
93
|
+
|
|
94
|
+
status = self.status.value
|
|
95
|
+
|
|
96
|
+
output_format = self.output_format.value
|
|
97
|
+
|
|
98
|
+
page_count = self.page_count
|
|
99
|
+
|
|
100
|
+
created_at = self.created_at.isoformat()
|
|
101
|
+
|
|
102
|
+
updated_at = self.updated_at.isoformat()
|
|
103
|
+
|
|
104
|
+
has_result = self.has_result
|
|
105
|
+
|
|
106
|
+
url = self.url
|
|
107
|
+
|
|
108
|
+
pipeline_id: None | str
|
|
109
|
+
pipeline_id = self.pipeline_id
|
|
110
|
+
|
|
111
|
+
pipeline_version: int | None
|
|
112
|
+
pipeline_version = self.pipeline_version
|
|
113
|
+
|
|
114
|
+
ocr_model: None | str | Unset
|
|
115
|
+
if isinstance(self.ocr_model, Unset):
|
|
116
|
+
ocr_model = UNSET
|
|
117
|
+
else:
|
|
118
|
+
ocr_model = self.ocr_model
|
|
119
|
+
|
|
120
|
+
llm_model: None | str | Unset
|
|
121
|
+
if isinstance(self.llm_model, Unset):
|
|
122
|
+
llm_model = UNSET
|
|
123
|
+
else:
|
|
124
|
+
llm_model = self.llm_model
|
|
125
|
+
|
|
126
|
+
error: dict[str, Any] | Unset = UNSET
|
|
127
|
+
if not isinstance(self.error, Unset):
|
|
128
|
+
error = self.error.to_dict()
|
|
129
|
+
|
|
130
|
+
has_source = self.has_source
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
field_dict: dict[str, Any] = {}
|
|
134
|
+
|
|
135
|
+
field_dict.update({
|
|
136
|
+
"id": id,
|
|
137
|
+
"operation": operation,
|
|
138
|
+
"status": status,
|
|
139
|
+
"output_format": output_format,
|
|
140
|
+
"page_count": page_count,
|
|
141
|
+
"created_at": created_at,
|
|
142
|
+
"updated_at": updated_at,
|
|
143
|
+
"has_result": has_result,
|
|
144
|
+
"url": url,
|
|
145
|
+
"pipeline_id": pipeline_id,
|
|
146
|
+
"pipeline_version": pipeline_version,
|
|
147
|
+
})
|
|
148
|
+
if ocr_model is not UNSET:
|
|
149
|
+
field_dict["ocr_model"] = ocr_model
|
|
150
|
+
if llm_model is not UNSET:
|
|
151
|
+
field_dict["llm_model"] = llm_model
|
|
152
|
+
if error is not UNSET:
|
|
153
|
+
field_dict["error"] = error
|
|
154
|
+
if has_source is not UNSET:
|
|
155
|
+
field_dict["has_source"] = has_source
|
|
156
|
+
|
|
157
|
+
return field_dict
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@classmethod
|
|
162
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
163
|
+
from ..models.job_failure import JobFailure
|
|
164
|
+
d = dict(src_dict)
|
|
165
|
+
id = d.pop("id")
|
|
166
|
+
|
|
167
|
+
operation = JobOperation(d.pop("operation"))
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
status = JobStatus(d.pop("status"))
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
output_format = OcrOutputFormat(d.pop("output_format"))
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
page_count = d.pop("page_count")
|
|
183
|
+
|
|
184
|
+
created_at = isoparse(d.pop("created_at"))
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
updated_at = isoparse(d.pop("updated_at"))
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
has_result = d.pop("has_result")
|
|
195
|
+
|
|
196
|
+
url = d.pop("url")
|
|
197
|
+
|
|
198
|
+
def _parse_pipeline_id(data: object) -> None | str:
|
|
199
|
+
if data is None:
|
|
200
|
+
return data
|
|
201
|
+
return cast(None | str, data)
|
|
202
|
+
|
|
203
|
+
pipeline_id = _parse_pipeline_id(d.pop("pipeline_id"))
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _parse_pipeline_version(data: object) -> int | None:
|
|
207
|
+
if data is None:
|
|
208
|
+
return data
|
|
209
|
+
return cast(int | None, data)
|
|
210
|
+
|
|
211
|
+
pipeline_version = _parse_pipeline_version(d.pop("pipeline_version"))
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def _parse_ocr_model(data: object) -> None | str | Unset:
|
|
215
|
+
if data is None:
|
|
216
|
+
return data
|
|
217
|
+
if isinstance(data, Unset):
|
|
218
|
+
return data
|
|
219
|
+
return cast(None | str | Unset, data)
|
|
220
|
+
|
|
221
|
+
ocr_model = _parse_ocr_model(d.pop("ocr_model", UNSET))
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def _parse_llm_model(data: object) -> None | str | Unset:
|
|
225
|
+
if data is None:
|
|
226
|
+
return data
|
|
227
|
+
if isinstance(data, Unset):
|
|
228
|
+
return data
|
|
229
|
+
return cast(None | str | Unset, data)
|
|
230
|
+
|
|
231
|
+
llm_model = _parse_llm_model(d.pop("llm_model", UNSET))
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
_error = d.pop("error", UNSET)
|
|
235
|
+
error: JobFailure | Unset
|
|
236
|
+
if isinstance(_error, Unset):
|
|
237
|
+
error = UNSET
|
|
238
|
+
else:
|
|
239
|
+
error = JobFailure.from_dict(_error)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
has_source = d.pop("has_source", UNSET)
|
|
245
|
+
|
|
246
|
+
job_summary = cls(
|
|
247
|
+
id=id,
|
|
248
|
+
operation=operation,
|
|
249
|
+
status=status,
|
|
250
|
+
output_format=output_format,
|
|
251
|
+
page_count=page_count,
|
|
252
|
+
created_at=created_at,
|
|
253
|
+
updated_at=updated_at,
|
|
254
|
+
has_result=has_result,
|
|
255
|
+
url=url,
|
|
256
|
+
pipeline_id=pipeline_id,
|
|
257
|
+
pipeline_version=pipeline_version,
|
|
258
|
+
ocr_model=ocr_model,
|
|
259
|
+
llm_model=llm_model,
|
|
260
|
+
error=error,
|
|
261
|
+
has_source=has_source,
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
return job_summary
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T", bound="JsonSchemaObject")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@_attrs_define
|
|
22
|
+
class JsonSchemaObject:
|
|
23
|
+
""" Supported JSON Schema object describing the requested extraction output.
|
|
24
|
+
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def to_dict(self) -> dict[str, Any]:
|
|
34
|
+
|
|
35
|
+
field_dict: dict[str, Any] = {}
|
|
36
|
+
field_dict.update(self.additional_properties)
|
|
37
|
+
|
|
38
|
+
return field_dict
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
44
|
+
d = dict(src_dict)
|
|
45
|
+
json_schema_object = cls(
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
json_schema_object.additional_properties = d
|
|
50
|
+
return json_schema_object
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def additional_keys(self) -> list[str]:
|
|
54
|
+
return list(self.additional_properties.keys())
|
|
55
|
+
|
|
56
|
+
def __getitem__(self, key: str) -> Any:
|
|
57
|
+
return self.additional_properties[key]
|
|
58
|
+
|
|
59
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
60
|
+
self.additional_properties[key] = value
|
|
61
|
+
|
|
62
|
+
def __delitem__(self, key: str) -> None:
|
|
63
|
+
del self.additional_properties[key]
|
|
64
|
+
|
|
65
|
+
def __contains__(self, key: str) -> bool:
|
|
66
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from ..models.ocr_llm_model_catalog_entry_recommendation import OcrLlmModelCatalogEntryRecommendation
|
|
12
|
+
from dateutil.parser import isoparse
|
|
13
|
+
from typing import cast
|
|
14
|
+
import datetime
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from ..models.ocr_llm_model_catalog_entry_pricing import OcrLlmModelCatalogEntryPricing
|
|
18
|
+
from ..models.ocr_llm_model_catalog_entry_reasoning_type_0 import OcrLlmModelCatalogEntryReasoningType0
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
T = TypeVar("T", bound="OcrLlmModelCatalogEntry")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@_attrs_define
|
|
29
|
+
class OcrLlmModelCatalogEntry:
|
|
30
|
+
""" One compatible extraction LLM. `recommendation` is `suggested` or `compatible`.
|
|
31
|
+
`certified_grounding` / `certified_suggest` (and compatibility aliases
|
|
32
|
+
`supports_grounding` / `supports_suggest`) gate heavier schemas. `pricing` is customer retail USD per 1M tokens
|
|
33
|
+
(`basis: customer_retail`) — the rates customers are charged, not raw provider list cost.
|
|
34
|
+
|
|
35
|
+
Attributes:
|
|
36
|
+
id (str):
|
|
37
|
+
label (str):
|
|
38
|
+
provider (str):
|
|
39
|
+
created_at (datetime.datetime | None):
|
|
40
|
+
context_length (int | None):
|
|
41
|
+
recommendation (OcrLlmModelCatalogEntryRecommendation):
|
|
42
|
+
is_default (bool):
|
|
43
|
+
certified_grounding (bool):
|
|
44
|
+
certified_suggest (bool):
|
|
45
|
+
supports_grounding (bool):
|
|
46
|
+
supports_suggest (bool):
|
|
47
|
+
pricing_known (bool):
|
|
48
|
+
reasoning (None | OcrLlmModelCatalogEntryReasoningType0):
|
|
49
|
+
deprecated_at (datetime.datetime | None):
|
|
50
|
+
pricing (OcrLlmModelCatalogEntryPricing):
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
id: str
|
|
54
|
+
label: str
|
|
55
|
+
provider: str
|
|
56
|
+
created_at: datetime.datetime | None
|
|
57
|
+
context_length: int | None
|
|
58
|
+
recommendation: OcrLlmModelCatalogEntryRecommendation
|
|
59
|
+
is_default: bool
|
|
60
|
+
certified_grounding: bool
|
|
61
|
+
certified_suggest: bool
|
|
62
|
+
supports_grounding: bool
|
|
63
|
+
supports_suggest: bool
|
|
64
|
+
pricing_known: bool
|
|
65
|
+
reasoning: None | OcrLlmModelCatalogEntryReasoningType0
|
|
66
|
+
deprecated_at: datetime.datetime | None
|
|
67
|
+
pricing: OcrLlmModelCatalogEntryPricing
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def to_dict(self) -> dict[str, Any]:
|
|
74
|
+
from ..models.ocr_llm_model_catalog_entry_pricing import OcrLlmModelCatalogEntryPricing
|
|
75
|
+
from ..models.ocr_llm_model_catalog_entry_reasoning_type_0 import OcrLlmModelCatalogEntryReasoningType0
|
|
76
|
+
id = self.id
|
|
77
|
+
|
|
78
|
+
label = self.label
|
|
79
|
+
|
|
80
|
+
provider = self.provider
|
|
81
|
+
|
|
82
|
+
created_at: None | str
|
|
83
|
+
if isinstance(self.created_at, datetime.datetime):
|
|
84
|
+
created_at = self.created_at.isoformat()
|
|
85
|
+
else:
|
|
86
|
+
created_at = self.created_at
|
|
87
|
+
|
|
88
|
+
context_length: int | None
|
|
89
|
+
context_length = self.context_length
|
|
90
|
+
|
|
91
|
+
recommendation = self.recommendation.value
|
|
92
|
+
|
|
93
|
+
is_default = self.is_default
|
|
94
|
+
|
|
95
|
+
certified_grounding = self.certified_grounding
|
|
96
|
+
|
|
97
|
+
certified_suggest = self.certified_suggest
|
|
98
|
+
|
|
99
|
+
supports_grounding = self.supports_grounding
|
|
100
|
+
|
|
101
|
+
supports_suggest = self.supports_suggest
|
|
102
|
+
|
|
103
|
+
pricing_known = self.pricing_known
|
|
104
|
+
|
|
105
|
+
reasoning: dict[str, Any] | None
|
|
106
|
+
if isinstance(self.reasoning, OcrLlmModelCatalogEntryReasoningType0):
|
|
107
|
+
reasoning = self.reasoning.to_dict()
|
|
108
|
+
else:
|
|
109
|
+
reasoning = self.reasoning
|
|
110
|
+
|
|
111
|
+
deprecated_at: None | str
|
|
112
|
+
if isinstance(self.deprecated_at, datetime.datetime):
|
|
113
|
+
deprecated_at = self.deprecated_at.isoformat()
|
|
114
|
+
else:
|
|
115
|
+
deprecated_at = self.deprecated_at
|
|
116
|
+
|
|
117
|
+
pricing = self.pricing.to_dict()
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
field_dict: dict[str, Any] = {}
|
|
121
|
+
|
|
122
|
+
field_dict.update({
|
|
123
|
+
"id": id,
|
|
124
|
+
"label": label,
|
|
125
|
+
"provider": provider,
|
|
126
|
+
"created_at": created_at,
|
|
127
|
+
"context_length": context_length,
|
|
128
|
+
"recommendation": recommendation,
|
|
129
|
+
"is_default": is_default,
|
|
130
|
+
"certified_grounding": certified_grounding,
|
|
131
|
+
"certified_suggest": certified_suggest,
|
|
132
|
+
"supports_grounding": supports_grounding,
|
|
133
|
+
"supports_suggest": supports_suggest,
|
|
134
|
+
"pricing_known": pricing_known,
|
|
135
|
+
"reasoning": reasoning,
|
|
136
|
+
"deprecated_at": deprecated_at,
|
|
137
|
+
"pricing": pricing,
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
return field_dict
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
@classmethod
|
|
145
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
146
|
+
from ..models.ocr_llm_model_catalog_entry_pricing import OcrLlmModelCatalogEntryPricing
|
|
147
|
+
from ..models.ocr_llm_model_catalog_entry_reasoning_type_0 import OcrLlmModelCatalogEntryReasoningType0
|
|
148
|
+
d = dict(src_dict)
|
|
149
|
+
id = d.pop("id")
|
|
150
|
+
|
|
151
|
+
label = d.pop("label")
|
|
152
|
+
|
|
153
|
+
provider = d.pop("provider")
|
|
154
|
+
|
|
155
|
+
def _parse_created_at(data: object) -> datetime.datetime | None:
|
|
156
|
+
if data is None:
|
|
157
|
+
return data
|
|
158
|
+
try:
|
|
159
|
+
if not isinstance(data, str):
|
|
160
|
+
raise TypeError()
|
|
161
|
+
created_at_type_0 = isoparse(data)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
return created_at_type_0
|
|
166
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
167
|
+
pass
|
|
168
|
+
return cast(datetime.datetime | None, data)
|
|
169
|
+
|
|
170
|
+
created_at = _parse_created_at(d.pop("created_at"))
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def _parse_context_length(data: object) -> int | None:
|
|
174
|
+
if data is None:
|
|
175
|
+
return data
|
|
176
|
+
return cast(int | None, data)
|
|
177
|
+
|
|
178
|
+
context_length = _parse_context_length(d.pop("context_length"))
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
recommendation = OcrLlmModelCatalogEntryRecommendation(d.pop("recommendation"))
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
is_default = d.pop("is_default")
|
|
187
|
+
|
|
188
|
+
certified_grounding = d.pop("certified_grounding")
|
|
189
|
+
|
|
190
|
+
certified_suggest = d.pop("certified_suggest")
|
|
191
|
+
|
|
192
|
+
supports_grounding = d.pop("supports_grounding")
|
|
193
|
+
|
|
194
|
+
supports_suggest = d.pop("supports_suggest")
|
|
195
|
+
|
|
196
|
+
pricing_known = d.pop("pricing_known")
|
|
197
|
+
|
|
198
|
+
def _parse_reasoning(data: object) -> None | OcrLlmModelCatalogEntryReasoningType0:
|
|
199
|
+
if data is None:
|
|
200
|
+
return data
|
|
201
|
+
try:
|
|
202
|
+
if not isinstance(data, dict):
|
|
203
|
+
raise TypeError()
|
|
204
|
+
reasoning_type_0 = OcrLlmModelCatalogEntryReasoningType0.from_dict(data)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
return reasoning_type_0
|
|
209
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
210
|
+
pass
|
|
211
|
+
return cast(None | OcrLlmModelCatalogEntryReasoningType0, data)
|
|
212
|
+
|
|
213
|
+
reasoning = _parse_reasoning(d.pop("reasoning"))
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def _parse_deprecated_at(data: object) -> datetime.datetime | None:
|
|
217
|
+
if data is None:
|
|
218
|
+
return data
|
|
219
|
+
try:
|
|
220
|
+
if not isinstance(data, str):
|
|
221
|
+
raise TypeError()
|
|
222
|
+
deprecated_at_type_0 = isoparse(data)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
return deprecated_at_type_0
|
|
227
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
228
|
+
pass
|
|
229
|
+
return cast(datetime.datetime | None, data)
|
|
230
|
+
|
|
231
|
+
deprecated_at = _parse_deprecated_at(d.pop("deprecated_at"))
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
pricing = OcrLlmModelCatalogEntryPricing.from_dict(d.pop("pricing"))
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
ocr_llm_model_catalog_entry = cls(
|
|
240
|
+
id=id,
|
|
241
|
+
label=label,
|
|
242
|
+
provider=provider,
|
|
243
|
+
created_at=created_at,
|
|
244
|
+
context_length=context_length,
|
|
245
|
+
recommendation=recommendation,
|
|
246
|
+
is_default=is_default,
|
|
247
|
+
certified_grounding=certified_grounding,
|
|
248
|
+
certified_suggest=certified_suggest,
|
|
249
|
+
supports_grounding=supports_grounding,
|
|
250
|
+
supports_suggest=supports_suggest,
|
|
251
|
+
pricing_known=pricing_known,
|
|
252
|
+
reasoning=reasoning,
|
|
253
|
+
deprecated_at=deprecated_at,
|
|
254
|
+
pricing=pricing,
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
return ocr_llm_model_catalog_entry
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
|
|
5
|
+
|
|
6
|
+
from attrs import define as _attrs_define
|
|
7
|
+
from attrs import field as _attrs_field
|
|
8
|
+
|
|
9
|
+
from ..types import UNSET, Unset
|
|
10
|
+
|
|
11
|
+
from typing import Literal, cast
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
T = TypeVar("T", bound="OcrLlmModelCatalogEntryPricing")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@_attrs_define
|
|
23
|
+
class OcrLlmModelCatalogEntryPricing:
|
|
24
|
+
"""
|
|
25
|
+
Attributes:
|
|
26
|
+
prompt_usd_per_1m (float):
|
|
27
|
+
completion_usd_per_1m (float):
|
|
28
|
+
basis (Literal['customer_retail']):
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
prompt_usd_per_1m: float
|
|
32
|
+
completion_usd_per_1m: float
|
|
33
|
+
basis: Literal['customer_retail']
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def to_dict(self) -> dict[str, Any]:
|
|
40
|
+
prompt_usd_per_1m = self.prompt_usd_per_1m
|
|
41
|
+
|
|
42
|
+
completion_usd_per_1m = self.completion_usd_per_1m
|
|
43
|
+
|
|
44
|
+
basis = self.basis
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
field_dict: dict[str, Any] = {}
|
|
48
|
+
|
|
49
|
+
field_dict.update({
|
|
50
|
+
"prompt_usd_per_1m": prompt_usd_per_1m,
|
|
51
|
+
"completion_usd_per_1m": completion_usd_per_1m,
|
|
52
|
+
"basis": basis,
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
return field_dict
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@classmethod
|
|
60
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
61
|
+
d = dict(src_dict)
|
|
62
|
+
prompt_usd_per_1m = d.pop("prompt_usd_per_1m")
|
|
63
|
+
|
|
64
|
+
completion_usd_per_1m = d.pop("completion_usd_per_1m")
|
|
65
|
+
|
|
66
|
+
basis = cast(Literal['customer_retail'] , d.pop("basis"))
|
|
67
|
+
if basis != 'customer_retail':
|
|
68
|
+
raise ValueError(f"basis must match const 'customer_retail', got '{basis}'")
|
|
69
|
+
|
|
70
|
+
ocr_llm_model_catalog_entry_pricing = cls(
|
|
71
|
+
prompt_usd_per_1m=prompt_usd_per_1m,
|
|
72
|
+
completion_usd_per_1m=completion_usd_per_1m,
|
|
73
|
+
basis=basis,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return ocr_llm_model_catalog_entry_pricing
|