mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-14 23:21:35 +00:00
The Z.AI (Zhipu AI) provider was missing from the Add-Model dropdown in the admin UI, even though the rest of the stack already supports it: - /public/providers returns 'zai' in the provider list - provider_endpoints_support.json includes a full 'zai' entry with endpoints and a docs URL (https://docs.litellm.ai/docs/providers/zai) - Backend routing works for zai/* models (e.g. zai/glm-4.5, zai/glm-5) - There are many zai/* entries in model_prices_and_context_window.json The dropdown is driven by the hard-coded Providers enum and provider_map in provider_info_helpers.tsx, which did not include 'zai', so users could not select Z.AI when adding a model through the UI. This PR: - Adds Providers.ZAI ('Z.AI (Zhipu AI)') to the enum. - Maps it to 'zai' in provider_map so the UI round-trips the existing backend provider key. - Wires a reasonable placeholder 'zai/glm-4.5' in getPlaceholder, since glm-4.5 is an established zai/* model in the pricing catalog. - Adds two regression tests in provider_info_helpers.test.tsx: 1. getProviderLogoAndName('zai') resolves to Providers.ZAI. 2. getPlaceholder(Providers.ZAI) returns 'zai/glm-4.5'. No logo asset is added in this PR; getProviderLogoAndName already gracefully returns an empty logo string for providers missing from providerLogoMap, matching the existing pattern for several other providers. A follow-up can add a dedicated logo. Fixes #25482 Co-authored-by: yuneng-jiang <yuneng@berri.ai>
This commit is contained in:
parent
e2d0fd9eac
commit
334aedf2d4
2 changed files with 18 additions and 0 deletions
|
|
@ -68,6 +68,16 @@ describe("provider_info_helpers", () => {
|
|||
expect(result.logo).toBe(providerLogoMap[Providers.OpenAI]);
|
||||
});
|
||||
|
||||
it("should resolve the zai (Z.AI) provider value to the Z.AI display name", () => {
|
||||
// Regression test for https://github.com/BerriAI/litellm/issues/25482 —
|
||||
// the backend already returns `zai` from /public/providers and the docs
|
||||
// have a dedicated page, but the UI dropdown was missing an entry, so
|
||||
// `getProviderLogoAndName("zai")` previously returned the raw value as
|
||||
// the display name (no mapping).
|
||||
const result = getProviderLogoAndName("zai");
|
||||
expect(result.displayName).toBe(Providers.ZAI);
|
||||
});
|
||||
|
||||
it("should return provider value as display name when no mapping exists", () => {
|
||||
const unknownProvider = "unknown_provider";
|
||||
const result = getProviderLogoAndName(unknownProvider);
|
||||
|
|
@ -156,6 +166,10 @@ describe("provider_info_helpers", () => {
|
|||
expect(getPlaceholder(Providers.WATSONX)).toBe("watsonx/ibm/granite-3-3-8b-instruct");
|
||||
});
|
||||
|
||||
it("should return zai/glm-4.5 placeholder for Z.AI provider", () => {
|
||||
expect(getPlaceholder(Providers.ZAI)).toBe("zai/glm-4.5");
|
||||
});
|
||||
|
||||
it("should return default gpt-3.5-turbo placeholder for unknown provider", () => {
|
||||
expect(getPlaceholder("UnknownProvider" as any)).toBe("gpt-3.5-turbo");
|
||||
});
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ export enum Providers {
|
|||
WATSONX_TEXT = "Watsonx Text",
|
||||
xAI = "xAI",
|
||||
XINFERENCE = "Xinference",
|
||||
ZAI = "Z.AI (Zhipu AI)",
|
||||
}
|
||||
|
||||
export const provider_map: Record<string, string> = {
|
||||
|
|
@ -210,6 +211,7 @@ export const provider_map: Record<string, string> = {
|
|||
WATSONX_TEXT: "watsonx_text",
|
||||
xAI: "xai",
|
||||
XINFERENCE: "xinference",
|
||||
ZAI: "zai",
|
||||
};
|
||||
|
||||
const asset_logos_folder = "../ui/assets/logos/";
|
||||
|
|
@ -366,6 +368,8 @@ export const getPlaceholder = (selectedProvider: string): string => {
|
|||
return "watsonx/ibm/granite-3-3-8b-instruct";
|
||||
} else if (selectedProvider === Providers.Cursor) {
|
||||
return "cursor/claude-4-sonnet";
|
||||
} else if (selectedProvider === Providers.ZAI) {
|
||||
return "zai/glm-4.5";
|
||||
} else {
|
||||
return "gpt-3.5-turbo";
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue