strands_agents/types/
citations.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub struct CitationsConfig {
8 pub enabled: bool,
9}
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct DocumentCharLocation {
15 pub document_index: usize,
16 pub start: usize,
17 pub end: usize,
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22#[serde(rename_all = "camelCase")]
23pub struct DocumentChunkLocation {
24 pub document_index: usize,
25 pub start: usize,
26 pub end: usize,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct DocumentPageLocation {
33 pub document_index: usize,
34 pub start: usize,
35 pub end: usize,
36}
37
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40#[serde(rename_all = "camelCase")]
41pub struct SearchResultLocation {
42 pub search_result_index: usize,
43 pub start: usize,
44 pub end: usize,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub struct WebLocation {
50 pub url: String,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub domain: Option<String>,
53}
54
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
57#[serde(rename_all = "camelCase")]
58pub enum CitationLocation {
59 DocumentChar(DocumentCharLocation),
60 DocumentPage(DocumentPageLocation),
61 DocumentChunk(DocumentChunkLocation),
62 SearchResultLocation(SearchResultLocation),
63 Web(WebLocation),
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
68pub struct CitationSourceContent {
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub text: Option<String>,
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
75pub struct CitationGeneratedContent {
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub text: Option<String>,
78}
79
80#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
82#[serde(rename_all = "camelCase")]
83pub struct Citation {
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub location: Option<CitationLocation>,
86
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub source_content: Option<Vec<CitationSourceContent>>,
89
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub title: Option<String>,
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
96#[serde(rename_all = "camelCase")]
97pub struct CitationsContentBlock {
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub citations: Option<Vec<Citation>>,
100
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub content: Option<Vec<CitationGeneratedContent>>,
103}
104
105#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
107#[serde(rename_all = "camelCase")]
108pub struct CitationsDelta {
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub citations: Option<Vec<Citation>>,
111}
112