diff --git a/src/lib/components/chat/Settings/Connections.svelte b/src/lib/components/chat/Settings/Connections.svelte
index 3700f90e4..4c0d54595 100644
--- a/src/lib/components/chat/Settings/Connections.svelte
+++ b/src/lib/components/chat/Settings/Connections.svelte
@@ -6,7 +6,7 @@
const dispatch = createEventDispatcher();
const i18n = getContext('i18n');
- import { models, user } from '$lib/stores';
+ import { models, settings, user } from '$lib/stores';
import Switch from '$lib/components/common/Switch.svelte';
import Spinner from '$lib/components/common/Spinner.svelte';
@@ -16,84 +16,132 @@
import AddConnectionModal from '$lib/components/AddConnectionModal.svelte';
- const getModels = async () => {
- const models = await _getModels(localStorage.token);
- return models;
- };
+ export let saveSettings: Function;
let config = null;
let showConnectionModal = false;
- onMount(async () => {});
+ const addConnectionHandler = async (connection) => {
+ config.OPENAI_API_BASE_URLS.push(connection.url);
+ config.OPENAI_API_KEYS.push(connection.key);
+ config.OPENAI_API_CONFIGS[config.OPENAI_API_BASE_URLS.length - 1] = connection.config;
- const addConnectionHandler = async (connection) => {};
+ await updateHandler();
+ };
- const submitHandler = async () => {};
- const updateHandler = async () => {};
+ const updateHandler = async () => {
+ // Remove trailing slashes
+ config.OPENAI_API_BASE_URLS = config.OPENAI_API_BASE_URLS.map((url) => url.replace(/\/$/, ''));
+
+ // Check if API KEYS length is same than API URLS length
+ if (config.OPENAI_API_KEYS.length !== config.OPENAI_API_BASE_URLS.length) {
+ // if there are more keys than urls, remove the extra keys
+ if (config.OPENAI_API_KEYS.length > config.OPENAI_API_BASE_URLS.length) {
+ config.OPENAI_API_KEYS = config.OPENAI_API_KEYS.slice(
+ 0,
+ config.OPENAI_API_BASE_URLS.length
+ );
+ }
+
+ // if there are more urls than keys, add empty keys
+ if (config.OPENAI_API_KEYS.length < config.OPENAI_API_BASE_URLS.length) {
+ const diff = config.OPENAI_API_BASE_URLS.length - config.OPENAI_API_KEYS.length;
+ for (let i = 0; i < diff; i++) {
+ config.OPENAI_API_KEYS.push('');
+ }
+ }
+ }
+
+ await saveSettings({
+ directConnections: config
+ });
+ };
+
+ const submitHandler = async () => {
+ await updateHandler();
+
+ await saveSettings({
+ directConnections: config
+ });
+ };
+
+ onMount(async () => {
+ config = $settings?.directConnections ?? {
+ OPENAI_API_BASE_URLS: [],
+ OPENAI_API_KEYS: [],
+ OPENAI_API_CONFIGS: {}
+ };
+ });