203 lines
8.7 KiB
Svelte
203 lines
8.7 KiB
Svelte
<script lang="ts">
|
|
import { ArrowLeft, PlusIcon } from "lucide-svelte";
|
|
import { language } from "src/lang";
|
|
import PromptDataItem from "src/lib/UI/PromptDataItem.svelte";
|
|
import { tokenizePreset, type PromptItem } from "src/ts/process/prompt";
|
|
import { templateCheck } from "src/ts/process/templates/templateCheck";
|
|
|
|
import { DBState } from 'src/ts/stores.svelte';
|
|
import Check from "src/lib/UI/GUI/CheckInput.svelte";
|
|
import TextInput from "src/lib/UI/GUI/TextInput.svelte";
|
|
import NumberInput from "src/lib/UI/GUI/NumberInput.svelte";
|
|
import Help from "src/lib/Others/Help.svelte";
|
|
import TextAreaInput from "src/lib/UI/GUI/TextAreaInput.svelte";
|
|
import SelectInput from "src/lib/UI/GUI/SelectInput.svelte";
|
|
import OptionInput from "src/lib/UI/GUI/OptionInput.svelte";
|
|
import Arcodion from "src/lib/UI/Arcodion.svelte";
|
|
import ModelList from "src/lib/UI/ModelList.svelte";
|
|
|
|
let sorted = 0
|
|
let opened = 0
|
|
let warns: string[] = $state([])
|
|
let tokens = $state(0)
|
|
let extokens = $state(0)
|
|
executeTokenize(DBState.db.promptTemplate)
|
|
interface Props {
|
|
onGoBack?: () => void;
|
|
mode?: 'independent'|'inline';
|
|
subMenu?: number;
|
|
}
|
|
|
|
let { onGoBack = () => {}, mode = 'independent', subMenu = $bindable(0) }: Props = $props();
|
|
|
|
async function executeTokenize(prest: PromptItem[]){
|
|
tokens = await tokenizePreset(prest, true)
|
|
extokens = await tokenizePreset(prest, false)
|
|
}
|
|
|
|
$effect.pre(() => {
|
|
warns = templateCheck(DBState.db)
|
|
});
|
|
$effect.pre(() => {
|
|
executeTokenize(DBState.db.promptTemplate)
|
|
});
|
|
</script>
|
|
{#if mode === 'independent'}
|
|
<h2 class="mb-2 text-2xl font-bold mt-2 items-center flex">
|
|
<button class="mr-2 text-textcolor2 hover:text-textcolor" onclick={onGoBack}>
|
|
<ArrowLeft />
|
|
</button>
|
|
{language.promptTemplate}
|
|
</h2>
|
|
|
|
<div class="flex w-full rounded-md border border-selected">
|
|
<button onclick={() => {
|
|
subMenu = 0
|
|
}} class="p-2 flex-1" class:bg-selected={subMenu === 0}>
|
|
<span>{language.template}</span>
|
|
</button>
|
|
<button onclick={() => {
|
|
subMenu = 1
|
|
}} class="p-2 flex-1" class:bg-selected={subMenu === 1}>
|
|
<span>{language.settings}</span>
|
|
</button>
|
|
</div>
|
|
{/if}
|
|
{#if warns.length > 0 && subMenu === 0}
|
|
<div class="text-red-500 flex flex-col items-start p-2 rounded-md border-red-500 border mt-4">
|
|
<h2 class="text-xl font-bold">Warning</h2>
|
|
<div class="border-b border-b-red-500 mt-1 mb-2 w-full"></div>
|
|
{#each warns as warn}
|
|
<span class="ml-4">{warn}</span>
|
|
{/each}
|
|
</div>
|
|
{/if}
|
|
|
|
{#if subMenu === 0}
|
|
<div class="contain w-full max-w-full mt-4 flex flex-col p-3 rounded-md">
|
|
{#if DBState.db.promptTemplate.length === 0}
|
|
<div class="text-textcolor2">No Format</div>
|
|
{/if}
|
|
{#key sorted}
|
|
{#each DBState.db.promptTemplate as prompt, i}
|
|
<PromptDataItem bind:promptItem={DBState.db.promptTemplate[i]} onRemove={() => {
|
|
let templates = DBState.db.promptTemplate
|
|
templates.splice(i, 1)
|
|
DBState.db.promptTemplate = templates
|
|
}} moveDown={() => {
|
|
if(i === DBState.db.promptTemplate.length - 1){
|
|
return
|
|
}
|
|
let templates = DBState.db.promptTemplate
|
|
let temp = templates[i]
|
|
templates[i] = templates[i + 1]
|
|
templates[i + 1] = temp
|
|
DBState.db.promptTemplate = templates
|
|
}} moveUp={() => {
|
|
if(i === 0){
|
|
return
|
|
}
|
|
let templates = DBState.db.promptTemplate
|
|
let temp = templates[i]
|
|
templates[i] = templates[i - 1]
|
|
templates[i - 1] = temp
|
|
DBState.db.promptTemplate = templates
|
|
}} />
|
|
{/each}
|
|
{/key}
|
|
</div>
|
|
|
|
<button class="font-medium cursor-pointer hover:text-green-500" onclick={() => {
|
|
let value = DBState.db.promptTemplate ?? []
|
|
value.push({
|
|
type: "plain",
|
|
text: "",
|
|
role: "system",
|
|
type2: 'normal'
|
|
})
|
|
DBState.db.promptTemplate = value
|
|
}}><PlusIcon /></button>
|
|
|
|
<span class="text-textcolor2 text-sm mt-2">{tokens} {language.fixedTokens}</span>
|
|
<span class="text-textcolor2 mb-6 text-sm mt-2">{extokens} {language.exactTokens}</span>
|
|
{:else}
|
|
<span class="text-textcolor mt-4">{language.postEndInnerFormat}</span>
|
|
<TextInput bind:value={DBState.db.promptSettings.postEndInnerFormat}/>
|
|
|
|
<Check bind:check={DBState.db.promptSettings.sendChatAsSystem} name={language.sendChatAsSystem} className="mt-4"/>
|
|
<Check bind:check={DBState.db.promptSettings.sendName} name={language.formatGroupInSingle} className="mt-4"/>
|
|
<Check bind:check={DBState.db.promptSettings.utilOverride} name={language.utilOverride} className="mt-4"/>
|
|
<Check bind:check={DBState.db.jsonSchemaEnabled} name={language.enableJsonSchema} className="mt-4"/>
|
|
<Check bind:check={DBState.db.outputImageModal} name={language.outputImageModal} className="mt-4"/>
|
|
|
|
<Check bind:check={DBState.db.strictJsonSchema} name={language.strictJsonSchema} className="mt-4"/>
|
|
|
|
{#if DBState.db.showUnrecommended}
|
|
<Check bind:check={DBState.db.promptSettings.customChainOfThought} name={language.customChainOfThought} className="mt-4">
|
|
<Help unrecommended key='customChainOfThought' />
|
|
</Check>
|
|
{/if}
|
|
<span class="text-textcolor mt-4">{language.maxThoughtTagDepth}</span>
|
|
<NumberInput bind:value={DBState.db.promptSettings.maxThoughtTagDepth}/>
|
|
<span class="text-textcolor mt-4">{language.groupOtherBotRole} <Help key="groupOtherBotRole"/></span>
|
|
<SelectInput bind:value={DBState.db.groupOtherBotRole}>
|
|
<OptionInput value="user">User</OptionInput>
|
|
<OptionInput value="system">System</OptionInput>
|
|
<OptionInput value="assistant">assistant</OptionInput>
|
|
</SelectInput>
|
|
<span class="text-textcolor mt-4">{language.customPromptTemplateToggle} <Help key='customPromptTemplateToggle' /></span>
|
|
<TextAreaInput bind:value={DBState.db.customPromptTemplateToggle}/>
|
|
<span class="text-textcolor mt-4">{language.defaultVariables} <Help key='defaultVariables' /></span>
|
|
<TextAreaInput bind:value={DBState.db.templateDefaultVariables}/>
|
|
<span class="text-textcolor mt-4">{language.predictedOutput}</span>
|
|
<TextAreaInput bind:value={DBState.db.OAIPrediction}/>
|
|
<span class="text-textcolor mt-4">{language.groupInnerFormat} <Help key='groupInnerFormat' /></span>
|
|
<TextAreaInput placeholder={`<{{char}}\'s Message>\n{{slot}}\n</{{char}}\'s Message>`} bind:value={DBState.db.groupTemplate}/>
|
|
<span class="text-textcolor mt-4">{language.systemContentReplacement} <Help key="systemContentReplacement"/></span>
|
|
<TextAreaInput bind:value={DBState.db.systemContentReplacement}/>
|
|
<span class="text-textcolor mt-4">{language.systemRoleReplacement} <Help key="systemRoleReplacement"/></span>
|
|
<SelectInput bind:value={DBState.db.systemRoleReplacement}>
|
|
<OptionInput value="user">User</OptionInput>
|
|
<OptionInput value="assistant">assistant</OptionInput>
|
|
</SelectInput>
|
|
{#if DBState.db.jsonSchemaEnabled}
|
|
<span class="text-textcolor mt-4">{language.jsonSchema} <Help key='jsonSchema' /></span>
|
|
<TextAreaInput bind:value={DBState.db.jsonSchema}/>
|
|
<span class="text-textcolor mt-4">{language.extractJson} <Help key='extractJson' /></span>
|
|
<TextInput bind:value={DBState.db.extractJson}/>
|
|
{/if}
|
|
|
|
|
|
<div class="flex items-center mt-4">
|
|
<Check bind:check={DBState.db.seperateModelsForAxModels} name={language.seperateModelsForAxModels}>
|
|
</Check>
|
|
</div>
|
|
|
|
{#if DBState.db.seperateModelsForAxModels}
|
|
<Arcodion name={language.axModelsDef} styled>
|
|
<span class="text-textcolor mt-4">
|
|
Memory
|
|
</span>
|
|
<ModelList bind:value={DBState.db.seperateModels.memory} blankable />
|
|
|
|
<span class="text-textcolor mt-4">
|
|
Translations
|
|
</span>
|
|
<ModelList bind:value={DBState.db.seperateModels.translate} blankable />
|
|
|
|
<span class="text-textcolor mt-4">
|
|
Emotion
|
|
</span>
|
|
|
|
<ModelList bind:value={DBState.db.seperateModels.emotion} blankable />
|
|
|
|
<span class="text-textcolor mt-4">
|
|
OtherAx
|
|
</span>
|
|
|
|
<ModelList bind:value={DBState.db.seperateModels.otherAx} blankable />
|
|
|
|
</Arcodion>
|
|
{/if}
|
|
|
|
{/if} |