|
@@ -1,6 +1,11 @@
|
|
|
import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants';
|
|
|
+import { getOpenAIModelsDirect } from './openai';
|
|
|
|
|
|
-export const getModels = async (token: string = '', base: boolean = false) => {
|
|
|
+export const getModels = async (
|
|
|
+ token: string = '',
|
|
|
+ connections: object | null = null,
|
|
|
+ base: boolean = false
|
|
|
+) => {
|
|
|
let error = null;
|
|
|
const res = await fetch(`${WEBUI_BASE_URL}/api/models${base ? '/base' : ''}`, {
|
|
|
method: 'GET',
|
|
@@ -25,6 +30,76 @@ export const getModels = async (token: string = '', base: boolean = false) => {
|
|
|
}
|
|
|
|
|
|
let models = res?.data ?? [];
|
|
|
+
|
|
|
+ if (connections && !base) {
|
|
|
+ let localModels = [];
|
|
|
+
|
|
|
+ if (connections) {
|
|
|
+ const OPENAI_API_BASE_URLS = connections.OPENAI_API_BASE_URLS;
|
|
|
+ const OPENAI_API_KEYS = connections.OPENAI_API_KEYS;
|
|
|
+ const OPENAI_API_CONFIGS = connections.OPENAI_API_CONFIGS;
|
|
|
+
|
|
|
+ const requests = [];
|
|
|
+ for (const idx in OPENAI_API_BASE_URLS) {
|
|
|
+ const url = OPENAI_API_BASE_URLS[idx];
|
|
|
+
|
|
|
+ if (idx.toString() in OPENAI_API_CONFIGS) {
|
|
|
+ const apiConfig = OPENAI_API_CONFIGS[idx.toString()] ?? {};
|
|
|
+
|
|
|
+ const enable = apiConfig?.enable ?? true;
|
|
|
+ const modelIds = apiConfig?.model_ids ?? [];
|
|
|
+
|
|
|
+ if (enable) {
|
|
|
+ if (modelIds.length > 0) {
|
|
|
+ const modelList = {
|
|
|
+ object: 'list',
|
|
|
+ data: modelIds.map((modelId) => ({
|
|
|
+ id: modelId,
|
|
|
+ name: modelId,
|
|
|
+ owned_by: 'openai',
|
|
|
+ openai: { id: modelId },
|
|
|
+ urlIdx: idx
|
|
|
+ }))
|
|
|
+ };
|
|
|
+
|
|
|
+ requests.push(() => modelList);
|
|
|
+ } else {
|
|
|
+ requests.push(getOpenAIModelsDirect(url, OPENAI_API_KEYS[idx]));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ requests.push(() => {});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const responses = await Promise.all(requests);
|
|
|
+
|
|
|
+ for (const idx in responses) {
|
|
|
+ const response = responses[idx];
|
|
|
+ const apiConfig = OPENAI_API_CONFIGS[idx.toString()] ?? {};
|
|
|
+
|
|
|
+ let models = Array.isArray(response) ? response : (response?.data ?? []);
|
|
|
+ models = models.map((model) => ({ ...model, openai: { id: model.id }, urlIdx: idx }));
|
|
|
+
|
|
|
+ const prefixId = apiConfig.prefix_id;
|
|
|
+ if (prefixId) {
|
|
|
+ for (const model of models) {
|
|
|
+ model.id = `${prefixId}.${model.id}`;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ localModels = localModels.concat(models);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ models = models.concat(
|
|
|
+ localModels.map((model) => ({
|
|
|
+ ...model,
|
|
|
+ name: model?.name ?? model?.id,
|
|
|
+ direct: true
|
|
|
+ }))
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
return models;
|
|
|
};
|
|
|
|