Fix smart search: use EmbeddingGemma instead of Ollama mxbai
This commit is contained in:
@@ -5,6 +5,8 @@ use axum::{extract::State, http::StatusCode, response::Json, routing::post, Rout
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json;
|
use serde_json;
|
||||||
|
|
||||||
|
use crate::core::embedding::Embedder;
|
||||||
|
|
||||||
// --- Request / Response Structures ---
|
// --- Request / Response Structures ---
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
@@ -51,8 +53,9 @@ pub async fn smart_search(
|
|||||||
let db = &state.db;
|
let db = &state.db;
|
||||||
let limit = req.limit.unwrap_or(5);
|
let limit = req.limit.unwrap_or(5);
|
||||||
|
|
||||||
// 1. Generate Embedding using Ollama
|
// 1. Generate Embedding using EmbeddingGemma via MOMENTRY_EMBED_URL
|
||||||
let embedding = get_ollama_embedding(&req.query).await.map_err(
|
let embedder = Embedder::new("embeddinggemma-300m".to_string());
|
||||||
|
let embedding = embedder.embed_query(&req.query).await.map_err(
|
||||||
|e| -> (StatusCode, Json<serde_json::Value>) {
|
|e| -> (StatusCode, Json<serde_json::Value>) {
|
||||||
tracing::error!("Embedding failed: {}", e);
|
tracing::error!("Embedding failed: {}", e);
|
||||||
(
|
(
|
||||||
@@ -155,36 +158,6 @@ pub async fn smart_search(
|
|||||||
Ok(Json(response))
|
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 ---
|
// --- Router Setup ---
|
||||||
|
|
||||||
pub fn search_routes() -> Router<crate::api::server::AppState> {
|
pub fn search_routes() -> Router<crate::api::server::AppState> {
|
||||||
|
|||||||
Reference in New Issue
Block a user