diff --git a/src/backend/src/lib.rs b/src/backend/src/lib.rs index f1e09de..52faa23 100644 --- a/src/backend/src/lib.rs +++ b/src/backend/src/lib.rs @@ -24,25 +24,35 @@ } #[tauri::command] -fn get_mcp_info() -> Result { +fn get_mcp_info(app_handle: tauri::AppHandle) -> Result { let mut candidates = vec![PathBuf::from("mcp.json")]; + + // Add resource dir candidates + if let Ok(res_dir) = app_handle.path().resource_dir() { + candidates.push(res_dir.join("mcp.json")); + candidates.push(res_dir.join("resources").join("mcp.json")); + } + if let Ok(exe_path) = env::current_exe() { if let Some(exe_dir) = exe_path.parent() { let mut p = exe_dir.to_path_buf(); for _ in 0..5 { candidates.push(p.join("mcp.json")); + candidates.push(p.join("resources").join("mcp.json")); if !p.pop() { break; } } } } + let mut found_path = None; - for candidate in candidates { + for candidate in &candidates { + log::info!("Checking mcp.json candidate: {:?}", candidate); if candidate.exists() { - found_path = Some(candidate); + found_path = Some(candidate.clone()); break; } } - let mcp_path = found_path.ok_or_else(|| "mcp.json not found".to_string())?; + let mcp_path = found_path.ok_or_else(|| format!("mcp.json not found. Checked: {:?}", candidates))?; let content = std::fs::read_to_string(&mcp_path).map_err(|e| e.to_string())?; let mcp_data: serde_json::Value = serde_json::from_str(&content).map_err(|e| e.to_string())?; Ok(mcp_data) @@ -75,9 +85,13 @@ } } if let Ok(cwd) = env::current_dir() { config_paths.push(cwd.join("config.json")); } - if let Ok(res_dir) = app_handle.path().resource_dir() { config_paths.push(res_dir.join("config.json")); } + if let Ok(res_dir) = app_handle.path().resource_dir() { + config_paths.push(res_dir.join("config.json")); + config_paths.push(res_dir.join("resources").join("config.json")); + } for path in config_paths { + log::info!("Checking config.json candidate: {:?}", path); if path.exists() { if let Ok(content) = std::fs::read_to_string(path) { if let Ok(parsed) = serde_json::from_str::(&content) { return parsed; } @@ -173,9 +187,24 @@ } }; + let res_dir = app_handle.path().resource_dir().unwrap_or_default(); + let exe_dir = std::env::current_exe() + .map(|p| p.parent().map(|parent| parent.to_path_buf()).unwrap_or_default()) + .unwrap_or_default(); + + // Preference: res_dir > exe_dir + let base_dir = if res_dir.exists() { res_dir.clone() } else { exe_dir.clone() }; + + // Model path could be in models/ or resources/models/ + let mut model_path = base_dir.join("models").join("embeddinggemma-300m-q4_0.gguf"); + if !model_path.exists() { + model_path = base_dir.join("resources").join("models").join("embeddinggemma-300m-q4_0.gguf"); + } + log::info!("Using model path for sidecar: {:?}", model_path); + // Prepare arguments let args = [ - "--model", "models/embeddinggemma-300m-q4_0.gguf", // This might need absolute path if CWD is not root + "--model", model_path.to_str().unwrap_or(""), "--port", "8080", "--embedding", "--host", "127.0.0.1", @@ -183,10 +212,6 @@ "--parallel", "1" ]; - let res_dir = app_handle.path().resource_dir().unwrap_or_default(); - let exe_dir = std::env::current_exe() - .map(|p| p.parent().map(|parent| parent.to_path_buf()).unwrap_or_default()) - .unwrap_or_default(); // Diagnostic logging: List files in resource and exe directories log::info!("Diagnostic: Resource Dir: {:?}", res_dir);