Skip to main content

uarp_sdk/generated/api/
knowledge.rs

1// Code generated by @uarp/codegen from spec/openapi.json. DO NOT EDIT.
2//!
3//! Knowledge base management
4
5#![allow(unused_imports, clippy::too_many_arguments)]
6
7use reqwest::Method;
8use serde::{Deserialize, Serialize};
9
10use crate::client::{Client, Request, NO_BODY, NO_QUERY};
11use crate::error::Result;
12use crate::generated::models;
13use crate::multipart::{field_text, FilePart};
14use crate::util::encode_path;
15
16/// Knowledge base management
17#[derive(Debug, Clone)]
18pub struct KnowledgeApi {
19    pub(crate) client: Client,
20}
21
22impl Client {
23    /// Knowledge base management
24    pub fn knowledge(&self) -> KnowledgeApi {
25        KnowledgeApi { client: self.clone() }
26    }
27}
28
29impl KnowledgeApi {
30    /// Create a knowledge base
31    ///
32    /// `POST /api/v1/knowledge-bases`
33    ///
34    /// Required scopes: `memory:write`.
35    pub async fn create_knowledge_base(&self, body: &models::KnowledgeBaseCreate) -> Result<models::KnowledgeBase> {
36        self.client
37            .request_json(Request {
38                method: Method::POST,
39                path: "/api/v1/knowledge-bases".to_string(),
40                query: NO_QUERY,
41                body: Some(body),
42                headers: Vec::new(),
43                idempotent: true,
44            })
45            .await
46    }
47
48    /// Delete document
49    ///
50    /// `DELETE /api/v1/knowledge-bases/{id}/documents/{docId}`
51    ///
52    /// Required scopes: `memory:write`.
53    pub async fn delete_kb_document(&self, id: &str, doc_id: &str) -> Result<models::DeleteKbDocumentResponse> {
54        self.client
55            .request_json(Request {
56                method: Method::DELETE,
57                path: format!("/api/v1/knowledge-bases/{}/documents/{}", encode_path(id), encode_path(doc_id)),
58                query: NO_QUERY,
59                body: NO_BODY,
60                headers: Vec::new(),
61                idempotent: true,
62            })
63            .await
64    }
65
66    /// Delete knowledge base
67    ///
68    /// `DELETE /api/v1/knowledge-bases/{id}`
69    ///
70    /// Required scopes: `memory:write`.
71    pub async fn delete_knowledge_base(&self, id: &str) -> Result<models::DeleteKnowledgeBaseResponse> {
72        self.client
73            .request_json(Request {
74                method: Method::DELETE,
75                path: format!("/api/v1/knowledge-bases/{}", encode_path(id)),
76                query: NO_QUERY,
77                body: NO_BODY,
78                headers: Vec::new(),
79                idempotent: true,
80            })
81            .await
82    }
83
84    /// Get knowledge base
85    ///
86    /// `GET /api/v1/knowledge-bases/{id}`
87    ///
88    /// Required scopes: `memory:read`.
89    pub async fn get_knowledge_base(&self, id: &str) -> Result<models::KnowledgeBase> {
90        self.client
91            .request_json(Request {
92                method: Method::GET,
93                path: format!("/api/v1/knowledge-bases/{}", encode_path(id)),
94                query: NO_QUERY,
95                body: NO_BODY,
96                headers: Vec::new(),
97                idempotent: false,
98            })
99            .await
100    }
101
102    /// Ingest document into knowledge base
103    ///
104    /// `POST /api/v1/knowledge-bases/{kbId}/documents`
105    ///
106    /// Required scopes: `memory:write`.
107    pub async fn ingest_kb_document(&self, kb_id: &str, body: &models::IngestKbDocumentRequest) -> Result<models::IngestKbDocumentResponse> {
108        self.client
109            .request_json(Request {
110                method: Method::POST,
111                path: format!("/api/v1/knowledge-bases/{}/documents", encode_path(kb_id)),
112                query: NO_QUERY,
113                body: Some(body),
114                headers: Vec::new(),
115                idempotent: true,
116            })
117            .await
118    }
119
120    /// List documents in knowledge base
121    ///
122    /// `GET /api/v1/knowledge-bases/{kbId}/documents`
123    ///
124    /// Required scopes: `memory:read`.
125    pub async fn list_kb_documents(&self, kb_id: &str) -> Result<models::ListKbDocumentsResponse> {
126        self.client
127            .request_json(Request {
128                method: Method::GET,
129                path: format!("/api/v1/knowledge-bases/{}/documents", encode_path(kb_id)),
130                query: NO_QUERY,
131                body: NO_BODY,
132                headers: Vec::new(),
133                idempotent: false,
134            })
135            .await
136    }
137
138    /// List knowledge bases
139    ///
140    /// `GET /api/v1/knowledge-bases`
141    ///
142    /// Required scopes: `memory:read`.
143    pub async fn list_knowledge_bases(&self) -> Result<models::ListKnowledgeBasesResponse> {
144        self.client
145            .request_json(Request {
146                method: Method::GET,
147                path: "/api/v1/knowledge-bases".to_string(),
148                query: NO_QUERY,
149                body: NO_BODY,
150                headers: Vec::new(),
151                idempotent: false,
152            })
153            .await
154    }
155
156    /// Re-embed every chunk with the current model
157    ///
158    /// Recovers a knowledge base that was indexed without embeddings (keyword-only) and clears
159    /// embedding drift after a model change. Requires an embeddings backend: without one the answer
160    /// is 503 and nothing is written.
161    ///
162    /// `POST /api/v1/knowledge-bases/{kbId}/reindex`
163    ///
164    /// Required scopes: `memory:write`.
165    pub async fn reindex_knowledge_base(&self, kb_id: &str) -> Result<models::ReindexKnowledgeBaseResponse> {
166        self.client
167            .request_json(Request {
168                method: Method::POST,
169                path: format!("/api/v1/knowledge-bases/{}/reindex", encode_path(kb_id)),
170                query: NO_QUERY,
171                body: NO_BODY,
172                headers: Vec::new(),
173                idempotent: true,
174            })
175            .await
176    }
177
178    /// Retrieve chunks from one knowledge base
179    ///
180    /// Vector search when an embeddings backend is configured, keyword scoring when it is not —
181    /// `mode` says which ran, and a vector pass that matches nothing falls back to keyword rather
182    /// than answering empty. `status` distinguishes the three outcomes a caller must render
183    /// differently: `KB_EMPTY` (nothing indexed yet), `NO_MATCHES` (indexed, nothing matched) and
184    /// `RESULTS_FOUND`. All three are 200: an empty result is an answer here, not a failure.
185    ///
186    /// `POST /api/v1/knowledge-bases/{kbId}/search`
187    ///
188    /// Required scopes: `memory:write`.
189    pub async fn search_knowledge_base(&self, kb_id: &str, body: &models::SearchKnowledgeBaseRequest) -> Result<models::KnowledgeBaseSearchResult> {
190        self.client
191            .request_json(Request {
192                method: Method::POST,
193                path: format!("/api/v1/knowledge-bases/{}/search", encode_path(kb_id)),
194                query: NO_QUERY,
195                body: Some(body),
196                headers: Vec::new(),
197                idempotent: true,
198            })
199            .await
200    }
201
202    /// Update knowledge base
203    ///
204    /// WRITE SEMANTICS: merges. Measured 2026-08-31 on the wire: `{name}` left `description` intact
205    /// and vice versa, and `chunk_size` and `embedding_model` survived both. Note this is the
206    /// OPPOSITE of `PUT /agents/{id}/schedule`, which replaces — the verb decides nothing here, see
207    /// docs/WRITE_SEMANTICS.md.
208    ///
209    /// `PUT /api/v1/knowledge-bases/{id}`
210    ///
211    /// Required scopes: `memory:write`.
212    pub async fn update_knowledge_base(&self, id: &str, body: &models::KnowledgeBaseUpdate) -> Result<models::KnowledgeBase> {
213        self.client
214            .request_json(Request {
215                method: Method::PUT,
216                path: format!("/api/v1/knowledge-bases/{}", encode_path(id)),
217                query: NO_QUERY,
218                body: Some(body),
219                headers: Vec::new(),
220                idempotent: true,
221            })
222            .await
223    }
224}