use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use crate::providers::ApiSurface;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BridgeProfileResponse {
pub inference_gateway_base_url: String,
pub auth_scheme: String,
#[serde(default)]
pub models: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub default_model: Option<String>,
#[serde(default)]
pub organization_uuid: Option<String>,
#[serde(default)]
pub providers: Vec<ProviderHealth>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub model_limits: BTreeMap<String, AdvertisedLimits>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct AdvertisedLimits {
pub context_window: u32,
pub max_output_tokens: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderHealth {
pub name: String,
pub surface: ApiSurface,
pub configured: bool,
#[serde(default)]
pub models: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub config_issue: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub personal_key: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ProviderCredentialStatus {
pub provider: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
pub configured: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub verified_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub last_used_at: Option<chrono::DateTime<chrono::Utc>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SetProviderCredentialRequest {
pub api_key: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}