完成 EDL 的构建,完成 QA 的拒答流

This commit is contained in:
锦恢 2024-06-07 02:27:19 +08:00
parent b439c4de7e
commit 3423bddc7b
33 changed files with 974 additions and 326 deletions

3
.gitignore vendored
View File

@ -13,4 +13,5 @@ images
logs
*.sklearn
config/*.story.yml
config/story.yml
config/story.yml
model/*.pth

View File

@ -99,3 +99,35 @@ interface CommonResponse<T> {
- 非必要,请不要随意宣传本项目。
- 虽然曾经无数个 QQ 相关的项目都死了,但是基本的 API 端口算是传承了下来。拉格朗日的返回类型,请参考 [go-cqhttp 帮助中心 - API 篇](https://docs.go-cqhttp.org/api/) 中的内容。
---
## 启动
```bash
# 1. 启动 拉格朗日
tsc
pm2 start dist/main.js --name Lagrange.onebot
pm2 start rag/main.py --name rag
```
---
## 测试命令
### 重训练 embedding -> intent 分类层
```bash
curl -X POST http://127.0.0.1:8081/intent/retrain-embedding-mapping
```
### 获取意图
```bash
curl -X POST -H "Content-Type: application/json" -d '{"query": "真的开线程是要tcl指令去改的"}' http://127.0.0.1:8081/intent/get-intent-recogition
```
### 获取向量数据库中的 topk
```bash
curl -X POST -H "Content-Type: application/json" -d '{"query": "这个插件有什么比较好的文档吗?"}' http://127.0.0.1:8081/vecdb/similarity_search_with_score
```

70
bot/api/llm.ts Normal file
View File

@ -0,0 +1,70 @@
// 配置大模型 请求参数
import axios from "axios";
import { logger } from "lagrange.onebot";
interface LlmMessageItem {
role: 'user' | 'assistant',
content: string
}
class ErineLLM {
apiKey: string = process.env.BAIDU_API_KEY;
secretKey: string = process.env.BAIDU_SECRET_KEY;
accessToken: string = '';
constructor() {
if (this.apiKey === '') {
throw Error('百度 api_key 为空');
}
if (this.secretKey === '') {
throw Error('百度 secret_key 为空');
}
this.getAccessToken();
}
public async getAccessToken() {
const url = `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${this.apiKey}&client_secret=${this.secretKey}`;
const payload = "";
const headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
};
const { data } = await axios.post(url, payload, { headers });
const accessToken = data.access_token;
if (accessToken) {
this.accessToken = accessToken;
logger.info('成功获取大模型访问令牌');
} else {
logger.error('大模型令牌获取失败:' + JSON.stringify(data))
}
}
public async answer(message: LlmMessageItem[]): Promise<string | undefined> {
if (message.length % 2 === 0) {
logger.error('大模型的 message 长度必须是奇数,目前为 ' + message.length);
return undefined;
}
const url = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-lite-8k?access_token=' + this.accessToken;
const payload = {
messages: message,
system: '你是锦恢开发的用于进行问答的 QA 机器人。主要负责解决 Digital IDE 用户群的答疑问题'
}
const headers = {
'Content-Type': 'application/json'
}
const { data } = await axios.post(url, payload, { headers });
const result = data.result;
if (result) {
return result;
} else {
logger.error('大模型返回结果有误: ' + JSON.stringify(data));
return undefined;
}
}
}
export const llm = new ErineLLM();

View File

@ -4,6 +4,8 @@ import * as fs from 'fs';
import * as yaml from 'yaml';
import axios from 'axios';
// 配置 向量数据库 的请求参数
// 得到配置文件,组装基础路由
const vecdbBuffer = fs.readFileSync('./config/vecdb.yml', 'utf-8');
const vecdbConfig = yaml.parse(vecdbBuffer);
@ -37,6 +39,7 @@ vecdbRequests.interceptors.response.use(
}
);
export {
vecdbRequests,

View File

@ -47,7 +47,8 @@ export interface apiGetIntentRecogitionRequest {
export interface apiGetIntentRecogitionData {
id: number,
name: string
name: string,
uncertainty: number
}
export interface apiIntentRetrainRequest {

View File

@ -1,8 +1,8 @@
import * as fs from 'fs';
import { server } from 'lagrange.onebot';
import './test';
import './digital-ide';
import './services/test';
import './services/digital-ide';
const buffer = fs.readFileSync('./app/publish/appsettings.json', 'utf-8');
const config = JSON.parse(buffer);

71
bot/services/intent.ts Normal file
View File

@ -0,0 +1,71 @@
import { mapper, plugins, LagrangeContext, PrivateMessage, GroupMessage, Send, logger } from 'lagrange.onebot'
import { llm } from '../api/llm';
import { apiQueryVecdb, apiQueryVecdbDataItem } from '../api/vecdb';
interface IntentResult {
id: number,
name: string,
uncertainty: number
}
function makePrompt(messages: apiQueryVecdbDataItem[]): string {
const texts = ['你是一个很聪明的AI下面是你的知识库和参考内容请根据参考内容回答上述的问题'];
for (const msg of messages) {
texts.push(msg.content);
}
return texts.join('\n');
}
async function useRagLLM(c: LagrangeContext<GroupMessage>, intentResult: IntentResult) {
const texts = [];
for (const msg of c.message.message) {
if (msg.type === 'text') {
texts.push(msg.data.text);
}
}
const { data } = await apiQueryVecdb({ query: texts.join(' '), k: 3 });
if (data.code === 200) {
const messages: apiQueryVecdbDataItem[] = data.data.filter(m => m.score <= 0.8);
if (messages.length === 0) {
c.sendMessage('未在数据库中检索到相关内容。');
} else {
const query = makePrompt(messages);
const res = await llm.answer([
{
role: 'user',
content: query
}
]);
if (typeof res === 'string') {
const links = messages.map(m => m.source);
const reference = ['参考链接:', ...links].join('\n');
const anwser = res + '\n\n' + reference;
c.sendMessage(anwser);
}
}
} else {
logger.error('apiQueryVecdb 接口访问失败: ' + JSON.stringify(data));
return false;
}
}
export async function handleGroupIntent(c: LagrangeContext<GroupMessage>, intentResult: IntentResult) {
switch (intentResult.name) {
case 'usage':
return await useRagLLM(c, intentResult);
break;
case 'bug':
return await useRagLLM(c, intentResult);
break;
case 'others':
break;
default:
break;
}
}

51
bot/services/test.ts Normal file
View File

@ -0,0 +1,51 @@
import '../plugins/image';
import { mapper, plugins, LagrangeContext, PrivateMessage, GroupMessage, Send } from 'lagrange.onebot'
import { apiGetIntentRecogition, apiQueryVecdb } from '../api/vecdb';
import { handleGroupIntent } from './intent';
export class Impl {
@mapper.onPrivateUser(1193466151)
@plugins.use('echo')
@plugins.use('pm')
@plugins.use('wget-image')
async handleJinhui(c: LagrangeContext<PrivateMessage>) {
c.sendMessage([{
type: 'image',
data: {
file: 'file:///data/zhelonghuang/project/rag-llm/images/bird.png',
timeout: 10000
}
}])
c.finishSession();
}
@mapper.onGroup(956419963, { at: false })
async handleTestGroup(c: LagrangeContext<GroupMessage>) {
const texts = [];
const message = c.message;
for (const msg of message.message) {
if (msg.type === 'text') {
texts.push(msg.data.text);
}
}
const reply: Send.Default[] = [];
const axiosRes = await apiGetIntentRecogition({ query: texts.join('\n') });
const res = axiosRes.data;
if (res.code == 200) {
const intentResult = res.data;
// 如果 不确定性 太高,就将意图修改为
if (intentResult.uncertainty >= 0.33) {
intentResult.name = 'others';
}
const uncertainty = Math.round(intentResult.uncertainty * 1000) / 1000;
c.sendMessage(`【意图: ${intentResult.name} 不确定度: ${uncertainty}`);
handleGroupIntent(c, intentResult);
} else {
c.sendMessage('RAG 系统目前离线');
}
}
}

View File

@ -1,28 +0,0 @@
import './plugins';
import { mapper, plugins, LagrangeContext, PrivateMessage, GroupMessage, Send } from 'lagrange.onebot'
import { apiQueryVecdb } from './api/vecdb';
export class Impl {
@mapper.onPrivateUser(1193466151)
@plugins.use('echo')
@plugins.use('pm')
@plugins.use('wget-image')
async handleJinhui(c: LagrangeContext<PrivateMessage>) {
c.sendMessage([{
type: 'image',
data: {
file: 'file:///data/zhelonghuang/project/rag-llm/images/bird.png',
timeout: 10000
}
}])
c.finishSession();
}
@mapper.onGroup(956419963, { at: false })
async handleTestGroup(c: LagrangeContext<GroupMessage>) {
console.log(c.message.message);
console.log(c.message.raw_message);
}
}

1
debug.log Normal file
View File

@ -0,0 +1 @@
{"query": "真的开线程是要tcl指令去改的"}

File diff suppressed because one or more lines are too long

View File

@ -19,23 +19,33 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n",
"/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n",
" warnings.warn(\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"整理得到 304 个文档\n",
"分块得到 1273 个文档\n",
"数据库已存储到 blog-vecdb 中\n"
"分块得到 1276 个文档\n",
"数据库已存储到 ../blog-vecdb 中\n"
]
}
],
"source": [
"embedding = HuggingFaceEmbeddings(model_name='maidalun1020/bce-embedding-base_v1')\n",
"\n",
"db_persistent_dir = 'blog-vecdb'\n",
"db_persistent_dir = '../blog-vecdb'\n",
"\n",
"if os.path.exists(db_persistent_dir):\n",
" db = FAISS.load_local(db_persistent_dir, embedding, allow_dangerous_deserialization=True)\n",
@ -60,7 +70,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 3,
"metadata": {},
"outputs": [
{
@ -74,7 +84,7 @@
" 0.71963197)]"
]
},
"execution_count": 6,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@ -88,21 +98,21 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(Document(page_content='除了b站的两个教程外建议多出文档以及示例工程一个刚接触FPGA但有不熟悉vivado的萌新就指望这个加快学习进度了\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》\\n《Digital-IDE应用之FM调制解调》\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》 《Digital-IDE应用之FM调制解调》\\n好的谢谢\\n那个教程是好早之前我出的了新的版本一直不稳定今年稳定之后会出后续教程。\\nDigital IDE 的使用教程可以看\\n官方文档为 https://sterben.nitcloud.cn/zh/ 但是目前文档不是很完善。', metadata={'source': '../docs/digital-issue/issue-47/issue.md', 'start_index': 0}),\n",
" 0.64211607),\n",
"[(Document(page_content='问题标题 基础教程太少\\n除了b站的两个教程外建议多出文档以及示例工程一个刚接触FPGA但有不熟悉vivado的萌新就指望这个加快学习进度了\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》\\n《Digital-IDE应用之FM调制解调》\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》 《Digital-IDE应用之FM调制解调》\\n好的谢谢\\n那个教程是好早之前我出的了新的版本一直不稳定今年稳定之后会出后续教程。\\nDigital IDE 的使用教程可以看\\n官方文档为 https://sterben.nitcloud.cn/zh/ 但是目前文档不是很完善。', metadata={'source': '../docs/digital-issue/issue-47/issue.md', 'start_index': 0}),\n",
" 0.63593847),\n",
" (Document(page_content='home: true\\nheroImage: /icon.png\\ndescription: Vscode 平台上的 ASIC & FPGA 开发扩展\\nactionText: 快速开始 🐳\\nactionLink: /zh/guide/introduction\\nfeatures:\\n- title: ✨ HDL 语言支持\\n details: 支持 verilog, vhdl, systemverilog, tcl 脚本等\\n- title: 🎯 项目管理\\n details: 在你的项目中查看结构化的 HDL 文件\\n- title: 🛠️ 额外的工具\\n details: FSM, Netlist, 一键仿真, 文档化,让你的编程体验更加舒坦。\\n\\n::: slot footer\\nMIT Licensed | Copyright © 2018-present Digital-EDA\\n:::', metadata={'source': '../docs/digital-document/index.md', 'start_index': 0}),\n",
" 0.7582667),\n",
" (Document(page_content='TODO\\n\\n找到所有 vcd item 的 type 类型可参考https://pyvcd.readthedocs.io/en/latest/vcd.common.html\\n\\nbug\\n\\n详见飞书文档https://nc-ai-lab.feishu.cn/wiki/Z4AxwU1SdilATAk7GuvcYkIDnwh\\n\\n流程\\n\\n目前需要为Digital-IDE设计一个render用于显示VCD文件。\\n\\nIEEE 1364定义VCD(value change dump)文件是含已选变量(信号)的值变化信息存储文件。\\n\\nwavedrom在GitHub上开发过vcd和hdl的wavedrom脚本格式可以用于进行DIDE的vcd可视化的二次开发目前发现为了实现vcd文件基本的仓库主要是下面这两个\\n\\nJS层与一个简单的前端https://github.com/wavedrom/vcdrom\\n\\nwasm 解析https://github.com/wavedrom/vcd\\n\\n打算基于这两个仓库二次开发一个好用的vcd渲染模块再加入DIDE中。\\n\\n开发思路\\n\\nvcd 的渲染器分为如下几步进行开发。\\n\\nmermaid\\ngraph LR\\na(读取)-->b(渲染)-->c(解析)\\n\\nVCD 读取和解析并不难,难在如何快速安全地读取,对于一些长时间的模拟和仿真而言, vcd 文件可能会非常大。因此vcd 需要分块读取,分块解析,为了避免这些不必要的麻烦,我使用了 https://github.com/wavedrom/vcdrom 这个项目的后端进行修改。\\n\\nwasm 解析器\\n\\n原项目写得过于紧凑并不适合进行修改因此需要修改一部分代码。\\n\\n整合项目在 https://github.com/Digital-EDA/digital-vcd-parser', metadata={'source': '../docs/kirigaya.cn/72.md', 'start_index': 0}),\n",
" 0.83628875)]"
]
},
"execution_count": 8,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}

View File

@ -18,22 +18,22 @@
"@types/node": "^20.12.12",
"axios": "^1.7.2",
"fs": "^0.0.1-security",
"lagrange.onebot": "^1.0.0",
"lagrange.onebot": "^1.0.2",
"ws": "^8.17.0",
"yaml": "^2.4.2"
},
"devDependencies": {
"@sinonjs/referee-sinon": "^12.0.0",
"@types/ws": "^8.5.10",
"chai": "4.3.4",
"serve": "^14.2.3",
"typescript": "^5.4.5",
"jsverify": "^0.8.4",
"knuth-shuffle": "^1.0.8",
"mocha": "^10.4.0",
"require-uncached": "^2.0.0",
"serve": "^14.2.3",
"shelljs": "^0.8.5",
"should": "^13.2.3",
"sinon": "^18.0.0",
"jsverify": "^0.8.4",
"knuth-shuffle": "^1.0.8",
"@sinonjs/referee-sinon": "^12.0.0"
"typescript": "^5.4.5"
}
}

View File

@ -73,7 +73,7 @@ class PromptEngine:
if children is None:
children = []
if name not in self.intent2id:
if name != 'root' and name not in self.intent2id:
assign_id = len(self.intent2id)
self.intent2id[name] = assign_id
self.id2intent[assign_id] = name
@ -267,4 +267,4 @@ class TreeIntent(ABC):
if __name__ == '__main__':
prompt_engine = PromptEngine('./config/story.yml')
prompt_engine.merge_stories_from_yml('./config/github-issue.story.yml')
print(len(prompt_engine.stories))
print(prompt_engine.id2intent)

0
rag/__init__.py Normal file
View File

11
rag/api/__init__.py Normal file
View File

@ -0,0 +1,11 @@
from .admin import logger, app
from .config import necessary_files
from .constant import StatusCode, MsgCode
__all__ = [
logger,
app,
necessary_files,
StatusCode,
MsgCode
]

View File

@ -12,4 +12,4 @@ logger.add(
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"
)
app = Flask(__file__)
app = Flask(__file__)

View File

@ -1,9 +1,8 @@
necessary_files = {
'vecdb-config': './config/vecdb.yml',
'intent-story': './config/story.yml',
'issue-story': './config/github-issue.story.yml',
'blog-vecdb-data': './blog-vecdb/index.faiss',
'blog-vecdb-model': './blog-vecdb/index.pkl',
'intent-classifier': './model/embedding_mapping.sklearn'
'intent-classifier': './model/intent.enn.pth'
}

6
rag/db/__init__.py Normal file
View File

@ -0,0 +1,6 @@
from .embedding import db, embedding
__all__ = [
db,
embedding
]

View File

@ -1,9 +1,11 @@
import os
import sys
sys.path.append(os.path.abspath('.'))
from admin import app, logger
from intent import *
from vecdb import *
from configs import necessary_files
from rag.api.admin import app, logger
from rag.api.config import necessary_files
from rag.services.intent import *
from rag.services.vecdb import *
def assert_resource(path: str):
assert os.path.exists(path), '{} 不存在'.format(file)
@ -14,9 +16,11 @@ for file in necessary_files.values():
if __name__ == '__main__':
from gevent import pywsgi
import yaml
config: dict = yaml.load(open('./config/vecdb.yml'), Loader=yaml.Loader)
addr = config.get('addr', '127.0.0.1')
port = int(config.get('port', 8081))
server = pywsgi.WSGIServer((addr, port), app)
logger.info('RAG 系统运行在 http://{}:{}'.format(addr, port))
server.serve_forever()

5
rag/model/__init__.py Normal file
View File

@ -0,0 +1,5 @@
from .enn import LinearEnn
__all__ = [
LinearEnn
]

88
rag/model/enn.py Normal file
View File

@ -0,0 +1,88 @@
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
class LinearEnn(nn.Module):
in_dim: int
out_dim: int
alpha_kl: float
def __init__(self, in_dim: int, out_dim: int, focal: int, alpha_kl: float):
super().__init__()
self.in_dim = in_dim
self.out_dim = out_dim
self.alpha_kl = alpha_kl
self.focal = focal
self.classifier = nn.Sequential(
nn.Linear(in_dim, out_dim),
nn.ELU(),
)
def forward(self, inputs: torch.FloatTensor) -> tuple[torch.FloatTensor, torch.FloatTensor]:
logits = self.classifier(inputs)
evidence = torch.exp(logits)
prob = F.normalize(evidence + 1, p=1, dim=1)
return evidence, prob
def criterion(self, evidence: torch.FloatTensor, label: torch.LongTensor) -> torch.FloatTensor:
if len(label.shape) == 1:
label = F.one_hot(label, self.out_dim)
alpha = evidence + 1
alpha_0 = alpha.sum(1).unsqueeze(-1).repeat(1, self.out_dim)
loss_ece = torch.sum(label * (torch.digamma(alpha_0) - torch.digamma(alpha)), dim=1)
loss_ece = torch.mean(loss_ece)
if self.alpha_kl > 0:
tilde_alpha = label + (1 - label) * alpha
uncertainty_alpha = torch.ones_like(tilde_alpha).cuda()
estimate_dirichlet = torch.distributions.Dirichlet(tilde_alpha)
uncertainty_dirichlet = torch.distributions.Dirichlet(uncertainty_alpha)
kl = torch.distributions.kl_divergence(estimate_dirichlet, uncertainty_dirichlet)
loss_kl = torch.mean(kl)
else:
loss_kl = 0
return loss_ece + self.alpha_kl * loss_kl
def predict(self, inputs: torch.FloatTensor | list[list[float]] | np.ndarray) -> tuple[torch.FloatTensor, torch.FloatTensor]:
"""
返回每个类别的预测概率 当前的预测的不确定度 uncertainty
"""
if not isinstance(inputs, torch.FloatTensor):
inputs = torch.FloatTensor(inputs)
with torch.no_grad():
evidence, prob = self.forward(inputs)
alpha = evidence + 1
S = alpha.sum(dim=1)
u = self.out_dim / S
return prob, u
def train_enn(enn_model: LinearEnn, embedding: np.ndarray | torch.FloatTensor, labels: np.ndarray | torch.LongTensor, bs: int = 64, lr: float = 1e-3, epoch: int = 100):
optimizer = torch.optim.AdamW(enn_model.parameters(), lr=lr)
sample_num = len(embedding)
sample_indice = np.arange(sample_num)
bs_num = int(np.ceil(sample_num / bs))
training_losses = []
for i in range(epoch):
alpha_kl = min(0.9, i / 10)
np.random.shuffle(sample_indice)
train_loss = 0
for bs_i in range(bs_num):
start = bs_i * bs
end = min(sample_num, start + bs)
data_indice = sample_indice[start: end]
data = torch.FloatTensor(embedding[data_indice])
label = torch.LongTensor(labels[data_indice])
evidence, prob = enn_model(data)
loss = enn_model.criterion(evidence, label)
train_loss += loss.item()
optimizer.zero_grad()
loss.backward()
optimizer.step()
training_losses.append(train_loss / bs_num)

0
rag/services/__init__.py Normal file
View File

View File

@ -2,12 +2,14 @@ from flask import Flask, request, jsonify
import numpy as np
import joblib
import json
from sklearn.linear_model import LogisticRegression
import torch
from embedding import embedding
from constant import StatusCode, MsgCode
from admin import app
from configs import necessary_files
from rag.db.embedding import embedding
from rag.api.constant import StatusCode, MsgCode
from rag.api.admin import app
from rag.api.config import necessary_files
from rag.model.enn import LinearEnn, train_enn
import sys
import os
@ -17,16 +19,22 @@ from prompt import PromptEngine
class IntentRecogition:
def __init__(self) -> None:
self.embed_intent_classificator = joblib.load(necessary_files['intent-classifier'])
self.engine = PromptEngine(necessary_files['intent-story'])
self.classifier = LinearEnn(in_dim=768, out_dim=7, focal=0, alpha_kl=0)
self.classifier.load_state_dict(torch.load(necessary_files['intent-classifier']))
def get_intent_recogition(self, query: str) -> dict:
query_embed = embedding.embed_documents([query])
result_id = self.embed_intent_classificator.predict(query_embed)[0]
result_id = int(result_id)
prob, u = self.classifier.predict(query_embed)
result_id = prob.argmax(dim=1)
u = u.item()
result_id = int(result_id.item())
return {
'id': result_id,
'name': self.engine.id2intent[result_id]
'id': int(result_id),
'name': self.engine.id2intent[result_id],
'uncertainty': float(u)
}
intent_recogition = IntentRecogition()
@ -34,7 +42,7 @@ intent_recogition = IntentRecogition()
@app.route('/intent/reload-embedding-mapping', methods=['post'])
def reload_embedding_mapping():
try:
intent_recogition.embed_intent_classificator = joblib.load(necessary_files['intent-classifier'])
intent_recogition.classifier.load_state_dict(torch.load(necessary_files['intent-classifier']))
except Exception as e:
response = jsonify({
'code': StatusCode.process_error.value,
@ -56,21 +64,18 @@ def reload_embedding_mapping():
def retrain_embedding_mapping():
engine = PromptEngine(necessary_files['intent-story'])
engine.merge_stories_from_yml(necessary_files['issue-story'])
model = LogisticRegression()
sentences = []
labels = []
for story in engine.stories:
sentences.append(story.message)
labels.append(engine.intent2id[story.intent])
try:
labels = np.array(labels)
embed = embedding.embed_documents(sentences)
model.fit(embed, labels)
enn_model = intent_recogition.classifier
train_enn(enn_model, embed, labels, bs=64, lr=1e-3, epoch=100)
torch.save(enn_model.state_dict(), necessary_files['intent-classifier'])
intent_recogition.engine = engine
intent_recogition.embed_intent_classificator = model
joblib.dump(model, necessary_files['intent-classifier'])
except Exception as e:
response = jsonify({
'code': StatusCode.process_error.value,
@ -80,7 +85,6 @@ def retrain_embedding_mapping():
response.status_code = StatusCode.success.value
return response
response = jsonify({
'code': StatusCode.success.value,
'data': 'save data to ' + necessary_files['intent-classifier'],

View File

@ -1,10 +1,10 @@
from flask import Flask, request, jsonify
import json
from embedding import db
from constant import StatusCode, MsgCode
from url_mapping import urlmapping
from admin import app
from rag.api.admin import app
from rag.db.embedding import db
from rag.api.constant import StatusCode, MsgCode
from rag.utils.url_mapping import urlmapping
@app.route('/vecdb/similarity_search_with_score', methods=['post'])
def post_similarity_search_with_score():
@ -31,13 +31,14 @@ def post_similarity_search_with_score():
source = meta.get('source', '')
if len(source) > 0:
source = urlmapping.url_from_mapping(source)
result_data.append({
'content': page_content.strip(),
'meta': meta,
'source': source,
'score': float(score)
})
response = jsonify({
'code': StatusCode.success.value,
'data': result_data,

3
rag/utils/__init__.py Normal file
View File

@ -0,0 +1,3 @@
from .url_mapping import urlmapping
__all__ = [ urlmapping ]

View File

@ -13,6 +13,7 @@ class UrlMappingRegister:
return lambda func: register(start, func)
def url_from_mapping(self, source: str) -> str:
source = source.lstrip('.').lstrip('/')
for pattern in self.startsWith_patterns:
func = self.startsWith_patterns[pattern]
if source.startswith(pattern):
@ -32,6 +33,7 @@ def kirigaya_cn(source: str) -> str:
template = f'https://kirigaya.cn/blog/article?seq={article_id}'
return template
# 样例: docs/digital-document/guide/quick-start.md
# 目标: https://sterben.nitcloud.cn/zh/guide/quick-start.html
@urlmapping.startsWith('docs/digital-document')
@ -42,6 +44,16 @@ def digital_document(source: str) -> str:
return router
# 样例: docs/digital-issue/issue-2/issue.md
# 目标: https://github.com/Digital-EDA/Digital-IDE/issues/2
@urlmapping.startsWith('docs/digital-issue')
def digital_document(source: str) -> str:
parts = source.split('/')
issue_id = parts[2].split('-')[-1]
router = f'https://github.com/Digital-EDA/Digital-IDE/issues/{issue_id}'
return router
if __name__ == '__main__':
print(kirigaya_cn('docs/kirigaya.cn/129.md'))
print(kirigaya_cn('docs/kirigaya.cn/21.md'))

View File

@ -41,7 +41,7 @@ suite('test intent recogition', () => {
{ input: '我的反撤回还能用', expect: 'others' },
{ input: '因为这是养蛊的虚拟机,放了些国产垃圾软件,得用国产流氓之王才能镇得住他们', expect: 'others' },
{ input: '你咋装了个360', expect: 'others' },
{ input: '', expect: 'others' },
{ input: '', expect: 'expression,others' },
];
for (const s of intent_suites) {

206
yarn.lock
View File

@ -4,7 +4,7 @@
"@pm2/agent@~2.0.0":
version "2.0.3"
resolved "https://registry.npmjs.org/@pm2/agent/-/agent-2.0.3.tgz"
resolved "https://registry.yarnpkg.com/@pm2/agent/-/agent-2.0.3.tgz#6b47fda837f185864767fe1e048f61d1de31fc45"
integrity sha512-xkqqCoTf5VsciMqN0vb9jthW7olVAi4KRFNddCc7ZkeJZ3i8QwZANr4NSH2H5DvseRFHq7MiPspRY/EWAFWWTg==
dependencies:
async "~3.2.0"
@ -23,7 +23,7 @@
"@pm2/io@~6.0.0":
version "6.0.0"
resolved "https://registry.npmjs.org/@pm2/io/-/io-6.0.0.tgz"
resolved "https://registry.yarnpkg.com/@pm2/io/-/io-6.0.0.tgz#ad7222e7c6975664028fe727ff7b67e9b661eacc"
integrity sha512-sKUEgZoQ5/jRwTyMB1I7u2wXL6dG0j/F/M4ANJ7dJCApfW8nWC0RElMW2siEKvZ79iplIPAaWV27oyBoerEflw==
dependencies:
async "~2.6.1"
@ -37,7 +37,7 @@
"@pm2/js-api@~0.8.0":
version "0.8.0"
resolved "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.8.0.tgz"
resolved "https://registry.yarnpkg.com/@pm2/js-api/-/js-api-0.8.0.tgz#d1b8aff562dd34befa3cb30fe28e08c9f9743abc"
integrity sha512-nmWzrA/BQZik3VBz+npRcNIu01kdBhWL0mxKmP1ciF/gTcujPTQqt027N9fc1pK9ERM8RipFhymw7RcmCyOEYA==
dependencies:
async "^2.6.3"
@ -48,7 +48,7 @@
"@pm2/pm2-version-check@latest":
version "1.0.4"
resolved "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz"
resolved "https://registry.yarnpkg.com/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz#cf97fbb14b0eca95430ca05eedccbd2683806e43"
integrity sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA==
dependencies:
debug "^4.3.1"
@ -122,7 +122,7 @@
"@tootallnate/quickjs-emscripten@^0.23.0":
version "0.23.0"
resolved "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz"
resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c"
integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==
"@types/node@*", "@types/node@^20.12.12":
@ -154,7 +154,7 @@ accepts@~1.3.5:
agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
version "7.1.1"
resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
dependencies:
debug "^4.3.4"
@ -171,14 +171,14 @@ ajv@8.12.0:
amp-message@~0.1.1:
version "0.1.2"
resolved "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz"
resolved "https://registry.yarnpkg.com/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45"
integrity sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg==
dependencies:
amp "0.3.1"
amp@0.3.1, amp@~0.3.1:
version "0.3.1"
resolved "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz"
resolved "https://registry.yarnpkg.com/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d"
integrity sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw==
ansi-align@^3.0.1:
@ -195,7 +195,7 @@ ansi-colors@4.1.1:
ansi-colors@^4.1.1:
version "4.1.3"
resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
ansi-regex@^5.0.1:
@ -250,21 +250,21 @@ assertion-error@^1.1.0:
ast-types@^0.13.4:
version "0.13.4"
resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
dependencies:
tslib "^2.0.1"
async@^2.6.3, async@~2.6.1:
version "2.6.4"
resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
dependencies:
lodash "^4.17.14"
async@^3.2.0, async@~3.2.0:
version "3.2.5"
resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66"
integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
asynckit@^0.4.0:
@ -295,7 +295,7 @@ balanced-match@^1.0.0:
basic-ftp@^5.0.2:
version "5.0.5"
resolved "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz"
resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0"
integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==
binary-extensions@^2.0.0:
@ -305,12 +305,12 @@ binary-extensions@^2.0.0:
blessed@0.1.81:
version "0.1.81"
resolved "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz"
resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129"
integrity sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==
bodec@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz"
resolved "https://registry.yarnpkg.com/bodec/-/bodec-0.1.0.tgz#bc851555430f23c9f7650a75ef64c6a94c3418cc"
integrity sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==
boxen@7.0.0:
@ -356,7 +356,7 @@ browser-stdout@1.3.1:
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
bytes@3.0.0:
@ -418,7 +418,7 @@ chalk-template@0.4.0:
chalk@3.0.0, chalk@~3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
dependencies:
ansi-styles "^4.1.0"
@ -444,7 +444,7 @@ chalk@^5.0.1:
charm@~0.1.1:
version "0.1.2"
resolved "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz"
resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296"
integrity sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==
check-error@^1.0.2:
@ -471,7 +471,7 @@ chokidar@3.5.3:
chokidar@^3.5.3:
version "3.6.0"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
dependencies:
anymatch "~3.1.2"
@ -491,7 +491,7 @@ cli-boxes@^3.0.0:
cli-tableau@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz"
resolved "https://registry.yarnpkg.com/cli-tableau/-/cli-tableau-2.0.1.tgz#baa78d83e08a2d7ab79b7dad9406f0254977053f"
integrity sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==
dependencies:
chalk "3.0.0"
@ -535,7 +535,7 @@ combined-stream@^1.0.8:
commander@2.15.1:
version "2.15.1"
resolved "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
compressible@~2.0.16:
@ -570,7 +570,7 @@ content-disposition@0.5.2:
croner@~4.1.92:
version "4.1.97"
resolved "https://registry.npmjs.org/croner/-/croner-4.1.97.tgz"
resolved "https://registry.yarnpkg.com/croner/-/croner-4.1.97.tgz#6e373dc7bb3026fab2deb0d82685feef20796766"
integrity sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==
cross-spawn@^7.0.3:
@ -584,7 +584,7 @@ cross-spawn@^7.0.3:
culvert@^0.1.2:
version "0.1.2"
resolved "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz"
resolved "https://registry.yarnpkg.com/culvert/-/culvert-0.1.2.tgz#9502f5f0154a2d5a22a023e79f71cc936fa6ef6f"
integrity sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==
d@1, d@^1.0.1, d@^1.0.2:
@ -597,17 +597,17 @@ d@1, d@^1.0.1, d@^1.0.2:
data-uri-to-buffer@^6.0.2:
version "6.0.2"
resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz"
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b"
integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==
dayjs@~1.11.5:
version "1.11.11"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e"
integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==
dayjs@~1.8.24:
version "1.8.36"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.36.tgz#be36e248467afabf8f5a86bae0de0cdceecced50"
integrity sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==
debug@2.6.9:
@ -619,7 +619,7 @@ debug@2.6.9:
debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1:
version "4.3.5"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
dependencies:
ms "2.1.2"
@ -633,7 +633,7 @@ debug@4.3.4:
debug@^3.2.6:
version "3.2.7"
resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
@ -666,7 +666,7 @@ define-data-property@^1.1.4:
degenerator@^5.0.0:
version "5.0.1"
resolved "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz"
resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5"
integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==
dependencies:
ast-types "^0.13.4"
@ -705,7 +705,7 @@ emoji-regex@^9.2.2:
enquirer@2.3.6:
version "2.3.6"
resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz"
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
dependencies:
ansi-colors "^4.1.1"
@ -761,7 +761,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
escodegen@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
dependencies:
esprima "^4.0.1"
@ -782,17 +782,17 @@ esniff@^2.0.1:
esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
estraverse@^5.2.0:
version "5.3.0"
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
event-emitter@^0.3.5:
@ -805,17 +805,17 @@ event-emitter@^0.3.5:
eventemitter2@5.0.1, eventemitter2@~5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz"
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452"
integrity sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==
eventemitter2@^6.3.1:
version "6.4.9"
resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz"
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125"
integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==
eventemitter2@~0.4.14:
version "0.4.14"
resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz"
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==
execa@^5.1.1:
@ -842,7 +842,7 @@ ext@^1.7.0:
extrareqp2@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/extrareqp2/-/extrareqp2-1.0.0.tgz"
resolved "https://registry.yarnpkg.com/extrareqp2/-/extrareqp2-1.0.0.tgz#aaf8ad1495d723f71276b0eab041c061aa21f035"
integrity sha512-Gum0g1QYb6wpPJCVypWP3bbIuaibcFiJcpuPM10YSXp/tzqi84x9PJageob+eN4xVRIOto4wjSGNLyMD54D2xA==
dependencies:
follow-redirects "^1.14.0"
@ -854,7 +854,7 @@ fast-deep-equal@^3.1.1:
fast-json-patch@^3.0.0-1:
version "3.1.1"
resolved "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz"
resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947"
integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==
fast-url-parser@1.1.3:
@ -866,7 +866,7 @@ fast-url-parser@1.1.3:
fclone@1.0.11, fclone@~1.0.11:
version "1.0.11"
resolved "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz"
resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640"
integrity sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==
fill-range@^7.1.1:
@ -921,7 +921,7 @@ fs-extra@^10.0.0:
fs-extra@^11.2.0:
version "11.2.0"
resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
dependencies:
graceful-fs "^4.2.0"
@ -976,7 +976,7 @@ get-stream@^6.0.0:
get-uri@^6.0.1:
version "6.0.3"
resolved "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz"
resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a"
integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==
dependencies:
basic-ftp "^5.0.2"
@ -986,12 +986,12 @@ get-uri@^6.0.1:
git-node-fs@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz"
resolved "https://registry.yarnpkg.com/git-node-fs/-/git-node-fs-1.0.0.tgz#49b215e242ebe43aa4c7561bbba499521752080f"
integrity sha512-bLQypt14llVXBg0S0u8q8HmU7g9p3ysH+NvVlae5vILuUvs759665HvmR5+wb04KjHyjFcDRxdYb4kyNnluMUQ==
git-sha1@^0.1.2:
version "0.1.2"
resolved "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz"
resolved "https://registry.yarnpkg.com/git-sha1/-/git-sha1-0.1.2.tgz#599ac192b71875825e13a445f3a6e05118c2f745"
integrity sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg==
glob-parent@~5.1.2:
@ -1079,7 +1079,7 @@ he@1.2.0:
http-proxy-agent@^7.0.0:
version "7.0.2"
resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
dependencies:
agent-base "^7.1.0"
@ -1087,7 +1087,7 @@ http-proxy-agent@^7.0.0:
https-proxy-agent@^7.0.2:
version "7.0.4"
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168"
integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==
dependencies:
agent-base "^7.0.2"
@ -1100,7 +1100,7 @@ human-signals@^2.1.0:
iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
@ -1130,7 +1130,7 @@ interpret@^1.0.0:
ip-address@^9.0.5:
version "9.0.5"
resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz"
resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
dependencies:
jsbn "1.1.0"
@ -1243,7 +1243,7 @@ isexe@^2.0.0:
js-git@^0.7.8:
version "0.7.8"
resolved "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz"
resolved "https://registry.yarnpkg.com/js-git/-/js-git-0.7.8.tgz#52fa655ab61877d6f1079efc6534b554f31e5444"
integrity sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==
dependencies:
bodec "^0.1.0"
@ -1260,7 +1260,7 @@ js-yaml@4.1.0, js-yaml@~4.1.0:
jsbn@1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
json-schema-traverse@^1.0.0:
@ -1270,7 +1270,7 @@ json-schema-traverse@^1.0.0:
json-stringify-safe@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
jsonfile@^6.0.1:
@ -1302,10 +1302,10 @@ knuth-shuffle@^1.0.8:
resolved "https://registry.yarnpkg.com/knuth-shuffle/-/knuth-shuffle-1.0.8.tgz#929a467b0efd8d297bdcf318ca988a9f1037f80d"
integrity sha512-IdC4Hpp+mx53zTt6VAGsAtbGM0g4BV9fP8tTcviCosSwocHcRDw9uG5Rnv6wLWckF4r72qeXFoK9NkvV1gUJCQ==
lagrange.onebot@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/lagrange.onebot/-/lagrange.onebot-1.0.0.tgz"
integrity sha512-KI5EJNiaXtnOdXTDdTaNNw0eZJVwwx5JIuaR1Ci0JhacYaxWd9FSXHEWbBFHFdZejv/uxyqv9yvDT1Zn4w3DIw==
lagrange.onebot@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/lagrange.onebot/-/lagrange.onebot-1.0.2.tgz#db3aef4b85a4f31c8b28c770c269ca60c09fbd14"
integrity sha512-0Plag0DbJp3q88pA0sa72Pzk2X1RZwU/TIxbxiiZ3vauNN3naJ7d2j6mc6fDVfORde94Cxn/BjPRZwUd2pbsaw==
dependencies:
"@ptkdev/logger" "^1.8.0"
"@types/node" "^20.12.12"
@ -1321,7 +1321,7 @@ lazy-seq@^1.0.0:
lazy@~1.0.11:
version "1.0.11"
resolved "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz"
resolved "https://registry.yarnpkg.com/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690"
integrity sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==
locate-path@^6.0.0:
@ -1367,14 +1367,14 @@ lowdb@^1.0.0:
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
lru-cache@^7.14.1:
version "7.18.3"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
merge-stream@^2.0.0:
@ -1439,7 +1439,7 @@ minimist@^1.2.0:
mkdirp@1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mocha@^10.4.0:
@ -1470,7 +1470,7 @@ mocha@^10.4.0:
module-details-from-path@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz"
resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b"
integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==
ms@2.0.0:
@ -1490,12 +1490,12 @@ ms@2.1.3, ms@^2.1.1:
mute-stream@~0.0.4:
version "0.0.8"
resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
needle@2.4.0:
version "2.4.0"
resolved "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
dependencies:
debug "^3.2.6"
@ -1509,7 +1509,7 @@ negotiator@0.6.3:
netmask@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz"
resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
next-tick@^1.1.0:
@ -1553,7 +1553,7 @@ npm-run-path@^4.0.1:
nssocket@0.6.0:
version "0.6.0"
resolved "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz"
resolved "https://registry.yarnpkg.com/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa"
integrity sha512-a9GSOIql5IqgWJR3F/JXG4KpJTA3Z53Cj0MeMvGpglytB1nxE4PdFNC0jINe27CS7cGivoynwc054EzCcT3M3w==
dependencies:
eventemitter2 "~0.4.14"
@ -1594,7 +1594,7 @@ p-locate@^5.0.0:
pac-proxy-agent@^7.0.1:
version "7.0.1"
resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz"
resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75"
integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==
dependencies:
"@tootallnate/quickjs-emscripten" "^0.23.0"
@ -1608,7 +1608,7 @@ pac-proxy-agent@^7.0.1:
pac-resolver@^7.0.0:
version "7.0.1"
resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz"
resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6"
integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==
dependencies:
degenerator "^5.0.0"
@ -1616,7 +1616,7 @@ pac-resolver@^7.0.0:
pako@^0.2.5:
version "0.2.9"
resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz"
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
path-exists@^4.0.0:
@ -1666,14 +1666,14 @@ picomatch@^2.0.4, picomatch@^2.2.1:
pidusage@^2.0.21:
version "2.0.21"
resolved "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz"
resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e"
integrity sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA==
dependencies:
safe-buffer "^5.2.1"
pidusage@~3.0:
version "3.0.2"
resolved "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz"
resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-3.0.2.tgz#6faa5402b2530b3af2cf93d13bcf202889724a53"
integrity sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==
dependencies:
safe-buffer "^5.2.1"
@ -1685,14 +1685,14 @@ pify@^3.0.0:
pm2-axon-rpc@~0.7.0, pm2-axon-rpc@~0.7.1:
version "0.7.1"
resolved "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz"
resolved "https://registry.yarnpkg.com/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a"
integrity sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==
dependencies:
debug "^4.3.1"
pm2-axon@~4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz"
resolved "https://registry.yarnpkg.com/pm2-axon/-/pm2-axon-4.0.1.tgz#a7b4bb586e9aeb35b1042b488cde15b60cabafd2"
integrity sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==
dependencies:
amp "~0.3.1"
@ -1702,7 +1702,7 @@ pm2-axon@~4.0.1:
pm2-deploy@~1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz"
resolved "https://registry.yarnpkg.com/pm2-deploy/-/pm2-deploy-1.0.2.tgz#98d8385553a3a4dca11c7b3116deb519bc5961a7"
integrity sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg==
dependencies:
run-series "^1.1.8"
@ -1710,14 +1710,14 @@ pm2-deploy@~1.0.2:
pm2-multimeter@^0.1.2:
version "0.1.2"
resolved "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz"
resolved "https://registry.yarnpkg.com/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace"
integrity sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==
dependencies:
charm "~0.1.1"
pm2-sysmonit@^1.2.8:
version "1.2.8"
resolved "https://registry.npmjs.org/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz"
resolved "https://registry.yarnpkg.com/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz#eddea34a53fd8c8d7c3efb73b97a3c548686e24d"
integrity sha512-ACOhlONEXdCTVwKieBIQLSi2tQZ8eKinhcr9JpZSUAL8Qy0ajIgRtsLxG/lwPOW3JEKqPyw/UaHmTWhUzpP4kA==
dependencies:
async "^3.2.0"
@ -1728,7 +1728,7 @@ pm2-sysmonit@^1.2.8:
pm2@^5.4.0:
version "5.4.0"
resolved "https://registry.npmjs.org/pm2/-/pm2-5.4.0.tgz"
resolved "https://registry.yarnpkg.com/pm2/-/pm2-5.4.0.tgz#bf7976d8681304c31388ff8aae81633a2a04d54e"
integrity sha512-9TrDuckcSEnINoURygr3yfruK20qXuOUPOPQyIh4FIskQduyDNst9ys1XAt9YPY3RyGxVr2+x8Irsdma3klVQw==
dependencies:
"@pm2/agent" "~2.0.0"
@ -1770,14 +1770,14 @@ possible-typed-array-names@^1.0.0:
promptly@^2:
version "2.2.0"
resolved "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz"
resolved "https://registry.yarnpkg.com/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74"
integrity sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==
dependencies:
read "^1.0.4"
proxy-agent@~6.3.0:
version "6.3.1"
resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz"
resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.3.1.tgz#40e7b230552cf44fd23ffaf7c59024b692612687"
integrity sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==
dependencies:
agent-base "^7.0.2"
@ -1833,7 +1833,7 @@ rc@^1.0.1, rc@^1.1.6:
read@^1.0.4:
version "1.0.7"
resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz"
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==
dependencies:
mute-stream "~0.0.4"
@ -1879,7 +1879,7 @@ require-from-string@^2.0.2:
require-in-the-middle@^5.0.0:
version "5.2.0"
resolved "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz"
resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz#4b71e3cc7f59977100af9beb76bf2d056a5a6de2"
integrity sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==
dependencies:
debug "^4.1.1"
@ -1915,7 +1915,7 @@ rotating-file-stream@^2.1.5:
run-series@^1.1.8:
version "1.1.9"
resolved "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz"
resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.9.tgz#15ba9cb90e6a6c054e67c98e1dc063df0ecc113a"
integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==
safe-buffer@5.1.2:
@ -1930,22 +1930,22 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.2.1:
"safer-buffer@>= 2.1.2 < 3":
version "2.1.2"
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sax@^1.2.4:
version "1.4.1"
resolved "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
semver@^7.2:
version "7.6.2"
resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
semver@~7.5.0, semver@~7.5.4:
version "7.5.4"
resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
@ -2023,7 +2023,7 @@ shelljs@^0.8.5:
shimmer@^1.2.0:
version "1.2.1"
resolved "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz"
resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
should-equal@^2.0.0:
@ -2101,12 +2101,12 @@ sinon@^18.0.0:
smart-buffer@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
socks-proxy-agent@^8.0.2:
version "8.0.3"
resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz"
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz#6b2da3d77364fde6292e810b496cb70440b9b89d"
integrity sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==
dependencies:
agent-base "^7.1.1"
@ -2115,7 +2115,7 @@ socks-proxy-agent@^8.0.2:
socks@^2.7.1:
version "2.8.3"
resolved "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz"
resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
dependencies:
ip-address "^9.0.5"
@ -2123,7 +2123,7 @@ socks@^2.7.1:
source-map-support@0.5.21:
version "0.5.21"
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
dependencies:
buffer-from "^1.0.0"
@ -2131,17 +2131,17 @@ source-map-support@0.5.21:
source-map@^0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
sprintf-js@1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
sprintf-js@^1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
steno@^0.4.1:
@ -2219,7 +2219,7 @@ supports-preserve-symlinks-flag@^1.0.0:
systeminformation@^5.7:
version "5.22.10"
resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.10.tgz"
resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.22.10.tgz#9465306edd4db4bd5a3a04766703b35b279369b7"
integrity sha512-RJ3oed80NkqgHtpB0TLkxEKEpQ3pUm2lgVolkHeoaExPidkWsj2D/hO6Rwwi9i+Odl1vm8TMiRNIKK7hBaqDsw==
to-regex-range@^5.0.1:
@ -2236,22 +2236,22 @@ trampa@^1.0.0:
tslib@1.9.3:
version "1.9.3"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
tslib@^2.0.1:
version "2.6.2"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
version "2.6.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
tv4@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz"
resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963"
integrity sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==
tx2@~1.0.4:
version "1.0.5"
resolved "https://registry.npmjs.org/tx2/-/tx2-1.0.5.tgz"
resolved "https://registry.yarnpkg.com/tx2/-/tx2-1.0.5.tgz#ee0b0e5e2c351f8d23e54bdf46dd60afa3bbc73d"
integrity sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==
dependencies:
json-stringify-safe "^5.0.1"
@ -2324,7 +2324,7 @@ vary@~1.1.2:
vizion@~2.2.1:
version "2.2.1"
resolved "https://registry.npmjs.org/vizion/-/vizion-2.2.1.tgz"
resolved "https://registry.yarnpkg.com/vizion/-/vizion-2.2.1.tgz#04201ea45ffd145d5b5210e385a8f35170387fb2"
integrity sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==
dependencies:
async "^2.6.3"
@ -2387,7 +2387,7 @@ wrappy@1:
ws@^7.0.0:
version "7.5.9"
resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
ws@^8.17.0:
@ -2397,7 +2397,7 @@ ws@^8.17.0:
ws@~7.4.0:
version "7.4.6"
resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
y18n@^5.0.5:
@ -2407,7 +2407,7 @@ y18n@^5.0.5:
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^2.4.2: