uarp-sdk 0.5.6

Async Rust client for the UARP (Snaga) Universal Agent Runtime Platform API
Documentation
// Code generated by @uarp/codegen from spec/openapi.json. DO NOT EDIT.
//!
//! Knowledge base management

#![allow(unused_imports, clippy::too_many_arguments)]

use reqwest::Method;
use serde::{Deserialize, Serialize};

use crate::client::{Client, Request, NO_BODY, NO_QUERY};
use crate::error::Result;
use crate::generated::models;
use crate::multipart::{field_text, FilePart};
use crate::util::encode_path;

/// Knowledge base management
#[derive(Debug, Clone)]
pub struct KnowledgeApi {
    pub(crate) client: Client,
}

impl Client {
    /// Knowledge base management
    pub fn knowledge(&self) -> KnowledgeApi {
        KnowledgeApi { client: self.clone() }
    }
}

impl KnowledgeApi {
    /// Create a knowledge base
    ///
    /// `POST /api/v1/knowledge-bases`
    ///
    /// Required scopes: `memory:write`.
    pub async fn create_knowledge_base(&self, body: &models::KnowledgeBaseCreate) -> Result<models::KnowledgeBase> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: "/api/v1/knowledge-bases".to_string(),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Delete document
    ///
    /// `DELETE /api/v1/knowledge-bases/{id}/documents/{docId}`
    ///
    /// Required scopes: `memory:write`.
    pub async fn delete_kb_document(&self, id: &str, doc_id: &str) -> Result<()> {
        self.client
            .request_empty(Request {
                method: Method::DELETE,
                path: format!("/api/v1/knowledge-bases/{}/documents/{}", encode_path(id), encode_path(doc_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Delete knowledge base
    ///
    /// `DELETE /api/v1/knowledge-bases/{id}`
    ///
    /// Required scopes: `memory:write`.
    pub async fn delete_knowledge_base(&self, id: &str) -> Result<()> {
        self.client
            .request_empty(Request {
                method: Method::DELETE,
                path: format!("/api/v1/knowledge-bases/{}", encode_path(id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Get knowledge base
    ///
    /// `GET /api/v1/knowledge-bases/{id}`
    ///
    /// Required scopes: `memory:read`.
    pub async fn get_knowledge_base(&self, id: &str) -> Result<models::KnowledgeBase> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/knowledge-bases/{}", encode_path(id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// Ingest document into knowledge base
    ///
    /// `POST /api/v1/knowledge-bases/{kbId}/documents`
    ///
    /// Required scopes: `memory:write`.
    pub async fn ingest_kb_document(&self, kb_id: &str, body: &models::IngestKbDocumentRequest) -> Result<models::IngestKbDocumentResponse> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: format!("/api/v1/knowledge-bases/{}/documents", encode_path(kb_id)),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// List documents in knowledge base
    ///
    /// `GET /api/v1/knowledge-bases/{kbId}/documents`
    ///
    /// Required scopes: `memory:read`.
    pub async fn list_kb_documents(&self, kb_id: &str) -> Result<models::ListKbDocumentsResponse> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/knowledge-bases/{}/documents", encode_path(kb_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// List knowledge bases
    ///
    /// `GET /api/v1/knowledge-bases`
    ///
    /// Required scopes: `memory:read`.
    pub async fn list_knowledge_bases(&self) -> Result<models::ListKnowledgeBasesResponse> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: "/api/v1/knowledge-bases".to_string(),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// Update knowledge base
    ///
    /// `PUT /api/v1/knowledge-bases/{id}`
    ///
    /// Required scopes: `memory:write`.
    pub async fn update_knowledge_base(&self, id: &str, body: &models::KnowledgeBaseUpdate) -> Result<models::KnowledgeBase> {
        self.client
            .request_json(Request {
                method: Method::PUT,
                path: format!("/api/v1/knowledge-bases/{}", encode_path(id)),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }
}