use transcribe_cpp_sys as sys;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Task {
#[default]
Transcribe,
Translate,
Instruct,
}
impl Task {
pub(crate) fn to_raw(self) -> sys::transcribe_task {
match self {
Task::Transcribe => sys::transcribe_task::TRANSCRIBE_TASK_TRANSCRIBE,
Task::Translate => sys::transcribe_task::TRANSCRIBE_TASK_TRANSLATE,
Task::Instruct => sys::transcribe_task::TRANSCRIBE_TASK_INSTRUCT,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TimestampKind {
None,
#[default]
Auto,
Segment,
Word,
Token,
}
impl TimestampKind {
pub(crate) fn to_raw(self) -> sys::transcribe_timestamp_kind {
use sys::transcribe_timestamp_kind as K;
match self {
TimestampKind::None => K::TRANSCRIBE_TIMESTAMPS_NONE,
TimestampKind::Auto => K::TRANSCRIBE_TIMESTAMPS_AUTO,
TimestampKind::Segment => K::TRANSCRIBE_TIMESTAMPS_SEGMENT,
TimestampKind::Word => K::TRANSCRIBE_TIMESTAMPS_WORD,
TimestampKind::Token => K::TRANSCRIBE_TIMESTAMPS_TOKEN,
}
}
pub(crate) fn from_raw(raw: sys::transcribe_timestamp_kind) -> Self {
use sys::transcribe_timestamp_kind as K;
match raw {
K::TRANSCRIBE_TIMESTAMPS_AUTO => TimestampKind::Auto,
K::TRANSCRIBE_TIMESTAMPS_SEGMENT => TimestampKind::Segment,
K::TRANSCRIBE_TIMESTAMPS_WORD => TimestampKind::Word,
K::TRANSCRIBE_TIMESTAMPS_TOKEN => TimestampKind::Token,
_ => TimestampKind::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum KvType {
#[default]
Auto,
F32,
F16,
}
impl KvType {
pub(crate) fn to_raw(self) -> sys::transcribe_kv_type {
use sys::transcribe_kv_type as K;
match self {
KvType::Auto => K::TRANSCRIBE_KV_TYPE_AUTO,
KvType::F32 => K::TRANSCRIBE_KV_TYPE_F32,
KvType::F16 => K::TRANSCRIBE_KV_TYPE_F16,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Pnc {
#[default]
Default,
Off,
On,
}
impl Pnc {
pub(crate) fn to_raw(self) -> sys::transcribe_pnc_mode {
use sys::transcribe_pnc_mode as P;
match self {
Pnc::Default => P::TRANSCRIBE_PNC_MODE_DEFAULT,
Pnc::Off => P::TRANSCRIBE_PNC_MODE_OFF,
Pnc::On => P::TRANSCRIBE_PNC_MODE_ON,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Itn {
#[default]
Default,
Off,
On,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Diarize {
#[default]
Default,
Off,
On,
}
impl Diarize {
pub(crate) fn to_raw(self) -> sys::transcribe_diarize_mode {
use sys::transcribe_diarize_mode as D;
match self {
Diarize::Default => D::TRANSCRIBE_DIARIZE_MODE_DEFAULT,
Diarize::Off => D::TRANSCRIBE_DIARIZE_MODE_OFF,
Diarize::On => D::TRANSCRIBE_DIARIZE_MODE_ON,
}
}
}
impl Itn {
pub(crate) fn to_raw(self) -> sys::transcribe_itn_mode {
use sys::transcribe_itn_mode as I;
match self {
Itn::Default => I::TRANSCRIBE_ITN_MODE_DEFAULT,
Itn::Off => I::TRANSCRIBE_ITN_MODE_OFF,
Itn::On => I::TRANSCRIBE_ITN_MODE_ON,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Backend {
#[default]
Auto,
Cpu,
CpuAccel,
Metal,
Vulkan,
Cuda,
Rocm,
}
impl Backend {
pub(crate) fn to_raw(self) -> sys::transcribe_backend_request {
use sys::transcribe_backend_request as B;
match self {
Backend::Auto => B::TRANSCRIBE_BACKEND_AUTO,
Backend::Cpu => B::TRANSCRIBE_BACKEND_CPU,
Backend::CpuAccel => B::TRANSCRIBE_BACKEND_CPU_ACCEL,
Backend::Metal => B::TRANSCRIBE_BACKEND_METAL,
Backend::Vulkan => B::TRANSCRIBE_BACKEND_VULKAN,
Backend::Cuda => B::TRANSCRIBE_BACKEND_CUDA,
Backend::Rocm => B::TRANSCRIBE_BACKEND_ROCM,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Feature {
InitialPrompt,
TemperatureFallback,
LongForm,
Cancellation,
Pnc,
Itn,
Diarization,
Vocabulary,
ContextPrompt,
Instruct,
TranscriptPrefix,
}
impl Feature {
pub(crate) fn to_raw(self) -> sys::transcribe_feature {
use sys::transcribe_feature as F;
match self {
Feature::InitialPrompt => F::TRANSCRIBE_FEATURE_INITIAL_PROMPT,
Feature::TemperatureFallback => F::TRANSCRIBE_FEATURE_TEMPERATURE_FALLBACK,
Feature::LongForm => F::TRANSCRIBE_FEATURE_LONG_FORM,
Feature::Cancellation => F::TRANSCRIBE_FEATURE_CANCELLATION,
Feature::Pnc => F::TRANSCRIBE_FEATURE_PNC,
Feature::Itn => F::TRANSCRIBE_FEATURE_ITN,
Feature::Diarization => F::TRANSCRIBE_FEATURE_DIARIZATION,
Feature::Vocabulary => F::TRANSCRIBE_FEATURE_VOCABULARY,
Feature::ContextPrompt => F::TRANSCRIBE_FEATURE_CONTEXT_PROMPT,
Feature::Instruct => F::TRANSCRIBE_FEATURE_INSTRUCT,
Feature::TranscriptPrefix => F::TRANSCRIBE_FEATURE_TRANSCRIPT_PREFIX,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum CommitPolicy {
#[default]
Auto,
OnFinalize,
StablePrefix,
}
impl CommitPolicy {
pub(crate) fn to_raw(self) -> sys::transcribe_stream_commit_policy {
use sys::transcribe_stream_commit_policy as C;
match self {
CommitPolicy::Auto => C::TRANSCRIBE_STREAM_COMMIT_AUTO,
CommitPolicy::OnFinalize => C::TRANSCRIBE_STREAM_COMMIT_ON_FINALIZE,
CommitPolicy::StablePrefix => C::TRANSCRIBE_STREAM_COMMIT_STABLE_PREFIX,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum StreamState {
Idle,
Active,
Finished,
Failed,
}
impl StreamState {
pub(crate) fn from_raw(raw: sys::transcribe_stream_state) -> Self {
use sys::transcribe_stream_state as S;
match raw {
S::TRANSCRIBE_STREAM_ACTIVE => StreamState::Active,
S::TRANSCRIBE_STREAM_FINISHED => StreamState::Finished,
S::TRANSCRIBE_STREAM_FAILED => StreamState::Failed,
_ => StreamState::Idle,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum AbiStruct {
ModelLoadParams,
SessionParams,
RunParams,
StreamParams,
Capabilities,
Timings,
Segment,
Word,
Token,
StreamUpdate,
StreamText,
SessionLimits,
Ext,
DeviceInfo,
SpeakerSegment,
BackendInitParams,
DiarizeInfo,
DiarizeSessionParams,
DiarizeParams,
LangIdInfo,
LangIdSessionParams,
LangIdParams,
LangIdResult,
LangIdCandidate,
VadInfo,
VadSessionParams,
VadParams,
VadResult,
VadSegment,
}
impl AbiStruct {
pub(crate) fn to_raw(self) -> sys::transcribe_abi_struct {
use sys::transcribe_abi_struct as A;
match self {
AbiStruct::ModelLoadParams => A::TRANSCRIBE_ABI_MODEL_LOAD_PARAMS,
AbiStruct::SessionParams => A::TRANSCRIBE_ABI_SESSION_PARAMS,
AbiStruct::RunParams => A::TRANSCRIBE_ABI_RUN_PARAMS,
AbiStruct::StreamParams => A::TRANSCRIBE_ABI_STREAM_PARAMS,
AbiStruct::Capabilities => A::TRANSCRIBE_ABI_CAPABILITIES,
AbiStruct::Timings => A::TRANSCRIBE_ABI_TIMINGS,
AbiStruct::Segment => A::TRANSCRIBE_ABI_SEGMENT,
AbiStruct::Word => A::TRANSCRIBE_ABI_WORD,
AbiStruct::Token => A::TRANSCRIBE_ABI_TOKEN,
AbiStruct::StreamUpdate => A::TRANSCRIBE_ABI_STREAM_UPDATE,
AbiStruct::StreamText => A::TRANSCRIBE_ABI_STREAM_TEXT,
AbiStruct::SessionLimits => A::TRANSCRIBE_ABI_SESSION_LIMITS,
AbiStruct::Ext => A::TRANSCRIBE_ABI_EXT,
AbiStruct::DeviceInfo => A::TRANSCRIBE_ABI_DEVICE_INFO,
AbiStruct::SpeakerSegment => A::TRANSCRIBE_ABI_SPEAKER_SEGMENT,
AbiStruct::BackendInitParams => A::TRANSCRIBE_ABI_BACKEND_INIT_PARAMS,
AbiStruct::DiarizeInfo => A::TRANSCRIBE_ABI_DIARIZE_INFO,
AbiStruct::DiarizeSessionParams => A::TRANSCRIBE_ABI_DIARIZE_SESSION_PARAMS,
AbiStruct::DiarizeParams => A::TRANSCRIBE_ABI_DIARIZE_PARAMS,
AbiStruct::LangIdInfo => A::TRANSCRIBE_ABI_LANGID_INFO,
AbiStruct::LangIdSessionParams => A::TRANSCRIBE_ABI_LANGID_SESSION_PARAMS,
AbiStruct::LangIdParams => A::TRANSCRIBE_ABI_LANGID_PARAMS,
AbiStruct::LangIdResult => A::TRANSCRIBE_ABI_LANGID_RESULT,
AbiStruct::LangIdCandidate => A::TRANSCRIBE_ABI_LANGID_CANDIDATE,
AbiStruct::VadInfo => A::TRANSCRIBE_ABI_VAD_INFO,
AbiStruct::VadSessionParams => A::TRANSCRIBE_ABI_VAD_SESSION_PARAMS,
AbiStruct::VadParams => A::TRANSCRIBE_ABI_VAD_PARAMS,
AbiStruct::VadResult => A::TRANSCRIBE_ABI_VAD_RESULT,
AbiStruct::VadSegment => A::TRANSCRIBE_ABI_VAD_SEGMENT,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ExtSlot {
Run,
Stream,
DiarizeRun,
}
impl ExtSlot {
pub(crate) fn to_raw(self) -> sys::transcribe_ext_slot {
use sys::transcribe_ext_slot as E;
match self {
ExtSlot::Run => E::TRANSCRIBE_EXT_SLOT_RUN,
ExtSlot::Stream => E::TRANSCRIBE_EXT_SLOT_STREAM,
ExtSlot::DiarizeRun => E::TRANSCRIBE_EXT_SLOT_DIARIZE_RUN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Role {
Asr,
Diarize,
LangId,
Vad,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Roles(pub(crate) u32);
impl Roles {
pub fn contains(self, role: Role) -> bool {
let bit = match role {
Role::Asr => sys::transcribe_role::TRANSCRIBE_ROLE_ASR,
Role::Diarize => sys::transcribe_role::TRANSCRIBE_ROLE_DIARIZE,
Role::LangId => sys::transcribe_role::TRANSCRIBE_ROLE_LANGID,
Role::Vad => sys::transcribe_role::TRANSCRIBE_ROLE_VAD,
};
self.0 & bit.0 != 0
}
pub fn bits(self) -> u32 {
self.0
}
}