mirror of https://github.com/openclaw/openclaw.git
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import type { Api, Model } from "@mariozechner/pi-ai";
|
|
|
|
function isOpenAiCompletionsModel(model: Model<Api>): model is Model<"openai-completions"> {
|
|
return model.api === "openai-completions";
|
|
}
|
|
|
|
function isDashScopeCompatibleEndpoint(baseUrl: string): boolean {
|
|
return (
|
|
baseUrl.includes("dashscope.aliyuncs.com") ||
|
|
baseUrl.includes("dashscope-intl.aliyuncs.com") ||
|
|
baseUrl.includes("dashscope-us.aliyuncs.com")
|
|
);
|
|
}
|
|
|
|
export function normalizeModelCompat(model: Model<Api>): Model<Api> {
|
|
const baseUrl = model.baseUrl ?? "";
|
|
const isZai = model.provider === "zai" || baseUrl.includes("api.z.ai");
|
|
const isMoonshot =
|
|
model.provider === "moonshot" ||
|
|
baseUrl.includes("moonshot.ai") ||
|
|
baseUrl.includes("moonshot.cn");
|
|
const isDashScope = model.provider === "dashscope" || isDashScopeCompatibleEndpoint(baseUrl);
|
|
if ((!isZai && !isMoonshot && !isDashScope) || !isOpenAiCompletionsModel(model)) {
|
|
return model;
|
|
}
|
|
|
|
const openaiModel = model;
|
|
const compat = openaiModel.compat ?? undefined;
|
|
if (compat?.supportsDeveloperRole === false) {
|
|
return model;
|
|
}
|
|
|
|
openaiModel.compat = compat
|
|
? { ...compat, supportsDeveloperRole: false }
|
|
: { supportsDeveloperRole: false };
|
|
return openaiModel;
|
|
}
|