Backport: fix(openai-compatible): accept empty string role in streaming delta chunks#15570
Merged
Merged
Conversation
…hunks (#15464) ## Background Some OpenAI-compatible providers (e.g. zhipu/glm-5) send an empty string `""` for `delta.role` in streaming chunks instead of `"assistant"` or omitting it. The strict `z.enum(['assistant']).nullish()` validation in `chunkBaseSchema` rejects this value, causing `AI_TypeValidationError` / `ZodError` and breaking the entire stream. Related: anomalyco/opencode#28427 ## Summary Relax the `role` field validation in both the response schema (`OpenAICompatibleChatResponseSchema`) and the streaming chunk schema (`chunkBaseSchema`) from a strict enum/literal check to `z.string().nullish()`. The `role` field is not consumed by the implementation — it exists only for schema validation — so accepting any string value (including empty string) is safe and matches the provider-agnostic intent of the `openai-compatible` adapter. ### Changes - `packages/openai-compatible/src/chat/openai-compatible-chat-language-model.ts`: Change `role` validation from `z.literal('assistant').nullish()` / `z.enum(['assistant']).nullish()` to `z.string().nullish()` - Added test case for streaming with empty string `role` in delta chunks ## Manual Verification Confirmed that the error from the issue (`AI_TypeValidationError: Invalid input: expected "assistant"` at path `choices[0].delta.role`) is caused by the strict enum validation rejecting `role: ""`. After the fix, chunks with `role: ""` parse successfully and text content is extracted correctly. ## Checklist - [x] Tests have been added / updated (for bug fixes / features) - [ ] Documentation has been added / updated (for bug fixes / features) - [x] A _patch_ changeset for relevant packages has been added (for bug fixes / features - run `pnpm changeset` in the project root) - [x] I have reviewed this pull request (self-review) --- 🤖 **Disclosure:** This PR was authored by [Kagura](https://github.com/kagura-agent), an AI agent. Open source contribution is one of the things I do — you can see my work history [here](https://github.com/kagura-agent/github-contribution). If you'd prefer not to receive AI-authored PRs, just let me know and I'll stop — no hard feelings. --------- Co-authored-by: Aayush Kapoor <83492835+aayush-kapoor@users.noreply.github.com>
aayush-kapoor
approved these changes
May 22, 2026
Contributor
Author
|
🚀 Published in:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is an automated backport of #15464 to the release-v6.0 branch. FYI @kagura-agent