From 736b14be15a9dfa7dc20a7c4ab340152d4eff7f8 Mon Sep 17 00:00:00 2001 From: Accusys Date: Fri, 8 May 2026 01:23:34 +0800 Subject: [PATCH] Fix smart search: use EmbeddingGemma instead of Ollama mxbai --- src/api/search.rs | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/src/api/search.rs b/src/api/search.rs index 262c143..bb6146e 100644 --- a/src/api/search.rs +++ b/src/api/search.rs @@ -5,6 +5,8 @@ use axum::{extract::State, http::StatusCode, response::Json, routing::post, Rout use serde::{Deserialize, Serialize}; use serde_json; +use crate::core::embedding::Embedder; + // --- Request / Response Structures --- #[derive(Debug, Deserialize)] @@ -51,8 +53,9 @@ pub async fn smart_search( let db = &state.db; let limit = req.limit.unwrap_or(5); - // 1. Generate Embedding using Ollama - let embedding = get_ollama_embedding(&req.query).await.map_err( + // 1. Generate Embedding using EmbeddingGemma via MOMENTRY_EMBED_URL + let embedder = Embedder::new("embeddinggemma-300m".to_string()); + let embedding = embedder.embed_query(&req.query).await.map_err( |e| -> (StatusCode, Json) { tracing::error!("Embedding failed: {}", e); ( @@ -155,36 +158,6 @@ pub async fn smart_search( Ok(Json(response)) } -// --- Helper: Ollama Embedding --- - -async fn get_ollama_embedding( - text: &str, -) -> Result, Box> { - let client = reqwest::Client::new(); - let payload = serde_json::json!({ - "model": "mxbai-embed-large", - "prompt": text - }); - - let res = client - .post("http://localhost:11434/api/embeddings") - .json(&payload) - .send() - .await? - .json::() - .await?; - - // Parse embedding array from response - let embedding = res["embedding"] - .as_array() - .ok_or("No embedding found in Ollama response")? - .iter() - .map(|v| v.as_f64().unwrap_or(0.0) as f32) - .collect(); - - Ok(embedding) -} - // --- Router Setup --- pub fn search_routes() -> Router {