wiwiway / src /lib /providerModels /managedAvailableModels.ts
Claude Code
Sync gateway codebase without binaries
116b4cb
Raw
History Blame Contribute Delete
2.85 kB
import {
deleteModelAlias,
getModelAliases,
getProviderNodeById,
setModelAlias,
} from "@/lib/localDb";
import {
getProviderAlias,
isAnthropicCompatibleProvider,
isOpenAICompatibleProvider,
} from "@/shared/constants/providers";
import { resolveManagedModelAlias } from "@/shared/utils/providerModelAliases";
function isCompatibleProvider(providerId: string): boolean {
return isOpenAICompatibleProvider(providerId) || isAnthropicCompatibleProvider(providerId);
}
export function usesManagedAvailableModels(providerId: string): boolean {
return providerId === "openrouter" || isCompatibleProvider(providerId);
}
function getProviderStoragePrefix(providerId: string): string {
if (isCompatibleProvider(providerId)) return providerId;
return getProviderAlias(providerId) || providerId;
}
async function getProviderDisplayPrefix(providerId: string): Promise<string> {
if (!isCompatibleProvider(providerId)) {
return getProviderAlias(providerId) || providerId;
}
const providerNode = await getProviderNodeById(providerId);
const prefix = providerNode?.prefix;
return typeof prefix === "string" && prefix.trim().length > 0 ? prefix.trim() : providerId;
}
export async function syncManagedAvailableModelAliases(providerId: string, modelIds: string[]) {
const storagePrefix = getProviderStoragePrefix(providerId);
const displayPrefix = await getProviderDisplayPrefix(providerId);
const existingAliasesRaw = await getModelAliases();
const workingAliases = Object.fromEntries(
Object.entries(existingAliasesRaw).filter((entry): entry is [string, string] => {
const [, value] = entry;
return typeof value === "string";
})
);
const targetModelIds = Array.from(
new Set(
modelIds.map((modelId) => (typeof modelId === "string" ? modelId.trim() : "")).filter(Boolean)
)
);
const targetFullModels = new Set(targetModelIds.map((modelId) => `${storagePrefix}/${modelId}`));
const removedAliases: string[] = [];
for (const [alias, value] of Object.entries(workingAliases)) {
if (!value.startsWith(`${storagePrefix}/`)) continue;
if (targetFullModels.has(value)) continue;
await deleteModelAlias(alias);
delete workingAliases[alias];
removedAliases.push(alias);
}
const assignedAliases: string[] = [];
for (const modelId of targetModelIds) {
const fullModel = `${storagePrefix}/${modelId}`;
const alias = resolveManagedModelAlias({
modelId,
fullModel,
providerDisplayAlias: displayPrefix,
existingAliases: workingAliases,
});
if (!alias) continue;
if (workingAliases[alias] !== fullModel) {
await setModelAlias(alias, fullModel);
workingAliases[alias] = fullModel;
}
assignedAliases.push(alias);
}
return {
assignedAliases,
removedAliases,
storagePrefix,
};
}