assay_core/trace/
schema.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4#[serde(untagged)]
5pub enum TraceEntry {
6 V1(TraceEntryV1),
7 V2(TraceEvent),
8}
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct TraceEntryV1 {
12 pub schema_version: u32,
13 #[serde(rename = "type")]
14 pub entry_type: String, pub request_id: String,
16 pub prompt: String,
17 pub response: String,
18 #[serde(default)]
19 pub meta: serde_json::Value,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
25#[serde(tag = "type")]
26pub enum TraceEvent {
27 #[serde(rename = "episode_start")]
28 EpisodeStart(EpisodeStart),
29 #[serde(rename = "step")]
30 Step(StepEntry),
31 #[serde(rename = "tool_call")]
32 ToolCall(ToolCallEntry),
33 #[serde(rename = "episode_end")]
34 EpisodeEnd(EpisodeEnd),
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
38pub struct EpisodeStart {
39 pub episode_id: String,
40 pub timestamp: u64, #[serde(default)]
42 pub input: serde_json::Value, #[serde(default)]
44 pub meta: serde_json::Value,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
52pub struct TruncationMeta {
53 pub field: String,
54 pub original_len: usize,
55 pub kept_len: usize,
56 pub sha256: String,
57 pub strategy: String,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
61pub struct StepEntry {
62 pub episode_id: String,
63 pub step_id: String,
64 #[serde(default)]
65 pub idx: u32,
66 pub timestamp: u64,
67 pub kind: String,
68 pub name: Option<String>,
69 #[serde(default)]
70 pub content: Option<String>,
71 #[serde(default)]
72 pub content_sha256: Option<String>, #[serde(default)]
74 pub truncations: Vec<TruncationMeta>,
75 #[serde(default)]
76 pub meta: serde_json::Value,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
80pub struct ToolCallEntry {
81 pub episode_id: String,
82 pub step_id: String,
83 pub timestamp: u64,
84 pub tool_name: String,
85 pub call_index: Option<u32>, #[serde(default)]
87 pub args: serde_json::Value,
88 #[serde(default)]
89 pub args_sha256: Option<String>,
90 #[serde(default)]
91 pub result: Option<serde_json::Value>,
92 #[serde(default)]
93 pub result_sha256: Option<String>,
94 #[serde(default)]
95 pub error: Option<String>,
96 #[serde(default)]
97 pub truncations: Vec<TruncationMeta>,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
101pub struct EpisodeEnd {
102 pub episode_id: String,
103 pub timestamp: u64,
104 pub outcome: Option<String>, #[serde(default)]
106 pub final_output: Option<String>,
107}