zagens-core 0.7.5

Core runtime boundaries for Zagens agent architecture
Documentation
//! Shared model types — pure data, no LLM client dependency.

use schemars::JsonSchema;

/// Server-side tool usage counters.
#[derive(
    Debug, serde::Serialize, serde::Deserialize, Clone, Default, PartialEq, Eq, JsonSchema,
)]
pub struct ServerToolUsage {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub code_execution_requests: Option<u32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tool_search_requests: Option<u32>,
}

/// Token usage metadata for a response.
#[derive(
    Debug, serde::Serialize, serde::Deserialize, Clone, Default, PartialEq, Eq, JsonSchema,
)]
pub struct Usage {
    pub input_tokens: u32,
    pub output_tokens: u32,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub prompt_cache_hit_tokens: Option<u32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub prompt_cache_miss_tokens: Option<u32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reasoning_tokens: Option<u32>,
    /// Approximate input tokens spent re-sending prior `reasoning_content`
    /// across user-message boundaries (V4 §5.1.1 "Interleaved Thinking").
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reasoning_replay_tokens: Option<u32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub server_tool_use: Option<ServerToolUsage>,
}