1pub mod chunking;
2pub mod document_index;
3pub mod inference;
4pub mod language;
5
6use chunking::ChunkRequest;
7use document_index::{Document, SearchResult};
8use inference::{ChatRequest, ChatResponse, Completion, CompletionRequest};
9use language::SelectLanguageRequest;
10use serde::{Deserialize, Serialize};
11
12use crate::{DocumentPath, LanguageCode, SearchRequest};
13
14pub trait Csi {
16 fn chunk(&self, request: ChunkRequest) -> Vec<String> {
19 self.chunk_concurrently(vec![request]).remove(0)
20 }
21
22 fn chunk_concurrently(&self, requests: Vec<ChunkRequest>) -> Vec<Vec<String>>;
24
25 fn search(&self, request: SearchRequest) -> Vec<SearchResult> {
27 self.search_concurrently(vec![request]).remove(0)
28 }
29
30 fn search_concurrently(&self, requests: Vec<SearchRequest>) -> Vec<Vec<SearchResult>>;
32
33 fn document<Metadata>(&self, path: DocumentPath) -> anyhow::Result<Document<Metadata>>
38 where
39 Metadata: for<'a> Deserialize<'a> + Serialize,
40 {
41 Ok(self.documents(vec![path])?.remove(0))
42 }
43
44 fn documents<'m, Metadata>(
49 &self,
50 paths: Vec<DocumentPath>,
51 ) -> anyhow::Result<Vec<Document<Metadata>>>
52 where
53 Metadata: for<'a> Deserialize<'a> + Serialize;
54
55 fn document_metadata<Metadata>(&self, path: DocumentPath) -> anyhow::Result<Option<Metadata>>
60 where
61 Metadata: for<'a> Deserialize<'a> + Serialize,
62 {
63 Ok(self.documents_metadata(vec![path])?.remove(0))
64 }
65
66 fn documents_metadata<Metadata>(
71 &self,
72 paths: Vec<DocumentPath>,
73 ) -> anyhow::Result<Vec<Option<Metadata>>>
74 where
75 Metadata: for<'a> Deserialize<'a> + Serialize;
76
77 fn chat(&self, request: ChatRequest) -> ChatResponse {
80 self.chat_concurrently(vec![request]).remove(0)
81 }
82
83 fn chat_concurrently(&self, requests: Vec<ChatRequest>) -> Vec<ChatResponse>;
85
86 fn complete(&self, request: CompletionRequest) -> Completion {
88 self.complete_concurrently(vec![request]).remove(0)
89 }
90
91 fn complete_concurrently(&self, requests: Vec<CompletionRequest>) -> Vec<Completion>;
93
94 fn select_language(&self, request: SelectLanguageRequest) -> Option<LanguageCode> {
100 self.select_language_concurrently(vec![request]).remove(0)
101 }
102
103 fn select_language_concurrently(
105 &self,
106 requests: Vec<SelectLanguageRequest>,
107 ) -> Vec<Option<LanguageCode>>;
108}