retab 0.0.40__tar.gz → 0.0.41__tar.gz

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 (124) hide show
  1. {retab-0.0.40 → retab-0.0.41}/PKG-INFO +5 -5
  2. {retab-0.0.40 → retab-0.0.41}/README.md +4 -4
  3. {retab-0.0.40 → retab-0.0.41}/retab/resources/consensus/completions.py +1 -1
  4. {retab-0.0.40 → retab-0.0.41}/retab/resources/consensus/completions_stream.py +3 -3
  5. {retab-0.0.40 → retab-0.0.41}/retab/resources/consensus/responses.py +1 -1
  6. {retab-0.0.40 → retab-0.0.41}/retab/resources/consensus/responses_stream.py +2 -2
  7. {retab-0.0.40 → retab-0.0.41}/retab/resources/documents/client.py +3 -3
  8. {retab-0.0.40 → retab-0.0.41}/retab/resources/documents/extractions.py +4 -4
  9. {retab-0.0.40 → retab-0.0.41}/retab/resources/evals.py +1 -1
  10. {retab-0.0.40 → retab-0.0.41}/retab/resources/evaluations/documents.py +1 -1
  11. {retab-0.0.40 → retab-0.0.41}/retab/resources/jsonlUtils.py +4 -4
  12. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/endpoints.py +1 -1
  13. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/mailboxes.py +1 -1
  14. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/tests.py +1 -1
  15. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/client.py +23 -14
  16. {retab-0.0.40 → retab-0.0.41}/retab/resources/prompt_optimization.py +1 -1
  17. {retab-0.0.40 → retab-0.0.41}/retab/resources/schemas.py +3 -3
  18. {retab-0.0.40 → retab-0.0.41}/retab/types/completions.py +1 -1
  19. {retab-0.0.40 → retab-0.0.41}/retab/types/documents/create_messages.py +4 -4
  20. {retab-0.0.40 → retab-0.0.41}/retab/types/documents/extractions.py +1 -1
  21. {retab-0.0.40 → retab-0.0.41}/retab/types/evals.py +2 -2
  22. {retab-0.0.40 → retab-0.0.41}/retab/types/evaluations/iterations.py +2 -2
  23. {retab-0.0.40 → retab-0.0.41}/retab/types/evaluations/model.py +2 -2
  24. {retab-0.0.40 → retab-0.0.41}/retab/types/extractions.py +1 -1
  25. {retab-0.0.40 → retab-0.0.41}/retab/types/jobs/prompt_optimization.py +1 -1
  26. {retab-0.0.40 → retab-0.0.41}/retab/types/logs.py +3 -3
  27. {retab-0.0.40 → retab-0.0.41}/retab/types/schemas/object.py +4 -4
  28. {retab-0.0.40 → retab-0.0.41}/retab/types/schemas/templates.py +1 -1
  29. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/usage/usage.py +1 -1
  30. {retab-0.0.40 → retab-0.0.41}/retab.egg-info/PKG-INFO +5 -5
  31. {retab-0.0.40 → retab-0.0.41}/retab.egg-info/SOURCES.txt +16 -16
  32. {retab-0.0.40 → retab-0.0.41}/setup.py +1 -1
  33. {retab-0.0.40 → retab-0.0.41}/pyproject.toml +0 -0
  34. {retab-0.0.40 → retab-0.0.41}/retab/__init__.py +0 -0
  35. {retab-0.0.40 → retab-0.0.41}/retab/_resource.py +0 -0
  36. {retab-0.0.40 → retab-0.0.41}/retab/client.py +0 -0
  37. {retab-0.0.40 → retab-0.0.41}/retab/py.typed +0 -0
  38. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/resources}/__init__.py +0 -0
  39. {retab-0.0.40 → retab-0.0.41}/retab/resources/consensus/__init__.py +0 -0
  40. {retab-0.0.40 → retab-0.0.41}/retab/resources/consensus/client.py +0 -0
  41. {retab-0.0.40 → retab-0.0.41}/retab/resources/documents/__init__.py +0 -0
  42. {retab-0.0.40 → retab-0.0.41}/retab/resources/evaluations/__init__.py +0 -0
  43. {retab-0.0.40 → retab-0.0.41}/retab/resources/evaluations/client.py +0 -0
  44. {retab-0.0.40 → retab-0.0.41}/retab/resources/evaluations/iterations.py +0 -0
  45. {retab-0.0.40 → retab-0.0.41}/retab/resources/files.py +0 -0
  46. {retab-0.0.40 → retab-0.0.41}/retab/resources/finetuning.py +0 -0
  47. {retab-0.0.40 → retab-0.0.41}/retab/resources/models.py +0 -0
  48. {retab-0.0.40 → retab-0.0.41}/retab/resources/openai_example.py +0 -0
  49. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/__init__.py +0 -0
  50. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/__init__.py +0 -0
  51. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/client.py +0 -0
  52. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/links.py +0 -0
  53. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/logs.py +0 -0
  54. {retab-0.0.40 → retab-0.0.41}/retab/resources/processors/automations/outlook.py +0 -0
  55. {retab-0.0.40 → retab-0.0.41}/retab/resources/secrets/__init__.py +0 -0
  56. {retab-0.0.40 → retab-0.0.41}/retab/resources/secrets/client.py +0 -0
  57. {retab-0.0.40 → retab-0.0.41}/retab/resources/secrets/external_api_keys.py +0 -0
  58. {retab-0.0.40 → retab-0.0.41}/retab/resources/secrets/webhook.py +0 -0
  59. {retab-0.0.40 → retab-0.0.41}/retab/resources/usage.py +0 -0
  60. {retab-0.0.40/retab/_utils/usage → retab-0.0.41/retab/types}/__init__.py +0 -0
  61. {retab-0.0.40 → retab-0.0.41}/retab/types/ai_models.py +0 -0
  62. {retab-0.0.40/retab/resources → retab-0.0.41/retab/types/automations}/__init__.py +0 -0
  63. {retab-0.0.40 → retab-0.0.41}/retab/types/automations/cron.py +0 -0
  64. {retab-0.0.40 → retab-0.0.41}/retab/types/automations/endpoints.py +0 -0
  65. {retab-0.0.40 → retab-0.0.41}/retab/types/automations/links.py +0 -0
  66. {retab-0.0.40 → retab-0.0.41}/retab/types/automations/mailboxes.py +0 -0
  67. {retab-0.0.40 → retab-0.0.41}/retab/types/automations/outlook.py +0 -0
  68. {retab-0.0.40 → retab-0.0.41}/retab/types/automations/webhooks.py +0 -0
  69. {retab-0.0.40 → retab-0.0.41}/retab/types/browser_canvas.py +0 -0
  70. {retab-0.0.40 → retab-0.0.41}/retab/types/chat.py +0 -0
  71. {retab-0.0.40 → retab-0.0.41}/retab/types/consensus.py +0 -0
  72. {retab-0.0.40/retab/types → retab-0.0.41/retab/types/db}/__init__.py +0 -0
  73. {retab-0.0.40 → retab-0.0.41}/retab/types/db/annotations.py +0 -0
  74. {retab-0.0.40 → retab-0.0.41}/retab/types/db/files.py +0 -0
  75. {retab-0.0.40 → retab-0.0.41}/retab/types/documents/__init__.py +0 -0
  76. {retab-0.0.40 → retab-0.0.41}/retab/types/documents/correct_orientation.py +0 -0
  77. {retab-0.0.40 → retab-0.0.41}/retab/types/documents/parse.py +0 -0
  78. {retab-0.0.40 → retab-0.0.41}/retab/types/evaluations/__init__.py +0 -0
  79. {retab-0.0.40 → retab-0.0.41}/retab/types/evaluations/documents.py +0 -0
  80. {retab-0.0.40 → retab-0.0.41}/retab/types/events.py +0 -0
  81. {retab-0.0.40 → retab-0.0.41}/retab/types/inference_settings.py +0 -0
  82. {retab-0.0.40/retab/types/automations → retab-0.0.41/retab/types/jobs}/__init__.py +0 -0
  83. {retab-0.0.40 → retab-0.0.41}/retab/types/jobs/base.py +0 -0
  84. {retab-0.0.40 → retab-0.0.41}/retab/types/jobs/batch_annotation.py +0 -0
  85. {retab-0.0.40 → retab-0.0.41}/retab/types/jobs/evaluation.py +0 -0
  86. {retab-0.0.40 → retab-0.0.41}/retab/types/jobs/finetune.py +0 -0
  87. {retab-0.0.40 → retab-0.0.41}/retab/types/jobs/webcrawl.py +0 -0
  88. {retab-0.0.40 → retab-0.0.41}/retab/types/metrics.py +0 -0
  89. {retab-0.0.40 → retab-0.0.41}/retab/types/mime.py +0 -0
  90. {retab-0.0.40 → retab-0.0.41}/retab/types/modalities.py +0 -0
  91. {retab-0.0.40 → retab-0.0.41}/retab/types/pagination.py +0 -0
  92. {retab-0.0.40 → retab-0.0.41}/retab/types/predictions.py +0 -0
  93. {retab-0.0.40/retab/types/db → retab-0.0.41/retab/types/schemas}/__init__.py +0 -0
  94. {retab-0.0.40 → retab-0.0.41}/retab/types/schemas/enhance.py +0 -0
  95. {retab-0.0.40 → retab-0.0.41}/retab/types/schemas/evaluate.py +0 -0
  96. {retab-0.0.40 → retab-0.0.41}/retab/types/schemas/generate.py +0 -0
  97. {retab-0.0.40 → retab-0.0.41}/retab/types/schemas/layout.py +0 -0
  98. {retab-0.0.40/retab/types/jobs → retab-0.0.41/retab/types/secrets}/__init__.py +0 -0
  99. {retab-0.0.40 → retab-0.0.41}/retab/types/secrets/external_api_keys.py +0 -0
  100. {retab-0.0.40 → retab-0.0.41}/retab/types/standards.py +0 -0
  101. {retab-0.0.40/retab/types/schemas → retab-0.0.41/retab/utils}/__init__.py +0 -0
  102. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/_model_cards/anthropic.yaml +0 -0
  103. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/_model_cards/auto.yaml +0 -0
  104. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/_model_cards/gemini.yaml +0 -0
  105. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/_model_cards/openai.yaml +0 -0
  106. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/_model_cards/xai.yaml +0 -0
  107. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/ai_models.py +0 -0
  108. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/benchmarking.py +0 -0
  109. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/chat.py +0 -0
  110. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/display.py +0 -0
  111. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/json_schema.py +0 -0
  112. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/mime.py +0 -0
  113. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/responses.py +0 -0
  114. {retab-0.0.40/retab/_utils → retab-0.0.41/retab/utils}/stream_context_managers.py +0 -0
  115. {retab-0.0.40/retab/types/secrets → retab-0.0.41/retab/utils/usage}/__init__.py +0 -0
  116. {retab-0.0.40 → retab-0.0.41}/retab.egg-info/dependency_links.txt +0 -0
  117. {retab-0.0.40 → retab-0.0.41}/retab.egg-info/requires.txt +0 -0
  118. {retab-0.0.40 → retab-0.0.41}/retab.egg-info/top_level.txt +0 -0
  119. {retab-0.0.40 → retab-0.0.41}/setup.cfg +0 -0
  120. {retab-0.0.40 → retab-0.0.41}/tests/test_automations_links.py +0 -0
  121. {retab-0.0.40 → retab-0.0.41}/tests/test_automations_mailboxes.py +0 -0
  122. {retab-0.0.40 → retab-0.0.41}/tests/test_documents_api.py +0 -0
  123. {retab-0.0.40 → retab-0.0.41}/tests/test_evaluations.py +0 -0
  124. {retab-0.0.40 → retab-0.0.41}/tests/test_preprocessor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: retab
3
- Version: 0.0.40
3
+ Version: 0.0.41
4
4
  Summary: Retab official python library
5
5
  Home-page: https://github.com/Retab-dev/retab
6
6
  Author: Retab
@@ -45,7 +45,7 @@ Requires-Dist: ruff
45
45
 
46
46
  <div align="center" style="margin-bottom: 1em;">
47
47
 
48
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/retab-logo.png" alt="Retab Logo" width="150">
48
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/retab-logo.png" alt="Retab Logo" width="150">
49
49
 
50
50
 
51
51
  *The AI Automation Platform*
@@ -95,7 +95,7 @@ You come with your own API key from your favorite AI provider, and we handle the
95
95
  We currently support [OpenAI](https://platform.openai.com/docs/overview), [Anthropic](https://www.anthropic.com/api), [Gemini](https://aistudio.google.com/prompts/new_chat) and [xAI](https://x.ai/api) models.
96
96
 
97
97
  <p align="center">
98
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/supported_models.png" alt="Supported Models" width="600">
98
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/supported_models.png" alt="Supported Models" width="600">
99
99
  </p>
100
100
 
101
101
  ---
@@ -105,7 +105,7 @@ We currently support [OpenAI](https://platform.openai.com/docs/overview), [Anthr
105
105
  Explore our [Playground](https://www.retab.dev/dashboard/playground) and create your first automations easily 🚀!
106
106
 
107
107
  <p align="center">
108
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/retab-playground.png" alt="Retab Playground" width="600">
108
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/retab-playground.png" alt="Retab Playground" width="600">
109
109
  </p>
110
110
 
111
111
  ---
@@ -244,7 +244,7 @@ completion = client.beta.chat.completions.parse(
244
244
  print("Extracted data:", completion.choices[0].message.parsed)
245
245
 
246
246
  # Validate the response against the original schema if you want to remove the reasoning fields
247
- from retab._utils.json_schema import filter_auxiliary_fields_json
247
+ from retab.utils.json_schema import filter_auxiliary_fields_json
248
248
  assert completion.choices[0].message.content is not None
249
249
  extraction = schema_obj.pydantic_model.model_validate(
250
250
  filter_auxiliary_fields_json(completion.choices[0].message.content, schema_obj.pydantic_model)
@@ -2,7 +2,7 @@
2
2
 
3
3
  <div align="center" style="margin-bottom: 1em;">
4
4
 
5
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/retab-logo.png" alt="Retab Logo" width="150">
5
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/retab-logo.png" alt="Retab Logo" width="150">
6
6
 
7
7
 
8
8
  *The AI Automation Platform*
@@ -52,7 +52,7 @@ You come with your own API key from your favorite AI provider, and we handle the
52
52
  We currently support [OpenAI](https://platform.openai.com/docs/overview), [Anthropic](https://www.anthropic.com/api), [Gemini](https://aistudio.google.com/prompts/new_chat) and [xAI](https://x.ai/api) models.
53
53
 
54
54
  <p align="center">
55
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/supported_models.png" alt="Supported Models" width="600">
55
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/supported_models.png" alt="Supported Models" width="600">
56
56
  </p>
57
57
 
58
58
  ---
@@ -62,7 +62,7 @@ We currently support [OpenAI](https://platform.openai.com/docs/overview), [Anthr
62
62
  Explore our [Playground](https://www.retab.dev/dashboard/playground) and create your first automations easily 🚀!
63
63
 
64
64
  <p align="center">
65
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/retab-playground.png" alt="Retab Playground" width="600">
65
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/retab-playground.png" alt="Retab Playground" width="600">
66
66
  </p>
67
67
 
68
68
  ---
@@ -201,7 +201,7 @@ completion = client.beta.chat.completions.parse(
201
201
  print("Extracted data:", completion.choices[0].message.parsed)
202
202
 
203
203
  # Validate the response against the original schema if you want to remove the reasoning fields
204
- from retab._utils.json_schema import filter_auxiliary_fields_json
204
+ from retab.utils.json_schema import filter_auxiliary_fields_json
205
205
  assert completion.choices[0].message.content is not None
206
206
  extraction = schema_obj.pydantic_model.model_validate(
207
207
  filter_auxiliary_fields_json(completion.choices[0].message.content, schema_obj.pydantic_model)
@@ -5,7 +5,7 @@ from openai.types.shared_params.response_format_json_schema import ResponseForma
5
5
  from pydantic import BaseModel as ResponseFormatT
6
6
 
7
7
  from ..._resource import AsyncAPIResource, SyncAPIResource
8
- from ..._utils.ai_models import assert_valid_model_extraction
8
+ from ...utils.ai_models import assert_valid_model_extraction
9
9
  from ...types.chat import ChatCompletionRetabMessage
10
10
  from ...types.completions import RetabChatCompletionsRequest
11
11
  from ...types.documents.extractions import RetabParsedChatCompletion
@@ -9,9 +9,9 @@ from openai.types.shared_params.response_format_json_schema import ResponseForma
9
9
  from pydantic import BaseModel as ResponseFormatT
10
10
 
11
11
  from ..._resource import AsyncAPIResource, SyncAPIResource
12
- from ..._utils.ai_models import assert_valid_model_extraction
13
- from ..._utils.json_schema import unflatten_dict
14
- from ..._utils.stream_context_managers import as_async_context_manager, as_context_manager
12
+ from ...utils.ai_models import assert_valid_model_extraction
13
+ from ...utils.json_schema import unflatten_dict
14
+ from ...utils.stream_context_managers import as_async_context_manager, as_context_manager
15
15
  from ...types.chat import ChatCompletionRetabMessage
16
16
  from ...types.completions import RetabChatCompletionsRequest
17
17
  from ...types.documents.extractions import RetabParsedChatCompletion, RetabParsedChatCompletionChunk, RetabParsedChoice
@@ -7,7 +7,7 @@ from openai.types.shared_params.reasoning import Reasoning
7
7
  from pydantic import BaseModel
8
8
 
9
9
  from ..._resource import AsyncAPIResource, SyncAPIResource
10
- from ..._utils.ai_models import assert_valid_model_extraction
10
+ from ...utils.ai_models import assert_valid_model_extraction
11
11
  from ...types.completions import RetabChatResponseCreateRequest
12
12
  from ...types.documents.extractions import UiResponse
13
13
  from ...types.schemas.object import Schema
@@ -6,8 +6,8 @@ from openai.types.shared_params.reasoning import Reasoning
6
6
  from pydantic import BaseModel
7
7
 
8
8
  from ..._resource import AsyncAPIResource, SyncAPIResource
9
- from ..._utils.ai_models import assert_valid_model_extraction
10
- from ..._utils.stream_context_managers import as_async_context_manager, as_context_manager
9
+ from ...utils.ai_models import assert_valid_model_extraction
10
+ from ...utils.stream_context_managers import as_async_context_manager, as_context_manager
11
11
  from ...types.completions import RetabChatResponseCreateRequest
12
12
  from ...types.documents.extractions import UiResponse
13
13
  from ...types.schemas.object import Schema
@@ -8,9 +8,9 @@ from pydantic_core import PydanticUndefined
8
8
  from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionReasoningEffort
9
9
 
10
10
  from ..._resource import AsyncAPIResource, SyncAPIResource
11
- from ..._utils.json_schema import load_json_schema, filter_auxiliary_fields_json
12
- from ..._utils.mime import convert_mime_data_to_pil_image, prepare_mime_document
13
- from ..._utils.ai_models import assert_valid_model_extraction
11
+ from ...utils.json_schema import load_json_schema, filter_auxiliary_fields_json
12
+ from ...utils.mime import convert_mime_data_to_pil_image, prepare_mime_document
13
+ from ...utils.ai_models import assert_valid_model_extraction
14
14
  from ...types.documents.create_messages import DocumentCreateInputRequest, DocumentCreateMessageRequest, DocumentMessage
15
15
  from ...types.documents.extractions import DocumentExtractRequest, RetabParsedChatCompletion
16
16
  from ...types.documents.parse import ParseRequest, ParseResult, TableParsingFormat
@@ -14,10 +14,10 @@ from pydantic_core import PydanticUndefined
14
14
  from pydantic import HttpUrl
15
15
 
16
16
  from ..._resource import AsyncAPIResource, SyncAPIResource
17
- from ..._utils.ai_models import assert_valid_model_extraction
18
- from ..._utils.json_schema import filter_auxiliary_fields_json, load_json_schema, unflatten_dict
19
- from ..._utils.mime import MIMEData, prepare_mime_document
20
- from ..._utils.stream_context_managers import as_async_context_manager, as_context_manager
17
+ from ...utils.ai_models import assert_valid_model_extraction
18
+ from ...utils.json_schema import filter_auxiliary_fields_json, load_json_schema, unflatten_dict
19
+ from ...utils.mime import MIMEData, prepare_mime_document
20
+ from ...utils.stream_context_managers import as_async_context_manager, as_context_manager
21
21
  from ...types.chat import ChatCompletionRetabMessage
22
22
  from ...types.documents.extractions import DocumentExtractRequest, LogExtractionRequest, RetabParsedChatCompletion, RetabParsedChatCompletionChunk, RetabParsedChoice
23
23
  from ...types.browser_canvas import BrowserCanvas
@@ -7,7 +7,7 @@ from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionRea
7
7
  from pydantic import HttpUrl
8
8
 
9
9
  from .._resource import AsyncAPIResource, SyncAPIResource
10
- from .._utils.mime import prepare_mime_document
10
+ from ..utils.mime import prepare_mime_document
11
11
  from ..types.evals import (
12
12
  CreateIterationRequest,
13
13
  DistancesResult,
@@ -6,7 +6,7 @@ import PIL.Image
6
6
  from pydantic import HttpUrl
7
7
 
8
8
  from ..._resource import AsyncAPIResource, SyncAPIResource
9
- from ..._utils.mime import prepare_mime_document
9
+ from ...utils.mime import prepare_mime_document
10
10
  from ...types.evaluations import DocumentItem, EvaluationDocument, PatchEvaluationDocumentRequest
11
11
  from ...types.mime import MIMEData
12
12
  from ...types.standards import PreparedRequest, DeleteResponse, FieldUnset
@@ -18,10 +18,10 @@ from pydantic_core import PydanticUndefined
18
18
  from tqdm import tqdm
19
19
 
20
20
  from .._resource import AsyncAPIResource, SyncAPIResource
21
- from .._utils.ai_models import assert_valid_model_extraction, get_provider_for_model
22
- from .._utils.chat import convert_to_anthropic_format, convert_to_openai_format, separate_messages
23
- from .._utils.display import Metrics, display_metrics, process_dataset_and_compute_metrics
24
- from .._utils.json_schema import load_json_schema
21
+ from ..utils.ai_models import assert_valid_model_extraction, get_provider_for_model
22
+ from ..utils.chat import convert_to_anthropic_format, convert_to_openai_format, separate_messages
23
+ from ..utils.display import Metrics, display_metrics, process_dataset_and_compute_metrics
24
+ from ..utils.json_schema import load_json_schema
25
25
  from ..types.chat import ChatCompletionRetabMessage
26
26
  from ..types.modalities import Modality
27
27
  from ..types.schemas.object import Schema
@@ -3,7 +3,7 @@ from typing import Literal, Optional
3
3
  from pydantic_core import PydanticUndefined
4
4
 
5
5
  from ...._resource import AsyncAPIResource, SyncAPIResource
6
- from ...._utils.ai_models import assert_valid_model_extraction
6
+ from ....utils.ai_models import assert_valid_model_extraction
7
7
  from ....types.automations.endpoints import Endpoint, ListEndpoints, UpdateEndpointRequest
8
8
  from ....types.standards import PreparedRequest
9
9
 
@@ -6,7 +6,7 @@ from pydantic import EmailStr, HttpUrl
6
6
  from pydantic_core import PydanticUndefined
7
7
 
8
8
  from ...._resource import AsyncAPIResource, SyncAPIResource
9
- from ...._utils.mime import prepare_mime_document
9
+ from ....utils.mime import prepare_mime_document
10
10
  from ....types.automations.mailboxes import ListMailboxes, Mailbox, UpdateMailboxRequest
11
11
  from ....types.mime import EmailData, MIMEData
12
12
  from ....types.standards import PreparedRequest
@@ -6,7 +6,7 @@ from PIL.Image import Image
6
6
  from pydantic import HttpUrl
7
7
 
8
8
  from ...._resource import AsyncAPIResource, SyncAPIResource
9
- from ...._utils.mime import prepare_mime_document
9
+ from ....utils.mime import prepare_mime_document
10
10
  from ....types.logs import AutomationLog
11
11
  from ....types.mime import MIMEData
12
12
  from ....types.standards import PreparedRequest
@@ -1,7 +1,7 @@
1
1
  import base64
2
2
  from io import IOBase
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Literal
4
+ from typing import Any, List, Literal
5
5
 
6
6
  import PIL.Image
7
7
  from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionReasoningEffort
@@ -9,8 +9,9 @@ from pydantic import BaseModel, HttpUrl
9
9
  from pydantic_core import PydanticUndefined
10
10
 
11
11
  from ..._resource import AsyncAPIResource, SyncAPIResource
12
- from ..._utils.ai_models import assert_valid_model_extraction
13
- from ..._utils.mime import MIMEData, prepare_mime_document
12
+ from ...utils.ai_models import assert_valid_model_extraction
13
+ from ...utils.json_schema import load_json_schema
14
+ from ...utils.mime import MIMEData, prepare_mime_document
14
15
  from ...types.browser_canvas import BrowserCanvas
15
16
  from ...types.documents.extractions import RetabParsedChatCompletion
16
17
  from ...types.logs import ProcessorConfig, UpdateProcessorRequest
@@ -31,7 +32,7 @@ class ProcessorsMixin:
31
32
  def prepare_create(
32
33
  self,
33
34
  name: str,
34
- json_schema: dict[str, Any],
35
+ json_schema: dict[str, Any] | Path | str,
35
36
  modality: Modality = "native",
36
37
  model: str = "gpt-4o-mini",
37
38
  temperature: float = PydanticUndefined, # type: ignore[assignment]
@@ -42,9 +43,12 @@ class ProcessorsMixin:
42
43
  ) -> PreparedRequest:
43
44
  assert_valid_model_extraction(model)
44
45
 
46
+ # Load the JSON schema from file path, string, or dict
47
+ loaded_schema = load_json_schema(json_schema)
48
+
45
49
  processor_config = ProcessorConfig(
46
50
  name=name,
47
- json_schema=json_schema,
51
+ json_schema=loaded_schema,
48
52
  modality=modality,
49
53
  model=model,
50
54
  temperature=temperature,
@@ -104,7 +108,7 @@ class ProcessorsMixin:
104
108
  image_resolution_dpi: int | None = None,
105
109
  browser_canvas: BrowserCanvas | None = None,
106
110
  model: str | None = None,
107
- json_schema: dict[str, Any] | None = None,
111
+ json_schema: dict[str, Any] | Path | str | None = None,
108
112
  temperature: float | None = None,
109
113
  reasoning_effort: ChatCompletionReasoningEffort | None = None,
110
114
  n_consensus: int | None = None,
@@ -112,13 +116,18 @@ class ProcessorsMixin:
112
116
  if model is not None:
113
117
  assert_valid_model_extraction(model)
114
118
 
119
+ # Load the JSON schema from file path, string, or dict if provided
120
+ loaded_schema = None
121
+ if json_schema is not None:
122
+ loaded_schema = load_json_schema(json_schema)
123
+
115
124
  update_request = UpdateProcessorRequest(
116
125
  name=name,
117
126
  modality=modality,
118
127
  image_resolution_dpi=image_resolution_dpi,
119
128
  browser_canvas=browser_canvas,
120
129
  model=model,
121
- json_schema=json_schema,
130
+ json_schema=loaded_schema,
122
131
  temperature=temperature,
123
132
  reasoning_effort=reasoning_effort,
124
133
  n_consensus=n_consensus,
@@ -203,7 +212,7 @@ class Processors(SyncAPIResource, ProcessorsMixin):
203
212
  def create(
204
213
  self,
205
214
  name: str,
206
- json_schema: Dict[str, Any],
215
+ json_schema: dict[str, Any] | Path | str,
207
216
  modality: Modality = "native",
208
217
  model: str = "gpt-4o-mini",
209
218
  temperature: float = PydanticUndefined, # type: ignore[assignment]
@@ -216,7 +225,7 @@ class Processors(SyncAPIResource, ProcessorsMixin):
216
225
 
217
226
  Args:
218
227
  name: Name of the processor
219
- json_schema: JSON schema for the processor
228
+ json_schema: JSON schema for the processor. Can be a dictionary, file path (Path or str), or JSON string.
220
229
  image_resolution_dpi: Optional image resolution DPI
221
230
  browser_canvas: Optional browser canvas size
222
231
  modality: Processing modality (currently only "native" supported)
@@ -295,7 +304,7 @@ class Processors(SyncAPIResource, ProcessorsMixin):
295
304
  image_resolution_dpi: int | None = None,
296
305
  browser_canvas: BrowserCanvas | None = None,
297
306
  model: str | None = None,
298
- json_schema: dict[str, Any] | None = None,
307
+ json_schema: dict[str, Any] | Path | str | None = None,
299
308
  temperature: float | None = None,
300
309
  reasoning_effort: ChatCompletionReasoningEffort | None = None,
301
310
  n_consensus: int | None = None,
@@ -309,7 +318,7 @@ class Processors(SyncAPIResource, ProcessorsMixin):
309
318
  image_resolution_dpi: New image resolution DPI
310
319
  browser_canvas: New browser canvas size
311
320
  model: New AI model
312
- json_schema: New JSON schema for the processor
321
+ json_schema: New JSON schema for the processor. Can be a dictionary, file path (Path or str), or JSON string.
313
322
  temperature: New temperature setting
314
323
  reasoning_effort: The effort level for the model to reason about the input data.
315
324
  n_consensus: New number of consensus required
@@ -378,7 +387,7 @@ class AsyncProcessors(AsyncAPIResource, ProcessorsMixin):
378
387
  async def create(
379
388
  self,
380
389
  name: str,
381
- json_schema: Dict[str, Any],
390
+ json_schema: dict[str, Any] | Path | str,
382
391
  modality: Modality = "native",
383
392
  model: str = "gpt-4o-mini",
384
393
  temperature: float = PydanticUndefined, # type: ignore[assignment]
@@ -432,7 +441,7 @@ class AsyncProcessors(AsyncAPIResource, ProcessorsMixin):
432
441
  image_resolution_dpi: int | None = None,
433
442
  browser_canvas: BrowserCanvas | None = None,
434
443
  model: str | None = None,
435
- json_schema: dict[str, Any] | None = None,
444
+ json_schema: dict[str, Any] | Path | str | None = None,
436
445
  temperature: float | None = None,
437
446
  reasoning_effort: ChatCompletionReasoningEffort | None = None,
438
447
  n_consensus: int | None = None,
@@ -446,7 +455,7 @@ class AsyncProcessors(AsyncAPIResource, ProcessorsMixin):
446
455
  image_resolution_dpi: New image resolution DPI
447
456
  browser_canvas: New browser canvas size
448
457
  model: New AI model
449
- json_schema: New JSON schema for the processor
458
+ json_schema: New JSON schema for the processor. Can be a dictionary, file path (Path or str), or JSON string.
450
459
  temperature: New temperature setting
451
460
  reasoning_effort: The effort level for the model to reason about the input data.
452
461
  n_consensus: New number of consensus required
@@ -3,7 +3,7 @@
3
3
  # import json
4
4
 
5
5
  # from .._resource import SyncAPIResource, AsyncAPIResource
6
- # from .._utils.json_schema import load_json_schema
6
+ # from ..utils.json_schema import load_json_schema
7
7
  # from ..types.jobs import JobResponse
8
8
  # from ..types.jobs.prompt_optimization import PromptOptimizationObject, PromptOptimizationProps, PromptOptimizationJobInputData, PromptOptimizationJob
9
9
 
@@ -7,9 +7,9 @@ from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionRea
7
7
  from pydantic import BaseModel
8
8
 
9
9
  from .._resource import AsyncAPIResource, SyncAPIResource
10
- from .._utils.ai_models import assert_valid_model_schema_generation
11
- from .._utils.json_schema import load_json_schema
12
- from .._utils.mime import prepare_mime_document_list
10
+ from ..utils.ai_models import assert_valid_model_schema_generation
11
+ from ..utils.json_schema import load_json_schema
12
+ from ..utils.mime import prepare_mime_document_list
13
13
  from ..types.mime import MIMEData
14
14
  from ..types.modalities import Modality
15
15
  from ..types.schemas.enhance import EnhanceSchemaConfig, EnhanceSchemaConfigDict, EnhanceSchemaRequest
@@ -7,7 +7,7 @@ from openai.types.shared_params.reasoning import Reasoning
7
7
  from openai.types.shared_params.response_format_json_schema import ResponseFormatJSONSchema
8
8
  from pydantic import BaseModel, ConfigDict, Field
9
9
 
10
- from .._utils.ai_models import get_provider_for_model
10
+ from ..utils.ai_models import get_provider_for_model
11
11
  from .ai_models import AIProvider
12
12
  from .chat import ChatCompletionRetabMessage
13
13
 
@@ -10,10 +10,10 @@ from openai.types.chat.chat_completion_message_param import ChatCompletionMessag
10
10
  from openai.types.responses.response_input_param import ResponseInputItemParam
11
11
  from pydantic import BaseModel, Field, computed_field
12
12
 
13
- from ..._utils.chat import convert_to_anthropic_format, convert_to_google_genai_format, str_messages
14
- from ..._utils.chat import convert_to_openai_format as convert_to_openai_completions_api_format
15
- from ..._utils.display import count_image_tokens, count_text_tokens
16
- from ..._utils.responses import convert_to_openai_format as convert_to_openai_responses_api_format
13
+ from ...utils.chat import convert_to_anthropic_format, convert_to_google_genai_format, str_messages
14
+ from ...utils.chat import convert_to_openai_format as convert_to_openai_completions_api_format
15
+ from ...utils.display import count_image_tokens, count_text_tokens
16
+ from ...utils.responses import convert_to_openai_format as convert_to_openai_responses_api_format
17
17
  from ..chat import ChatCompletionRetabMessage
18
18
  from ..mime import MIMEData
19
19
  from ..modalities import Modality
@@ -15,7 +15,7 @@ from openai.types.responses.response import Response
15
15
  from openai.types.responses.response_input_param import ResponseInputItemParam
16
16
  from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, computed_field, field_validator, model_validator
17
17
 
18
- from ..._utils.usage.usage import CostBreakdown, compute_cost_from_model, compute_cost_from_model_with_breakdown
18
+ from ...utils.usage.usage import CostBreakdown, compute_cost_from_model, compute_cost_from_model_with_breakdown
19
19
  from ..ai_models import Amount
20
20
  from ..chat import ChatCompletionRetabMessage
21
21
  from ..mime import MIMEData
@@ -6,8 +6,8 @@ from typing import Any, List, Literal, Optional
6
6
  import nanoid # type: ignore
7
7
  from pydantic import BaseModel, Field, computed_field
8
8
 
9
- from .._utils.json_schema import clean_schema, compute_schema_data_id
10
- from .._utils.mime import generate_blake2b_hash_from_string
9
+ from ..utils.json_schema import clean_schema, compute_schema_data_id
10
+ from ..utils.mime import generate_blake2b_hash_from_string
11
11
  from .ai_models import Amount
12
12
  from .inference_settings import InferenceSettings
13
13
  from .mime import MIMEData
@@ -6,8 +6,8 @@ from typing import Any, Optional, Self
6
6
  import nanoid # type: ignore
7
7
  from pydantic import BaseModel, Field, computed_field, model_validator
8
8
 
9
- from ..._utils.json_schema import clean_schema
10
- from ..._utils.mime import generate_blake2b_hash_from_string
9
+ from ...utils.json_schema import clean_schema
10
+ from ...utils.mime import generate_blake2b_hash_from_string
11
11
  from ..inference_settings import InferenceSettings
12
12
  from ..metrics import MetricResult
13
13
  from ..predictions import PredictionData
@@ -5,8 +5,8 @@ from typing import Any, Optional
5
5
  import nanoid # type: ignore
6
6
  from pydantic import BaseModel, Field, computed_field
7
7
 
8
- from ..._utils.json_schema import compute_schema_data_id
9
- from ..._utils.mime import generate_blake2b_hash_from_string
8
+ from ...utils.json_schema import compute_schema_data_id
9
+ from ...utils.mime import generate_blake2b_hash_from_string
10
10
  from ..inference_settings import InferenceSettings
11
11
  from .documents import EvaluationDocument
12
12
  from .iterations import Iteration
@@ -9,7 +9,7 @@ from pydantic import BaseModel, Field, computed_field, model_validator
9
9
  from retab.types.chat import ChatCompletionRetabMessage
10
10
  from retab.types.documents.extractions import RetabParsedChatCompletion
11
11
 
12
- from .._utils.usage.usage import CostBreakdown, compute_cost_from_model, compute_cost_from_model_with_breakdown
12
+ from ..utils.usage.usage import CostBreakdown, compute_cost_from_model, compute_cost_from_model_with_breakdown
13
13
  from .ai_models import Amount
14
14
  from .modalities import Modality
15
15
 
@@ -1,7 +1,7 @@
1
1
  # from typing import Literal, Any
2
2
  # from pydantic import BaseModel, computed_field
3
3
  # from ..mime import MIMEData
4
- # from ..._utils.benchmarking import ExtractionAnalysis
4
+ # from ...utils.benchmarking import ExtractionAnalysis
5
5
 
6
6
  # MAX_CONCURRENCY = 15
7
7
 
@@ -7,9 +7,9 @@ from openai.types.chat.chat_completion import ChatCompletion
7
7
  from openai.types.chat.chat_completion_reasoning_effort import ChatCompletionReasoningEffort
8
8
  from pydantic import BaseModel, EmailStr, Field, HttpUrl, computed_field, field_validator
9
9
 
10
- from .._utils.json_schema import compute_schema_data_id
11
- from .._utils.mime import generate_blake2b_hash_from_string
12
- from .._utils.usage.usage import CostBreakdown, compute_cost_from_model, compute_cost_from_model_with_breakdown
10
+ from ..utils.json_schema import compute_schema_data_id
11
+ from ..utils.mime import generate_blake2b_hash_from_string
12
+ from ..utils.usage.usage import CostBreakdown, compute_cost_from_model, compute_cost_from_model_with_breakdown
13
13
  from .ai_models import Amount
14
14
  from .documents.extractions import RetabParsedChatCompletion
15
15
  from .mime import BaseMIMEData
@@ -10,9 +10,9 @@ from openai.types.chat.chat_completion_message_param import ChatCompletionMessag
10
10
  from openai.types.responses.response_input_param import ResponseInputItemParam
11
11
  from pydantic import BaseModel, Field, PrivateAttr, computed_field, model_validator
12
12
 
13
- from ..._utils.chat import convert_to_anthropic_format, convert_to_google_genai_format
14
- from ..._utils.chat import convert_to_openai_format as convert_to_openai_completions_api_format
15
- from ..._utils.json_schema import (
13
+ from ...utils.chat import convert_to_anthropic_format, convert_to_google_genai_format
14
+ from ...utils.chat import convert_to_openai_format as convert_to_openai_completions_api_format
15
+ from ...utils.json_schema import (
16
16
  convert_basemodel_to_partial_basemodel,
17
17
  convert_json_schema_to_basemodel,
18
18
  create_reasoning_schema,
@@ -25,7 +25,7 @@ from ..._utils.json_schema import (
25
25
  load_json_schema,
26
26
  schema_to_ts_type,
27
27
  )
28
- from ..._utils.responses import convert_to_openai_format as convert_to_openai_responses_api_format
28
+ from ...utils.responses import convert_to_openai_format as convert_to_openai_responses_api_format
29
29
  from ...types.standards import StreamingBaseModel
30
30
  from ..chat import ChatCompletionRetabMessage
31
31
 
@@ -4,7 +4,7 @@ from typing import Any, Literal, Optional
4
4
  import nanoid # type: ignore
5
5
  from pydantic import BaseModel, Field, PrivateAttr, computed_field
6
6
 
7
- from ..._utils.json_schema import generate_schema_data_id, generate_schema_id
7
+ from ...utils.json_schema import generate_schema_data_id, generate_schema_id
8
8
  from ...types.mime import MIMEData
9
9
 
10
10
 
@@ -5,7 +5,7 @@ from pydantic import BaseModel, Field
5
5
 
6
6
  # https://platform.openai.com/docs/guides/prompt-caching
7
7
  from ...types.ai_models import Amount, Pricing
8
- from ..._utils.ai_models import get_model_card
8
+ from ...utils.ai_models import get_model_card
9
9
 
10
10
  # ─── PRICING MODELS ────────────────────────────────────────────────────────────
11
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: retab
3
- Version: 0.0.40
3
+ Version: 0.0.41
4
4
  Summary: Retab official python library
5
5
  Home-page: https://github.com/Retab-dev/retab
6
6
  Author: Retab
@@ -45,7 +45,7 @@ Requires-Dist: ruff
45
45
 
46
46
  <div align="center" style="margin-bottom: 1em;">
47
47
 
48
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/retab-logo.png" alt="Retab Logo" width="150">
48
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/retab-logo.png" alt="Retab Logo" width="150">
49
49
 
50
50
 
51
51
  *The AI Automation Platform*
@@ -95,7 +95,7 @@ You come with your own API key from your favorite AI provider, and we handle the
95
95
  We currently support [OpenAI](https://platform.openai.com/docs/overview), [Anthropic](https://www.anthropic.com/api), [Gemini](https://aistudio.google.com/prompts/new_chat) and [xAI](https://x.ai/api) models.
96
96
 
97
97
  <p align="center">
98
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/supported_models.png" alt="Supported Models" width="600">
98
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/supported_models.png" alt="Supported Models" width="600">
99
99
  </p>
100
100
 
101
101
  ---
@@ -105,7 +105,7 @@ We currently support [OpenAI](https://platform.openai.com/docs/overview), [Anthr
105
105
  Explore our [Playground](https://www.retab.dev/dashboard/playground) and create your first automations easily 🚀!
106
106
 
107
107
  <p align="center">
108
- <img src="https://raw.githubusercontent.com/Retab/retab/refs/heads/main/assets/retab-playground.png" alt="Retab Playground" width="600">
108
+ <img src="https://raw.githubusercontent.com/Retab-dev/retab/refs/heads/main/assets/retab-playground.png" alt="Retab Playground" width="600">
109
109
  </p>
110
110
 
111
111
  ---
@@ -244,7 +244,7 @@ completion = client.beta.chat.completions.parse(
244
244
  print("Extracted data:", completion.choices[0].message.parsed)
245
245
 
246
246
  # Validate the response against the original schema if you want to remove the reasoning fields
247
- from retab._utils.json_schema import filter_auxiliary_fields_json
247
+ from retab.utils.json_schema import filter_auxiliary_fields_json
248
248
  assert completion.choices[0].message.content is not None
249
249
  extraction = schema_obj.pydantic_model.model_validate(
250
250
  filter_auxiliary_fields_json(completion.choices[0].message.content, schema_obj.pydantic_model)
@@ -10,22 +10,6 @@ retab.egg-info/SOURCES.txt
10
10
  retab.egg-info/dependency_links.txt
11
11
  retab.egg-info/requires.txt
12
12
  retab.egg-info/top_level.txt
13
- retab/_utils/__init__.py
14
- retab/_utils/ai_models.py
15
- retab/_utils/benchmarking.py
16
- retab/_utils/chat.py
17
- retab/_utils/display.py
18
- retab/_utils/json_schema.py
19
- retab/_utils/mime.py
20
- retab/_utils/responses.py
21
- retab/_utils/stream_context_managers.py
22
- retab/_utils/_model_cards/anthropic.yaml
23
- retab/_utils/_model_cards/auto.yaml
24
- retab/_utils/_model_cards/gemini.yaml
25
- retab/_utils/_model_cards/openai.yaml
26
- retab/_utils/_model_cards/xai.yaml
27
- retab/_utils/usage/__init__.py
28
- retab/_utils/usage/usage.py
29
13
  retab/resources/__init__.py
30
14
  retab/resources/evals.py
31
15
  retab/resources/files.py
@@ -115,6 +99,22 @@ retab/types/schemas/object.py
115
99
  retab/types/schemas/templates.py
116
100
  retab/types/secrets/__init__.py
117
101
  retab/types/secrets/external_api_keys.py
102
+ retab/utils/__init__.py
103
+ retab/utils/ai_models.py
104
+ retab/utils/benchmarking.py
105
+ retab/utils/chat.py
106
+ retab/utils/display.py
107
+ retab/utils/json_schema.py
108
+ retab/utils/mime.py
109
+ retab/utils/responses.py
110
+ retab/utils/stream_context_managers.py
111
+ retab/utils/_model_cards/anthropic.yaml
112
+ retab/utils/_model_cards/auto.yaml
113
+ retab/utils/_model_cards/gemini.yaml
114
+ retab/utils/_model_cards/openai.yaml
115
+ retab/utils/_model_cards/xai.yaml
116
+ retab/utils/usage/__init__.py
117
+ retab/utils/usage/usage.py
118
118
  tests/test_automations_links.py
119
119
  tests/test_automations_mailboxes.py
120
120
  tests/test_documents_api.py
@@ -6,7 +6,7 @@ with open("requirements.txt") as f:
6
6
 
7
7
  setup(
8
8
  name="retab",
9
- version="0.0.40",
9
+ version="0.0.41",
10
10
  author="Retab",
11
11
  author_email="contact@retab.com",
12
12
  description="Retab official python library",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes