use serde::{Deserialize, Serialize};
use std::sync::Arc;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Embedding {
chunk: Chunk,
vector: Arc<[f32]>,
}
impl Embedding {
pub fn new(chunk: Chunk, vector: impl Into<Arc<[f32]>>) -> Self {
Self {
chunk,
vector: vector.into(),
}
}
pub fn chunk(&self) -> &Chunk {
&self.chunk
}
pub fn vector(&self) -> Vec<f32> {
self.vector.as_ref().to_vec()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Eq)]
pub struct Chunk {
content: Arc<str>,
metadata: Arc<serde_json::Value>,
}
impl Chunk {
pub fn new(chunk: impl Into<Arc<str>>) -> Self {
Self {
content: chunk.into(),
metadata: Arc::new(serde_json::Value::Null),
}
}
pub fn new_with_metadata(content: impl Into<Arc<str>>, metadata: serde_json::Value) -> Self {
Self {
content: content.into(),
metadata: Arc::new(metadata),
}
}
pub fn content(&self) -> &str {
&self.content
}
pub fn metadata(&self) -> &serde_json::Value {
&self.metadata
}
}
pub type Chunks = Vec<Chunk>;