use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuardrailConfig {
pub guardrail_identifier: String,
pub guardrail_version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub trace: Option<GuardrailTrace>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream_processing_mode: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum GuardrailTrace {
Enabled,
Disabled,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuardrailAssessment {
#[serde(skip_serializing_if = "Option::is_none")]
pub topic_policy: Option<GuardrailTopicPolicyAssessment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_policy: Option<GuardrailContentPolicyAssessment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub word_policy: Option<GuardrailWordPolicyAssessment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sensitive_information_policy: Option<GuardrailSensitiveInformationPolicyAssessment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contextual_grounding_policy: Option<GuardrailContextualGroundingPolicyAssessment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invocation_metrics: Option<GuardrailInvocationMetrics>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailTopicPolicyAssessment {
pub topics: Vec<GuardrailTopic>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailTopic {
pub name: String,
#[serde(rename = "type")]
pub topic_type: String,
pub action: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailContentPolicyAssessment {
pub filters: Vec<GuardrailContentFilter>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailContentFilter {
#[serde(rename = "type")]
pub filter_type: String,
pub confidence: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter_strength: Option<String>,
pub action: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuardrailWordPolicyAssessment {
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_words: Option<Vec<GuardrailCustomWord>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub managed_word_lists: Option<Vec<GuardrailManagedWord>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailCustomWord {
#[serde(rename = "match")]
pub word_match: String,
pub action: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailManagedWord {
#[serde(rename = "match")]
pub word_match: String,
#[serde(rename = "type")]
pub word_type: String,
pub action: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuardrailSensitiveInformationPolicyAssessment {
#[serde(skip_serializing_if = "Option::is_none")]
pub pii_entities: Option<Vec<GuardrailPiiEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regexes: Option<Vec<GuardrailRegex>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailPiiEntity {
#[serde(rename = "match")]
pub entity_match: String,
#[serde(rename = "type")]
pub entity_type: String,
pub action: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailRegex {
pub name: String,
#[serde(rename = "match")]
pub regex_match: String,
pub regex: String,
pub action: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailContextualGroundingPolicyAssessment {
pub filters: Vec<GuardrailGroundingFilter>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailGroundingFilter {
#[serde(rename = "type")]
pub filter_type: String,
pub threshold: f64,
pub score: f64,
pub action: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuardrailInvocationMetrics {
pub guardrail_processing_latency: u64,
pub usage: GuardrailUsage,
#[serde(skip_serializing_if = "Option::is_none")]
pub guardrail_coverage: Option<GuardrailCoverage>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuardrailUsage {
pub topic_policy_units: u32,
pub content_policy_units: u32,
pub word_policy_units: u32,
pub sensitive_information_policy_units: u32,
pub sensitive_information_policy_free_units: u32,
pub contextual_grounding_policy_units: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GuardrailCoverage {
#[serde(skip_serializing_if = "Option::is_none")]
pub text_characters: Option<GuardrailTextCharactersCoverage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub images: Option<GuardrailImageCoverage>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailTextCharactersCoverage {
pub guarded: u32,
pub total: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GuardrailImageCoverage {
pub guarded: u32,
pub total: u32,
}