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:
Firat Sertgoz 2026-01-27 13:25:34 +04:00
parent ad939f5cc5
commit e3a19f67b5
No known key found for this signature in database
GPG Key ID: D5001141982D0383
2 changed files with 24 additions and 1 deletions

View File

@ -41,4 +41,26 @@ describe("normalizeModelCompat", () => {
const normalized = normalizeModelCompat(model);
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);
});
});

View File

@ -7,7 +7,8 @@ function isOpenAiCompletionsModel(model: Model<Api>): model is Model<"openai-com
export function normalizeModelCompat(model: Model<Api>): Model<Api> {
const baseUrl = model.baseUrl ?? "";
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 compat = openaiModel.compat ?? undefined;