mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-04 14:22:09 +03:00
Update the main and localized changelogs with the 3.8.7 release notes, including new API self-service status, analytics retention, RAM optimizations, and token accounting fixes. Clarify release skill instructions to ensure new release branches are always created from the latest main branch.
103 lines
2.9 KiB
TypeScript
103 lines
2.9 KiB
TypeScript
/**
|
|
* Moderation Provider Registry
|
|
*
|
|
* Defines providers that support the /v1/moderations endpoint.
|
|
* Follows OpenAI's moderation API format.
|
|
*/
|
|
|
|
let _MODERATION_PROVIDERS: Record<string, any> | null = null;
|
|
|
|
function getOrCreateModerationProviders(): Record<string, any> {
|
|
if (!_MODERATION_PROVIDERS) {
|
|
_MODERATION_PROVIDERS = {
|
|
openai: {
|
|
id: "openai",
|
|
baseUrl: "https://api.openai.com/v1/moderations",
|
|
authType: "apikey",
|
|
authHeader: "bearer",
|
|
models: [
|
|
{ id: "omni-moderation-latest", name: "Omni Moderation Latest" },
|
|
{ id: "text-moderation-latest", name: "Text Moderation Latest" },
|
|
],
|
|
},
|
|
};
|
|
}
|
|
return _MODERATION_PROVIDERS;
|
|
}
|
|
|
|
export const MODERATION_PROVIDERS = new Proxy({} as Record<string, any>, {
|
|
get(target, key: string) {
|
|
if (key in target) {
|
|
return target[key];
|
|
}
|
|
return getOrCreateModerationProviders()[key];
|
|
},
|
|
set(target, key: string, value) {
|
|
target[key] = value;
|
|
getOrCreateModerationProviders()[key] = value;
|
|
return true;
|
|
},
|
|
deleteProperty(target, key: string) {
|
|
delete target[key];
|
|
delete getOrCreateModerationProviders()[key];
|
|
return true;
|
|
},
|
|
ownKeys(target) {
|
|
const targetKeys = Reflect.ownKeys(target);
|
|
const registryKeys = Reflect.ownKeys(getOrCreateModerationProviders());
|
|
return Array.from(new Set([...targetKeys, ...registryKeys]));
|
|
},
|
|
has(target, key) {
|
|
return key in target || key in getOrCreateModerationProviders();
|
|
},
|
|
getOwnPropertyDescriptor(target, key) {
|
|
if (key in target) {
|
|
return Reflect.getOwnPropertyDescriptor(target, key);
|
|
}
|
|
if (key in getOrCreateModerationProviders()) {
|
|
return { configurable: true, enumerable: true, value: getOrCreateModerationProviders()[key as string] };
|
|
}
|
|
return undefined;
|
|
},
|
|
});
|
|
|
|
export function getModerationProviders(): Record<string, any> {
|
|
return MODERATION_PROVIDERS;
|
|
}
|
|
|
|
export function getModerationProvider(providerId) {
|
|
return MODERATION_PROVIDERS[providerId] || null;
|
|
}
|
|
|
|
export function parseModerationModel(modelStr) {
|
|
if (!modelStr) return { provider: null, model: null };
|
|
|
|
for (const [providerId, config] of Object.entries(MODERATION_PROVIDERS)) {
|
|
if (modelStr.startsWith(providerId + "/")) {
|
|
return { provider: providerId, model: modelStr.slice(providerId.length + 1) };
|
|
}
|
|
}
|
|
|
|
for (const [providerId, config] of Object.entries(MODERATION_PROVIDERS)) {
|
|
if (config.models.some((m) => m.id === modelStr)) {
|
|
return { provider: providerId, model: modelStr };
|
|
}
|
|
}
|
|
|
|
return { provider: null, model: modelStr };
|
|
}
|
|
|
|
export function getAllModerationModels() {
|
|
const models = [];
|
|
for (const [providerId, config] of Object.entries(MODERATION_PROVIDERS)) {
|
|
for (const model of config.models) {
|
|
models.push({
|
|
id: `${providerId}/${model.id}`,
|
|
name: model.name,
|
|
provider: providerId,
|
|
});
|
|
}
|
|
}
|
|
return models;
|
|
}
|