Skip to main content

assay_core/agent_assertions/
model.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4#[serde(tag = "type", rename_all = "snake_case")]
5pub enum TraceAssertion {
6    #[serde(rename = "trace_must_call_tool")]
7    TraceMustCallTool {
8        tool: String,
9        min_calls: Option<u32>,
10    },
11    #[serde(rename = "trace_must_not_call_tool")]
12    TraceMustNotCallTool { tool: String },
13    #[serde(rename = "trace_tool_sequence")]
14    TraceToolSequence {
15        sequence: Vec<String>,
16        allow_other_tools: bool,
17    },
18    #[serde(rename = "trace_max_steps")]
19    TraceMaxSteps { max: u32 },
20    #[serde(rename = "args_valid")]
21    ArgsValid {
22        tool: String,
23        #[serde(default)]
24        test_args: Option<serde_json::Value>,
25        #[serde(default)]
26        policy: Option<serde_json::Value>,
27        #[serde(default)]
28        expect: Option<String>,
29    },
30    #[serde(rename = "sequence_valid")]
31    SequenceValid {
32        #[serde(default)]
33        test_trace: Option<Vec<crate::storage::rows::ToolCallRow>>, // Reusing existing struct or simplified Value
34        // If the user uses simplified structure in yaml, we might need a custom struct or Value.
35        // fp_suite uses: - tool: VerifyIdentity, args: {}
36        // ToolCallRow is a bit heavy, let's use Value for flexibility if model mismatch.
37        // But for safety, let's look at strict parsing.
38        // Example: { tool: "VerifyIdentity", args: {} }
39        #[serde(default)]
40        test_trace_raw: Option<Vec<serde_json::Value>>,
41        #[serde(default)]
42        policy: Option<serde_json::Value>,
43        #[serde(default)]
44        expect: Option<String>,
45    },
46    #[serde(rename = "tool_blocklist")]
47    ToolBlocklist {
48        #[serde(default)]
49        test_tool_calls: Option<Vec<String>>,
50        #[serde(default)]
51        policy: Option<serde_json::Value>,
52        #[serde(default)]
53        expect: Option<String>,
54    },
55}