125 lines
3.6 KiB
Rust
125 lines
3.6 KiB
Rust
use crate::managers::model::{ModelInfo, ModelManager};
|
|
use crate::managers::transcription::TranscriptionManager;
|
|
use crate::settings::{get_settings, write_settings};
|
|
use std::sync::Arc;
|
|
use tauri::{AppHandle, State};
|
|
|
|
#[tauri::command]
|
|
pub async fn get_available_models(
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
) -> Result<Vec<ModelInfo>, String> {
|
|
Ok(model_manager.get_available_models())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn get_model_info(
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
model_id: String,
|
|
) -> Result<Option<ModelInfo>, String> {
|
|
Ok(model_manager.get_model_info(&model_id))
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn download_model(
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
model_id: String,
|
|
) -> Result<(), String> {
|
|
model_manager
|
|
.download_model(&model_id)
|
|
.await
|
|
.map_err(|e| e.to_string())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn delete_model(
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
model_id: String,
|
|
) -> Result<(), String> {
|
|
model_manager
|
|
.delete_model(&model_id)
|
|
.map_err(|e| e.to_string())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn set_active_model(
|
|
app_handle: AppHandle,
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
transcription_manager: State<'_, Arc<TranscriptionManager>>,
|
|
model_id: String,
|
|
) -> Result<(), String> {
|
|
// Check if model exists and is available
|
|
let model_info = model_manager
|
|
.get_model_info(&model_id)
|
|
.ok_or_else(|| format!("Model not found: {}", model_id))?;
|
|
|
|
if !model_info.is_downloaded {
|
|
return Err(format!("Model not downloaded: {}", model_id));
|
|
}
|
|
|
|
// Load the model in the transcription manager
|
|
transcription_manager
|
|
.load_model(&model_id)
|
|
.map_err(|e| e.to_string())?;
|
|
|
|
// Update settings
|
|
let mut settings = get_settings(&app_handle);
|
|
settings.selected_model = model_id.clone();
|
|
write_settings(&app_handle, settings);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn get_current_model(app_handle: AppHandle) -> Result<String, String> {
|
|
let settings = get_settings(&app_handle);
|
|
Ok(settings.selected_model)
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn get_transcription_model_status(
|
|
transcription_manager: State<'_, Arc<TranscriptionManager>>,
|
|
) -> Result<Option<String>, String> {
|
|
Ok(transcription_manager.get_current_model())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn is_model_loading(
|
|
transcription_manager: State<'_, Arc<TranscriptionManager>>,
|
|
) -> Result<bool, String> {
|
|
// Check if transcription manager has a loaded model
|
|
let current_model = transcription_manager.get_current_model();
|
|
Ok(current_model.is_none())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn has_any_models_available(
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
) -> Result<bool, String> {
|
|
let models = model_manager.get_available_models();
|
|
Ok(models.iter().any(|m| m.is_downloaded))
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn has_any_models_or_downloads(
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
) -> Result<bool, String> {
|
|
let models = model_manager.get_available_models();
|
|
// Return true if any models are downloaded OR if any downloads are in progress
|
|
Ok(models.iter().any(|m| m.is_downloaded))
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn cancel_download(
|
|
model_manager: State<'_, Arc<ModelManager>>,
|
|
model_id: String,
|
|
) -> Result<(), String> {
|
|
model_manager
|
|
.cancel_download(&model_id)
|
|
.map_err(|e| e.to_string())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn get_recommended_first_model() -> Result<String, String> {
|
|
// Recommend Parakeet V3 model for first-time users - fastest and most accurate
|
|
Ok("parakeet-tdt-0.6b-v3".to_string())
|
|
}
|