mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-29 10:02:04 +00:00
62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import { resolveProviderModernModelRef } from "../plugins/provider-runtime.js";
|
|
import { normalizeProviderId } from "./provider-id.js";
|
|
|
|
export type ModelRef = {
|
|
provider?: string | null;
|
|
id?: string | null;
|
|
};
|
|
|
|
function isHighSignalClaudeModelId(id: string): boolean {
|
|
const normalized = id.replace(/[_.]/g, "-");
|
|
if (!/\bclaude\b/i.test(normalized)) {
|
|
return true;
|
|
}
|
|
if (/\bhaiku\b/i.test(normalized)) {
|
|
return false;
|
|
}
|
|
if (/\bclaude-3(?:[-.]5|[-.]7)\b/i.test(normalized)) {
|
|
return false;
|
|
}
|
|
const versionMatch = normalized.match(/\bclaude-[a-z0-9-]*?-(\d+)(?:-(\d+))?(?:\b|[-])/i);
|
|
if (!versionMatch) {
|
|
return false;
|
|
}
|
|
const major = Number.parseInt(versionMatch[1] ?? "0", 10);
|
|
const minor = Number.parseInt(versionMatch[2] ?? "0", 10);
|
|
if (major > 4) {
|
|
return true;
|
|
}
|
|
if (major < 4) {
|
|
return false;
|
|
}
|
|
return minor >= 6;
|
|
}
|
|
|
|
export function isModernModelRef(ref: ModelRef): boolean {
|
|
const provider = normalizeProviderId(ref.provider ?? "");
|
|
const id = ref.id?.trim().toLowerCase() ?? "";
|
|
if (!provider || !id) {
|
|
return false;
|
|
}
|
|
|
|
const pluginDecision = resolveProviderModernModelRef({
|
|
provider,
|
|
context: {
|
|
provider,
|
|
modelId: id,
|
|
},
|
|
});
|
|
if (typeof pluginDecision === "boolean") {
|
|
return pluginDecision;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
export function isHighSignalLiveModelRef(ref: ModelRef): boolean {
|
|
const id = ref.id?.trim().toLowerCase() ?? "";
|
|
if (!isModernModelRef(ref) || !id) {
|
|
return false;
|
|
}
|
|
return isHighSignalClaudeModelId(id);
|
|
}
|