diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte
index 48100f05..a9aeea4f 100644
--- a/src/lib/ChatScreens/DefaultChatScreen.svelte
+++ b/src/lib/ChatScreens/DefaultChatScreen.svelte
@@ -651,6 +651,10 @@
messageInput += res.data
updateInputSizeAll()
}
+ if(res?.type === 'text'){
+ messageInput += `{{file::${res.name}::${res.data}}}`
+ updateInputSizeAll()
+ }
}}>
{language.postFile}
diff --git a/src/styles.css b/src/styles.css
index 6219fd08..b1b28a67 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -162,4 +162,16 @@ html, body{
.text-bordered{
-webkit-text-stroke: 1px #000;
+}
+
+.x-risu-risu-file{
+ padding: 1rem;
+ border: 1px solid var(--risu-theme-selected);
+ border-radius: 0.5rem;
+ color: var(--FontColorStandard);
+ min-width: 0;
+ max-width: 20rem;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
}
\ No newline at end of file
diff --git a/src/ts/parser.ts b/src/ts/parser.ts
index a3ae4d3f..be806927 100644
--- a/src/ts/parser.ts
+++ b/src/ts/parser.ts
@@ -393,6 +393,7 @@ type matcherArg = {
var?:{[key:string]:string}
tokenizeAccurate?:boolean
consistantChar?:boolean
+ displaying?:boolean
}
const matcher = (p1:string,matcherArg:matcherArg) => {
if(p1.length > 100000){
@@ -680,6 +681,12 @@ const matcher = (p1:string,matcherArg:matcherArg) => {
case 'not':{
return (Number(arra[1]) === 0) ? '1' : '0'
}
+ case 'file':{
+ if(matcherArg.displaying){
+ return `
${arra[1]}
`
+ }
+ return Buffer.from(arra[2], 'base64').toString('utf-8')
+ }
}
}
if(p1.startsWith('random')){
@@ -852,7 +859,8 @@ export function risuChatParser(da:string, arg:{
rmVar: arg.rmVar ?? false,
db: db,
var: arg.var ?? null,
- tokenizeAccurate: arg.tokenizeAccurate ?? false
+ tokenizeAccurate: arg.tokenizeAccurate ?? false,
+ displaying: arg.visualize ?? false,
}
let pef = performance.now()
while(pointer < da.length){
diff --git a/src/ts/process/files/multisend.ts b/src/ts/process/files/multisend.ts
index e2d4669d..1117c535 100644
--- a/src/ts/process/files/multisend.ts
+++ b/src/ts/process/files/multisend.ts
@@ -93,9 +93,10 @@ async function sendPofile(arg:sendFileArg){
}
async function sendPDFFile(arg:sendFileArg) {
- const pdfjsLib = (await import('pdfjs-dist')).default;
+ const pdfjsLib = (await import('pdfjs-dist'));
+ const pdfjsWorker = await import('pdfjs-dist/build/pdf.worker?worker&url');
+ pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker.default;
const pdf = await pdfjsLib.getDocument({data: arg.file}).promise;
- const db = get(DataBase)
const texts:string[] = []
for(let i = 1; i<=pdf.numPages; i++){
const page = await pdf.getPage(i);
@@ -105,30 +106,40 @@ async function sendPDFFile(arg:sendFileArg) {
texts.push(item.str)
}
}
+ console.log(texts)
const hypa = new HypaProcesser('MiniLM')
hypa.addText(texts)
- let currentChar = db.characters[get(selectedCharID)]
- let currentChat = currentChar.chats[currentChar.chatPage]
const result = await hypa.similaritySearch(arg.query)
- let message = arg.query
+ let message = ''
for(let i = 0; i5){
break
}
}
- currentChat.message.push({
- role: 'user',
- data: message
- })
-
- currentChar.chats[currentChar.chatPage] = currentChat
- db.characters[get(selectedCharID)] = currentChar
- setDatabase(db)
- await sendChat(-1)
+ console.log(message)
+ return Buffer.from(`\n${message}\n\n`).toString('base64')
}
-type postFileResult = postFileResultImage | postFileResultVoid
+async function sendTxtFile(arg:sendFileArg) {
+ const lines = arg.file.split('\n').filter((a) => {
+ return a !== ''
+ })
+ const hypa = new HypaProcesser('MiniLM')
+ hypa.addText(lines)
+ const result = await hypa.similaritySearch(arg.query)
+ let message = ''
+ for(let i = 0; i5){
+ break
+ }
+ }
+ console.log(message)
+ return Buffer.from(`\n${message}\n\n`).toString('base64')
+}
+
+type postFileResult = postFileResultImage | postFileResultVoid | postFileResultText
type postFileResultImage = {
data: string,
@@ -139,6 +150,11 @@ type postFileResultVoid = {
type: 'void',
}
+type postFileResultText = {
+ data: string,
+ type: 'text',
+ name: string
+}
export async function postChatFile(query:string):Promise{
const file = await selectSingleFile([
//image format
@@ -147,7 +163,8 @@ export async function postChatFile(query:string):Promise{
'png',
'webp',
'po',
- 'pdf'
+ // 'pdf',
+ 'txt'
])
if(!file){
@@ -168,12 +185,13 @@ export async function postChatFile(query:string):Promise{
}
}
case 'pdf':{
- await sendPDFFile({
- file: BufferToText(file.data),
- query: query
- })
return {
- type: 'void'
+ type: 'text',
+ data: await sendPDFFile({
+ file: BufferToText(file.data),
+ query: query
+ }),
+ name: file.name
}
}
case 'jpg':
@@ -186,6 +204,16 @@ export async function postChatFile(query:string):Promise{
type: 'image'
}
}
+ case 'txt':{
+ return {
+ type: 'text',
+ data: await sendTxtFile({
+ file: BufferToText(file.data),
+ query: query
+ }),
+ name: file.name
+ }
+ }
}
return