[feat] ooba mode
This commit is contained in:
@@ -449,4 +449,5 @@ export const languageEnglish = {
|
||||
largePortrait: "Portrait",
|
||||
postImage: "Post Image",
|
||||
lorePlus: "LoreBook+",
|
||||
reverseProxyOobaMode: "Reverse Proxy Ooba Mode"
|
||||
}
|
||||
@@ -21,6 +21,7 @@
|
||||
import { openRouterModels } from "src/ts/model/openrouter";
|
||||
import { novelLogin } from "src/ts/process/models/nai";
|
||||
import { alertConfirm } from "src/ts/alert";
|
||||
import OobaSettings from "./OobaSettings.svelte";
|
||||
|
||||
let tokens = {
|
||||
mainPrompt: 0,
|
||||
@@ -160,6 +161,9 @@
|
||||
{:else}
|
||||
<div class="mb-4"></div>
|
||||
{/if}
|
||||
<div class="flex items-center mt-2 mb-4">
|
||||
<Check bind:check={$DataBase.reverseProxyOobaMode} name={`${language.reverseProxyOobaMode}`}/>
|
||||
</div>
|
||||
{/if}
|
||||
{#if $DataBase.aiModel === 'openrouter' || $DataBase.subModel === 'openrouter'}
|
||||
<span class="text-textcolor mt-4">Openrouter Key</span>
|
||||
@@ -459,6 +463,9 @@
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{#if ($DataBase.reverseProxyOobaMode && $DataBase.aiModel === 'reverse_proxy')}
|
||||
<OobaSettings />
|
||||
{/if}
|
||||
|
||||
|
||||
{#if advancedBotSettings}
|
||||
|
||||
130
src/lib/Setting/Pages/OobaSettings.svelte
Normal file
130
src/lib/Setting/Pages/OobaSettings.svelte
Normal file
@@ -0,0 +1,130 @@
|
||||
<script lang="ts">
|
||||
import TextInput from "src/lib/UI/GUI/TextInput.svelte";
|
||||
import NumberInput from "src/lib/UI/GUI/NumberInput.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";
|
||||
import { DataBase } from "src/ts/storage/database";
|
||||
let openOobaSettings = false
|
||||
const toggleOobaSettings = () => {
|
||||
openOobaSettings = !openOobaSettings
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="border-darkborderc border px-2 flex flex-col py-4 rounded-md">
|
||||
|
||||
{#if !openOobaSettings}
|
||||
<button on:click={toggleOobaSettings}>
|
||||
⮞ Ooba Settings
|
||||
</button>
|
||||
{:else}
|
||||
<button on:click={toggleOobaSettings}>
|
||||
⮟ Ooba Settings
|
||||
</button>
|
||||
|
||||
<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 $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}
|
||||
<span class="text-textcolor">min_p</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.min_p} numberMode />
|
||||
<span class="text-textcolor">top_k</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.top_k} numberMode />
|
||||
<span class="text-textcolor">repetition_penalty</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.repetition_penalty} numberMode />
|
||||
<span class="text-textcolor">repetition_penalty_range</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.repetition_penalty_range} numberMode />
|
||||
<span class="text-textcolor">typical_p</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.typical_p} numberMode />
|
||||
<span class="text-textcolor">tfs</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.tfs} numberMode />
|
||||
<span class="text-textcolor">top_a</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.top_a} numberMode />
|
||||
<span class="text-textcolor">epsilon_cutoff</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.epsilon_cutoff} numberMode />
|
||||
<span class="text-textcolor">eta_cutoff</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.eta_cutoff} numberMode />
|
||||
<span class="text-textcolor">guidance_scale</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.guidance_scale} numberMode />
|
||||
<span class="text-textcolor">penalty_alpha</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.penalty_alpha} numberMode />
|
||||
<span class="text-textcolor">mirostat_mode</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.mirostat_mode} numberMode />
|
||||
<span class="text-textcolor">mirostat_tau</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.mirostat_tau} numberMode />
|
||||
<span class="text-textcolor">mirostat_eta</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.mirostat_eta} numberMode />
|
||||
<span class="text-textcolor">encoder_repetition_penalty</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.encoder_repetition_penalty} numberMode />
|
||||
<span class="text-textcolor">no_repeat_ngram_size</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.no_repeat_ngram_size} numberMode />
|
||||
<span class="text-textcolor">min_length</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.min_length} numberMode />
|
||||
<span class="text-textcolor">num_beams</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.num_beams} numberMode />
|
||||
<span class="text-textcolor">length_penalty</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.length_penalty} numberMode />
|
||||
<span class="text-textcolor">truncation_length</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.truncation_length} numberMode />
|
||||
<span class="text-textcolor">max_tokens_second</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.max_tokens_second} numberMode />
|
||||
<span class="text-textcolor">negative_prompt</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.negative_prompt} />
|
||||
<span class="text-textcolor">custom_token_bans</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.custom_token_bans} />
|
||||
<span class="text-textcolor">grammar_string</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.grammar_string} />
|
||||
|
||||
<span class="text-textcolor">custom_token_bans</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.custom_token_bans} />
|
||||
<span class="text-textcolor">grammar_string</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.grammar_string} />
|
||||
|
||||
<span class="text-textcolor">temperature_last</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.temperature_last} boolMode />
|
||||
<span class="text-textcolor">do_sample</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.do_sample} boolMode />
|
||||
<span class="text-textcolor">early_stopping</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.early_stopping} boolMode />
|
||||
<span class="text-textcolor">auto_max_new_tokens</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.auto_max_new_tokens} boolMode />
|
||||
|
||||
<span class="text-textcolor">ban_eos_token</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.ban_eos_token} boolMode />
|
||||
<span class="text-textcolor">add_bos_token</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.add_bos_token} boolMode />
|
||||
<span class="text-textcolor">skip_special_tokens</span>
|
||||
<OptionalInput marginBottom={true} bind:value={$DataBase.reverseProxyOobaArgs.skip_special_tokens} boolMode />
|
||||
{/if}
|
||||
</div>
|
||||
46
src/lib/UI/GUI/OptionalInput.svelte
Normal file
46
src/lib/UI/GUI/OptionalInput.svelte
Normal file
@@ -0,0 +1,46 @@
|
||||
<script lang="ts">
|
||||
import CheckInput from "./CheckInput.svelte";
|
||||
import NumberInput from "./NumberInput.svelte";
|
||||
import TextInput from "./TextInput.svelte";
|
||||
export let value:string|number|boolean
|
||||
export let numberMode = false
|
||||
export let boolMode = false
|
||||
export let marginBottom = false
|
||||
const valToggle = () => {
|
||||
value = !value
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="flex items-center justify-center" class:mb-4={marginBottom}>
|
||||
<div class="flex justify-center items-center border-darkborderc rounded-l-md rounded-t-md rounded-b-md border h-full">
|
||||
<CheckInput hiddenName check={!(value === null || value === undefined)} onChange={() => {
|
||||
if(value === null || value === undefined){
|
||||
if(numberMode){
|
||||
value = 0
|
||||
}
|
||||
else if(boolMode){
|
||||
value = false
|
||||
}
|
||||
else{
|
||||
value = ""
|
||||
}
|
||||
}
|
||||
else{
|
||||
value = null
|
||||
}
|
||||
}} />
|
||||
</div>
|
||||
|
||||
{#if (value === null || value === undefined)}
|
||||
<TextInput value={"Using default"} additionalClass="flex-1" disabled/>
|
||||
{:else if typeof(value) === 'string'}
|
||||
<TextInput bind:value={value} additionalClass="flex-1"/>
|
||||
{:else if typeof(value) === 'number'}
|
||||
<NumberInput bind:value={value} additionalClass="flex-1"/>
|
||||
{:else if typeof(value) === 'boolean'}
|
||||
<button class="px-2 py-2 border border-darkborderc flex-1" class:text-textcolor2={!value} on:click={valToggle}>True</button>
|
||||
<button class="px-2 py-2 border border-darkborderc flex-1" class:text-textcolor2={value} on:click={valToggle}>False</button>
|
||||
{:else}
|
||||
<TextInput value={"Using default"} additionalClass="flex-1" disabled/>
|
||||
{/if}
|
||||
</div>
|
||||
@@ -16,11 +16,13 @@
|
||||
class:mt-4={marginTop}
|
||||
class:w-full={fullwidth}
|
||||
class:h-full={fullh}
|
||||
class:text-textcolor2={disabled}
|
||||
{autocomplete}
|
||||
{placeholder}
|
||||
id={id}
|
||||
type="text"
|
||||
bind:value
|
||||
disabled={disabled}
|
||||
on:input={onInput}
|
||||
/>
|
||||
|
||||
@@ -38,4 +40,5 @@
|
||||
export let fullwidth = false
|
||||
export let fullh = false
|
||||
export let additionalClass = ''
|
||||
export let disabled = false
|
||||
</script>
|
||||
47
src/ts/model/ooba.ts
Normal file
47
src/ts/model/ooba.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
export interface OobaChatCompletionRequestParams {
|
||||
mode: 'instruct'|'chat'|'chat-instruct'
|
||||
turn_template?: string
|
||||
name1_instruct?: string
|
||||
name2_instruct?: string
|
||||
context_instruct?: string
|
||||
system_message?: string
|
||||
name1?: string
|
||||
name2?: string
|
||||
context?: string
|
||||
greeting?: string
|
||||
chat_instruct_command?: string
|
||||
preset?: string; // The '?' denotes that the property is optional
|
||||
min_p?: number;
|
||||
top_k?: number;
|
||||
repetition_penalty?: number;
|
||||
repetition_penalty_range?: number;
|
||||
typical_p?: number;
|
||||
tfs?: number;
|
||||
top_a?: number;
|
||||
epsilon_cutoff?: number;
|
||||
eta_cutoff?: number;
|
||||
guidance_scale?: number;
|
||||
negative_prompt?: string;
|
||||
penalty_alpha?: number;
|
||||
mirostat_mode?: number;
|
||||
mirostat_tau?: number;
|
||||
mirostat_eta?: number;
|
||||
temperature_last?: boolean;
|
||||
do_sample?: boolean;
|
||||
seed?: number;
|
||||
encoder_repetition_penalty?: number;
|
||||
no_repeat_ngram_size?: number;
|
||||
min_length?: number;
|
||||
num_beams?: number;
|
||||
length_penalty?: number;
|
||||
early_stopping?: boolean;
|
||||
truncation_length?: number;
|
||||
max_tokens_second?: number;
|
||||
custom_token_bans?: string;
|
||||
auto_max_new_tokens?: boolean;
|
||||
ban_eos_token?: boolean;
|
||||
add_bos_token?: boolean;
|
||||
skip_special_tokens?: boolean;
|
||||
grammar_string?: string;
|
||||
|
||||
}
|
||||
@@ -295,6 +295,18 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
||||
body.user = getOpenUserString()
|
||||
}
|
||||
|
||||
if(aiModel === 'reverse_proxy' && db.reverseProxyOobaMode){
|
||||
const OobaBodyTemplate = db.reverseProxyOobaArgs
|
||||
|
||||
const keys = Object.keys(OobaBodyTemplate)
|
||||
for(const key of keys){
|
||||
if(OobaBodyTemplate[key] !== undefined && OobaBodyTemplate[key] !== null){
|
||||
// @ts-ignore
|
||||
body[key] = OobaBodyTemplate[key]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(supportsInlayImage()){
|
||||
// inlay models doesn't support logit_bias
|
||||
// @ts-ignore
|
||||
|
||||
@@ -11,6 +11,7 @@ import type { NAISettings } from '../process/models/nai';
|
||||
import { prebuiltNAIpresets, prebuiltPresets } from '../process/templates/templates';
|
||||
import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme';
|
||||
import type { Proompt } from '../process/proompt';
|
||||
import type { OobaChatCompletionRequestParams } from '../model/ooba';
|
||||
|
||||
export const DataBase = writable({} as any as Database)
|
||||
export const loadedStore = writable(false)
|
||||
@@ -320,6 +321,9 @@ export function setDatabase(data:Database){
|
||||
data.generationSeed ??= -1
|
||||
data.newOAIHandle ??= true
|
||||
data.gptVisionQuality ??= 'low'
|
||||
data.reverseProxyOobaArgs ??= {
|
||||
mode: 'instruct'
|
||||
}
|
||||
changeLanguage(data.language)
|
||||
DataBase.set(data)
|
||||
}
|
||||
@@ -499,6 +503,8 @@ export interface Database{
|
||||
putUserOpen: boolean
|
||||
inlayImage:boolean
|
||||
gptVisionQuality:string
|
||||
reverseProxyOobaMode:boolean
|
||||
reverseProxyOobaArgs: OobaChatCompletionRequestParams
|
||||
}
|
||||
|
||||
export interface customscript{
|
||||
|
||||
@@ -17,9 +17,10 @@ async function encode(data:string):Promise<(number[]|Uint32Array|Int32Array)>{
|
||||
if(db.aiModel.startsWith('novelai')){
|
||||
return await tokenizeWebTokenizers(data, 'novelai')
|
||||
}
|
||||
if(db.aiModel.startsWith('local_') || db.aiModel === 'mancer' || db.aiModel === 'textgen_webui'){
|
||||
if(db.aiModel.startsWith('local_') || db.aiModel === 'mancer' || db.aiModel === 'textgen_webui' || (db.aiModel === 'reverse_proxy' && db.reverseProxyOobaMode)){
|
||||
return await tokenizeWebTokenizers(data, 'llama')
|
||||
}
|
||||
|
||||
return await tikJS(data)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user