Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
6fb03671
Commit
6fb03671
authored
Jan 04, 2024
by
Timothy J. Baek
Browse files
fix: openai multi-user issue
parent
a96795d7
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
288 additions
and
296 deletions
+288
-296
src/routes/(app)/+page.svelte
src/routes/(app)/+page.svelte
+144
-148
src/routes/(app)/c/[id]/+page.svelte
src/routes/(app)/c/[id]/+page.svelte
+144
-148
No files found.
src/routes/(app)/+page.svelte
View file @
6fb03671
...
@@ -322,175 +322,171 @@
...
@@ -322,175 +322,171 @@
};
};
const sendPromptOpenAI = async (model, userPrompt, parentId, _chatId) => {
const sendPromptOpenAI = async (model, userPrompt, parentId, _chatId) => {
if ($settings.OPENAI_API_KEY) {
let responseMessageId = uuidv4();
if (models) {
let responseMessageId = uuidv4();
let responseMessage = {
parentId: parentId,
id: responseMessageId,
childrenIds: [],
role: 'assistant',
content: '',
model: model
};
history.messages[responseMessageId] = responseMessage;
history.currentId = responseMessageId;
if (parentId !== null) {
history.messages[parentId].childrenIds = [
...history.messages[parentId].childrenIds,
responseMessageId
];
}
window.scrollTo({ top: document.body.scrollHeight });
let responseMessage = {
parentId: parentId,
const res = await generateOpenAIChatCompletion(localStorage.token, {
id: responseMessageId,
model: model,
childrenIds: [],
stream: true,
role: 'assistant',
messages: [
content: '',
$settings.system
model: model
? {
};
role: 'system',
content: $settings.system
}
: undefined,
...messages
]
.filter((message) => message)
.map((message) => ({
role: message.role,
...(message.files
? {
content: [
{
type: 'text',
text: message.content
},
...message.files
.filter((file) => file.type === 'image')
.map((file) => ({
type: 'image_url',
image_url: {
url: file.url
}
}))
]
}
: { content: message.content })
})),
seed: $settings?.options?.seed ?? undefined,
stop: $settings?.options?.stop ?? undefined,
temperature: $settings?.options?.temperature ?? undefined,
top_p: $settings?.options?.top_p ?? undefined,
num_ctx: $settings?.options?.num_ctx ?? undefined,
frequency_penalty: $settings?.options?.repeat_penalty ?? undefined,
max_tokens: $settings?.options?.num_predict ?? undefined
});
if (res && res.ok) {
history.messages[responseMessageId] = responseMessage;
const reader = res.body
history.currentId = responseMessageId;
.pipeThrough(new TextDecoderStream())
if (parentId !== null) {
.pipeThrough(splitStream('\n'))
history.messages[parentId].childrenIds = [
.getReader();
...history.messages[parentId].childrenIds,
responseMessageId
while (true) {
];
const { value, done } = await reader.read();
}
if (done || stopResponseFlag || _chatId !== $chatId) {
responseMessage.done = true;
messages = messages;
break;
}
try {
window.scrollTo({ top: document.body.scrollHeight });
let lines = value.split('\n');
for (const line of lines) {
if (line !== '') {
console.log(line);
if (line === 'data: [DONE]') {
responseMessage.done = true;
messages = messages;
} else {
let data = JSON.parse(line.replace(/^data: /, ''));
console.log(data);
if (responseMessage.content == '' && data.choices[0].delta.content == '\n') {
continue;
} else {
responseMessage.content += data.choices[0].delta.content ?? '';
messages = messages;
}
}
}
}
} catch (error) {
console.log(error);
}
if ($settings.notificationEnabled && !document.hasFocus()) {
const res = await generateOpenAIChatCompletion(localStorage.token, {
const notification = new Notification(`OpenAI ${model}`, {
model: model,
body: responseMessage.content,
stream: true,
icon: '/favicon.png'
messages: [
});
$settings.system
}
? {
role: 'system',
content: $settings.system
}
: undefined,
...messages
]
.filter((message) => message)
.map((message) => ({
role: message.role,
...(message.files
? {
content: [
{
type: 'text',
text: message.content
},
...message.files
.filter((file) => file.type === 'image')
.map((file) => ({
type: 'image_url',
image_url: {
url: file.url
}
}))
]
}
: { content: message.content })
})),
seed: $settings?.options?.seed ?? undefined,
stop: $settings?.options?.stop ?? undefined,
temperature: $settings?.options?.temperature ?? undefined,
top_p: $settings?.options?.top_p ?? undefined,
num_ctx: $settings?.options?.num_ctx ?? undefined,
frequency_penalty: $settings?.options?.repeat_penalty ?? undefined,
max_tokens: $settings?.options?.num_predict ?? undefined
});
if ($settings.responseAutoCopy) {
if (res && res.ok) {
copyToClipboard(responseMessage.content);
const reader = res.body
}
.pipeThrough(new TextDecoderStream())
.pipeThrough(splitStream('\n'))
.getReader();
if (autoScroll) {
while (true) {
window.scrollTo({ top: document.body.scrollHeight });
const { value, done } = await reader.read();
}
if (done || stopResponseFlag || _chatId !== $chatId) {
}
responseMessage.done = true;
messages = messages;
break;
}
if ($chatId == _chatId) {
try {
chat = await updateChatById(localStorage.token, _chatId, {
let lines = value.split('\n');
messages: messages,
history: history
for (const line of lines) {
});
if (line !== '') {
await chats.set(await getChatList(localStorage.token));
console.log(line);
}
if (line === 'data: [DONE]') {
} else {
responseMessage.done = true;
if (res !== null) {
messages = messages;
const error = await res.json();
console.log(error);
if ('detail' in error) {
toast.error(error.detail);
responseMessage.content = error.detail;
} else {
if ('message' in error.error) {
toast.error(error.error.message);
responseMessage.content = error.error.message;
} else {
} else {
toast.error(error.error);
let data = JSON.parse(line.replace(/^data: /, ''));
responseMessage.content = error.error;
console.log(data);
if (responseMessage.content == '' && data.choices[0].delta.content == '\n') {
continue;
} else {
responseMessage.content += data.choices[0].delta.content ?? '';
messages = messages;
}
}
}
}
}
} else {
toast.error(`Uh-oh! There was an issue connecting to ${model}.`);
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
}
}
} catch (error) {
console.log(error);
}
responseMessage.error = true;
if ($settings.notificationEnabled && !document.hasFocus()) {
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
const notification = new Notification(`OpenAI ${model}`, {
responseMessage.done = true;
body: responseMessage.content,
messages = messages;
icon: '/favicon.png'
});
}
}
stopResponseFlag = false;
if ($settings.responseAutoCopy) {
await tick();
copyToClipboard(responseMessage.content);
}
if (autoScroll) {
if (autoScroll) {
window.scrollTo({ top: document.body.scrollHeight });
window.scrollTo({ top: document.body.scrollHeight });
}
}
}
if (messages.length == 2) {
if ($chatId == _chatId) {
window.history.replaceState(history.state, '', `/c/${_chatId}`);
chat = await updateChatById(localStorage.token, _chatId, {
await setChatTitle(_chatId, userPrompt);
messages: messages,
history: history
});
await chats.set(await getChatList(localStorage.token));
}
} else {
if (res !== null) {
const error = await res.json();
console.log(error);
if ('detail' in error) {
toast.error(error.detail);
responseMessage.content = error.detail;
} else {
if ('message' in error.error) {
toast.error(error.error.message);
responseMessage.content = error.error.message;
} else {
toast.error(error.error);
responseMessage.content = error.error;
}
}
}
} else {
toast.error(`Uh-oh! There was an issue connecting to ${model}.`);
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
}
}
responseMessage.error = true;
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
responseMessage.done = true;
messages = messages;
}
stopResponseFlag = false;
await tick();
if (autoScroll) {
window.scrollTo({ top: document.body.scrollHeight });
}
if (messages.length == 2) {
window.history.replaceState(history.state, '', `/c/${_chatId}`);
await setChatTitle(_chatId, userPrompt);
}
}
};
};
...
...
src/routes/(app)/c/[id]/+page.svelte
View file @
6fb03671
...
@@ -340,175 +340,171 @@
...
@@ -340,175 +340,171 @@
};
};
const sendPromptOpenAI = async (model, userPrompt, parentId, _chatId) => {
const sendPromptOpenAI = async (model, userPrompt, parentId, _chatId) => {
if ($settings.OPENAI_API_KEY) {
let responseMessageId = uuidv4();
if (models) {
let responseMessageId = uuidv4();
let responseMessage = {
parentId: parentId,
id: responseMessageId,
childrenIds: [],
role: 'assistant',
content: '',
model: model
};
history.messages[responseMessageId] = responseMessage;
history.currentId = responseMessageId;
if (parentId !== null) {
history.messages[parentId].childrenIds = [
...history.messages[parentId].childrenIds,
responseMessageId
];
}
window.scrollTo({ top: document.body.scrollHeight });
let responseMessage = {
parentId: parentId,
const res = await generateOpenAIChatCompletion(localStorage.token, {
id: responseMessageId,
model: model,
childrenIds: [],
stream: true,
role: 'assistant',
messages: [
content: '',
$settings.system
model: model
? {
};
role: 'system',
content: $settings.system
}
: undefined,
...messages
]
.filter((message) => message)
.map((message) => ({
role: message.role,
...(message.files
? {
content: [
{
type: 'text',
text: message.content
},
...message.files
.filter((file) => file.type === 'image')
.map((file) => ({
type: 'image_url',
image_url: {
url: file.url
}
}))
]
}
: { content: message.content })
})),
seed: $settings?.options?.seed ?? undefined,
stop: $settings?.options?.stop ?? undefined,
temperature: $settings?.options?.temperature ?? undefined,
top_p: $settings?.options?.top_p ?? undefined,
num_ctx: $settings?.options?.num_ctx ?? undefined,
frequency_penalty: $settings?.options?.repeat_penalty ?? undefined,
max_tokens: $settings?.options?.num_predict ?? undefined
});
if (res && res.ok) {
history.messages[responseMessageId] = responseMessage;
const reader = res.body
history.currentId = responseMessageId;
.pipeThrough(new TextDecoderStream())
if (parentId !== null) {
.pipeThrough(splitStream('\n'))
history.messages[parentId].childrenIds = [
.getReader();
...history.messages[parentId].childrenIds,
responseMessageId
while (true) {
];
const { value, done } = await reader.read();
}
if (done || stopResponseFlag || _chatId !== $chatId) {
responseMessage.done = true;
messages = messages;
break;
}
try {
window.scrollTo({ top: document.body.scrollHeight });
let lines = value.split('\n');
for (const line of lines) {
if (line !== '') {
console.log(line);
if (line === 'data: [DONE]') {
responseMessage.done = true;
messages = messages;
} else {
let data = JSON.parse(line.replace(/^data: /, ''));
console.log(data);
if (responseMessage.content == '' && data.choices[0].delta.content == '\n') {
continue;
} else {
responseMessage.content += data.choices[0].delta.content ?? '';
messages = messages;
}
}
}
}
} catch (error) {
console.log(error);
}
if ($settings.notificationEnabled && !document.hasFocus()) {
const res = await generateOpenAIChatCompletion(localStorage.token, {
const notification = new Notification(`OpenAI ${model}`, {
model: model,
body: responseMessage.content,
stream: true,
icon: '/favicon.png'
messages: [
});
$settings.system
}
? {
role: 'system',
content: $settings.system
}
: undefined,
...messages
]
.filter((message) => message)
.map((message) => ({
role: message.role,
...(message.files
? {
content: [
{
type: 'text',
text: message.content
},
...message.files
.filter((file) => file.type === 'image')
.map((file) => ({
type: 'image_url',
image_url: {
url: file.url
}
}))
]
}
: { content: message.content })
})),
seed: $settings?.options?.seed ?? undefined,
stop: $settings?.options?.stop ?? undefined,
temperature: $settings?.options?.temperature ?? undefined,
top_p: $settings?.options?.top_p ?? undefined,
num_ctx: $settings?.options?.num_ctx ?? undefined,
frequency_penalty: $settings?.options?.repeat_penalty ?? undefined,
max_tokens: $settings?.options?.num_predict ?? undefined
});
if ($settings.responseAutoCopy) {
if (res && res.ok) {
copyToClipboard(responseMessage.content);
const reader = res.body
}
.pipeThrough(new TextDecoderStream())
.pipeThrough(splitStream('\n'))
.getReader();
if (autoScroll) {
while (true) {
window.scrollTo({ top: document.body.scrollHeight });
const { value, done } = await reader.read();
}
if (done || stopResponseFlag || _chatId !== $chatId) {
}
responseMessage.done = true;
messages = messages;
break;
}
if ($chatId == _chatId) {
try {
chat = await updateChatById(localStorage.token, _chatId, {
let lines = value.split('\n');
messages: messages,
history: history
for (const line of lines) {
});
if (line !== '') {
await chats.set(await getChatList(localStorage.token));
console.log(line);
}
if (line === 'data: [DONE]') {
} else {
responseMessage.done = true;
if (res !== null) {
messages = messages;
const error = await res.json();
console.log(error);
if ('detail' in error) {
toast.error(error.detail);
responseMessage.content = error.detail;
} else {
if ('message' in error.error) {
toast.error(error.error.message);
responseMessage.content = error.error.message;
} else {
} else {
toast.error(error.error);
let data = JSON.parse(line.replace(/^data: /, ''));
responseMessage.content = error.error;
console.log(data);
if (responseMessage.content == '' && data.choices[0].delta.content == '\n') {
continue;
} else {
responseMessage.content += data.choices[0].delta.content ?? '';
messages = messages;
}
}
}
}
}
} else {
toast.error(`Uh-oh! There was an issue connecting to ${model}.`);
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
}
}
} catch (error) {
console.log(error);
}
responseMessage.error = true;
if ($settings.notificationEnabled && !document.hasFocus()) {
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
const notification = new Notification(`OpenAI ${model}`, {
responseMessage.done = true;
body: responseMessage.content,
messages = messages;
icon: '/favicon.png'
});
}
}
stopResponseFlag = false;
if ($settings.responseAutoCopy) {
await tick();
copyToClipboard(responseMessage.content);
}
if (autoScroll) {
if (autoScroll) {
window.scrollTo({ top: document.body.scrollHeight });
window.scrollTo({ top: document.body.scrollHeight });
}
}
}
if (messages.length == 2) {
if ($chatId == _chatId) {
window.history.replaceState(history.state, '', `/c/${_chatId}`);
chat = await updateChatById(localStorage.token, _chatId, {
await setChatTitle(_chatId, userPrompt);
messages: messages,
history: history
});
await chats.set(await getChatList(localStorage.token));
}
} else {
if (res !== null) {
const error = await res.json();
console.log(error);
if ('detail' in error) {
toast.error(error.detail);
responseMessage.content = error.detail;
} else {
if ('message' in error.error) {
toast.error(error.error.message);
responseMessage.content = error.error.message;
} else {
toast.error(error.error);
responseMessage.content = error.error;
}
}
}
} else {
toast.error(`Uh-oh! There was an issue connecting to ${model}.`);
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
}
}
responseMessage.error = true;
responseMessage.content = `Uh-oh! There was an issue connecting to ${model}.`;
responseMessage.done = true;
messages = messages;
}
stopResponseFlag = false;
await tick();
if (autoScroll) {
window.scrollTo({ top: document.body.scrollHeight });
}
if (messages.length == 2) {
window.history.replaceState(history.state, '', `/c/${_chatId}`);
await setChatTitle(_chatId, userPrompt);
}
}
};
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment