use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Passage {
#[serde(rename = "_id", skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
pub text: String,
pub embedding: Vec<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hash: Option<i64>,
}
#[derive(Deserialize, Serialize, Clone, Debug, Default)]
pub struct Metadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Deserialize, Debug)]
pub struct IngestRequest {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct IngestResponse {
pub passage_ids: Vec<String>,
pub count: usize,
}
#[derive(Deserialize, Debug)]
pub struct QuestionRequest {
pub question: String,
}
#[derive(Serialize, Clone, Debug)]
pub struct LLMRequest {
pub model: String,
pub messages: Vec<LLMMessage>,
pub stream: bool,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct LLMMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Deserialize)]
pub struct LLMStreamResponse {
pub choices: Vec<LLMChoice>,
}
#[derive(Deserialize, Debug)]
pub struct LLMChoice {
pub delta: LLMStreamMessage,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct LLMStreamMessage {
pub content: String,
}