retab 0.0.35__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 (111) hide show
  1. retab-0.0.35.dist-info/METADATA +417 -0
  2. retab-0.0.35.dist-info/RECORD +111 -0
  3. retab-0.0.35.dist-info/WHEEL +5 -0
  4. retab-0.0.35.dist-info/top_level.txt +1 -0
  5. uiform/__init__.py +4 -0
  6. uiform/_resource.py +28 -0
  7. uiform/_utils/__init__.py +0 -0
  8. uiform/_utils/ai_models.py +100 -0
  9. uiform/_utils/benchmarking copy.py +588 -0
  10. uiform/_utils/benchmarking.py +485 -0
  11. uiform/_utils/chat.py +332 -0
  12. uiform/_utils/display.py +443 -0
  13. uiform/_utils/json_schema.py +2161 -0
  14. uiform/_utils/mime.py +168 -0
  15. uiform/_utils/responses.py +163 -0
  16. uiform/_utils/stream_context_managers.py +52 -0
  17. uiform/_utils/usage/__init__.py +0 -0
  18. uiform/_utils/usage/usage.py +300 -0
  19. uiform/client.py +701 -0
  20. uiform/py.typed +0 -0
  21. uiform/resources/__init__.py +0 -0
  22. uiform/resources/consensus/__init__.py +3 -0
  23. uiform/resources/consensus/client.py +114 -0
  24. uiform/resources/consensus/completions.py +252 -0
  25. uiform/resources/consensus/completions_stream.py +278 -0
  26. uiform/resources/consensus/responses.py +325 -0
  27. uiform/resources/consensus/responses_stream.py +373 -0
  28. uiform/resources/deployments/__init__.py +9 -0
  29. uiform/resources/deployments/client.py +78 -0
  30. uiform/resources/deployments/endpoints.py +322 -0
  31. uiform/resources/deployments/links.py +452 -0
  32. uiform/resources/deployments/logs.py +211 -0
  33. uiform/resources/deployments/mailboxes.py +496 -0
  34. uiform/resources/deployments/outlook.py +531 -0
  35. uiform/resources/deployments/tests.py +158 -0
  36. uiform/resources/documents/__init__.py +3 -0
  37. uiform/resources/documents/client.py +255 -0
  38. uiform/resources/documents/extractions.py +441 -0
  39. uiform/resources/evals.py +812 -0
  40. uiform/resources/files.py +24 -0
  41. uiform/resources/finetuning.py +62 -0
  42. uiform/resources/jsonlUtils.py +1046 -0
  43. uiform/resources/models.py +45 -0
  44. uiform/resources/openai_example.py +22 -0
  45. uiform/resources/processors/__init__.py +3 -0
  46. uiform/resources/processors/automations/__init__.py +9 -0
  47. uiform/resources/processors/automations/client.py +78 -0
  48. uiform/resources/processors/automations/endpoints.py +317 -0
  49. uiform/resources/processors/automations/links.py +356 -0
  50. uiform/resources/processors/automations/logs.py +211 -0
  51. uiform/resources/processors/automations/mailboxes.py +435 -0
  52. uiform/resources/processors/automations/outlook.py +444 -0
  53. uiform/resources/processors/automations/tests.py +158 -0
  54. uiform/resources/processors/client.py +474 -0
  55. uiform/resources/prompt_optimization.py +76 -0
  56. uiform/resources/schemas.py +369 -0
  57. uiform/resources/secrets/__init__.py +9 -0
  58. uiform/resources/secrets/client.py +20 -0
  59. uiform/resources/secrets/external_api_keys.py +109 -0
  60. uiform/resources/secrets/webhook.py +62 -0
  61. uiform/resources/usage.py +271 -0
  62. uiform/types/__init__.py +0 -0
  63. uiform/types/ai_models.py +645 -0
  64. uiform/types/automations/__init__.py +0 -0
  65. uiform/types/automations/cron.py +58 -0
  66. uiform/types/automations/endpoints.py +21 -0
  67. uiform/types/automations/links.py +28 -0
  68. uiform/types/automations/mailboxes.py +60 -0
  69. uiform/types/automations/outlook.py +68 -0
  70. uiform/types/automations/webhooks.py +21 -0
  71. uiform/types/chat.py +8 -0
  72. uiform/types/completions.py +93 -0
  73. uiform/types/consensus.py +10 -0
  74. uiform/types/db/__init__.py +0 -0
  75. uiform/types/db/annotations.py +24 -0
  76. uiform/types/db/files.py +36 -0
  77. uiform/types/deployments/__init__.py +0 -0
  78. uiform/types/deployments/cron.py +59 -0
  79. uiform/types/deployments/endpoints.py +28 -0
  80. uiform/types/deployments/links.py +36 -0
  81. uiform/types/deployments/mailboxes.py +67 -0
  82. uiform/types/deployments/outlook.py +76 -0
  83. uiform/types/deployments/webhooks.py +21 -0
  84. uiform/types/documents/__init__.py +0 -0
  85. uiform/types/documents/correct_orientation.py +13 -0
  86. uiform/types/documents/create_messages.py +226 -0
  87. uiform/types/documents/extractions.py +297 -0
  88. uiform/types/evals.py +207 -0
  89. uiform/types/events.py +76 -0
  90. uiform/types/extractions.py +85 -0
  91. uiform/types/jobs/__init__.py +0 -0
  92. uiform/types/jobs/base.py +150 -0
  93. uiform/types/jobs/batch_annotation.py +22 -0
  94. uiform/types/jobs/evaluation.py +133 -0
  95. uiform/types/jobs/finetune.py +6 -0
  96. uiform/types/jobs/prompt_optimization.py +41 -0
  97. uiform/types/jobs/webcrawl.py +6 -0
  98. uiform/types/logs.py +231 -0
  99. uiform/types/mime.py +257 -0
  100. uiform/types/modalities.py +68 -0
  101. uiform/types/pagination.py +6 -0
  102. uiform/types/schemas/__init__.py +0 -0
  103. uiform/types/schemas/enhance.py +53 -0
  104. uiform/types/schemas/evaluate.py +55 -0
  105. uiform/types/schemas/generate.py +32 -0
  106. uiform/types/schemas/layout.py +58 -0
  107. uiform/types/schemas/object.py +631 -0
  108. uiform/types/schemas/templates.py +107 -0
  109. uiform/types/secrets/__init__.py +0 -0
  110. uiform/types/secrets/external_api_keys.py +22 -0
  111. uiform/types/standards.py +39 -0
@@ -0,0 +1,255 @@
1
+ from io import IOBase
2
+ from pathlib import Path
3
+ from typing import Any, Literal
4
+
5
+ import PIL.Image
6
+ from pydantic import HttpUrl
7
+
8
+ from ..._resource import AsyncAPIResource, SyncAPIResource
9
+ from ..._utils.mime import convert_mime_data_to_pil_image, prepare_mime_document
10
+ from ...types.documents.create_messages import DocumentCreateMessageRequest, DocumentMessage, DocumentCreateInputRequest
11
+ from ...types.mime import MIMEData
12
+ from ...types.modalities import Modality
13
+ from ...types.standards import PreparedRequest
14
+ from .extractions import AsyncExtractions, Extractions
15
+ from ..._utils.json_schema import load_json_schema
16
+
17
+
18
+ class BaseDocumentsMixin:
19
+ def _prepare_create_messages(
20
+ self,
21
+ document: Path | str | IOBase | MIMEData | PIL.Image.Image | HttpUrl,
22
+ modality: Modality = "native",
23
+ image_resolution_dpi: int | None = None,
24
+ browser_canvas: Literal['A3', 'A4', 'A5'] | None = None,
25
+ idempotency_key: str | None = None,
26
+ ) -> PreparedRequest:
27
+ mime_document = prepare_mime_document(document)
28
+ data: dict[str, Any] = {
29
+ "document": mime_document.model_dump(),
30
+ "modality": modality,
31
+ }
32
+ if image_resolution_dpi:
33
+ data["image_resolution_dpi"] = image_resolution_dpi
34
+ if browser_canvas:
35
+ data["browser_canvas"] = browser_canvas
36
+
37
+ loading_request = DocumentCreateMessageRequest.model_validate(data)
38
+ return PreparedRequest(method="POST", url="/v1/documents/create_messages", data=loading_request.model_dump(), idempotency_key=idempotency_key)
39
+
40
+ def _prepare_create_inputs(
41
+ self,
42
+ document: Path | str | IOBase | MIMEData | PIL.Image.Image | HttpUrl,
43
+ json_schema: dict[str, Any] | Path | str,
44
+ modality: Modality = "native",
45
+ image_resolution_dpi: int | None = None,
46
+ browser_canvas: Literal['A3', 'A4', 'A5'] | None = None,
47
+ idempotency_key: str | None = None,
48
+ ) -> PreparedRequest:
49
+ mime_document = prepare_mime_document(document)
50
+ loaded_schema = load_json_schema(json_schema)
51
+
52
+ data: dict[str, Any] = {
53
+ "document": mime_document.model_dump(),
54
+ "modality": modality,
55
+ "json_schema": loaded_schema,
56
+ }
57
+ if image_resolution_dpi:
58
+ data["image_resolution_dpi"] = image_resolution_dpi
59
+ if browser_canvas:
60
+ data["browser_canvas"] = browser_canvas
61
+
62
+ loading_request = DocumentCreateInputRequest.model_validate(data)
63
+ return PreparedRequest(method="POST", url="/v1/documents/create_inputs", data=loading_request.model_dump(), idempotency_key=idempotency_key)
64
+
65
+ def _prepare_correct_image_orientation(self, document: Path | str | IOBase | MIMEData | PIL.Image.Image) -> PreparedRequest:
66
+ mime_document = prepare_mime_document(document)
67
+
68
+ if not mime_document.mime_type.startswith("image/"):
69
+ raise ValueError("Image is not a valid image")
70
+
71
+ return PreparedRequest(
72
+ method="POST",
73
+ url="/v1/documents/correct_image_orientation",
74
+ data={"document": mime_document.model_dump()},
75
+ )
76
+
77
+
78
+ class Documents(SyncAPIResource, BaseDocumentsMixin):
79
+ """Documents API wrapper"""
80
+
81
+ def __init__(self, client: Any) -> None:
82
+ super().__init__(client=client)
83
+ self.extractions = Extractions(client=client)
84
+ # self.batch = Batch(client=client)
85
+
86
+ def correct_image_orientation(self, document: Path | str | IOBase | MIMEData | PIL.Image.Image) -> PIL.Image.Image:
87
+ """Corrects the orientation of an image using the UiForm API.
88
+
89
+ This method takes an image in various formats and returns a PIL Image with corrected orientation.
90
+ Useful for handling images from mobile devices or cameras that may have incorrect EXIF orientation.
91
+
92
+ Args:
93
+ image: The input image to correct. Can be:
94
+ - A file path (Path or str)
95
+ - A file-like object (IOBase)
96
+ - A MIMEData object
97
+ - A PIL Image object
98
+
99
+ Returns:
100
+ PIL.Image.Image: The orientation-corrected image as a PIL Image object
101
+
102
+ Raises:
103
+ ValueError: If the input is not a valid image
104
+ UiformAPIError: If the API request fails
105
+ """
106
+ request = self._prepare_correct_image_orientation(document)
107
+ response = self._client._prepared_request(request)
108
+ mime_response = MIMEData.model_validate(response['document'])
109
+ return convert_mime_data_to_pil_image(mime_response)
110
+
111
+ def create_messages(
112
+ self,
113
+ document: Path | str | IOBase | MIMEData | PIL.Image.Image | HttpUrl,
114
+ modality: Modality = "native",
115
+ image_resolution_dpi: int | None = None,
116
+ browser_canvas: Literal['A3', 'A4', 'A5'] | None = None,
117
+ idempotency_key: str | None = None,
118
+ ) -> DocumentMessage:
119
+ """
120
+ Create document messages from a file using the UiForm API.
121
+
122
+ Args:
123
+ document: The document to process. Can be a file path (Path or str) or a file-like object.
124
+ modality: The processing modality to use. Defaults to "native".
125
+ image_resolution_dpi: Optional image resolution DPI.
126
+ browser_canvas: Optional browser canvas size.
127
+ idempotency_key: Optional idempotency key for the request
128
+ Returns:
129
+ DocumentMessage: The processed document message containing extracted content.
130
+
131
+ Raises:
132
+ UiformAPIError: If the API request fails.
133
+ """
134
+ request = self._prepare_create_messages(document, modality, image_resolution_dpi, browser_canvas, idempotency_key)
135
+ response = self._client._prepared_request(request)
136
+ return DocumentMessage.model_validate(response)
137
+
138
+ def create_inputs(
139
+ self,
140
+ document: Path | str | IOBase | MIMEData | PIL.Image.Image | HttpUrl,
141
+ json_schema: dict[str, Any] | Path | str,
142
+ modality: Modality = "native",
143
+ image_resolution_dpi: int | None = None,
144
+ browser_canvas: Literal['A3', 'A4', 'A5'] | None = None,
145
+ idempotency_key: str | None = None,
146
+ ) -> DocumentMessage:
147
+ """
148
+ Create document inputs (messages with schema) from a file using the UiForm API.
149
+
150
+ Args:
151
+ document: The document to process. Can be a file path (Path or str), file-like object, MIMEData, PIL Image, or URL.
152
+ json_schema: The JSON schema to use for structuring the document content.
153
+ modality: The processing modality to use. Defaults to "native".
154
+ image_resolution_dpi: Optional image resolution DPI.
155
+ browser_canvas: Optional browser canvas size.
156
+ idempotency_key: Optional idempotency key for the request
157
+ Returns:
158
+ DocumentMessage: The processed document message containing extracted content with schema context.
159
+
160
+ Raises:
161
+ UiformAPIError: If the API request fails.
162
+ """
163
+ request = self._prepare_create_inputs(document, json_schema, modality, image_resolution_dpi, browser_canvas, idempotency_key)
164
+ response = self._client._prepared_request(request)
165
+ return DocumentMessage.model_validate(response)
166
+
167
+
168
+ class AsyncDocuments(AsyncAPIResource, BaseDocumentsMixin):
169
+ """Documents API wrapper for asynchronous usage."""
170
+
171
+ def __init__(self, client: Any) -> None:
172
+ super().__init__(client=client)
173
+ self.extractions = AsyncExtractions(client=client)
174
+
175
+ async def create_messages(
176
+ self,
177
+ document: Path | str | IOBase | MIMEData | PIL.Image.Image,
178
+ modality: Modality = "native",
179
+ image_resolution_dpi: int | None = None,
180
+ browser_canvas: Literal['A3', 'A4', 'A5'] | None = None,
181
+ idempotency_key: str | None = None,
182
+ ) -> DocumentMessage:
183
+ """
184
+ Create document messages from a file using the UiForm API asynchronously.
185
+
186
+ Args:
187
+ document: The document to process. Can be a file path (Path or str) or a file-like object.
188
+ modality: The processing modality to use. Defaults to "native".
189
+ idempotency_key: Idempotency key for request
190
+ Returns:
191
+ DocumentMessage: The processed document message containing extracted content.
192
+
193
+ Raises:
194
+ UiformAPIError: If the API request fails.
195
+ """
196
+ request = self._prepare_create_messages(document, modality, image_resolution_dpi, browser_canvas, idempotency_key)
197
+ assert request.data is not None
198
+ print(request.data.keys())
199
+ print(request.data)
200
+ response = await self._client._prepared_request(request)
201
+ return DocumentMessage.model_validate(response)
202
+
203
+ async def create_inputs(
204
+ self,
205
+ document: Path | str | IOBase | MIMEData | PIL.Image.Image | HttpUrl,
206
+ json_schema: dict[str, Any] | Path | str,
207
+ modality: Modality = "native",
208
+ image_resolution_dpi: int | None = None,
209
+ browser_canvas: Literal['A3', 'A4', 'A5'] | None = None,
210
+ idempotency_key: str | None = None,
211
+ ) -> DocumentMessage:
212
+ """
213
+ Create document inputs (messages with schema) from a file using the UiForm API asynchronously.
214
+
215
+ Args:
216
+ document: The document to process. Can be a file path (Path or str), file-like object, MIMEData, PIL Image, or URL.
217
+ json_schema: The JSON schema to use for structuring the document content.
218
+ modality: The processing modality to use. Defaults to "native".
219
+ image_resolution_dpi: Optional image resolution DPI.
220
+ browser_canvas: Optional browser canvas size.
221
+ idempotency_key: Idempotency key for request
222
+ Returns:
223
+ DocumentMessage: The processed document message containing extracted content with schema context.
224
+
225
+ Raises:
226
+ UiformAPIError: If the API request fails.
227
+ """
228
+ request = self._prepare_create_inputs(document, json_schema, modality, image_resolution_dpi, browser_canvas, idempotency_key)
229
+ response = await self._client._prepared_request(request)
230
+ return DocumentMessage.model_validate(response)
231
+
232
+ async def correct_image_orientation(self, document: Path | str | IOBase | MIMEData | PIL.Image.Image) -> PIL.Image.Image:
233
+ """Corrects the orientation of an image using the UiForm API asynchronously.
234
+
235
+ This method takes an image in various formats and returns a PIL Image with corrected orientation.
236
+ Useful for handling images from mobile devices or cameras that may have incorrect EXIF orientation.
237
+
238
+ Args:
239
+ image: The input image to correct. Can be:
240
+ - A file path (Path or str)
241
+ - A file-like object (IOBase)
242
+ - A MIMEData object
243
+ - A PIL Image object
244
+
245
+ Returns:
246
+ PIL.Image.Image: The orientation-corrected image as a PIL Image object
247
+
248
+ Raises:
249
+ ValueError: If the input is not a valid image
250
+ UiformAPIError: If the API request fails
251
+ """
252
+ request = self._prepare_correct_image_orientation(document)
253
+ response = await self._client._prepared_request(request)
254
+ mime_response = MIMEData.model_validate(response['document'])
255
+ return convert_mime_data_to_pil_image(mime_response)