Add triggercode cbs
This commit is contained in:
189
src/ts/parser.ts
189
src/ts/parser.ts
@@ -9,9 +9,14 @@ import css from '@adobe/css-tools'
|
|||||||
import { CurrentChat, SizeStore, selectedCharID } from './stores';
|
import { CurrentChat, SizeStore, selectedCharID } from './stores';
|
||||||
import { calcString } from './process/infunctions';
|
import { calcString } from './process/infunctions';
|
||||||
import { findCharacterbyId, parseKeyValue, sfc32, sleep, uuidtoNumber } from './util';
|
import { findCharacterbyId, parseKeyValue, sfc32, sleep, uuidtoNumber } from './util';
|
||||||
import { getInlayImage } from './process/files/image';
|
import { getInlayImage, writeInlayImage } from './process/files/image';
|
||||||
import { risuFormater } from './plugins/automark';
|
import { risuFormater } from './plugins/automark';
|
||||||
import { getModuleLorebooks } from './process/modules';
|
import { getModuleLorebooks } from './process/modules';
|
||||||
|
import { HypaProcesser } from './process/memory/hypamemory';
|
||||||
|
import { generateAIImage } from './process/stableDiff';
|
||||||
|
import { requestChatData } from './process/request';
|
||||||
|
import type { OpenAIChat } from './process';
|
||||||
|
import { alertInput, alertNormal } from './alert';
|
||||||
|
|
||||||
const mconverted = new Marked({
|
const mconverted = new Marked({
|
||||||
gfm: true,
|
gfm: true,
|
||||||
@@ -398,6 +403,7 @@ type matcherArg = {
|
|||||||
funcName?:string
|
funcName?:string
|
||||||
text?:string,
|
text?:string,
|
||||||
recursiveCount?:number
|
recursiveCount?:number
|
||||||
|
lowLevelAccess?:boolean
|
||||||
}
|
}
|
||||||
function basicMatcher (p1:string,matcherArg:matcherArg,vars:{[key:string]:string}|null = null ):{
|
function basicMatcher (p1:string,matcherArg:matcherArg,vars:{[key:string]:string}|null = null ):{
|
||||||
text:string,
|
text:string,
|
||||||
@@ -1725,6 +1731,57 @@ export async function commandMatcher(p1:string,matcherArg:matcherArg,vars:{[key:
|
|||||||
}
|
}
|
||||||
CurrentChat.set(chat)
|
CurrentChat.set(chat)
|
||||||
}
|
}
|
||||||
|
case 'set_chat_role':
|
||||||
|
case 'setchatrole':{
|
||||||
|
const chat = get(CurrentChat)
|
||||||
|
const message = chat.message?.at(Number(arra[1]))
|
||||||
|
if(message){
|
||||||
|
message.role = arra[2] === 'user' ? 'user' : 'char'
|
||||||
|
}
|
||||||
|
CurrentChat.set(chat)
|
||||||
|
}
|
||||||
|
case 'push_chat':
|
||||||
|
case 'add_chat':
|
||||||
|
case 'addchat':
|
||||||
|
case 'pushchat':{
|
||||||
|
const chat = get(CurrentChat)
|
||||||
|
chat.message.push({role: arra[1] === 'user' ? 'user' : 'char', data: arra[2] ?? ''})
|
||||||
|
CurrentChat.set(chat)
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'cutchat':
|
||||||
|
case 'cut_chat':{
|
||||||
|
const chat = get(CurrentChat)
|
||||||
|
chat.message = chat.message.slice(Number(arra[1]), Number(arra[2]))
|
||||||
|
CurrentChat.set(chat)
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'insertchat':
|
||||||
|
case 'insert_chat':{
|
||||||
|
const chat = get(CurrentChat)
|
||||||
|
chat.message.splice(Number(arra[1]), 0, {role: arra[2] === 'user' ? 'user' : 'char', data: arra[3] ?? ''})
|
||||||
|
CurrentChat.set(chat)
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'removechat':
|
||||||
|
case 'remove_chat':{
|
||||||
|
const chat = get(CurrentChat)
|
||||||
|
chat.message.splice(Number(arra[1]), 1)
|
||||||
|
CurrentChat.set(chat)
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
case 'regex':{
|
case 'regex':{
|
||||||
const reg = new RegExp(arra[1], arra[2])
|
const reg = new RegExp(arra[1], arra[2])
|
||||||
const match = reg.exec(arra[3])
|
const match = reg.exec(arra[3])
|
||||||
@@ -1759,6 +1816,136 @@ export async function commandMatcher(p1:string,matcherArg:matcherArg,vars:{[key:
|
|||||||
var: vars
|
var: vars
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case 'stop_chat':{
|
||||||
|
vars['__stop_chat__'] = '1'
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'similaritysearch':
|
||||||
|
case 'similarity_search':
|
||||||
|
case 'similarity':{
|
||||||
|
if(!matcherArg.lowLevelAccess){
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const processer = new HypaProcesser('MiniLM')
|
||||||
|
const source = arra[1]
|
||||||
|
const target = parseArray(arra[2])
|
||||||
|
await processer.addText(target)
|
||||||
|
const result = await processer.similaritySearch(source)
|
||||||
|
return {
|
||||||
|
text: makeArray(result),
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'image_generation':
|
||||||
|
case 'imagegeneration':
|
||||||
|
case 'imagegen':
|
||||||
|
case 'image_gen':{
|
||||||
|
if(!matcherArg.lowLevelAccess){
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const prompt = arra[1]
|
||||||
|
const negative = arra[2] || ''
|
||||||
|
const char = matcherArg.chara
|
||||||
|
|
||||||
|
const gen = await generateAIImage(prompt, char as character, negative, 'inlay')
|
||||||
|
if(!gen){
|
||||||
|
return {
|
||||||
|
text: 'ERROR: Image generation failed',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const imgHTML = new Image()
|
||||||
|
imgHTML.src = gen
|
||||||
|
const inlay = await writeInlayImage(imgHTML)
|
||||||
|
return {
|
||||||
|
text: inlay,
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'send_llm':
|
||||||
|
case 'llm':{
|
||||||
|
if(!matcherArg.lowLevelAccess){
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const prompt = parseArray(arra[1])
|
||||||
|
let promptbody:OpenAIChat[] = prompt.map((f) => {
|
||||||
|
const dict = parseDict(f)
|
||||||
|
let role:'system'|'user'|'assistant' = 'assistant'
|
||||||
|
switch(dict['role']){
|
||||||
|
case 'system':
|
||||||
|
case 'sys':
|
||||||
|
role = 'system'
|
||||||
|
break
|
||||||
|
case 'user':
|
||||||
|
role = 'user'
|
||||||
|
break
|
||||||
|
case 'assistant':
|
||||||
|
case 'bot':
|
||||||
|
case 'char':{
|
||||||
|
role = 'assistant'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
content: dict['content'] ?? '',
|
||||||
|
role: role,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const result = await requestChatData({
|
||||||
|
formated: promptbody,
|
||||||
|
bias: {},
|
||||||
|
useStreaming: false,
|
||||||
|
noMultiGen: true,
|
||||||
|
}, 'model')
|
||||||
|
|
||||||
|
if(result.type === 'fail'){
|
||||||
|
return {
|
||||||
|
text: 'ERROR: ' + result.result,
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result.type === 'streaming' || result.type === 'multiline'){
|
||||||
|
return {
|
||||||
|
text: 'ERROR: Streaming and multiline is not supported in this context',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
text: result.result,
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'alert':{
|
||||||
|
alertNormal(arra[1])
|
||||||
|
return {
|
||||||
|
text: '',
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'input':
|
||||||
|
case 'alert_input':
|
||||||
|
case 'alertinput':{
|
||||||
|
const input = await alertInput(arra[1])
|
||||||
|
return {
|
||||||
|
text: input,
|
||||||
|
var: vars
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const matched = basicMatcher(p1, matcherArg)
|
const matched = basicMatcher(p1, matcherArg)
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
|
|
||||||
interface TextSyntSyntaxTree {
|
|
||||||
name: string;
|
|
||||||
children: TextSyntSyntaxTree[];
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseMarkdownLikeYaml(text:string){
|
|
||||||
|
|
||||||
const lines = text.split('\n');
|
|
||||||
const root: TextSyntSyntaxTree = {name: 'root', children: []};
|
|
||||||
let rootHashIndentation = -1;
|
|
||||||
let currentIndentation = 0;
|
|
||||||
|
|
||||||
for(let i = 0; i < lines.length; i++){
|
|
||||||
const line = lines[i];
|
|
||||||
|
|
||||||
if(line.startsWith('#')){
|
|
||||||
let indentations = 0;
|
|
||||||
while(line[indentations] === '#'){
|
|
||||||
indentations++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(currentIndentation === 0 && rootHashIndentation === -1){
|
|
||||||
rootHashIndentation = indentations;
|
|
||||||
indentations = 1;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
indentations -= (rootHashIndentation - 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user