sarvamai 0.1.22a3__py3-none-any.whl → 0.1.22a7__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 (90) hide show
  1. sarvamai/__init__.py +62 -9
  2. sarvamai/client.py +3 -0
  3. sarvamai/core/client_wrapper.py +2 -2
  4. sarvamai/doc_digitization_job/__init__.py +4 -0
  5. sarvamai/doc_digitization_job/client.py +776 -0
  6. sarvamai/doc_digitization_job/job.py +496 -0
  7. sarvamai/doc_digitization_job/raw_client.py +1176 -0
  8. sarvamai/requests/__init__.py +20 -0
  9. sarvamai/requests/audio_data.py +0 -6
  10. sarvamai/requests/configure_connection.py +4 -0
  11. sarvamai/requests/configure_connection_data.py +40 -11
  12. sarvamai/requests/doc_digitization_create_job_response.py +25 -0
  13. sarvamai/requests/doc_digitization_download_files_response.py +37 -0
  14. sarvamai/requests/doc_digitization_error_details.py +21 -0
  15. sarvamai/requests/doc_digitization_error_message.py +11 -0
  16. sarvamai/requests/doc_digitization_job_detail.py +64 -0
  17. sarvamai/requests/doc_digitization_job_parameters.py +21 -0
  18. sarvamai/requests/doc_digitization_job_status_response.py +65 -0
  19. sarvamai/requests/doc_digitization_page_error.py +24 -0
  20. sarvamai/requests/doc_digitization_upload_files_response.py +34 -0
  21. sarvamai/requests/doc_digitization_webhook_callback.py +19 -0
  22. sarvamai/requests/speech_to_text_job_parameters.py +43 -2
  23. sarvamai/requests/speech_to_text_transcription_data.py +0 -6
  24. sarvamai/requests/speech_to_text_translate_job_parameters.py +4 -1
  25. sarvamai/requests/speech_to_text_translate_transcription_data.py +0 -6
  26. sarvamai/speech_to_text/client.py +95 -10
  27. sarvamai/speech_to_text/raw_client.py +95 -10
  28. sarvamai/speech_to_text_job/client.py +60 -15
  29. sarvamai/speech_to_text_job/job.py +100 -2
  30. sarvamai/speech_to_text_job/raw_client.py +14 -10
  31. sarvamai/speech_to_text_streaming/__init__.py +4 -2
  32. sarvamai/speech_to_text_streaming/client.py +100 -47
  33. sarvamai/speech_to_text_streaming/raw_client.py +100 -47
  34. sarvamai/speech_to_text_streaming/types/__init__.py +4 -2
  35. sarvamai/speech_to_text_streaming/types/speech_to_text_streaming_input_audio_codec.py +1 -27
  36. sarvamai/speech_to_text_streaming/types/speech_to_text_streaming_mode.py +7 -0
  37. sarvamai/speech_to_text_streaming/types/speech_to_text_streaming_model.py +5 -0
  38. sarvamai/speech_to_text_translate_job/job.py +100 -2
  39. sarvamai/speech_to_text_translate_job/raw_client.py +14 -10
  40. sarvamai/speech_to_text_translate_streaming/__init__.py +0 -2
  41. sarvamai/speech_to_text_translate_streaming/client.py +18 -41
  42. sarvamai/speech_to_text_translate_streaming/raw_client.py +18 -41
  43. sarvamai/speech_to_text_translate_streaming/types/__init__.py +0 -4
  44. sarvamai/speech_to_text_translate_streaming/types/speech_to_text_translate_streaming_input_audio_codec.py +1 -27
  45. sarvamai/text/client.py +0 -12
  46. sarvamai/text/raw_client.py +0 -12
  47. sarvamai/text_to_speech/client.py +116 -14
  48. sarvamai/text_to_speech/raw_client.py +116 -14
  49. sarvamai/text_to_speech_streaming/__init__.py +2 -2
  50. sarvamai/text_to_speech_streaming/client.py +19 -6
  51. sarvamai/text_to_speech_streaming/raw_client.py +19 -6
  52. sarvamai/text_to_speech_streaming/types/__init__.py +2 -1
  53. sarvamai/text_to_speech_streaming/types/text_to_speech_streaming_model.py +5 -0
  54. sarvamai/types/__init__.py +34 -4
  55. sarvamai/types/audio_data.py +0 -6
  56. sarvamai/types/completion_event_flag.py +3 -1
  57. sarvamai/types/configure_connection.py +4 -0
  58. sarvamai/types/configure_connection_data.py +40 -11
  59. sarvamai/types/configure_connection_data_model.py +5 -0
  60. sarvamai/types/configure_connection_data_speaker.py +35 -1
  61. sarvamai/types/doc_digitization_create_job_response.py +37 -0
  62. sarvamai/types/doc_digitization_download_files_response.py +47 -0
  63. sarvamai/types/doc_digitization_error_code.py +15 -0
  64. sarvamai/types/doc_digitization_error_details.py +33 -0
  65. sarvamai/types/doc_digitization_error_message.py +23 -0
  66. sarvamai/types/doc_digitization_job_detail.py +74 -0
  67. sarvamai/types/doc_digitization_job_detail_state.py +7 -0
  68. sarvamai/types/doc_digitization_job_parameters.py +33 -0
  69. sarvamai/types/doc_digitization_job_state.py +7 -0
  70. sarvamai/types/doc_digitization_job_status_response.py +75 -0
  71. sarvamai/types/doc_digitization_output_format.py +5 -0
  72. sarvamai/types/doc_digitization_page_error.py +36 -0
  73. sarvamai/types/doc_digitization_supported_language.py +32 -0
  74. sarvamai/types/doc_digitization_upload_files_response.py +44 -0
  75. sarvamai/types/doc_digitization_webhook_callback.py +31 -0
  76. sarvamai/types/mode.py +5 -0
  77. sarvamai/types/speech_to_text_job_parameters.py +43 -2
  78. sarvamai/types/speech_to_text_model.py +1 -1
  79. sarvamai/types/speech_to_text_transcription_data.py +0 -6
  80. sarvamai/types/speech_to_text_translate_job_parameters.py +4 -1
  81. sarvamai/types/speech_to_text_translate_transcription_data.py +0 -6
  82. sarvamai/types/text_to_speech_model.py +1 -1
  83. sarvamai/types/text_to_speech_speaker.py +35 -1
  84. {sarvamai-0.1.22a3.dist-info → sarvamai-0.1.22a7.dist-info}/METADATA +1 -1
  85. {sarvamai-0.1.22a3.dist-info → sarvamai-0.1.22a7.dist-info}/RECORD +86 -56
  86. sarvamai/speech_to_text_streaming/types/speech_to_text_streaming_stream_ongoing_speech_results.py +0 -5
  87. sarvamai/speech_to_text_translate_streaming/types/speech_to_text_translate_streaming_stream_ongoing_speech_results.py +0 -5
  88. sarvamai/types/audio_data_input_audio_codec.py +0 -33
  89. sarvamai/types/response_speech_state.py +0 -7
  90. {sarvamai-0.1.22a3.dist-info → sarvamai-0.1.22a7.dist-info}/WHEEL +0 -0
@@ -2,6 +2,7 @@
2
2
 
3
3
  # isort: skip_file
4
4
 
5
+ from .text_to_speech_streaming_model import TextToSpeechStreamingModel
5
6
  from .text_to_speech_streaming_send_completion_event import TextToSpeechStreamingSendCompletionEvent
6
7
 
7
- __all__ = ["TextToSpeechStreamingSendCompletionEvent"]
8
+ __all__ = ["TextToSpeechStreamingModel", "TextToSpeechStreamingSendCompletionEvent"]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ TextToSpeechStreamingModel = typing.Union[typing.Literal["bulbul:v2", "bulbul:v3-beta"], typing.Any]
@@ -3,7 +3,6 @@
3
3
  # isort: skip_file
4
4
 
5
5
  from .audio_data import AudioData
6
- from .audio_data_input_audio_codec import AudioDataInputAudioCodec
7
6
  from .audio_message import AudioMessage
8
7
  from .audio_output import AudioOutput
9
8
  from .audio_output_data import AudioOutputData
@@ -26,6 +25,7 @@ from .completion_usage import CompletionUsage
26
25
  from .config_message import ConfigMessage
27
26
  from .configure_connection import ConfigureConnection
28
27
  from .configure_connection_data import ConfigureConnectionData
28
+ from .configure_connection_data_model import ConfigureConnectionDataModel
29
29
  from .configure_connection_data_output_audio_bitrate import ConfigureConnectionDataOutputAudioBitrate
30
30
  from .configure_connection_data_output_audio_codec import ConfigureConnectionDataOutputAudioCodec
31
31
  from .configure_connection_data_speaker import ConfigureConnectionDataSpeaker
@@ -34,6 +34,21 @@ from .connection_sample_rate import ConnectionSampleRate
34
34
  from .create_chat_completion_response import CreateChatCompletionResponse
35
35
  from .diarized_entry import DiarizedEntry
36
36
  from .diarized_transcript import DiarizedTranscript
37
+ from .doc_digitization_create_job_response import DocDigitizationCreateJobResponse
38
+ from .doc_digitization_download_files_response import DocDigitizationDownloadFilesResponse
39
+ from .doc_digitization_error_code import DocDigitizationErrorCode
40
+ from .doc_digitization_error_details import DocDigitizationErrorDetails
41
+ from .doc_digitization_error_message import DocDigitizationErrorMessage
42
+ from .doc_digitization_job_detail import DocDigitizationJobDetail
43
+ from .doc_digitization_job_detail_state import DocDigitizationJobDetailState
44
+ from .doc_digitization_job_parameters import DocDigitizationJobParameters
45
+ from .doc_digitization_job_state import DocDigitizationJobState
46
+ from .doc_digitization_job_status_response import DocDigitizationJobStatusResponse
47
+ from .doc_digitization_output_format import DocDigitizationOutputFormat
48
+ from .doc_digitization_page_error import DocDigitizationPageError
49
+ from .doc_digitization_supported_language import DocDigitizationSupportedLanguage
50
+ from .doc_digitization_upload_files_response import DocDigitizationUploadFilesResponse
51
+ from .doc_digitization_webhook_callback import DocDigitizationWebhookCallback
37
52
  from .error_code import ErrorCode
38
53
  from .error_data import ErrorData
39
54
  from .error_details import ErrorDetails
@@ -54,10 +69,10 @@ from .input_audio_codec import InputAudioCodec
54
69
  from .job_state import JobState
55
70
  from .job_status_v_1_response import JobStatusV1Response
56
71
  from .language_identification_response import LanguageIdentificationResponse
72
+ from .mode import Mode
57
73
  from .numerals_format import NumeralsFormat
58
74
  from .ping_signal import PingSignal
59
75
  from .reasoning_effort import ReasoningEffort
60
- from .response_speech_state import ResponseSpeechState
61
76
  from .response_type import ResponseType
62
77
  from .role import Role
63
78
  from .sarvam_model_ids import SarvamModelIds
@@ -105,7 +120,6 @@ from .transliteration_response import TransliterationResponse
105
120
 
106
121
  __all__ = [
107
122
  "AudioData",
108
- "AudioDataInputAudioCodec",
109
123
  "AudioMessage",
110
124
  "AudioOutput",
111
125
  "AudioOutputData",
@@ -126,6 +140,7 @@ __all__ = [
126
140
  "ConfigMessage",
127
141
  "ConfigureConnection",
128
142
  "ConfigureConnectionData",
143
+ "ConfigureConnectionDataModel",
129
144
  "ConfigureConnectionDataOutputAudioBitrate",
130
145
  "ConfigureConnectionDataOutputAudioCodec",
131
146
  "ConfigureConnectionDataSpeaker",
@@ -134,6 +149,21 @@ __all__ = [
134
149
  "CreateChatCompletionResponse",
135
150
  "DiarizedEntry",
136
151
  "DiarizedTranscript",
152
+ "DocDigitizationCreateJobResponse",
153
+ "DocDigitizationDownloadFilesResponse",
154
+ "DocDigitizationErrorCode",
155
+ "DocDigitizationErrorDetails",
156
+ "DocDigitizationErrorMessage",
157
+ "DocDigitizationJobDetail",
158
+ "DocDigitizationJobDetailState",
159
+ "DocDigitizationJobParameters",
160
+ "DocDigitizationJobState",
161
+ "DocDigitizationJobStatusResponse",
162
+ "DocDigitizationOutputFormat",
163
+ "DocDigitizationPageError",
164
+ "DocDigitizationSupportedLanguage",
165
+ "DocDigitizationUploadFilesResponse",
166
+ "DocDigitizationWebhookCallback",
137
167
  "ErrorCode",
138
168
  "ErrorData",
139
169
  "ErrorDetails",
@@ -154,10 +184,10 @@ __all__ = [
154
184
  "JobState",
155
185
  "JobStatusV1Response",
156
186
  "LanguageIdentificationResponse",
187
+ "Mode",
157
188
  "NumeralsFormat",
158
189
  "PingSignal",
159
190
  "ReasoningEffort",
160
- "ResponseSpeechState",
161
191
  "ResponseType",
162
192
  "Role",
163
193
  "SarvamModelIds",
@@ -4,7 +4,6 @@ import typing
4
4
 
5
5
  import pydantic
6
6
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
- from .audio_data_input_audio_codec import AudioDataInputAudioCodec
8
7
 
9
8
 
10
9
  class AudioData(UniversalBaseModel):
@@ -29,11 +28,6 @@ class AudioData(UniversalBaseModel):
29
28
  Audio encoding format
30
29
  """
31
30
 
32
- input_audio_codec: typing.Optional[AudioDataInputAudioCodec] = pydantic.Field(default=None)
33
- """
34
- Audio codec/format of the input file. Our API automatically detects all codec formats, but for PCM files specifically (pcm_s16le, pcm_l16, pcm_raw), you must pass this parameter. PCM files supports sample rate 16000 and 8000.
35
- """
36
-
37
31
  if IS_PYDANTIC_V2:
38
32
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
39
33
  else:
@@ -1,3 +1,5 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
- CompletionEventFlag = bool
3
+ import typing
4
+
5
+ CompletionEventFlag = typing.Union[typing.Literal["true", "false"], typing.Any]
@@ -13,6 +13,10 @@ class ConfigureConnection(UniversalBaseModel):
13
13
  This initializes TTS parameters and can be updated at any time during the WebSocket lifecycle
14
14
  by sending a new config message. When a config update is sent, any text currently in the buffer
15
15
  will be automatically flushed and processed before applying the new configuration.
16
+
17
+ **Model-Specific Notes:**
18
+ - **bulbul:v2:** Supports pitch, loudness, pace (0.3-3.0). Default sample rate: 22050 Hz.
19
+ - **bulbul:v3-beta:** Does NOT support pitch/loudness. Pace range: 0.5-2.0. Supports temperature. Default sample rate: 24000 Hz.
16
20
  """
17
21
 
18
22
  type: typing.Literal["config"] = "config"
@@ -4,6 +4,7 @@ import typing
4
4
 
5
5
  import pydantic
6
6
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .configure_connection_data_model import ConfigureConnectionDataModel
7
8
  from .configure_connection_data_output_audio_bitrate import ConfigureConnectionDataOutputAudioBitrate
8
9
  from .configure_connection_data_output_audio_codec import ConfigureConnectionDataOutputAudioCodec
9
10
  from .configure_connection_data_speaker import ConfigureConnectionDataSpeaker
@@ -11,21 +12,25 @@ from .configure_connection_data_target_language_code import ConfigureConnectionD
11
12
 
12
13
 
13
14
  class ConfigureConnectionData(UniversalBaseModel):
15
+ model: typing.Optional[ConfigureConnectionDataModel] = pydantic.Field(default=None)
16
+ """
17
+ Specifies the model to use for text-to-speech conversion.
18
+ - **bulbul:v2** (default): Standard TTS model with pitch/loudness support
19
+ - **bulbul:v3-beta**: Advanced model with temperature control (no pitch/loudness)
20
+ """
21
+
14
22
  target_language_code: ConfigureConnectionDataTargetLanguageCode = pydantic.Field()
15
23
  """
16
- The language of the text is BCP-47 format
24
+ The language of the text in BCP-47 format
17
25
  """
18
26
 
19
27
  speaker: ConfigureConnectionDataSpeaker = pydantic.Field()
20
28
  """
21
29
  The speaker voice to be used for the output audio.
22
30
 
23
- **Default:** Anushka
24
-
25
- **Model Compatibility (Speakers compatible with respective model):**
26
- - **bulbul:v2:**
27
- - Female: Anushka, Manisha, Vidya, Arya
28
- - Male: Abhilash, Karun, Hitesh
31
+ **Model Compatibility:**
32
+ - **bulbul:v2:** anushka (default), abhilash, manisha, vidya, arya, karun, hitesh
33
+ - **bulbul:v3-beta:** aditya (default), ritu, priya, neha, rahul, pooja, rohan, simran, kavya, amit, dev, ishita, shreya, ratan, varun, manan, sumit, roopa, kabir, aayan, shubh, ashutosh, advait, amelia, sophia
29
34
 
30
35
  **Note:** Speaker selection must match the chosen model version.
31
36
  """
@@ -35,13 +40,18 @@ class ConfigureConnectionData(UniversalBaseModel):
35
40
  Controls the pitch of the audio. Lower values result in a deeper voice,
36
41
  while higher values make it sharper. The suitable range is between -0.75
37
42
  and 0.75. Default is 0.0.
43
+
44
+ **Note:** NOT supported for bulbul:v3-beta. Will be ignored if provided.
38
45
  """
39
46
 
40
47
  pace: typing.Optional[float] = pydantic.Field(default=None)
41
48
  """
42
49
  Controls the speed of the audio. Lower values result in slower speech,
43
- while higher values make it faster. The suitable range is between 0.5
44
- and 2.0. Default is 1.0.
50
+ while higher values make it faster. Default is 1.0.
51
+
52
+ **Model-specific ranges:**
53
+ - **bulbul:v2:** 0.3 to 3.0
54
+ - **bulbul:v3-beta:** 0.5 to 2.0
45
55
  """
46
56
 
47
57
  loudness: typing.Optional[float] = pydantic.Field(default=None)
@@ -49,19 +59,38 @@ class ConfigureConnectionData(UniversalBaseModel):
49
59
  Controls the loudness of the audio. Lower values result in quieter audio,
50
60
  while higher values make it louder. The suitable range is between 0.3
51
61
  and 3.0. Default is 1.0.
62
+
63
+ **Note:** NOT supported for bulbul:v3-beta. Will be ignored if provided.
64
+ """
65
+
66
+ temperature: typing.Optional[float] = pydantic.Field(default=None)
67
+ """
68
+ Controls the randomness of the output. Lower values make the output more
69
+ focused and deterministic, while higher values make it more random.
70
+ The suitable range is between 0.01 and 1.0. Default is 0.6.
71
+
72
+ **Note:** Only supported for bulbul:v3-beta. Will be ignored for bulbul:v2.
52
73
  """
53
74
 
54
75
  speech_sample_rate: typing.Optional[int] = pydantic.Field(default=None)
55
76
  """
56
77
  Specifies the sample rate of the output audio. Supported values are
57
- 8000, 16000, 22050, 24000 Hz. If not provided, the default is 22050 Hz.
78
+ 8000, 16000, 22050, 24000 Hz.
79
+
80
+ **Model-specific defaults:**
81
+ - **bulbul:v2:** 22050 Hz
82
+ - **bulbul:v3-beta:** 24000 Hz
58
83
  """
59
84
 
60
85
  enable_preprocessing: typing.Optional[bool] = pydantic.Field(default=None)
61
86
  """
62
87
  Controls whether normalization of English words and numeric entities
63
88
  (e.g., numbers, dates) is performed. Set to true for better handling
64
- of mixed-language text. Default is false.
89
+ of mixed-language text.
90
+
91
+ **Model-specific defaults:**
92
+ - **bulbul:v2:** false (optional)
93
+ - **bulbul:v3-beta:** Always enabled (cannot be disabled)
65
94
  """
66
95
 
67
96
  output_audio_codec: typing.Optional[ConfigureConnectionDataOutputAudioCodec] = pydantic.Field(default=None)
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ ConfigureConnectionDataModel = typing.Union[typing.Literal["bulbul:v2", "bulbul:v3-beta"], typing.Any]
@@ -3,5 +3,39 @@
3
3
  import typing
4
4
 
5
5
  ConfigureConnectionDataSpeaker = typing.Union[
6
- typing.Literal["anushka", "abhilash", "manisha", "vidya", "arya", "karun", "hitesh"], typing.Any
6
+ typing.Literal[
7
+ "anushka",
8
+ "abhilash",
9
+ "manisha",
10
+ "vidya",
11
+ "arya",
12
+ "karun",
13
+ "hitesh",
14
+ "aditya",
15
+ "ritu",
16
+ "priya",
17
+ "neha",
18
+ "rahul",
19
+ "pooja",
20
+ "rohan",
21
+ "simran",
22
+ "kavya",
23
+ "amit",
24
+ "dev",
25
+ "ishita",
26
+ "shreya",
27
+ "ratan",
28
+ "varun",
29
+ "manan",
30
+ "sumit",
31
+ "roopa",
32
+ "kabir",
33
+ "aayan",
34
+ "shubh",
35
+ "ashutosh",
36
+ "advait",
37
+ "amelia",
38
+ "sophia",
39
+ ],
40
+ typing.Any,
7
41
  ]
@@ -0,0 +1,37 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .doc_digitization_job_parameters import DocDigitizationJobParameters
8
+ from .doc_digitization_job_state import DocDigitizationJobState
9
+ from .storage_container_type import StorageContainerType
10
+
11
+
12
+ class DocDigitizationCreateJobResponse(UniversalBaseModel):
13
+ job_id: str = pydantic.Field()
14
+ """
15
+ Unique job identifier (UUID)
16
+ """
17
+
18
+ storage_container_type: StorageContainerType = pydantic.Field()
19
+ """
20
+ Storage Container Type
21
+ """
22
+
23
+ job_parameters: DocDigitizationJobParameters = pydantic.Field()
24
+ """
25
+ Job configuration parameters
26
+ """
27
+
28
+ job_state: DocDigitizationJobState
29
+
30
+ if IS_PYDANTIC_V2:
31
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
32
+ else:
33
+
34
+ class Config:
35
+ frozen = True
36
+ smart_union = True
37
+ extra = pydantic.Extra.allow
@@ -0,0 +1,47 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .doc_digitization_job_state import DocDigitizationJobState
8
+ from .file_signed_url_details import FileSignedUrlDetails
9
+ from .storage_container_type import StorageContainerType
10
+
11
+
12
+ class DocDigitizationDownloadFilesResponse(UniversalBaseModel):
13
+ """
14
+ Response for download-files endpoint.
15
+ """
16
+
17
+ job_id: str = pydantic.Field()
18
+ """
19
+ Job identifier (UUID)
20
+ """
21
+
22
+ job_state: DocDigitizationJobState = pydantic.Field()
23
+ """
24
+ Current job state
25
+ """
26
+
27
+ storage_container_type: StorageContainerType = pydantic.Field()
28
+ """
29
+ Storage backend type
30
+ """
31
+
32
+ download_urls: typing.Dict[str, FileSignedUrlDetails] = pydantic.Field()
33
+ """
34
+ Map of filename to presigned download URL details
35
+ """
36
+
37
+ error_code: typing.Optional[str] = None
38
+ error_message: typing.Optional[str] = None
39
+
40
+ if IS_PYDANTIC_V2:
41
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
42
+ else:
43
+
44
+ class Config:
45
+ frozen = True
46
+ smart_union = True
47
+ extra = pydantic.Extra.allow
@@ -0,0 +1,15 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ DocDigitizationErrorCode = typing.Union[
6
+ typing.Literal[
7
+ "invalid_request_error",
8
+ "internal_server_error",
9
+ "insufficient_quota_error",
10
+ "invalid_api_key_error",
11
+ "rate_limit_exceeded_error",
12
+ "high_load_error",
13
+ ],
14
+ typing.Any,
15
+ ]
@@ -0,0 +1,33 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .doc_digitization_error_code import DocDigitizationErrorCode
8
+
9
+
10
+ class DocDigitizationErrorDetails(UniversalBaseModel):
11
+ message: str = pydantic.Field()
12
+ """
13
+ Message describing the error
14
+ """
15
+
16
+ code: DocDigitizationErrorCode = pydantic.Field()
17
+ """
18
+ Error code for the specific error that has occurred.
19
+ """
20
+
21
+ request_id: typing.Optional[str] = pydantic.Field(default=None)
22
+ """
23
+ Unique identifier for the request. Format: date_UUID4
24
+ """
25
+
26
+ if IS_PYDANTIC_V2:
27
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
28
+ else:
29
+
30
+ class Config:
31
+ frozen = True
32
+ smart_union = True
33
+ extra = pydantic.Extra.allow
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .doc_digitization_error_details import DocDigitizationErrorDetails
8
+
9
+
10
+ class DocDigitizationErrorMessage(UniversalBaseModel):
11
+ error: DocDigitizationErrorDetails = pydantic.Field()
12
+ """
13
+ Error details
14
+ """
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow
@@ -0,0 +1,74 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .doc_digitization_job_detail_state import DocDigitizationJobDetailState
8
+ from .doc_digitization_page_error import DocDigitizationPageError
9
+ from .task_file_details import TaskFileDetails
10
+
11
+
12
+ class DocDigitizationJobDetail(UniversalBaseModel):
13
+ """
14
+ Processing details for a single input file with page-level metrics.
15
+ """
16
+
17
+ inputs: typing.List[TaskFileDetails] = pydantic.Field()
18
+ """
19
+ Input file(s) for this task
20
+ """
21
+
22
+ outputs: typing.List[TaskFileDetails] = pydantic.Field()
23
+ """
24
+ Output file(s) produced
25
+ """
26
+
27
+ state: DocDigitizationJobDetailState = pydantic.Field()
28
+ """
29
+ Processing state for this file
30
+ """
31
+
32
+ total_pages: typing.Optional[int] = pydantic.Field(default=None)
33
+ """
34
+ Total pages/images in the input file
35
+ """
36
+
37
+ pages_processed: typing.Optional[int] = pydantic.Field(default=None)
38
+ """
39
+ Number of pages processed so far
40
+ """
41
+
42
+ pages_succeeded: typing.Optional[int] = pydantic.Field(default=None)
43
+ """
44
+ Number of pages successfully processed
45
+ """
46
+
47
+ pages_failed: typing.Optional[int] = pydantic.Field(default=None)
48
+ """
49
+ Number of pages that failed processing
50
+ """
51
+
52
+ error_message: typing.Optional[str] = pydantic.Field(default=None)
53
+ """
54
+ Error message if processing failed
55
+ """
56
+
57
+ error_code: typing.Optional[str] = pydantic.Field(default=None)
58
+ """
59
+ Standardized error code if failed
60
+ """
61
+
62
+ page_errors: typing.Optional[typing.List[DocDigitizationPageError]] = pydantic.Field(default=None)
63
+ """
64
+ Detailed errors for each failed page
65
+ """
66
+
67
+ if IS_PYDANTIC_V2:
68
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
69
+ else:
70
+
71
+ class Config:
72
+ frozen = True
73
+ smart_union = True
74
+ extra = pydantic.Extra.allow
@@ -0,0 +1,7 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ DocDigitizationJobDetailState = typing.Union[
6
+ typing.Literal["Pending", "Running", "Success", "PartialSuccess", "Failed"], typing.Any
7
+ ]
@@ -0,0 +1,33 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .doc_digitization_output_format import DocDigitizationOutputFormat
8
+ from .doc_digitization_supported_language import DocDigitizationSupportedLanguage
9
+
10
+
11
+ class DocDigitizationJobParameters(UniversalBaseModel):
12
+ """
13
+ Job parameters for document digitization.
14
+ """
15
+
16
+ language: typing.Optional[DocDigitizationSupportedLanguage] = pydantic.Field(default=None)
17
+ """
18
+ ISO language code for the document
19
+ """
20
+
21
+ output_format: typing.Optional[DocDigitizationOutputFormat] = pydantic.Field(default=None)
22
+ """
23
+ Output format: html or md
24
+ """
25
+
26
+ if IS_PYDANTIC_V2:
27
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
28
+ else:
29
+
30
+ class Config:
31
+ frozen = True
32
+ smart_union = True
33
+ extra = pydantic.Extra.allow
@@ -0,0 +1,7 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ DocDigitizationJobState = typing.Union[
6
+ typing.Literal["Accepted", "Pending", "Running", "Completed", "PartiallyCompleted", "Failed"], typing.Any
7
+ ]
@@ -0,0 +1,75 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ import pydantic
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .doc_digitization_job_detail import DocDigitizationJobDetail
9
+ from .doc_digitization_job_state import DocDigitizationJobState
10
+ from .storage_container_type import StorageContainerType
11
+
12
+
13
+ class DocDigitizationJobStatusResponse(UniversalBaseModel):
14
+ """
15
+ Response model for job status endpoint.
16
+ """
17
+
18
+ job_id: str = pydantic.Field()
19
+ """
20
+ Job identifier (UUID)
21
+ """
22
+
23
+ job_state: DocDigitizationJobState = pydantic.Field()
24
+ """
25
+ Current job state
26
+ """
27
+
28
+ created_at: dt.datetime = pydantic.Field()
29
+ """
30
+ Job creation timestamp (ISO 8601)
31
+ """
32
+
33
+ updated_at: dt.datetime = pydantic.Field()
34
+ """
35
+ Last update timestamp (ISO 8601)
36
+ """
37
+
38
+ storage_container_type: StorageContainerType = pydantic.Field()
39
+ """
40
+ Storage backend type
41
+ """
42
+
43
+ total_files: typing.Optional[int] = pydantic.Field(default=None)
44
+ """
45
+ Total input files (always 1)
46
+ """
47
+
48
+ successful_files_count: typing.Optional[int] = pydantic.Field(default=None)
49
+ """
50
+ Files that completed successfully
51
+ """
52
+
53
+ failed_files_count: typing.Optional[int] = pydantic.Field(default=None)
54
+ """
55
+ Files that failed
56
+ """
57
+
58
+ error_message: typing.Optional[str] = pydantic.Field(default=None)
59
+ """
60
+ Job-level error message
61
+ """
62
+
63
+ job_details: typing.Optional[typing.List[DocDigitizationJobDetail]] = pydantic.Field(default=None)
64
+ """
65
+ Per-file processing details with page metrics
66
+ """
67
+
68
+ if IS_PYDANTIC_V2:
69
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
70
+ else:
71
+
72
+ class Config:
73
+ frozen = True
74
+ smart_union = True
75
+ extra = pydantic.Extra.allow
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ DocDigitizationOutputFormat = typing.Union[typing.Literal["html", "md"], typing.Any]