Spaces:
Runtime error
Runtime error
File size: 2,740 Bytes
cd8bd0a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | import { wildcardMatch } from "@omniroute/open-sse/services/wildcardRouter.ts";
type JsonRecord = Record<string, unknown>;
interface ConnectionLike {
providerSpecificData?: unknown;
}
function asRecord(value: unknown): JsonRecord {
return value && typeof value === "object" && !Array.isArray(value) ? (value as JsonRecord) : {};
}
function normalizePattern(value: unknown): string | null {
if (typeof value !== "string") return null;
const normalized = value.trim();
if (!normalized || normalized === "**") return null;
return normalized;
}
function toPatternList(value: unknown): string[] {
if (Array.isArray(value)) {
return value.map(normalizePattern).filter((pattern): pattern is string => Boolean(pattern));
}
if (typeof value === "string") {
return value
.split(",")
.map(normalizePattern)
.filter((pattern): pattern is string => Boolean(pattern));
}
return [];
}
function uniquePatterns(patterns: string[]): string[] {
return Array.from(new Set(patterns));
}
function getModelMatchCandidates(modelId: string): string[] {
const normalized = modelId.trim();
if (!normalized) return [];
const withoutExtendedContext = normalized.endsWith("[1m]") ? normalized.slice(0, -4) : normalized;
const lastSlashIndex = withoutExtendedContext.lastIndexOf("/");
const rawModel =
lastSlashIndex >= 0 ? withoutExtendedContext.slice(lastSlashIndex + 1) : withoutExtendedContext;
return Array.from(new Set([normalized, withoutExtendedContext, rawModel].filter(Boolean)));
}
export function normalizeExcludedModelPatterns(value: unknown): string[] {
return uniquePatterns(toPatternList(value));
}
export function getConnectionExcludedModels(providerSpecificData: unknown): string[] {
const data = asRecord(providerSpecificData);
return normalizeExcludedModelPatterns(data.excludedModels ?? data.excluded_models);
}
export function isModelExcludedByConnection(
modelId: unknown,
providerSpecificData: unknown
): boolean {
if (typeof modelId !== "string" || modelId.trim().length === 0) return false;
const candidates = getModelMatchCandidates(modelId);
const excludedModels = getConnectionExcludedModels(providerSpecificData);
if (candidates.length === 0 || excludedModels.length === 0) return false;
return excludedModels.some((pattern) =>
candidates.some((candidate) => wildcardMatch(candidate, pattern))
);
}
export function hasEligibleConnectionForModel(
connections: ConnectionLike[] | null | undefined,
modelId: unknown
): boolean {
if (!Array.isArray(connections) || connections.length === 0) return false;
return connections.some(
(connection) => !isModelExcludedByConnection(modelId, connection?.providerSpecificData)
);
}
|