use crate::serde_helpers::double_option;
use super::*;
#[derive(Clone, Debug, PartialEq)]
pub enum AiAgentAllowedEntity {
User(UserBase),
Group(GroupBase),
Unknown(serde_json::Value),
}
impl Default for AiAgentAllowedEntity {
fn default() -> Self {
Self::Unknown(Default::default())
}
}
impl serde::Serialize for AiAgentAllowedEntity {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::User(inner) => inner.serialize(serializer),
Self::Group(inner) => inner.serialize(serializer),
Self::Unknown(inner) => inner.serialize(serializer),
}
}
}
impl<'de> serde::Deserialize<'de> for AiAgentAllowedEntity {
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("user") => Ok(Self::User(
serde_json::from_value(value).map_err(serde::de::Error::custom)?,
)),
Some("group") => Ok(Self::Group(
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 AiMultipleAgentResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub next_marker: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub prev_marker: Option<Option<String>>,
pub entries: Vec<AiSingleAgentResponseFull>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiSingleAgentResponseFull {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<AiSingleAgentResponseType>,
pub origin: String,
pub name: String,
pub access_state: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_by: Option<UserBase>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub modified_by: Option<UserBase>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub modified_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub icon_reference: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub allowed_entities: Option<Vec<AiAgentAllowedEntity>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ask: Option<AiStudioAgentAskResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub text_gen: Option<AiStudioAgentTextGenResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extract: Option<AiStudioAgentExtractResponse>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentAsk {
pub r#type: AiAgentAskType,
pub access_state: String,
pub description: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub custom_instructions: Option<Option<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_questions: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text: Option<AiStudioAgentLongTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text: Option<AiStudioAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image: Option<AiStudioAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spreadsheet: Option<AiStudioAgentSpreadsheetTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text_multi: Option<AiStudioAgentLongTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text_multi: Option<AiStudioAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image_multi: Option<AiStudioAgentBasicTextTool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentAskResponse {
pub r#type: AiAgentAskType,
pub access_state: String,
pub description: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub custom_instructions: Option<Option<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_questions: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text: Option<AiStudioAgentLongTextToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text: Option<AiStudioAgentBasicTextToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image: Option<AiStudioAgentBasicTextToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spreadsheet: Option<AiStudioAgentSpreadsheetToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text_multi: Option<AiStudioAgentLongTextToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text_multi: Option<AiStudioAgentBasicTextToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image_multi: Option<AiStudioAgentBasicTextToolResponse>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicGenTool {
#[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>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_custom_instructions_included: Option<bool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicGenToolResponse {
#[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>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_custom_instructions_included: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub warnings: Option<Vec<String>>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicTextTool {
#[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 is_custom_instructions_included: Option<bool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicTextToolResponse {
#[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 is_custom_instructions_included: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub warnings: Option<Vec<String>>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentExtract {
pub r#type: AiAgentExtractType,
pub access_state: String,
pub description: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub custom_instructions: Option<Option<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text: Option<AiStudioAgentLongTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text: Option<AiStudioAgentBasicTextTool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image: Option<AiStudioAgentBasicTextTool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentExtractResponse {
pub r#type: AiAgentExtractType,
pub access_state: String,
pub description: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub custom_instructions: Option<Option<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub long_text: Option<AiStudioAgentLongTextToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_text: Option<AiStudioAgentBasicTextToolResponse>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_image: Option<AiStudioAgentBasicTextToolResponse>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentLongTextTool {
#[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 is_custom_instructions_included: Option<bool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentLongTextToolResponse {
#[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 is_custom_instructions_included: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub warnings: Option<Vec<String>>,
}
pub type AiStudioAgentSpreadsheetTool = AiAgentSpreadsheetTool;
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentSpreadsheetToolResponse {
#[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 warnings: Option<Vec<String>>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentTextGen {
pub r#type: AiAgentTextGenType,
pub access_state: String,
pub description: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub custom_instructions: Option<Option<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_questions: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_gen: Option<AiStudioAgentBasicGenTool>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentTextGenResponse {
pub r#type: AiAgentTextGenType,
pub access_state: String,
pub description: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "double_option"
)]
pub custom_instructions: Option<Option<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_questions: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub basic_gen: Option<AiStudioAgentBasicGenToolResponse>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct CreateAiAgent {
pub r#type: AiSingleAgentResponseType,
pub name: String,
pub access_state: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub icon_reference: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub allowed_entities: Option<Vec<AiAgentAllowedEntity>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ask: Option<AiStudioAgentAsk>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub text_gen: Option<AiStudioAgentTextGen>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extract: Option<AiStudioAgentExtract>,
}
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct GroupBase {
pub id: String,
pub r#type: GroupType,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct AiSingleAgentResponseType(pub String);
impl AiSingleAgentResponseType {
pub const AI_AGENT: &'static str = "ai_agent";
}