Repository navigation
Replies: 1 comment
|
Note on scope and overlap, so this does not read as a duplicate of existing posts:
So the genuinely new ask here is the first one: make the provider a level you enter rather than a heading you scroll past, with the level collapsing back to today's path when only one provider is loaded. The rest is deliberately deferred to the posts that already own it. 中文摘要:说明与本贴相关的既有提案分工,避免被当作重复帖——#2352/#4211/#4842/#5122 解决的是「已知道模型名」的搜索场景;本贴解决的是「只知道自己想要哪个路由、但不知道其下哪个 id 是当前模型」的场景(单路由 276 个模型时很常见),两者可叠加。滑块部分以 #6086 为实现归属,我仅在其下评论请求保留原档位列表,不另起实现。#3147 针对设置页的候选选择器,非本会话 composer 座位。因此本贴真正新增的诉求只有「把提供方做成可进入的层级,且仅一个提供方时折叠回现状」。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
[Feature] Provider-first two-step model picker in the composer, plus a direct reasoning-effort slider
Motivation
With more than one configured route, the composer model seat is hard to use.
ModelSelectopens one continuous scroll: every provider group heading and every model under it is in the singlepane === 'model'list. Providers are already grouped, but a group heading is a label, not a level you can enter — so the only way to reach a model is to scroll past every provider above it.That cost scales with the product of providers and models, which is exactly the shape a multi-route setup has:
Two changes make this scale. They are independent, so they can land separately.
1. Provider first, then model
The
modelpane becomes two levels: a provider level that lists each provider group (name, model count, current marker), and the existing model level narrowed to the chosen provider with a Back row. This is the drill-down the menu already uses for its own Model/Effort rows, applied one level deeper — no new interaction pattern is introduced.The reason this is worth doing in addition to the search field proposed in #2352, #4211, #4842 and #5122 is that the two solve different problems. Search assumes you already know the model's name; with 276 rows you often know the route you want ("the OpenRouter one") and not which of its ids is current. Provider-first also turns an O(providers × models) scan into O(providers) + O(models of one provider), and it makes the trigger's meaning explicit: the selection is a provider plus a model, and the picker currently never lets you act on the provider half of that pair.
Suggested behavior:
back()contract.state.failures) stay visible at the provider level, where they belong, instead of being appended after every model.2. A direct reasoning-effort slider
Effort is a small, ordered, per-model set of levels, so it deserves a control that shows the whole range at once instead of a nested list that closes the menu on pick. A discrete slider in the effort pane, stepping over exactly the adapter-advertised levels (
reasoning.efforts, plus the provider-default choice whenreasoning.defaultEffortis absent), makes the trade-off visible and adjustable in one gesture.This is the same ask as #6086 Direct reasoning-effort slider beside the composer model selector, which already carries a complete implementation, coverage and browser scenarios — this post is not a competing proposal for it; treat #6086 as the implementation of record. The only addition here is one requirement: keep the existing level list in the pane as an equivalent entry. A slider is fast for adjacent steps but poor for jumping straight to an extreme, and the list is the established, accessible, testable path. Both should drive the same
select({ provider, model, reasoningEffort })call.Behavior
Verifiable acceptance criteria, all client-side:
↑/↓move focus within the pane shown;Tabsettles the focused row;EscapeandShift+Tableave a drilled pane first (model → provider → root) and otherwise close to the trigger.provider+model(+ optionalreasoningEffort) selection through the existingsession.selectModelpath; no new Remote call, no change to stored ids or to session logs.role="menu"/menuitemradio/aria-checkedcontract.Implementation boundary
Pure presentation over the per-session directory that already exists:
ctx.modelDirectories(ModelDirectoryResolver→ModelDirectory) already publishesgroups[].id/name/models[]with per-modelreasoning.defaultEffort/reasoning.efforts[], and already owns submission and the pending/error state shared with the/modelpopup. The change is local to:packages/client/ui-model-selection/src/client/ModelSelect.tsx— the provider pane, the narrowed model pane, the effort sliderpackages/client/ui-model-selection/src/client/ModelSelect.module.css— the provider rows and slider trackpackages/client/ui-model-selection/src/client/locales.ts— bilingual keys for the provider level and the slider's accessible nameNo host-side change, no new RPC, no persistence change: selection and durability keep using provider/model/effort ids. The
/modelpopup shares the same directory and can adopt the provider level in a follow-up.Design questions for the team
I have verified the composer seat, the slot contract (
conversation.input.modelas asingleslot with priority shadowing), and the directory service on 0.1.7-rc.2; the two changes are presentation-only against those. Happy to prepare a patch for review if the direction is useful — noting #3147 and #4842 both hit the closed-PR policy, so I am posting here first.中文摘要
问题:输入框右侧的模型菜单把每个提供方的分组标题和全部模型铺在同一层滚动列表里。分组只是标题,不是一个能进入的层级,所以模型越多、提供方越多,找起来越慢——单个 OpenRouter 会话就有 276 个模型(见 #2352 的确认评论),本机 0.1.7-rc.2 配置下同一层里也有四个以上提供方分组。推理等级还要再钻一层,且选中后菜单即关闭。
建议一:先选提供方,再选模型。把
model面板做成两级:先列出提供方(名称、模型数量、当前标记),进入后只显示该提供方的模型,并提供返回行。这正是菜单已有的 Model/Effort 钻取模式,只是多一层,不引入新的交互范式。当只加载了一个提供方时自动折叠该层级,单路由用户保持现在的一步直达。若要查的是「某个路由」,而不知道它下面哪个 id 是当前模型,搜索帮不上忙——这也是它与 #2352、#4211、#4842、#5122 的搜索建议互补、而非重复的原因。建议二:推理等级用滑块。档位是每模型的小而有序的集合,适合一次看全、一次调整。此点与 #6086 相同,#6086 已附完整实现,应作为该功能的落地实现,本贴不与之竞争;唯一补充诉求是保留原档位列表作为等价入口(滑块适合相邻档位微调,列表适合直接跳到极端档,且列表是既有、可测、无障碍的路径),两者调用同一个选择提交。
改动边界:纯客户端呈现。数据与提交沿用既有的每会话
ModelDirectory(ctx.modelDirectories),它已提供groups[].id/name/models[]与每模型的reasoning.defaultEffort/reasoning.efforts[],并与/model弹窗共用 pending/错误状态。仅涉及ModelSelect.tsx、ModelSelect.module.css、locales.ts,无 Host 改动、无新增 RPC、无持久化变更。验收:多提供方时出现提供方层级并可返回;单提供方时折叠;当前模型与当前提供方在两个层级都有勾选;
↑↓/Tab/Escape/Shift+Tab维持既有面板契约;提交仍走session.selectModel且 id 与日志不变;无推理元数据的模型不显示滑块与 Effort 行;失败的提供方分组可见但不可选且不影响其他分组;无障碍menu/menuitemradio/aria-checked契约保持。All reactions