mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-16 23:45:33 +01:00
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
|
|
import { defaultEndpoints } from 'librechat-data-provider';
|
||
|
|
import type { EModelEndpoint, TEndpointsConfig, TConfig } from 'librechat-data-provider';
|
||
|
|
|
||
|
|
export const getEndpointsFilter = (endpointsConfig: TEndpointsConfig) => {
|
||
|
|
const filter: Record<string, boolean> = {};
|
||
|
|
if (!endpointsConfig) {
|
||
|
|
return filter;
|
||
|
|
}
|
||
|
|
for (const key of Object.keys(endpointsConfig)) {
|
||
|
|
filter[key] = !!endpointsConfig[key];
|
||
|
|
}
|
||
|
|
return filter;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const getAvailableEndpoints = (
|
||
|
|
filter: Record<string, boolean>,
|
||
|
|
endpointsConfig: TEndpointsConfig,
|
||
|
|
) => {
|
||
|
|
const defaultSet = new Set(defaultEndpoints);
|
||
|
|
const availableEndpoints: EModelEndpoint[] = [];
|
||
|
|
|
||
|
|
for (const endpoint in endpointsConfig) {
|
||
|
|
// Check if endpoint is in the filter or its type is in defaultEndpoints
|
||
|
|
if (
|
||
|
|
filter[endpoint] ||
|
||
|
|
(endpointsConfig[endpoint]?.type &&
|
||
|
|
defaultSet.has(endpointsConfig[endpoint]?.type as EModelEndpoint))
|
||
|
|
) {
|
||
|
|
availableEndpoints.push(endpoint as EModelEndpoint);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return availableEndpoints;
|
||
|
|
};
|
||
|
|
|
||
|
|
export function getEndpointField<K extends keyof TConfig>(
|
||
|
|
endpointsConfig: TEndpointsConfig | undefined,
|
||
|
|
endpoint: EModelEndpoint | string | null | undefined,
|
||
|
|
property: K,
|
||
|
|
): TConfig[K] | undefined {
|
||
|
|
if (!endpointsConfig || endpoint === null || endpoint === undefined) {
|
||
|
|
return undefined;
|
||
|
|
}
|
||
|
|
|
||
|
|
const config = endpointsConfig[endpoint];
|
||
|
|
if (!config) {
|
||
|
|
return undefined;
|
||
|
|
}
|
||
|
|
|
||
|
|
return config[property];
|
||
|
|
}
|
||
|
|
|
||
|
|
export function mapEndpoints(endpointsConfig: TEndpointsConfig) {
|
||
|
|
const filter = getEndpointsFilter(endpointsConfig);
|
||
|
|
return getAvailableEndpoints(filter, endpointsConfig).sort(
|
||
|
|
(a, b) => (endpointsConfig?.[a]?.order ?? 0) - (endpointsConfig?.[b]?.order ?? 0),
|
||
|
|
);
|
||
|
|
}
|