use candle_core::{Result, Tensor};
use crate::audio::{encoder::v2::TokenizerV2EncoderOutput, tokenizer::v2::TokenizerV2};
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum TokenizerType {
Hz12,
Hz25,
}
pub enum TokenizerWrapper {
V2(TokenizerV2),
}
impl TokenizerWrapper {
pub fn from_v2(tokenizer: TokenizerV2) -> Self {
Self::V2(tokenizer)
}
pub fn tokenizer_type(&self) -> TokenizerType {
match self {
Self::V2(_) => TokenizerType::Hz12,
}
}
pub fn rate(&self) -> f64 {
match self {
Self::V2(t) => t.config().tokenizer_rate(),
}
}
pub fn input_sample_rate(&self) -> usize {
match self {
Self::V2(t) => t.input_sample_rate(),
}
}
pub fn output_sample_rate(&self) -> usize {
match self {
Self::V2(t) => t.output_sample_rate(),
}
}
pub fn encode_downsample_rate(&self) -> usize {
match self {
Self::V2(t) => t.encode_downsample_rate(),
}
}
pub fn decode_upsample_rate(&self) -> usize {
match self {
Self::V2(t) => t.decode_upsample_rate(),
}
}
pub fn has_encoder(&self) -> bool {
match self {
Self::V2(t) => t.has_encoder(),
}
}
pub fn encode(&mut self, audio: &Tensor) -> Result<Tensor> {
match self {
Self::V2(t) => t.encode(audio),
}
}
pub fn encode_with_mask(
&mut self,
audio: &Tensor,
padding_mask: &Tensor,
) -> Result<TokenizerV2EncoderOutput> {
match self {
Self::V2(t) => t.encode_with_mask(audio, padding_mask),
}
}
pub fn reset_encoder_state(&mut self) {
match self {
Self::V2(t) => t.reset_encoder_state(),
}
}
pub fn decode(&self, codes: &Tensor) -> Result<Tensor> {
match self {
Self::V2(t) => t.decode(codes),
}
}
pub fn chunked_decode(
&self,
codes: &Tensor,
chunk_size: usize,
left_context_size: usize,
) -> Result<Tensor> {
match self {
Self::V2(t) => t.chunked_decode(codes, chunk_size, left_context_size),
}
}
}