diff --git a/src/commands/models/list.model-row.test.ts b/src/commands/models/list.model-row.test.ts index 707cc5dcf40d..6f7598ffd72a 100644 --- a/src/commands/models/list.model-row.test.ts +++ b/src/commands/models/list.model-row.test.ts @@ -56,4 +56,22 @@ describe("toModelRow", () => { expect(row.local).toBe(true); } }); + + it("keeps local provider rows available when registry availability omits the model key", () => { + const row = toModelRow({ + model: { + ...OPENROUTER_MODEL, + provider: "ollama", + id: "qwen3.6:35b-a3b", + name: "qwen3.6:35b-a3b", + baseUrl: "http://127.0.0.1:11434", + } as never, + key: "ollama/qwen3.6:35b-a3b", + tags: [], + availableKeys: new Set(["ollama/llama3.2"]), + }); + + expect(row.local).toBe(true); + expect(row.available).toBe(true); + }); }); diff --git a/src/commands/models/list.model-row.ts b/src/commands/models/list.model-row.ts index fd35ed87b478..1922142e1824 100644 --- a/src/commands/models/list.model-row.ts +++ b/src/commands/models/list.model-row.ts @@ -50,8 +50,10 @@ export function toModelRow(params: { const input = model.input.join("+") || "text"; const local = isLocalBaseUrl(model.baseUrl ?? ""); - const modelIsAvailable = availableKeys?.has(modelKey(model.provider, model.id)) ?? false; - // Prefer model-level registry availability when present. + const modelIsAvailable = + local || (availableKeys?.has(modelKey(model.provider, model.id)) ?? false); + // Local provider rows use their baseUrl as the auth marker. + // Otherwise prefer model-level registry availability when present. // Fall back to provider-level auth heuristics only if registry availability isn't available, // or if the caller marks this as a synthetic/forward-compat model that won't appear in getAvailable(). const available =