From b8ed9fd1ecadcf4b270f33c8c2fbb0955c856e8d Mon Sep 17 00:00:00 2001 From: kwaroran Date: Tue, 6 Jun 2023 09:19:57 +0900 Subject: [PATCH] [feat] claude support --- src/lib/Setting/Pages/BotSettings.svelte | 12 +++++ src/lib/UI/ModelList.svelte | 8 ++- src/ts/process/request.ts | 64 +++++++++++++++++++++++- src/ts/storage/database.ts | 3 +- 4 files changed, 83 insertions(+), 4 deletions(-) diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte index 700d719e..92f2c597 100644 --- a/src/lib/Setting/Pages/BotSettings.svelte +++ b/src/lib/Setting/Pages/BotSettings.svelte @@ -79,6 +79,13 @@ $DataBase.maxContext = 4000 $DataBase.maxResponse = 500 } + else if(v.startsWith('claude')){ + $DataBase.maxContext = 7500 + $DataBase.maxResponse = 500 + if(v.endsWith('100k')){ + $DataBase.maxContext = 99500 + } + } else{ $DataBase.maxContext = 1500 $DataBase.maxResponse = 200 @@ -94,6 +101,11 @@ Palm2 {language.apiKey} {/if} + +{#if $DataBase.aiModel.startsWith('claude') || $DataBase.subModel.startsWith('claude')} + Claude {language.apiKey} + +{/if} {#if $DataBase.aiModel === 'gpt35' || $DataBase.aiModel === 'gpt4' || $DataBase.subModel === 'gpt4' || $DataBase.subModel === 'gpt35'|| $DataBase.aiModel === 'gpt4_32k' || $DataBase.subModel === 'gpt4_32k'} OpenAI {language.apiKey} diff --git a/src/lib/UI/ModelList.svelte b/src/lib/UI/ModelList.svelte index fb89d73a..ddcd9d8a 100644 --- a/src/lib/UI/ModelList.svelte +++ b/src/lib/UI/ModelList.svelte @@ -31,7 +31,7 @@ if(name.startsWith("horde:::")){ return name.replace(":::", " ") } - return '' + return name } } @@ -55,6 +55,12 @@ + + + + + + diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index 14167231..7ebc7917 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -48,7 +48,8 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' const db = get(DataBase) let result = '' let formated = arg.formated - let maxTokens = db.maxResponse + let maxTokens = arg.maxTokens ??db.maxResponse + let temperature = arg.temperature ?? (db.temperature / 100) let bias = arg.bias let currentChar = arg.currentChar const replacer = model === 'model' ? db.forceReplaceUrl : db.forceReplaceUrl2 @@ -70,7 +71,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' model: aiModel === 'gpt35' ? 'gpt-3.5-turbo' : aiModel === 'gpt4' ? 'gpt-4' : 'gpt-4-32k', messages: formated, - temperature: arg.temperature ?? (db.temperature / 100), + temperature: temperature, max_tokens: arg.maxTokens ?? maxTokens, presence_penalty: arg.PresensePenalty ?? (db.PresensePenalty / 100), frequency_penalty: arg.frequencyPenalty ?? (db.frequencyPenalty / 100), @@ -460,6 +461,65 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' } } default:{ + if(aiModel.startsWith('claude')){ + for(let i=0;i { + let prefix = '' + switch (v.role){ + case "assistant": + prefix = "\n\nAssistant: " + break + case "user": + prefix = "\n\nHuman: " + break + case "system": + prefix = "\n\nSystem: " + break + } + return prefix + v.content + }).join('') + '\n\nAssistant: ' + + console.log(requestPrompt) + + const da = await globalFetch('https://api.anthropic.com/v1/complete', { + method: "POST", + body: { + prompt : "\n\nHuman: " + requestPrompt, + model: aiModel, + max_tokens_to_sample: maxTokens, + stop_sequences: ["\n\nHuman:", "\n\nSystem:", "\n\nAssistant:"], + temperature: temperature, + }, + headers: { + "Content-Type": "application/json", + "x-api-key": db.claudeAPIKey + } + }) + + if((!da.ok) || (da.data.error)){ + return { + type: 'fail', + result: `${JSON.stringify(da.data)}` + } + } + + const res = da.data + + console.log(res) + return { + type: "success", + result: res.completion, + } + + } if(aiModel.startsWith("horde:::")){ const proompt = stringlizeChat(formated, currentChar?.name ?? '') diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 7bcb1ec9..044901b9 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -500,7 +500,8 @@ export interface Database{ koboldURL:string advancedBotSettings:boolean useAutoSuggestions:boolean - autoSuggestPrompt:string + autoSuggestPrompt:string, + claudeAPIKey:string } interface hordeConfig{