[feat] add new ooba
This commit is contained in:
@@ -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}
|
||||
|
||||
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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'}"
|
||||
>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user