use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CitationsConfig {
pub enabled: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentCharLocation {
pub document_index: usize,
pub start: usize,
pub end: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentChunkLocation {
pub document_index: usize,
pub start: usize,
pub end: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentPageLocation {
pub document_index: usize,
pub start: usize,
pub end: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SearchResultLocation {
pub search_result_index: usize,
pub start: usize,
pub end: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct WebLocation {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum CitationLocation {
DocumentChar(DocumentCharLocation),
DocumentPage(DocumentPageLocation),
DocumentChunk(DocumentChunkLocation),
SearchResultLocation(SearchResultLocation),
Web(WebLocation),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct CitationSourceContent {
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct CitationGeneratedContent {
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct Citation {
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<CitationLocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_content: Option<Vec<CitationSourceContent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CitationsContentBlock {
#[serde(skip_serializing_if = "Option::is_none")]
pub citations: Option<Vec<Citation>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<Vec<CitationGeneratedContent>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CitationsDelta {
#[serde(skip_serializing_if = "Option::is_none")]
pub citations: Option<Vec<Citation>>,
}