[feat] ooba mode
This commit is contained in:
@@ -449,4 +449,5 @@ export const languageEnglish = {
|
|||||||
largePortrait: "Portrait",
|
largePortrait: "Portrait",
|
||||||
postImage: "Post Image",
|
postImage: "Post Image",
|
||||||
lorePlus: "LoreBook+",
|
lorePlus: "LoreBook+",
|
||||||
|
reverseProxyOobaMode: "Reverse Proxy Ooba Mode"
|
||||||
}
|
}
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
import { openRouterModels } from "src/ts/model/openrouter";
|
import { openRouterModels } from "src/ts/model/openrouter";
|
||||||
import { novelLogin } from "src/ts/process/models/nai";
|
import { novelLogin } from "src/ts/process/models/nai";
|
||||||
import { alertConfirm } from "src/ts/alert";
|
import { alertConfirm } from "src/ts/alert";
|
||||||
|
import OobaSettings from "./OobaSettings.svelte";
|
||||||
|
|
||||||
let tokens = {
|
let tokens = {
|
||||||
mainPrompt: 0,
|
mainPrompt: 0,
|
||||||
@@ -160,6 +161,9 @@
|
|||||||
{:else}
|
{:else}
|
||||||
<div class="mb-4"></div>
|
<div class="mb-4"></div>
|
||||||
{/if}
|
{/if}
|
||||||
|
<div class="flex items-center mt-2 mb-4">
|
||||||
|
<Check bind:check={$DataBase.reverseProxyOobaMode} name={`${language.reverseProxyOobaMode}`}/>
|
||||||
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{#if $DataBase.aiModel === 'openrouter' || $DataBase.subModel === 'openrouter'}
|
{#if $DataBase.aiModel === 'openrouter' || $DataBase.subModel === 'openrouter'}
|
||||||
<span class="text-textcolor mt-4">Openrouter Key</span>
|
<span class="text-textcolor mt-4">Openrouter Key</span>
|
||||||
@@ -459,6 +463,9 @@
|
|||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
{#if ($DataBase.reverseProxyOobaMode && $DataBase.aiModel === 'reverse_proxy')}
|
||||||
|
<OobaSettings />
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
|
||||||
{#if advancedBotSettings}
|
{#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:mt-4={marginTop}
|
||||||
class:w-full={fullwidth}
|
class:w-full={fullwidth}
|
||||||
class:h-full={fullh}
|
class:h-full={fullh}
|
||||||
|
class:text-textcolor2={disabled}
|
||||||
{autocomplete}
|
{autocomplete}
|
||||||
{placeholder}
|
{placeholder}
|
||||||
id={id}
|
id={id}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value
|
bind:value
|
||||||
|
disabled={disabled}
|
||||||
on:input={onInput}
|
on:input={onInput}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -38,4 +40,5 @@
|
|||||||
export let fullwidth = false
|
export let fullwidth = false
|
||||||
export let fullh = false
|
export let fullh = false
|
||||||
export let additionalClass = ''
|
export let additionalClass = ''
|
||||||
|
export let disabled = false
|
||||||
</script>
|
</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()
|
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()){
|
if(supportsInlayImage()){
|
||||||
// inlay models doesn't support logit_bias
|
// inlay models doesn't support logit_bias
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import type { NAISettings } from '../process/models/nai';
|
|||||||
import { prebuiltNAIpresets, prebuiltPresets } from '../process/templates/templates';
|
import { prebuiltNAIpresets, prebuiltPresets } from '../process/templates/templates';
|
||||||
import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme';
|
import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme';
|
||||||
import type { Proompt } from '../process/proompt';
|
import type { Proompt } from '../process/proompt';
|
||||||
|
import type { OobaChatCompletionRequestParams } from '../model/ooba';
|
||||||
|
|
||||||
export const DataBase = writable({} as any as Database)
|
export const DataBase = writable({} as any as Database)
|
||||||
export const loadedStore = writable(false)
|
export const loadedStore = writable(false)
|
||||||
@@ -320,6 +321,9 @@ export function setDatabase(data:Database){
|
|||||||
data.generationSeed ??= -1
|
data.generationSeed ??= -1
|
||||||
data.newOAIHandle ??= true
|
data.newOAIHandle ??= true
|
||||||
data.gptVisionQuality ??= 'low'
|
data.gptVisionQuality ??= 'low'
|
||||||
|
data.reverseProxyOobaArgs ??= {
|
||||||
|
mode: 'instruct'
|
||||||
|
}
|
||||||
changeLanguage(data.language)
|
changeLanguage(data.language)
|
||||||
DataBase.set(data)
|
DataBase.set(data)
|
||||||
}
|
}
|
||||||
@@ -499,6 +503,8 @@ export interface Database{
|
|||||||
putUserOpen: boolean
|
putUserOpen: boolean
|
||||||
inlayImage:boolean
|
inlayImage:boolean
|
||||||
gptVisionQuality:string
|
gptVisionQuality:string
|
||||||
|
reverseProxyOobaMode:boolean
|
||||||
|
reverseProxyOobaArgs: OobaChatCompletionRequestParams
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface customscript{
|
export interface customscript{
|
||||||
|
|||||||
@@ -17,9 +17,10 @@ async function encode(data:string):Promise<(number[]|Uint32Array|Int32Array)>{
|
|||||||
if(db.aiModel.startsWith('novelai')){
|
if(db.aiModel.startsWith('novelai')){
|
||||||
return await tokenizeWebTokenizers(data, '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 tokenizeWebTokenizers(data, 'llama')
|
||||||
}
|
}
|
||||||
|
|
||||||
return await tikJS(data)
|
return await tikJS(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user