use std::collections::BTreeMap;
use std::fmt;
use std::time::Duration;
#[derive(Clone, PartialEq, Eq)]
pub struct GatewaySecret(String);
impl GatewaySecret {
pub fn new(value: impl Into<String>) -> Self {
Self(value.into())
}
#[cfg(not(target_family = "wasm"))]
pub(crate) fn expose(&self) -> &str {
&self.0
}
}
impl fmt::Debug for GatewaySecret {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_str("GatewaySecret([redacted])")
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum GatewayAuthentication {
#[default]
None,
Bearer(GatewaySecret),
Header {
name: String,
value: GatewaySecret,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct GatewayTimeoutPolicy {
pub connect: Duration,
pub request: Duration,
pub read: Duration,
}
impl Default for GatewayTimeoutPolicy {
fn default() -> Self {
Self {
connect: Duration::from_secs(10),
request: Duration::from_secs(60),
read: Duration::from_secs(60),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GatewayRoutes {
pub query: String,
pub chat: String,
pub embed: String,
pub index: Option<String>,
pub health: Option<String>,
pub readiness: Option<String>,
pub metrics: Option<String>,
}
impl Default for GatewayRoutes {
fn default() -> Self {
Self {
query: "/v1/query".to_string(),
chat: "/v1/chat".to_string(),
embed: "/v1/embed".to_string(),
index: Some("/v1/models".to_string()),
health: Some("/health".to_string()),
readiness: Some("/ready".to_string()),
metrics: Some("/metrics".to_string()),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct GatewayDescriptor {
pub target: String,
pub base_url: String,
pub routes: GatewayRoutes,
pub authentication: GatewayAuthentication,
pub static_headers: BTreeMap<String, String>,
pub timeouts: GatewayTimeoutPolicy,
pub protocol_options: serde_json::Map<String, serde_json::Value>,
}