fix(picker): surface Kimi Coding k3 when searching kimi across all pickers (salvage of #67409) - #68153
Merged
Conversation
teknium1
force-pushed
the
fix/kimi-k3-search-alias
branch
from
July 27, 2026 01:33
c7102e4 to
3d97929
Compare
Contributor
૮ >ﻌ< ა ci reviewran on a82c15c all good! |
Kimi Coding discovers the flagship as wire id `k3`. Picker search used only that id, so typing "kimi" hid it next to every other kimi-* model. Add picker-only search aliases without changing the wire id.
Assert the picker haystack keeps ordinary ids unchanged, surfaces wire id k3 for "kimi"/"k3" queries, and accept search_labels in curses mocks.
Follow-up to the salvaged #67409 search aliases: with kimi-k3 now in the curated kimi-coding list (#68108), a Coding Plan key rendered TWO rows for one model — curated 'kimi-k3' plus live-discovered bare 'k3' (merge dedup was exact-string). Add model_alias_canonical() derived from the same alias table and use it as the merge dedup key, so the curated public slug wins and live-only models still surface.
teknium1
force-pushed
the
fix/kimi-k3-search-alias
branch
from
July 27, 2026 04:03
3d97929 to
a82c15c
Compare
5 tasks
3 tasks
zengzheqing
pushed a commit
to zengzheqing/hermes-agent
that referenced
this pull request
Aug 19, 2026
Kimi Coding Plan's flagship is configured/discovered as the bare wire id k3 while the curated picker catalog carries the public slug kimi-k3. The catalog merge already dedups k3 into kimi-k3 via model_alias_canonical (NousResearch#68153), but the post-pass that injects the active model into its provider row used an exact-string membership check. With model.default: k3 the row only contains kimi-k3, so the bare id was re-injected and the picker rendered the same model twice ("K3" + "Kimi K3") across every surface consuming list_authenticated_providers() (CLI/TUI/dashboard/ desktop/gateway pickers, MoA slot pickers). Extract the post-pass into _inject_current_model_row() and fold both sides through the same alias canonicalisation before deciding to inject. Genuine uncurated models are still prepended; distinct live ids (k3-256k) are not folded.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Typing "kimi" in any model picker now finds Kimi Coding's flagship, which is live-discovered under the bare wire id
k3— previously every picker surface (CLI curses, TUI, dashboard, desktop) fuzzy-filtered on the wire id alone, so the flagship vanished from "kimi" searches while everykimi-*sibling matched.Salvages #67409 (@HexLab98) onto current main with one follow-up fix.
Changes
Cherry-picked (authorship preserved):
hermes_cli/model_search.py+model-search-text.tsmirrored in ui-tui / web / desktop (k3↔kimi-k3/kimi), with keep-in-sync headerssearch_labelshaystack support threaded throughcurses_radiolistso the CLI setup picker benefits took3(respects the feat(models): add k3 to kimi-coding and kimi-coding-cn model lists #65969 rejection — discovery stays endpoint-scoped)Follow-up fix (ours):
kimi-k3now in the curated kimi-coding list (fix(models): complete kimi-k3 rollout across Kimi-direct catalog surfaces (salvage of #67115, #67685, #67620) #68108), a Coding Plan key rendered TWO rows for one model — curatedkimi-k3plus live barek3(merge dedup was exact-string). Addedmodel_alias_canonical()derived from the same alias table and used it as the picker-merge dedup key: the curated public slug wins, live-only models still surface. Regression tests included.Validation
model-search-text.test.tswebtsc --noEmitk3→"k3 kimi-k3 kimi", non-alias ids identityk3)kimi-k3), live-only models retainedInfographic