[feat] added horde support, added spec2 requirements that didn't implemented

This commit is contained in:
kwaroran
2023-05-24 08:49:35 +09:00
parent 022f70f214
commit a999d6d780
9 changed files with 214 additions and 62 deletions

View File

@@ -6,6 +6,7 @@
import { customProviderStore, getCurrentPluginMax } from "src/ts/process/plugins";
import { isTauri } from "src/ts/globalApi";
import { tokenize } from "src/ts/tokenizer";
import ModelList from "src/lib/UI/ModelList.svelte";
import DropList from "src/lib/SideBars/DropList.svelte";
import { PlusIcon, TrashIcon } from "lucide-svelte";
let tokens = {
@@ -36,40 +37,10 @@
<h2 class="mb-2 text-2xl font-bold mt-2">{language.chatBot}</h2>
<span class="text-neutral-200 mt-4">{language.model} <Help key="model"/></span>
<select class="bg-transparent input-text mt-2 mb-2 text-gray-200 appearance-none text-sm" bind:value={$DataBase.aiModel}>
<optgroup class="bg-darkbg appearance-none" label="OpenAI">
<option value="gpt35" class="bg-darkbg appearance-none">OpenAI GPT-3.5</option>
<option value="gpt4" class="bg-darkbg appearance-none">OpenAI GPT-4</option>
</optgroup>
<optgroup class="bg-darkbg appearance-none" label="Other Providers">
<option value="palm2" class="bg-darkbg appearance-none">Google Palm2</option>
{#if $DataBase.aiModel === 'novelai' || isTauri}
<option value="novelai" class="bg-darkbg appearance-none">NovelAI Clio</option>
{/if}
<option value="textgen_webui" class="bg-darkbg appearance-none">Text Generation WebUI</option>
{#if $DataBase.plugins.length > 0}
<option value="custom" class="bg-darkbg appearance-none">Plugin</option>
{/if}
</optgroup>
</select>
<ModelList bind:value={$DataBase.aiModel}/>
<span class="text-neutral-200 mt-2">{language.submodel} <Help key="submodel"/></span>
<select class="bg-transparent input-text mt-2 mb-2 text-gray-200 appearance-none text-sm" bind:value={$DataBase.subModel}>
<optgroup class="bg-darkbg appearance-none" label="OpenAI">
<option value="gpt35" class="bg-darkbg appearance-none">OpenAI GPT-3.5</option>
<option value="gpt4" class="bg-darkbg appearance-none">OpenAI GPT-4</option>
</optgroup>
<optgroup class="bg-darkbg appearance-none" label="Other Providers">
<option value="palm2" class="bg-darkbg appearance-none">Google Palm2</option>
{#if $DataBase.aiModel === 'novelai' || isTauri}
<option value="novelai" class="bg-darkbg appearance-none">NovelAI Clio</option>
{/if}
<option value="textgen_webui" class="bg-darkbg appearance-none">Text Generation WebUI</option>
{#if $DataBase.plugins.length > 0}
<option value="custom" class="bg-darkbg appearance-none">Plugin</option>
{/if}
</optgroup>
</select>
<ModelList bind:value={$DataBase.subModel}/>
{#if $DataBase.aiModel === 'palm2' || $DataBase.subModel === 'palm2'}
<span class="text-neutral-200">Palm2 {language.apiKey}</span>
@@ -96,6 +67,12 @@
<span class="text-neutral-200">NovelAI Bearer Token</span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm mb-2" bind:value={$DataBase.novelai.token}>
{/if}
{#if $DataBase.aiModel.startsWith("horde") || $DataBase.subModel.startsWith("horde") }
<span class="text-neutral-200">Horde {language.apiKey}</span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm mb-2" bind:value={$DataBase.hordeConfig.apiKey}>
{/if}
{#if $DataBase.aiModel === 'textgen_webui' || $DataBase.subModel === 'textgen_webui'}
<span class="text-neutral-200">TextGen {language.providerURL} <Help key="oogaboogaURL"/></span>

View File

@@ -16,7 +16,7 @@
import RegexData from "./RegexData.svelte";
import { exportChar } from "src/ts/characterCards";
import { getElevenTTSVoices, getWebSpeechTTSVoices } from "src/ts/process/tts";
import { checkCharOrder } from "src/ts/globalApi";
import { checkCharOrder } from "src/ts/globalApi";
let subMenu = 0
let subberMenu = 0
@@ -181,10 +181,10 @@
<span class="text-neutral-200">{language.firstMessage} <Help key="charFirstMessage"/></span>
<textarea class="bg-transparent input-text mt-2 mb-2 text-gray-200 text-xs resize-none h-20 focus:bg-selected" autocomplete="off" bind:value={currentChar.data.firstMessage}></textarea>
<span class="text-gray-400 mb-6 text-sm">{tokens.firstMsg} {language.tokens}</span>
<span class="text-neutral-200">{language.authorNote} <Help key="charNote"/></span>
<textarea class="bg-transparent input-text mt-2 mb-2 text-gray-200 resize-none h-20 focus:bg-selected text-xs" autocomplete="off" bind:value={currentChar.data.postHistoryInstructions}></textarea>
<span class="text-gray-400 mb-6 text-sm">{tokens.charaNote} {language.tokens}</span>
<span class="text-neutral-200">{language.authorNote} <Help key="chatNote"/></span>
<textarea class="bg-transparent input-text mt-2 mb-2 text-gray-200 resize-none h-20 focus:bg-selected text-xs" autocomplete="off" bind:value={currentChar.data.chats[currentChar.data.chatPage].note}></textarea>
<span class="text-gray-400 mb-6 text-sm">{tokens.localNote} {language.tokens}</span>
{:else}
<input class="text-neutral-200 mt-2 mb-4 p-2 bg-transparent input-text text-xl focus:bg-selected" placeholder="Group Name" bind:value={currentChar.data.name}>
<span class="text-neutral-200">{language.character}</span>
@@ -213,11 +213,6 @@
</button>
</div>
<span class="text-neutral-200">{language.chatNotes} <Help key="charNote"/></span>
<textarea class="bg-transparent input-text mt-2 mb-2 text-gray-200 resize-none h-20 focus:bg-selected text-xs" autocomplete="off" bind:value={currentChar.data.chats[currentChar.data.chatPage].note}></textarea>
<span class="text-gray-400 mb-6 text-sm">{tokens.localNote} {language.tokens}</span>
{/if}
<div class="flex mt-6 items-center">
@@ -520,10 +515,7 @@
<span class="text-neutral-200">{language.systemPrompt} <Help key="systemPrompt"/></span>
<textarea class="bg-transparent input-text mt-2 mb-2 text-gray-200 text-xs resize-none h-20 focus:bg-selected" autocomplete="off" bind:value={currentChar.data.systemPrompt}></textarea>
<span class="text-neutral-200">{language.chatNotes} <Help key="chatNote"/></span>
<textarea class="bg-transparent input-text mt-2 mb-2 text-gray-200 resize-none h-20 focus:bg-selected text-xs" autocomplete="off" bind:value={currentChar.data.chats[currentChar.data.chatPage].note}></textarea>
<span class="text-gray-400 mb-6 text-sm">{tokens.localNote} {language.tokens}</span>
{#if currentChar.data.chats[currentChar.data.chatPage].supaMemoryData && currentChar.data.chats[currentChar.data.chatPage].supaMemoryData.length > 4}
<span class="text-neutral-200">{language.SuperMemory}</span>
<textarea class="bg-transparent input-text mt-2 mb-2 text-gray-200 text-xs resize-none h-20 focus:bg-selected" autocomplete="off" bind:value={currentChar.data.chats[currentChar.data.chatPage].supaMemoryData}></textarea>

View File

@@ -0,0 +1,35 @@
<script lang="ts">
import { DataBase } from "src/ts/database";
import { isTauri } from "src/ts/globalApi";
import { getHordeModels } from "src/ts/horde/getModels";
export let value = ""
</script>
{#await getHordeModels()}
<select class="bg-transparent input-text mt-2 mb-2 text-gray-200 appearance-none text-sm" value="">
<option value="" class="bg-darkbg appearance-none">Loading...</option>
</select>
{:then models}
<select class="bg-transparent input-text mt-2 mb-2 text-gray-200 appearance-none text-sm" bind:value>
<optgroup class="bg-darkbg appearance-none" label="OpenAI">
<option value="gpt35" class="bg-darkbg appearance-none">OpenAI GPT-3.5</option>
<option value="gpt4" class="bg-darkbg appearance-none">OpenAI GPT-4</option>
</optgroup>
<optgroup class="bg-darkbg appearance-none" label="Other Providers">
<option value="palm2" class="bg-darkbg appearance-none">Google Palm2</option>
{#if value === 'novelai' || isTauri}
<option value="novelai" class="bg-darkbg appearance-none">NovelAI Clio</option>
{/if}
<option value="textgen_webui" class="bg-darkbg appearance-none">Text Generation WebUI</option>
{#if $DataBase.plugins.length > 0}
<option value="custom" class="bg-darkbg appearance-none">Plugin</option>
{/if}
</optgroup>
<optgroup class="bg-darkbg appearance-none" label="Horde">
{#each models as model}
<option value={"horde:::" + model} class="bg-darkbg appearance-none">{model}</option>
{/each}
</optgroup>
</select>
{/await}