exa_async/types/
answer.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct AnswerRequest {
9 pub query: String,
11
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub model: Option<String>,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
18 pub system_prompt: Option<String>,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub text: Option<bool>,
23}
24
25impl AnswerRequest {
26 #[must_use]
28 pub fn new(query: impl Into<String>) -> Self {
29 Self {
30 query: query.into(),
31 model: None,
32 system_prompt: None,
33 text: None,
34 }
35 }
36
37 #[must_use]
39 pub fn with_model(mut self, model: impl Into<String>) -> Self {
40 self.model = Some(model.into());
41 self
42 }
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47#[serde(rename_all = "camelCase")]
48pub struct Citation {
49 pub url: String,
51 #[serde(default)]
53 pub title: Option<String>,
54 #[serde(default)]
56 pub id: Option<String>,
57 #[serde(default)]
59 pub published_date: Option<String>,
60 #[serde(default)]
62 pub author: Option<String>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
67#[serde(rename_all = "camelCase")]
68pub struct AnswerResponse {
69 pub answer: String,
71
72 #[serde(default)]
74 pub citations: Vec<Citation>,
75
76 #[serde(default)]
78 pub cost_dollars: Option<super::search::CostDollars>,
79}