[feat] new nai formating/kayra

This commit is contained in:
kwaroran
2023-07-29 08:57:28 +09:00
parent a370b9c033
commit 538d664baf
7 changed files with 465 additions and 21 deletions

View File

@@ -0,0 +1,363 @@
import { DataBase } from "src/ts/storage/database"
import type { OpenAIChat } from ".."
import { get } from "svelte/store"
export function stringlizeNAIChat(formated:OpenAIChat[], char:string = ''){
const db = get(DataBase)
let resultString:string[] = []
for(const form of formated){
if(form.role === 'system'){
if(form.memo === 'NewChatExample' || form.memo === 'NewChat'){
resultString.push('[conversation: start]\n***')
}
else{
resultString.push(form.content)
}
}
else if(form.name || form.role === 'assistant'){
resultString.push((form.name ?? char) + ": " + form.content)
}
else if(form.role === 'user'){
resultString.push(db.username + ": " + form.content)
}
else{
resultString.push(form.content)
}
}
return resultString.join('\n\n') + `\n\n${char}:`
}
export interface NAISettings{
topK: number
topP: number
topA: number
tailFreeSampling: number
repetitionPenalty: number
repetitionPenaltyRange: number
repetitionPenaltySlope: number
repostitionPenaltyPresence: number
seperator: string
frequencyPenalty: number
presencePenalty: number
typicalp:number
}
export const NovelAIBadWordIds = [
[60],
[62],
[544],
[683],
[696],
[880],
[905],
[1008],
[1019],
[1084],
[1092],
[1181],
[1184],
[1254],
[1447],
[1570],
[1656],
[2194],
[2470],
[2479],
[2498],
[2947],
[3138],
[3291],
[3455],
[3725],
[3851],
[3891],
[3921],
[3951],
[4207],
[4299],
[4622],
[4681],
[5013],
[5032],
[5180],
[5218],
[5290],
[5413],
[5456],
[5709],
[5749],
[5774],
[6038],
[6257],
[6334],
[6660],
[6904],
[7082],
[7086],
[7254],
[7444],
[7748],
[8001],
[8088],
[8168],
[8562],
[8605],
[8795],
[8850],
[9014],
[9102],
[9259],
[9318],
[9336],
[9502],
[9686],
[9793],
[9855],
[9899],
[9955],
[10148],
[10174],
[10943],
[11326],
[11337],
[11661],
[12004],
[12084],
[12159],
[12520],
[12977],
[13380],
[13488],
[13663],
[13811],
[13976],
[14412],
[14598],
[14767],
[15640],
[15707],
[15775],
[15830],
[16079],
[16354],
[16369],
[16445],
[16595],
[16614],
[16731],
[16943],
[17278],
[17281],
[17548],
[17555],
[17981],
[18022],
[18095],
[18297],
[18413],
[18736],
[18772],
[18990],
[19181],
[20095],
[20197],
[20481],
[20629],
[20871],
[20879],
[20924],
[20977],
[21375],
[21382],
[21391],
[21687],
[21810],
[21828],
[21938],
[22367],
[22372],
[22734],
[23405],
[23505],
[23734],
[23741],
[23781],
[24237],
[24254],
[24345],
[24430],
[25416],
[25896],
[26119],
[26635],
[26842],
[26991],
[26997],
[27075],
[27114],
[27468],
[27501],
[27618],
[27655],
[27720],
[27829],
[28052],
[28118],
[28231],
[28532],
[28571],
[28591],
[28653],
[29013],
[29547],
[29650],
[29925],
[30522],
[30537],
[30996],
[31011],
[31053],
[31096],
[31148],
[31258],
[31350],
[31379],
[31422],
[31789],
[31830],
[32214],
[32666],
[32871],
[33094],
[33376],
[33440],
[33805],
[34368],
[34398],
[34417],
[34418],
[34419],
[34476],
[34494],
[34607],
[34758],
[34761],
[34904],
[34993],
[35117],
[35138],
[35237],
[35487],
[35830],
[35869],
[36033],
[36134],
[36320],
[36399],
[36487],
[36586],
[36676],
[36692],
[36786],
[37077],
[37594],
[37596],
[37786],
[37982],
[38475],
[38791],
[39083],
[39258],
[39487],
[39822],
[40116],
[40125],
[41000],
[41018],
[41256],
[41305],
[41361],
[41447],
[41449],
[41512],
[41604],
[42041],
[42274],
[42368],
[42696],
[42767],
[42804],
[42854],
[42944],
[42989],
[43134],
[43144],
[43189],
[43521],
[43782],
[44082],
[44162],
[44270],
[44308],
[44479],
[44524],
[44965],
[45114],
[45301],
[45382],
[45443],
[45472],
[45488],
[45507],
[45564],
[45662],
[46265],
[46267],
[46275],
[46295],
[46462],
[46468],
[46576],
[46694],
[47093],
[47384],
[47389],
[47446],
[47552],
[47686],
[47744],
[47916],
[48064],
[48167],
[48392],
[48471],
[48664],
[48701],
[49021],
[49193],
[49236],
[49550],
[49694],
[49806],
[49824],
[50001],
[50256],
[0],
[1],
[3],
[49356],
[1431],
[31715],
[34387],
[20765],
[30702],
[10691],
[49333],
[1266],
[19438],
[43145],
[26523],
[41471],
[2936]
]

View File

@@ -8,6 +8,7 @@ import { globalFetch, isNodeServer, isTauri } from "../storage/globalApi";
import { sleep } from "../util";
import { createDeep } from "./deepai";
import { hubURL } from "../characterCards";
import { NovelAIBadWordIds, stringlizeNAIChat } from "./models/nai";
interface requestDataArgument{
formated: OpenAIChat[]
@@ -317,28 +318,41 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
}
case 'novelai':
case 'novelai_kayra':{
const proompt = stringlizeChat(formated, currentChar?.name ?? '')
const params = {
const proompt = stringlizeNAIChat(formated, currentChar?.name ?? '')
const gen = db.NAIsettings
const payload = {
temperature:temperature,
max_length: maxTokens,
min_length: 1,
top_k: gen.topK,
top_p: gen.topP,
top_a: gen.topA,
tail_free_sampling: gen.tailFreeSampling,
repetition_penalty: gen.repetitionPenalty,
repetition_penalty_range: gen.repetitionPenaltyRange,
repetition_penalty_slope: gen.repetitionPenaltySlope,
repetition_penalty_frequency: gen.frequencyPenalty,
repetition_penalty_presence: gen.presencePenalty,
generate_until_sentence: true,
use_cache: false,
use_string: true,
return_full_text: false,
prefix: 'vanilla',
order: [3,0],
bad_words_ids: NovelAIBadWordIds,
typical_p: gen.typicalp,
}
const body = {
"input": proompt,
"model":db.novelai.model,
"parameters":{
"use_string":true,
"temperature":1.7,
"max_length":90,
"min_length":1,
"tail_free_sampling":0.6602,
"repetition_penalty":1.0565,
"repetition_penalty_range":340,
"repetition_penalty_frequency":0,
"repetition_penalty_presence":0,
"use_cache":false,
"return_full_text":false,
"prefix":"vanilla",
"order":[3,0]}
"parameters":payload
}
const da = await globalFetch("https://api.novelai.net/ai/generate", {
body: params,
body: body,
headers: {
"Authorization": "Bearer " + db.novelai.token
},

View File

@@ -1,6 +1,6 @@
import { DataBase, setPreset, type botPreset, setDatabase } from "src/ts/storage/database";
import { get } from "svelte/store";
import { prebuiltPresets } from "./templates";
import { prebuiltNAIpresets, prebuiltPresets } from "./templates";
import { alertConfirm, alertSelect } from "src/ts/alert";
import { language } from "src/lang";
@@ -20,6 +20,17 @@ export async function setRecommended(model: string, ask:'ask'|'force') {
const pr:botPreset = prebuiltPresets.OAI
setDatabase(setPreset(db, pr))
}
else if(db.aiModel.startsWith('novelai')){
const pr:botPreset = prebuiltPresets.OAI
pr.NAISettings = prebuiltNAIpresets
pr.temperature = 1.05
pr.maxContext = 8000
pr.maxResponse = 300
pr.mainPrompt = "***\n[ Style: chat ]"
pr.jailbreak = ''
pr.globalNote = ''
setDatabase(setPreset(db, pr))
}
else if(db.aiModel === 'textgen_webui'){
const sel = parseInt(await alertSelect(["Llama, Alpaca", "Koala", "Vicuna", "WizardLM", "Others"]))
let pr = prebuiltPresets.ooba
@@ -60,5 +71,5 @@ export async function setRecommended(model: string, ask:'ask'|'force') {
}
export function recommendedPresetExist(model:string){
return model.startsWith('gpt') || model === 'openrouter' || model === 'reverse_proxy' || model === 'textgen_webui'
return model.startsWith('gpt') || model === 'openrouter' || model === 'reverse_proxy' || model === 'textgen_webui' || model.startsWith('novelai')
}

View File

@@ -1,4 +1,5 @@
import type { botPreset } from "../../storage/database";
import type { NAISettings } from "../models/nai";
export const prebuiltPresets:{OAI:botPreset,ooba:botPreset} = {
@@ -137,4 +138,20 @@ export const prebuiltPresets:{OAI:botPreset,ooba:botPreset} = {
"top_k": 140
}
}
}
export const prebuiltNAIpresets:NAISettings = {
topK: 12,
topP: 0.85,
topA: 0.1,
tailFreeSampling: 0.915,
repetitionPenalty: 2.8,
repetitionPenaltyRange: 2048,
repetitionPenaltySlope: 0.02,
repostitionPenaltyPresence: 0,
seperator: "",
frequencyPenalty: 0.03,
presencePenalty: 0,
typicalp: 1
}