use thiserror::Error;
#[derive(Debug, Error)]
pub enum GatewayProfileError {
#[error("gateway route id '{id}' is declared more than once")]
DuplicateRouteId { id: String },
#[error("gateway route '{route}' provider '{provider}' is not declared in profile.providers")]
RouteProviderNotInRegistry { route: String, provider: String },
#[error("gateway default_provider '{provider}' is not declared in profile.providers")]
DefaultProviderNotInRegistry { provider: String },
#[error("system_prompt override with action 'replace' must set a 'prompt'")]
OverrideReplaceMissingPrompt,
#[error("system_prompt override with action 'strip' must not set a 'prompt'")]
OverrideStripWithPrompt,
#[error("system_prompt override provider '{provider}' is not declared in profile.providers")]
OverrideProviderNotInRegistry { provider: String },
#[error("route `when.min_tools` must be at least 1 (0 matches every request)")]
RouteMatchZeroMinTools,
#[error("route `when` sets `requires_tools: false` but also a positive `min_tools`")]
RouteMatchContradictoryTools,
#[error(
"gateway route '{route}' (model_pattern '{pattern}') reaches no priced model: provider \
'{provider}' declares no model matching the pattern and the route sets no `pricing:` \
override, so every request it dispatches would be billed at zero"
)]
RouteReachesNoPricedModel {
route: String,
pattern: String,
provider: String,
},
#[error(
"gateway route '{route}' can dispatch model '{model}', which has no usable `pricing:` \
(input_per_million and output_per_million must both be non-zero, or per_image_cents set)"
)]
RouteModelUnpriced { route: String, model: String },
}
pub type GatewayResult<T> = Result<T, GatewayProfileError>;