Skip to main content

gproxy_protocol/aws/converse/trace/
mod.rs

1mod automated_reasoning;
2mod filters;
3mod policies;
4
5use std::collections::BTreeMap;
6
7use serde::{Deserialize, Serialize};
8
9use crate::aws::Rest;
10
11pub use automated_reasoning::*;
12pub use filters::*;
13pub use policies::*;
14
15/// AWS `ConverseTrace` response object (`Converse.md` trace).
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18#[derive(gproxy_protocol_macros::WireBuilder)]
19#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
20pub struct ConverseTrace {
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub guardrail: Option<GuardrailTraceAssessment>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub prompt_router: Option<PromptRouterTrace>,
25    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
26    pub rest: Rest,
27}
28
29/// AWS names the streaming object separately but documents the same shape.
30pub type ConverseStreamTrace = ConverseTrace;
31
32#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34#[derive(gproxy_protocol_macros::WireBuilder)]
35#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
36pub struct PromptRouterTrace {
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub invoked_model_id: Option<String>,
39    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
40    pub rest: Rest,
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45#[derive(gproxy_protocol_macros::WireBuilder)]
46#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
47pub struct GuardrailTraceAssessment {
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub action_reason: Option<String>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub input_assessment: Option<BTreeMap<String, GuardrailAssessment>>,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub model_output: Option<Vec<String>>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub output_assessments: Option<BTreeMap<String, Vec<GuardrailAssessment>>>,
56    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
57    pub rest: Rest,
58}
59
60#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62#[derive(gproxy_protocol_macros::WireBuilder)]
63#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
64pub struct GuardrailAssessment {
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub applied_guardrail_details: Option<AppliedGuardrailDetails>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub automated_reasoning_policy: Option<GuardrailAutomatedReasoningPolicyAssessment>,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub content_policy: Option<GuardrailContentPolicyAssessment>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub contextual_grounding_policy: Option<GuardrailContextualGroundingPolicyAssessment>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub invocation_metrics: Option<GuardrailInvocationMetrics>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub sensitive_information_policy: Option<GuardrailSensitiveInformationPolicyAssessment>,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub topic_policy: Option<GuardrailTopicPolicyAssessment>,
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub word_policy: Option<GuardrailWordPolicyAssessment>,
81    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
82    pub rest: Rest,
83}