diff --git a/src/providers/grok/translate/request.rs b/src/providers/grok/translate/request.rs
index d706c6e..82a026f 100644
--- a/src/providers/grok/translate/request.rs
+++ b/src/providers/grok/translate/request.rs
@@ -231,6 +231,7 @@ fn reject_unknown_top_level(req: &MessagesRequest) -> anyhow::Result<()> {
"tools",
"tool_choice",
"context_management",
+ "diagnostics",
"metadata",
"output_config",
"thinking",
@@ -245,9 +246,26 @@ fn reject_unknown_top_level(req: &MessagesRequest) -> anyhow::Result<()> {
anyhow::bail!("unsupported Grok request field: {key}");
}
}
+ if !valid_diagnostics(req.extra.get("diagnostics")) {
+ anyhow::bail!("unsupported diagnostics");
+ }
Ok(())
}
+fn valid_diagnostics(value: Option<&Value>) -> bool {
+ let Some(value) = value else { return true };
+ let Some(object) = value.as_object() else {
+ return value.is_null();
+ };
+ object.keys().all(|key| key == "previous_message_id")
+ && object.get("previous_message_id").is_none_or(|id| {
+ id.is_null()
+ || id
+ .as_str()
+ .is_some_and(|previous_message_id| !previous_message_id.is_empty())
+ })
+}
+
fn parse_system(value: Option<&Value>) -> anyhow::Result