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}
+
+ ⮞ Ooba Settings
+
+{:else}
+
+ ⮟ Ooba Settings
+
+
+
+
+
+
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'}
+
True
+
False
+ {: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)
}