Repository navigation
[Feature] Allow visual drag-and-drop reordering for modelPickerOrder in Web GUI #3774
Description
Ordering presets landed; drag-and-drop remains open
#3801 (8615f1a1c9) adds picker-order presets and saves them without replacing featured selections. Free-form drag-and-drop and the requested native/featured-row behavior remain outstanding.
Verified against dev 5759d9ea2f1e7281cdc01eb9628f2e0a123fb59c. Original report by @leonclab. The attribution record was added in #3811.
Area
Dashboard
What are you trying to accomplish?
In Codex Desktop, when users configure multiple models across different providers (native OpenAI, OpenCode-Go, Google Antigravity, or custom forward proxies), the display order in the model picker is dominated by subagentModels priority calculation (priority = 0..N-1), while non-featured models are placed arbitrarily.
I need a convenient way in the OpenCodex Web GUI to visually reorder enabled models so that users can organize the Codex Desktop model picker (e.g. keep native OpenAI models on top, followed by cleanly grouped provider sections) without manually editing JSON configuration files.
What prevents this today?
Currently, customizing the model picker display order requires manually crafting the modelPickerOrder array inside ~/.opencodex/config.json. This requires knowing internal model slugs (e.g., provider/model-id), checking catalog priority calculations, and manually restarting or syncing the service. It is error-prone and not accessible from the Web GUI.
What should OpenCodex do?
- In the Models management tab of the Web GUI, provide drag-and-drop handles for all enabled models to visually adjust their display order.
- Provide a quick action button (e.g., "Group by Provider") that clusters models by their upstream provider (e.g., native OpenAI first, then sorted by provider namespaces).
- When the order is changed, save the list directly to
config.modelPickerOrdervia the existing/api/configendpoint and trigger catalog synchronization.
Example usage or interface
- Open Web GUI -> Models.
- Drag
google-antigravity/gemini-3.8-flashabove another provider row, or click "Group by Provider". - The GUI sends a PATCH/PUT to
/api/configwith{"modelPickerOrder": ["gpt-5.6-sol", "gpt-5.6-luna", "OG/...", "google-antigravity/..."]}. - OpenCodex triggers
syncModelsToCodex()and Codex Desktop reflects the new picker order.
Alternatives or workarounds
Manually editing ~/.opencodex/config.json and adding a large modelPickerOrder string array by hand.
Additional context
The underlying priority reordering engine modelPickerOrder is already supported in src/codex/catalog/sync.ts (around line 520). Exposing this to the Web GUI would make model ordering much more user-friendly.
Checks
- I searched existing issues and documentation.
- This request describes a concrete OpenCodex workflow rather than merely naming a desired technology.
- I removed secrets and personal data.
Activity
lidge-jun commentedon Sep 6, 2026
리뷰 · 우선순위 48 / 80
이 이슈는 Web GUI Models 탭에서 활성화된 모델을 드래그 앤 드롭으로 재배열하고, “프로바이더별 묶기” 같은 빠른 동작으로
config.modelPickerOrder를 저장·동기화해 Codex Desktop 피커 순서를 바꾸자는 기능 요청입니다. 지금은~/.opencodex/config.json에 slug 배열을 손으로 써야 하고,subagentModels우선순위와 섞여 보이기 쉬운 상태입니다. 엔진 자체는 이미 있습니다.src/types/config.ts에modelPickerOrder?: string[]가 있고,src/codex/catalog/sync.ts는 디스플레이 전용 우선순위로 비피처 행을 재배열합니다(주석·헬퍼 대략 L90–L97, L523 근처).src/codex/convergence.ts도 설정값을 sync로 넘깁니다. 즉 “저장 키와 카탈로그 반영”은 되어 있고, 부족한 쪽은 GUI 조작감입니다.다만 같은 목표를 이미 열린 PR이 상당 부분 가져가고 있습니다.
#3383(feat(models): add main picker ordering controls, 아직 OPEN)은gui/src/model-picker-order.ts와gui/src/pages/Models.tsx에 Default / A-Z / 프로바이더별 / Most used 모드를 두고, 선택한 순서를modelPickerOrder에 저장하며,subagentModels·서브에이전트 라우팅은 건드리지 않는다고 명시합니다. 이슈가 요청한 “Group by Provider”는#3383의provider모드와 거의 같고,/api/config저장·sync 흐름도 그 PR 범위에 들어 있습니다. 이 이슈만의 추가분은 자유 드래그 앤 드롭으로 custom 순서를 직접 편집하는 UX에 가깝습니다. 현재devHEADbd1cda99c의 Models 페이지에는 아직 그 드래그 핸들이 없고,#3383도 모드 프리셋 중심이라 DnD는 후속일 가능성이 큽니다.release-244(
#3768credential 선택 공유) 기준으로는 블로커가 아닙니다. GUI 편의 기능이고, 엔진·문서(docs-site/.../model-ordering.md가#3383에 포함)가 이미 정리 중입니다. types/config 분할로 무효화될 성격도 아닙니다. 다만 새 GUI PR을 지금 병렬로 받으면 Models.tsx 충돌과 “피커 순서” 제품 메시지가 두 갈래로 갈라집니다. 우선순위는 중간 이하로 두고,#3383에 붙이거나 그 PR 머지 후 DnD만 후속으로 받는 편이 맞습니다.경로
src/codex/catalog/sync.tsmodelPickerOrder/normalizeModelPickerOrder- 디스플레이 전용 엔진은 이미 있음. GUI만 없으면 이슈 전부가 아님경로
src/types/config.tsmodelPickerOrder- 저장 스키마는 이미 존재경로
gui/src/pages/Models.tsx(dev HEAD) - 드래그 핸들·순서 저장 UI 없음. 이슈의 핵심 갭경로 PR
#3383gui/src/model-picker-order.ts- provider/alphabetical/most-used 프리셋이 이슈의 “Group by Provider”와 겹침경로 PR
#3383management/config 저장 경로 -modelPickerOrder를 subagent 라우팅과 분리해 저장하려는 설계가 이슈 요구와 맞음심볼
subagentModelsvsmodelPickerOrder- 이슈 본문이 둘을 섞어 설명하므로, GUI 카피에서 “피커 표시 순서만”을 더 분명히 해야 함메인테이너의 판단이 필요한 지점
#3383중복/후속으로 닫고 DnD만 새 이슈로 남길지,#3383에 드래그 핸들을 이어서 넣을지/api/config패치 후syncModelsToCodex()를 GUI가 항상 기다릴지, 기존 catalog refresh 신호를 재사용할지너의 추천
새 병렬 PR은 받지 마세요. 먼저
#3383을 리뷰·머지하고, 이 이슈는 그 PR에 링크한 뒤 “머지 후 남는 갭 = 드래그 앤 드롭 custom 편집”만 남기거나#3383에 DnD를 작은 후속 커밋으로 붙이세요. 엔진·설정 키를 다시 만들지 말고, 기존modelPickerOrder와 sync 디스플레이 대역 규칙을 그대로 쓰세요. release-244 블로커로 올리지 않는 것을 추천합니다.이 댓글은 grok-bot이 작성했습니다
feat(gui): add guarded routed model picker drag ordering [skip ci]
feat(gui): add guarded routed model picker drag ordering [skip ci]
feat(gui): add guarded routed model picker drag ordering [skip ci]
feat(gui): add guarded routed model picker drag ordering [skip ci]
Merge pull request #3887: drag-and-drop model picker ordering (#3774 …
lidge-jun commentedon Sep 7, 2026
Partial: drag-and-drop reordering for
modelPickerOrderlanded ondevvia #3887 (merge1e188b787,Co-authored-by: leonclab) on top of the ordering presets from #3801 — pointer drag and keyboard (Enter) moves, exact PUT fields, save/reload, failed-save draft preservation, native rows locked. Remaining for this issue: reordering of native/featured rows and any further UX polish, so it stays open.feat(gui): add guarded routed model picker drag ordering [skip ci]
Merge pull request lidge-jun#3887: drag-and-drop model picker ordering (
lidge-jun commentedon Sep 18, 2026
Already shipped. #3887 landed as
1e188b7874b1bfe6539e85fa91ba2d4ad12ca9eb— "feat(gui): add guarded routed model picker drag ordering" — and its merge commit names this issue as the slice it carries.Closing it because the status here is stale rather than because the request was declined: drag ordering for
modelPickerOrderis in the WebUI and has been for some time. This surfaced while auditing the open backlog against what is actually ondev, which is exactly the kind of drift that makes an issue list less useful than it should be.If the shipped behaviour differs from what you had in mind — the guard conditions, which rows are draggable, or how the order persists — that is worth a fresh issue naming the specific gap, since it would be a different request from this one and easier to act on than reopening a thread whose original ask is satisfied.