From 19ada5eeea3545dd97a243de19a25e29e1f4f16e Mon Sep 17 00:00:00 2001 From: ummon-v <252456890+ummon-v@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:46:30 +0000 Subject: [PATCH] mistral: Fix default for `object` field in StreamResponse (#62517) # Objective - Streaming completions fail for any model served through Mistral that omits `object` in its stream chunks. Zed's `StreamResponse` requires the field, so the response is rejected before any text is rendered and the agent panel shows `missing field object at line 1 column 167`. - This now matters because Mistral serves Z.ai's GLM 5.2 (`glm-5-2` / `zai-glm-5-2`), which is usable in Zed via a custom model entry, but is unreachable today because of this deserialization failure. Its first stream chunk omits `object`, while every subsequent chunk includes it. - No linked issue. ## Solution - Mark `StreamResponse::object` as `#[serde(default)]` in `crates/mistral/src/mistral.rs`. - The field is never read anywhere in the codebase, so defaulting it to an empty string when absent loses nothing and keeps the struct's shape unchanged for serialization. ## Testing - `cargo check -p mistral` passes. - Verified end to end in Zed: with the settings below, selecting "GLM 5.2" in the agent panel and sending a message previously errored immediately; after this change the response streams normally. ```json "language_models": { "mistral": { "available_models": [ { "name": "zai-glm-5-2", "display_name": "GLM 5.2", "max_tokens": 1048576, "supports_tools": true, "supports_images": false, "supports_thinking": true } ] } } ``` - Tested on macOS only. The change is platform-independent, so no platform-specific risk is expected. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments (none added) - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) (no UI change) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable (deserialization only, no measurable cost) --- Release Notes: - Fixed streaming failing for Mistral-hosted models that omit the `object` field in stream chunks, such as GLM 5.2. Co-authored-by: Bennet Bo Fenner --- crates/mistral/src/mistral.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/mistral/src/mistral.rs b/crates/mistral/src/mistral.rs index 0b76b1d665..718207ebb2 100644 --- a/crates/mistral/src/mistral.rs +++ b/crates/mistral/src/mistral.rs @@ -366,6 +366,7 @@ pub struct Usage { #[derive(Serialize, Deserialize, Debug)] pub struct StreamResponse { pub id: String, + #[serde(default)] pub object: String, pub created: u64, pub model: String,