|
<script lang="ts"> |
|
import { goto } from "$app/navigation"; |
|
import { base } from "$app/paths"; |
|
import { PUBLIC_APP_NAME } from "$env/static/public"; |
|
import ChatWindow from "$lib/components/chat/ChatWindow.svelte"; |
|
import { ERROR_MESSAGES, error } from "$lib/stores/errors"; |
|
import { pendingMessage } from "$lib/stores/pendingMessage"; |
|
import { findCurrentModel } from "$lib/utils/models"; |
|
import { params_writable } from "../routes/conversation/[id]/ParamsWritable"; |
|
import { |
|
curr_model_writable, |
|
curr_model_writable_string, |
|
is_logged_writable, |
|
showLoggedPopup_writable, |
|
api_key_writable, |
|
} from "./LayoutWritable"; |
|
|
|
let curr_model_id = 0; |
|
let curr_model; |
|
let api_key = ""; |
|
|
|
export let data; |
|
let loading = false; |
|
let isLogged = false; |
|
|
|
is_logged_writable.subscribe((val) => { |
|
isLogged = val; |
|
}); |
|
|
|
api_key_writable.subscribe((val) => { |
|
api_key = val; |
|
}); |
|
|
|
curr_model_writable.subscribe((val) => { |
|
curr_model_id = val; |
|
curr_model = findCurrentModel( |
|
[...data.models, ...data.oldModels], |
|
data.models[curr_model_id].name |
|
); |
|
console.log(curr_model); |
|
}); |
|
|
|
|
|
|
|
function dec2hex(dec) { |
|
return dec.toString(16).padStart(2, "0"); |
|
} |
|
|
|
|
|
function generateId(len) { |
|
var arr = new Uint8Array((len || 40) / 2); |
|
window.crypto.getRandomValues(arr); |
|
return Array.from(arr, dec2hex).join(""); |
|
} |
|
|
|
async function createConversation(message: string) { |
|
try { |
|
const is_local = curr_model.is_local ?? true; |
|
if (!is_local) { |
|
if (!isLogged) { |
|
showLoggedPopup_writable.set(true); |
|
return; |
|
} |
|
} |
|
|
|
loading = true; |
|
|
|
const conversationId = generateId(16); |
|
|
|
|
|
pendingMessage.set(message); |
|
|
|
console.log(conversationId); |
|
params_writable.set(conversationId); |
|
|
|
await goto(`${base}/conversation/${conversationId}`, { invalidateAll: true }); |
|
} catch (err) { |
|
error.set(ERROR_MESSAGES.default); |
|
console.error(err); |
|
} finally { |
|
loading = false; |
|
} |
|
} |
|
</script> |
|
|
|
<svelte:head> |
|
<title>{PUBLIC_APP_NAME}</title> |
|
</svelte:head> |
|
|
|
<ChatWindow |
|
on:message={(ev) => createConversation(ev.detail)} |
|
{loading} |
|
currentModel={findCurrentModel( |
|
[...data.models, ...data.oldModels], |
|
data.models[curr_model_id].name |
|
)} |
|
models={data.models} |
|
settings={data.settings} |
|
/> |
|
|