|
@@ -25,7 +25,22 @@
|
|
</head>
|
|
</head>
|
|
<body>
|
|
<body>
|
|
<main x-data="state" x-init="console.log(endpoint)">
|
|
<main x-data="state" x-init="console.log(endpoint)">
|
|
- <!-- Error Toast -->
|
|
|
|
|
|
+ <div class="sidebar">
|
|
|
|
+ <h2 class="megrim-regular" style="margin-bottom: 20px;">Models</h2>
|
|
|
|
+ <template x-for="(model, key) in models" :key="key">
|
|
|
|
+ <div class="model-option"
|
|
|
|
+ :class="{ 'selected': cstate.selectedModel === key }"
|
|
|
|
+ @click="cstate.selectedModel = key">
|
|
|
|
+ <div class="model-name" x-text="model.name"></div>
|
|
|
|
+ <div class="model-progress">
|
|
|
|
+ <template x-if="model.download_percentage != null">
|
|
|
|
+ <span x-text="model.downloaded ? 'Downloaded' : `${Math.round(model.download_percentage)}% downloaded`"></span>
|
|
|
|
+ </template>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- Error Toast -->
|
|
<div x-show="errorMessage !== null" x-transition.opacity class="toast">
|
|
<div x-show="errorMessage !== null" x-transition.opacity class="toast">
|
|
<div class="toast-header">
|
|
<div class="toast-header">
|
|
<span class="toast-error-message" x-text="errorMessage?.basic || ''"></span>
|
|
<span class="toast-error-message" x-text="errorMessage?.basic || ''"></span>
|
|
@@ -44,10 +59,7 @@
|
|
<span x-text="errorMessage?.stack || ''"></span>
|
|
<span x-text="errorMessage?.stack || ''"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
-<div class="model-selector">
|
|
|
|
- <select @change="if (cstate) cstate.selectedModel = $event.target.value" x-model="cstate.selectedModel" class='model-select'>
|
|
|
|
- </select>
|
|
|
|
-</div>
|
|
|
|
|
|
+
|
|
<div @popstate.window="
|
|
<div @popstate.window="
|
|
if (home === 2) {
|
|
if (home === 2) {
|
|
home = -1;
|
|
home = -1;
|
|
@@ -79,10 +91,8 @@
|
|
<template x-for="_state in histories.toSorted((a, b) => b.time - a.time)">
|
|
<template x-for="_state in histories.toSorted((a, b) => b.time - a.time)">
|
|
<div @click="
|
|
<div @click="
|
|
cstate = _state;
|
|
cstate = _state;
|
|
- if (cstate) cstate.selectedModel = document.querySelector('.model-selector select').value
|
|
|
|
- // updateTotalTokens(cstate.messages);
|
|
|
|
- home = 1;
|
|
|
|
- // ensure that going back in history will go back to home
|
|
|
|
|
|
+ if (!cstate.selectedModel) cstate.selectedModel = 'llama-3.2-1b';
|
|
|
|
+ home = 2;
|
|
window.history.pushState({}, '', '/');
|
|
window.history.pushState({}, '', '/');
|
|
" @touchend="
|
|
" @touchend="
|
|
if (Math.abs($event.changedTouches[0].clientX - otx) > trigger) removeHistory(_state);
|
|
if (Math.abs($event.changedTouches[0].clientX - otx) > trigger) removeHistory(_state);
|
|
@@ -108,6 +118,19 @@
|
|
</template>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
+<button
|
|
|
|
+ @click="
|
|
|
|
+ home = 0;
|
|
|
|
+ cstate = { time: null, messages: [], selectedModel: cstate.selectedModel };
|
|
|
|
+ time_till_first = 0;
|
|
|
|
+ tokens_per_second = 0;
|
|
|
|
+ total_tokens = 0;
|
|
|
|
+ "
|
|
|
|
+ class="back-button"
|
|
|
|
+ x-show="home === 2">
|
|
|
|
+ <i class="fas fa-arrow-left"></i>
|
|
|
|
+ Back to Chats
|
|
|
|
+</button>
|
|
<div class="messages" x-init="
|
|
<div class="messages" x-init="
|
|
$watch('cstate', value => {
|
|
$watch('cstate', value => {
|
|
$el.innerHTML = '';
|
|
$el.innerHTML = '';
|