|
@@ -51,17 +51,6 @@
|
|
|
messages = [];
|
|
|
}
|
|
|
|
|
|
- // onMount(async () => {
|
|
|
- // let chat = await loadChat();
|
|
|
-
|
|
|
- // await tick();
|
|
|
- // if (chat) {
|
|
|
- // loaded = true;
|
|
|
- // } else {
|
|
|
- // await goto('/');
|
|
|
- // }
|
|
|
- // });
|
|
|
-
|
|
|
$: if ($page.params.id) {
|
|
|
(async () => {
|
|
|
let chat = await loadChat();
|
|
@@ -133,7 +122,6 @@
|
|
|
const sendPromptOllama = async (model, userPrompt, parentId, _chatId) => {
|
|
|
console.log('sendPromptOllama');
|
|
|
let responseMessageId = uuidv4();
|
|
|
-
|
|
|
let responseMessage = {
|
|
|
parentId: parentId,
|
|
|
id: responseMessageId,
|
|
@@ -153,38 +141,8 @@
|
|
|
}
|
|
|
|
|
|
await tick();
|
|
|
-
|
|
|
window.scrollTo({ top: document.body.scrollHeight });
|
|
|
|
|
|
- // const res = await fetch(`${$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/generate`, {
|
|
|
- // method: 'POST',
|
|
|
- // headers: {
|
|
|
- // 'Content-Type': 'text/event-stream',
|
|
|
- // ...($settings.authHeader && { Authorization: $settings.authHeader }),
|
|
|
- // ...($user && { Authorization: `Bearer ${localStorage.token}` })
|
|
|
- // },
|
|
|
- // body: JSON.stringify({
|
|
|
- // model: model,
|
|
|
- // prompt: userPrompt,
|
|
|
- // system: $settings.system ?? undefined,
|
|
|
- // options: {
|
|
|
- // seed: $settings.seed ?? undefined,
|
|
|
- // temperature: $settings.temperature ?? undefined,
|
|
|
- // repeat_penalty: $settings.repeat_penalty ?? undefined,
|
|
|
- // top_k: $settings.top_k ?? undefined,
|
|
|
- // top_p: $settings.top_p ?? undefined,
|
|
|
- // num_ctx: $settings.num_ctx ?? undefined,
|
|
|
- // ...($settings.options ?? {})
|
|
|
- // },
|
|
|
- // format: $settings.requestFormat ?? undefined,
|
|
|
- // context:
|
|
|
- // history.messages[parentId] !== null &&
|
|
|
- // history.messages[parentId].parentId in history.messages
|
|
|
- // ? history.messages[history.messages[parentId].parentId]?.context ?? undefined
|
|
|
- // : undefined
|
|
|
- // })
|
|
|
- // });
|
|
|
-
|
|
|
const res = await fetch(`${$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/chat`, {
|
|
|
method: 'POST',
|
|
|
headers: {
|
|
@@ -204,7 +162,15 @@
|
|
|
...messages
|
|
|
]
|
|
|
.filter((message) => message)
|
|
|
- .map((message) => ({ role: message.role, content: message.content })),
|
|
|
+ .map((message) => ({
|
|
|
+ role: message.role,
|
|
|
+ content: message.content,
|
|
|
+ ...(message.files && {
|
|
|
+ images: message.files
|
|
|
+ .filter((file) => file.type === 'image')
|
|
|
+ .map((file) => file.url.slice(file.url.indexOf(',') + 1))
|
|
|
+ })
|
|
|
+ })),
|
|
|
options: {
|
|
|
seed: $settings.seed ?? undefined,
|
|
|
temperature: $settings.temperature ?? undefined,
|
|
@@ -377,7 +343,27 @@
|
|
|
...messages
|
|
|
]
|
|
|
.filter((message) => message)
|
|
|
- .map((message) => ({ role: message.role, content: message.content })),
|
|
|
+ .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 })
|
|
|
+ })),
|
|
|
temperature: $settings.temperature ?? undefined,
|
|
|
top_p: $settings.top_p ?? undefined,
|
|
|
num_ctx: $settings.num_ctx ?? undefined,
|
|
@@ -392,12 +378,9 @@
|
|
|
|
|
|
while (true) {
|
|
|
const { value, done } = await reader.read();
|
|
|
- if (done || stopResponseFlag) {
|
|
|
- if (stopResponseFlag) {
|
|
|
- responseMessage.done = true;
|
|
|
- messages = messages;
|
|
|
- }
|
|
|
-
|
|
|
+ if (done || stopResponseFlag || _chatId !== $chatId) {
|
|
|
+ responseMessage.done = true;
|
|
|
+ messages = messages;
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -610,6 +593,7 @@
|
|
|
bind:history
|
|
|
bind:messages
|
|
|
bind:autoScroll
|
|
|
+ bottomPadding={files.length > 0}
|
|
|
{sendPrompt}
|
|
|
{regenerateResponse}
|
|
|
/>
|
|
@@ -617,6 +601,7 @@
|
|
|
</div>
|
|
|
|
|
|
<MessageInput
|
|
|
+ bind:files
|
|
|
bind:prompt
|
|
|
bind:autoScroll
|
|
|
suggestionPrompts={selectedModelfile?.suggestionPrompts ?? [
|