strands_agents/types/
citations.rs

1//! Citation type definitions modeled after the Bedrock API.
2
3use serde::{Deserialize, Serialize};
4
5/// Configuration for enabling citations on documents.
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub struct CitationsConfig {
8    pub enabled: bool,
9}
10
11/// Specifies a character-level location within a document.
12#[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/// Specifies a chunk-level location within a document.
21#[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/// Specifies a page-level location within a document.
30#[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/// Specifies a search result location within the content array.
39#[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/// Provides URL and domain information for a cited website.
48#[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/// Union type for citation locations.
56#[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/// Contains text content from a source document being cited.
67#[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/// Contains generated text content corresponding to a citation.
74#[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/// A citation that references a source document.
81#[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/// A content block containing citations and generated text.
95#[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/// Delta for streaming citation updates.
106#[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