[feat] add mistral support
This commit is contained in:
@@ -148,6 +148,9 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
||||
case 'gpt4_0301':
|
||||
case 'gptvi4_1106':
|
||||
case 'openrouter':
|
||||
case 'mistral-tiny':
|
||||
case 'mistral-small':
|
||||
case 'mistral-medium':
|
||||
case 'reverse_proxy':{
|
||||
let formatedChat:OpenAIChatExtra[] = []
|
||||
|
||||
@@ -281,6 +284,53 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
|
||||
requestModel = db.customProxyRequestModel
|
||||
}
|
||||
|
||||
if(aiModel.startsWith('mistral')){
|
||||
requestModel = aiModel
|
||||
|
||||
const res = await globalFetch("https://api.mistral.ai/v1/chat/completions", {
|
||||
body: {
|
||||
model: requestModel,
|
||||
messages: formatedChat,
|
||||
temperature: temperature,
|
||||
max_tokens: maxTokens,
|
||||
top_p: db.top_p,
|
||||
},
|
||||
headers: {
|
||||
"Authorization": "Bearer " + db.mistralKey,
|
||||
},
|
||||
abortSignal,
|
||||
})
|
||||
|
||||
const dat = res.data as any
|
||||
if(res.ok){
|
||||
try {
|
||||
const msg:OpenAIChatFull = (dat.choices[0].message)
|
||||
return {
|
||||
type: 'success',
|
||||
result: msg.content
|
||||
}
|
||||
} catch (error) {
|
||||
return {
|
||||
type: 'fail',
|
||||
result: (language.errors.httpError + `${JSON.stringify(dat)}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(dat.error && dat.error.message){
|
||||
return {
|
||||
type: 'fail',
|
||||
result: (language.errors.httpError + `${dat.error.message}`)
|
||||
}
|
||||
}
|
||||
else{
|
||||
return {
|
||||
type: 'fail',
|
||||
result: (language.errors.httpError + `${JSON.stringify(res.data)}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
db.cipherChat = false
|
||||
let body = ({
|
||||
|
||||
@@ -559,6 +559,7 @@ export interface Database{
|
||||
accessToken: string
|
||||
projectId: string
|
||||
}
|
||||
mistralKey?:string
|
||||
}
|
||||
|
||||
export interface customscript{
|
||||
|
||||
@@ -18,6 +18,9 @@ async function encode(data:string):Promise<(number[]|Uint32Array|Int32Array)>{
|
||||
if(db.aiModel.startsWith('novelai')){
|
||||
return await tokenizeWebTokenizers(data, 'novelai')
|
||||
}
|
||||
if(db.aiModel.startsWith('mistral')){
|
||||
return await tokenizeWebTokenizers(data, 'mistral')
|
||||
}
|
||||
if(db.aiModel.startsWith('local_') ||
|
||||
db.aiModel === 'mancer' ||
|
||||
db.aiModel === 'textgen_webui' ||
|
||||
@@ -29,7 +32,7 @@ async function encode(data:string):Promise<(number[]|Uint32Array|Int32Array)>{
|
||||
return await tikJS(data)
|
||||
}
|
||||
|
||||
type tokenizerType = 'novellist'|'claude'|'novelai'|'llama'
|
||||
type tokenizerType = 'novellist'|'claude'|'novelai'|'llama'|'mistral'
|
||||
|
||||
let tikParser:Tiktoken = null
|
||||
let tokenizersTokenizer:Tokenizer = null
|
||||
@@ -73,6 +76,12 @@ async function tokenizeWebTokenizers(text:string, type:tokenizerType) {
|
||||
tokenizersTokenizer = await webTokenizer.Tokenizer.fromSentencePiece(
|
||||
await (await fetch("/token/llama/llama.model")
|
||||
).arrayBuffer())
|
||||
break
|
||||
case 'mistral':
|
||||
tokenizersTokenizer = await webTokenizer.Tokenizer.fromSentencePiece(
|
||||
await (await fetch("/token/mistral/tokenizer.model")
|
||||
).arrayBuffer())
|
||||
break
|
||||
|
||||
}
|
||||
tokenizersType = type
|
||||
|
||||
Reference in New Issue
Block a user