use crate::repository::ai_request_payloads::UpsertPayloadParams;
use systemprompt_identifiers::AiToolCallId;
#[derive(Debug, Clone, Copy, Default)]
pub struct SettlementUsage {
pub input_tokens: u32,
pub output_tokens: u32,
pub cache_read_tokens: u32,
pub cache_creation_tokens: u32,
pub reasoning_tokens: u32,
pub tokens_used: u32,
}
#[derive(Debug, Clone)]
pub struct SettledToolCall {
pub id: AiToolCallId,
pub name: String,
pub input: String,
}
#[derive(Debug)]
pub struct SettleCompletion<'a> {
pub usage: SettlementUsage,
pub cost_microdollars: i64,
pub latency_ms: i32,
pub upstream_latency_ms: Option<i32>,
pub finish_reason: Option<&'a str>,
pub payload: UpsertPayloadParams<'a>,
pub assistant_text: Option<&'a str>,
pub tool_calls: &'a [SettledToolCall],
pub next_message_sequence: Option<i32>,
}
#[derive(Debug, Default)]
pub struct SettledFailure<'a> {
pub error: &'a str,
pub usage: Option<SettlementUsage>,
pub cost_microdollars: i64,
pub latency_ms: Option<i32>,
pub upstream_latency_ms: Option<i32>,
}
#[derive(Debug)]
pub enum SettlementOutcome<'a> {
Completed(SettleCompletion<'a>),
Failed(SettledFailure<'a>),
}