Refactor chat formatting and fix Harunai Memory

This commit is contained in:
kwaroran
2024-04-23 22:50:44 +09:00
parent 2abd3bf15a
commit 45acd4b6d8
4 changed files with 26 additions and 17 deletions

View File

@@ -721,6 +721,9 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
content: '',
} as const
}
else{
v.content = `<Previous Conversation>${v.content}</Previous Conversation>`
}
return v
}).filter((v) => {
return v.content !== ''

View File

@@ -13,9 +13,10 @@ export async function hanuraiMemory(chats:OpenAIChat[],arg:{
}){
const db = get(DataBase)
const tokenizer = arg.tokenizer
const processer = new HypaProcesser('nomic')
const processer = new HypaProcesser('MiniLM')
let addTexts:string[] = []
chats.map((chat) => {
if(!chat?.content?.trim()){
return
}
@@ -28,12 +29,14 @@ export async function hanuraiMemory(chats:OpenAIChat[],arg:{
addTexts.push(`search_document: ${split.trim()}`)
}
}
addTexts.push(`search_document: ${chat.content?.trim()}`)
else{
addTexts.push(`search_document: ${chat.content?.trim()}`)
}
})
processer.addText(addTexts)
await processer.addText(addTexts)
let scoredResults:{[key:string]:number} = {}
for(let i=1;i<5;i++){
for(let i=1;i<4;i++){
const chat = chats[chats.length-i]
if(!chat?.content){
continue
@@ -49,37 +52,39 @@ export async function hanuraiMemory(chats:OpenAIChat[],arg:{
}
}
}
const vectorResult = Object.entries(scoredResults).sort((a,b)=>a[1]-b[1])
const vectorResult = Object.entries(scoredResults).sort((a,b)=>b[1]-a[1])
let tokens = arg.currentTokens + db.hanuraiTokens
while(tokens < arg.maxContextTokens){
while(tokens > arg.maxContextTokens){
const poped = chats.pop()
if(!poped){
alertError(language.errors.toomuchtoken + "\n\nRequired Tokens: " + tokens)
return false
}
tokens -= await tokenizer.tokenizeChat(chats[0])
tokens -= await tokenizer.tokenizeChat(poped)
}
tokens -= db.hanuraiTokens
let resultTexts:string[] = []
for(const vector of vectorResult){
const chat = chats.find((chat) => chat.content === vector[0].substring(14))
const chat = chats.find((chat) => chat.content === vector[0].substring(16))
if(chat){
continue
}
const tokenized = await tokenizer.tokenizeChat(chat) + 2
const tokenized = await tokenizer.tokenizeChat({
role: 'system',
memo: 'supaMemory',
content: vector[0].substring(16)
}) + 2
tokens += tokenized
if(tokens >= arg.maxContextTokens){
tokens -= tokenized
break
}
resultTexts.push(vector[0].substring(14))
resultTexts.push(vector[0].substring(16))
}
console.log(resultTexts)
chats.unshift({
role: "system",
memo: "supaMemory",

View File

@@ -1,5 +1,4 @@
import localforage from "localforage";
import { similarity } from "ml-distance";
import { globalFetch } from "src/ts/storage/globalApi";
import { runEmbedding } from "../transformers";
@@ -144,7 +143,7 @@ export class HypaProcesser{
const memoryVectors = this.vectors
const searches = memoryVectors
.map((vector, index) => ({
similarity: similarity.cosine(query, vector.embedding),
similarity: similarity(query, vector.embedding),
index,
}))
.sort((a, b) => (a.similarity > b.similarity ? -1 : 0))
@@ -158,10 +157,12 @@ export class HypaProcesser{
}
similarityCheck(query1:number[],query2: number[]) {
return similarity.cosine(query1, query2)
return similarity(query1, query2)
}
}
function similarity(a:number[], b:number[]) {
return a.reduce((acc, val, i) => acc + val * b[i], 0);
}
type memoryVector = {
embedding:number[]

View File

@@ -395,7 +395,7 @@ export function setDatabase(data:Database){
data.openrouterProvider ??= ''
data.useInstructPrompt ??= false
data.hanuraiEnable ??= false
data.hanuraiSplit ??= true
data.hanuraiSplit ??= false
data.hanuraiTokens ??= 1000
changeLanguage(data.language)