mod device;
mod download;
mod model;
mod text_decoder;
pub use device::{Device, DeviceConfig, device_name, get_device, is_gpu_available};
pub use download::{ModelDownloader, ModelSource, download_model};
pub use model::{
DownloadProgress, DownloadStatus, ModelInfo, ModelManager, ModelType, TROCR_FILES,
TROCR_MODELS, VAD_MODEL_ID, VAD_MODEL_SIZE, VAD_MODEL_URL, WHISPER_FILES, WHISPER_MODELS,
};
pub use text_decoder::{DecodingConfig, TextDecoder};
use crate::error::Result;
use std::path::PathBuf;
pub fn get_ml_data_dir() -> Result<PathBuf> {
let home = dirs_path()
.ok_or_else(|| crate::error::AumateError::Other("Could not find home directory".into()))?;
let data_dir = home.join(".aumate");
std::fs::create_dir_all(&data_dir)?;
Ok(data_dir)
}
pub fn get_models_dir() -> Result<PathBuf> {
let data_dir = get_ml_data_dir()?;
let models_dir = data_dir.join("models");
std::fs::create_dir_all(&models_dir)?;
Ok(models_dir)
}
pub fn get_whisper_models_dir() -> Result<PathBuf> {
let models_dir = get_models_dir()?;
let whisper_dir = models_dir.join("whisper");
std::fs::create_dir_all(&whisper_dir)?;
Ok(whisper_dir)
}
pub fn get_trocr_models_dir() -> Result<PathBuf> {
let models_dir = get_models_dir()?;
let trocr_dir = models_dir.join("trocr");
std::fs::create_dir_all(&trocr_dir)?;
Ok(trocr_dir)
}
pub fn get_vad_models_dir() -> Result<PathBuf> {
let models_dir = get_models_dir()?;
let vad_dir = models_dir.join("vad");
std::fs::create_dir_all(&vad_dir)?;
Ok(vad_dir)
}
fn dirs_path() -> Option<PathBuf> {
#[cfg(target_os = "macos")]
{
std::env::var_os("HOME").map(PathBuf::from)
}
#[cfg(target_os = "windows")]
{
std::env::var_os("USERPROFILE").map(PathBuf::from)
}
#[cfg(target_os = "linux")]
{
std::env::var_os("HOME").map(PathBuf::from)
}
}