feat(M2.1): 设备端部署脚本 + whisper LD_LIBRARY_PATH + dog/cat 角色人设配置
This commit is contained in:
@@ -381,6 +381,9 @@ pub struct AiConfig {
|
||||
/// 工具目录 (whisper-cli/llama-cli/piper 二进制所在)
|
||||
#[serde(default = "default_tools_dir")]
|
||||
pub tools_dir: PathBuf,
|
||||
/// whisper-cli 依赖库路径 (libggml*.so 所在,部署时标定)
|
||||
#[serde(default)]
|
||||
pub whisper_lib_dir: Option<PathBuf>,
|
||||
/// 临时文件目录
|
||||
#[serde(default = "default_tmp_dir")]
|
||||
pub tmp_dir: PathBuf,
|
||||
|
||||
@@ -49,6 +49,7 @@ fn main() -> Result<()> {
|
||||
// 在 config move 进 ServiceManager 之前,提取 AI 相关配置
|
||||
let ai_model_store = config.ai.model_store.clone();
|
||||
let ai_tools_dir = config.ai.tools_dir.clone();
|
||||
let ai_whisper_lib_dir = config.ai.whisper_lib_dir.clone();
|
||||
let ai_tmp_dir = config.ai.tmp_dir.clone();
|
||||
let ai_context_window = config.ai.context_window;
|
||||
|
||||
@@ -79,6 +80,7 @@ fn main() -> Result<()> {
|
||||
let ai_plugin = AiPlugin::new_default(
|
||||
ai_model_store,
|
||||
ai_tools_dir,
|
||||
ai_whisper_lib_dir,
|
||||
ai_tmp_dir,
|
||||
ai_context_window,
|
||||
);
|
||||
|
||||
@@ -46,11 +46,22 @@ pub trait AiBackend: Send {
|
||||
pub struct LocalCliBackend {
|
||||
/// 工具目录(含 whisper-cli, llama-cli, piper 二进制)
|
||||
tools_dir: PathBuf,
|
||||
/// whisper-cli 依赖的库路径(libggml*.so 所在)
|
||||
whisper_lib_dir: Option<PathBuf>,
|
||||
}
|
||||
|
||||
impl LocalCliBackend {
|
||||
pub fn new(tools_dir: PathBuf) -> Self {
|
||||
Self { tools_dir }
|
||||
Self {
|
||||
tools_dir,
|
||||
whisper_lib_dir: None,
|
||||
}
|
||||
}
|
||||
|
||||
/// 设置 whisper-cli 依赖库路径(部署时由 deploy_ai.sh 标定)
|
||||
pub fn with_whisper_lib_dir(mut self, lib_dir: PathBuf) -> Self {
|
||||
self.whisper_lib_dir = Some(lib_dir);
|
||||
self
|
||||
}
|
||||
|
||||
fn whisper_cli(&self) -> PathBuf {
|
||||
@@ -64,6 +75,13 @@ impl LocalCliBackend {
|
||||
fn piper(&self) -> PathBuf {
|
||||
self.tools_dir.join("piper")
|
||||
}
|
||||
|
||||
/// 给命令设置 LD_LIBRARY_PATH(whisper-cli 依赖 libggml*.so)
|
||||
fn with_env(&self, cmd: &mut Command) {
|
||||
if let Some(lib_dir) = &self.whisper_lib_dir {
|
||||
cmd.env("LD_LIBRARY_PATH", lib_dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl AiBackend for LocalCliBackend {
|
||||
@@ -71,7 +89,9 @@ impl AiBackend for LocalCliBackend {
|
||||
// whisper-cli -m <model> -f <audio> -l zh --no-timestamps -otxt -of <tmp>
|
||||
// 输出到 <tmp>.txt,读取后返回
|
||||
let tmp_out = audio_path.with_extension("asr.txt");
|
||||
let output = Command::new(self.whisper_cli())
|
||||
let mut cmd = Command::new(self.whisper_cli());
|
||||
self.with_env(&mut cmd);
|
||||
let output = cmd
|
||||
.arg("-m")
|
||||
.arg(model_path)
|
||||
.arg("-f")
|
||||
|
||||
@@ -47,10 +47,15 @@ impl AiPlugin {
|
||||
pub fn new_default(
|
||||
model_store: PathBuf,
|
||||
tools_dir: PathBuf,
|
||||
whisper_lib_dir: Option<PathBuf>,
|
||||
tmp_dir: PathBuf,
|
||||
context_window: usize,
|
||||
) -> Self {
|
||||
let backend = Box::new(backend::LocalCliBackend::new(tools_dir.clone()));
|
||||
let mut backend_builder = backend::LocalCliBackend::new(tools_dir.clone());
|
||||
if let Some(lib_dir) = whisper_lib_dir {
|
||||
backend_builder = backend_builder.with_whisper_lib_dir(lib_dir);
|
||||
}
|
||||
let backend = Box::new(backend_builder);
|
||||
let models = model_manager::ModelManager::new(model_store);
|
||||
let pipeline = ChatPipeline::new(backend, models, tmp_dir, context_window);
|
||||
Self {
|
||||
|
||||
Reference in New Issue
Block a user