1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct GuardrailConfig {
9 pub guardrail_identifier: String,
10 pub guardrail_version: String,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub trace: Option<GuardrailTrace>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub stream_processing_mode: Option<String>,
15}
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
19#[serde(rename_all = "lowercase")]
20pub enum GuardrailTrace {
21 Enabled,
22 Disabled,
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
27#[serde(rename_all = "camelCase")]
28pub struct GuardrailAssessment {
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub topic_policy: Option<GuardrailTopicPolicyAssessment>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub content_policy: Option<GuardrailContentPolicyAssessment>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub word_policy: Option<GuardrailWordPolicyAssessment>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub sensitive_information_policy: Option<GuardrailSensitiveInformationPolicyAssessment>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub contextual_grounding_policy: Option<GuardrailContextualGroundingPolicyAssessment>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub invocation_metrics: Option<GuardrailInvocationMetrics>,
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
45pub struct GuardrailTopicPolicyAssessment {
46 pub topics: Vec<GuardrailTopic>,
47}
48
49#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
51pub struct GuardrailTopic {
52 pub name: String,
53 #[serde(rename = "type")]
54 pub topic_type: String,
55 pub action: String,
56}
57
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
60pub struct GuardrailContentPolicyAssessment {
61 pub filters: Vec<GuardrailContentFilter>,
62}
63
64#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
66pub struct GuardrailContentFilter {
67 #[serde(rename = "type")]
68 pub filter_type: String,
69 pub confidence: String,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub filter_strength: Option<String>,
72 pub action: String,
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct GuardrailWordPolicyAssessment {
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub custom_words: Option<Vec<GuardrailCustomWord>>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub managed_word_lists: Option<Vec<GuardrailManagedWord>>,
83}
84
85#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
87pub struct GuardrailCustomWord {
88 #[serde(rename = "match")]
89 pub word_match: String,
90 pub action: String,
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
95pub struct GuardrailManagedWord {
96 #[serde(rename = "match")]
97 pub word_match: String,
98 #[serde(rename = "type")]
99 pub word_type: String,
100 pub action: String,
101}
102
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
105#[serde(rename_all = "camelCase")]
106pub struct GuardrailSensitiveInformationPolicyAssessment {
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub pii_entities: Option<Vec<GuardrailPiiEntity>>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub regexes: Option<Vec<GuardrailRegex>>,
111}
112
113#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
115pub struct GuardrailPiiEntity {
116 #[serde(rename = "match")]
117 pub entity_match: String,
118 #[serde(rename = "type")]
119 pub entity_type: String,
120 pub action: String,
121}
122
123#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
125pub struct GuardrailRegex {
126 pub name: String,
127 #[serde(rename = "match")]
128 pub regex_match: String,
129 pub regex: String,
130 pub action: String,
131}
132
133#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
135pub struct GuardrailContextualGroundingPolicyAssessment {
136 pub filters: Vec<GuardrailGroundingFilter>,
137}
138
139#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
141pub struct GuardrailGroundingFilter {
142 #[serde(rename = "type")]
143 pub filter_type: String,
144 pub threshold: f64,
145 pub score: f64,
146 pub action: String,
147}
148
149#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
151#[serde(rename_all = "camelCase")]
152pub struct GuardrailInvocationMetrics {
153 pub guardrail_processing_latency: u64,
154 pub usage: GuardrailUsage,
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub guardrail_coverage: Option<GuardrailCoverage>,
157}
158
159#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
161#[serde(rename_all = "camelCase")]
162pub struct GuardrailUsage {
163 pub topic_policy_units: u32,
164 pub content_policy_units: u32,
165 pub word_policy_units: u32,
166 pub sensitive_information_policy_units: u32,
167 pub sensitive_information_policy_free_units: u32,
168 pub contextual_grounding_policy_units: u32,
169}
170
171#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
173#[serde(rename_all = "camelCase")]
174pub struct GuardrailCoverage {
175 #[serde(skip_serializing_if = "Option::is_none")]
176 pub text_characters: Option<GuardrailTextCharactersCoverage>,
177 #[serde(skip_serializing_if = "Option::is_none")]
178 pub images: Option<GuardrailImageCoverage>,
179}
180
181#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
183pub struct GuardrailTextCharactersCoverage {
184 pub guarded: u32,
185 pub total: u32,
186}
187
188#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
190pub struct GuardrailImageCoverage {
191 pub guarded: u32,
192 pub total: u32,
193}
194