use super::*;
#[derive(Clone, Debug, PartialEq)]
pub enum AiAgent {
AiAgentAsk(AiAgentAsk),
AiAgentTextGen(AiAgentTextGen),
AiAgentExtract(AiAgentExtract),
AiAgentExtractStructured(AiAgentExtractStructured),
Unknown(serde_json::Value),
}
impl Default for AiAgent {
fn default() -> Self {
Self::Unknown(Default::default())
}
}
impl serde::Serialize for AiAgent {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::AiAgentAsk(inner) => inner.serialize(serializer),
Self::AiAgentTextGen(inner) => inner.serialize(serializer),
Self::AiAgentExtract(inner) => inner.serialize(serializer),
Self::AiAgentExtractStructured(inner) => inner.serialize(serializer),
Self::Unknown(inner) => inner.serialize(serializer),
}
}
}
impl<'de> serde::Deserialize<'de> for AiAgent {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = serde_json::Value::deserialize(deserializer)?;
let tag = value
.get("type")
.and_then(serde_json::Value::as_str)
.map(str::to_owned);
match tag.as_deref() {
Some("ai_agent_ask") => Ok(Self::AiAgentAsk(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("ai_agent_text_gen") => Ok(Self::AiAgentTextGen(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("ai_agent_extract") => Ok(Self::AiAgentExtract(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("ai_agent_extract_structured") => Ok(Self::AiAgentExtractStructured(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
_ => Ok(Self::Unknown(value)),
}
}
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentAsk {
pub r#type: AiAgentAskType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text: Option<AiAgentLongTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text: Option<AiAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spreadsheet: Option<AiAgentSpreadsheetTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text_multi: Option<AiAgentLongTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text_multi: Option<AiAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image: Option<AiAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image_multi: Option<AiAgentBasicTextTool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentBasicGenTool {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub num_tokens_for_completion: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub llm_endpoint_params: Option<AiLlmEndpointParams>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub system_message: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt_template: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content_template: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentBasicTextTool {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub num_tokens_for_completion: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub llm_endpoint_params: Option<AiLlmEndpointParams>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub system_message: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt_template: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentExtract {
pub r#type: AiAgentExtractType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text: Option<AiAgentLongTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text: Option<AiAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image: Option<AiAgentBasicTextTool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentExtractStructured {
pub r#type: AiAgentExtractStructuredType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text: Option<AiAgentLongTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text: Option<AiAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image: Option<AiAgentBasicTextTool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentInfo {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub models: Option<Vec<AiAgentInfoModels>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub processor: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentLongTextTool {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub num_tokens_for_completion: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub llm_endpoint_params: Option<AiLlmEndpointParams>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub system_message: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt_template: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentReference {
pub r#type: AiAgentReferenceType,
pub id: String,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentTextGen {
pub r#type: AiAgentTextGenType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_gen: Option<AiAgentBasicGenTool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAsk {
pub mode: AiAskMode,
pub prompt: String,
pub items: Vec<AiItemAsk>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dialogue_history: Option<Vec<AiDialogueHistory>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_citations: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai_agent: Option<AiAskAgent>,
}
#[derive(Clone, Debug, PartialEq)]
pub enum AiAskAgent {
AiAgentId(AiAgentReference),
AiAgentAsk(AiAgentAsk),
Unknown(serde_json::Value),
}
impl Default for AiAskAgent {
fn default() -> Self {
Self::Unknown(Default::default())
}
}
impl serde::Serialize for AiAskAgent {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::AiAgentId(inner) => inner.serialize(serializer),
Self::AiAgentAsk(inner) => inner.serialize(serializer),
Self::Unknown(inner) => inner.serialize(serializer),
}
}
}
impl<'de> serde::Deserialize<'de> for AiAskAgent {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = serde_json::Value::deserialize(deserializer)?;
let tag = value
.get("type")
.and_then(serde_json::Value::as_str)
.map(str::to_owned);
match tag.as_deref() {
Some("ai_agent_id") => Ok(Self::AiAgentId(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("ai_agent_ask") => Ok(Self::AiAgentAsk(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
_ => Ok(Self::Unknown(value)),
}
}
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiCitation {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<AiCitationType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiDialogueHistory {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub answer: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtract {
pub prompt: String,
pub items: Vec<AiItemBase>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai_agent: Option<AiExtractAgent>,
}
#[derive(Clone, Debug, PartialEq)]
pub enum AiExtractAgent {
AiAgentId(AiAgentReference),
AiAgentExtract(AiAgentExtract),
Unknown(serde_json::Value),
}
impl Default for AiExtractAgent {
fn default() -> Self {
Self::Unknown(Default::default())
}
}
impl serde::Serialize for AiExtractAgent {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::AiAgentId(inner) => inner.serialize(serializer),
Self::AiAgentExtract(inner) => inner.serialize(serializer),
Self::Unknown(inner) => inner.serialize(serializer),
}
}
}
impl<'de> serde::Deserialize<'de> for AiExtractAgent {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = serde_json::Value::deserialize(deserializer)?;
let tag = value
.get("type")
.and_then(serde_json::Value::as_str)
.map(str::to_owned);
match tag.as_deref() {
Some("ai_agent_id") => Ok(Self::AiAgentId(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("ai_agent_extract") => Ok(Self::AiAgentExtract(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
_ => Ok(Self::Unknown(value)),
}
}
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtractFieldOption {
pub key: String,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtractResponse {
#[serde(flatten)]
pub extra: std::collections::HashMap<String, serde_json::Value>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtractStructured {
pub items: Vec<AiItemBase>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata_template: Option<AiExtractStructuredMetadataTemplate>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fields: Option<Vec<AiExtractStructuredFields>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai_agent: Option<AiExtractStructuredAgent>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_confidence_score: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_reference: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub taxonomy_sources: Option<Vec<AiTaxonomySource>>,
}
#[derive(Clone, Debug, PartialEq)]
pub enum AiExtractStructuredAgent {
AiAgentId(AiAgentReference),
AiAgentExtractStructured(AiAgentExtractStructured),
Unknown(serde_json::Value),
}
impl Default for AiExtractStructuredAgent {
fn default() -> Self {
Self::Unknown(Default::default())
}
}
impl serde::Serialize for AiExtractStructuredAgent {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::AiAgentId(inner) => inner.serialize(serializer),
Self::AiAgentExtractStructured(inner) => inner.serialize(serializer),
Self::Unknown(inner) => inner.serialize(serializer),
}
}
}
impl<'de> serde::Deserialize<'de> for AiExtractStructuredAgent {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = serde_json::Value::deserialize(deserializer)?;
let tag = value
.get("type")
.and_then(serde_json::Value::as_str)
.map(str::to_owned);
match tag.as_deref() {
Some("ai_agent_id") => Ok(Self::AiAgentId(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("ai_agent_extract_structured") => Ok(Self::AiAgentExtractStructured(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
_ => Ok(Self::Unknown(value)),
}
}
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtractStructuredResponse {
pub answer: AiExtractResponse,
pub created_at: chrono::DateTime<chrono::Utc>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub completion_reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence_score: Option<std::collections::HashMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reference: Option<std::collections::HashMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai_agent_info: Option<AiAgentInfo>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtractSubField {
pub key: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(
rename = "displayName",
default,
skip_serializing_if = "Option::is_none"
)]
pub display_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<Vec<AiExtractFieldOption>>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiItemBase {
pub id: String,
pub r#type: AiCitationType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiItemAsk {
pub id: String,
pub r#type: AiItemAskType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiOptionsRules {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub multi_select: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub selectable_levels: Option<Vec<i64>>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiResponse {
pub answer: String,
pub created_at: chrono::DateTime<chrono::Utc>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub completion_reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai_agent_info: Option<AiAgentInfo>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiResponseFull {
pub answer: String,
pub created_at: chrono::DateTime<chrono::Utc>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub completion_reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai_agent_info: Option<AiAgentInfo>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub citations: Option<Vec<AiCitation>>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiTaxonomyFileReference {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<AiCitationType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub taxonomy_key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiTaxonomyReference {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<AiTaxonomyReferenceType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub taxonomy_key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Clone, Debug, PartialEq)]
pub enum AiTaxonomySource {
Taxonomy(AiTaxonomyReference),
File(AiTaxonomyFileReference),
Unknown(serde_json::Value),
}
impl Default for AiTaxonomySource {
fn default() -> Self {
Self::Unknown(Default::default())
}
}
impl serde::Serialize for AiTaxonomySource {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::Taxonomy(inner) => inner.serialize(serializer),
Self::File(inner) => inner.serialize(serializer),
Self::Unknown(inner) => inner.serialize(serializer),
}
}
}
impl<'de> serde::Deserialize<'de> for AiTaxonomySource {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = serde_json::Value::deserialize(deserializer)?;
let tag = value
.get("type")
.and_then(serde_json::Value::as_str)
.map(str::to_owned);
match tag.as_deref() {
Some("taxonomy") => Ok(Self::Taxonomy(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("file") => Ok(Self::File(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
_ => Ok(Self::Unknown(value)),
}
}
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiTextGen {
pub prompt: String,
pub items: Vec<AiTextGenItems>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dialogue_history: Option<Vec<AiDialogueHistory>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai_agent: Option<AiTextGenAgent>,
}
#[derive(Clone, Debug, PartialEq)]
pub enum AiTextGenAgent {
AiAgentId(AiAgentReference),
AiAgentTextGen(AiAgentTextGen),
Unknown(serde_json::Value),
}
impl Default for AiTextGenAgent {
fn default() -> Self {
Self::Unknown(Default::default())
}
}
impl serde::Serialize for AiTextGenAgent {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::AiAgentId(inner) => inner.serialize(serializer),
Self::AiAgentTextGen(inner) => inner.serialize(serializer),
Self::Unknown(inner) => inner.serialize(serializer),
}
}
}
impl<'de> serde::Deserialize<'de> for AiTextGenAgent {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = serde_json::Value::deserialize(deserializer)?;
let tag = value
.get("type")
.and_then(serde_json::Value::as_str)
.map(str::to_owned);
match tag.as_deref() {
Some("ai_agent_id") => Ok(Self::AiAgentId(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("ai_agent_text_gen") => Ok(Self::AiAgentTextGen(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
_ => Ok(Self::Unknown(value)),
}
}
}
#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct AiAgentExtractStructuredType(pub String);
impl AiAgentExtractStructuredType {
pub const AI_AGENT_EXTRACT_STRUCTURED: &'static str = "ai_agent_extract_structured";
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiAgentInfoModels {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supported_purpose: Option<String>,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct AiAgentReferenceType(pub String);
impl AiAgentReferenceType {
pub const AI_AGENT_ID: &'static str = "ai_agent_id";
}
#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct AiAskMode(pub String);
impl AiAskMode {
pub const MULTIPLE_ITEM_QA: &'static str = "multiple_item_qa";
pub const SINGLE_ITEM_QA: &'static str = "single_item_qa";
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtractStructuredMetadataTemplate {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub template_key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<MetadataTemplateType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scope: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiExtractStructuredFields {
pub key: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(
rename = "displayName",
default,
skip_serializing_if = "Option::is_none"
)]
pub display_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<Vec<FieldsOptions>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fields: Option<Vec<AiExtractSubField>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub taxonomy_key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options_rules: Option<AiOptionsRules>,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct AiItemAskType(pub String);
impl AiItemAskType {
pub const FILE: &'static str = "file";
pub const HUBS: &'static str = "hubs";
}
#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct AiTaxonomyReferenceType(pub String);
impl AiTaxonomyReferenceType {
pub const TAXONOMY: &'static str = "taxonomy";
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiTextGenItems {
pub id: String,
pub r#type: AiCitationType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct GetAgentDefaultMode(pub String);
impl GetAgentDefaultMode {
pub const ASK: &'static str = "ask";
pub const TEXT_GEN: &'static str = "text_gen";
pub const EXTRACT: &'static str = "extract";
pub const EXTRACT_STRUCTURED: &'static str = "extract_structured";
}