Skip to content

deepseek: Fix empty text segments causing issues#52199

Merged
bennetbo merged 3 commits intomainfrom
deepseek-fix-issues
Mar 23, 2026
Merged

deepseek: Fix empty text segments causing issues#52199
bennetbo merged 3 commits intomainfrom
deepseek-fix-issues

Conversation

@bennetbo
Copy link
Copy Markdown
Member

@bennetbo bennetbo commented Mar 23, 2026

Context

Deepseek seems to have started to return empty text deltas, which causes issues cause their upstream API does not like empty text blocks to be included in their request.

In practice this caused issues like `An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'..., because the payload looked like this:

User {
    content: "Call the now tool a bunch of times",
},
Assistant {
    content: Some(
        "",
    ),
},
Tool {
    content: "The current datetime is 2026-03-23T13:21:24.084848+00:00.",
    tool_call_id: "call_00_iozCfHXJAPR13XwHiAwJ9OEw",
},

Now we filter out that empty text, which seems to fix the issue. This matches our implementation for OpenAI

Closes #51854

How to Review

Self-Review Checklist

  • I've reviewed my own diff for quality, security, and reliability
  • Unsafe blocks (if any) have justifying comments
  • The content is consistent with the UI/UX checklist
  • Tests cover the new/changed behavior
  • Performance impact has been considered and is acceptable

Release Notes:

  • deepseek: Fixed issue with tool calling (An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'...)

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Mar 23, 2026
@bennetbo bennetbo marked this pull request as ready for review March 23, 2026 12:40
@zed-community-bot zed-community-bot bot added the staff Pull requests authored by a current member of Zed staff label Mar 23, 2026
@zed-codeowner-coordinator zed-codeowner-coordinator bot requested review from a team, benbrandt and danilo-leal and removed request for a team March 23, 2026 12:40
@bennetbo bennetbo enabled auto-merge (squash) March 23, 2026 13:29
@bennetbo bennetbo merged commit 62cea4e into main Mar 23, 2026
31 checks passed
@bennetbo bennetbo deleted the deepseek-fix-issues branch March 23, 2026 13:38
@bennetbo
Copy link
Copy Markdown
Member Author

/cherry-pick preview

@bennetbo
Copy link
Copy Markdown
Member Author

/cherry-pick stable

github-actions bot pushed a commit that referenced this pull request Mar 23, 2026
## Context

Deepseek seems to have started to return empty text deltas, which causes
issues cause their upstream API does not like empty text blocks to be
included in their request.

In practice this caused issues like `An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'..., because the payload looked like this:

```
User {
    content: "Call the now tool a bunch of times",
},
Assistant {
    content: Some(
        "",
    ),
},
Tool {
    content: "The current datetime is 2026-03-23T13:21:24.084848+00:00.",
    tool_call_id: "call_00_iozCfHXJAPR13XwHiAwJ9OEw",
},
```

Now we filter out that empty text, which seems to fix the issue. This
matches our implementation for OpenAI

Closes #51854

<!-- What does this PR do, and why? How is it expected to impact users?
     Not just what changed, but what motivated it and why this approach.

Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes #456)
     if one exists — helps with traceability. -->

## How to Review

<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
     - See the review process guidelines for comment conventions -->

## Self-Review Checklist

<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- deepseek: Fixed issue with tool calling (`An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'...`)
github-actions bot pushed a commit that referenced this pull request Mar 23, 2026
## Context

Deepseek seems to have started to return empty text deltas, which causes
issues cause their upstream API does not like empty text blocks to be
included in their request.

In practice this caused issues like `An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'..., because the payload looked like this:

```
User {
    content: "Call the now tool a bunch of times",
},
Assistant {
    content: Some(
        "",
    ),
},
Tool {
    content: "The current datetime is 2026-03-23T13:21:24.084848+00:00.",
    tool_call_id: "call_00_iozCfHXJAPR13XwHiAwJ9OEw",
},
```

Now we filter out that empty text, which seems to fix the issue. This
matches our implementation for OpenAI

Closes #51854

<!-- What does this PR do, and why? How is it expected to impact users?
     Not just what changed, but what motivated it and why this approach.

Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes #456)
     if one exists — helps with traceability. -->

## How to Review

<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
     - See the review process guidelines for comment conventions -->

## Self-Review Checklist

<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- deepseek: Fixed issue with tool calling (`An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'...`)
zed-zippy bot added a commit that referenced this pull request Mar 23, 2026
…k to stable) (#52207)

Cherry-pick of #52199 to stable

----
## Context

Deepseek seems to have started to return empty text deltas, which causes
issues cause their upstream API does not like empty text blocks to be
included in their request.

In practice this caused issues like `An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'..., because the payload looked like this:

```
User {
    content: "Call the now tool a bunch of times",
},
Assistant {
    content: Some(
        "",
    ),
},
Tool {
    content: "The current datetime is 2026-03-23T13:21:24.084848+00:00.",
    tool_call_id: "call_00_iozCfHXJAPR13XwHiAwJ9OEw",
},
```

Now we filter out that empty text, which seems to fix the issue. This
matches our implementation for OpenAI

Closes #51854

<!-- What does this PR do, and why? How is it expected to impact users?
     Not just what changed, but what motivated it and why this approach.

Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes #456)
     if one exists — helps with traceability. -->

## How to Review

<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
     - See the review process guidelines for comment conventions -->

## Self-Review Checklist

<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX

checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- deepseek: Fixed issue with tool calling (`An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'...`)

Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
zed-zippy bot added a commit that referenced this pull request Mar 23, 2026
…k to preview) (#52206)

Cherry-pick of #52199 to preview

----
## Context

Deepseek seems to have started to return empty text deltas, which causes
issues cause their upstream API does not like empty text blocks to be
included in their request.

In practice this caused issues like `An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'..., because the payload looked like this:

```
User {
    content: "Call the now tool a bunch of times",
},
Assistant {
    content: Some(
        "",
    ),
},
Tool {
    content: "The current datetime is 2026-03-23T13:21:24.084848+00:00.",
    tool_call_id: "call_00_iozCfHXJAPR13XwHiAwJ9OEw",
},
```

Now we filter out that empty text, which seems to fix the issue. This
matches our implementation for OpenAI

Closes #51854

<!-- What does this PR do, and why? How is it expected to impact users?
     Not just what changed, but what motivated it and why this approach.

Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes #456)
     if one exists — helps with traceability. -->

## How to Review

<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
     - See the review process guidelines for comment conventions -->

## Self-Review Checklist

<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX

checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- deepseek: Fixed issue with tool calling (`An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'...`)

Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
AmaanBilwar pushed a commit to AmaanBilwar/zed that referenced this pull request Mar 23, 2026
## Context

Deepseek seems to have started to return empty text deltas, which causes
issues cause their upstream API does not like empty text blocks to be
included in their request.

In practice this caused issues like `An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'..., because the payload looked like this:

```
User {
    content: "Call the now tool a bunch of times",
},
Assistant {
    content: Some(
        "",
    ),
},
Tool {
    content: "The current datetime is 2026-03-23T13:21:24.084848+00:00.",
    tool_call_id: "call_00_iozCfHXJAPR13XwHiAwJ9OEw",
},
```

Now we filter out that empty text, which seems to fix the issue. This
matches our implementation for OpenAI

Closes zed-industries#51854

<!-- What does this PR do, and why? How is it expected to impact users?
     Not just what changed, but what motivated it and why this approach.

Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes zed-industries#456)
     if one exists — helps with traceability. -->

## How to Review

<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
     - See the review process guidelines for comment conventions -->

## Self-Review Checklist

<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- deepseek: Fixed issue with tool calling (`An assistant message with
'tool_calls' must be followed by tool messages responding to each
'tool_call_id'...`)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement staff Pull requests authored by a current member of Zed staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

DeepSeek Models stopped working

2 participants