kagi_api/v0/
fastgpt.rs

1use async_trait::async_trait;
2use serde::{Deserialize, Serialize};
3
4use crate::v0::Meta;
5use crate::{client::KagiClient, KagiError, KagiResult};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Answer {
9    pub meta: Meta,
10    pub data: Data,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct Data {
15    pub output: String,
16    pub tokens: usize,
17    pub references: Option<Vec<Reference>>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct Reference {
22    pub title: String,
23    pub snippet: String,
24    pub url: String,
25}
26
27#[async_trait]
28pub trait FastGPT {
29    async fn fastgpt(&self, query: &str, cache: bool) -> KagiResult<Answer>;
30}
31
32#[async_trait]
33impl FastGPT for KagiClient {
34    async fn fastgpt(&self, query: &str, cache: bool) -> KagiResult<Answer> {
35        let request_body = serde_json::json!({ "query": query, "cache": cache });
36        let response = self.query("/v0/fastgpt", request_body).await?;
37        response
38            .json::<Answer>()
39            .await
40            .map_err(KagiError::ReqwestError)
41    }
42}