|
<script> |
|
import { createEventDispatcher, getContext } from 'svelte'; |
|
const dispatch = createEventDispatcher(); |
|
const i18n = getContext('i18n'); |
|
|
|
import XMark from '$lib/components/icons/XMark.svelte'; |
|
import AdvancedParams from '../Settings/Advanced/AdvancedParams.svelte'; |
|
import Valves from '$lib/components/common/Valves.svelte'; |
|
import FileItem from '$lib/components/common/FileItem.svelte'; |
|
|
|
export let models = []; |
|
|
|
export let chatFiles = []; |
|
export let valves = {}; |
|
export let params = {}; |
|
</script> |
|
|
|
<div class=" dark:text-white"> |
|
<div class=" flex justify-between dark:text-gray-100 mb-2"> |
|
<div class=" text-lg font-medium self-center font-primary">{$i18n.t('Chat Controls')}</div> |
|
<button |
|
class="self-center" |
|
on:click={() => { |
|
dispatch('close'); |
|
}} |
|
> |
|
<XMark className="size-4" /> |
|
</button> |
|
</div> |
|
|
|
<div class=" dark:text-gray-200 text-sm font-primary"> |
|
{#if chatFiles.length > 0} |
|
<div> |
|
<div class="mb-1.5 font-medium">{$i18n.t('Files')}</div> |
|
|
|
<div class="flex flex-col gap-1"> |
|
{#each chatFiles as file, fileIdx} |
|
<FileItem |
|
className="w-full" |
|
url={`${file?.url}`} |
|
name={file.name} |
|
type={file.type} |
|
dismissible={true} |
|
on:dismiss={() => { |
|
// Remove the file from the chatFiles array |
|
|
|
chatFiles.splice(fileIdx, 1); |
|
chatFiles = chatFiles; |
|
}} |
|
/> |
|
{/each} |
|
</div> |
|
</div> |
|
|
|
<hr class="my-2 border-gray-100 dark:border-gray-800" /> |
|
{/if} |
|
|
|
{#if models.length === 1 && models[0]?.pipe?.valves_spec} |
|
<div> |
|
<div class=" font-medium">{$i18n.t('Valves')}</div> |
|
|
|
<div> |
|
<Valves valvesSpec={models[0]?.pipe?.valves_spec} bind:valves /> |
|
</div> |
|
</div> |
|
|
|
<hr class="my-2 border-gray-100 dark:border-gray-800" /> |
|
{/if} |
|
|
|
<div> |
|
<div class="mb-1.5 font-medium">{$i18n.t('System Prompt')}</div> |
|
|
|
<div> |
|
<textarea |
|
bind:value={params.system} |
|
class="w-full rounded-lg px-4 py-3 text-sm dark:text-gray-300 dark:bg-gray-850 border border-gray-100 dark:border-gray-800 outline-none resize-none" |
|
rows="3" |
|
placeholder={$i18n.t('Enter system prompt')} |
|
/> |
|
</div> |
|
</div> |
|
|
|
<hr class="my-2 border-gray-100 dark:border-gray-800" /> |
|
|
|
<div> |
|
<div class="mb-1.5 font-medium">{$i18n.t('Advanced Params')}</div> |
|
|
|
<div> |
|
<AdvancedParams bind:params /> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|