assay_core/agent_assertions/
model.rs1use 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>>, #[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}