diff --git a/src/lang/en.ts b/src/lang/en.ts index 73325616..2cf611ef 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -449,4 +449,5 @@ export const languageEnglish = { largePortrait: "Portrait", postImage: "Post Image", lorePlus: "LoreBook+", + reverseProxyOobaMode: "Reverse Proxy Ooba Mode" } \ No newline at end of file diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte index 663d3e1f..ffa009d4 100644 --- a/src/lib/Setting/Pages/BotSettings.svelte +++ b/src/lib/Setting/Pages/BotSettings.svelte @@ -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}
{/if} +
+ +
{/if} {#if $DataBase.aiModel === 'openrouter' || $DataBase.subModel === 'openrouter'} Openrouter Key @@ -459,6 +463,9 @@ {/if} {/if} +{#if ($DataBase.reverseProxyOobaMode && $DataBase.aiModel === 'reverse_proxy')} + +{/if} {#if advancedBotSettings} diff --git a/src/lib/Setting/Pages/OobaSettings.svelte b/src/lib/Setting/Pages/OobaSettings.svelte new file mode 100644 index 00000000..6a2dbcc6 --- /dev/null +++ b/src/lib/Setting/Pages/OobaSettings.svelte @@ -0,0 +1,130 @@ + + +
+ +{#if !openOobaSettings} + +{:else} + + +
+ +
+ Ooba Mode + + Instruct + Chat + Chat-Instruct + + + + {#if $DataBase.reverseProxyOobaArgs.mode === 'instruct'} + user prefix + + bot prefix + + system prefix + + system message + + {/if} + {#if $DataBase.reverseProxyOobaArgs.mode === 'chat' || $DataBase.reverseProxyOobaArgs.mode === 'chat-instruct'} + user prefix + + bot prefix + + system prefix + + start message + + {/if} + {#if $DataBase.reverseProxyOobaArgs.mode === 'chat-instruct'} + chat_instruct_command + + {/if} + min_p + + top_k + + repetition_penalty + + repetition_penalty_range + + typical_p + + tfs + + top_a + + epsilon_cutoff + + eta_cutoff + + guidance_scale + + penalty_alpha + + mirostat_mode + + mirostat_tau + + mirostat_eta + + encoder_repetition_penalty + + no_repeat_ngram_size + + min_length + + num_beams + + length_penalty + + truncation_length + + max_tokens_second + + negative_prompt + + custom_token_bans + + grammar_string + + + custom_token_bans + + grammar_string + + + temperature_last + + do_sample + + early_stopping + + auto_max_new_tokens + + + ban_eos_token + + add_bos_token + + skip_special_tokens + +{/if} +
\ No newline at end of file diff --git a/src/lib/UI/GUI/OptionalInput.svelte b/src/lib/UI/GUI/OptionalInput.svelte new file mode 100644 index 00000000..76e859ae --- /dev/null +++ b/src/lib/UI/GUI/OptionalInput.svelte @@ -0,0 +1,46 @@ + + +
+
+ { + if(value === null || value === undefined){ + if(numberMode){ + value = 0 + } + else if(boolMode){ + value = false + } + else{ + value = "" + } + } + else{ + value = null + } + }} /> +
+ + {#if (value === null || value === undefined)} + + {:else if typeof(value) === 'string'} + + {:else if typeof(value) === 'number'} + + {:else if typeof(value) === 'boolean'} + + + {:else} + + {/if} +
\ No newline at end of file diff --git a/src/lib/UI/GUI/TextInput.svelte b/src/lib/UI/GUI/TextInput.svelte index 4aa66957..ee9beed6 100644 --- a/src/lib/UI/GUI/TextInput.svelte +++ b/src/lib/UI/GUI/TextInput.svelte @@ -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 \ No newline at end of file diff --git a/src/ts/model/ooba.ts b/src/ts/model/ooba.ts new file mode 100644 index 00000000..9fb731cf --- /dev/null +++ b/src/ts/model/ooba.ts @@ -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; + +} \ No newline at end of file diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index b16316db..819c9c5f 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -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 diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index cabb663e..f04e2c88 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -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{ diff --git a/src/ts/tokenizer.ts b/src/ts/tokenizer.ts index 3a54c064..aa7989f6 100644 --- a/src/ts/tokenizer.ts +++ b/src/ts/tokenizer.ts @@ -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) }