Skip to content

fix(adapters): filter empty text parts in message conversion - #1024

Merged
dingyi222666 merged 1 commit into
v1-devfrom
fix/multimodal
Aug 21, 2026
Merged

dingyi222666 merged 1 commit into
v1-devfrom
fix/multimodal

Conversation

@dingyi222666

Copy link
Copy Markdown
Member

问题

多模态消息转换时,空文本 part(如 {type:'text', text:''})会被原样透传到模型请求中,例如 Gemini 请求里出现 {"text":""} 空 text part,可能导致部分 API 报错。

空 text part 的来源包括:fileInsertPrompt 未配置(默认空字符串)时 read_files 注入的多模态消息、content 为空字符串的消息等。

修复

在适配器消息转换层统一过滤空文本 part(最小判断 length > 0):

  • shared-adapter (langchainMessageToOpenAIMessage): 数组 content 中空 text part 丢弃 —— 覆盖所有 OpenAI 兼容适配器(openai / openai-like / azure-openai / deepseek / qwen / doubao / rwkv / hunyuan / spark / wenxin / zhipu)
  • adapter-gemini (processGeminiContentParts + langchainMessageToGeminiMessage): 空 text part 丢弃;字符串 content 为空时不生成 [{text:''}]
  • adapter-claude (processMessageContent): 空 text block 丢弃

ollama / dify 走字符串/文本提取路径,无空 part 结构问题,无需修改。

Validation

  • yarn fast-build (shared-adapter / adapter-gemini / adapter-claude) 0 errors

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitai Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2684fc2b-2a2b-4c60-9609-28a8d720998e

📥 Commits

Reviewing files that changed from the base of the PR and between ca1177d and eb7dd2a.

📒 Files selected for processing (3)
  • packages/adapter-claude/src/utils.ts
  • packages/adapter-gemini/src/utils.ts
  • packages/shared-adapter/src/utils.ts

Walkthrough

Changes

空文本过滤

Layer / File(s) Summary
共享消息内容过滤
packages/shared-adapter/src/utils.ts
新增文本内容识别,并在消息映射时过滤空文本。其他内容类型保持原有处理。
供应商适配器过滤
packages/adapter-claude/src/utils.ts, packages/adapter-gemini/src/utils.ts
Claude 和 Gemini 适配器不再生成空文本块或空文本 part。非空文本保持原有转换。

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested reviewers: cooksleep

Poem

我是一只检查空文本的兔,
轻轻跳过空白块。
非空文字仍保留,
Claude、Gemini 都整齐,
共享映射也清爽。

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/multimodal

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@dingyi222666
dingyi222666 merged commit e361c91 into v1-dev Aug 21, 2026
4 of 5 checks passed
@dingyi222666
dingyi222666 deleted the fix/multimodal branch August 21, 2026 14:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant