You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Motivation
composer 主下拉(
@deepseek-ai/dsh-client-ui-model-selection的ModelSelect)每条候选目前只渲染 model name + 选中对勾。两个客观事实藏在数据里、没在 UI 上亮出来:reasoning.efforts[],但下拉里完全看不出来 —— 用户得查文档才知道「这个模型能思考吗、能选哪些 effort」。resolved.input: ['text','image'],但根本没进 catalog 载荷(ModelCatalogModel类型里没有input字段,buildModelCatalog也没塞进去),UI 想标也无数据。效果:用户面对长列表要靠背,「这个模型支持多模态吗」「我刚选的 GLM 是 high effort 还是 max effort」——每次都得开文档对一遍。截图:composer 下拉展开后,每一行只有文字,对勾之外什么能力信息都没有。
旁证:@dsh-plugins/dsh-llm-hub 1.5.5 在路由卡里补了这两枚 chip(
💭 思考 low/high/max+👁 图像),数据源同样是 settings —— 但 composer 主下拉没动,因为官方 plugin 改起来会撞 README 红线replaceRisk: shadows-shipped-ui。所以希望上游把这事做了,下游就不用每家各包一层 overlay。Behavior
期望 composer 主下拉的每一行(
packages/client/ui-model-selection/src/client/ModelSelect.tsx大约第 446-470 行的menuitemradio)后面挂两枚能力 chip(能力存在才出现,没有就不标,避免噪音):model.reasoning非空,显示类似💭 思考 low/high/max,>3 个 effort 时压成low/medium/high+2。tooltip 列出每个 effort 的name → id({ off: null, high: 'high', max: 'max' }这种null值档位不进 chip 文案)。model.input含非text模态,显示👁 图像(en:vision)。样式建议:参考 dsh-llm-hub 的做法,两枚 chip 共用同形尺寸 + 不同主题色(
--dsw-alias-state-warn-primary/--dsw-alias-state-success-primary),都跟着主题走;en/zh 走现有的locales.ts字典(routeMultimodalShort/routeReasoningShort这套命名可以直接搬)。触发的「模型」按钮(trigger label)当前格式
${modelName} · ${effortLabel}已经显示 effort,但仅当模型已选才有用 —— 长列表里挑的时候这个信息没有,必须切到 effort 子菜单才看到。Data plumbing
要 chip 真正能渲染,得先修一处数据源:
packages/api/session-controller/src/types.ts:136-141的ModelCatalogModel加上可选readonly input?: readonly string[](text/image/…)。packages/api/session-controller/src/catalog.ts:46-55的buildModelCatalog在entries里把resolved.input映射出来(resolveModelInfo已经返回了,直接读即可):加上 input 字段后,
ModelSelect.tsx渲染端就拿得到数据,UI 那边的改动就只是新加几行 JSX(仿现有css.option / css.selected的写法)和 CSS(chip 容器走display:inline-flex; height:16px; border-radius:3px; padding:0 6px)。影响
agent-default-model选择、不改model/selection/request/header事件链 —— 纯展示层。routableProviders/failures/default这几路 contract 不动。All reactions