feat(zai): consolidate to two coding entrypoints (International/China) and update tests/UI; default to 'international'; update endpoints to /api/coding/paas/v4

This commit is contained in:
Hannes Rudolph 2025-09-18 13:39:09 -06:00
parent 87b45def18
commit 7bc72915cb
5 changed files with 10 additions and 12 deletions

View file

@ -376,7 +376,7 @@ const sambaNovaSchema = apiModelIdProviderModelSchema.extend({
sambaNovaApiKey: z.string().optional(),
})
export const zaiApiLineSchema = z.enum(["international_coding", "international", "china_coding", "china"])
export const zaiApiLineSchema = z.enum(["international", "china"])
export type ZaiApiLine = z.infer<typeof zaiApiLineSchema>

View file

@ -106,12 +106,10 @@ export const mainlandZAiModels = {
export const ZAI_DEFAULT_TEMPERATURE = 0
export const zaiApiLineConfigs = {
international_coding: {
name: "International Coding Plan",
international: {
name: "International",
baseUrl: "https://api.z.ai/api/coding/paas/v4",
isChina: false,
},
international: { name: "International Standard", baseUrl: "https://api.z.ai/api/paas/v4", isChina: false },
china_coding: { name: "China Coding Plan", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", isChina: true },
china: { name: "China Standard", baseUrl: "https://open.bigmodel.cn/api/paas/v4", isChina: true },
china: { name: "China", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", isChina: true },
} satisfies Record<ZaiApiLine, { name: string; baseUrl: string; isChina: boolean }>

View file

@ -43,7 +43,7 @@ describe("ZAiHandler", () => {
new ZAiHandler({ zaiApiKey: "test-zai-api-key", zaiApiLine: "international" })
expect(OpenAI).toHaveBeenCalledWith(
expect.objectContaining({
baseURL: "https://api.z.ai/api/paas/v4",
baseURL: "https://api.z.ai/api/coding/paas/v4",
}),
)
})
@ -81,7 +81,7 @@ describe("ZAiHandler", () => {
it("should use the correct China Z AI base URL", () => {
new ZAiHandler({ zaiApiKey: "test-zai-api-key", zaiApiLine: "china" })
expect(OpenAI).toHaveBeenCalledWith(
expect.objectContaining({ baseURL: "https://open.bigmodel.cn/api/paas/v4" }),
expect.objectContaining({ baseURL: "https://open.bigmodel.cn/api/coding/paas/v4" }),
)
})

View file

@ -15,14 +15,14 @@ import { BaseOpenAiCompatibleProvider } from "./base-openai-compatible-provider"
export class ZAiHandler extends BaseOpenAiCompatibleProvider<InternationalZAiModelId | MainlandZAiModelId> {
constructor(options: ApiHandlerOptions) {
const isChina = zaiApiLineConfigs[options.zaiApiLine ?? "international_coding"].isChina
const isChina = zaiApiLineConfigs[options.zaiApiLine ?? "international"].isChina
const models = isChina ? mainlandZAiModels : internationalZAiModels
const defaultModelId = isChina ? mainlandZAiDefaultModelId : internationalZAiDefaultModelId
super({
...options,
providerName: "Z AI",
baseURL: zaiApiLineConfigs[options.zaiApiLine ?? "international_coding"].baseUrl,
baseURL: zaiApiLineConfigs[options.zaiApiLine ?? "international"].baseUrl,
apiKey: options.zaiApiKey ?? "not-provided",
defaultProviderModelId: defaultModelId,
providerModels: models,

View file

@ -33,7 +33,7 @@ export const ZAi = ({ apiConfiguration, setApiConfigurationField }: ZAiProps) =>
<div>
<label className="block font-medium mb-1">{t("settings:providers.zaiEntrypoint")}</label>
<VSCodeDropdown
value={apiConfiguration.zaiApiLine || zaiApiLineSchema.enum.international_coding}
value={apiConfiguration.zaiApiLine || zaiApiLineSchema.enum.international}
onChange={handleInputChange("zaiApiLine")}
className={cn("w-full")}>
{zaiApiLineSchema.options.map((zaiApiLine) => {
@ -64,7 +64,7 @@ export const ZAi = ({ apiConfiguration, setApiConfigurationField }: ZAiProps) =>
{!apiConfiguration?.zaiApiKey && (
<VSCodeButtonLink
href={
zaiApiLineConfigs[apiConfiguration.zaiApiLine ?? "international_coding"].isChina
zaiApiLineConfigs[apiConfiguration.zaiApiLine ?? "international"].isChina
? "https://open.bigmodel.cn/console/overview"
: "https://z.ai/manage-apikey/apikey-list"
}