mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-24 08:02:14 +03:00
Release v3.8.42 — full CHANGELOG in CHANGELOG.md. CI: 103 checks green incl. CodeQL (all languages), Semgrep, all 8 unit shards, coverage, Node 24 compat, and integration tests. Full unit suite validated locally: 19437 pass / 0 fail. The 3 red checks are advisory and do not gate main (no required status checks): SonarCloud/SonarQube new-code coverage gate, and PR Test Policy (test-masking detector flagging the legitimate dead-Phind provider removal in #5530 — reviewed, correct). Includes cycle-close reconciliation + repair of inherited base-red tests from #5480/#5527/#5427/#5521 that the PR->release fast-path did not exercise.
133 lines
4.5 KiB
TypeScript
133 lines
4.5 KiB
TypeScript
import { parseModel } from "@omniroute/open-sse/services/model";
|
|
import {
|
|
getCanonicalModelMetadata,
|
|
type CanonicalModelMetadata,
|
|
} from "@/lib/modelMetadataRegistry";
|
|
import { resolveFamilyFirstPublishedModelId } from "@/lib/vscode/familyFirstModelIds";
|
|
import { getReasoningVariantBaseModelId } from "@/lib/vscode/reasoningMetadata";
|
|
import {
|
|
getVscodeServiceTierVariantSuffix,
|
|
parseVscodeServiceTierVariantModelId,
|
|
supportsVscodeServiceTierVariants,
|
|
} from "@/lib/vscode/serviceTierVariants";
|
|
|
|
type VscodeCatalogModel = {
|
|
id?: string;
|
|
name?: string;
|
|
root?: string;
|
|
owned_by?: string;
|
|
};
|
|
|
|
const PROVIDER_NAME_OVERRIDES: Record<string, string> = {
|
|
codex: "Codex",
|
|
cx: "Codex",
|
|
github: "GitHub",
|
|
gh: "GitHub",
|
|
gemini: "Gemini",
|
|
};
|
|
|
|
function tokenize(value: string) {
|
|
return value
|
|
.toLowerCase()
|
|
.split(/[^a-z0-9]+/i)
|
|
.map((part) => part.trim())
|
|
.filter((part) => part.length >= 4);
|
|
}
|
|
|
|
function getProviderPrefix(metadata: CanonicalModelMetadata | null) {
|
|
const providerKey = metadata?.providerAlias || metadata?.provider || "";
|
|
if (providerKey && PROVIDER_NAME_OVERRIDES[providerKey]) {
|
|
return PROVIDER_NAME_OVERRIDES[providerKey];
|
|
}
|
|
|
|
const providerLabel = metadata?.providerLabel?.trim() || null;
|
|
if (!providerLabel) {
|
|
return null;
|
|
}
|
|
if (/codex/i.test(providerLabel)) {
|
|
return "Codex";
|
|
}
|
|
if (/github/i.test(providerLabel)) {
|
|
return "GitHub";
|
|
}
|
|
if (/gemini/i.test(providerLabel)) {
|
|
return "Gemini";
|
|
}
|
|
|
|
return providerLabel;
|
|
}
|
|
|
|
function normalizeDisplayNameBranding(displayName: string) {
|
|
return displayName
|
|
.replace(/^OpenAI\s+Codex\b/i, "Codex")
|
|
.replace(/^GitHub\s+Copilot\b/i, "GitHub")
|
|
.trim();
|
|
}
|
|
|
|
function stripLeadingProviderPrefix(displayName: string, providerPrefix: string | null) {
|
|
if (!providerPrefix) {
|
|
return displayName;
|
|
}
|
|
|
|
const escapedProviderPrefix = providerPrefix.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
return displayName.replace(new RegExp(`^${escapedProviderPrefix}\\s+`, "i"), "").trim();
|
|
}
|
|
|
|
function prefixDisplayName(displayName: string, providerPrefix: string | null) {
|
|
const normalizedProviderPrefix = providerPrefix?.trim() || null;
|
|
const normalizedDisplayName = normalizeDisplayNameBranding(displayName);
|
|
|
|
if (!normalizedProviderPrefix) return normalizedDisplayName;
|
|
|
|
const providerTokens = tokenize(normalizedProviderPrefix);
|
|
if (providerTokens.length === 0) return normalizedDisplayName;
|
|
|
|
const displayNameLower = normalizedDisplayName.toLowerCase();
|
|
if (providerTokens.some((token) => displayNameLower.includes(token))) {
|
|
return normalizedDisplayName;
|
|
}
|
|
|
|
return `${normalizedProviderPrefix} ${stripLeadingProviderPrefix(normalizedDisplayName, normalizedProviderPrefix)}`.trim();
|
|
}
|
|
|
|
export function resolveVscodeModelMetadata(model: VscodeCatalogModel) {
|
|
const rawModelId = model.id || model.root || model.name || "";
|
|
const normalizedModelId = resolveFamilyFirstPublishedModelId(rawModelId);
|
|
const parsedTierModel = parseVscodeServiceTierVariantModelId(normalizedModelId);
|
|
const canonicalBaseModelId = getReasoningVariantBaseModelId(parsedTierModel.baseModelId);
|
|
const parsed = parseModel(canonicalBaseModelId, "");
|
|
const provider = parsed.provider || model.owned_by || undefined;
|
|
const providerModel =
|
|
parsed.model ||
|
|
(canonicalBaseModelId.includes("/")
|
|
? canonicalBaseModelId.split("/").slice(1).join("/")
|
|
: canonicalBaseModelId) ||
|
|
model.root ||
|
|
model.id ||
|
|
model.name ||
|
|
undefined;
|
|
|
|
return providerModel && provider
|
|
? getCanonicalModelMetadata({ provider, model: providerModel })
|
|
: providerModel
|
|
? getCanonicalModelMetadata({ model: providerModel })
|
|
: null;
|
|
}
|
|
|
|
export function getVscodeModelDisplayName(model: VscodeCatalogModel) {
|
|
const rawModelId = model.id || model.root || model.name || "";
|
|
const { serviceTier } = parseVscodeServiceTierVariantModelId(rawModelId);
|
|
const metadata = resolveVscodeModelMetadata(model);
|
|
const displayName = metadata?.displayName || model.name || model.id || model.root || "unknown";
|
|
const prefixedDisplayName = prefixDisplayName(displayName, getProviderPrefix(metadata));
|
|
const shouldShowTierSuffix = Boolean(serviceTier) || supportsVscodeServiceTierVariants(model);
|
|
return shouldShowTierSuffix
|
|
? `${prefixedDisplayName} (${getVscodeServiceTierVariantSuffix(serviceTier)})`
|
|
: prefixedDisplayName;
|
|
}
|
|
|
|
export function getVscodeModelGroupingKey(model: VscodeCatalogModel) {
|
|
const metadata = resolveVscodeModelMetadata(model);
|
|
return metadata?.qualifiedId || metadata?.model || model.id || model.name || model.root || "";
|
|
}
|