mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
feat: direct connections integration
This commit is contained in:
@@ -838,6 +838,7 @@
|
||||
timestamp: m.timestamp,
|
||||
...(m.sources ? { sources: m.sources } : {})
|
||||
})),
|
||||
model_item: $models.find((m) => m.id === modelId),
|
||||
chat_id: chatId,
|
||||
session_id: $socket?.id,
|
||||
id: responseMessageId
|
||||
@@ -896,6 +897,7 @@
|
||||
...(m.sources ? { sources: m.sources } : {})
|
||||
})),
|
||||
...(event ? { event: event } : {}),
|
||||
model_item: $models.find((m) => m.id === modelId),
|
||||
chat_id: chatId,
|
||||
session_id: $socket?.id,
|
||||
id: responseMessageId
|
||||
@@ -1574,6 +1576,7 @@
|
||||
$settings?.userLocation ? await getAndUpdateUserLocation(localStorage.token) : undefined
|
||||
)
|
||||
},
|
||||
model_item: $models.find((m) => m.id === model.id),
|
||||
|
||||
session_id: $socket?.id,
|
||||
chat_id: $chatId,
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
import { getAllTags, getChatList } from '$lib/apis/chats';
|
||||
import NotificationToast from '$lib/components/NotificationToast.svelte';
|
||||
import AppSidebar from '$lib/components/app/AppSidebar.svelte';
|
||||
import { chatCompletion } from '$lib/apis/openai';
|
||||
|
||||
setContext('i18n', i18n);
|
||||
|
||||
@@ -251,10 +252,100 @@
|
||||
} else if (type === 'chat:tags') {
|
||||
tags.set(await getAllTags(localStorage.token));
|
||||
}
|
||||
} else {
|
||||
} else if (data?.session_id === $socket.id) {
|
||||
if (type === 'execute:python') {
|
||||
console.log('execute:python', data);
|
||||
executePythonAsWorker(data.id, data.code, cb);
|
||||
} else if (type === 'request:chat:completion') {
|
||||
console.log(data, $socket.id);
|
||||
const { session_id, channel, form_data, model } = data;
|
||||
|
||||
try {
|
||||
const directConnections = $settings?.directConnections ?? {};
|
||||
|
||||
if (directConnections) {
|
||||
const urlIdx = model?.urlIdx;
|
||||
|
||||
console.log(model, directConnections);
|
||||
|
||||
const OPENAI_API_URL = directConnections.OPENAI_API_BASE_URLS[urlIdx];
|
||||
const OPENAI_API_KEY = directConnections.OPENAI_API_KEYS[urlIdx];
|
||||
const API_CONFIG = directConnections.OPENAI_API_CONFIGS[urlIdx];
|
||||
|
||||
try {
|
||||
const [res, controller] = await chatCompletion(
|
||||
OPENAI_API_KEY,
|
||||
form_data,
|
||||
OPENAI_API_URL
|
||||
);
|
||||
|
||||
if (res && res.ok) {
|
||||
if (form_data?.stream ?? false) {
|
||||
// res will either be SSE or JSON
|
||||
const reader = res.body.getReader();
|
||||
const decoder = new TextDecoder();
|
||||
|
||||
const processStream = async () => {
|
||||
while (true) {
|
||||
// Read data chunks from the response stream
|
||||
const { done, value } = await reader.read();
|
||||
if (done) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Decode the received chunk
|
||||
const chunk = decoder.decode(value, { stream: true });
|
||||
|
||||
// Process lines within the chunk
|
||||
const lines = chunk.split('\n').filter((line) => line.trim() !== '');
|
||||
|
||||
for (const line of lines) {
|
||||
$socket?.emit(channel, line);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Process the stream in the background
|
||||
await processStream();
|
||||
} else {
|
||||
const data = await res.json();
|
||||
cb(data);
|
||||
}
|
||||
} else {
|
||||
throw new Error('An error occurred while fetching the completion');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('chatCompletion', error);
|
||||
|
||||
if (form_data?.stream ?? false) {
|
||||
$socket.emit(channel, {
|
||||
error: error
|
||||
});
|
||||
} else {
|
||||
cb({
|
||||
error: error
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('chatCompletion', error);
|
||||
if (form_data?.stream ?? false) {
|
||||
$socket.emit(channel, {
|
||||
error: error
|
||||
});
|
||||
} else {
|
||||
cb({
|
||||
error: error
|
||||
});
|
||||
}
|
||||
} finally {
|
||||
$socket.emit(channel, {
|
||||
done: true
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log('chatEventHandler', event);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user