agentroot_core/llm/
traits.rs1use crate::error::Result;
4use async_trait::async_trait;
5
6#[async_trait]
8pub trait Embedder: Send + Sync {
9 async fn embed(&self, text: &str) -> Result<Vec<f32>>;
11
12 async fn embed_batch(&self, texts: &[String]) -> Result<Vec<Vec<f32>>>;
14
15 fn dimensions(&self) -> usize;
17
18 fn model_name(&self) -> &str;
20}
21
22#[async_trait]
24pub trait Reranker: Send + Sync {
25 async fn rerank(&self, query: &str, documents: &[RerankDocument]) -> Result<Vec<RerankResult>>;
27
28 fn model_name(&self) -> &str;
30}
31
32#[derive(Debug, Clone)]
34pub struct RerankDocument {
35 pub id: String,
36 pub text: String,
37}
38
39#[derive(Debug, Clone)]
41pub struct RerankResult {
42 pub id: String,
43 pub score: f64,
44}
45
46#[async_trait]
48pub trait QueryExpander: Send + Sync {
49 async fn expand(&self, query: &str, context: Option<&str>) -> Result<ExpandedQuery>;
51
52 fn model_name(&self) -> &str;
54}
55
56#[derive(Debug, Clone, Default)]
58pub struct ExpandedQuery {
59 pub lexical: Vec<String>,
61 pub semantic: Vec<String>,
63 pub hyde: Option<String>,
65}
66
67#[async_trait]
69pub trait Tokenizer: Send + Sync {
70 async fn tokenize(&self, text: &str) -> Result<Vec<u32>>;
72
73 async fn detokenize(&self, tokens: &[u32]) -> Result<String>;
75
76 async fn count_tokens(&self, text: &str) -> Result<usize>;
78}