From 3970c9f545d9fc91bd2c486ade5eb0b5750e2dac Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Fri, 24 Jul 2026 09:23:18 -0400 Subject: [PATCH] Restore serde defaults on Model.controls for older-server compatibility Copilot review flagged that dropping #[serde(default)] makes newer clients hard-fail against servers that predate the controls field. The late-added Model fields (default, small_default, configured) set the precedent: required in the OpenAPI spec, defaulted on deserialization. An empty controls list already means "unsupported", so the degraded value is semantically correct. Co-Authored-By: Claude Fable 5 --- lib/foundation/fabro-model/src/types.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/foundation/fabro-model/src/types.rs b/lib/foundation/fabro-model/src/types.rs index 9e4a9e96d..50ae020dc 100644 --- a/lib/foundation/fabro-model/src/types.rs +++ b/lib/foundation/fabro-model/src/types.rs @@ -88,6 +88,7 @@ pub struct ModelCosts { pub struct ModelControls { /// Exact reasoning-effort values accepted by this provider/model offering. /// An empty list means the request control is unsupported. + #[serde(default)] pub reasoning_effort: Vec, } @@ -101,6 +102,9 @@ pub struct Model { pub training: Option, pub knowledge_cutoff: Option, pub features: ModelFeatures, + /// Required in API responses; defaulted on deserialization so newer + /// clients tolerate older servers that predate this field. + #[serde(default)] pub controls: ModelControls, pub costs: ModelCosts, pub estimated_output_tps: Option,