[feat] add new ooba

This commit is contained in:
kwaroran
2023-12-03 19:15:09 +09:00
parent a91977ec82
commit 390e3bcb62
5 changed files with 140 additions and 62 deletions

View File

@@ -254,7 +254,11 @@
{#if !isTauri}
<span class="text-draculared text-xs mb-2">You are using web version. you must use ngrok or other tunnels to use your local webui.</span>
{/if}
<span class="text-draculared text-xs mb-2">Warning: For Ooba version over 1.7, use "Reverse Proxy" as model, and use url like http://127.0.0.1:5000/v1/chat/completions</span>
<span class="text-draculared text-xs mb-2">Warning: For Ooba version over 1.7, use "Ooba" as model, and use url like http://127.0.0.1:5000/v1/chat/completions</span>
{/if}
{#if $DataBase.aiModel === 'ooba' || $DataBase.subModel === 'ooba'}
<span class="text-textcolor mt-2">Ooba {language.providerURL}</span>
<TextInput marginBottom={true} bind:value={$DataBase.textgenWebUIBlockingURL} placeholder="https://..."/>
{/if}
{#if advancedBotSettings}
{#if !$DataBase.promptTemplate}
@@ -465,8 +469,8 @@
{/if}
{/if}
{#if ($DataBase.reverseProxyOobaMode && $DataBase.aiModel === 'reverse_proxy')}
<OobaSettings />
{#if ($DataBase.reverseProxyOobaMode && $DataBase.aiModel === 'reverse_proxy') || ($DataBase.aiModel === 'ooba')}
<OobaSettings instructionMode={$DataBase.aiModel === 'ooba'} />
{/if}

View File

@@ -1,6 +1,5 @@
<script lang="ts">
import TextInput from "src/lib/UI/GUI/TextInput.svelte";
import NumberInput from "src/lib/UI/GUI/NumberInput.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 OptionalInput from "src/lib/UI/GUI/OptionalInput.svelte";
@@ -9,6 +8,7 @@
const toggleOobaSettings = () => {
openOobaSettings = !openOobaSettings
}
export let instructionMode = false
</script>
<div class="border-darkborderc border px-2 flex flex-col py-4 rounded-md">
@@ -25,37 +25,49 @@
<div class="border-b border-b-darkborderc mt-4 mb-4">
</div>
<span class="text-textcolor">Ooba Mode</span>
<SelectInput className="mt-2 mb-4" bind:value={$DataBase.reverseProxyOobaArgs.mode}>
<OptionInput value="instruct">Instruct</OptionInput>
<OptionInput value="chat">Chat</OptionInput>
<OptionInput value="chat-instruct">Chat-Instruct</OptionInput>
</SelectInput>
<!-- name1 = user | name2 = bot --->
{#if instructionMode}
<span class="text-textcolor">System Prefix</span>
<TextAreaInput fullwidth autocomplete="off" height={"24"} bind:value={$DataBase.ooba.formating.systemPrefix} />
<span class="text-textcolor">User Prefix</span>
<TextAreaInput fullwidth autocomplete="off" height={"24"} bind:value={$DataBase.ooba.formating.userPrefix} />
<span class="text-textcolor">Assistant Prefix</span>
<TextAreaInput fullwidth autocomplete="off" height={"24"} bind:value={$DataBase.ooba.formating.assistantPrefix} />
<span class="text-textcolor">Seperator</span>
<TextAreaInput fullwidth autocomplete="off" height={"24"} bind:value={$DataBase.ooba.formating.seperator} />
{#if $DataBase.reverseProxyOobaArgs.mode === 'instruct'}
<span class="text-textcolor">user prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name1_instruct} />
<span class="text-textcolor">bot prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name2_instruct} />
<span class="text-textcolor">system prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.context_instruct} />
<span class="text-textcolor">system message</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.system_message} />
{/if}
{#if $DataBase.reverseProxyOobaArgs.mode === 'chat' || $DataBase.reverseProxyOobaArgs.mode === 'chat-instruct'}
<span class="text-textcolor">user prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name1} />
<span class="text-textcolor">bot prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name2} />
<span class="text-textcolor">system prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.context} />
<span class="text-textcolor">start message</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.greeting} />
{/if}
{#if $DataBase.reverseProxyOobaArgs.mode === 'chat-instruct'}
<span class="text-textcolor">chat_instruct_command</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.chat_instruct_command} />
{:else}
<span class="text-textcolor">Ooba Mode</span>
<SelectInput className="mt-2 mb-4" bind:value={$DataBase.reverseProxyOobaArgs.mode}>
<OptionInput value="instruct">Instruct</OptionInput>
<OptionInput value="chat">Chat</OptionInput>
<OptionInput value="chat-instruct">Chat-Instruct</OptionInput>
</SelectInput>
<!-- name1 = user | name2 = bot --->
{#if $DataBase.reverseProxyOobaArgs.mode === 'instruct'}
<span class="text-textcolor">user prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name1_instruct} />
<span class="text-textcolor">bot prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name2_instruct} />
<span class="text-textcolor">system prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.context_instruct} />
<span class="text-textcolor">system message</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.system_message} />
{/if}
{#if $DataBase.reverseProxyOobaArgs.mode === 'chat' || $DataBase.reverseProxyOobaArgs.mode === 'chat-instruct'}
<span class="text-textcolor">user prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name1} />
<span class="text-textcolor">bot prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.name2} />
<span class="text-textcolor">system prefix</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.context} />
<span class="text-textcolor">start message</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.greeting} />
{/if}
{#if $DataBase.reverseProxyOobaArgs.mode === 'chat-instruct'}
<span class="text-textcolor">chat_instruct_command</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.chat_instruct_command} />
{/if}
{/if}
<span class="text-textcolor">min_p</span>
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.min_p} numberMode />

View File

@@ -7,10 +7,11 @@
export let name = ''
export let hiddenName = false
export let className = ""
export let grayText = false
</script>
<label
class={"flex items-center space-x-2 cursor-pointer text-textcolor" + (className ? " " + className : "")}
class={"flex items-center space-x-2 cursor-pointer" + (className ? " " + className : "") + (grayText ? " text-textcolor2" : " text-textcolor")}
class:mr-2={margin}
aria-describedby="{name} {check ? 'abled' : 'disabled'}"
>

View File

@@ -4,10 +4,8 @@
import Arcodion from "./Arcodion.svelte";
import { language } from "src/lang";
import { isNodeServer, isTauri } from "src/ts/storage/globalApi";
import { checkLocalModel } from "src/ts/process/models/local";
import { alertError } from "src/ts/alert";
import Help from "../Others/Help.svelte";
let openAdv = true
import Help from "../Others/Help.svelte";
import CheckInput from "./GUI/CheckInput.svelte";
export let value = ""
export let onChange: (v:string) => void = (v) => {}
@@ -46,7 +44,9 @@
case "palm2":
return "PaLM2"
case "textgen_webui":
return "Oobabooga WebUI"
return "Oobabooga Legacy"
case 'ooba':
return 'Oobabooga'
case "mancer":
return "Mancer"
case "kobold":
@@ -80,6 +80,8 @@
openOptions = false
onChange(name)
}
let showUnrec = false
</script>
{#if openOptions}
@@ -103,10 +105,9 @@
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('instructgpt35')}}>GPT-3.5 Instruct</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4')}}>GPT-4</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_32k')}}>GPT-4 32K</button>
{#if openAdv}
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_1106')}}>GPT-4 Turbo 1106</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gptvi4_1106')}}>GPT-4 Turbo 1106 Vision</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_1106')}}>GPT-4 Turbo 1106</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gptvi4_1106')}}>GPT-4 Turbo 1106 Vision</button>
{#if showUnrec}
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_0301')}}>GPT-4 0301</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_0613')}}>GPT-4 0613</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_32k_0613')}}>GPT-4 32K 0613</button>
@@ -120,11 +121,11 @@
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-2.1')}}>claude-2.1</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-2')}}>claude-2</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-2-100k')}}>claude-2-100k</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-v1')}}>claude-v1</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-v1-100k')}}>claude-v1-100k</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-instant-v1')}}>claude-instant-v1</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-instant-v1-100k')}}>claude-instant-v1-100k</button>
{#if openAdv}
{#if showUnrec}
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-v1')}}>claude-v1</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-v1-100k')}}>claude-v1-100k</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-instant-v1')}}>claude-instant-v1</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-instant-v1-100k')}}>claude-instant-v1-100k</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-1.2')}}>claude-v1.2</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-1.0')}}>claude-v1.0</button>
{/if}
@@ -135,11 +136,16 @@
changeModel('local_gptq')
}}>Local Model GPTQ <Help key="experimental"/> </button>
{/if}
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('textgen_webui')}}>Oobabooga WebUI</button>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('ooba')}}>Oobabooga</button>
{#if showUnrec}
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('textgen_webui')}}>Oobabooga Legacy</button>
{/if}
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('mancer')}}>Mancer</button>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('palm2')}}>Google PaLM2</button>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('openrouter')}}>OpenRouter</button>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('kobold')}}>Kobold</button>
{#if showUnrec}
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('palm2')}}>Google PaLM2</button>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('kobold')}}>Kobold</button>
{/if}
<Arcodion name="Novellist">
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('novellist')}}>SuperTrin</button>
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('novellist_damsel')}}>Damsel</button>
@@ -148,21 +154,26 @@
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('novelai')}}>NovelAI Clio</button>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('novelai_kayra')}}>NovelAI Kayra</button>
</Arcodion>
{#if showUnrec}
{#if isTauri ||isNodeServer}
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('deepai')}}>DeepAI</button>
{/if}
<Arcodion name="Horde">
{#await getHordeModels()}
<button class="p-2">Loading...</button>
{:then models}
{#each models as model}
<button on:click={() => {changeModel("horde:::" + model)}} class="p-2 hover:text-green-500">{model.trim()}</button>
{/each}
{/await}
</Arcodion>
<Arcodion name="Horde">
{#await getHordeModels()}
<button class="p-2">Loading...</button>
{:then models}
{#each models as model}
<button on:click={() => {changeModel("horde:::" + model)}} class="p-2 hover:text-green-500">{model.trim()}</button>
{/each}
{/await}
</Arcodion>
{/if}
{#if $DataBase.plugins.length > 0}
<button on:click={() => {changeModel('custom')}} class="hover:bg-selected px-6 py-2 text-lg" >Plugin</button>
{/if}
<div class="text-textcolor2 text-xs">
<CheckInput name={language.showUnrecommended} grayText bind:check={showUnrec}/>
</div>
</div>
</div>

View File

@@ -758,6 +758,56 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
}
}
case 'ooba': {
const suggesting = model === "submodel"
const proompt = stringlizeChatOba(formated, currentChar.name, suggesting, arg.continue)
let stopStrings = getStopStrings(suggesting)
if(db.localStopStrings){
stopStrings = db.localStopStrings.map((v) => {
return risuChatParser(v.replace(/\\n/g, "\n"))
})
}
let bodyTemplate:Record<string, any> = {
'prompt': proompt,
presence_penalty: arg.PresensePenalty || (db.PresensePenalty / 100),
frequency_penalty: arg.frequencyPenalty || (db.frequencyPenalty / 100),
logit_bias: bias,
max_tokens: maxTokens,
stop: stopStrings,
temperature: temperature,
top_p: db.topP
}
const url = new URL(db.textgenWebUIBlockingURL)
url.pathname = "/v1/chat/completions"
const urlStr = url.toString()
const OobaBodyTemplate = db.reverseProxyOobaArgs
const keys = Object.keys(OobaBodyTemplate)
for(const key of keys){
if(OobaBodyTemplate[key] !== undefined && OobaBodyTemplate[key] !== null){
bodyTemplate[key] = OobaBodyTemplate[key]
}
}
const response = await globalFetch(urlStr, {
body: bodyTemplate,
})
if(!response.ok){
return {
type: 'fail',
result: (language.errors.httpError + `${JSON.stringify(response.data)}`)
}
}
const text:string = response.data.choices[0].text
return {
type: 'success',
result: text.replace(/##\n/g, '')
}
}
case 'custom':{
const d = await pluginProcess({
bias: bias,