use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RagDocument {
pub id: Uuid,
pub profile_id: Uuid,
pub source: String,
pub chunk_text: String,
pub embedding: Vec<f32>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RagHit {
pub id: Uuid,
pub source: String,
pub chunk_text: String,
pub distance: f32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RagSourceInfo {
pub source: String,
pub chunks: usize,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RagStoredSource {
pub source: String,
pub content: String,
}
impl RagDocument {
pub fn new(
profile_id: Uuid,
source: impl Into<String>,
chunk_text: impl Into<String>,
embedding: Vec<f32>,
) -> Self {
Self {
id: Uuid::new_v4(),
profile_id,
source: source.into(),
chunk_text: chunk_text.into(),
embedding,
created_at: Utc::now(),
}
}
}