Add ooba convertion

This commit is contained in:
kwaroran
2024-09-09 18:17:26 +09:00
parent 30357a8002
commit 611f3e4b94
3 changed files with 73 additions and 17 deletions

View File

@@ -2,6 +2,7 @@ import { get } from "svelte/store";
import { tokenizeAccurate } from "../tokenizer";
import { DataBase, presetTemplate, setDatabase, type Database } from "../storage/database";
import { alertError, alertNormal } from "../alert";
import type { OobaChatCompletionRequestParams } from "../model/ooba";
export type PromptItem = PromptItemPlain|PromptItemTyped|PromptItemChat|PromptItemAuthorNote;
export type PromptType = PromptItem['type'];
@@ -218,6 +219,42 @@ export function stChatConvert(pre:any){
return promptTemplate
}
export const OobaParams = [
"tokenizer",
"min_p",
"top_k",
"repetition_penalty",
"repetition_penalty_range",
"typical_p",
"tfs",
"top_a",
"epsilon_cutoff",
"eta_cutoff",
"guidance_scale",
"negative_prompt",
"penalty_alpha",
"mirostat_mode",
"mirostat_tau",
"mirostat_eta",
"temperature_last",
"do_sample",
"seed",
"encoder_repetition_penalty",
"no_repeat_ngram_size",
"min_length",
"num_beams",
"length_penalty",
"early_stopping",
"truncation_length",
"max_tokens_second",
"custom_token_bans",
"auto_max_new_tokens",
"ban_eos_token",
"add_bos_token",
"skip_special_tokens",
"grammar_string"
]
export function promptConvertion(files:{ name: string, content: string, type:string }[]){
let preset = structuredClone(presetTemplate)
let instData = {
@@ -263,26 +300,37 @@ export function promptConvertion(files:{ name: string, content: string, type:str
}
let samplers:string[] = []
const getParam = (setname:keyof(typeof preset), getname:string = '', arg:{
multiplier?: number
}={}) => {
if(getname === ''){
getname = setname
}
let multiplier = arg.multiplier ?? 1
if(samplers.includes(getname)){
// @ts-ignore
preset[setname] = data[getname] * multiplier
}
else{
// @ts-ignore
preset[setname] = -1000
}
let oobaData:OobaChatCompletionRequestParams = {
mode: 'instruct',
}
for(let i=0;i<files.length;i++){
const file = files[i]
const data = JSON.parse(file.content)
const getParam = (setname:keyof(typeof preset), getname:string = '', arg:{
multiplier?: number
}={}) => {
if(getname === ''){
getname = setname
}
let multiplier = arg.multiplier ?? 1
if(samplers.includes(getname)){
//@ts-ignore
preset[setname] = data[getname] * multiplier
}
else{
// @ts-ignore
preset[setname] = -1000
}
if(OobaParams.includes(getname)){
oobaData[getname] = data[getname]
}
}
preset.name ||= instData.name ?? ''
switch(file.type){
case 'STINST':{
@@ -304,6 +352,11 @@ export function promptConvertion(files:{ name: string, content: string, type:str
getParam('repetition_penalty', 'rep_pen')
getParam('frequencyPenalty', 'freq_pen', {multiplier: 100})
getParam('PresensePenalty', 'presence_penalty', {multiplier: 100})
for(const key of OobaParams){
if(samplers.includes(key) && (data[key] !== undefined) && (data[key] !== null)){
oobaData[key] = data[key]
}
}
break
}
case 'STCONTEXT':{
@@ -338,6 +391,8 @@ export function promptConvertion(files:{ name: string, content: string, type:str
return
}
preset.reverseProxyOobaArgs = oobaData
preset.promptTemplate = [{
type: 'plain',
type2: 'main',

View File

@@ -21,6 +21,7 @@ import { runTransformers } from "./transformers";
import {createParser} from 'eventsource-parser'
import {Ollama} from 'ollama/dist/browser.mjs'
import { applyChatTemplate } from "./templates/chatTemplate";
import { OobaParams } from "./prompt";
@@ -1076,7 +1077,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
const OobaBodyTemplate = db.reverseProxyOobaArgs
const keys = Object.keys(OobaBodyTemplate)
for(const key of keys){
if(OobaBodyTemplate[key] !== undefined && OobaBodyTemplate[key] !== null){
if(OobaBodyTemplate[key] !== undefined && OobaBodyTemplate[key] !== null && OobaParams.includes(key)){
bodyTemplate[key] = OobaBodyTemplate[key]
}
else if(bodyTemplate[key]){

View File

@@ -1081,7 +1081,7 @@ interface AINsettings{
top_k:number
}
interface OobaSettings{
export interface OobaSettings{
max_new_tokens: number,
do_sample: boolean,
temperature: number,