[feat] add openrouter
This commit is contained in:
@@ -120,6 +120,21 @@
|
|||||||
<option value="gpt4_0613" class="bg-darkbg appearance-none">GPT-4 0613</option>
|
<option value="gpt4_0613" class="bg-darkbg appearance-none">GPT-4 0613</option>
|
||||||
</select>
|
</select>
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if $DataBase.aiModel === 'openrouter' || $DataBase.subModel === 'openrouter'}
|
||||||
|
<span class="text-neutral-200 mt-4">Openrouter Key</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.openrouterKey}>
|
||||||
|
<span class="text-neutral-200 mt-4">Openrouter Model</span>
|
||||||
|
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none text-sm" bind:value={$DataBase.openrouterRequestModel}>
|
||||||
|
<option value="openai/gpt-3.5-turbo" class="bg-darkbg appearance-none">GPT 3.5</option>
|
||||||
|
<option value="openai/gpt-3.5-turbo-16k" class="bg-darkbg appearance-none">GPT 3.5 16k</option>
|
||||||
|
<option value="openai/gpt-4" class="bg-darkbg appearance-none">GPT-4</option>
|
||||||
|
<option value="openai/gpt-4-32k" class="bg-darkbg appearance-none">GPT-4 32k</option>
|
||||||
|
<option value="anthropic/claude-instant-v1" class="bg-darkbg appearance-none">Claude Instant v1</option>
|
||||||
|
<option value="anthropic/claude-instant-v1-100k" class="bg-darkbg appearance-none">Claude Instant v1 100k</option>
|
||||||
|
<option value="anthropic/claude-v1" class="bg-darkbg appearance-none">Claude v1</option>
|
||||||
|
<option value="anthropic/claude-v1-100k" class="bg-darkbg appearance-none">Claude v1 100k</option>
|
||||||
|
</select>
|
||||||
|
{/if}
|
||||||
{#if $DataBase.aiModel.startsWith('gpt') || $DataBase.subModel.startsWith('gpt')}
|
{#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}>
|
||||||
@@ -258,20 +273,20 @@
|
|||||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="2" step="0.01" bind:value={$DataBase.ainconfig.rep_pen}>
|
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="2" step="0.01" bind:value={$DataBase.ainconfig.rep_pen}>
|
||||||
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.rep_pen).toFixed(2)}</span>
|
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.rep_pen).toFixed(2)}</span>
|
||||||
<span class="text-neutral-200">Reputation Penalty Range</span>
|
<span class="text-neutral-200">Reputation Penalty Range</span>
|
||||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="2" step="2048" bind:value={$DataBase.ainconfig.rep_pen_range}>
|
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="2048" step="1" bind:value={$DataBase.ainconfig.rep_pen_range}>
|
||||||
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.rep_pen).toFixed(2)}</span>
|
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.rep_pen_range).toFixed(2)}</span>
|
||||||
<span class="text-neutral-200">Reputation Penalty Slope</span>
|
<span class="text-neutral-200">Reputation Penalty Slope</span>
|
||||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="10" step="0.1" bind:value={$DataBase.ainconfig.rep_pen_slope}>
|
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="10" step="0.1" bind:value={$DataBase.ainconfig.rep_pen_slope}>
|
||||||
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.rep_pen).toFixed(2)}</span>
|
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.rep_pen_slope).toFixed(2)}</span>
|
||||||
<span class="text-neutral-200">Top K</span>
|
<span class="text-neutral-200">Top K</span>
|
||||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="1" max="500" step="1" bind:value={$DataBase.ainconfig.top_k}>
|
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="1" max="500" step="1" bind:value={$DataBase.ainconfig.top_k}>
|
||||||
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.top_p).toFixed(2)}</span><span class="text-neutral-200">Typical P</span>
|
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.top_k).toFixed(2)}</span>
|
||||||
<span class="text-neutral-200">Top A</span>
|
<span class="text-neutral-200">Top A</span>
|
||||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="1" step="0.01" bind:value={$DataBase.ooba.top_a}>
|
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="1" step="0.01" bind:value={$DataBase.ainconfig.top_a}>
|
||||||
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ooba.top_a).toFixed(2)}</span>
|
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.top_a).toFixed(2)}</span>
|
||||||
<span class="text-neutral-200">Typical P</span>
|
<span class="text-neutral-200">Typical P</span>
|
||||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="1" step="0.01" bind:value={$DataBase.ooba.typical_p}>
|
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="1" step="0.01" bind:value={$DataBase.ainconfig.typical_p}>
|
||||||
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ooba.typical_p).toFixed(2)}</span>
|
<span class="text-gray-400 mb-6 text-sm">{($DataBase.ainconfig.typical_p).toFixed(2)}</span>
|
||||||
{:else}
|
{:else}
|
||||||
<span class="text-neutral-200">{language.frequencyPenalty} <Help key="frequencyPenalty"/></span>
|
<span class="text-neutral-200">{language.frequencyPenalty} <Help key="frequencyPenalty"/></span>
|
||||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="100" bind:value={$DataBase.frequencyPenalty}>
|
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="range" min="0" max="100" bind:value={$DataBase.frequencyPenalty}>
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
case 'gpt4_32k_0613':
|
case 'gpt4_32k_0613':
|
||||||
case 'gpt35_0301':
|
case 'gpt35_0301':
|
||||||
case 'gpt4_0301':
|
case 'gpt4_0301':
|
||||||
|
case 'openrouter':
|
||||||
case 'reverse_proxy':{
|
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'){
|
||||||
@@ -139,9 +140,10 @@ 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 requestModel = (aiModel === 'reverse_proxy' || aiModel === 'openrouter') ? db.proxyRequestModel : aiModel
|
||||||
const body = ({
|
const body = ({
|
||||||
model: requestModel === 'gpt35' ? 'gpt-3.5-turbo'
|
model: aiModel === 'openrouter' ? db.openrouterRequestModel :
|
||||||
|
requestModel === 'gpt35' ? 'gpt-3.5-turbo'
|
||||||
: requestModel === 'gpt35_0613' ? 'gpt-3.5-turbo-0613'
|
: requestModel === 'gpt35_0613' ? 'gpt-3.5-turbo-0613'
|
||||||
: requestModel === 'gpt35_16k' ? 'gpt-3.5-turbo-16k'
|
: requestModel === 'gpt35_16k' ? 'gpt-3.5-turbo-16k'
|
||||||
: requestModel === 'gpt35_16k_0613' ? 'gpt-3.5-turbo-16k-0613'
|
: requestModel === 'gpt35_16k_0613' ? 'gpt-3.5-turbo-16k-0613'
|
||||||
@@ -179,16 +181,23 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let headers = {
|
||||||
|
"Authorization": "Bearer " + aiModel === 'reverse_proxy' ? db.proxyKey :
|
||||||
|
aiModel === 'openrouter' ? db.openrouterKey : db.openAIKey,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
if(aiModel === 'openrouter'){
|
||||||
|
headers["X-Title"] = 'RisuAI'
|
||||||
|
headers["HTTP-Referer"] = 'https://risuai.xyz'
|
||||||
|
}
|
||||||
if(db.useStreaming && arg.useStreaming){
|
if(db.useStreaming && arg.useStreaming){
|
||||||
body.stream = true
|
body.stream = true
|
||||||
const da = ((!isTauri) && (!isNodeServer))
|
const da = ((!isTauri) && (!isNodeServer))
|
||||||
? await fetch(`/proxy2`, {
|
? await fetch(`/proxy2`, {
|
||||||
body: JSON.stringify(body),
|
body: JSON.stringify(body),
|
||||||
headers: {
|
headers: {
|
||||||
"risu-header": encodeURIComponent(JSON.stringify({
|
"risu-header": encodeURIComponent(JSON.stringify(headers)),
|
||||||
"Authorization": "Bearer " + ((aiModel === 'reverse_proxy') ? db.proxyKey : db.openAIKey),
|
|
||||||
"Content-Type": "application/json"
|
|
||||||
})),
|
|
||||||
"risu-url": encodeURIComponent(replacerURL),
|
"risu-url": encodeURIComponent(replacerURL),
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
},
|
},
|
||||||
@@ -198,10 +207,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
: await fetch(replacerURL, {
|
: await fetch(replacerURL, {
|
||||||
body: JSON.stringify(body),
|
body: JSON.stringify(body),
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: headers,
|
||||||
"Authorization": "Bearer " + ((aiModel === 'reverse_proxy') ? db.proxyKey : db.openAIKey),
|
|
||||||
"Content-Type": "application/json"
|
|
||||||
},
|
|
||||||
signal: abortSignal
|
signal: abortSignal
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -259,10 +265,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
|
|
||||||
const res = await globalFetch(replacerURL, {
|
const res = await globalFetch(replacerURL, {
|
||||||
body: body,
|
body: body,
|
||||||
headers: {
|
headers: headers,
|
||||||
"Authorization": "Bearer " + ((aiModel === 'reverse_proxy') ? db.proxyKey : db.openAIKey),
|
|
||||||
"Content-Type": "application/json"
|
|
||||||
},
|
|
||||||
abortSignal
|
abortSignal
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -267,6 +267,9 @@ export function setDatabase(data:Database){
|
|||||||
}
|
}
|
||||||
data.classicMaxWidth ??= false
|
data.classicMaxWidth ??= false
|
||||||
data.ooba ??= cloneDeep(defaultOoba)
|
data.ooba ??= cloneDeep(defaultOoba)
|
||||||
|
data.ainconfig ??= cloneDeep(defaultAIN)
|
||||||
|
data.openrouterKey ??= ''
|
||||||
|
data.openrouterRequestModel ??= 'openai/gpt-3.5-turbo'
|
||||||
changeLanguage(data.language)
|
changeLanguage(data.language)
|
||||||
DataBase.set(data)
|
DataBase.set(data)
|
||||||
}
|
}
|
||||||
@@ -539,6 +542,9 @@ export interface Database{
|
|||||||
proxyRequestModel:string
|
proxyRequestModel:string
|
||||||
ooba:OobaSettings
|
ooba:OobaSettings
|
||||||
ainconfig: AINsettings
|
ainconfig: AINsettings
|
||||||
|
|
||||||
|
openrouterRequestModel:string
|
||||||
|
openrouterKey:string
|
||||||
}
|
}
|
||||||
|
|
||||||
interface hordeConfig{
|
interface hordeConfig{
|
||||||
|
|||||||
Reference in New Issue
Block a user