use serde::{Deserialize, Serialize};
use super::ContractModel;
use super::span::{SpanItem, SpanLinkItem};
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct TraceItem {
pub duration_ns: i64,
pub ended_at: String,
#[serde(deserialize_with = "super::null_default")]
pub main_usage: MainUsage,
pub response_preview: String,
pub source: String,
pub span_count: i32,
pub started_at: String,
pub status: String,
pub synthetic: String,
pub trace_id: String,
#[serde(deserialize_with = "super::null_default")]
pub usage: TraceUsage,
pub user_prompt: String,
}
impl ContractModel for TraceItem {
const SCHEMA: &'static str = "TraceItem";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct TraceUsage {
pub cache_creation_tokens: i64,
pub cache_read_tokens: i64,
pub cost_usd: f64,
pub input_tokens: i64,
pub output_tokens: i64,
}
impl ContractModel for TraceUsage {
const SCHEMA: &'static str = "TraceUsage";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct MainUsage {
pub input_tokens: i64,
pub output_tokens: i64,
}
impl ContractModel for MainUsage {
const SCHEMA: &'static str = "MainUsage";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct TraceDetail {
#[serde(deserialize_with = "super::null_default")]
pub links: Vec<SpanLinkItem>,
pub schema: String,
#[serde(deserialize_with = "super::null_default")]
pub spans: Vec<SpanItem>,
#[serde(deserialize_with = "super::null_default")]
pub trace: TraceItem,
}
impl ContractModel for TraceDetail {
const SCHEMA: &'static str = "TraceDetail";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct TraceListResponse {
#[serde(deserialize_with = "super::null_default")]
pub items: Vec<TraceItem>,
pub schema: String,
}
impl ContractModel for TraceListResponse {
const SCHEMA: &'static str = "TraceListResponse";
}