1use transcribe_cpp_sys as sys;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
12#[non_exhaustive]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub enum Task {
15 #[default]
17 Transcribe,
18 Translate,
20 Instruct,
24}
25
26impl Task {
27 pub(crate) fn to_raw(self) -> sys::transcribe_task {
28 match self {
29 Task::Transcribe => sys::transcribe_task::TRANSCRIBE_TASK_TRANSCRIBE,
30 Task::Translate => sys::transcribe_task::TRANSCRIBE_TASK_TRANSLATE,
31 Task::Instruct => sys::transcribe_task::TRANSCRIBE_TASK_INSTRUCT,
32 }
33 }
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
38#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
39pub enum TimestampKind {
40 None,
42 #[default]
44 Auto,
45 Segment,
47 Word,
49 Token,
51}
52
53impl TimestampKind {
54 pub(crate) fn to_raw(self) -> sys::transcribe_timestamp_kind {
55 use sys::transcribe_timestamp_kind as K;
56 match self {
57 TimestampKind::None => K::TRANSCRIBE_TIMESTAMPS_NONE,
58 TimestampKind::Auto => K::TRANSCRIBE_TIMESTAMPS_AUTO,
59 TimestampKind::Segment => K::TRANSCRIBE_TIMESTAMPS_SEGMENT,
60 TimestampKind::Word => K::TRANSCRIBE_TIMESTAMPS_WORD,
61 TimestampKind::Token => K::TRANSCRIBE_TIMESTAMPS_TOKEN,
62 }
63 }
64
65 pub(crate) fn from_raw(raw: sys::transcribe_timestamp_kind) -> Self {
66 use sys::transcribe_timestamp_kind as K;
67 match raw {
68 K::TRANSCRIBE_TIMESTAMPS_AUTO => TimestampKind::Auto,
69 K::TRANSCRIBE_TIMESTAMPS_SEGMENT => TimestampKind::Segment,
70 K::TRANSCRIBE_TIMESTAMPS_WORD => TimestampKind::Word,
71 K::TRANSCRIBE_TIMESTAMPS_TOKEN => TimestampKind::Token,
72 _ => TimestampKind::None,
74 }
75 }
76}
77
78#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
80#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
81pub enum KvType {
82 #[default]
84 Auto,
85 F32,
87 F16,
89}
90
91impl KvType {
92 pub(crate) fn to_raw(self) -> sys::transcribe_kv_type {
93 use sys::transcribe_kv_type as K;
94 match self {
95 KvType::Auto => K::TRANSCRIBE_KV_TYPE_AUTO,
96 KvType::F32 => K::TRANSCRIBE_KV_TYPE_F32,
97 KvType::F16 => K::TRANSCRIBE_KV_TYPE_F16,
98 }
99 }
100}
101
102#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
105pub enum Pnc {
106 #[default]
108 Default,
109 Off,
111 On,
113}
114
115impl Pnc {
116 pub(crate) fn to_raw(self) -> sys::transcribe_pnc_mode {
117 use sys::transcribe_pnc_mode as P;
118 match self {
119 Pnc::Default => P::TRANSCRIBE_PNC_MODE_DEFAULT,
120 Pnc::Off => P::TRANSCRIBE_PNC_MODE_OFF,
121 Pnc::On => P::TRANSCRIBE_PNC_MODE_ON,
122 }
123 }
124}
125
126#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
128#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
129pub enum Itn {
130 #[default]
132 Default,
133 Off,
135 On,
137}
138
139#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
141#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
142pub enum Diarize {
143 #[default]
145 Default,
146 Off,
148 On,
150}
151
152impl Diarize {
153 pub(crate) fn to_raw(self) -> sys::transcribe_diarize_mode {
154 use sys::transcribe_diarize_mode as D;
155 match self {
156 Diarize::Default => D::TRANSCRIBE_DIARIZE_MODE_DEFAULT,
157 Diarize::Off => D::TRANSCRIBE_DIARIZE_MODE_OFF,
158 Diarize::On => D::TRANSCRIBE_DIARIZE_MODE_ON,
159 }
160 }
161}
162
163impl Itn {
164 pub(crate) fn to_raw(self) -> sys::transcribe_itn_mode {
165 use sys::transcribe_itn_mode as I;
166 match self {
167 Itn::Default => I::TRANSCRIBE_ITN_MODE_DEFAULT,
168 Itn::Off => I::TRANSCRIBE_ITN_MODE_OFF,
169 Itn::On => I::TRANSCRIBE_ITN_MODE_ON,
170 }
171 }
172}
173
174#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
176#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
177pub enum Backend {
178 #[default]
180 Auto,
181 Cpu,
183 CpuAccel,
185 Metal,
187 Vulkan,
189 Cuda,
191 Rocm,
193}
194
195impl Backend {
196 pub(crate) fn to_raw(self) -> sys::transcribe_backend_request {
197 use sys::transcribe_backend_request as B;
198 match self {
199 Backend::Auto => B::TRANSCRIBE_BACKEND_AUTO,
200 Backend::Cpu => B::TRANSCRIBE_BACKEND_CPU,
201 Backend::CpuAccel => B::TRANSCRIBE_BACKEND_CPU_ACCEL,
202 Backend::Metal => B::TRANSCRIBE_BACKEND_METAL,
203 Backend::Vulkan => B::TRANSCRIBE_BACKEND_VULKAN,
204 Backend::Cuda => B::TRANSCRIBE_BACKEND_CUDA,
205 Backend::Rocm => B::TRANSCRIBE_BACKEND_ROCM,
206 }
207 }
208}
209
210#[derive(Debug, Clone, Copy, PartialEq, Eq)]
212#[non_exhaustive]
213#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
214pub enum Feature {
215 InitialPrompt,
217 TemperatureFallback,
219 LongForm,
221 Cancellation,
223 Pnc,
225 Itn,
227 Diarization,
229 Vocabulary,
231 ContextPrompt,
233 Instruct,
235 TranscriptPrefix,
237}
238
239impl Feature {
240 pub(crate) fn to_raw(self) -> sys::transcribe_feature {
241 use sys::transcribe_feature as F;
242 match self {
243 Feature::InitialPrompt => F::TRANSCRIBE_FEATURE_INITIAL_PROMPT,
244 Feature::TemperatureFallback => F::TRANSCRIBE_FEATURE_TEMPERATURE_FALLBACK,
245 Feature::LongForm => F::TRANSCRIBE_FEATURE_LONG_FORM,
246 Feature::Cancellation => F::TRANSCRIBE_FEATURE_CANCELLATION,
247 Feature::Pnc => F::TRANSCRIBE_FEATURE_PNC,
248 Feature::Itn => F::TRANSCRIBE_FEATURE_ITN,
249 Feature::Diarization => F::TRANSCRIBE_FEATURE_DIARIZATION,
250 Feature::Vocabulary => F::TRANSCRIBE_FEATURE_VOCABULARY,
251 Feature::ContextPrompt => F::TRANSCRIBE_FEATURE_CONTEXT_PROMPT,
252 Feature::Instruct => F::TRANSCRIBE_FEATURE_INSTRUCT,
253 Feature::TranscriptPrefix => F::TRANSCRIBE_FEATURE_TRANSCRIPT_PREFIX,
254 }
255 }
256}
257
258#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
260#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
261pub enum CommitPolicy {
262 #[default]
264 Auto,
265 OnFinalize,
267 StablePrefix,
269}
270
271impl CommitPolicy {
272 pub(crate) fn to_raw(self) -> sys::transcribe_stream_commit_policy {
273 use sys::transcribe_stream_commit_policy as C;
274 match self {
275 CommitPolicy::Auto => C::TRANSCRIBE_STREAM_COMMIT_AUTO,
276 CommitPolicy::OnFinalize => C::TRANSCRIBE_STREAM_COMMIT_ON_FINALIZE,
277 CommitPolicy::StablePrefix => C::TRANSCRIBE_STREAM_COMMIT_STABLE_PREFIX,
278 }
279 }
280}
281
282#[derive(Debug, Clone, Copy, PartialEq, Eq)]
284#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
285pub enum StreamState {
286 Idle,
287 Active,
288 Finished,
289 Failed,
290}
291
292impl StreamState {
293 pub(crate) fn from_raw(raw: sys::transcribe_stream_state) -> Self {
294 use sys::transcribe_stream_state as S;
295 match raw {
296 S::TRANSCRIBE_STREAM_ACTIVE => StreamState::Active,
297 S::TRANSCRIBE_STREAM_FINISHED => StreamState::Finished,
298 S::TRANSCRIBE_STREAM_FAILED => StreamState::Failed,
299 _ => StreamState::Idle,
300 }
301 }
302}
303
304#[derive(Debug, Clone, Copy, PartialEq, Eq)]
306pub enum AbiStruct {
307 ModelLoadParams,
308 SessionParams,
309 RunParams,
310 StreamParams,
311 Capabilities,
312 Timings,
313 Segment,
314 Word,
315 Token,
316 StreamUpdate,
317 StreamText,
318 SessionLimits,
319 Ext,
320 DeviceInfo,
321 SpeakerSegment,
322 BackendInitParams,
323}
324
325impl AbiStruct {
326 pub(crate) fn to_raw(self) -> sys::transcribe_abi_struct {
327 use sys::transcribe_abi_struct as A;
328 match self {
329 AbiStruct::ModelLoadParams => A::TRANSCRIBE_ABI_MODEL_LOAD_PARAMS,
330 AbiStruct::SessionParams => A::TRANSCRIBE_ABI_SESSION_PARAMS,
331 AbiStruct::RunParams => A::TRANSCRIBE_ABI_RUN_PARAMS,
332 AbiStruct::StreamParams => A::TRANSCRIBE_ABI_STREAM_PARAMS,
333 AbiStruct::Capabilities => A::TRANSCRIBE_ABI_CAPABILITIES,
334 AbiStruct::Timings => A::TRANSCRIBE_ABI_TIMINGS,
335 AbiStruct::Segment => A::TRANSCRIBE_ABI_SEGMENT,
336 AbiStruct::Word => A::TRANSCRIBE_ABI_WORD,
337 AbiStruct::Token => A::TRANSCRIBE_ABI_TOKEN,
338 AbiStruct::StreamUpdate => A::TRANSCRIBE_ABI_STREAM_UPDATE,
339 AbiStruct::StreamText => A::TRANSCRIBE_ABI_STREAM_TEXT,
340 AbiStruct::SessionLimits => A::TRANSCRIBE_ABI_SESSION_LIMITS,
341 AbiStruct::Ext => A::TRANSCRIBE_ABI_EXT,
342 AbiStruct::DeviceInfo => A::TRANSCRIBE_ABI_DEVICE_INFO,
343 AbiStruct::SpeakerSegment => A::TRANSCRIBE_ABI_SPEAKER_SEGMENT,
344 AbiStruct::BackendInitParams => A::TRANSCRIBE_ABI_BACKEND_INIT_PARAMS,
345 }
346 }
347}
348
349#[derive(Debug, Clone, Copy, PartialEq, Eq)]
351#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
352pub enum ExtSlot {
353 Run,
355 Stream,
357}
358
359impl ExtSlot {
360 pub(crate) fn to_raw(self) -> sys::transcribe_ext_slot {
361 use sys::transcribe_ext_slot as E;
362 match self {
363 ExtSlot::Run => E::TRANSCRIBE_EXT_SLOT_RUN,
364 ExtSlot::Stream => E::TRANSCRIBE_EXT_SLOT_STREAM,
365 }
366 }
367}