[feat] claude support
This commit is contained in:
@@ -79,6 +79,13 @@
|
|||||||
$DataBase.maxContext = 4000
|
$DataBase.maxContext = 4000
|
||||||
$DataBase.maxResponse = 500
|
$DataBase.maxResponse = 500
|
||||||
}
|
}
|
||||||
|
else if(v.startsWith('claude')){
|
||||||
|
$DataBase.maxContext = 7500
|
||||||
|
$DataBase.maxResponse = 500
|
||||||
|
if(v.endsWith('100k')){
|
||||||
|
$DataBase.maxContext = 99500
|
||||||
|
}
|
||||||
|
}
|
||||||
else{
|
else{
|
||||||
$DataBase.maxContext = 1500
|
$DataBase.maxContext = 1500
|
||||||
$DataBase.maxResponse = 200
|
$DataBase.maxResponse = 200
|
||||||
@@ -94,6 +101,11 @@
|
|||||||
<span class="text-neutral-200">Palm2 {language.apiKey}</span>
|
<span class="text-neutral-200">Palm2 {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.palmAPI}>
|
<input class="text-neutral-200 mb-4 p-2 bg-transparent input-text focus:bg-selected text-sm" placeholder="..." bind:value={$DataBase.palmAPI}>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
{#if $DataBase.aiModel.startsWith('claude') || $DataBase.subModel.startsWith('claude')}
|
||||||
|
<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}>
|
||||||
|
{/if}
|
||||||
{#if $DataBase.aiModel === 'gpt35' || $DataBase.aiModel === 'gpt4' || $DataBase.subModel === 'gpt4' || $DataBase.subModel === 'gpt35'|| $DataBase.aiModel === 'gpt4_32k' || $DataBase.subModel === 'gpt4_32k'}
|
{#if $DataBase.aiModel === 'gpt35' || $DataBase.aiModel === 'gpt4' || $DataBase.subModel === 'gpt4' || $DataBase.subModel === 'gpt35'|| $DataBase.aiModel === 'gpt4_32k' || $DataBase.subModel === 'gpt4_32k'}
|
||||||
<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}>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
if(name.startsWith("horde:::")){
|
if(name.startsWith("horde:::")){
|
||||||
return name.replace(":::", " ")
|
return name.replace(":::", " ")
|
||||||
}
|
}
|
||||||
return ''
|
return name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,6 +55,12 @@
|
|||||||
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4')}}>GPT-4</button>
|
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4')}}>GPT-4</button>
|
||||||
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_32k')}}>GPT-4 32K</button>
|
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('gpt4_32k')}}>GPT-4 32K</button>
|
||||||
</Arcodion>
|
</Arcodion>
|
||||||
|
<Arcodion name="Anthropic Claude">
|
||||||
|
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-v1')}}>claude-v1</button>
|
||||||
|
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-v1-100k')}}>claude-v1-100k</button>
|
||||||
|
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-instant-v1')}}>claude-instant-v1</button>
|
||||||
|
<button class="p-2 hover:text-green-500" on:click={() => {changeModel('claude-instant-v1-100k')}}>claude-instant-v1-100k</button>
|
||||||
|
</Arcodion>
|
||||||
<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>
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
const db = get(DataBase)
|
const db = get(DataBase)
|
||||||
let result = ''
|
let result = ''
|
||||||
let formated = arg.formated
|
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 bias = arg.bias
|
||||||
let currentChar = arg.currentChar
|
let currentChar = arg.currentChar
|
||||||
const replacer = model === 'model' ? db.forceReplaceUrl : db.forceReplaceUrl2
|
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'
|
model: aiModel === 'gpt35' ? 'gpt-3.5-turbo'
|
||||||
: aiModel === 'gpt4' ? 'gpt-4' : 'gpt-4-32k',
|
: aiModel === 'gpt4' ? 'gpt-4' : 'gpt-4-32k',
|
||||||
messages: formated,
|
messages: formated,
|
||||||
temperature: arg.temperature ?? (db.temperature / 100),
|
temperature: temperature,
|
||||||
max_tokens: arg.maxTokens ?? maxTokens,
|
max_tokens: arg.maxTokens ?? maxTokens,
|
||||||
presence_penalty: arg.PresensePenalty ?? (db.PresensePenalty / 100),
|
presence_penalty: arg.PresensePenalty ?? (db.PresensePenalty / 100),
|
||||||
frequency_penalty: arg.frequencyPenalty ?? (db.frequencyPenalty / 100),
|
frequency_penalty: arg.frequencyPenalty ?? (db.frequencyPenalty / 100),
|
||||||
@@ -460,6 +461,65 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:{
|
default:{
|
||||||
|
if(aiModel.startsWith('claude')){
|
||||||
|
for(let i=0;i<formated.length;i++){
|
||||||
|
if(arg.isGroupChat && formated[i].name){
|
||||||
|
formated[i].content = formated[i].name + ": " + formated[i].content
|
||||||
|
}
|
||||||
|
formated[i].name = undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let requestPrompt = formated.map((v) => {
|
||||||
|
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:::")){
|
if(aiModel.startsWith("horde:::")){
|
||||||
const proompt = stringlizeChat(formated, currentChar?.name ?? '')
|
const proompt = stringlizeChat(formated, currentChar?.name ?? '')
|
||||||
|
|
||||||
|
|||||||
@@ -500,7 +500,8 @@ export interface Database{
|
|||||||
koboldURL:string
|
koboldURL:string
|
||||||
advancedBotSettings:boolean
|
advancedBotSettings:boolean
|
||||||
useAutoSuggestions:boolean
|
useAutoSuggestions:boolean
|
||||||
autoSuggestPrompt:string
|
autoSuggestPrompt:string,
|
||||||
|
claudeAPIKey:string
|
||||||
}
|
}
|
||||||
|
|
||||||
interface hordeConfig{
|
interface hordeConfig{
|
||||||
|
|||||||
Reference in New Issue
Block a user