exa_async/types/
answer.rs1use serde::Deserialize;
4use serde::Serialize;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct AnswerRequest {
10 pub query: String,
12
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub model: Option<String>,
16
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub system_prompt: Option<String>,
20
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub text: Option<bool>,
24}
25
26impl AnswerRequest {
27 #[must_use]
29 pub fn new(query: impl Into<String>) -> Self {
30 Self {
31 query: query.into(),
32 model: None,
33 system_prompt: None,
34 text: None,
35 }
36 }
37
38 #[must_use]
40 pub fn with_model(mut self, model: impl Into<String>) -> Self {
41 self.model = Some(model.into());
42 self
43 }
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(rename_all = "camelCase")]
49pub struct Citation {
50 pub url: String,
52 #[serde(default)]
54 pub title: Option<String>,
55 #[serde(default)]
57 pub id: Option<String>,
58 #[serde(default)]
60 pub published_date: Option<String>,
61 #[serde(default)]
63 pub author: Option<String>,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize)]
68#[serde(rename_all = "camelCase")]
69pub struct AnswerResponse {
70 pub answer: String,
72
73 #[serde(default)]
75 pub citations: Vec<Citation>,
76
77 #[serde(default)]
79 pub cost_dollars: Option<super::search::CostDollars>,
80}