retab 0.0.35__py3-none-any.whl → 0.0.37__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 (134) hide show
  1. {uiform → retab}/_utils/ai_models.py +2 -2
  2. {uiform → retab}/_utils/benchmarking.py +15 -16
  3. {uiform → retab}/_utils/chat.py +9 -14
  4. {uiform → retab}/_utils/display.py +0 -3
  5. {uiform → retab}/_utils/json_schema.py +9 -14
  6. {uiform → retab}/_utils/mime.py +11 -14
  7. {uiform → retab}/_utils/responses.py +9 -3
  8. {uiform → retab}/_utils/stream_context_managers.py +1 -1
  9. {uiform → retab}/_utils/usage/usage.py +28 -28
  10. {uiform → retab}/client.py +32 -31
  11. {uiform → retab}/resources/consensus/client.py +17 -36
  12. {uiform → retab}/resources/consensus/completions.py +24 -47
  13. {uiform → retab}/resources/consensus/completions_stream.py +26 -38
  14. {uiform → retab}/resources/consensus/responses.py +31 -80
  15. {uiform → retab}/resources/consensus/responses_stream.py +31 -79
  16. {uiform → retab}/resources/documents/client.py +59 -45
  17. {uiform → retab}/resources/documents/extractions.py +181 -90
  18. {uiform → retab}/resources/evals.py +56 -43
  19. retab/resources/evaluations/__init__.py +3 -0
  20. retab/resources/evaluations/client.py +301 -0
  21. retab/resources/evaluations/documents.py +233 -0
  22. retab/resources/evaluations/iterations.py +452 -0
  23. {uiform → retab}/resources/files.py +2 -2
  24. {uiform → retab}/resources/jsonlUtils.py +220 -216
  25. retab/resources/models.py +73 -0
  26. retab/resources/processors/automations/client.py +244 -0
  27. {uiform → retab}/resources/processors/automations/endpoints.py +77 -118
  28. retab/resources/processors/automations/links.py +294 -0
  29. {uiform → retab}/resources/processors/automations/logs.py +30 -19
  30. {uiform → retab}/resources/processors/automations/mailboxes.py +136 -174
  31. retab/resources/processors/automations/outlook.py +337 -0
  32. {uiform → retab}/resources/processors/automations/tests.py +22 -25
  33. {uiform → retab}/resources/processors/client.py +179 -164
  34. {uiform → retab}/resources/schemas.py +78 -66
  35. {uiform → retab}/resources/secrets/external_api_keys.py +1 -5
  36. retab/resources/secrets/webhook.py +64 -0
  37. {uiform → retab}/resources/usage.py +39 -2
  38. {uiform → retab}/types/ai_models.py +13 -13
  39. {uiform → retab}/types/automations/cron.py +19 -12
  40. {uiform → retab}/types/automations/endpoints.py +7 -4
  41. {uiform → retab}/types/automations/links.py +7 -3
  42. {uiform → retab}/types/automations/mailboxes.py +9 -9
  43. {uiform → retab}/types/automations/outlook.py +15 -11
  44. retab/types/browser_canvas.py +3 -0
  45. {uiform → retab}/types/chat.py +2 -2
  46. {uiform → retab}/types/completions.py +9 -12
  47. retab/types/consensus.py +19 -0
  48. {uiform → retab}/types/db/annotations.py +3 -3
  49. {uiform → retab}/types/db/files.py +8 -6
  50. {uiform → retab}/types/documents/create_messages.py +18 -20
  51. {uiform → retab}/types/documents/extractions.py +69 -24
  52. {uiform → retab}/types/evals.py +5 -5
  53. retab/types/evaluations/__init__.py +31 -0
  54. retab/types/evaluations/documents.py +30 -0
  55. retab/types/evaluations/iterations.py +112 -0
  56. retab/types/evaluations/model.py +73 -0
  57. retab/types/events.py +79 -0
  58. {uiform → retab}/types/extractions.py +33 -10
  59. retab/types/inference_settings.py +15 -0
  60. retab/types/jobs/base.py +54 -0
  61. retab/types/jobs/batch_annotation.py +12 -0
  62. {uiform → retab}/types/jobs/evaluation.py +1 -2
  63. {uiform → retab}/types/logs.py +37 -34
  64. retab/types/metrics.py +32 -0
  65. {uiform → retab}/types/mime.py +22 -20
  66. {uiform → retab}/types/modalities.py +10 -10
  67. retab/types/predictions.py +19 -0
  68. {uiform → retab}/types/schemas/enhance.py +4 -2
  69. {uiform → retab}/types/schemas/evaluate.py +7 -4
  70. {uiform → retab}/types/schemas/generate.py +6 -3
  71. {uiform → retab}/types/schemas/layout.py +1 -1
  72. {uiform → retab}/types/schemas/object.py +13 -14
  73. {uiform → retab}/types/schemas/templates.py +1 -3
  74. {uiform → retab}/types/secrets/external_api_keys.py +0 -1
  75. {uiform → retab}/types/standards.py +18 -1
  76. {retab-0.0.35.dist-info → retab-0.0.37.dist-info}/METADATA +7 -6
  77. retab-0.0.37.dist-info/RECORD +107 -0
  78. retab-0.0.37.dist-info/top_level.txt +1 -0
  79. retab-0.0.35.dist-info/RECORD +0 -111
  80. retab-0.0.35.dist-info/top_level.txt +0 -1
  81. uiform/_utils/benchmarking copy.py +0 -588
  82. uiform/resources/deployments/__init__.py +0 -9
  83. uiform/resources/deployments/client.py +0 -78
  84. uiform/resources/deployments/endpoints.py +0 -322
  85. uiform/resources/deployments/links.py +0 -452
  86. uiform/resources/deployments/logs.py +0 -211
  87. uiform/resources/deployments/mailboxes.py +0 -496
  88. uiform/resources/deployments/outlook.py +0 -531
  89. uiform/resources/deployments/tests.py +0 -158
  90. uiform/resources/models.py +0 -45
  91. uiform/resources/processors/automations/client.py +0 -78
  92. uiform/resources/processors/automations/links.py +0 -356
  93. uiform/resources/processors/automations/outlook.py +0 -444
  94. uiform/resources/secrets/webhook.py +0 -62
  95. uiform/types/consensus.py +0 -10
  96. uiform/types/deployments/cron.py +0 -59
  97. uiform/types/deployments/endpoints.py +0 -28
  98. uiform/types/deployments/links.py +0 -36
  99. uiform/types/deployments/mailboxes.py +0 -67
  100. uiform/types/deployments/outlook.py +0 -76
  101. uiform/types/deployments/webhooks.py +0 -21
  102. uiform/types/events.py +0 -76
  103. uiform/types/jobs/base.py +0 -150
  104. uiform/types/jobs/batch_annotation.py +0 -22
  105. uiform/types/secrets/__init__.py +0 -0
  106. {uiform → retab}/__init__.py +0 -0
  107. {uiform → retab}/_resource.py +0 -0
  108. {uiform → retab}/_utils/__init__.py +0 -0
  109. {uiform → retab}/_utils/usage/__init__.py +0 -0
  110. {uiform → retab}/py.typed +0 -0
  111. {uiform → retab}/resources/__init__.py +0 -0
  112. {uiform → retab}/resources/consensus/__init__.py +0 -0
  113. {uiform → retab}/resources/documents/__init__.py +0 -0
  114. {uiform → retab}/resources/finetuning.py +0 -0
  115. {uiform → retab}/resources/openai_example.py +0 -0
  116. {uiform → retab}/resources/processors/__init__.py +0 -0
  117. {uiform → retab}/resources/processors/automations/__init__.py +0 -0
  118. {uiform → retab}/resources/prompt_optimization.py +0 -0
  119. {uiform → retab}/resources/secrets/__init__.py +0 -0
  120. {uiform → retab}/resources/secrets/client.py +0 -0
  121. {uiform → retab}/types/__init__.py +0 -0
  122. {uiform → retab}/types/automations/__init__.py +0 -0
  123. {uiform → retab}/types/automations/webhooks.py +0 -0
  124. {uiform → retab}/types/db/__init__.py +0 -0
  125. {uiform/types/deployments → retab/types/documents}/__init__.py +0 -0
  126. {uiform → retab}/types/documents/correct_orientation.py +0 -0
  127. {uiform/types/documents → retab/types/jobs}/__init__.py +0 -0
  128. {uiform → retab}/types/jobs/finetune.py +0 -0
  129. {uiform → retab}/types/jobs/prompt_optimization.py +0 -0
  130. {uiform → retab}/types/jobs/webcrawl.py +0 -0
  131. {uiform → retab}/types/pagination.py +0 -0
  132. {uiform/types/jobs → retab/types/schemas}/__init__.py +0 -0
  133. {uiform/types/schemas → retab/types/secrets}/__init__.py +0 -0
  134. {retab-0.0.35.dist-info → retab-0.0.37.dist-info}/WHEEL +0 -0
@@ -1,444 +0,0 @@
1
- import json
2
- from io import IOBase
3
- from pathlib import Path
4
- from typing import Any, Dict, List, Literal, Optional
5
-
6
- from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionReasoningEffort
7
- from PIL.Image import Image
8
- from pydantic import HttpUrl
9
-
10
- from ...._resource import AsyncAPIResource, SyncAPIResource
11
- from ...._utils.ai_models import assert_valid_model_extraction
12
- from ....types.automations.outlook import FetchParams, ListOutlooks, MatchParams, Outlook, UpdateOutlookRequest
13
- from ....types.logs import AutomationLog
14
- from ....types.modalities import Modality
15
- from ....types.standards import PreparedRequest
16
-
17
-
18
- class OutlooksMixin:
19
- def prepare_create(
20
- self,
21
- name: str,
22
- json_schema: Dict[str, Any],
23
- webhook_url: HttpUrl,
24
- # email specific opitonals Fields
25
- authorized_domains: List[str] = [],
26
- authorized_emails: List[str] = [],
27
- # HTTP Config Optional Fields
28
- webhook_headers: Dict[str, str] = {},
29
- # DocumentExtraction Config
30
- image_resolution_dpi: Optional[int] = None,
31
- browser_canvas: Optional[Literal['A3', 'A4', 'A5']] = None,
32
- modality: Modality = "native",
33
- model: str = "gpt-4o-mini",
34
- temperature: float = 0,
35
- reasoning_effort: ChatCompletionReasoningEffort = "medium",
36
- # Optional Fields for data integration
37
- match_params: Optional[List[MatchParams]] = None,
38
- fetch_params: Optional[List[FetchParams]] = None,
39
- layout_schema: Optional[Dict[str, Any]] = None,
40
- ) -> PreparedRequest:
41
- assert_valid_model_extraction(model)
42
-
43
- data = {
44
- "name": name,
45
- "webhook_url": webhook_url,
46
- "webhook_headers": webhook_headers,
47
- "json_schema": json_schema,
48
- "authorized_domains": authorized_domains,
49
- "authorized_emails": authorized_emails,
50
- "image_resolution_dpi": image_resolution_dpi,
51
- "browser_canvas": browser_canvas,
52
- "modality": modality,
53
- "model": model,
54
- "temperature": temperature,
55
- "reasoning_effort": reasoning_effort,
56
- "layout_schema": layout_schema,
57
- }
58
-
59
- if match_params is not None:
60
- data["match_params"] = match_params
61
- if fetch_params is not None:
62
- data["fetch_params"] = fetch_params
63
-
64
- # Validate the data
65
- outlook_data = Outlook.model_validate(data)
66
- return PreparedRequest(method="POST", url="/v1/deployments/outlook", data=outlook_data.model_dump(mode="json"))
67
-
68
- def prepare_list(
69
- self,
70
- before: str | None = None,
71
- after: str | None = None,
72
- limit: int = 10,
73
- order: Literal["asc", "desc"] | None = "desc",
74
- name: Optional[str] = None,
75
- webhook_url: Optional[str] = None,
76
- schema_id: Optional[str] = None,
77
- schema_data_id: Optional[str] = None,
78
- ) -> PreparedRequest:
79
- params = {
80
- "before": before,
81
- "after": after,
82
- "limit": limit,
83
- "order": order,
84
- "name": name,
85
- "webhook_url": webhook_url,
86
- "schema_id": schema_id,
87
- "schema_data_id": schema_data_id,
88
- }
89
- # Remove None values
90
- params = {k: v for k, v in params.items() if v is not None}
91
-
92
- return PreparedRequest(method="GET", url="/v1/deployments/outlook", params=params)
93
-
94
- def prepare_get(self, outlook_id: str) -> PreparedRequest:
95
- return PreparedRequest(method="GET", url=f"/v1/processors/automations/outlook/{outlook_id}")
96
-
97
- def prepare_update(
98
- self,
99
- outlook_id: str,
100
- name: Optional[str] = None,
101
- webhook_url: Optional[HttpUrl] = None,
102
- webhook_headers: Optional[Dict[str, str]] = None,
103
- authorized_domains: Optional[List[str]] = None,
104
- authorized_emails: Optional[List[str]] = None,
105
- image_resolution_dpi: Optional[int] = None,
106
- browser_canvas: Optional[Literal['A3', 'A4', 'A5']] = None,
107
- modality: Optional[Modality] = None,
108
- model: Optional[str] = None,
109
- temperature: Optional[float] = None,
110
- reasoning_effort: Optional[ChatCompletionReasoningEffort] = None,
111
- json_schema: Optional[Dict[str, Any]] = None,
112
- match_params: Optional[List[MatchParams]] = None,
113
- fetch_params: Optional[List[FetchParams]] = None,
114
- layout_schema: Optional[Dict[str, Any]] = None,
115
- ) -> PreparedRequest:
116
- data: dict[str, Any] = {}
117
- if name is not None:
118
- data["name"] = name
119
- if webhook_url is not None:
120
- data["webhook_url"] = webhook_url
121
- if webhook_headers is not None:
122
- data["webhook_headers"] = webhook_headers
123
- if authorized_domains is not None:
124
- data["authorized_domains"] = authorized_domains
125
- if authorized_emails is not None:
126
- data["authorized_emails"] = authorized_emails
127
- if image_resolution_dpi is not None:
128
- data["image_resolution_dpi"] = image_resolution_dpi
129
- if browser_canvas is not None:
130
- data["browser_canvas"] = browser_canvas
131
- if modality is not None:
132
- data["modality"] = modality
133
- if model is not None:
134
- assert_valid_model_extraction(model)
135
- data["model"] = model
136
- if temperature is not None:
137
- data["temperature"] = temperature
138
- if json_schema is not None:
139
- data["json_schema"] = json_schema
140
- if match_params is not None:
141
- data["match_params"] = match_params
142
- if fetch_params is not None:
143
- data["fetch_params"] = fetch_params
144
- if reasoning_effort is not None:
145
- data["reasoning_effort"] = reasoning_effort
146
- if layout_schema is not None:
147
- data["layout_schema"] = layout_schema
148
-
149
- update_outlook_request = UpdateOutlookRequest.model_validate(data)
150
-
151
- return PreparedRequest(method="PUT", url=f"/v1/processors/automations/outlook/{outlook_id}", data=update_outlook_request.model_dump(mode="json"))
152
-
153
- def prepare_delete(self, outlook_id: str) -> PreparedRequest:
154
- return PreparedRequest(method="DELETE", url=f"/v1/processors/automations/outlook/{outlook_id}")
155
-
156
- class Outlooks(SyncAPIResource, OutlooksMixin):
157
- """Outlook API wrapper for managing outlook automation configurations"""
158
-
159
- def __init__(self, client: Any) -> None:
160
- super().__init__(client=client)
161
-
162
- def create(
163
- self,
164
- name: str,
165
- json_schema: Dict[str, Any],
166
- webhook_url: HttpUrl,
167
- authorized_domains: List[str] = [],
168
- authorized_emails: List[str] = [],
169
- webhook_headers: Dict[str, str] = {},
170
- image_resolution_dpi: Optional[int] = None,
171
- browser_canvas: Optional[Literal['A3', 'A4', 'A5']] = None,
172
- modality: Modality = "native",
173
- model: str = "gpt-4o-mini",
174
- temperature: float = 0,
175
- reasoning_effort: ChatCompletionReasoningEffort = "medium",
176
- match_params: Optional[List[MatchParams]] = None,
177
- fetch_params: Optional[List[FetchParams]] = None,
178
- ) -> Outlook:
179
- """Create a new outlook automation configuration.
180
-
181
- Args:
182
- name: Name of the outlook plugin
183
- json_schema: JSON schema to validate extracted data
184
- webhook_url: Webhook URL to receive processed data
185
- webhook_headers: Webhook headers to send with processed data
186
- authorized_domains: List of authorized domains
187
- authorized_emails: List of authorized emails
188
- image_resolution_dpi: Optional image resolution DPI
189
- browser_canvas: Optional browser canvas size
190
- modality: Processing modality (currently only "native" supported)
191
- model: AI model to use for processing
192
- temperature: Model temperature setting
193
- reasoning_effort: The effort level for the model to reason about the input data.
194
- match_params: List of match parameters for the outlook automation
195
- fetch_params: List of fetch parameters for the outlook automation
196
- Returns:
197
- Outlook: The created outlook plugin configuration
198
- """
199
-
200
- request = self.prepare_create(
201
- name,
202
- json_schema,
203
- webhook_url,
204
- authorized_domains,
205
- authorized_emails,
206
- webhook_headers,
207
- image_resolution_dpi,
208
- browser_canvas,
209
- modality,
210
- model,
211
- temperature,
212
- reasoning_effort,
213
- match_params,
214
- fetch_params,
215
- )
216
- response = self._client._prepared_request(request)
217
-
218
- print(f"Outlook automation created. Outlook available at https://www.uiform.com/dashboard/processors/{response['id']}")
219
-
220
- return Outlook.model_validate(response)
221
-
222
- def list(
223
- self,
224
- before: str | None = None,
225
- after: str | None = None,
226
- limit: int = 10,
227
- order: Literal["asc", "desc"] | None = "desc",
228
- name: Optional[str] = None,
229
- webhook_url: Optional[str] = None,
230
- schema_id: Optional[str] = None,
231
- schema_data_id: Optional[str] = None,
232
- ) -> ListOutlooks:
233
- """List all outlook automation configurations.
234
-
235
- Args:
236
- before: Optional cursor for pagination - get results before this log ID
237
- after: Optional cursor for pagination - get results after this log ID
238
- limit: Maximum number of logs to return (1-100, default 10)
239
- order: Sort order by creation time - "asc" or "desc" (default "desc")
240
- name: Optional name filter
241
- webhook_url: Optional webhook URL filter
242
- schema_id: Optional schema ID filter
243
- schema_data_id: Optional schema data ID filter
244
- match_params: Optional list of match parameters for the outlook automation
245
- fetch_params: Optional list of fetch parameters for the outlook automation
246
- Returns:
247
- List[Outlook]: List of outlook plugin configurations
248
- """
249
- request = self.prepare_list(before, after, limit, order, name, webhook_url, schema_id, schema_data_id)
250
- response = self._client._prepared_request(request)
251
- return ListOutlooks.model_validate(response)
252
-
253
- def get(self, id: str) -> Outlook:
254
- """Get a specific outlook automation configuration.
255
-
256
- Args:
257
- id: ID of the outlook plugin
258
-
259
- Returns:
260
- Outlook: The outlook plugin configuration
261
- """
262
- request = self.prepare_get(id)
263
- response = self._client._prepared_request(request)
264
- return Outlook.model_validate(response)
265
-
266
- def update(
267
- self,
268
- outlook_id: str,
269
- name: Optional[str] = None,
270
- webhook_url: Optional[HttpUrl] = None,
271
- webhook_headers: Optional[Dict[str, str]] = None,
272
- authorized_domains: Optional[List[str]] = None,
273
- authorized_emails: Optional[List[str]] = None,
274
- image_resolution_dpi: Optional[int] = None,
275
- browser_canvas: Optional[Literal['A3', 'A4', 'A5']] = None,
276
- modality: Optional[Modality] = None,
277
- model: Optional[str] = None,
278
- temperature: Optional[float] = None,
279
- reasoning_effort: Optional[ChatCompletionReasoningEffort] = None,
280
- json_schema: Optional[Dict[str, Any]] = None,
281
- match_params: Optional[List[MatchParams]] = None,
282
- fetch_params: Optional[List[FetchParams]] = None,
283
- layout_schema: Optional[Dict[str, Any]] = None,
284
- ) -> Outlook:
285
- """Update an outlook automation configuration.
286
-
287
- Args:
288
- outlook_id: ID of the outlook plugin to update
289
- name: New name for the outlook plugin
290
- webhook_url: New webhook URL
291
- webhook_headers: New webhook headers
292
- authorized_domains: New authorized domains
293
- authorized_emails: New authorized emails
294
- image_resolution_dpi: New image resolution DPI
295
- browser_canvas: New browser canvas size
296
- modality: New processing modality
297
- model: New AI model
298
- temperature: New temperature setting
299
- reasoning_effort: New reasoning effort
300
- json_schema: New JSON schema
301
- match_params: New match parameters for the outlook automation
302
- fetch_params: New fetch parameters for the outlook automation
303
- layout_schema: New layout schema for the outlook automation
304
-
305
- Returns:
306
- Outlook: The updated outlook plugin configuration
307
- """
308
- request = self.prepare_update(
309
- outlook_id,
310
- name,
311
- webhook_url,
312
- webhook_headers,
313
- authorized_domains,
314
- authorized_emails,
315
- image_resolution_dpi,
316
- browser_canvas,
317
- modality,
318
- model,
319
- temperature,
320
- reasoning_effort,
321
- json_schema,
322
- match_params,
323
- fetch_params,
324
- layout_schema,
325
- )
326
- response = self._client._prepared_request(request)
327
- return Outlook.model_validate(response)
328
-
329
- def delete(self, outlook_id: str) -> None:
330
- """Delete an outlook automation configuration.
331
-
332
- Args:
333
- outlook_id: ID of the outlook plugin to delete
334
- """
335
- request = self.prepare_delete(outlook_id)
336
- response = self._client._prepared_request(request)
337
- return None
338
-
339
-
340
- class AsyncOutlooks(AsyncAPIResource, OutlooksMixin):
341
- def __init__(self, client: Any) -> None:
342
- super().__init__(client=client)
343
-
344
- async def create(
345
- self,
346
- name: str,
347
- json_schema: Dict[str, Any],
348
- webhook_url: HttpUrl,
349
- authorized_domains: List[str] = [],
350
- authorized_emails: List[str] = [],
351
- webhook_headers: Dict[str, str] = {},
352
- image_resolution_dpi: Optional[int] = None,
353
- browser_canvas: Optional[Literal['A3', 'A4', 'A5']] = None,
354
- modality: Modality = "native",
355
- model: str = "gpt-4o-mini",
356
- temperature: float = 0,
357
- reasoning_effort: ChatCompletionReasoningEffort = "medium",
358
- match_params: List[MatchParams] = [],
359
- fetch_params: List[FetchParams] = [],
360
- ) -> Outlook:
361
- request = self.prepare_create(
362
- name,
363
- json_schema,
364
- webhook_url,
365
- authorized_domains,
366
- authorized_emails,
367
- webhook_headers,
368
- image_resolution_dpi,
369
- browser_canvas,
370
- modality,
371
- model,
372
- temperature,
373
- reasoning_effort,
374
- match_params,
375
- fetch_params,
376
- )
377
- response = await self._client._prepared_request(request)
378
- print(f"Outlook automation created. Outlook available at https://www.uiform.com/dashboard/processors/{response['id']}")
379
- return Outlook.model_validate(response)
380
-
381
- async def list(
382
- self,
383
- before: str | None = None,
384
- after: str | None = None,
385
- limit: int = 10,
386
- order: Literal["asc", "desc"] | None = "desc",
387
- name: Optional[str] = None,
388
- webhook_url: Optional[str] = None,
389
- schema_id: Optional[str] = None,
390
- schema_data_id: Optional[str] = None,
391
- ) -> ListOutlooks:
392
- request = self.prepare_list(before, after, limit, order, name, webhook_url, schema_id, schema_data_id)
393
- response = await self._client._prepared_request(request)
394
- return ListOutlooks.model_validate(response)
395
-
396
- async def get(self, outlook_id: str) -> Outlook:
397
- request = self.prepare_get(outlook_id)
398
- response = await self._client._prepared_request(request)
399
- return Outlook.model_validate(response)
400
-
401
- async def update(
402
- self,
403
- outlook_id: str,
404
- name: Optional[str] = None,
405
- webhook_url: Optional[HttpUrl] = None,
406
- webhook_headers: Optional[Dict[str, str]] = None,
407
- authorized_domains: Optional[List[str]] = None,
408
- authorized_emails: Optional[List[str]] = None,
409
- image_resolution_dpi: Optional[int] = None,
410
- browser_canvas: Optional[Literal['A3', 'A4', 'A5']] = None,
411
- modality: Optional[Modality] = None,
412
- model: Optional[str] = None,
413
- temperature: Optional[float] = None,
414
- reasoning_effort: Optional[ChatCompletionReasoningEffort] = None,
415
- json_schema: Optional[Dict[str, Any]] = None,
416
- match_params: Optional[List[MatchParams]] = None,
417
- fetch_params: Optional[List[FetchParams]] = None,
418
- layout_schema: Optional[Dict[str, Any]] = None,
419
- ) -> Outlook:
420
- request = self.prepare_update(
421
- outlook_id,
422
- name,
423
- webhook_url,
424
- webhook_headers,
425
- authorized_domains,
426
- authorized_emails,
427
- image_resolution_dpi,
428
- browser_canvas,
429
- modality,
430
- model,
431
- temperature,
432
- reasoning_effort,
433
- json_schema,
434
- match_params,
435
- fetch_params,
436
- layout_schema,
437
- )
438
- response = await self._client._prepared_request(request)
439
- return Outlook.model_validate(response)
440
-
441
- async def delete(self, outlook_id: str) -> None:
442
- request = self.prepare_delete(outlook_id)
443
- await self._client._prepared_request(request)
444
- return None
@@ -1,62 +0,0 @@
1
- from ..._resource import AsyncAPIResource, SyncAPIResource
2
- from ...types.standards import PreparedRequest
3
-
4
-
5
- class WebhookMixin:
6
- def prepare_create(self) -> PreparedRequest:
7
- return PreparedRequest(method="POST", url="/v1/secrets/webhook")
8
-
9
- def prepare_delete(self) -> PreparedRequest:
10
- return PreparedRequest(method="DELETE", url="/v1/secrets/webhook")
11
-
12
-
13
- class Webhook(SyncAPIResource, WebhookMixin):
14
- """Webhook secret management wrapper"""
15
-
16
- def create(
17
- self,
18
- ) -> dict:
19
- """Create a webhook secret.
20
-
21
- Returns:
22
- dict: Response indicating success
23
- """
24
- request = self.prepare_create()
25
- response = self._client._prepared_request(request)
26
-
27
- return response
28
-
29
- def delete(self) -> dict:
30
- """Delete a webhook secret.
31
-
32
- Returns:
33
- dict: Response indicating success
34
- """
35
- request = self.prepare_delete()
36
- response = self._client._prepared_request(request)
37
-
38
- return response
39
-
40
-
41
- class AsyncWebhook(AsyncAPIResource, WebhookMixin):
42
- """Webhook secret management wrapper"""
43
-
44
- async def create(self) -> dict:
45
- """Create a webhook secret.
46
-
47
- Returns:
48
- dict: Response indicating success
49
- """
50
- request = self.prepare_create()
51
- response = await self._client._prepared_request(request)
52
- return response
53
-
54
- async def delete(self) -> dict:
55
- """Delete a webhook secret.
56
-
57
- Returns:
58
- dict: Response indicating success
59
- """
60
- request = self.prepare_delete()
61
- response = await self._client._prepared_request(request)
62
- return response
uiform/types/consensus.py DELETED
@@ -1,10 +0,0 @@
1
- from pydantic import BaseModel, Field
2
-
3
-
4
- class ReconciliationResponse(BaseModel):
5
- consensus_dict: dict = Field(
6
- description="The consensus dictionary containing the reconciled values from the input dictionaries."
7
- )
8
- likelihoods: dict = Field(
9
- description="A dictionary containing the likelihood/confidence scores for each field in the consensus dictionary."
10
- )
@@ -1,59 +0,0 @@
1
- import datetime
2
- from typing import Any, Literal, Optional
3
-
4
- import nanoid # type: ignore
5
- from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionReasoningEffort
6
- from pydantic import BaseModel, Field, HttpUrl, field_serializer
7
- from pydantic_core import Url
8
-
9
- from ..modalities import Modality
10
-
11
-
12
- def scrapping_action(link: HttpUrl) -> dict[str, Any]:
13
- raise NotImplementedError("Scrapping action not implemented")
14
-
15
-
16
- class CronSchedule(BaseModel):
17
- second: Optional[int] = Field(0, ge=0, le=59, description="Second (0-59), defaults to 0")
18
- minute: int = Field(..., ge=0, le=59, description="Minute (0-59)")
19
- hour: int = Field(..., ge=0, le=23, description="Hour (0-23)")
20
- day_of_month: Optional[int] = Field(None, ge=1, le=31, description="Day of the month (1-31), None means any day")
21
- month: Optional[int] = Field(None, ge=1, le=12, description="Month (1-12), None means every month")
22
- day_of_week: Optional[int] = Field(None, ge=0, le=6, description="Day of the week (0-6, Sunday = 0), None means any day")
23
-
24
- def to_cron_string(self) -> str:
25
- return f"{self.second or '*'} {self.minute} {self.hour} {self.day_of_month or '*'} {self.month or '*'} {self.day_of_week or '*'}"
26
-
27
-
28
- from ..logs import AutomationConfig
29
-
30
-
31
- class ScrappingConfig(AutomationConfig):
32
- object: Literal['deployment.scrapping_cron'] = "deployment.scrapping_cron"
33
- id: str = Field(default_factory=lambda: "scrapping_" + nanoid.generate(), description="Unique identifier for the scrapping job")
34
-
35
- # Scrapping Specific Config
36
- link: HttpUrl = Field(..., description="Link to be scrapped")
37
- schedule: CronSchedule
38
-
39
- updated_at: datetime.datetime = Field(default_factory=lambda: datetime.datetime.now(datetime.timezone.utc))
40
-
41
- # HTTP Config
42
- webhook_url: HttpUrl = Field(..., description="Url of the webhook to send the data to")
43
- webhook_headers: dict[str, str] = Field(default_factory=dict, description="Headers to send with the request")
44
-
45
- modality: Modality
46
- image_resolution_dpi: int = Field(default=96, description="Resolution of the image sent to the LLM")
47
- browser_canvas: Literal['A3', 'A4', 'A5'] = Field(default='A4', description="Sets the size of the browser canvas for rendering documents in browser-based processing. Choose a size that matches the document type.")
48
-
49
- # New attributes
50
- model: str = Field(..., description="Model used for chat completion")
51
- json_schema: dict[str, Any] = Field(..., description="JSON schema format used to validate the output data.")
52
- temperature: float = Field(default=0.0, description="Temperature for sampling. If not provided, the default temperature for the model will be used.", examples=[0.0])
53
- reasoning_effort: ChatCompletionReasoningEffort = Field(
54
- default="medium", description="The effort level for the model to reason about the input data. If not provided, the default reasoning effort for the model will be used."
55
- )
56
-
57
- @field_serializer('webhook_url', 'link')
58
- def url2str(self, val: HttpUrl) -> str:
59
- return str(val)
@@ -1,28 +0,0 @@
1
- import copy
2
- import datetime
3
- import json
4
- from typing import Any, Literal, Optional
5
-
6
- import nanoid # type: ignore
7
- from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionReasoningEffort
8
- from pydantic import BaseModel, Field, HttpUrl, computed_field, field_serializer
9
-
10
- from ..._utils.json_schema import clean_schema
11
- from ..._utils.mime import generate_blake2b_hash_from_string
12
- from ..logs import AutomationConfig, UpdateAutomationRequest
13
- from ..modalities import Modality
14
- from ..pagination import ListMetadata
15
-
16
-
17
- class Endpoint(AutomationConfig):
18
- object: Literal['deployment.endpoint'] = "deployment.endpoint"
19
- id: str = Field(default_factory=lambda: "endp_" + nanoid.generate(), description="Unique identifier for the extraction endpoint")
20
-
21
- class ListEndpoints(BaseModel):
22
- data: list[Endpoint]
23
- list_metadata: ListMetadata
24
-
25
-
26
- # Inherits from the methods of UpdateAutomationRequest
27
- class UpdateEndpointRequest(UpdateAutomationRequest):
28
- pass
@@ -1,36 +0,0 @@
1
- import copy
2
- import datetime
3
- import json
4
- from typing import Any, Dict, Literal, Optional
5
-
6
- import nanoid # type: ignore
7
- from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionReasoningEffort
8
- from pydantic import BaseModel, Field, HttpUrl, computed_field, field_serializer
9
- from pydantic_core import Url
10
-
11
- from ..._utils.json_schema import clean_schema
12
- from ..._utils.mime import generate_blake2b_hash_from_string
13
- from ..logs import AutomationConfig, UpdateAutomationRequest
14
- from ..modalities import Modality
15
- from ..pagination import ListMetadata
16
-
17
-
18
- class Link(AutomationConfig):
19
- object: Literal['deployment.link'] = "deployment.link"
20
- id: str = Field(default_factory=lambda: "lnk_" + nanoid.generate(), description="Unique identifier for the extraction link")
21
-
22
- # Link Specific Config
23
- password: Optional[str] = Field(None, description="Password to access the link")
24
-
25
-
26
- class ListLinks(BaseModel):
27
- data: list[Link]
28
- list_metadata: ListMetadata
29
-
30
-
31
- # Inherits from the methods of UpdateAutomationRequest
32
- class UpdateLinkRequest(UpdateAutomationRequest):
33
- # ------------------------------
34
- # Link Config
35
- # ------------------------------
36
- password: Optional[str] = None