Files
aha/src/models/mod.rs
T

230 lines
8.4 KiB
Rust
Raw Normal View History

2026-01-30 22:04:23 +08:00
pub mod campplus;
2026-02-05 00:43:49 +08:00
pub mod common;
2025-11-22 23:27:14 +08:00
pub mod deepseek_ocr;
2026-01-30 22:04:23 +08:00
pub mod feature_extractor;
2026-01-15 21:57:12 +08:00
pub mod fun_asr_nano;
2026-01-07 21:46:01 +08:00
pub mod glm_asr_nano;
2025-12-03 17:21:01 +08:00
pub mod hunyuan_ocr;
2026-01-30 22:04:23 +08:00
pub mod index_tts2;
pub mod mask_gct;
2025-09-25 12:25:24 +08:00
pub mod minicpm4;
2025-12-09 00:41:30 +08:00
pub mod paddleocr_vl;
2025-09-25 12:25:24 +08:00
pub mod qwen2_5vl;
2026-01-15 21:57:12 +08:00
pub mod qwen3;
2026-02-02 21:30:52 +08:00
pub mod qwen3_asr;
2025-10-26 21:39:23 +08:00
pub mod qwen3vl;
2025-12-12 20:40:57 +08:00
pub mod rmbg2_0;
2025-12-23 19:23:21 +08:00
pub mod voxcpm;
2026-01-30 22:04:23 +08:00
pub mod w2v_bert_2_0;
2025-09-25 12:09:25 +08:00
2025-10-27 10:55:40 +08:00
use aha_openai_dive::v1::resources::chat::{
2025-09-22 23:58:08 +08:00
ChatCompletionChunkResponse, ChatCompletionParameters, ChatCompletionResponse,
};
2025-10-27 10:55:40 +08:00
use anyhow::Result;
2025-09-22 23:49:58 +08:00
use rocket::futures::Stream;
2025-09-22 16:38:12 +08:00
2025-11-05 14:46:03 +08:00
use crate::models::{
2025-12-03 17:21:01 +08:00
deepseek_ocr::generate::DeepseekOCRGenerateModel,
2026-01-15 21:57:12 +08:00
fun_asr_nano::generate::FunAsrNanoGenerateModel,
2026-01-07 21:46:01 +08:00
glm_asr_nano::generate::GlmAsrNanoGenerateModel,
2025-12-03 17:21:01 +08:00
hunyuan_ocr::generate::HunyuanOCRGenerateModel, minicpm4::generate::MiniCPMGenerateModel,
2025-12-09 00:41:30 +08:00
paddleocr_vl::generate::PaddleOCRVLGenerateModel, qwen2_5vl::generate::Qwen2_5VLGenerateModel,
2026-02-05 00:43:49 +08:00
qwen3::generate::Qwen3GenerateModel, qwen3_asr::generate::Qwen3AsrGenerateModel,
qwen3vl::generate::Qwen3VLGenerateModel, rmbg2_0::generate::RMBG2_0Model,
voxcpm::generate::VoxCPMGenerate,
2025-11-05 14:46:03 +08:00
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum)]
pub enum WhichModel {
2026-01-30 22:17:00 +08:00
#[value(name = "minicpm4-0.5b", hide = true)]
2025-11-05 14:46:03 +08:00
MiniCPM4_0_5B,
2026-01-30 22:17:00 +08:00
#[value(name = "qwen2.5vl-3b", hide = true)]
2025-11-05 14:46:03 +08:00
Qwen2_5vl3B,
2026-01-30 22:17:00 +08:00
#[value(name = "qwen2.5vl-7b", hide = true)]
2025-11-12 03:20:55 -10:00
Qwen2_5vl7B,
2026-01-30 22:17:00 +08:00
#[value(name = "qwen3-0.6b", hide = true)]
2026-01-15 21:57:12 +08:00
Qwen3_0_6B,
2026-02-05 00:43:49 +08:00
#[value(name = "qwen3asr-0.6b", hide = true)]
Qwen3ASR0_6B,
#[value(name = "qwen3asr-1.7b", hide = true)]
Qwen3ASR1_7B,
2026-02-07 13:28:13 +08:00
#[value(name = "qwen3vl-2b", hide = true)]
2025-11-05 14:46:03 +08:00
Qwen3vl2B,
2026-01-30 22:17:00 +08:00
#[value(name = "qwen3vl-4b", hide = true)]
2025-11-12 03:20:55 -10:00
Qwen3vl4B,
2026-01-30 22:17:00 +08:00
#[value(name = "qwen3vl-8b", hide = true)]
2025-11-12 03:20:55 -10:00
Qwen3vl8B,
2026-01-30 22:17:00 +08:00
#[value(name = "qwen3vl-32b", hide = true)]
2025-11-12 03:20:55 -10:00
Qwen3vl32B,
2026-01-30 22:17:00 +08:00
#[value(name = "deepseek-ocr", hide = true)]
2025-11-27 14:28:47 +08:00
DeepSeekOCR,
2026-01-30 22:17:00 +08:00
#[value(name = "hunyuan-ocr", hide = true)]
2025-12-03 17:21:01 +08:00
HunyuanOCR,
2026-01-30 22:17:00 +08:00
#[value(name = "paddleocr-vl", hide = true)]
2025-12-09 00:41:30 +08:00
PaddleOCRVL,
2026-01-30 22:04:23 +08:00
#[value(name = "rmbg2.0")]
2025-12-25 20:25:52 +08:00
RMBG2_0,
2026-01-30 22:17:00 +08:00
#[value(name = "voxcpm", hide = true)]
2025-12-25 20:25:52 +08:00
VoxCPM,
2026-01-30 22:17:00 +08:00
#[value(name = "voxcpm1.5", hide = true)]
2025-12-25 20:25:52 +08:00
VoxCPM1_5,
2026-01-30 22:17:00 +08:00
#[value(name = "glm-asr-nano-2512", hide = true)]
2026-01-07 21:46:01 +08:00
GlmASRNano2512,
2026-01-30 22:17:00 +08:00
#[value(name = "fun-asr-nano-2512", hide = true)]
2026-01-15 21:57:12 +08:00
FunASRNano2512,
2025-11-05 14:46:03 +08:00
}
2025-09-22 16:38:12 +08:00
pub trait GenerateModel {
2025-09-22 23:49:58 +08:00
fn generate(&mut self, mes: ChatCompletionParameters) -> Result<ChatCompletionResponse>;
2025-09-22 23:58:08 +08:00
fn generate_stream(
&mut self,
mes: ChatCompletionParameters,
2025-11-05 14:46:03 +08:00
) -> Result<
Box<
dyn Stream<Item = Result<ChatCompletionChunkResponse, anyhow::Error>>
+ Send
+ Unpin
+ '_,
>,
>;
}
pub enum ModelInstance<'a> {
MiniCPM4(MiniCPMGenerateModel<'a>),
Qwen2_5VL(Qwen2_5VLGenerateModel<'a>),
2026-01-15 21:57:12 +08:00
Qwen3(Qwen3GenerateModel<'a>),
2026-02-05 00:43:49 +08:00
Qwen3ASR(Qwen3AsrGenerateModel<'a>),
2025-11-05 14:46:03 +08:00
Qwen3VL(Qwen3VLGenerateModel<'a>),
2025-11-27 14:28:47 +08:00
DeepSeekOCR(DeepseekOCRGenerateModel),
2025-12-03 17:21:01 +08:00
HunyuanOCR(HunyuanOCRGenerateModel<'a>),
2025-12-09 00:41:30 +08:00
PaddleOCRVL(Box<PaddleOCRVLGenerateModel<'a>>),
2025-12-25 20:25:52 +08:00
RMBG2_0(Box<RMBG2_0Model>),
VoxCPM(Box<VoxCPMGenerate>),
2026-01-07 21:46:01 +08:00
GlmASRNano(GlmAsrNanoGenerateModel<'a>),
2026-01-15 21:57:12 +08:00
FunASRNano(FunAsrNanoGenerateModel),
2025-11-05 14:46:03 +08:00
}
impl<'a> GenerateModel for ModelInstance<'a> {
fn generate(&mut self, mes: ChatCompletionParameters) -> Result<ChatCompletionResponse> {
match self {
ModelInstance::MiniCPM4(model) => model.generate(mes),
ModelInstance::Qwen2_5VL(model) => model.generate(mes),
2026-01-15 21:57:12 +08:00
ModelInstance::Qwen3(model) => model.generate(mes),
2026-02-05 00:43:49 +08:00
ModelInstance::Qwen3ASR(model) => model.generate(mes),
2025-11-05 14:46:03 +08:00
ModelInstance::Qwen3VL(model) => model.generate(mes),
2025-11-27 14:28:47 +08:00
ModelInstance::DeepSeekOCR(model) => model.generate(mes),
2025-12-03 17:21:01 +08:00
ModelInstance::HunyuanOCR(model) => model.generate(mes),
2025-12-09 00:41:30 +08:00
ModelInstance::PaddleOCRVL(model) => model.generate(mes),
2025-12-25 20:25:52 +08:00
ModelInstance::RMBG2_0(model) => model.generate(mes),
ModelInstance::VoxCPM(model) => model.generate(mes),
2026-01-07 21:46:01 +08:00
ModelInstance::GlmASRNano(model) => model.generate(mes),
2026-01-15 21:57:12 +08:00
ModelInstance::FunASRNano(model) => model.generate(mes),
2025-11-05 14:46:03 +08:00
}
}
fn generate_stream(
&mut self,
mes: ChatCompletionParameters,
) -> Result<
Box<
dyn Stream<Item = Result<ChatCompletionChunkResponse, anyhow::Error>>
+ Send
+ Unpin
+ '_,
>,
> {
match self {
ModelInstance::MiniCPM4(model) => model.generate_stream(mes),
ModelInstance::Qwen2_5VL(model) => model.generate_stream(mes),
2026-01-15 21:57:12 +08:00
ModelInstance::Qwen3(model) => model.generate_stream(mes),
2025-11-05 14:46:03 +08:00
ModelInstance::Qwen3VL(model) => model.generate_stream(mes),
2026-02-05 00:43:49 +08:00
ModelInstance::Qwen3ASR(model) => model.generate_stream(mes),
2025-11-27 14:28:47 +08:00
ModelInstance::DeepSeekOCR(model) => model.generate_stream(mes),
2025-12-03 17:21:01 +08:00
ModelInstance::HunyuanOCR(model) => model.generate_stream(mes),
2025-12-09 00:41:30 +08:00
ModelInstance::PaddleOCRVL(model) => model.generate_stream(mes),
2025-12-25 20:25:52 +08:00
ModelInstance::RMBG2_0(model) => model.generate_stream(mes),
ModelInstance::VoxCPM(model) => model.generate_stream(mes),
2026-01-07 21:46:01 +08:00
ModelInstance::GlmASRNano(model) => model.generate_stream(mes),
2026-01-15 21:57:12 +08:00
ModelInstance::FunASRNano(model) => model.generate_stream(mes),
2025-11-05 14:46:03 +08:00
}
}
}
pub fn load_model(model_type: WhichModel, path: &str) -> Result<ModelInstance<'_>> {
let model = match model_type {
WhichModel::MiniCPM4_0_5B => {
let model = MiniCPMGenerateModel::init(path, None, None)?;
ModelInstance::MiniCPM4(model)
}
WhichModel::Qwen2_5vl3B => {
let model = Qwen2_5VLGenerateModel::init(path, None, None)?;
ModelInstance::Qwen2_5VL(model)
}
2025-11-12 03:20:55 -10:00
WhichModel::Qwen2_5vl7B => {
let model = Qwen2_5VLGenerateModel::init(path, None, None)?;
ModelInstance::Qwen2_5VL(model)
}
2026-01-15 21:57:12 +08:00
WhichModel::Qwen3_0_6B => {
let model = Qwen3GenerateModel::init(path, None, None)?;
ModelInstance::Qwen3(model)
}
2026-02-05 00:43:49 +08:00
WhichModel::Qwen3ASR0_6B => {
let model = Qwen3AsrGenerateModel::init(path, None, None)?;
ModelInstance::Qwen3ASR(model)
}
WhichModel::Qwen3ASR1_7B => {
let model = Qwen3AsrGenerateModel::init(path, None, None)?;
ModelInstance::Qwen3ASR(model)
}
2025-11-05 14:46:03 +08:00
WhichModel::Qwen3vl2B => {
let model = Qwen3VLGenerateModel::init(path, None, None)?;
ModelInstance::Qwen3VL(model)
2025-11-13 01:03:52 +08:00
}
2025-11-12 03:20:55 -10:00
WhichModel::Qwen3vl4B => {
let model = Qwen3VLGenerateModel::init(path, None, None)?;
ModelInstance::Qwen3VL(model)
2025-11-13 01:03:52 +08:00
}
2025-11-12 03:20:55 -10:00
WhichModel::Qwen3vl8B => {
let model = Qwen3VLGenerateModel::init(path, None, None)?;
ModelInstance::Qwen3VL(model)
2025-11-13 01:03:52 +08:00
}
2025-11-12 03:20:55 -10:00
WhichModel::Qwen3vl32B => {
let model = Qwen3VLGenerateModel::init(path, None, None)?;
ModelInstance::Qwen3VL(model)
2025-11-05 14:46:03 +08:00
}
2025-11-27 14:28:47 +08:00
WhichModel::DeepSeekOCR => {
let model = DeepseekOCRGenerateModel::init(path, None, None)?;
ModelInstance::DeepSeekOCR(model)
}
2025-12-03 17:21:01 +08:00
WhichModel::HunyuanOCR => {
let model = HunyuanOCRGenerateModel::init(path, None, None)?;
ModelInstance::HunyuanOCR(model)
}
2025-12-09 00:41:30 +08:00
WhichModel::PaddleOCRVL => {
let model = PaddleOCRVLGenerateModel::init(path, None, None)?;
ModelInstance::PaddleOCRVL(Box::new(model))
}
2025-12-25 20:25:52 +08:00
WhichModel::RMBG2_0 => {
let model = RMBG2_0Model::init(path, None, None)?;
ModelInstance::RMBG2_0(Box::new(model))
}
WhichModel::VoxCPM => {
let model = VoxCPMGenerate::init(path, None, None)?;
ModelInstance::VoxCPM(Box::new(model))
}
WhichModel::VoxCPM1_5 => {
let model = VoxCPMGenerate::init(path, None, None)?;
ModelInstance::VoxCPM(Box::new(model))
}
2026-01-07 21:46:01 +08:00
WhichModel::GlmASRNano2512 => {
let model = GlmAsrNanoGenerateModel::init(path, None, None)?;
ModelInstance::GlmASRNano(model)
}
2026-01-15 21:57:12 +08:00
WhichModel::FunASRNano2512 => {
let model = FunAsrNanoGenerateModel::init(path, None, None)?;
ModelInstance::FunASRNano(model)
}
2025-11-05 14:46:03 +08:00
};
Ok(model)
2025-09-22 16:38:12 +08:00
}