use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::ContractModel;
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SpanItem {
pub call_kind: String,
pub duration_ns: i64,
#[serde(deserialize_with = "super::null_default")]
pub input: Vec<Value>,
pub kind: String,
pub model: String,
pub name: String,
#[serde(deserialize_with = "super::null_default")]
pub output: Vec<Value>,
pub parent_span_id: String,
pub payload: String,
pub raw_turn_id: i64,
pub seq: i64,
pub span_id: String,
pub started_at: String,
pub status: String,
pub stop_reason: String,
pub thread_id: String,
pub trace_id: String,
pub usage: Value,
pub verdict: Option<Value>,
}
impl ContractModel for SpanItem {
const SCHEMA: &'static str = "SpanItem";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SpanLinkItem {
pub from_io: String,
pub from_span_id: String,
pub from_trace_id: String,
pub kind: String,
pub to_io: String,
pub to_span_id: String,
pub to_trace_id: String,
}
impl ContractModel for SpanLinkItem {
const SCHEMA: &'static str = "SpanLinkItem";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SpanSearchOutput {
pub count: i32,
pub query: String,
#[serde(deserialize_with = "super::null_default")]
pub results: Vec<SpanSearchResult>,
}
impl ContractModel for SpanSearchOutput {
const SCHEMA: &'static str = "SpanSearchOutput";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SpanSearchResult {
pub model: String,
pub score: f32,
pub session_id: String,
pub snippet: String,
pub span_id: String,
pub started_at: String,
pub trace_id: String,
pub user_prompt: String,
}
impl ContractModel for SpanSearchResult {
const SCHEMA: &'static str = "SpanSearchResult";
}