use serde::{Deserialize, Serialize};
use crate::providers::openai_compatible::types::CompatibleChatRequest;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct OpenRouterUsage {
#[serde(rename = "include")]
pub include: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct CacheControl {
#[serde(rename = "type")]
pub cache_type: String,
}
impl CacheControl {
pub fn ephemeral() -> Self {
Self { cache_type: "ephemeral".to_string() }
}
}
#[derive(Debug, Clone, Serialize)]
pub(crate) struct OpenRouterChatRequest {
#[serde(flatten)]
request: CompatibleChatRequest,
usage: OpenRouterUsage,
cache_control: CacheControl,
#[serde(skip_serializing_if = "Option::is_none")]
session_id: Option<String>,
}
impl OpenRouterChatRequest {
pub(crate) fn from_compatible(request: CompatibleChatRequest, session_id: Option<&str>) -> Self {
Self {
request,
usage: OpenRouterUsage { include: true },
cache_control: CacheControl::ephemeral(),
session_id: session_id.map(String::from),
}
}
}