Fix smart search: use EmbeddingGemma instead of Ollama mxbai

This commit is contained in:
Accusys
2026-05-08 01:23:34 +08:00
parent b577f5b3bc
commit 736b14be15

View File

@@ -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<serde_json::Value>) {
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<Vec<f32>, Box<dyn std::error::Error + Send + Sync>> {
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::<serde_json::Value>()
.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<crate::api::server::AppState> {