|
<script lang="ts"> |
|
import { page } from "$app/stores"; |
|
import { base } from "$app/paths"; |
|
import { goto } from "$app/navigation"; |
|
import { onMount } from "svelte"; |
|
import { PUBLIC_APP_NAME, PUBLIC_ORIGIN } from "$env/static/public"; |
|
import ChatWindow from "$lib/components/chat/ChatWindow.svelte"; |
|
import { findCurrentModel } from "$lib/utils/models"; |
|
import { useSettingsStore } from "$lib/stores/settings"; |
|
import { ERROR_MESSAGES, error } from "$lib/stores/errors"; |
|
import { pendingMessage } from "$lib/stores/pendingMessage"; |
|
|
|
export let data; |
|
|
|
let loading = false; |
|
let files: File[] = []; |
|
|
|
const settings = useSettingsStore(); |
|
const modelId = $page.params.model; |
|
|
|
async function createConversation(message: string) { |
|
try { |
|
loading = true; |
|
|
|
|
|
|
|
|
|
const validModels = data.models.map((model) => model.id); |
|
|
|
let model; |
|
if (validModels.includes($settings.activeModel)) { |
|
model = $settings.activeModel; |
|
} else { |
|
if (validModels.includes(data.assistant?.modelId)) { |
|
model = data.assistant?.modelId; |
|
} else { |
|
model = data.models[0].id; |
|
} |
|
} |
|
const res = await fetch(`${base}/conversation`, { |
|
method: "POST", |
|
headers: { |
|
"Content-Type": "application/json", |
|
}, |
|
body: JSON.stringify({ |
|
model, |
|
preprompt: $settings.customPrompts[$settings.activeModel], |
|
}), |
|
}); |
|
|
|
if (!res.ok) { |
|
error.set("Error while creating conversation, try again."); |
|
console.error("Error while creating conversation: " + (await res.text())); |
|
return; |
|
} |
|
|
|
const { conversationId } = await res.json(); |
|
|
|
|
|
pendingMessage.set({ |
|
content: message, |
|
files, |
|
}); |
|
|
|
|
|
await goto(`${base}/conversation/${conversationId}`, { invalidateAll: true }); |
|
} catch (err) { |
|
error.set(ERROR_MESSAGES.default); |
|
console.error(err); |
|
} finally { |
|
loading = false; |
|
} |
|
} |
|
|
|
onMount(async () => { |
|
settings.instantSet({ |
|
activeModel: modelId, |
|
}); |
|
}); |
|
</script> |
|
|
|
<svelte:head> |
|
<meta property="og:title" content={modelId + " - " + PUBLIC_APP_NAME} /> |
|
<meta property="og:type" content="link" /> |
|
<meta property="og:description" content={`Use ${modelId} with ${PUBLIC_APP_NAME}`} /> |
|
<meta |
|
property="og:image" |
|
content="{PUBLIC_ORIGIN || $page.url.origin}{base}/models/{modelId}/thumbnail.png" |
|
/> |
|
<meta property="og:url" content={$page.url.href} /> |
|
<meta name="twitter:card" content="summary_large_image" /> |
|
</svelte:head> |
|
|
|
<ChatWindow |
|
on:message={(ev) => createConversation(ev.detail)} |
|
{loading} |
|
currentModel={findCurrentModel([...data.models, ...data.oldModels], modelId)} |
|
models={data.models} |
|
bind:files |
|
/> |
|
|