fix(ui): exclude the all-proxy-models sentinel from fallback options

This commit is contained in:
pengzh1 2026-08-28 01:47:06 +08:00
parent a86cf0f619
commit d79e5cea34
2 changed files with 19 additions and 1 deletions

View file

@ -87,6 +87,15 @@ describe("fetchAvailableModels", () => {
expect(await fetchAvailableModels("token")).toEqual([{ model_group: "gpt-4o" }]);
});
it("excludes the all-proxy-models permission sentinel from fallback options", async () => {
modelHubCallMock.mockResolvedValue({ data: [] });
modelAvailableCallMock.mockResolvedValue({
data: [{ id: "all-proxy-models" }, { id: "gpt-4o", mode: "chat" }],
});
expect(await fetchAvailableModels("token")).toEqual([{ model_group: "gpt-4o", mode: "chat" }]);
});
it("returns an empty list when both routes come back empty", async () => {
modelHubCallMock.mockResolvedValue({ data: [] });
modelAvailableCallMock.mockResolvedValue({ data: [] });

View file

@ -70,5 +70,14 @@ export const fetchAvailableModels = async (accessToken: string): Promise<ModelGr
}
const response = await modelAvailableCall(accessToken, "", "");
return dedupeByGroup(toModelGroups(response?.data));
// Same permission sentinel excludeProxyWideSentinel filters elsewhere: it is
// a marker, not a selectable model.
const selectable = new Set(
excludeProxyWideSentinel(
(Array.isArray(response?.data) ? response.data : []).map(
(model: AvailableModel) => (model.model_group || model.id || model.model_name) ?? "",
),
),
);
return dedupeByGroup(toModelGroups(response?.data).filter((model) => selectable.has(model.model_group)));
};