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,206 @@
|
|
|
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.extraction_terminal_result_reasoning_effort_type_0 import ExtractionTerminalResultReasoningEffortType0
|
|
12
|
+
from ..types import UNSET, Unset
|
|
13
|
+
from typing import cast
|
|
14
|
+
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from ..models.extraction_attempt import ExtractionAttempt
|
|
17
|
+
from ..models.extraction_grounding_result import ExtractionGroundingResult
|
|
18
|
+
from ..models.extraction_usage_totals import ExtractionUsageTotals
|
|
19
|
+
from ..models.parsed_document import ParsedDocument
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
T = TypeVar("T", bound="ExtractionTerminalResult")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@_attrs_define
|
|
30
|
+
class ExtractionTerminalResult:
|
|
31
|
+
""" Terminal extraction result returned by sync `200` and embedded in succeeded jobs.
|
|
32
|
+
|
|
33
|
+
Attributes:
|
|
34
|
+
output (Any): Validated extraction output JSON matching the requested schema (wrappers never leak).
|
|
35
|
+
parsed_document (ParsedDocument): Versioned OpenParser `openparser@1` document representation. `blocks` is the
|
|
36
|
+
primary
|
|
37
|
+
stable interface; `regions`, `contents`, and `chunks` preserve provider-neutral geometry,
|
|
38
|
+
confidence, labels, provenance, and extraction views. Compatible optional fields may be
|
|
39
|
+
added within version 1; breaking representation changes create a new output-format version.
|
|
40
|
+
llm_model (str): OpenRouter model slug from the compatible OCR extraction catalog
|
|
41
|
+
(`GET /models/llm`). Unknown or deprecated values return `422 unsupported_llm_model`.
|
|
42
|
+
Ordinary extract may use any currently compatible model; field grounding requires a
|
|
43
|
+
certified model.
|
|
44
|
+
Example: openai/gpt-5.6-terra.
|
|
45
|
+
attempts (list[ExtractionAttempt]):
|
|
46
|
+
parse_job_id (str | Unset): Prefixed public id for an OCR job (`opj_…`). Example: opj_V1StGXR8_Z5jdHi6B-myT.
|
|
47
|
+
reasoning_effort (ExtractionTerminalResultReasoningEffortType0 | None | Unset):
|
|
48
|
+
usage (ExtractionUsageTotals | Unset): Aggregated customer retail OpenRouter usage for transparency. `cost_usd`
|
|
49
|
+
is the
|
|
50
|
+
customer charge, not raw provider list cost. Distinct from the customer
|
|
51
|
+
USD $0.001/page (0.1 credits/page) OCR charge recorded by Eigenpal billing.
|
|
52
|
+
grounding (ExtractionGroundingResult | Unset): Optional terminal grounding envelope present only when
|
|
53
|
+
`grounding: field` succeeded.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
output: Any
|
|
57
|
+
parsed_document: ParsedDocument
|
|
58
|
+
llm_model: str
|
|
59
|
+
attempts: list[ExtractionAttempt]
|
|
60
|
+
parse_job_id: str | Unset = UNSET
|
|
61
|
+
reasoning_effort: ExtractionTerminalResultReasoningEffortType0 | None | Unset = UNSET
|
|
62
|
+
usage: ExtractionUsageTotals | Unset = UNSET
|
|
63
|
+
grounding: ExtractionGroundingResult | Unset = UNSET
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def to_dict(self) -> dict[str, Any]:
|
|
70
|
+
from ..models.extraction_attempt import ExtractionAttempt
|
|
71
|
+
from ..models.extraction_grounding_result import ExtractionGroundingResult
|
|
72
|
+
from ..models.extraction_usage_totals import ExtractionUsageTotals
|
|
73
|
+
from ..models.parsed_document import ParsedDocument
|
|
74
|
+
output = self.output
|
|
75
|
+
|
|
76
|
+
parsed_document = self.parsed_document.to_dict()
|
|
77
|
+
|
|
78
|
+
llm_model = self.llm_model
|
|
79
|
+
|
|
80
|
+
attempts = []
|
|
81
|
+
for attempts_item_data in self.attempts:
|
|
82
|
+
attempts_item = attempts_item_data.to_dict()
|
|
83
|
+
attempts.append(attempts_item)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
parse_job_id = self.parse_job_id
|
|
88
|
+
|
|
89
|
+
reasoning_effort: None | str | Unset
|
|
90
|
+
if isinstance(self.reasoning_effort, Unset):
|
|
91
|
+
reasoning_effort = UNSET
|
|
92
|
+
elif isinstance(self.reasoning_effort, ExtractionTerminalResultReasoningEffortType0):
|
|
93
|
+
reasoning_effort = self.reasoning_effort.value
|
|
94
|
+
else:
|
|
95
|
+
reasoning_effort = self.reasoning_effort
|
|
96
|
+
|
|
97
|
+
usage: dict[str, Any] | Unset = UNSET
|
|
98
|
+
if not isinstance(self.usage, Unset):
|
|
99
|
+
usage = self.usage.to_dict()
|
|
100
|
+
|
|
101
|
+
grounding: dict[str, Any] | Unset = UNSET
|
|
102
|
+
if not isinstance(self.grounding, Unset):
|
|
103
|
+
grounding = self.grounding.to_dict()
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
field_dict: dict[str, Any] = {}
|
|
107
|
+
|
|
108
|
+
field_dict.update({
|
|
109
|
+
"output": output,
|
|
110
|
+
"parsed_document": parsed_document,
|
|
111
|
+
"llm_model": llm_model,
|
|
112
|
+
"attempts": attempts,
|
|
113
|
+
})
|
|
114
|
+
if parse_job_id is not UNSET:
|
|
115
|
+
field_dict["parse_job_id"] = parse_job_id
|
|
116
|
+
if reasoning_effort is not UNSET:
|
|
117
|
+
field_dict["reasoning_effort"] = reasoning_effort
|
|
118
|
+
if usage is not UNSET:
|
|
119
|
+
field_dict["usage"] = usage
|
|
120
|
+
if grounding is not UNSET:
|
|
121
|
+
field_dict["grounding"] = grounding
|
|
122
|
+
|
|
123
|
+
return field_dict
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@classmethod
|
|
128
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
129
|
+
from ..models.extraction_attempt import ExtractionAttempt
|
|
130
|
+
from ..models.extraction_grounding_result import ExtractionGroundingResult
|
|
131
|
+
from ..models.extraction_usage_totals import ExtractionUsageTotals
|
|
132
|
+
from ..models.parsed_document import ParsedDocument
|
|
133
|
+
d = dict(src_dict)
|
|
134
|
+
output = d.pop("output")
|
|
135
|
+
|
|
136
|
+
parsed_document = ParsedDocument.from_dict(d.pop("parsed_document"))
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
llm_model = d.pop("llm_model")
|
|
142
|
+
|
|
143
|
+
attempts = []
|
|
144
|
+
_attempts = d.pop("attempts")
|
|
145
|
+
for attempts_item_data in (_attempts):
|
|
146
|
+
attempts_item = ExtractionAttempt.from_dict(attempts_item_data)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
attempts.append(attempts_item)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
parse_job_id = d.pop("parse_job_id", UNSET)
|
|
154
|
+
|
|
155
|
+
def _parse_reasoning_effort(data: object) -> ExtractionTerminalResultReasoningEffortType0 | None | Unset:
|
|
156
|
+
if data is None:
|
|
157
|
+
return data
|
|
158
|
+
if isinstance(data, Unset):
|
|
159
|
+
return data
|
|
160
|
+
try:
|
|
161
|
+
if not isinstance(data, str):
|
|
162
|
+
raise TypeError()
|
|
163
|
+
reasoning_effort_type_0 = ExtractionTerminalResultReasoningEffortType0(data)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
return reasoning_effort_type_0
|
|
168
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
169
|
+
pass
|
|
170
|
+
return cast(ExtractionTerminalResultReasoningEffortType0 | None | Unset, data)
|
|
171
|
+
|
|
172
|
+
reasoning_effort = _parse_reasoning_effort(d.pop("reasoning_effort", UNSET))
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
_usage = d.pop("usage", UNSET)
|
|
176
|
+
usage: ExtractionUsageTotals | Unset
|
|
177
|
+
if isinstance(_usage, Unset):
|
|
178
|
+
usage = UNSET
|
|
179
|
+
else:
|
|
180
|
+
usage = ExtractionUsageTotals.from_dict(_usage)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
_grounding = d.pop("grounding", UNSET)
|
|
186
|
+
grounding: ExtractionGroundingResult | Unset
|
|
187
|
+
if isinstance(_grounding, Unset):
|
|
188
|
+
grounding = UNSET
|
|
189
|
+
else:
|
|
190
|
+
grounding = ExtractionGroundingResult.from_dict(_grounding)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
extraction_terminal_result = cls(
|
|
196
|
+
output=output,
|
|
197
|
+
parsed_document=parsed_document,
|
|
198
|
+
llm_model=llm_model,
|
|
199
|
+
attempts=attempts,
|
|
200
|
+
parse_job_id=parse_job_id,
|
|
201
|
+
reasoning_effort=reasoning_effort,
|
|
202
|
+
usage=usage,
|
|
203
|
+
grounding=grounding,
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
return extraction_terminal_result
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
class ExtractionTerminalResultReasoningEffortType0(str, Enum):
|
|
4
|
+
HIGH = "high"
|
|
5
|
+
LOW = "low"
|
|
6
|
+
MAX = "max"
|
|
7
|
+
MEDIUM = "medium"
|
|
8
|
+
MINIMAL = "minimal"
|
|
9
|
+
NONE = "none"
|
|
10
|
+
XHIGH = "xhigh"
|
|
11
|
+
|
|
12
|
+
def __str__(self) -> str:
|
|
13
|
+
return str(self.value)
|
|
@@ -0,0 +1,80 @@
|
|
|
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 ..types import UNSET, Unset
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
T = TypeVar("T", bound="ExtractionUsageTotals")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@_attrs_define
|
|
23
|
+
class ExtractionUsageTotals:
|
|
24
|
+
""" Aggregated customer retail OpenRouter usage for transparency. `cost_usd` is the
|
|
25
|
+
customer charge, not raw provider list cost. Distinct from the customer
|
|
26
|
+
USD $0.001/page (0.1 credits/page) OCR charge recorded by Eigenpal billing.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
input_tokens (int | Unset):
|
|
30
|
+
output_tokens (int | Unset):
|
|
31
|
+
cost_usd (float | Unset):
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
input_tokens: int | Unset = UNSET
|
|
35
|
+
output_tokens: int | Unset = UNSET
|
|
36
|
+
cost_usd: float | Unset = UNSET
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def to_dict(self) -> dict[str, Any]:
|
|
43
|
+
input_tokens = self.input_tokens
|
|
44
|
+
|
|
45
|
+
output_tokens = self.output_tokens
|
|
46
|
+
|
|
47
|
+
cost_usd = self.cost_usd
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
field_dict: dict[str, Any] = {}
|
|
51
|
+
|
|
52
|
+
field_dict.update({
|
|
53
|
+
})
|
|
54
|
+
if input_tokens is not UNSET:
|
|
55
|
+
field_dict["input_tokens"] = input_tokens
|
|
56
|
+
if output_tokens is not UNSET:
|
|
57
|
+
field_dict["output_tokens"] = output_tokens
|
|
58
|
+
if cost_usd is not UNSET:
|
|
59
|
+
field_dict["cost_usd"] = cost_usd
|
|
60
|
+
|
|
61
|
+
return field_dict
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
67
|
+
d = dict(src_dict)
|
|
68
|
+
input_tokens = d.pop("input_tokens", UNSET)
|
|
69
|
+
|
|
70
|
+
output_tokens = d.pop("output_tokens", UNSET)
|
|
71
|
+
|
|
72
|
+
cost_usd = d.pop("cost_usd", UNSET)
|
|
73
|
+
|
|
74
|
+
extraction_usage_totals = cls(
|
|
75
|
+
input_tokens=input_tokens,
|
|
76
|
+
output_tokens=output_tokens,
|
|
77
|
+
cost_usd=cost_usd,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return extraction_usage_totals
|