Refactor chat formatting and fix Harunai Memory
This commit is contained in:
@@ -721,6 +721,9 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
|
|||||||
content: '',
|
content: '',
|
||||||
} as const
|
} as const
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
v.content = `<Previous Conversation>${v.content}</Previous Conversation>`
|
||||||
|
}
|
||||||
return v
|
return v
|
||||||
}).filter((v) => {
|
}).filter((v) => {
|
||||||
return v.content !== ''
|
return v.content !== ''
|
||||||
|
|||||||
@@ -13,9 +13,10 @@ export async function hanuraiMemory(chats:OpenAIChat[],arg:{
|
|||||||
}){
|
}){
|
||||||
const db = get(DataBase)
|
const db = get(DataBase)
|
||||||
const tokenizer = arg.tokenizer
|
const tokenizer = arg.tokenizer
|
||||||
const processer = new HypaProcesser('nomic')
|
const processer = new HypaProcesser('MiniLM')
|
||||||
let addTexts:string[] = []
|
let addTexts:string[] = []
|
||||||
chats.map((chat) => {
|
chats.map((chat) => {
|
||||||
|
|
||||||
if(!chat?.content?.trim()){
|
if(!chat?.content?.trim()){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -28,12 +29,14 @@ export async function hanuraiMemory(chats:OpenAIChat[],arg:{
|
|||||||
addTexts.push(`search_document: ${split.trim()}`)
|
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} = {}
|
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]
|
const chat = chats[chats.length-i]
|
||||||
if(!chat?.content){
|
if(!chat?.content){
|
||||||
continue
|
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
|
let tokens = arg.currentTokens + db.hanuraiTokens
|
||||||
|
|
||||||
while(tokens < arg.maxContextTokens){
|
while(tokens > arg.maxContextTokens){
|
||||||
const poped = chats.pop()
|
const poped = chats.pop()
|
||||||
if(!poped){
|
if(!poped){
|
||||||
alertError(language.errors.toomuchtoken + "\n\nRequired Tokens: " + tokens)
|
alertError(language.errors.toomuchtoken + "\n\nRequired Tokens: " + tokens)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
tokens -= await tokenizer.tokenizeChat(chats[0])
|
tokens -= await tokenizer.tokenizeChat(poped)
|
||||||
}
|
}
|
||||||
|
|
||||||
tokens -= db.hanuraiTokens
|
tokens -= db.hanuraiTokens
|
||||||
|
|
||||||
let resultTexts:string[] = []
|
let resultTexts:string[] = []
|
||||||
for(const vector of vectorResult){
|
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){
|
if(chat){
|
||||||
continue
|
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
|
tokens += tokenized
|
||||||
if(tokens >= arg.maxContextTokens){
|
if(tokens >= arg.maxContextTokens){
|
||||||
tokens -= tokenized
|
tokens -= tokenized
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
resultTexts.push(vector[0].substring(14))
|
resultTexts.push(vector[0].substring(16))
|
||||||
}
|
}
|
||||||
console.log(resultTexts)
|
|
||||||
chats.unshift({
|
chats.unshift({
|
||||||
role: "system",
|
role: "system",
|
||||||
memo: "supaMemory",
|
memo: "supaMemory",
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import localforage from "localforage";
|
import localforage from "localforage";
|
||||||
import { similarity } from "ml-distance";
|
|
||||||
import { globalFetch } from "src/ts/storage/globalApi";
|
import { globalFetch } from "src/ts/storage/globalApi";
|
||||||
import { runEmbedding } from "../transformers";
|
import { runEmbedding } from "../transformers";
|
||||||
|
|
||||||
@@ -144,7 +143,7 @@ export class HypaProcesser{
|
|||||||
const memoryVectors = this.vectors
|
const memoryVectors = this.vectors
|
||||||
const searches = memoryVectors
|
const searches = memoryVectors
|
||||||
.map((vector, index) => ({
|
.map((vector, index) => ({
|
||||||
similarity: similarity.cosine(query, vector.embedding),
|
similarity: similarity(query, vector.embedding),
|
||||||
index,
|
index,
|
||||||
}))
|
}))
|
||||||
.sort((a, b) => (a.similarity > b.similarity ? -1 : 0))
|
.sort((a, b) => (a.similarity > b.similarity ? -1 : 0))
|
||||||
@@ -158,10 +157,12 @@ export class HypaProcesser{
|
|||||||
}
|
}
|
||||||
|
|
||||||
similarityCheck(query1:number[],query2: number[]) {
|
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 = {
|
type memoryVector = {
|
||||||
embedding:number[]
|
embedding:number[]
|
||||||
|
|||||||
@@ -395,7 +395,7 @@ export function setDatabase(data:Database){
|
|||||||
data.openrouterProvider ??= ''
|
data.openrouterProvider ??= ''
|
||||||
data.useInstructPrompt ??= false
|
data.useInstructPrompt ??= false
|
||||||
data.hanuraiEnable ??= false
|
data.hanuraiEnable ??= false
|
||||||
data.hanuraiSplit ??= true
|
data.hanuraiSplit ??= false
|
||||||
data.hanuraiTokens ??= 1000
|
data.hanuraiTokens ??= 1000
|
||||||
|
|
||||||
changeLanguage(data.language)
|
changeLanguage(data.language)
|
||||||
|
|||||||
Reference in New Issue
Block a user