Skip to main content

tt_retrieval/
types.rs

1//! Data shapes shared across the crate.
2
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct Corpus {
8    pub org_id: Uuid,
9    pub name: String,
10    pub description: Option<String>,
11    pub created_at: String, // ISO-8601
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct Document {
16    pub doc_id: Uuid,
17    pub corpus: String,
18    pub org_id: Uuid,
19    pub source_path: String,
20    pub bytes_indexed: u64,
21    pub chunks: u32,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct Chunk {
26    pub id: Uuid,
27    pub org_id: Uuid,
28    pub corpus: String,
29    pub doc_id: Uuid,
30    pub chunk_idx: u32,
31    pub text: String,
32    pub embedding: Vec<f32>, // 1536-dim
33    pub embedding_model: String,
34    pub metadata: serde_json::Value,
35}
36
37#[derive(Debug, Clone, Serialize)]
38pub struct RetrievalResult {
39    pub chunk_id: Uuid,
40    pub doc_id: Uuid,
41    pub chunk_idx: u32,
42    pub text: String,
43    pub similarity: f32,
44}
45
46#[derive(Debug, Clone, PartialEq)]
47pub struct RetrievableTag {
48    pub corpus: String,
49    pub k: u32,
50    /// Per-tag similarity floor override. `None` means use the default from the
51    /// substitution caller (see `substitute::DEFAULT_MIN_SIMILARITY`).
52    pub min_similarity: Option<f32>,
53    /// Span in the original message text (start_byte_idx, end_byte_idx_exclusive).
54    pub span: (usize, usize),
55}