Merge pull request #633 from prakhar1605/fix/filter-chat-models

Filter non-chat models from BYOK model picker
This commit is contained in:
PRAKHAR PANDEY 2026-06-23 18:18:00 +05:30 committed by GitHub
commit 812ed9222c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 1 deletions

View file

@ -224,3 +224,22 @@ export async function listOnboardingModels(): Promise<{ providers: ProviderSumma
return { providers, lastUpdated: fetchedAt };
}
export async function getChatModelIds(
flavor: "openai" | "anthropic" | "google",
): Promise<Set<string>> {
try {
const { data } = await getModelsDevData();
const provider = pickProvider(data, flavor);
if (!provider) return new Set();
const ids = new Set<string>();
for (const [id, model] of Object.entries(provider.models)) {
if (isStableModel(model) && supportsToolCall(model)) {
ids.add(model.id ?? id);
}
}
return ids;
} catch {
return new Set();
}
}

View file

@ -10,6 +10,7 @@ import { LlmModelConfig, LlmProvider } from "@x/shared/dist/models.js";
import z from "zod";
import { getGatewayProvider } from "./gateway.js";
import { getDefaultModelAndProvider, resolveProviderConfig } from "./defaults.js";
import { getChatModelIds } from "./models-dev.js";
import { withUseCase } from "../analytics/use_case.js";
export const Provider = LlmProvider;
@ -158,7 +159,16 @@ export async function listModelsForProvider(
// OpenAI-shaped: { data: [{ id: "..." }] }
ids = (data.data ?? []).map((m: { id: string }) => m.id);
}
return ids.filter((id: string) => typeof id === "string" && id.length > 0);
const cleaned = ids.filter((id: string) => typeof id === "string" && id.length > 0);
if (flavor === "openai" || flavor === "anthropic" || flavor === "google") {
const chatIds = await getChatModelIds(flavor);
// Only filter when models.dev returned data; if it's empty (offline/no
// cache/unknown provider) keep the full list rather than showing none.
if (chatIds.size > 0) {
return cleaned.filter((id) => chatIds.has(id));
}
}
return cleaned;
} finally {
clearTimeout(timeout);
}