Files
minne/src/server/routes/query.rs
2024-12-14 23:14:30 +01:00

45 lines
1.1 KiB
Rust

pub mod helper;
pub mod prompt;
use crate::{error::ApiError, server::AppState, storage::types::user::User};
use axum::{extract::State, response::IntoResponse, Extension, Json};
use helper::get_answer_with_references;
use serde::Deserialize;
use tracing::info;
#[derive(Debug, Deserialize)]
pub struct QueryInput {
query: String,
}
#[derive(Debug, Deserialize)]
pub struct Reference {
#[allow(dead_code)]
pub reference: String,
}
#[derive(Debug, Deserialize)]
pub struct LLMResponseFormat {
pub answer: String,
#[allow(dead_code)]
pub references: Vec<Reference>,
}
pub async fn query_handler(
State(state): State<AppState>,
Extension(user): Extension<User>,
Json(query): Json<QueryInput>,
) -> Result<impl IntoResponse, ApiError> {
info!("Received input: {:?}", query);
info!("{:?}", user);
let answer =
get_answer_with_references(&state.surreal_db_client, &state.openai_client, &query.query)
.await?;
Ok(
Json(serde_json::json!({"answer": answer.content, "references": answer.references}))
.into_response(),
)
}