use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use crate::v0::Meta;
use crate::{client::KagiClient, KagiError, KagiResult};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Answer {
pub meta: Meta,
pub data: Data,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Data {
pub output: String,
pub tokens: usize,
pub references: Option<Vec<Reference>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Reference {
pub title: String,
pub snippet: String,
pub url: String,
}
#[async_trait]
pub trait FastGPT {
async fn fastgpt(&self, query: &str, cache: bool) -> KagiResult<Answer>;
}
#[async_trait]
impl FastGPT for KagiClient {
async fn fastgpt(&self, query: &str, cache: bool) -> KagiResult<Answer> {
let request_body = serde_json::json!({ "query": query, "cache": cache });
let response = self.query("/v0/fastgpt", request_body).await?;
response
.json::<Answer>()
.await
.map_err(KagiError::ReqwestError)
}
}