|
@@ -24,6 +24,13 @@
|
|
import { updateUserPassword } from '$lib/apis/auths';
|
|
import { updateUserPassword } from '$lib/apis/auths';
|
|
import { goto } from '$app/navigation';
|
|
import { goto } from '$app/navigation';
|
|
import Page from '../../../routes/(app)/+page.svelte';
|
|
import Page from '../../../routes/(app)/+page.svelte';
|
|
|
|
+ import {
|
|
|
|
+ getOpenAIKey,
|
|
|
|
+ getOpenAIModels,
|
|
|
|
+ getOpenAIUrl,
|
|
|
|
+ updateOpenAIKey,
|
|
|
|
+ updateOpenAIUrl
|
|
|
|
+ } from '$lib/apis/openai';
|
|
|
|
|
|
export let show = false;
|
|
export let show = false;
|
|
|
|
|
|
@@ -153,6 +160,13 @@
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ const updateOpenAIHandler = async () => {
|
|
|
|
+ OPENAI_API_BASE_URL = await updateOpenAIUrl(localStorage.token, OPENAI_API_BASE_URL);
|
|
|
|
+ OPENAI_API_KEY = await updateOpenAIKey(localStorage.token, OPENAI_API_KEY);
|
|
|
|
+
|
|
|
|
+ await models.set(await getModels());
|
|
|
|
+ };
|
|
|
|
+
|
|
const toggleTheme = async () => {
|
|
const toggleTheme = async () => {
|
|
if (theme === 'dark') {
|
|
if (theme === 'dark') {
|
|
theme = 'light';
|
|
theme = 'light';
|
|
@@ -484,7 +498,7 @@
|
|
};
|
|
};
|
|
|
|
|
|
const getModels = async (type = 'all') => {
|
|
const getModels = async (type = 'all') => {
|
|
- let models = [];
|
|
|
|
|
|
+ const models = [];
|
|
models.push(
|
|
models.push(
|
|
...(await getOllamaModels(localStorage.token).catch((error) => {
|
|
...(await getOllamaModels(localStorage.token).catch((error) => {
|
|
toast.error(error);
|
|
toast.error(error);
|
|
@@ -493,43 +507,13 @@
|
|
);
|
|
);
|
|
|
|
|
|
// If OpenAI API Key exists
|
|
// If OpenAI API Key exists
|
|
- if (type === 'all' && $settings.OPENAI_API_KEY) {
|
|
|
|
- const OPENAI_API_BASE_URL = $settings.OPENAI_API_BASE_URL ?? 'https://api.openai.com/v1';
|
|
|
|
|
|
+ if (type === 'all' && OPENAI_API_KEY) {
|
|
|
|
+ const openAIModels = await getOpenAIModels(localStorage.token).catch((error) => {
|
|
|
|
+ console.log(error);
|
|
|
|
+ return null;
|
|
|
|
+ });
|
|
|
|
|
|
- // Validate OPENAI_API_KEY
|
|
|
|
- const openaiModelRes = await fetch(`${OPENAI_API_BASE_URL}/models`, {
|
|
|
|
- method: 'GET',
|
|
|
|
- headers: {
|
|
|
|
- 'Content-Type': 'application/json',
|
|
|
|
- Authorization: `Bearer ${$settings.OPENAI_API_KEY}`
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
- .then(async (res) => {
|
|
|
|
- if (!res.ok) throw await res.json();
|
|
|
|
- return res.json();
|
|
|
|
- })
|
|
|
|
- .catch((error) => {
|
|
|
|
- console.log(error);
|
|
|
|
- toast.error(`OpenAI: ${error?.error?.message ?? 'Network Problem'}`);
|
|
|
|
- return null;
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- const openAIModels = Array.isArray(openaiModelRes)
|
|
|
|
- ? openaiModelRes
|
|
|
|
- : openaiModelRes?.data ?? null;
|
|
|
|
-
|
|
|
|
- models.push(
|
|
|
|
- ...(openAIModels
|
|
|
|
- ? [
|
|
|
|
- { name: 'hr' },
|
|
|
|
- ...openAIModels
|
|
|
|
- .map((model) => ({ name: model.id, external: true }))
|
|
|
|
- .filter((model) =>
|
|
|
|
- OPENAI_API_BASE_URL.includes('openai') ? model.name.includes('gpt') : true
|
|
|
|
- )
|
|
|
|
- ]
|
|
|
|
- : [])
|
|
|
|
- );
|
|
|
|
|
|
+ models.push(...(openAIModels ? [{ name: 'hr' }, ...openAIModels] : []));
|
|
}
|
|
}
|
|
|
|
|
|
return models;
|
|
return models;
|
|
@@ -564,6 +548,8 @@
|
|
console.log('settings', $user.role === 'admin');
|
|
console.log('settings', $user.role === 'admin');
|
|
if ($user.role === 'admin') {
|
|
if ($user.role === 'admin') {
|
|
API_BASE_URL = await getOllamaAPIUrl(localStorage.token);
|
|
API_BASE_URL = await getOllamaAPIUrl(localStorage.token);
|
|
|
|
+ OPENAI_API_BASE_URL = await getOpenAIUrl(localStorage.token);
|
|
|
|
+ OPENAI_API_KEY = await getOpenAIKey(localStorage.token);
|
|
}
|
|
}
|
|
|
|
|
|
let settings = JSON.parse(localStorage.getItem('settings') ?? '{}');
|
|
let settings = JSON.parse(localStorage.getItem('settings') ?? '{}');
|
|
@@ -584,9 +570,6 @@
|
|
options = { ...options, ...settings.options };
|
|
options = { ...options, ...settings.options };
|
|
options.stop = (settings?.options?.stop ?? []).join(',');
|
|
options.stop = (settings?.options?.stop ?? []).join(',');
|
|
|
|
|
|
- OPENAI_API_KEY = settings.OPENAI_API_KEY ?? '';
|
|
|
|
- OPENAI_API_BASE_URL = settings.OPENAI_API_BASE_URL ?? 'https://api.openai.com/v1';
|
|
|
|
-
|
|
|
|
titleAutoGenerate = settings.titleAutoGenerate ?? true;
|
|
titleAutoGenerate = settings.titleAutoGenerate ?? true;
|
|
speechAutoSend = settings.speechAutoSend ?? false;
|
|
speechAutoSend = settings.speechAutoSend ?? false;
|
|
responseAutoCopy = settings.responseAutoCopy ?? false;
|
|
responseAutoCopy = settings.responseAutoCopy ?? false;
|
|
@@ -1415,10 +1398,12 @@
|
|
<form
|
|
<form
|
|
class="flex flex-col h-full justify-between space-y-3 text-sm"
|
|
class="flex flex-col h-full justify-between space-y-3 text-sm"
|
|
on:submit|preventDefault={() => {
|
|
on:submit|preventDefault={() => {
|
|
- saveSettings({
|
|
|
|
- OPENAI_API_KEY: OPENAI_API_KEY !== '' ? OPENAI_API_KEY : undefined,
|
|
|
|
- OPENAI_API_BASE_URL: OPENAI_API_BASE_URL !== '' ? OPENAI_API_BASE_URL : undefined
|
|
|
|
- });
|
|
|
|
|
|
+ updateOpenAIHandler();
|
|
|
|
+
|
|
|
|
+ // saveSettings({
|
|
|
|
+ // OPENAI_API_KEY: OPENAI_API_KEY !== '' ? OPENAI_API_KEY : undefined,
|
|
|
|
+ // OPENAI_API_BASE_URL: OPENAI_API_BASE_URL !== '' ? OPENAI_API_BASE_URL : undefined
|
|
|
|
+ // });
|
|
show = false;
|
|
show = false;
|
|
}}
|
|
}}
|
|
>
|
|
>
|