Skip to main content

systemprompt_runtime/trace/models/
tool.rs

1//! MCP tool execution DTOs and audit linkage rows.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use chrono::{DateTime, Utc};
7use serde::{Deserialize, Serialize};
8use serde_json::Value;
9use systemprompt_identifiers::{
10    AiRequestId, ArtifactId, McpExecutionId, McpServerId, McpToolName, TaskId, TraceId,
11};
12use systemprompt_logging::LogLevel;
13
14#[derive(Debug, Clone)]
15pub struct ToolExecutionFilter {
16    pub limit: i64,
17    pub since: Option<DateTime<Utc>>,
18    pub name: Option<String>,
19    pub server: Option<String>,
20    pub status: Option<String>,
21}
22
23impl ToolExecutionFilter {
24    pub const fn new(limit: i64) -> Self {
25        Self {
26            limit,
27            since: None,
28            name: None,
29            server: None,
30            status: None,
31        }
32    }
33
34    pub const fn with_since(mut self, since: DateTime<Utc>) -> Self {
35        self.since = Some(since);
36        self
37    }
38
39    systemprompt_models::builder_methods! {
40        with_name(name) -> String,
41        with_server(server) -> String,
42        with_status(status) -> String,
43    }
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct ToolExecutionItem {
48    pub timestamp: DateTime<Utc>,
49    pub trace_id: TraceId,
50    pub tool_name: McpToolName,
51    pub server_name: Option<McpServerId>,
52    pub status: String,
53    pub execution_time_ms: Option<i32>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct AuditLookupResult {
58    pub id: AiRequestId,
59    pub provider: Option<String>,
60    pub model: Option<String>,
61    pub requested_model: Option<String>,
62    pub input_tokens: Option<i32>,
63    pub output_tokens: Option<i32>,
64    pub cache_read_tokens: Option<i32>,
65    pub cache_creation_tokens: Option<i32>,
66    pub reasoning_tokens: Option<i32>,
67    pub cost_microdollars: i64,
68    pub latency_ms: Option<i32>,
69    pub status: String,
70    pub finish_reason: Option<String>,
71    pub error_message: Option<String>,
72    pub task_id: Option<TaskId>,
73    pub trace_id: Option<TraceId>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct AuditToolCallRow {
78    pub tool_name: McpToolName,
79    pub tool_input: String,
80    pub sequence_number: i32,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct LinkedMcpCall {
85    pub tool_name: McpToolName,
86    pub server_name: McpServerId,
87    pub status: String,
88    pub execution_time_ms: Option<i32>,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct McpToolExecution {
93    pub mcp_execution_id: McpExecutionId,
94    pub tool_name: McpToolName,
95    pub server_name: McpServerId,
96    pub status: String,
97    pub execution_time_ms: Option<i32>,
98    pub error_message: Option<String>,
99    pub input: String,
100    pub output: Option<String>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
104pub struct ToolLogEntry {
105    pub timestamp: DateTime<Utc>,
106    pub level: LogLevel,
107    pub module: String,
108    pub message: String,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct TaskArtifact {
113    pub artifact_id: ArtifactId,
114    pub artifact_type: String,
115    pub name: Option<String>,
116    pub source: Option<String>,
117    pub tool_name: Option<McpToolName>,
118    pub part_kind: Option<String>,
119    pub text_content: Option<String>,
120    // JSON: JSONB `data_content` column — an A2A DataPart holds any JSON object.
121    pub data_content: Option<Value>,
122}