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.
Files changed (173) hide show
  1. openparser/__init__.py +54 -0
  2. openparser/_files.py +43 -0
  3. openparser/_generated/__init__.py +8 -0
  4. openparser/_generated/api/__init__.py +1 -0
  5. openparser/_generated/api/extract/__init__.py +1 -0
  6. openparser/_generated/api/extract/extract_async.py +280 -0
  7. openparser/_generated/api/extract/extract_batch.py +284 -0
  8. openparser/_generated/api/extract/extract_sync.py +315 -0
  9. openparser/_generated/api/extract/suggest_schema.py +260 -0
  10. openparser/_generated/api/files/__init__.py +1 -0
  11. openparser/_generated/api/files/create_file.py +237 -0
  12. openparser/_generated/api/files/delete_file.py +200 -0
  13. openparser/_generated/api/files/get_file.py +200 -0
  14. openparser/_generated/api/files/get_file_content.py +198 -0
  15. openparser/_generated/api/jobs/__init__.py +1 -0
  16. openparser/_generated/api/jobs/get_job.py +261 -0
  17. openparser/_generated/api/jobs/get_job_result.py +305 -0
  18. openparser/_generated/api/jobs/get_job_source.py +233 -0
  19. openparser/_generated/api/jobs/list_jobs.py +340 -0
  20. openparser/_generated/api/models/__init__.py +1 -0
  21. openparser/_generated/api/models/list_llm_models.py +288 -0
  22. openparser/_generated/api/models/list_ocr_models.py +184 -0
  23. openparser/_generated/api/parse/__init__.py +1 -0
  24. openparser/_generated/api/parse/parse_async.py +316 -0
  25. openparser/_generated/api/parse/parse_batch.py +280 -0
  26. openparser/_generated/api/parse/parse_sync.py +369 -0
  27. openparser/_generated/api/pipelines/__init__.py +1 -0
  28. openparser/_generated/api/pipelines/create_extraction_pipeline.py +242 -0
  29. openparser/_generated/api/pipelines/delete_extraction_pipeline.py +212 -0
  30. openparser/_generated/api/pipelines/get_extraction_pipeline.py +212 -0
  31. openparser/_generated/api/pipelines/list_extraction_pipelines.py +180 -0
  32. openparser/_generated/api/pipelines/update_extraction_pipeline.py +258 -0
  33. openparser/_generated/client.py +270 -0
  34. openparser/_generated/errors.py +14 -0
  35. openparser/_generated/models/__init__.py +261 -0
  36. openparser/_generated/models/batch_child_page.py +97 -0
  37. openparser/_generated/models/batch_child_summary.py +195 -0
  38. openparser/_generated/models/batch_job_accepted.py +139 -0
  39. openparser/_generated/models/batch_job_accepted_operation.py +8 -0
  40. openparser/_generated/models/batch_summary_counts.py +97 -0
  41. openparser/_generated/models/bounding_box.py +82 -0
  42. openparser/_generated/models/chunk_provenance_span.py +97 -0
  43. openparser/_generated/models/content_kind.py +10 -0
  44. openparser/_generated/models/create_extraction_pipeline_request.py +177 -0
  45. openparser/_generated/models/create_extraction_pipeline_request_grounding.py +8 -0
  46. openparser/_generated/models/create_extraction_pipeline_request_llm_options.py +84 -0
  47. openparser/_generated/models/create_extraction_pipeline_request_llm_options_reasoning_effort_type_1.py +13 -0
  48. openparser/_generated/models/create_extraction_pipeline_request_ocr_options.py +78 -0
  49. openparser/_generated/models/create_extraction_pipeline_request_schema.py +68 -0
  50. openparser/_generated/models/create_file_body.py +78 -0
  51. openparser/_generated/models/delete_extraction_pipeline_response.py +66 -0
  52. openparser/_generated/models/delete_file_response.py +57 -0
  53. openparser/_generated/models/error_body.py +106 -0
  54. openparser/_generated/models/error_body_details.py +65 -0
  55. openparser/_generated/models/error_response.py +65 -0
  56. openparser/_generated/models/extract_async_body.py +136 -0
  57. openparser/_generated/models/extract_batch_body.py +143 -0
  58. openparser/_generated/models/extract_batch_item.py +207 -0
  59. openparser/_generated/models/extract_batch_item_grounding.py +8 -0
  60. openparser/_generated/models/extract_batch_item_llm_options.py +84 -0
  61. openparser/_generated/models/extract_batch_item_llm_options_reasoning_effort_type_1.py +13 -0
  62. openparser/_generated/models/extract_batch_item_ocr_options.py +78 -0
  63. openparser/_generated/models/extract_batch_item_schema.py +65 -0
  64. openparser/_generated/models/extract_batch_request.py +99 -0
  65. openparser/_generated/models/extract_batch_request_items_item.py +201 -0
  66. openparser/_generated/models/extract_batch_request_items_item_grounding.py +8 -0
  67. openparser/_generated/models/extract_batch_request_items_item_llm_options.py +84 -0
  68. openparser/_generated/models/extract_batch_request_items_item_llm_options_reasoning_effort_type_1.py +13 -0
  69. openparser/_generated/models/extract_batch_request_items_item_ocr_options.py +78 -0
  70. openparser/_generated/models/extract_batch_request_items_item_schema.py +65 -0
  71. openparser/_generated/models/extract_batch_request_output_format.py +8 -0
  72. openparser/_generated/models/extract_request.py +226 -0
  73. openparser/_generated/models/extract_request_grounding.py +8 -0
  74. openparser/_generated/models/extract_request_llm_options.py +84 -0
  75. openparser/_generated/models/extract_request_llm_options_reasoning_effort_type_1.py +13 -0
  76. openparser/_generated/models/extract_request_ocr_options.py +78 -0
  77. openparser/_generated/models/extract_request_output_format.py +8 -0
  78. openparser/_generated/models/extract_request_schema.py +65 -0
  79. openparser/_generated/models/extract_sync_body.py +136 -0
  80. openparser/_generated/models/extraction_attempt.py +122 -0
  81. openparser/_generated/models/extraction_attempt_kind.py +8 -0
  82. openparser/_generated/models/extraction_attempt_status.py +9 -0
  83. openparser/_generated/models/extraction_chunk.py +184 -0
  84. openparser/_generated/models/extraction_citation.py +169 -0
  85. openparser/_generated/models/extraction_citation_granularity.py +8 -0
  86. openparser/_generated/models/extraction_citation_source_type.py +16 -0
  87. openparser/_generated/models/extraction_grounding_field.py +102 -0
  88. openparser/_generated/models/extraction_grounding_mode.py +8 -0
  89. openparser/_generated/models/extraction_grounding_result.py +87 -0
  90. openparser/_generated/models/extraction_pipeline.py +201 -0
  91. openparser/_generated/models/extraction_pipeline_list_response.py +76 -0
  92. openparser/_generated/models/extraction_pipeline_llm_options.py +84 -0
  93. openparser/_generated/models/extraction_pipeline_llm_options_reasoning_effort_type_0_type_1.py +13 -0
  94. openparser/_generated/models/extraction_pipeline_ocr_options.py +73 -0
  95. openparser/_generated/models/extraction_pipeline_schema.py +67 -0
  96. openparser/_generated/models/extraction_terminal_result.py +206 -0
  97. openparser/_generated/models/extraction_terminal_result_reasoning_effort_type_0.py +13 -0
  98. openparser/_generated/models/extraction_usage_totals.py +80 -0
  99. openparser/_generated/models/job.py +437 -0
  100. openparser/_generated/models/job_accepted.py +131 -0
  101. openparser/_generated/models/job_accepted_operation.py +8 -0
  102. openparser/_generated/models/job_extraction_schema.py +65 -0
  103. openparser/_generated/models/job_failure.py +98 -0
  104. openparser/_generated/models/job_failure_details.py +65 -0
  105. openparser/_generated/models/job_list_response.py +91 -0
  106. openparser/_generated/models/job_operation.py +10 -0
  107. openparser/_generated/models/job_progress.py +68 -0
  108. openparser/_generated/models/job_related_extractions_item.py +145 -0
  109. openparser/_generated/models/job_status.py +11 -0
  110. openparser/_generated/models/job_summary.py +264 -0
  111. openparser/_generated/models/json_schema_object.py +66 -0
  112. openparser/_generated/models/list_llm_models_mode.py +8 -0
  113. openparser/_generated/models/ocr_llm_model_catalog_entry.py +257 -0
  114. openparser/_generated/models/ocr_llm_model_catalog_entry_pricing.py +76 -0
  115. openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0.py +134 -0
  116. openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0_default_effort_type_0.py +13 -0
  117. openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0_supported_efforts_type_0_item.py +13 -0
  118. openparser/_generated/models/ocr_llm_model_catalog_entry_recommendation.py +8 -0
  119. openparser/_generated/models/ocr_llm_models_response.py +150 -0
  120. openparser/_generated/models/ocr_llm_models_response_mode.py +8 -0
  121. openparser/_generated/models/ocr_model.py +7 -0
  122. openparser/_generated/models/ocr_model_catalog_entry.py +131 -0
  123. openparser/_generated/models/ocr_model_catalog_entry_availability.py +9 -0
  124. openparser/_generated/models/ocr_model_catalog_entry_capabilities.py +97 -0
  125. openparser/_generated/models/ocr_model_catalog_entry_capabilities_options.py +73 -0
  126. openparser/_generated/models/ocr_model_catalog_entry_option_defaults.py +73 -0
  127. openparser/_generated/models/ocr_model_catalog_entry_pricing.py +68 -0
  128. openparser/_generated/models/ocr_models_response.py +76 -0
  129. openparser/_generated/models/ocr_output_format.py +8 -0
  130. openparser/_generated/models/paddle_raw_profile.py +76 -0
  131. openparser/_generated/models/paddle_raw_profile_options.py +115 -0
  132. openparser/_generated/models/page_block.py +332 -0
  133. openparser/_generated/models/page_block_kind.py +9 -0
  134. openparser/_generated/models/page_block_polygon_type_0_item.py +65 -0
  135. openparser/_generated/models/parse_async_body.py +133 -0
  136. openparser/_generated/models/parse_batch_body.py +143 -0
  137. openparser/_generated/models/parse_batch_item.py +109 -0
  138. openparser/_generated/models/parse_batch_item_ocr_options.py +78 -0
  139. openparser/_generated/models/parse_batch_request.py +100 -0
  140. openparser/_generated/models/parse_batch_request_items_item.py +108 -0
  141. openparser/_generated/models/parse_batch_request_items_item_ocr_options.py +78 -0
  142. openparser/_generated/models/parse_batch_request_output_format.py +8 -0
  143. openparser/_generated/models/parse_request.py +112 -0
  144. openparser/_generated/models/parse_request_ocr_options.py +78 -0
  145. openparser/_generated/models/parse_request_output_format.py +8 -0
  146. openparser/_generated/models/parse_sync_body.py +133 -0
  147. openparser/_generated/models/parsed_document.py +187 -0
  148. openparser/_generated/models/public_file.py +117 -0
  149. openparser/_generated/models/raw_parse_result.py +110 -0
  150. openparser/_generated/models/raw_parse_result_result.py +65 -0
  151. openparser/_generated/models/region.py +224 -0
  152. openparser/_generated/models/region_content.py +155 -0
  153. openparser/_generated/models/region_polygon_type_0_item.py +65 -0
  154. openparser/_generated/models/region_type.py +16 -0
  155. openparser/_generated/models/suggest_schema_request.py +69 -0
  156. openparser/_generated/models/suggest_schema_response.py +74 -0
  157. openparser/_generated/models/suggest_schema_response_schema.py +66 -0
  158. openparser/_generated/models/update_extraction_pipeline_request.py +227 -0
  159. openparser/_generated/models/update_extraction_pipeline_request_grounding.py +8 -0
  160. openparser/_generated/models/update_extraction_pipeline_request_llm_options_type_0.py +84 -0
  161. openparser/_generated/models/update_extraction_pipeline_request_llm_options_type_0_reasoning_effort_type_1.py +13 -0
  162. openparser/_generated/models/update_extraction_pipeline_request_ocr_options_type_0.py +78 -0
  163. openparser/_generated/models/update_extraction_pipeline_request_schema.py +67 -0
  164. openparser/_generated/py.typed +1 -0
  165. openparser/_generated/types.py +53 -0
  166. openparser/_telemetry.py +34 -0
  167. openparser/client.py +541 -0
  168. openparser/errors.py +172 -0
  169. openparser/py.typed +0 -0
  170. openparser_sdk-0.0.1.dist-info/METADATA +178 -0
  171. openparser_sdk-0.0.1.dist-info/RECORD +173 -0
  172. openparser_sdk-0.0.1.dist-info/WHEEL +4 -0
  173. openparser_sdk-0.0.1.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,136 @@
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
+ import json
9
+ from .. import types
10
+
11
+ from ..types import UNSET, Unset
12
+
13
+ from ..types import File, FileTypes
14
+ from ..types import UNSET, Unset
15
+ from io import BytesIO
16
+ from typing import cast
17
+
18
+ if TYPE_CHECKING:
19
+ from ..models.extract_request import ExtractRequest
20
+
21
+
22
+
23
+
24
+
25
+ T = TypeVar("T", bound="ExtractAsyncBody")
26
+
27
+
28
+
29
+ @_attrs_define
30
+ class ExtractAsyncBody:
31
+ """
32
+ Attributes:
33
+ request (ExtractRequest): Single extract config. Provide either `pipeline_id` or inline extraction config.
34
+ The source is exactly one of multipart file bytes, `file_id`, or tenant-owned succeeded
35
+ `parse_job_id`. Parse reuse is single-extract-only, forbids `ocr_model` / `ocr_options`,
36
+ does not run OCR, and adds no page charge. `parse_job_id` is part of idempotency identity.
37
+ file (File | Unset): Source document bytes (PDF, PNG, or JPEG). Required unless `request.file_id`
38
+ references an existing Eigenpal reusable file.
39
+ """
40
+
41
+ request: ExtractRequest
42
+ file: File | Unset = UNSET
43
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
44
+
45
+
46
+
47
+
48
+
49
+ def to_dict(self) -> dict[str, Any]:
50
+ from ..models.extract_request import ExtractRequest
51
+ request = self.request.to_dict()
52
+
53
+ file: FileTypes | Unset = UNSET
54
+ if not isinstance(self.file, Unset):
55
+ file = self.file.to_tuple()
56
+
57
+
58
+
59
+ field_dict: dict[str, Any] = {}
60
+ field_dict.update(self.additional_properties)
61
+ field_dict.update({
62
+ "request": request,
63
+ })
64
+ if file is not UNSET:
65
+ field_dict["file"] = file
66
+
67
+ return field_dict
68
+
69
+
70
+ def to_multipart(self) -> types.RequestFiles:
71
+ from ..models.extract_request import ExtractRequest
72
+ files: types.RequestFiles = []
73
+
74
+ files.append(("request", (None, json.dumps( self.request.to_dict()).encode(), "application/json")))
75
+
76
+
77
+
78
+ if not isinstance(self.file, Unset):
79
+ files.append(("file", self.file.to_tuple()))
80
+
81
+
82
+
83
+
84
+ for prop_name, prop in self.additional_properties.items():
85
+ files.append((prop_name, (None, str(prop).encode(), "text/plain")))
86
+
87
+
88
+
89
+ return files
90
+
91
+
92
+ @classmethod
93
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
94
+ from ..models.extract_request import ExtractRequest
95
+ d = dict(src_dict)
96
+ request = ExtractRequest.from_dict(d.pop("request"))
97
+
98
+
99
+
100
+
101
+ _file = d.pop("file", UNSET)
102
+ file: File | Unset
103
+ if isinstance(_file, Unset):
104
+ file = UNSET
105
+ else:
106
+ file = File(
107
+ payload = BytesIO(_file)
108
+ )
109
+
110
+
111
+
112
+
113
+ extract_async_body = cls(
114
+ request=request,
115
+ file=file,
116
+ )
117
+
118
+
119
+ extract_async_body.additional_properties = d
120
+ return extract_async_body
121
+
122
+ @property
123
+ def additional_keys(self) -> list[str]:
124
+ return list(self.additional_properties.keys())
125
+
126
+ def __getitem__(self, key: str) -> Any:
127
+ return self.additional_properties[key]
128
+
129
+ def __setitem__(self, key: str, value: Any) -> None:
130
+ self.additional_properties[key] = value
131
+
132
+ def __delitem__(self, key: str) -> None:
133
+ del self.additional_properties[key]
134
+
135
+ def __contains__(self, key: str) -> bool:
136
+ return key in self.additional_properties
@@ -0,0 +1,143 @@
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
+ import json
9
+ from .. import types
10
+
11
+ from ..types import UNSET, Unset
12
+
13
+ from ..types import File, FileTypes
14
+ from ..types import UNSET, Unset
15
+ from io import BytesIO
16
+ from typing import cast
17
+
18
+ if TYPE_CHECKING:
19
+ from ..models.extract_batch_request import ExtractBatchRequest
20
+
21
+
22
+
23
+
24
+
25
+ T = TypeVar("T", bound="ExtractBatchBody")
26
+
27
+
28
+
29
+ @_attrs_define
30
+ class ExtractBatchBody:
31
+ """
32
+ Attributes:
33
+ request (ExtractBatchRequest):
34
+ files (list[File] | Unset): Ordered uploaded files referenced by `file_index` in the batch request. Each file
35
+ is limited to 50 MiB and total multipart body content is limited to 100 MiB.
36
+ Omit when every batch item supplies `file_id` instead.
37
+ """
38
+
39
+ request: ExtractBatchRequest
40
+ files: list[File] | Unset = UNSET
41
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
42
+
43
+
44
+
45
+
46
+
47
+ def to_dict(self) -> dict[str, Any]:
48
+ from ..models.extract_batch_request import ExtractBatchRequest
49
+ request = self.request.to_dict()
50
+
51
+ files: list[FileTypes] | Unset = UNSET
52
+ if not isinstance(self.files, Unset):
53
+ files = []
54
+ for files_item_data in self.files:
55
+ files_item = files_item_data.to_tuple()
56
+
57
+ files.append(files_item)
58
+
59
+
60
+
61
+
62
+ field_dict: dict[str, Any] = {}
63
+ field_dict.update(self.additional_properties)
64
+ field_dict.update({
65
+ "request": request,
66
+ })
67
+ if files is not UNSET:
68
+ field_dict["files"] = files
69
+
70
+ return field_dict
71
+
72
+
73
+ def to_multipart(self) -> types.RequestFiles:
74
+ from ..models.extract_batch_request import ExtractBatchRequest
75
+ files: types.RequestFiles = []
76
+
77
+ files.append(("request", (None, json.dumps( self.request.to_dict()).encode(), "application/json")))
78
+
79
+
80
+
81
+ if not isinstance(self.files, Unset):
82
+ for files_item_element in self.files:
83
+ files.append(("files", files_item_element.to_tuple()))
84
+
85
+
86
+
87
+
88
+
89
+ for prop_name, prop in self.additional_properties.items():
90
+ files.append((prop_name, (None, str(prop).encode(), "text/plain")))
91
+
92
+
93
+
94
+ return files
95
+
96
+
97
+ @classmethod
98
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
99
+ from ..models.extract_batch_request import ExtractBatchRequest
100
+ d = dict(src_dict)
101
+ request = ExtractBatchRequest.from_dict(d.pop("request"))
102
+
103
+
104
+
105
+
106
+ _files = d.pop("files", UNSET)
107
+ files: list[File] | Unset = UNSET
108
+ if _files is not UNSET:
109
+ files = []
110
+ for files_item_data in _files:
111
+ files_item = File(
112
+ payload = BytesIO(files_item_data)
113
+ )
114
+
115
+
116
+
117
+ files.append(files_item)
118
+
119
+
120
+ extract_batch_body = cls(
121
+ request=request,
122
+ files=files,
123
+ )
124
+
125
+
126
+ extract_batch_body.additional_properties = d
127
+ return extract_batch_body
128
+
129
+ @property
130
+ def additional_keys(self) -> list[str]:
131
+ return list(self.additional_properties.keys())
132
+
133
+ def __getitem__(self, key: str) -> Any:
134
+ return self.additional_properties[key]
135
+
136
+ def __setitem__(self, key: str, value: Any) -> None:
137
+ self.additional_properties[key] = value
138
+
139
+ def __delitem__(self, key: str) -> None:
140
+ del self.additional_properties[key]
141
+
142
+ def __contains__(self, key: str) -> bool:
143
+ return key in self.additional_properties
@@ -0,0 +1,207 @@
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.extract_batch_item_grounding import ExtractBatchItemGrounding
12
+ from ..types import UNSET, Unset
13
+ from typing import cast
14
+
15
+ if TYPE_CHECKING:
16
+ from ..models.extract_batch_item_llm_options import ExtractBatchItemLlmOptions
17
+ from ..models.extract_batch_item_ocr_options import ExtractBatchItemOcrOptions
18
+ from ..models.extract_batch_item_schema import ExtractBatchItemSchema
19
+
20
+
21
+
22
+
23
+
24
+ T = TypeVar("T", bound="ExtractBatchItem")
25
+
26
+
27
+
28
+ @_attrs_define
29
+ class ExtractBatchItem:
30
+ """ Per-item file-backed extract config with the same `pipeline_id` XOR inline rules as
31
+ single extract. Sources are `file_index` or `file_id`; `parse_job_id` is not supported
32
+ in batch. No parent-level batch pipeline in v1.
33
+
34
+ Attributes:
35
+ client_item_id (str):
36
+ file_index (int | Unset): Zero-based index into the uploaded `files` array. Exactly one of `file_index` or
37
+ `file_id` is required per item.
38
+ file_id (str | Unset):
39
+ pipeline_id (str | Unset): Saved extraction pipeline id; mutually exclusive with inline extract fields.
40
+ ocr_model (str | Unset):
41
+ ocr_options (ExtractBatchItemOcrOptions | Unset):
42
+ llm_model (str | Unset):
43
+ llm_options (ExtractBatchItemLlmOptions | Unset):
44
+ schema (ExtractBatchItemSchema | Unset):
45
+ repair_attempts (int | Unset):
46
+ grounding (ExtractBatchItemGrounding | Unset): Optional field grounding mode. Defaults to `none`. `field` opts
47
+ into verified
48
+ per-leaf citations and is part of idempotency identity.
49
+ """
50
+
51
+ client_item_id: str
52
+ file_index: int | Unset = UNSET
53
+ file_id: str | Unset = UNSET
54
+ pipeline_id: str | Unset = UNSET
55
+ ocr_model: str | Unset = UNSET
56
+ ocr_options: ExtractBatchItemOcrOptions | Unset = UNSET
57
+ llm_model: str | Unset = UNSET
58
+ llm_options: ExtractBatchItemLlmOptions | Unset = UNSET
59
+ schema: ExtractBatchItemSchema | Unset = UNSET
60
+ repair_attempts: int | Unset = UNSET
61
+ grounding: ExtractBatchItemGrounding | Unset = UNSET
62
+
63
+
64
+
65
+
66
+
67
+ def to_dict(self) -> dict[str, Any]:
68
+ from ..models.extract_batch_item_llm_options import ExtractBatchItemLlmOptions
69
+ from ..models.extract_batch_item_ocr_options import ExtractBatchItemOcrOptions
70
+ from ..models.extract_batch_item_schema import ExtractBatchItemSchema
71
+ client_item_id = self.client_item_id
72
+
73
+ file_index = self.file_index
74
+
75
+ file_id = self.file_id
76
+
77
+ pipeline_id = self.pipeline_id
78
+
79
+ ocr_model = self.ocr_model
80
+
81
+ ocr_options: dict[str, Any] | Unset = UNSET
82
+ if not isinstance(self.ocr_options, Unset):
83
+ ocr_options = self.ocr_options.to_dict()
84
+
85
+ llm_model = self.llm_model
86
+
87
+ llm_options: dict[str, Any] | Unset = UNSET
88
+ if not isinstance(self.llm_options, Unset):
89
+ llm_options = self.llm_options.to_dict()
90
+
91
+ schema: dict[str, Any] | Unset = UNSET
92
+ if not isinstance(self.schema, Unset):
93
+ schema = self.schema.to_dict()
94
+
95
+ repair_attempts = self.repair_attempts
96
+
97
+ grounding: str | Unset = UNSET
98
+ if not isinstance(self.grounding, Unset):
99
+ grounding = self.grounding.value
100
+
101
+
102
+
103
+ field_dict: dict[str, Any] = {}
104
+
105
+ field_dict.update({
106
+ "client_item_id": client_item_id,
107
+ })
108
+ if file_index is not UNSET:
109
+ field_dict["file_index"] = file_index
110
+ if file_id is not UNSET:
111
+ field_dict["file_id"] = file_id
112
+ if pipeline_id is not UNSET:
113
+ field_dict["pipeline_id"] = pipeline_id
114
+ if ocr_model is not UNSET:
115
+ field_dict["ocr_model"] = ocr_model
116
+ if ocr_options is not UNSET:
117
+ field_dict["ocr_options"] = ocr_options
118
+ if llm_model is not UNSET:
119
+ field_dict["llm_model"] = llm_model
120
+ if llm_options is not UNSET:
121
+ field_dict["llm_options"] = llm_options
122
+ if schema is not UNSET:
123
+ field_dict["schema"] = schema
124
+ if repair_attempts is not UNSET:
125
+ field_dict["repair_attempts"] = repair_attempts
126
+ if grounding is not UNSET:
127
+ field_dict["grounding"] = grounding
128
+
129
+ return field_dict
130
+
131
+
132
+
133
+ @classmethod
134
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
135
+ from ..models.extract_batch_item_llm_options import ExtractBatchItemLlmOptions
136
+ from ..models.extract_batch_item_ocr_options import ExtractBatchItemOcrOptions
137
+ from ..models.extract_batch_item_schema import ExtractBatchItemSchema
138
+ d = dict(src_dict)
139
+ client_item_id = d.pop("client_item_id")
140
+
141
+ file_index = d.pop("file_index", UNSET)
142
+
143
+ file_id = d.pop("file_id", UNSET)
144
+
145
+ pipeline_id = d.pop("pipeline_id", UNSET)
146
+
147
+ ocr_model = d.pop("ocr_model", UNSET)
148
+
149
+ _ocr_options = d.pop("ocr_options", UNSET)
150
+ ocr_options: ExtractBatchItemOcrOptions | Unset
151
+ if isinstance(_ocr_options, Unset):
152
+ ocr_options = UNSET
153
+ else:
154
+ ocr_options = ExtractBatchItemOcrOptions.from_dict(_ocr_options)
155
+
156
+
157
+
158
+
159
+ llm_model = d.pop("llm_model", UNSET)
160
+
161
+ _llm_options = d.pop("llm_options", UNSET)
162
+ llm_options: ExtractBatchItemLlmOptions | Unset
163
+ if isinstance(_llm_options, Unset):
164
+ llm_options = UNSET
165
+ else:
166
+ llm_options = ExtractBatchItemLlmOptions.from_dict(_llm_options)
167
+
168
+
169
+
170
+
171
+ _schema = d.pop("schema", UNSET)
172
+ schema: ExtractBatchItemSchema | Unset
173
+ if isinstance(_schema, Unset):
174
+ schema = UNSET
175
+ else:
176
+ schema = ExtractBatchItemSchema.from_dict(_schema)
177
+
178
+
179
+
180
+
181
+ repair_attempts = d.pop("repair_attempts", UNSET)
182
+
183
+ _grounding = d.pop("grounding", UNSET)
184
+ grounding: ExtractBatchItemGrounding | Unset
185
+ if isinstance(_grounding, Unset):
186
+ grounding = UNSET
187
+ else:
188
+ grounding = ExtractBatchItemGrounding(_grounding)
189
+
190
+
191
+
192
+
193
+ extract_batch_item = cls(
194
+ client_item_id=client_item_id,
195
+ file_index=file_index,
196
+ file_id=file_id,
197
+ pipeline_id=pipeline_id,
198
+ ocr_model=ocr_model,
199
+ ocr_options=ocr_options,
200
+ llm_model=llm_model,
201
+ llm_options=llm_options,
202
+ schema=schema,
203
+ repair_attempts=repair_attempts,
204
+ grounding=grounding,
205
+ )
206
+
207
+ return extract_batch_item
@@ -0,0 +1,8 @@
1
+ from enum import Enum
2
+
3
+ class ExtractBatchItemGrounding(str, Enum):
4
+ FIELD = "field"
5
+ NONE = "none"
6
+
7
+ def __str__(self) -> str:
8
+ return str(self.value)
@@ -0,0 +1,84 @@
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.extract_batch_item_llm_options_reasoning_effort_type_1 import ExtractBatchItemLlmOptionsReasoningEffortType1
12
+ from ..types import UNSET, Unset
13
+ from typing import cast
14
+ from typing import Literal, cast
15
+
16
+
17
+
18
+
19
+
20
+
21
+ T = TypeVar("T", bound="ExtractBatchItemLlmOptions")
22
+
23
+
24
+
25
+ @_attrs_define
26
+ class ExtractBatchItemLlmOptions:
27
+ """
28
+ Attributes:
29
+ reasoning_effort (ExtractBatchItemLlmOptionsReasoningEffortType1 | Literal['auto'] | Unset):
30
+ """
31
+
32
+ reasoning_effort: ExtractBatchItemLlmOptionsReasoningEffortType1 | Literal['auto'] | Unset = UNSET
33
+
34
+
35
+
36
+
37
+
38
+ def to_dict(self) -> dict[str, Any]:
39
+ reasoning_effort: Literal['auto'] | str | Unset
40
+ if isinstance(self.reasoning_effort, Unset):
41
+ reasoning_effort = UNSET
42
+ elif isinstance(self.reasoning_effort, ExtractBatchItemLlmOptionsReasoningEffortType1):
43
+ reasoning_effort = self.reasoning_effort.value
44
+ else:
45
+ reasoning_effort = self.reasoning_effort
46
+
47
+
48
+ field_dict: dict[str, Any] = {}
49
+
50
+ field_dict.update({
51
+ })
52
+ if reasoning_effort is not UNSET:
53
+ field_dict["reasoning_effort"] = reasoning_effort
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
+ def _parse_reasoning_effort(data: object) -> ExtractBatchItemLlmOptionsReasoningEffortType1 | Literal['auto'] | Unset:
63
+ if isinstance(data, Unset):
64
+ return data
65
+ reasoning_effort_type_0 = cast(Literal['auto'] , data)
66
+ if reasoning_effort_type_0 != 'auto':
67
+ raise ValueError(f"reasoning_effort_type_0 must match const 'auto', got '{reasoning_effort_type_0}'")
68
+ return reasoning_effort_type_0
69
+ if not isinstance(data, str):
70
+ raise TypeError()
71
+ reasoning_effort_type_1 = ExtractBatchItemLlmOptionsReasoningEffortType1(data)
72
+
73
+
74
+
75
+ return reasoning_effort_type_1
76
+
77
+ reasoning_effort = _parse_reasoning_effort(d.pop("reasoning_effort", UNSET))
78
+
79
+
80
+ extract_batch_item_llm_options = cls(
81
+ reasoning_effort=reasoning_effort,
82
+ )
83
+
84
+ return extract_batch_item_llm_options
@@ -0,0 +1,13 @@
1
+ from enum import Enum
2
+
3
+ class ExtractBatchItemLlmOptionsReasoningEffortType1(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,78 @@
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="ExtractBatchItemOcrOptions")
19
+
20
+
21
+
22
+ @_attrs_define
23
+ class ExtractBatchItemOcrOptions:
24
+ """
25
+ Attributes:
26
+ image_block_ocr (bool | Unset):
27
+ chart_recognition (bool | Unset):
28
+ merge_layout_blocks (bool | Unset): Merge nearby cross-column or staggered text regions before recognition.
29
+ Defaults to false to preserve one-to-one text and bounding-box alignment.
30
+ """
31
+
32
+ image_block_ocr: bool | Unset = UNSET
33
+ chart_recognition: bool | Unset = UNSET
34
+ merge_layout_blocks: bool | Unset = UNSET
35
+
36
+
37
+
38
+
39
+
40
+ def to_dict(self) -> dict[str, Any]:
41
+ image_block_ocr = self.image_block_ocr
42
+
43
+ chart_recognition = self.chart_recognition
44
+
45
+ merge_layout_blocks = self.merge_layout_blocks
46
+
47
+
48
+ field_dict: dict[str, Any] = {}
49
+
50
+ field_dict.update({
51
+ })
52
+ if image_block_ocr is not UNSET:
53
+ field_dict["image_block_ocr"] = image_block_ocr
54
+ if chart_recognition is not UNSET:
55
+ field_dict["chart_recognition"] = chart_recognition
56
+ if merge_layout_blocks is not UNSET:
57
+ field_dict["merge_layout_blocks"] = merge_layout_blocks
58
+
59
+ return field_dict
60
+
61
+
62
+
63
+ @classmethod
64
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
65
+ d = dict(src_dict)
66
+ image_block_ocr = d.pop("image_block_ocr", UNSET)
67
+
68
+ chart_recognition = d.pop("chart_recognition", UNSET)
69
+
70
+ merge_layout_blocks = d.pop("merge_layout_blocks", UNSET)
71
+
72
+ extract_batch_item_ocr_options = cls(
73
+ image_block_ocr=image_block_ocr,
74
+ chart_recognition=chart_recognition,
75
+ merge_layout_blocks=merge_layout_blocks,
76
+ )
77
+
78
+ return extract_batch_item_ocr_options