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>, ) -> Result, String> { Ok(model_manager.get_available_models()) } #[tauri::command] pub async fn get_model_info( model_manager: State<'_, Arc>, model_id: String, ) -> Result, String> { Ok(model_manager.get_model_info(&model_id)) } #[tauri::command] pub async fn download_model( model_manager: State<'_, Arc>, 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>, 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>, transcription_manager: State<'_, Arc>, 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 { let settings = get_settings(&app_handle); Ok(settings.selected_model) } #[tauri::command] pub async fn get_transcription_model_status( transcription_manager: State<'_, Arc>, ) -> Result, String> { Ok(transcription_manager.get_current_model()) } #[tauri::command] pub async fn is_model_loading( transcription_manager: State<'_, Arc>, ) -> Result { // 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>, ) -> Result { 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>, ) -> Result { 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>, 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 { // Recommend Parakeet V3 model for first-time users - fastest and most accurate Ok("parakeet-tdt-0.6b-v3".to_string()) }