fix(nearai): disable developer role for Near AI provider
Near AI's OpenAI-compatible API doesn't support the `developer` role that OpenAI uses for reasoning models. This causes 400 errors when using GPT-OSS-120B and GLM-4.7 models. Add nearai provider and cloud-api.near.ai baseUrl to the model compatibility check that sets supportsDeveloperRole: false, which converts developer messages to system messages before API calls. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
ad939f5cc5
commit
e3a19f67b5
@ -41,4 +41,26 @@ describe("normalizeModelCompat", () => {
|
|||||||
const normalized = normalizeModelCompat(model);
|
const normalized = normalizeModelCompat(model);
|
||||||
expect(normalized.compat?.supportsDeveloperRole).toBe(false);
|
expect(normalized.compat?.supportsDeveloperRole).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("forces supportsDeveloperRole off for nearai provider", () => {
|
||||||
|
const model = {
|
||||||
|
...baseModel(),
|
||||||
|
provider: "nearai",
|
||||||
|
baseUrl: "https://cloud-api.near.ai/v1",
|
||||||
|
};
|
||||||
|
delete (model as { compat?: unknown }).compat;
|
||||||
|
const normalized = normalizeModelCompat(model);
|
||||||
|
expect(normalized.compat?.supportsDeveloperRole).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("forces supportsDeveloperRole off for near.ai baseUrl", () => {
|
||||||
|
const model = {
|
||||||
|
...baseModel(),
|
||||||
|
provider: "custom",
|
||||||
|
baseUrl: "https://cloud-api.near.ai/v1",
|
||||||
|
};
|
||||||
|
delete (model as { compat?: unknown }).compat;
|
||||||
|
const normalized = normalizeModelCompat(model);
|
||||||
|
expect(normalized.compat?.supportsDeveloperRole).toBe(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,7 +7,8 @@ function isOpenAiCompletionsModel(model: Model<Api>): model is Model<"openai-com
|
|||||||
export function normalizeModelCompat(model: Model<Api>): Model<Api> {
|
export function normalizeModelCompat(model: Model<Api>): Model<Api> {
|
||||||
const baseUrl = model.baseUrl ?? "";
|
const baseUrl = model.baseUrl ?? "";
|
||||||
const isZai = model.provider === "zai" || baseUrl.includes("api.z.ai");
|
const isZai = model.provider === "zai" || baseUrl.includes("api.z.ai");
|
||||||
if (!isZai || !isOpenAiCompletionsModel(model)) return model;
|
const isNearAi = model.provider === "nearai" || baseUrl.includes("cloud-api.near.ai");
|
||||||
|
if ((!isZai && !isNearAi) || !isOpenAiCompletionsModel(model)) return model;
|
||||||
|
|
||||||
const openaiModel = model as Model<"openai-completions">;
|
const openaiModel = model as Model<"openai-completions">;
|
||||||
const compat = openaiModel.compat ?? undefined;
|
const compat = openaiModel.compat ?? undefined;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user