feat(models): 模型类型系统新增 image 类型,图像生成模型不再兜底为 chat - #1008
Conversation
|
Codex Review: 预 review 基于 发现 2 个需修复的问题。
验证:该 head 独立快照执行 |
|
这个的预期效果是怎么样的? |
- 非 DashScope 的 image 模型显式报告暂不支持,不再按 base_url 拼 DashScope 路径 - 测试请求省略 size,避免 qwen-image-max/plus 等型号因非法分辨率误判不可用 - 断言实际 HTTP payload 的 2 个回归测试 + 补 tracked decision
|
感谢 review,两个问题都成立,已修复(最新 head [P2] 图像测试硬绑定 DashScope 协议 → 按供应商协议分流确认: 修复:原生 multimodal-generation 协议当前只有 DashScope 系供应商提供,因此先做协议判定:
[P2] 固定 512×512 → 省略 size 使用模型默认值确认: 修复:不传 证据(断言实际 HTTP payload)
另外补上了此前遗漏的 tracked decision: |
|
请补充一下使用场景和实际运行截图 |
|
这个是在模型选择的时候可以选择图像模型进行对话吗?然后这个模型既能 对话,又能生成图片?为什么我目前看下来,消费入口只有模型管理页的“测试”按钮,没有面向用户的实际生图场景?而且生图的接入场景应该是修改生图的那个工具就可以了。 |
|
感谢 review,澄清一下 image 类型与生图消费的关系。 image 类型不是「对话入口」,是类型系统正确性修复
所以 image 类型的作用是把它从 chat 列表分离出来(纯对话智能体看不到、不会误选),并让「测试连接」走正确的 DashScope 原生 实际生图由 image-gen skill 完成(面向用户,与本 PR 正交)生图由内置 图中对话为「生成一张蓝色圆形的图片」→ 智能体调用工具(写入文件 · 执行命令)→ 产物 所以两者正交:
如果你认为「测试按钮」不是有意义的消费入口、这个 PR 的价值只在「防止图像模型污染 chat 列表 + 正确测试」,我可以把 PR 描述收窄到这个定位;如果你觉得生图只由 skill 走原生接口即可、不需要在类型系统里登记 image,也可以讨论是否撤掉这个 PR。 |



现象
DashScope 的 qwen-image 系列图像生成模型不支持 OpenAI 兼容 chat 接口(只支持原生
multimodal-generation,content必须是数组)。但模型类型系统只有chat/embedding/rerank三种,图像模型被兜底登记成chat,导致:Input should be a valid list: input.messages.0.content;get_all_specs("chat")把图像模型混进纯文本模型列表,纯对话智能体误选后运行时报同样错误。机理
VALID_MODEL_TYPES = {"chat", "embedding", "rerank"}缺image,_normalize_remote_model把不在白名单的类型兜底成chat。这是类型系统的设计缺陷——图像生成是 DashScope 的原生能力,但类型系统没给它留位置。改进方法
VALID_MODEL_TYPES加image,归一化保留 image 不再兜底 chat;capabilities加image;model_type == "image"走原生multimodal-generation接口;get_all_specs("chat")等纯文本分流逻辑不变,image 类型天然不命中,纯文本模型行为零影响。效果
图像模型正确落位为
image,不再混进 chat 列表;qwen-image 测试走原生接口返回正常;UI 正确显示「图像生成」。附 3 个单测:image 类型可写入、无 image 能力时拒绝、远端归一化保留 image 类型。