use bon::Builder;
use serde::{Deserialize, Serialize};
use super::messages::{Message, SystemPrompt, ThinkingConfig, Tool};
#[derive(Debug, Clone, Builder, Serialize)]
#[builder(on(String, into))]
pub struct CountTokensRequest {
pub model: String,
pub messages: Vec<Message>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system: Option<SystemPrompt>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<Tool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thinking: Option<ThinkingConfig>,
#[serde(flatten)]
#[builder(default)]
pub extra: serde_json::Map<String, serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CountTokensResponse {
pub input_tokens: u64,
#[serde(flatten)]
pub extra: serde_json::Map<String, serde_json::Value>,
}