[feat] sperate reverse proxy

This commit is contained in:
kwaroran
2023-07-04 22:06:24 +09:00
parent 9f9c7736fb
commit 1139de8140
6 changed files with 47 additions and 22 deletions

View File

@@ -326,4 +326,6 @@ export const languageEnglish = {
loadDataFromAccount: "Load Data from Account", loadDataFromAccount: "Load Data from Account",
saveCurrentDataToAccount: "Save Current Data to Account", saveCurrentDataToAccount: "Save Current Data to Account",
chatAssumed: "Approximately {} Chats Played", chatAssumed: "Approximately {} Chats Played",
proxyAPIKey: "Proxy Key/Password",
proxyRequestModel: "Rroxy Request Model"
} }

View File

@@ -103,13 +103,32 @@
<span class="text-neutral-200">Claude {language.apiKey}</span> <span class="text-neutral-200">Claude {language.apiKey}</span>
<input class="text-neutral-200 mb-4 p-2 bg-transparent input-text focus:bg-selected text-sm" placeholder="..." bind:value={$DataBase.claudeAPIKey}> <input class="text-neutral-200 mb-4 p-2 bg-transparent input-text focus:bg-selected text-sm" placeholder="..." bind:value={$DataBase.claudeAPIKey}>
{/if} {/if}
{#if $DataBase.aiModel.startsWith('gpt')} {#if $DataBase.aiModel === 'reverse_proxy' || $DataBase.subModel === 'reverse_proxy'}
<span class="text-neutral-200 mt-2">{language.forceReplaceUrl} URL <Help key="forceUrl"/></span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm"bind:value={$DataBase.forceReplaceUrl} placeholder="https//...">
<span class="text-neutral-200 mt-4"> {language.proxyAPIKey}</span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" placeholder="leave it blank if it hasn't password" bind:value={$DataBase.proxyKey}>
<span class="text-neutral-200 mt-4"> {language.proxyRequestModel}</span>
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none text-sm" bind:value={$DataBase.proxyRequestModel}>
<option value="" class="bg-darkbg appearance-none">None</option>
<option value="gpt35" class="bg-darkbg appearance-none">GPT 3.5</option>
<option value="gpt35_16k" class="bg-darkbg appearance-none">GPT 3.5-Turbo</option>
<option value="gpt4" class="bg-darkbg appearance-none">GPT-4</option>
<option value="gpt4_32k" class="bg-darkbg appearance-none">GPT-4 32k</option>
<option value="gpt35_0301" class="bg-darkbg appearance-none">GPT-3.5 0301</option>
<option value="gpt4_0301" class="bg-darkbg appearance-none">GPT-4 0301</option>
</select>
{/if}
{#if $DataBase.aiModel.startsWith('gpt') || $DataBase.subModel.startsWith('gpt')}
<span class="text-neutral-200">OpenAI {language.apiKey} <Help key="oaiapikey"/></span> <span class="text-neutral-200">OpenAI {language.apiKey} <Help key="oaiapikey"/></span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" placeholder="sk-XXXXXXXXXXXXXXXXXXXX" bind:value={$DataBase.openAIKey}> <input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" placeholder="sk-XXXXXXXXXXXXXXXXXXXX" bind:value={$DataBase.openAIKey}>
{/if}
{#if $DataBase.aiModel.startsWith('gpt') || $DataBase.aiModel === 'reverse_proxy'}
<div class="flex items-center mt-2 mb-4"> <div class="flex items-center mt-2 mb-4">
<Check bind:check={$DataBase.useStreaming} name={`OpenAI ${language.streaming}`}/> <Check bind:check={$DataBase.useStreaming} name={`Response ${language.streaming}`}/>
</div> </div>
{/if} {/if}
{#if $DataBase.aiModel === 'custom'} {#if $DataBase.aiModel === 'custom'}
<span class="text-neutral-200 mt-2">{language.plugin}</span> <span class="text-neutral-200 mt-2">{language.plugin}</span>
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none text-sm" bind:value={$DataBase.currentPluginProvider}> <select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none text-sm" bind:value={$DataBase.currentPluginProvider}>
@@ -180,10 +199,6 @@
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="100" bind:value={$DataBase.PresensePenalty}> <input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="100" bind:value={$DataBase.PresensePenalty}>
<span class="text-gray-400 mb-6 text-sm">{($DataBase.PresensePenalty / 100).toFixed(2)}</span> <span class="text-gray-400 mb-6 text-sm">{($DataBase.PresensePenalty / 100).toFixed(2)}</span>
<span class="text-neutral-200 mt-2">{language.forceReplaceUrl} <Help key="forceUrl"/></span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm"bind:value={$DataBase.forceReplaceUrl} placeholder="Leave blank to not replace url">
<span class="text-neutral-200 mt-2">{language.submodel} {language.forceReplaceUrl} <Help key="forceUrl"/></span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm"bind:value={$DataBase.forceReplaceUrl2} placeholder="Leave blank to not replace url">
<span class="text-neutral-200 mt-2">{language.autoSuggest} <Help key="autoSuggest"/></span> <span class="text-neutral-200 mt-2">{language.autoSuggest} <Help key="autoSuggest"/></span>
<textarea class="bg-transparent input-text mb-2 text-gray-200 resize-none h-20 min-h-20 focus:bg-selected text-xs w-full" autocomplete="off" bind:value={$DataBase.autoSuggestPrompt}></textarea> <textarea class="bg-transparent input-text mb-2 text-gray-200 resize-none h-20 min-h-20 focus:bg-selected text-xs w-full" autocomplete="off" bind:value={$DataBase.autoSuggestPrompt}></textarea>
<span class="text-gray-400 mb-6 text-sm">{tokens.autoSuggest} {language.tokens}</span> <span class="text-gray-400 mb-6 text-sm">{tokens.autoSuggest} {language.tokens}</span>

View File

@@ -46,6 +46,8 @@
return "NovelList SuperTrin" return "NovelList SuperTrin"
case "novellist damsel": case "novellist damsel":
return "NovelList Damsel" return "NovelList Damsel"
case 'reverse_proxy':
return "Reverse Proxy"
default: default:
if(name.startsWith("horde:::")){ if(name.startsWith("horde:::")){
return name.replace(":::", " ") return name.replace(":::", " ")
@@ -100,6 +102,7 @@
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-1.0')}}>claude-v1.0</button> <button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-1.0')}}>claude-v1.0</button>
{/if} {/if}
</Arcodion> </Arcodion>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('reverse_proxy')}}>Reverse Proxy</button>
<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('textgen_webui')}}>Oobabooga WebUI</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('palm2')}}>Google PaLM2</button>
<button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('kobold')}}>Kobold</button> <button class="hover:bg-selected px-6 py-2 text-lg" on:click={() => {changeModel('kobold')}}>Kobold</button>

View File

@@ -87,9 +87,8 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
let temperature = arg.temperature ?? (db.temperature / 100) let temperature = arg.temperature ?? (db.temperature / 100)
let bias = arg.bias let bias = arg.bias
let currentChar = arg.currentChar let currentChar = arg.currentChar
const replacer = model === 'model' ? db.forceReplaceUrl : db.forceReplaceUrl2
const aiModel = model === 'model' ? db.aiModel : db.subModel const aiModel = model === 'model' ? db.aiModel : db.subModel
const replacer = aiModel === 'reverse_proxy' ? model === 'model' ? db.forceReplaceUrl : db.forceReplaceUrl2 : ''
switch(aiModel){ switch(aiModel){
case 'gpt35': case 'gpt35':
case 'gpt35_0613': case 'gpt35_0613':
@@ -100,8 +99,8 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
case 'gpt4_0613': case 'gpt4_0613':
case 'gpt4_32k_0613': case 'gpt4_32k_0613':
case 'gpt35_0301': case 'gpt35_0301':
case 'gpt4_0301':{ case 'gpt4_0301':
case 'reverse_proxy':{
for(let i=0;i<formated.length;i++){ for(let i=0;i<formated.length;i++){
if(formated[i].role !== 'function'){ if(formated[i].role !== 'function'){
if(arg.isGroupChat && formated[i].name){ if(arg.isGroupChat && formated[i].name){
@@ -141,17 +140,18 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
const oaiFunctionCall = oaiFunctions ? (arg.useEmotion ? {"name": "set_emotion"} : "auto") : undefined const oaiFunctionCall = oaiFunctions ? (arg.useEmotion ? {"name": "set_emotion"} : "auto") : undefined
const requestModel = aiModel === 'reverse_proxy' ? db.proxyRequestModel : aiModel
const body = ({ const body = ({
model: aiModel === 'gpt35' ? 'gpt-3.5-turbo' model: requestModel === 'gpt35' ? 'gpt-3.5-turbo'
: aiModel === 'gpt35_0613' ? 'gpt-3.5-turbo-0613' : requestModel === 'gpt35_0613' ? 'gpt-3.5-turbo-0613'
: aiModel === 'gpt35_16k' ? 'gpt-3.5-turbo-16k' : requestModel === 'gpt35_16k' ? 'gpt-3.5-turbo-16k'
: aiModel === 'gpt35_16k_0613' ? 'gpt-3.5-turbo-16k-0613' : requestModel === 'gpt35_16k_0613' ? 'gpt-3.5-turbo-16k-0613'
: aiModel === 'gpt4' ? 'gpt-4' : requestModel === 'gpt4' ? 'gpt-4'
: aiModel === 'gpt4_32k' ? 'gpt-4-32k' : requestModel === 'gpt4_32k' ? 'gpt-4-32k'
: aiModel === "gpt4_0613" ? 'gpt-4-0613' : requestModel === "gpt4_0613" ? 'gpt-4-0613'
: aiModel === "gpt4_32k_0613" ? 'gpt-4-32k-0613' : requestModel === "gpt4_32k_0613" ? 'gpt-4-32k-0613'
: aiModel === 'gpt35_0301' ? 'gpt-3.5-turbo-0301' : requestModel === 'gpt35_0301' ? 'gpt-3.5-turbo-0301'
: aiModel === 'gpt4_0301' ? 'gpt-4-0301' : '', : requestModel === 'gpt4_0301' ? 'gpt-4-0301' : 'gpt-3.5-turbo',
messages: formated, messages: formated,
temperature: temperature, temperature: temperature,
max_tokens: maxTokens, max_tokens: maxTokens,
@@ -197,7 +197,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
body: JSON.stringify(body), body: JSON.stringify(body),
method: "POST", method: "POST",
headers: { headers: {
"Authorization": "Bearer " + db.openAIKey, "Authorization": "Bearer " + aiModel === 'reverse_proxy' ? db.proxyKey : db.openAIKey,
"Content-Type": "application/json" "Content-Type": "application/json"
}, },
signal: abortSignal signal: abortSignal

View File

@@ -139,6 +139,9 @@ export function setDatabase(data:Database){
if(checkNullish(data.requester)){ if(checkNullish(data.requester)){
data.requester = "new" data.requester = "new"
} }
if(checkNullish(data.proxyKey)){
data.proxyKey = ""
}
if(checkNullish(data.botPresets)){ if(checkNullish(data.botPresets)){
let defaultPreset = presetTemplate let defaultPreset = presetTemplate
defaultPreset.name = "Default" defaultPreset.name = "Default"
@@ -413,6 +416,7 @@ export interface Database{
apiType: string apiType: string
forceReplaceUrl2:string forceReplaceUrl2:string
openAIKey: string openAIKey: string
proxyKey:string
mainPrompt: string mainPrompt: string
jailbreak: string jailbreak: string
globalNote:string globalNote:string
@@ -530,6 +534,7 @@ export interface Database{
useAdditionalAssetsPreview:boolean, useAdditionalAssetsPreview:boolean,
usePlainFetch:boolean usePlainFetch:boolean
hypaMemory:boolean hypaMemory:boolean
proxyRequestModel:string
} }
interface hordeConfig{ interface hordeConfig{