Commit 006ad17c by Archer Committed by GitHub

4.6.7 first pr (#726)

parent 414b6933
......@@ -39,5 +39,4 @@ docSite/.vercel
*.local.*
# jetbrains
.idea/
# docker sh demo
# You need to switch to your mirror source
# 打包命令
```sh
# Build image, not proxy
docker build -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.4.7 --build-arg name=app .
# build image with proxy
docker build -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.4.7 --build-arg name=app --build-arg proxy=taobao .
```
# Pg 常用索引
```sql
CREATE INDEX IF NOT EXISTS modelData_dataset_id_index ON modeldata (dataset_id);
CREATE INDEX IF NOT EXISTS modelData_collection_id_index ON modeldata (collection_id);
CREATE INDEX IF NOT EXISTS modelData_teamId_index ON modeldata (team_id);
```
\ No newline at end of file
mixed-port: 7890
allow-lan: false
bind-address: '*'
mode: rule
log-level: warning
dns:
enable: true
ipv6: false
nameserver:
- 8.8.8.8
- 8.8.4.4
cache-size: 400
proxies:
proxy-groups:
- {
name: '♻️ 自动选择',
type: url-test,
proxies:
[
香港V02×1.5,
ABC,
印度01,
台湾03,
新加坡02,
新加坡03,
日本01,
日本02,
新加坡01,
美国01,
美国02,
台湾01,
台湾02
],
url: 'https://api.openai.com',
interval: 3600
}
rules:
- 'DOMAIN-SUFFIX,google.com,♻️ 自动选择'
- 'DOMAIN-SUFFIX,ai.fastgpt.in,♻️ 自动选择'
- 'DOMAIN-SUFFIX,openai.com,♻️ 自动选择'
- 'DOMAIN-SUFFIX,api.openai.com,♻️ 自动选择'
- 'MATCH,DIRECT'
export ALL_PROXY=socks5://127.0.0.1:7891
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
OLD_PROCESS=$(pgrep clash)
if [ ! -z "$OLD_PROCESS" ]; then
echo "Killing old process: $OLD_PROCESS"
kill $OLD_PROCESS
fi
sleep 2
cd /root/fastgpt/clash/fast
rm -f ./nohup.out || true
rm -f ./cache.db || true
nohup ./clash-linux-amd64-v3 -d ./ &
echo "Restart clash fast"
export ALL_PROXY=''
export http_proxy=''
export https_proxy=''
export HTTP_PROXY=''
export HTTPS_PROXY=''
OLD_PROCESS=$(pgrep clash)
if [ ! -z "$OLD_PROCESS" ]; then
echo "Killing old process: $OLD_PROCESS"
kill $OLD_PROCESS
fi
export type UploadImgProps = {
base64Img: string;
import { MongoImageTypeEnum } from './image/constants';
export type preUploadImgProps = {
type: `${MongoImageTypeEnum}`;
expiredTime?: Date;
metadata?: Record<string, any>;
shareId?: string;
};
export type UploadImgProps = preUploadImgProps & {
base64Img: string;
};
export type UrlFetchParams = {
urlList: string[];
......@@ -11,6 +17,7 @@ export type UrlFetchParams = {
};
export type UrlFetchResponse = {
url: string;
title: string;
content: string;
selector?: string;
}[];
export const imageBaseUrl = '/api/system/img/';
export enum MongoImageTypeEnum {
systemAvatar = 'systemAvatar',
appAvatar = 'appAvatar',
pluginAvatar = 'pluginAvatar',
datasetAvatar = 'datasetAvatar',
userAvatar = 'userAvatar',
teamAvatar = 'teamAvatar',
chatImage = 'chatImage',
docImage = 'docImage'
}
export const mongoImageTypeMap = {
[MongoImageTypeEnum.systemAvatar]: {
label: 'common.file.type.appAvatar',
unique: true
},
[MongoImageTypeEnum.appAvatar]: {
label: 'common.file.type.appAvatar',
unique: true
},
[MongoImageTypeEnum.pluginAvatar]: {
label: 'common.file.type.pluginAvatar',
unique: true
},
[MongoImageTypeEnum.datasetAvatar]: {
label: 'common.file.type.datasetAvatar',
unique: true
},
[MongoImageTypeEnum.userAvatar]: {
label: 'common.file.type.userAvatar',
unique: true
},
[MongoImageTypeEnum.teamAvatar]: {
label: 'common.file.type.teamAvatar',
unique: true
},
[MongoImageTypeEnum.chatImage]: {
label: 'common.file.type.chatImage',
unique: false
},
[MongoImageTypeEnum.docImage]: {
label: 'common.file.type.docImage',
unique: false
}
};
export const uniqueImageTypeList = Object.entries(mongoImageTypeMap)
.filter(([key, value]) => value.unique)
.map(([key]) => key as `${MongoImageTypeEnum}`);
import { MongoImageTypeEnum } from './constants';
export type MongoImageSchemaType = {
teamId: string;
binary: Buffer;
createTime: Date;
expiredTime?: Date;
type: `${MongoImageTypeEnum}`;
metadata?: { fileId?: string };
};
// The number of days left in the month is calculated as 30 days per month, and less than 1 day is calculated as 1 day
export const getMonthRemainingDays = () => {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth();
const date = now.getDate();
const days = new Date(year, month + 1, 0).getDate();
const remainingDays = days - date;
return remainingDays + 1;
};
......@@ -15,10 +15,10 @@ export const simpleMarkdownText = (rawText: string) => {
return `[${cleanedLinkText}](${url})`;
});
// replace special \.* ……
const reg1 = /\\([-.!`_(){}\[\]])/g;
// replace special #\.* ……
const reg1 = /\\([#`!*()+-_\[\]{}\\.])/g;
if (reg1.test(rawText)) {
rawText = rawText.replace(/\\([`!*()+-_\[\]{}\\.])/g, '$1');
rawText = rawText.replace(reg1, '$1');
}
// replace \\n
......@@ -45,24 +45,26 @@ export const uploadMarkdownBase64 = async ({
uploadImgController
}: {
rawText: string;
uploadImgController: (base64: string) => Promise<string>;
uploadImgController?: (base64: string) => Promise<string>;
}) => {
// match base64, upload and replace it
const base64Regex = /data:image\/.*;base64,([^\)]+)/g;
const base64Arr = rawText.match(base64Regex) || [];
// upload base64 and replace it
await Promise.all(
base64Arr.map(async (base64Img) => {
try {
const str = await uploadImgController(base64Img);
if (uploadImgController) {
// match base64, upload and replace it
const base64Regex = /data:image\/.*;base64,([^\)]+)/g;
const base64Arr = rawText.match(base64Regex) || [];
// upload base64 and replace it
await Promise.all(
base64Arr.map(async (base64Img) => {
try {
const str = await uploadImgController(base64Img);
rawText = rawText.replace(base64Img, str);
} catch (error) {
rawText = rawText.replace(base64Img, '');
rawText = rawText.replace(/!\[.*\]\(\)/g, '');
}
})
);
rawText = rawText.replace(base64Img, str);
} catch (error) {
rawText = rawText.replace(base64Img, '');
rawText = rawText.replace(/!\[.*\]\(\)/g, '');
}
})
);
}
// Remove white space on both sides of the picture
const trimReg = /(!\[.*\]\(.*\))\s*/g;
......@@ -70,5 +72,20 @@ export const uploadMarkdownBase64 = async ({
rawText = rawText.replace(trimReg, '$1');
}
return simpleMarkdownText(rawText);
return rawText;
};
export const markdownProcess = async ({
rawText,
uploadImgController
}: {
rawText: string;
uploadImgController?: (base64: string) => Promise<string>;
}) => {
const imageProcess = await uploadMarkdownBase64({
rawText,
uploadImgController
});
return simpleMarkdownText(imageProcess);
};
......@@ -33,6 +33,12 @@ export function countPromptTokens(
) {
const enc = getTikTokenEnc();
const text = `${role}\n${prompt}`;
// too large a text will block the thread
if (text.length > 15000) {
return text.length * 1.7;
}
try {
const encodeText = enc.encode(text);
return encodeText.length + role.length; // 补充 role 估算值
......
import dayjs from 'dayjs';
export const formatTime2YMDHM = (time: Date) => dayjs(time).format('YYYY-MM-DD HH:mm');
export const formatTime2YMDHM = (time?: Date) =>
time ? dayjs(time).format('YYYY-MM-DD HH:mm') : '';
import crypto from 'crypto';
import { customAlphabet } from 'nanoid';
/* check string is a web link */
export function strIsLink(str?: string) {
......@@ -36,3 +37,7 @@ export function replaceVariable(text: string, obj: Record<string, string | numbe
}
return text || '';
}
export const getNanoid = (size = 12) => {
return customAlphabet('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', size)();
};
......@@ -51,6 +51,10 @@ export type FastGPTFeConfigsType = {
favicon?: string;
customApiDomain?: string;
customSharePageDomain?: string;
subscription?: {
datasetStoreFreeSize?: number;
datasetStorePrice?: number;
};
};
export type SystemEnvType = {
......@@ -63,4 +67,5 @@ export type SystemEnvType = {
declare global {
var feConfigs: FastGPTFeConfigsType;
var systemEnv: SystemEnvType;
var systemInitd: boolean;
}
......@@ -31,16 +31,16 @@ export enum ChatSourceEnum {
}
export const ChatSourceMap = {
[ChatSourceEnum.test]: {
name: 'chat.logs.test'
name: 'core.chat.logs.test'
},
[ChatSourceEnum.online]: {
name: 'chat.logs.online'
name: 'core.chat.logs.online'
},
[ChatSourceEnum.share]: {
name: 'chat.logs.share'
name: 'core.chat.logs.share'
},
[ChatSourceEnum.api]: {
name: 'chat.logs.api'
name: 'core.chat.logs.api'
}
};
......
import { DatasetDataIndexItemType, DatasetSchemaType } from './type';
import { DatasetCollectionTrainingModeEnum, DatasetCollectionTypeEnum } from './constant';
import { TrainingModeEnum, DatasetCollectionTypeEnum } from './constant';
import type { LLMModelItemType } from '../ai/model.d';
/* ================= dataset ===================== */
......@@ -16,21 +16,38 @@ export type DatasetUpdateBody = {
};
/* ================= collection ===================== */
export type CreateDatasetCollectionParams = {
export type DatasetCollectionChunkMetadataType = {
trainingType?: `${TrainingModeEnum}`;
chunkSize?: number;
chunkSplitter?: string;
qaPrompt?: string;
};
export type CreateDatasetCollectionParams = DatasetCollectionChunkMetadataType & {
datasetId: string;
parentId?: string;
name: string;
type: `${DatasetCollectionTypeEnum}`;
trainingType?: `${DatasetCollectionTrainingModeEnum}`;
chunkSize?: number;
fileId?: string;
rawLink?: string;
qaPrompt?: string;
rawTextLength?: number;
hashRawText?: string;
metadata?: Record<string, any>;
};
export type ApiCreateDatasetCollectionParams = DatasetCollectionChunkMetadataType & {
datasetId: string;
parentId?: string;
metadata?: Record<string, any>;
};
export type TextCreateDatasetCollectionParams = ApiCreateDatasetCollectionParams & {
name: string;
text: string;
};
export type LinkCreateDatasetCollectionParams = ApiCreateDatasetCollectionParams & {
link: string;
chunkSplitter?: string;
};
/* ================= data ===================== */
export type PgSearchRawType = {
id: string;
......
......@@ -53,23 +53,7 @@ export const DatasetCollectionTypeMap = {
name: 'core.dataset.link'
},
[DatasetCollectionTypeEnum.virtual]: {
name: 'core.dataset.Virtual File'
}
};
export enum DatasetCollectionTrainingModeEnum {
manual = 'manual',
chunk = 'chunk',
qa = 'qa'
}
export const DatasetCollectionTrainingTypeMap = {
[DatasetCollectionTrainingModeEnum.manual]: {
label: 'core.dataset.collection.training.type manual'
},
[DatasetCollectionTrainingModeEnum.chunk]: {
label: 'core.dataset.collection.training.type chunk'
},
[DatasetCollectionTrainingModeEnum.qa]: {
label: 'core.dataset.collection.training.type qa'
name: 'core.dataset.Manual collection'
}
};
......
......@@ -42,11 +42,15 @@ export type DatasetCollectionSchemaType = {
type: `${DatasetCollectionTypeEnum}`;
createTime: Date;
updateTime: Date;
trainingType: `${TrainingModeEnum}`;
chunkSize: number;
chunkSplitter?: string;
qaPrompt?: string;
fileId?: string;
rawLink?: string;
qaPrompt?: string;
rawTextLength?: number;
hashRawText?: string;
metadata?: {
......
import { DatasetCollectionTypeEnum, DatasetDataIndexTypeEnum } from './constant';
import { TrainingModeEnum, DatasetCollectionTypeEnum, DatasetDataIndexTypeEnum } from './constant';
import { getFileIcon } from '../../common/file/icon';
import { strIsLink } from '../../common/string/tools';
......@@ -55,3 +55,8 @@ export function getDefaultIndex(props?: { q?: string; a?: string; dataId?: strin
dataId
};
}
export const predictDataLimitLength = (mode: `${TrainingModeEnum}`, data: any[]) => {
if (mode === TrainingModeEnum.qa) return data.length * 20;
return data.length;
};
......@@ -7,7 +7,7 @@
"encoding": "^0.1.13",
"js-tiktoken": "^1.0.7",
"openai": "4.23.0",
"pdfjs-dist": "^4.0.269",
"nanoid": "^4.0.1",
"timezones-list": "^3.0.2"
},
"devDependencies": {
......
......@@ -9,7 +9,6 @@ export type TeamSchema = {
createTime: Date;
balance: number;
maxSize: number;
lastDatasetBillTime: Date;
limit: {
lastExportDatasetTime: Date;
lastWebsiteSyncTime: Date;
......
......@@ -7,7 +7,7 @@ export enum BillSourceEnum {
api = 'api',
shareLink = 'shareLink',
training = 'training',
datasetStore = 'datasetStore'
datasetExpand = 'datasetExpand'
}
export const BillSourceMap: Record<`${BillSourceEnum}`, string> = {
......@@ -15,5 +15,5 @@ export const BillSourceMap: Record<`${BillSourceEnum}`, string> = {
[BillSourceEnum.api]: 'Api',
[BillSourceEnum.shareLink]: '免登录链接',
[BillSourceEnum.training]: '数据训练',
[BillSourceEnum.datasetStore]: '知识库存储'
[BillSourceEnum.datasetExpand]: '知识库扩容'
};
export type SubDatasetSizeParams = {
size: number;
renew: boolean;
};
export enum SubTypeEnum {
datasetStore = 'datasetStore'
}
export const subTypeMap = {
[SubTypeEnum.datasetStore]: {
label: 'support.user.team.subscription.type.datasetStore'
}
};
export enum SubModeEnum {
month = 'month',
year = 'year'
}
export const subModeMap = {
[SubModeEnum.month]: {
label: 'support.user.team.subscription.mode.month'
},
[SubModeEnum.year]: {
label: 'support.user.team.subscription.mode.year'
}
};
export enum SubStatusEnum {
active = 'active',
expired = 'expired'
}
export const subStatusMap = {
[SubStatusEnum.active]: {
label: 'support.user.team.subscription.status.active'
},
[SubStatusEnum.expired]: {
label: 'support.user.team.subscription.status.expired'
}
};
import { SubModeEnum, SubStatusEnum, SubTypeEnum } from './constants';
export type TeamSubSchema = {
teamId: string;
type: `${SubTypeEnum}`;
mode: `${SubModeEnum}`;
status: `${SubStatusEnum}`;
renew: boolean;
startTime: Date;
expiredTime: Date;
datasetStoreAmount?: number;
};
import path from 'path';
export const tmpFileDirPath =
process.env.NODE_ENV === 'production' ? '/app/tmp' : path.join(process.cwd(), 'tmp');
export const previewMaxCharCount = 3000;
export const imageBaseUrl = '/api/system/img/';
import { UploadImgProps } from '@fastgpt/global/common/file/api';
import { imageBaseUrl } from './constant';
import { imageBaseUrl } from '@fastgpt/global/common/file/image/constants';
import { MongoImage } from './schema';
export function getMongoImgUrl(id: string) {
......@@ -8,10 +8,13 @@ export function getMongoImgUrl(id: string) {
export const maxImgSize = 1024 * 1024 * 12;
export async function uploadMongoImg({
type,
base64Img,
teamId,
expiredTime,
metadata
metadata,
shareId
}: UploadImgProps & {
teamId: string;
}) {
......@@ -20,12 +23,16 @@ export async function uploadMongoImg({
}
const base64Data = base64Img.split(',')[1];
const binary = Buffer.from(base64Data, 'base64');
const { _id } = await MongoImage.create({
type,
teamId,
binary: Buffer.from(base64Data, 'base64'),
binary,
expiredTime: expiredTime,
metadata
metadata,
shareId
});
return getMongoImgUrl(String(_id));
......
import { TeamCollectionName } from '@fastgpt/global/support/user/team/constant';
import { connectionMongo, type Model } from '../../mongo';
import { MongoImageSchemaType } from '@fastgpt/global/common/file/image/type.d';
import { mongoImageTypeMap } from '@fastgpt/global/common/file/image/constants';
const { Schema, model, models } = connectionMongo;
const ImageSchema = new Schema({
......@@ -12,12 +14,18 @@ const ImageSchema = new Schema({
type: Date,
default: () => new Date()
},
expiredTime: {
type: Date
},
binary: {
type: Buffer
},
expiredTime: {
type: Date
type: {
type: String,
enum: Object.keys(mongoImageTypeMap),
required: true
},
metadata: {
type: Object
}
......@@ -25,14 +33,13 @@ const ImageSchema = new Schema({
try {
ImageSchema.index({ expiredTime: 1 }, { expireAfterSeconds: 60 });
ImageSchema.index({ type: 1 });
ImageSchema.index({ teamId: 1 });
} catch (error) {
console.log(error);
}
export const MongoImage: Model<{
teamId: string;
binary: Buffer;
metadata?: { fileId?: string };
}> = models['image'] || model('image', ImageSchema);
export const MongoImage: Model<MongoImageSchemaType> =
models['image'] || model('image', ImageSchema);
MongoImage.syncIndexes();
import * as pdfjs from 'pdfjs-dist/legacy/build/pdf.mjs';
// @ts-ignore
import('pdfjs-dist/legacy/build/pdf.worker.min.mjs');
import { ReadFileParams } from './type';
type TokenType = {
str: string;
dir: string;
width: number;
height: number;
transform: number[];
fontName: string;
hasEOL: boolean;
};
export const readPdfFile = async ({ path }: ReadFileParams) => {
const readPDFPage = async (doc: any, pageNo: number) => {
const page = await doc.getPage(pageNo);
const tokenizedText = await page.getTextContent();
const viewport = page.getViewport({ scale: 1 });
const pageHeight = viewport.height;
const headerThreshold = pageHeight * 0.95;
const footerThreshold = pageHeight * 0.05;
const pageTexts: TokenType[] = tokenizedText.items.filter((token: TokenType) => {
return (
!token.transform ||
(token.transform[5] < headerThreshold && token.transform[5] > footerThreshold)
);
});
// concat empty string 'hasEOL'
for (let i = 0; i < pageTexts.length; i++) {
const item = pageTexts[i];
if (item.str === '' && pageTexts[i - 1]) {
pageTexts[i - 1].hasEOL = item.hasEOL;
pageTexts.splice(i, 1);
i--;
}
}
page.cleanup();
return pageTexts
.map((token) => {
const paragraphEnd = token.hasEOL && /([。?!.?!\n\r]|(\r\n))$/.test(token.str);
return paragraphEnd ? `${token.str}\n` : token.str;
})
.join('');
};
const loadingTask = pdfjs.getDocument(path);
const doc = await loadingTask.promise;
const pageTextPromises = [];
for (let pageNo = 1; pageNo <= doc.numPages; pageNo++) {
pageTextPromises.push(readPDFPage(doc, pageNo));
}
const pageTexts = await Promise.all(pageTextPromises);
loadingTask.destroy();
return {
rawText: pageTexts.join('')
};
};
export type ReadFileParams = {
preview: boolean;
teamId: string;
path: string;
metadata?: Record<string, any>;
};
export type ReadFileResponse = {
rawText: string;
};
export type ReadFileBufferItemType = ReadFileParams & {
rawText: string;
};
declare global {
var readFileBuffers: ReadFileBufferItemType[];
}
import { readPdfFile } from './pdf';
import { readDocFle } from './word';
import { ReadFileBufferItemType, ReadFileParams } from './type';
global.readFileBuffers = global.readFileBuffers || [];
const bufferMaxSize = 200;
export const pushFileReadBuffer = (params: ReadFileBufferItemType) => {
global.readFileBuffers.push(params);
if (global.readFileBuffers.length > bufferMaxSize) {
global.readFileBuffers.shift();
}
};
export const getReadFileBuffer = ({ path, teamId }: ReadFileParams) =>
global.readFileBuffers.find((item) => item.path === path && item.teamId === teamId);
export const readFileContent = async (params: ReadFileParams) => {
const { path } = params;
const buffer = getReadFileBuffer(params);
if (buffer) {
return buffer;
}
const extension = path?.split('.')?.pop()?.toLowerCase() || '';
const { rawText } = await (async () => {
switch (extension) {
case 'pdf':
return readPdfFile(params);
case 'docx':
return readDocFle(params);
default:
return Promise.reject('Only support .pdf, .docx');
}
})();
pushFileReadBuffer({
...params,
rawText
});
return {
...params,
rawText
};
};
import mammoth from 'mammoth';
import { htmlToMarkdown } from '../../string/markdown';
import { ReadFileParams } from './type';
/**
* read docx to markdown
*/
export const readDocFle = async ({ path, metadata = {} }: ReadFileParams) => {
try {
const { value: html } = await mammoth.convertToHtml({
path
});
const md = await htmlToMarkdown(html);
return {
rawText: md
};
} catch (error) {
console.log('error doc read:', error);
return Promise.reject('Can not read doc file, please convert to PDF');
}
};
import type { NextApiRequest, NextApiResponse } from 'next';
import { customAlphabet } from 'nanoid';
import multer from 'multer';
import path from 'path';
import { BucketNameEnum, bucketNameMap } from '@fastgpt/global/common/file/constants';
import fs from 'fs';
const nanoid = customAlphabet('1234567890abcdef', 12);
import { getNanoid } from '@fastgpt/global/common/string/tools';
import { tmpFileDirPath } from './constants';
type FileType = {
fieldname: string;
......@@ -17,7 +15,9 @@ type FileType = {
size: number;
};
export function getUploadModel({ maxSize = 500 }: { maxSize?: number }) {
const expiredTime = 30 * 60 * 1000;
export const getUploadModel = ({ maxSize = 500 }: { maxSize?: number }) => {
maxSize *= 1024 * 1024;
class UploadModel {
uploader = multer({
......@@ -26,9 +26,12 @@ export function getUploadModel({ maxSize = 500 }: { maxSize?: number }) {
},
preservePath: true,
storage: multer.diskStorage({
filename: (_req, file, cb) => {
// destination: (_req, _file, cb) => {
// cb(null, tmpFileDirPath);
// },
filename: async (req, file, cb) => {
const { ext } = path.parse(decodeURIComponent(file.originalname));
cb(null, nanoid() + ext);
cb(null, `${Date.now() + expiredTime}-${getNanoid(32)}${ext}`);
}
})
}).any();
......@@ -75,14 +78,4 @@ export function getUploadModel({ maxSize = 500 }: { maxSize?: number }) {
}
return new UploadModel();
}
export const removeFilesByPaths = (paths: string[]) => {
paths.forEach((path) => {
fs.unlink(path, (err) => {
if (err) {
console.error(err);
}
});
});
};
import fs from 'fs';
import { tmpFileDirPath } from './constants';
export const removeFilesByPaths = (paths: string[]) => {
paths.forEach((path) => {
fs.unlink(path, (err) => {
if (err) {
console.error(err);
}
});
});
};
/* cron job. check expired tmp files */
export const checkExpiredTmpFiles = () => {
// get all file name
const files = fs.readdirSync(tmpFileDirPath).map((name) => {
const timestampStr = name.split('-')[0];
const expiredTimestamp = timestampStr ? Number(timestampStr) : 0;
return {
filename: name,
expiredTimestamp,
path: `${tmpFileDirPath}/${name}`
};
});
// count expiredFiles
const expiredFiles = files.filter((item) => item.expiredTimestamp < Date.now());
// remove expiredFiles
removeFilesByPaths(expiredFiles.map((item) => item.path));
};
......@@ -50,8 +50,11 @@ export const cheerioToHtml = ({
.get()
.join('\n');
const title = $('head title').text() || $('h1:first').text() || fetchUrl;
return {
html,
title,
usedSelector
};
};
......@@ -70,7 +73,7 @@ export const urlsFetch = async ({
});
const $ = cheerio.load(fetchRes.data);
const { html, usedSelector } = cheerioToHtml({
const { title, html, usedSelector } = cheerioToHtml({
fetchUrl: url,
$,
selector
......@@ -79,6 +82,7 @@ export const urlsFetch = async ({
return {
url,
title,
content: md,
selector: usedSelector
};
......@@ -87,6 +91,7 @@ export const urlsFetch = async ({
return {
url,
title: '',
content: '',
selector: ''
};
......
......@@ -15,7 +15,9 @@ export const htmlToMarkdown = (html?: string | null) =>
worker.on('message', (md: string) => {
worker.terminate();
resolve(simpleMarkdownText(md));
let rawText = simpleMarkdownText(md);
resolve(rawText);
});
worker.on('error', (err) => {
worker.terminate();
......
import nodeCron from 'node-cron';
export const setCron = (time: string, cb: () => void) => {
// second minute hour day month week
return nodeCron.schedule(time, cb);
};
......@@ -49,6 +49,7 @@ export const addLog = {
},
error(msg: string, error?: any) {
this.log('error', msg, {
message: error?.message,
stack: error?.stack,
...(error?.config && {
config: {
......
......@@ -2,6 +2,8 @@ export type DeleteDatasetVectorProps = {
id?: string;
datasetIds?: string[];
collectionIds?: string[];
collectionId?: string;
dataIds?: string[];
};
......
......@@ -101,14 +101,19 @@ export const deleteDatasetDataVector = async (
retry?: number;
}
): Promise<any> => {
const { id, datasetIds, collectionIds, dataIds, retry = 2 } = props;
const { id, datasetIds, collectionIds, collectionId, dataIds, retry = 2 } = props;
const where = await (() => {
if (id) return `id=${id}`;
if (datasetIds) return `dataset_id IN (${datasetIds.map((id) => `'${String(id)}'`).join(',')})`;
if (collectionIds)
if (collectionIds) {
return `collection_id IN (${collectionIds.map((id) => `'${String(id)}'`).join(',')})`;
if (dataIds) return `data_id IN (${dataIds.map((id) => `'${String(id)}'`).join(',')})`;
}
if (collectionId && dataIds) {
return `collection_id='${String(collectionId)}' and data_id IN (${dataIds
.map((id) => `'${String(id)}'`)
.join(',')})`;
}
return Promise.reject('deleteDatasetData: no where');
})();
......
......@@ -32,7 +32,7 @@ export async function getVectorsByText({
return Promise.reject('Embedding API 404');
}
if (!res?.data?.[0]?.embedding) {
console.log(res?.data);
console.log(res);
// @ts-ignore
return Promise.reject(res.data?.err?.message || 'Embedding API Error');
}
......
......@@ -2,8 +2,7 @@ import { connectionMongo, type Model } from '../../common/mongo';
const { Schema, model, models } = connectionMongo;
import { ChatItemSchema as ChatItemType } from '@fastgpt/global/core/chat/type';
import { ChatRoleMap } from '@fastgpt/global/core/chat/constants';
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 24);
import { getNanoid } from '@fastgpt/global/common/string/tools';
import {
TeamCollectionName,
TeamMemberCollectionName
......@@ -13,32 +12,32 @@ import { userCollectionName } from '../../support/user/schema';
import { ModuleOutputKeyEnum } from '@fastgpt/global/core/module/constants';
const ChatItemSchema = new Schema({
dataId: {
type: String,
require: true,
default: () => nanoid()
},
appId: {
teamId: {
type: Schema.Types.ObjectId,
ref: appCollectionName,
ref: TeamCollectionName,
required: true
},
chatId: {
type: String,
require: true
tmbId: {
type: Schema.Types.ObjectId,
ref: TeamMemberCollectionName,
required: true
},
userId: {
type: Schema.Types.ObjectId,
ref: userCollectionName
},
teamId: {
type: Schema.Types.ObjectId,
ref: TeamCollectionName,
required: true
chatId: {
type: String,
require: true
},
tmbId: {
dataId: {
type: String,
require: true,
default: () => getNanoid(22)
},
appId: {
type: Schema.Types.ObjectId,
ref: TeamMemberCollectionName,
ref: appCollectionName,
required: true
},
time: {
......@@ -80,10 +79,11 @@ const ChatItemSchema = new Schema({
});
try {
ChatItemSchema.index({ dataId: -1 });
ChatItemSchema.index({ teamId: 1 });
ChatItemSchema.index({ time: -1 });
ChatItemSchema.index({ appId: 1 });
ChatItemSchema.index({ chatId: 1 });
ChatItemSchema.index({ obj: 1 });
ChatItemSchema.index({ userGoodFeedback: 1 });
ChatItemSchema.index({ userBadFeedback: 1 });
ChatItemSchema.index({ customFeedbacks: 1 });
......
import {
DatasetCollectionTrainingModeEnum,
DatasetCollectionTypeEnum
} from '@fastgpt/global/core/dataset/constant';
import { TrainingModeEnum, DatasetCollectionTypeEnum } from '@fastgpt/global/core/dataset/constant';
import type { CreateDatasetCollectionParams } from '@fastgpt/global/core/dataset/api.d';
import { MongoDatasetCollection } from './schema';
......@@ -12,11 +9,15 @@ export async function createOneCollection({
parentId,
datasetId,
type,
trainingType = DatasetCollectionTrainingModeEnum.manual,
trainingType = TrainingModeEnum.chunk,
chunkSize = 0,
chunkSplitter,
qaPrompt,
fileId,
rawLink,
qaPrompt,
hashRawText,
rawTextLength,
metadata = {},
......@@ -30,11 +31,15 @@ export async function createOneCollection({
datasetId,
name,
type,
trainingType,
chunkSize,
chunkSplitter,
qaPrompt,
fileId,
rawLink,
qaPrompt,
rawTextLength,
hashRawText,
metadata
......@@ -74,7 +79,7 @@ export function createDefaultCollection({
datasetId,
parentId,
type: DatasetCollectionTypeEnum.virtual,
trainingType: DatasetCollectionTrainingModeEnum.manual,
trainingType: TrainingModeEnum.chunk,
chunkSize: 0,
updateTime: new Date('2099')
});
......
import { connectionMongo, type Model } from '../../../common/mongo';
const { Schema, model, models } = connectionMongo;
import { DatasetCollectionSchemaType } from '@fastgpt/global/core/dataset/type.d';
import {
DatasetCollectionTrainingTypeMap,
DatasetCollectionTypeMap
} from '@fastgpt/global/core/dataset/constant';
import { TrainingTypeMap, DatasetCollectionTypeMap } from '@fastgpt/global/core/dataset/constant';
import { DatasetCollectionName } from '../schema';
import {
TeamCollectionName,
......@@ -56,15 +53,23 @@ const DatasetCollectionSchema = new Schema({
type: Date,
default: () => new Date()
},
trainingType: {
type: String,
enum: Object.keys(DatasetCollectionTrainingTypeMap),
enum: Object.keys(TrainingTypeMap),
required: true
},
chunkSize: {
type: Number,
required: true
},
chunkSplitter: {
type: String
},
qaPrompt: {
type: String
},
fileId: {
type: Schema.Types.ObjectId,
ref: 'dataset.files'
......@@ -72,9 +77,6 @@ const DatasetCollectionSchema = new Schema({
rawLink: {
type: String
},
qaPrompt: {
type: String
},
rawTextLength: {
type: Number
......@@ -89,8 +91,9 @@ const DatasetCollectionSchema = new Schema({
});
try {
DatasetCollectionSchema.index({ teamId: 1 });
DatasetCollectionSchema.index({ datasetId: 1 });
DatasetCollectionSchema.index({ datasetId: 1, parentId: 1 });
DatasetCollectionSchema.index({ teamId: 1, datasetId: 1, parentId: 1 });
DatasetCollectionSchema.index({ updateTime: -1 });
DatasetCollectionSchema.index({ hashRawText: -1 });
} catch (error) {
......
......@@ -4,7 +4,7 @@ import type { ParentTreePathItemType } from '@fastgpt/global/common/parentFolder
import { splitText2Chunks } from '@fastgpt/global/common/string/textSplitter';
import { MongoDatasetTraining } from '../training/schema';
import { urlsFetch } from '../../../common/string/cheerio';
import { DatasetCollectionTypeEnum } from '@fastgpt/global/core/dataset/constant';
import { DatasetCollectionTypeEnum, TrainingModeEnum } from '@fastgpt/global/core/dataset/constant';
import { hashStr } from '@fastgpt/global/common/string/tools';
/**
......@@ -92,8 +92,12 @@ export const getCollectionAndRawText = async ({
return Promise.reject('Collection not found');
}
const rawText = await (async () => {
if (newRawText) return newRawText;
const { title, rawText } = await (async () => {
if (newRawText)
return {
title: '',
rawText: newRawText
};
// link
if (col.type === DatasetCollectionTypeEnum.link && col.rawLink) {
// crawl new data
......@@ -102,12 +106,18 @@ export const getCollectionAndRawText = async ({
selector: col.datasetId?.websiteConfig?.selector || col?.metadata?.webPageSelector
});
return result[0].content;
return {
title: result[0].title,
rawText: result[0].content
};
}
// file
return '';
return {
title: '',
rawText: ''
};
})();
const hashRawText = hashStr(rawText);
......@@ -115,6 +125,7 @@ export const getCollectionAndRawText = async ({
return {
collection: col,
title,
rawText,
isSameRawText
};
......@@ -135,6 +146,7 @@ export const reloadCollectionChunks = async ({
rawText?: string;
}) => {
const {
title,
rawText: newRawText,
collection: col,
isSameRawText
......@@ -154,6 +166,11 @@ export const reloadCollectionChunks = async ({
});
// insert to training queue
const model = await (() => {
if (col.trainingType === TrainingModeEnum.chunk) return col.datasetId.vectorModel;
if (col.trainingType === TrainingModeEnum.qa) return col.datasetId.agentModel;
return Promise.reject('Training model error');
})();
await MongoDatasetTraining.insertMany(
chunks.map((item, i) => ({
teamId: col.teamId,
......@@ -163,7 +180,7 @@ export const reloadCollectionChunks = async ({
billId,
mode: col.trainingType,
prompt: '',
model: col.datasetId.vectorModel,
model,
q: item,
a: '',
chunkIndex: i
......@@ -172,6 +189,7 @@ export const reloadCollectionChunks = async ({
// update raw text
await MongoDatasetCollection.findByIdAndUpdate(col._id, {
...(title && { name: title }),
rawTextLength: newRawText.length,
hashRawText: hashStr(newRawText)
});
......
......@@ -75,7 +75,13 @@ export async function delCollectionRelevantData({
/**
* delete one data by mongoDataId
*/
export async function delDatasetDataByDataId(mongoDataId: string) {
await deleteDatasetDataVector({ dataIds: [mongoDataId] });
export async function delDatasetDataByDataId({
collectionId,
mongoDataId
}: {
collectionId: string;
mongoDataId: string;
}) {
await deleteDatasetDataVector({ collectionId, dataIds: [mongoDataId] });
await MongoDatasetData.findByIdAndDelete(mongoDataId);
}
......@@ -85,12 +85,13 @@ const DatasetDataSchema = new Schema({
});
try {
DatasetDataSchema.index({ teamId: 1 });
DatasetDataSchema.index({ datasetId: 1 });
DatasetDataSchema.index({ collectionId: 1 });
DatasetDataSchema.index({ updateTime: -1 });
DatasetDataSchema.index({ collectionId: 1, q: 1, a: 1 });
// full text index
DatasetDataSchema.index({ datasetId: 1, fullTextToken: 'text' });
DatasetDataSchema.index({ inited: 1 });
} catch (error) {
console.log(error);
}
......
......@@ -92,7 +92,7 @@ const DatasetSchema = new Schema({
});
try {
DatasetSchema.index({ userId: 1 });
DatasetSchema.index({ teamId: 1 });
} catch (error) {
console.log(error);
}
......
......@@ -102,6 +102,7 @@ const TrainingDataSchema = new Schema({
});
try {
TrainingDataSchema.index({ teamId: 1 });
TrainingDataSchema.index({ weight: -1 });
TrainingDataSchema.index({ lockTime: 1 });
TrainingDataSchema.index({ datasetId: 1 });
......
......@@ -3,17 +3,19 @@
"version": "1.0.0",
"dependencies": {
"@fastgpt/global": "workspace:*",
"axios": "^1.5.1",
"cheerio": "1.0.0-rc.12",
"cookie": "^0.5.0",
"dayjs": "^1.11.7",
"encoding": "^0.1.13",
"jsonwebtoken": "^9.0.2",
"mammoth": "^1.6.0",
"mongoose": "^7.0.2",
"nanoid": "^4.0.1",
"dayjs": "^1.11.7",
"next": "13.5.2",
"multer": "1.4.5-lts.1",
"axios": "^1.5.1",
"cheerio": "1.0.0-rc.12",
"next": "13.5.2",
"nextjs-cors": "^2.1.2",
"node-cron": "^3.0.3",
"pdfjs-dist": "^4.0.269",
"pg": "^8.10.0",
"tunnel": "^0.0.6"
},
......@@ -21,6 +23,7 @@
"@types/cookie": "^0.5.2",
"@types/jsonwebtoken": "^9.0.3",
"@types/multer": "^1.4.10",
"@types/node-cron": "^3.0.11",
"@types/pg": "^8.6.6",
"@types/tunnel": "^0.0.4"
}
......
import { MongoOpenApi } from './schema';
export async function updateApiKeyUsedTime(id: string) {
await MongoOpenApi.findByIdAndUpdate(id, {
export function updateApiKeyUsedTime(id: string) {
MongoOpenApi.findByIdAndUpdate(id, {
lastUsedTime: new Date()
}).catch((err) => {
console.log('update apiKey used time error', err);
});
}
export async function updateApiKeyUsage({ apikey, usage }: { apikey: string; usage: number }) {
await MongoOpenApi.findOneAndUpdate(
export function updateApiKeyUsage({ apikey, usage }: { apikey: string; usage: number }) {
MongoOpenApi.findOneAndUpdate(
{ apiKey: apikey },
{
$inc: {
usage
}
}
);
).catch((err) => {
console.log('update apiKey usage error', err);
});
}
......@@ -9,17 +9,15 @@ export const updateOutLinkUsage = async ({
shareId: string;
total: number;
}) => {
try {
await MongoOutLink.findOneAndUpdate(
{ shareId },
{
$inc: { total },
lastTime: new Date()
}
);
} catch (err) {
MongoOutLink.findOneAndUpdate(
{ shareId },
{
$inc: { total },
lastTime: new Date()
}
).catch((err) => {
console.log('update shareChat error', err);
}
});
};
export const pushResult2Remote = async ({
......
import { getVectorCountByTeamId } from '../../../common/vectorStore/controller';
import { getTeamDatasetValidSub } from '../../wallet/sub/utils';
export const checkDatasetLimit = async ({
teamId,
freeSize = Infinity,
insertLen = 0
}: {
teamId: string;
freeSize?: number;
insertLen?: number;
}) => {
const { maxSize } = await getTeamDatasetValidSub({ teamId, freeSize });
const usedSize = await getVectorCountByTeamId(teamId);
if (usedSize + insertLen >= maxSize) {
return Promise.reject(`数据库容量已满,无法继续添加。可以在账号页面进行扩容。`);
}
return;
};
......@@ -30,9 +30,6 @@ const TeamSchema = new Schema({
type: Number,
default: 5
},
lastDatasetBillTime: {
type: Date
},
limit: {
lastExportDatasetTime: {
type: Date
......
......@@ -54,6 +54,7 @@ const BillSchema = new Schema({
try {
BillSchema.index({ teamId: 1 });
BillSchema.index({ tmbId: 1 });
BillSchema.index({ tmbId: 1, time: 1 });
BillSchema.index({ time: 1 }, { expireAfterSeconds: 90 * 24 * 60 * 60 });
} catch (error) {
console.log(error);
......
import { connectionMongo, type Model } from '../../../common/mongo';
const { Schema, model, models } = connectionMongo;
import { TeamCollectionName } from '@fastgpt/global/support/user/team/constant';
import { subModeMap, subStatusMap, subTypeMap } from '@fastgpt/global/support/wallet/sub/constants';
import type { TeamSubSchema } from '@fastgpt/global/support/wallet/sub/type';
export const subCollectionName = 'team.subscription';
const SubSchema = new Schema({
teamId: {
type: Schema.Types.ObjectId,
ref: TeamCollectionName,
required: true
},
type: {
type: String,
enum: Object.keys(subTypeMap),
required: true
},
mode: {
type: String,
enum: Object.keys(subModeMap),
required: true
},
status: {
type: String,
enum: Object.keys(subStatusMap),
required: true
},
renew: {
type: Boolean,
default: true
},
startTime: {
type: Date
},
expiredTime: {
type: Date
},
datasetStoreAmount: {
type: Number
}
});
try {
SubSchema.index({ teamId: 1 });
SubSchema.index({ status: 1 });
SubSchema.index({ type: 1 });
SubSchema.index({ expiredTime: -1 });
} catch (error) {
console.log(error);
}
export const MongoTeamSub: Model<TeamSubSchema> =
models[subCollectionName] || model(subCollectionName, SubSchema);
import { SubStatusEnum } from '@fastgpt/global/support/wallet/sub/constants';
import { MongoTeamSub } from './schema';
/* get team dataset size */
export const getTeamDatasetValidSub = async ({
teamId,
freeSize = Infinity
}: {
teamId: string;
freeSize?: number;
}) => {
const sub = await MongoTeamSub.findOne({
teamId,
status: SubStatusEnum.active
})
.sort({
expiredTime: -1
})
.lean();
const maxSize = (() => {
if (!sub || !sub.datasetStoreAmount) return freeSize;
return sub.datasetStoreAmount + freeSize;
})();
return {
maxSize,
sub
};
};
declare global {
var defaultTeamDatasetLimit: number;
}
......@@ -4,15 +4,13 @@ export type CompressImgProps = {
maxSize?: number;
};
export const compressBase64ImgAndUpload = ({
export const compressBase64Img = ({
base64Img,
maxW = 1080,
maxH = 1080,
maxSize = 1024 * 500, // 300kb
uploadController
maxSize = 1024 * 500 // 500kb
}: CompressImgProps & {
base64Img: string;
uploadController: (base64: string) => Promise<string>;
}) => {
return new Promise<string>((resolve, reject) => {
const fileType =
......@@ -54,12 +52,7 @@ export const compressBase64ImgAndUpload = ({
return reject('图片太大了');
}
try {
const src = await uploadController(compressedDataUrl);
resolve(src);
} catch (error) {
reject(error);
}
resolve(compressedDataUrl);
};
img.onerror = reject;
});
......
import { htmlStr2Md } from '../../string/markdown';
import { readFileRawText } from './rawText';
import { markdownProcess } from '@fastgpt/global/common/string/markdown';
export const readHtmlFile = async ({
file,
uploadImgController
}: {
file: File;
uploadImgController?: (base64: string) => Promise<string>;
}) => {
const { rawText } = await readFileRawText(file);
const md = htmlStr2Md(rawText);
const simpleMd = await markdownProcess({
rawText: md,
uploadImgController
});
return { rawText: rawText };
};
import { loadFile2Buffer } from '../utils';
import { readHtmlFile } from './html';
import { readMdFile } from './md';
import { readPdfFile } from './pdf';
import { readFileRawText } from './rawText';
import { readWordFile } from './word';
export const readFileRawContent = async ({
file,
uploadBase64Controller
}: {
file: File;
uploadBase64Controller?: (base64: string) => Promise<string>;
}): Promise<{
rawText: string;
}> => {
const extension = file?.name?.split('.')?.pop()?.toLowerCase();
switch (extension) {
case 'txt':
return readFileRawText(file);
case 'md':
return readMdFile({
file,
uploadImgController: uploadBase64Controller
});
case 'html':
return readHtmlFile({
file,
uploadImgController: uploadBase64Controller
});
case 'pdf':
const pdf = await loadFile2Buffer({ file });
return readPdfFile({ pdf });
case 'docx':
return readWordFile({
file,
uploadImgController: uploadBase64Controller
});
default:
return {
rawText: ''
};
}
};
import { markdownProcess } from '@fastgpt/global/common/string/markdown';
import { readFileRawText } from './rawText';
export const readMdFile = async ({
file,
uploadImgController
}: {
file: File;
uploadImgController?: (base64: string) => Promise<string>;
}) => {
const { rawText: md } = await readFileRawText(file);
const simpleMd = await markdownProcess({
rawText: md,
uploadImgController
});
return { rawText: simpleMd };
};
/* read file to txt */
import * as pdfjsLib from 'pdfjs-dist';
export const readPdfFile = async ({ pdf }: { pdf: string | URL | ArrayBuffer }) => {
pdfjsLib.GlobalWorkerOptions.workerSrc = '/js/pdf.worker.js';
type TokenType = {
str: string;
dir: string;
width: number;
height: number;
transform: number[];
fontName: string;
hasEOL: boolean;
};
type TokenType = {
str: string;
dir: string;
width: number;
height: number;
transform: number[];
fontName: string;
hasEOL: boolean;
};
export const readPdfFile = async ({ pdf }: { pdf: ArrayBuffer }) => {
pdfjsLib.GlobalWorkerOptions.workerSrc = '/js/pdf.worker.js';
const readPDFPage = async (doc: any, pageNo: number) => {
const page = await doc.getPage(pageNo);
......@@ -58,5 +58,7 @@ export const readPdfFile = async ({ pdf }: { pdf: string | URL | ArrayBuffer })
}
const pageTexts = await Promise.all(pageTextPromises);
return pageTexts.join('');
return {
rawText: pageTexts.join('')
};
};
import { uploadMarkdownBase64 } from '@fastgpt/global/common/string/markdown';
import { htmlStr2Md } from '../string/markdown';
/**
* read file raw text
*/
export const readFileRawText = (file: File) => {
return new Promise((resolve: (_: string) => void, reject) => {
return new Promise<{ rawText: string }>((resolve, reject) => {
try {
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result as string);
resolve({
rawText: reader.result as string
});
};
reader.onerror = (err) => {
console.log('error txt read:', err);
......@@ -20,34 +20,3 @@ export const readFileRawText = (file: File) => {
}
});
};
export const readMdFile = async ({
file,
uploadImgController
}: {
file: File;
uploadImgController: (base64: string) => Promise<string>;
}) => {
const md = await readFileRawText(file);
const rawText = await uploadMarkdownBase64({
rawText: md,
uploadImgController
});
return rawText;
};
export const readHtmlFile = async ({
file,
uploadImgController
}: {
file: File;
uploadImgController: (base64: string) => Promise<string>;
}) => {
const md = htmlStr2Md(await readFileRawText(file));
const rawText = await uploadMarkdownBase64({
rawText: md,
uploadImgController
});
return rawText;
};
import { markdownProcess } from '@fastgpt/global/common/string/markdown';
import { htmlStr2Md } from '../../string/markdown';
import { loadFile2Buffer } from '../utils';
import mammoth from 'mammoth';
export const readWordFile = async ({
file,
uploadImgController
}: {
file: File;
uploadImgController?: (base64: string) => Promise<string>;
}) => {
const buffer = await loadFile2Buffer({ file });
const { value: html } = await mammoth.convertToHtml({
arrayBuffer: buffer
});
const md = htmlStr2Md(html);
const rawText = await markdownProcess({
rawText: md,
uploadImgController: uploadImgController
});
return {
rawText
};
};
import { getErrText } from '@fastgpt/global/common/error/utils';
export const loadFile2Buffer = ({ file, onError }: { file: File; onError?: (err: any) => void }) =>
new Promise<ArrayBuffer>((resolve, reject) => {
try {
let reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = async ({ target }) => {
if (!target?.result) {
onError?.('Load file error');
return reject('Load file error');
}
try {
resolve(target.result as ArrayBuffer);
} catch (err) {
console.log(err, 'Load file error');
onError?.(err);
reject(getErrText(err, 'Load file error'));
}
};
reader.onerror = (err) => {
console.log(err, 'Load file error');
onError?.(err);
reject(getErrText(err, 'Load file error'));
};
} catch (error) {
reject('The browser does not support file content reading');
}
});
// @ts-nocheck
export const iconPaths = {
chat: () => import('./icons/chat.svg'),
chatSend: () => import('./icons/chatSend.svg'),
closeSolid: () => import('./icons/closeSolid.svg'),
collectionLight: () => import('./icons/collectionLight.svg'),
......
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1683254586102" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="940" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M512 34.13333333c263.91893333 0 477.86666667 213.94773333 477.86666667 477.86666667S775.91893333 989.86666667 512 989.86666667H79.6448A45.51146667 45.51146667 0 0 1 34.13333333 944.3552V512C34.13333333 248.08106667 248.08106667 34.13333333 512 34.13333333zM307.2 580.26666667a22.7552 22.7552 0 0 0-22.7552 22.7552V648.53333333A22.7552 22.7552 0 0 0 307.2 671.28853333h227.5552A22.7552 22.7552 0 0 0 557.51146667 648.53333333v-45.51146666A22.7552 22.7552 0 0 0 534.7552 580.26666667H307.2z m0-182.0448a22.7552 22.7552 0 0 0-22.7552 22.75626666v45.5104A22.7552 22.7552 0 0 0 307.2 489.2448h409.6a22.7552 22.7552 0 0 0 22.7552-22.75626667v-45.5104A22.7552 22.7552 0 0 0 716.8 398.22186667H307.2z" p-id="941"></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1691473064468" class="icon" viewBox="0 0 1376 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11084" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="64"><path d="M542.206157 930.292953q-3.327704 0-6.766331-0.197198c-22.332588-1.232483-45.700462-8.22066-72.716485-16.293422-100.163877-29.789109-139.147308-26.707902-170.440046-24.193638-46.341353 3.697448-83.439085 14.469348-116.186153 23.934816-51.037113 14.789794-95.110697 27.521341-133.576486-6.162414C17.057562 885.097808 2.760761 849.096986 0.02465 800.364616V169.025304c0-82.958417 62.228056-150.584748 139.147307-151.804906a993.578331 993.578331 0 0 1 368.364459 0 137.939475 137.939475 0 0 1 98.278178 45.219793c26.338157 28.66755 40.84448 66.554071 40.84448 106.585113V799.193758c-2.85936 48.153103-17.143836 84.326473-42.471357 107.534124-17.353358 15.825079-37.664674 23.565071-61.98156 23.565071z m-221.095089-84.979689c62.856623 0 112.673577 14.863743 153.900127 27.114621 52.294245 15.590907 78.398231 22.18469 99.966679 2.464966 16.675492-15.282787 26.276533-41.411422 28.507327-77.646416V169.025304c0-29.222167-10.463779-56.694209-29.468663-77.39992a95.825537 95.825537 0 0 0-68.723241-31.280413h-1.996622l-1.959648-0.369745a950.515382 950.515382 0 0 0-356.027305 0l-1.996622 0.382069h-2.033597c-25.734241 0-50.112751 11.092345-68.649292 31.292739-19.004885 20.681061-29.468664 48.165428-29.468663 77.399919v629.539888c2.11987 36.395217 11.474415 62.092483 27.792487 76.413933 9.391519 8.22066 19.534852 11.375816 33.905601 10.562378 16.022276-0.912037 36.087096-6.704706 59.270098-13.409413 32.98124-9.551742 74.035242-21.432876 124.714934-25.500069 11.10467-0.936687 21.864245-1.343406 32.2664-1.343406z" p-id="11085"></path><path d="M1145.642059 930.292953q-3.327704 0-6.766331-0.197198c-22.332588-1.232483-45.700462-8.22066-72.716485-16.293422-100.126902-29.789109-139.085684-26.707902-170.390746-24.193638-46.341353 3.697448-83.439085 14.469348-116.186154 23.934816-51.037113 14.789794-95.123022 27.521341-133.576485-6.162414-25.463095-22.283289-39.759895-58.284111-42.496007-107.016481l43.075274-2.464965c2.058246 36.715663 11.425116 62.610126 27.829461 76.96855 9.391519 8.22066 19.522527 11.375816 33.905602 10.562378 16.022276-0.912037 36.087096-6.704706 59.270098-13.409413 32.95659-9.453143 74.035242-21.284978 124.714934-25.40147 78.311957-6.297987 138.124347 11.536039 186.166526 25.882138 52.294245 15.590907 78.398231 22.18469 99.96668 2.464966 16.675492-15.282787 26.276533-41.411422 28.507327-77.646416V169.025304c0-29.222167-10.463779-56.694209-29.480988-77.39992a95.825537 95.825537 0 0 0-68.723241-31.280413h-1.996622l-1.959648-0.369745a950.515382 950.515382 0 0 0-356.027305 0l-1.996623 0.382069h-2.033596c-25.734241 0-50.112751 11.092345-68.649292 31.292739-19.004885 20.681061-29.468664 48.165428-29.468664 77.399919h-43.136897c0-82.958417 62.228056-150.584748 139.147307-151.804906a993.590656 993.590656 0 0 1 368.364459 0 137.92715 137.92715 0 0 1 98.253528 45.207469c26.338157 28.66755 40.84448 66.554071 40.84448 106.585112V799.193758c-2.85936 48.153103-17.143836 84.326473-42.471357 107.534124-17.304058 15.825079-37.60305 23.565071-61.969235 23.565071zM164.8076 214.097199h344.146171v43.136898H164.8076zM164.8076 361.26797h344.146171v43.136898H164.8076zM164.8076 508.438741h249.861237v43.136898H164.8076z" p-id="11086"></path><path d="M767.479362 214.097199h344.146172v43.136898H767.479362zM767.479362 361.26797h344.146172v43.136898H767.479362zM981.980668 578.480738h181.680289v43.136898H981.980668z" p-id="11087"></path><path d="M1051.246201 509.215205h43.136898v181.680289h-43.136898z" p-id="11088"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 19">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M4.52152 0.866418L4.98486 0.866419C6.00744 0.866407 6.83903 0.866398 7.51388 0.921535C8.21092 0.978485 8.83345 1.09949 9.41267 1.39462C10.0313 1.70982 10.5714 2.15239 10.9999 2.68915C11.4284 2.15239 11.9686 1.70982 12.5872 1.39462C13.1664 1.09949 13.789 0.978485 14.486 0.921535C15.1608 0.866398 15.9924 0.866407 17.015 0.866419L17.4783 0.866418C17.9746 0.866397 18.4092 0.866379 18.7685 0.895736C19.1497 0.926885 19.5384 0.996294 19.9151 1.18822C20.4707 1.47129 20.9223 1.92296 21.2054 2.47851C21.3973 2.85519 21.4667 3.24389 21.4979 3.62514C21.5272 3.98444 21.5272 4.41906 21.5272 4.91526V14.0847C21.5272 14.5809 21.5272 15.0156 21.4979 15.3749C21.4667 15.7561 21.3973 16.1448 21.2054 16.5215C20.9223 17.077 20.4707 17.5287 19.9151 17.8118C19.5384 18.0037 19.1497 18.0731 18.7685 18.1043C18.4092 18.1336 17.9745 18.1336 17.4783 18.1336H4.52154C4.02533 18.1336 3.59069 18.1336 3.23138 18.1043C2.85012 18.0731 2.46143 18.0037 2.08475 17.8118C1.5292 17.5287 1.07753 17.077 0.794462 16.5215C0.602533 16.1448 0.533125 15.7561 0.501975 15.3749C0.472618 15.0156 0.472636 14.5809 0.472657 14.0847V4.91528C0.472636 4.41907 0.472618 3.98445 0.501975 3.62514C0.533125 3.24389 0.602533 2.85519 0.794462 2.47851C1.07753 1.92296 1.5292 1.47129 2.08475 1.18822C2.46143 0.996294 2.85012 0.926885 3.23138 0.895736C3.59069 0.866379 4.02531 0.866397 4.52152 0.866418ZM9.94113 7.98505C9.94113 6.90701 9.9403 6.16216 9.89304 5.58372C9.84679 5.01764 9.7614 4.70481 9.64373 4.47386C9.38213 3.96045 8.96471 3.54303 8.4513 3.28143C8.22035 3.16376 7.90752 3.07837 7.34144 3.03212C6.763 2.98486 6.01815 2.98403 4.94011 2.98403H4.56137C4.01362 2.98403 3.66648 2.98486 3.40382 3.00632C3.15352 3.02677 3.07453 3.06056 3.04613 3.07503C2.88903 3.15507 2.76131 3.28279 2.68127 3.43989C2.6668 3.46829 2.63301 3.54728 2.61256 3.79758C2.5911 4.06024 2.59027 4.40738 2.59027 4.95514V14.0449C2.59027 14.5926 2.5911 14.9398 2.61256 15.2024C2.63301 15.4527 2.6668 15.5317 2.68127 15.5601C2.76131 15.7172 2.88903 15.8449 3.04613 15.925C3.07453 15.9394 3.15352 15.9732 3.40382 15.9937C3.66648 16.0151 4.01362 16.016 4.56137 16.016H9.94113V7.98505ZM12.0587 16.016V7.98505C12.0587 6.90701 12.0596 6.16216 12.1068 5.58372C12.1531 5.01764 12.2385 4.70481 12.3561 4.47386C12.6177 3.96045 13.0352 3.54303 13.5486 3.28143C13.7795 3.16376 14.0923 3.07837 14.6584 3.03212C15.2369 2.98486 15.9817 2.98403 17.0598 2.98403H17.4385C17.9862 2.98403 18.3334 2.98486 18.596 3.00632C18.8463 3.02677 18.9253 3.06056 18.9537 3.07503C19.1108 3.15507 19.2386 3.28279 19.3186 3.43989C19.3331 3.46829 19.3669 3.54728 19.3873 3.79758C19.4088 4.06024 19.4096 4.40738 19.4096 4.95514V14.0449C19.4096 14.5926 19.4088 14.9398 19.3873 15.2024C19.3669 15.4527 19.3331 15.5317 19.3186 15.5601C19.2386 15.7172 19.1108 15.8449 18.9537 15.925C18.9253 15.9394 18.8463 15.9732 18.596 15.9937C18.3334 16.0151 17.9862 16.016 17.4385 16.016H12.0587Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688888426962" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="24999" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M1024 496C1012.8 232 798.4 17.6 534.4 8 393.6 1.6 259.2 52.8 156.8 150.4 56 248 0 379.2 0 520c0 230.4 155.2 433.6 376 492.8 6.4 1.6 12.8 3.2 19.2 3.2 16 0 32-4.8 44.8-16 17.6-14.4 28.8-35.2 28.8-57.6v-52.8c0-14.4 1.6-78.4 1.6-91.2 1.6-8 3.2-14.4 8-19.2 11.2-14.4 12.8-33.6 4.8-49.6-8-14.4-20.8-24-36.8-25.6-11.2-1.6-22.4-3.2-30.4-6.4-12.8-3.2-25.6-9.6-38.4-16-9.6-4.8-19.2-12.8-27.2-22.4-6.4-8-12.8-20.8-17.6-36.8-6.4-19.2-9.6-40-9.6-62.4 0-28.8 9.6-52.8 27.2-72l17.6-19.2-9.6-24c-3.2-8-6.4-19.2-4.8-38.4 22.4 8 28.8 12.8 28.8 12.8l1.6 1.6c6.4 3.2 11.2 8 16 9.6l19.2 11.2 16-4.8c27.2-8 54.4-11.2 83.2-11.2 28.8 0 56 3.2 83.2 11.2l16 4.8 33.6-20.8c11.2-6.4 22.4-12.8 35.2-17.6 1.6 14.4 0 27.2-4.8 40l-9.6 24 17.6 19.2c17.6 19.2 27.2 43.2 27.2 72 0 24-3.2 43.2-8 60.8-6.4 19.2-12.8 30.4-19.2 38.4-6.4 8-16 16-28.8 24-14.4 8-25.6 11.2-38.4 16-8 3.2-20.8 4.8-32 6.4h-1.6c-16 3.2-28.8 14.4-35.2 28.8-6.4 14.4-4.8 30.4 4.8 44.8 6.4 8 9.6 20.8 9.6 36.8v126.4c0 22.4 11.2 44.8 28.8 57.6 17.6 12.8 41.6 17.6 64 11.2C888 942.4 1035.2 729.6 1024 496zM651.2 931.2V816c0-14.4-1.6-27.2-4.8-38.4 17.6-4.8 35.2-11.2 54.4-22.4l1.6-1.6c20.8-12.8 36.8-25.6 49.6-41.6 16-19.2 25.6-41.6 33.6-64 8-25.6 12.8-52.8 12.8-86.4 0-41.6-11.2-76.8-33.6-108.8 6.4-33.6 3.2-67.2-11.2-104l-6.4-17.6-17.6-6.4c-17.6-6.4-40-4.8-67.2 6.4-17.6 6.4-33.6 14.4-51.2 24l-3.2 3.2c-56-12.8-116.8-12.8-174.4 0-1.6-1.6-3.2-1.6-4.8-3.2-9.6-6.4-24-14.4-46.4-22.4-27.2-12.8-51.2-14.4-70.4-8l-17.6 6.4-6.4 17.6c-14.4 38.4-17.6 72-9.6 104-22.4 30.4-33.6 67.2-33.6 108.8 0 30.4 3.2 57.6 12.8 84.8 8 27.2 19.2 49.6 32 65.6 16 17.6 32 32 51.2 41.6 17.6 9.6 35.2 17.6 54.4 22.4-1.6 4.8-1.6 9.6-3.2 16V843.2c-38.4-12.8-70.4-28.8-96-56-17.6-19.2-36.8-38.4-46.4-44.8-20.8-9.6-33.6 11.2-28.8 20.8 4.8 14.4 25.6 22.4 36.8 33.6 12.8 12.8 14.4 30.4 25.6 44.8 16 22.4 72 49.6 110.4 41.6v51.2C206.4 881.6 80 712 80 520c0-118.4 46.4-228.8 132.8-312C294.4 129.6 400 88 513.6 88h17.6C753.6 96 934.4 276.8 944 499.2c9.6 193.6-110.4 369.6-292.8 432z" p-id="25000"></path></svg>
\ No newline at end of file
<svg t="1704882994349" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5048"
width="128" height="128">
<path
d="M1024 496C1012.8 232 798.4 17.6 534.4 8 393.6 1.6 259.2 52.8 156.8 150.4 56 248 0 379.2 0 520c0 230.4 155.2 433.6 376 492.8 6.4 1.6 12.8 3.2 19.2 3.2 16 0 32-4.8 44.8-16 17.6-14.4 28.8-35.2 28.8-57.6v-52.8c0-14.4 1.6-78.4 1.6-91.2 1.6-8 3.2-14.4 8-19.2 11.2-14.4 12.8-33.6 4.8-49.6-8-14.4-20.8-24-36.8-25.6-11.2-1.6-22.4-3.2-30.4-6.4-12.8-3.2-25.6-9.6-38.4-16-9.6-4.8-19.2-12.8-27.2-22.4-6.4-8-12.8-20.8-17.6-36.8-6.4-19.2-9.6-40-9.6-62.4 0-28.8 9.6-52.8 27.2-72l17.6-19.2-9.6-24c-3.2-8-6.4-19.2-4.8-38.4 22.4 8 28.8 12.8 28.8 12.8l1.6 1.6c6.4 3.2 11.2 8 16 9.6l19.2 11.2 16-4.8c27.2-8 54.4-11.2 83.2-11.2 28.8 0 56 3.2 83.2 11.2l16 4.8 33.6-20.8c11.2-6.4 22.4-12.8 35.2-17.6 1.6 14.4 0 27.2-4.8 40l-9.6 24 17.6 19.2c17.6 19.2 27.2 43.2 27.2 72 0 24-3.2 43.2-8 60.8-6.4 19.2-12.8 30.4-19.2 38.4-6.4 8-16 16-28.8 24-14.4 8-25.6 11.2-38.4 16-8 3.2-20.8 4.8-32 6.4h-1.6c-16 3.2-28.8 14.4-35.2 28.8-6.4 14.4-4.8 30.4 4.8 44.8 6.4 8 9.6 20.8 9.6 36.8v126.4c0 22.4 11.2 44.8 28.8 57.6 17.6 12.8 41.6 17.6 64 11.2C888 942.4 1035.2 729.6 1024 496zM651.2 931.2V816c0-14.4-1.6-27.2-4.8-38.4 17.6-4.8 35.2-11.2 54.4-22.4l1.6-1.6c20.8-12.8 36.8-25.6 49.6-41.6 16-19.2 25.6-41.6 33.6-64 8-25.6 12.8-52.8 12.8-86.4 0-41.6-11.2-76.8-33.6-108.8 6.4-33.6 3.2-67.2-11.2-104l-6.4-17.6-17.6-6.4c-17.6-6.4-40-4.8-67.2 6.4-17.6 6.4-33.6 14.4-51.2 24l-3.2 3.2c-56-12.8-116.8-12.8-174.4 0-1.6-1.6-3.2-1.6-4.8-3.2-9.6-6.4-24-14.4-46.4-22.4-27.2-12.8-51.2-14.4-70.4-8l-17.6 6.4-6.4 17.6c-14.4 38.4-17.6 72-9.6 104-22.4 30.4-33.6 67.2-33.6 108.8 0 30.4 3.2 57.6 12.8 84.8 8 27.2 19.2 49.6 32 65.6 16 17.6 32 32 51.2 41.6 17.6 9.6 35.2 17.6 54.4 22.4-1.6 4.8-1.6 9.6-3.2 16V843.2c-38.4-12.8-70.4-28.8-96-56-17.6-19.2-36.8-38.4-46.4-44.8-20.8-9.6-33.6 11.2-28.8 20.8 4.8 14.4 25.6 22.4 36.8 33.6 12.8 12.8 14.4 30.4 25.6 44.8 16 22.4 72 49.6 110.4 41.6v51.2C206.4 881.6 80 712 80 520c0-118.4 46.4-228.8 132.8-312C294.4 129.6 400 88 513.6 88h17.6C753.6 96 934.4 276.8 944 499.2c9.6 193.6-110.4 369.6-292.8 432z"
p-id="5049"></path>
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1698493025597" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4931" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M845.4 481.9c24.1 0 47.1 4.6 68.9 13.9 21.8 9.3 40.9 22.1 57.2 38.3 16.3 16.3 29.2 35.2 38.5 56.9 9.3 21.7 14 44.5 14 68.5 0 24.8-4.7 47.8-14 69.1-9.3 21.3-22.2 40.1-38.5 56.3-16.3 16.3-35.4 29-57.2 38.3-21.8 9.3-44.8 13.9-68.9 13.9-22.6 0-43.8-4.1-63.6-12.2-19.9-8.1-37.6-18.8-53.1-31.9v145.2c0 20.9-7.4 38.7-22.2 53.4-14.8 14.7-32.7 22.1-53.7 22.1H77.1c-21 0-39.1-7.4-54.3-22.1C7.6 977 0 959.2 0 938.3V809.4c3.9-16.3 10.9-28.3 21-36 10.1-7.7 24.9-5.8 44.4 5.8 9.3 5.4 16.3 8.5 21 9.3 20.2 10.1 40.9 15.1 61.9 15.1s40.7-3.9 59-11.6c18.3-7.7 34.2-18.4 47.9-31.9 13.6-13.5 24.3-29.2 32.1-47 7.8-17.8 11.7-37.2 11.7-58.1s-3.9-40.4-11.7-58.6-18.5-34.1-32.1-47.6c-13.6-13.5-29.6-24.2-47.9-31.9-18.3-7.7-37.9-11.6-59-11.6-20.2 0-40.1 4.3-59.5 12.8-4.7 1.5-8.6 3.1-11.7 4.6-9.3 4.6-18.5 8.9-27.4 12.8s-16.9 5.4-23.9 4.6c-7-0.8-12.8-4.6-17.5-11.6-4.7-7-7.4-18.6-8.2-34.8V371.6c0-20.9 7.6-38.9 22.8-54C37.9 302.5 56 295 77.1 295h182.1c-12.5-15.5-22.4-32.7-29.8-51.7-7.4-19-11.1-39.3-11.1-61 0-25.5 4.9-49.4 14.6-71.4 9.7-22.1 22.8-41.2 39.1-57.5 16.3-16.3 35.6-29.2 57.8-38.9C352 4.8 375.6 0 400.5 0c24.9 0 48.5 4.8 70.6 14.5 22.2 9.7 41.5 22.6 57.8 38.9s29.4 35.4 39.1 57.5c9.7 22.1 14.6 45.9 14.6 71.4 0 43.4-13.6 80.9-40.9 112.6h110.9c21 0 38.9 7.5 53.7 22.6 14.8 15.1 22.2 33.1 22.2 54V526c15.6-13.2 33.3-23.8 53.1-31.9 20-8.1 41.2-12.2 63.8-12.2z" p-id="4932"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path
d="M13.9765 20H9.99764V17.9556C9.99764 17.8624 9.98917 17.7693 9.97224 17.6762C9.95531 17.5831 9.92568 17.4942 9.88759 17.4053C9.84949 17.3164 9.80716 17.236 9.75214 17.1598C9.69711 17.0836 9.63785 17.0116 9.57013 16.9439C9.22727 16.6053 8.7278 16.4148 8.20716 16.4233C8.09288 16.4233 7.97859 16.436 7.86431 16.4571C7.75002 16.4783 7.63997 16.5079 7.52991 16.5503C7.41986 16.5926 7.31827 16.6392 7.21669 16.6984C7.1151 16.7577 7.02198 16.8254 6.93732 16.9016C6.70452 17.109 6.42939 17.4603 6.42939 17.9937V20H2.48018C2.39976 20 2.31933 19.9958 2.23891 19.9873C2.15849 19.9788 2.07806 19.9661 1.99764 19.9534C1.91722 19.9365 1.84103 19.9196 1.7606 19.8942C1.68441 19.8688 1.60822 19.8434 1.53203 19.8138C1.45584 19.7841 1.38388 19.746 1.31193 19.7079C1.23997 19.6698 1.17224 19.6275 1.10452 19.581C1.03679 19.5344 0.973301 19.4878 0.909809 19.437C0.846317 19.3862 0.787057 19.3312 0.727798 19.272C0.668539 19.2127 0.617745 19.1534 0.562719 19.0899C0.511925 19.0265 0.461132 18.963 0.418804 18.8952C0.372243 18.8275 0.329915 18.7598 0.291819 18.6878C0.253724 18.6159 0.219862 18.5439 0.185999 18.4677C0.15637 18.3915 0.12674 18.3153 0.105576 18.2392C0.0801791 18.163 0.0632479 18.0825 0.0463167 18.0021C0.0293855 17.9217 0.0166871 17.8413 0.0124543 17.7608C0.00398871 17.6804 -0.000244141 17.6 -0.000244141 17.5196V13.5746H2.03997C2.45055 13.5746 2.84843 13.4011 3.16166 13.0836C3.25055 12.9947 3.32674 12.9016 3.39446 12.7958C3.46219 12.6942 3.52145 12.5841 3.56801 12.4698C3.61457 12.3556 3.64843 12.237 3.67383 12.1143C3.69923 11.9915 3.70769 11.8688 3.70769 11.746C3.69076 10.7979 2.91193 9.99788 2.00187 9.99788H-0.000244141V6.01058C-0.000244141 5.84974 0.0166871 5.68889 0.0463167 5.52804C0.0801792 5.3672 0.12674 5.21481 0.190232 5.06667C0.253724 4.91852 0.329915 4.7746 0.423036 4.64339C0.516158 4.50794 0.621978 4.38519 0.736264 4.27513C0.85055 4.16508 0.977534 4.06349 1.11298 3.9746C1.24843 3.88571 1.39235 3.81376 1.5405 3.7545C1.68864 3.69524 1.84526 3.64868 2.00187 3.61905C2.15849 3.58942 2.31933 3.57249 2.48018 3.57672H5.30346V2.92487C5.30346 2.87831 5.30346 2.82751 5.30769 2.78095C5.31192 2.73439 5.31192 2.6836 5.32039 2.63704C5.32462 2.59048 5.33309 2.53968 5.33732 2.49312C5.34579 2.44656 5.35425 2.39577 5.36272 2.34921C5.37118 2.30265 5.38388 2.25608 5.39658 2.20952L5.43468 2.06984C5.44737 2.02328 5.46431 1.97672 5.48124 1.93016C5.49817 1.8836 5.5151 1.84127 5.53203 1.79471C5.54896 1.74815 5.57013 1.70582 5.59129 1.66349C5.61245 1.62116 5.63362 1.5746 5.65901 1.53228C5.68018 1.48995 5.70558 1.44762 5.73097 1.40529C5.75637 1.36296 5.78177 1.32487 5.8114 1.28254C5.83679 1.24444 5.86642 1.20212 5.89605 1.16402L5.98494 1.04974C6.01457 1.01164 6.04843 0.977778 6.0823 0.939683C6.11616 0.90582 6.15002 0.867725 6.18388 0.833862C6.21774 0.8 6.25584 0.766138 6.2897 0.736508C6.3278 0.702646 6.36166 0.673016 6.39976 0.643386L6.51404 0.554497C6.55214 0.524868 6.59446 0.499471 6.63256 0.474074C6.67065 0.448677 6.71298 0.42328 6.75531 0.397884C6.79764 0.372487 6.83997 0.351323 6.8823 0.325926C6.92462 0.304762 6.96695 0.283598 7.01351 0.262434C7.05584 0.24127 7.1024 0.224339 7.14896 0.207407C7.19552 0.190476 7.23785 0.173545 7.28441 0.156614C7.33097 0.139683 7.37753 0.126984 7.42409 0.114286L7.56378 0.0761905C7.61034 0.0634921 7.6569 0.0550265 7.70769 0.0465609C7.75849 0.0380953 7.80505 0.0296296 7.85161 0.0253968C7.89817 0.021164 7.94896 0.0126984 7.99552 0.00846564C8.04208 0.00423284 8.09288 0 8.13944 0H8.28335C9.86642 0.0296296 11.1574 1.3545 11.1574 2.96296V3.57249H13.9765C14.0569 3.57249 14.1373 3.57672 14.2177 3.58095C14.2982 3.58942 14.3786 3.59788 14.4548 3.61481C14.5352 3.63175 14.6114 3.64868 14.6876 3.66984C14.7638 3.691 14.84 3.72064 14.9162 3.75026C14.9923 3.77989 15.0643 3.81376 15.1363 3.85185C15.2082 3.88995 15.2759 3.93227 15.3437 3.9746C15.4114 4.01693 15.4749 4.06772 15.5384 4.11852C15.6019 4.16931 15.6611 4.22434 15.7162 4.27937C15.7712 4.33439 15.8262 4.39788 15.877 4.45714C15.9278 4.52064 15.9744 4.58413 16.0209 4.65185C16.0675 4.71958 16.1056 4.7873 16.1437 4.85926C16.1818 4.93122 16.2156 5.00317 16.2453 5.07936C16.2749 5.15556 16.3003 5.23175 16.3257 5.30794C16.3468 5.38413 16.368 5.46455 16.3807 5.54074C16.3976 5.62116 16.4061 5.69735 16.4146 5.77778C16.423 5.8582 16.423 5.93862 16.423 6.01905V8.84233H17.0326C18.6664 8.84233 19.9955 10.1376 19.9955 11.7291C19.9955 13.363 18.6834 14.6921 17.0707 14.6921H16.423V17.5153C16.4273 18.8825 15.3267 20 13.9765 20Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1698321999713" class="icon" viewBox="0 0 1029 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2670" xmlns:xlink="http://www.w3.org/1999/xlink" width="128.625" height="128"><path d="M643.645496 1023.99488 113.833257 1023.99488c-30.396199 0-58.031151-11.271775-79.914779-32.597638C11.728384 969.774108-2.3e-05 942.054369-2.3e-05 911.233205l0-124.322548 1.166609-4.899351c5.90149-24.79198 17.650329-44.099262 34.923705-57.386553 11.227848-8.634135 24.849187-13.195352 39.399113-13.195352 15.645028 0 31.811045 5.112854 49.416425 15.631747 3.524345 2.049228 5.667556 3.097338 6.73916 3.581552l4.203675 0.700782 5.771753 2.885877c12.707051 6.354036 25.061669 9.44218 37.76872 9.44218 13.633597 0 25.891167-2.395533 37.475536-7.323486 11.839756-5.038281 21.822336-11.714105 30.51572-20.408512 8.781238-8.782259 15.500988-18.690266 20.545399-30.295066 4.838058-11.128758 7.190685-23.107445 7.190685-36.626628 0-13.638705-2.395533-25.895253-7.321443-37.470428-5.040324-11.844864-11.716148-21.827444-20.411576-30.522871-8.697471-8.697471-18.680051-15.374317-30.522871-20.412598-11.576196-4.927953-23.831724-7.322465-37.47145-7.322465-12.730547 0-25.006505 2.678503-37.527634 8.188739l-1.820401 0.800895-1.886802 0.628253c-3.394608 1.131876-4.863596 1.838789-5.123069 1.968525-9.249108 4.623532-18.446116 8.92834-27.345853 12.796948-15.133231 6.58082-29.98145 9.13878-43.887801 7.592154-19.025334-2.107456-35.750139-12.615112-47.064819-29.582024-8.90178-13.350627-13.566174-30.509591-14.68375-54.005225l-0.049035-2.039013 0-112.840335c0-30.608681 11.592541-58.379499 33.52214-80.310119 21.935728-21.931641 49.704502-33.521118 80.31114-33.521118l96.492482 0c-6.217149-19.393092-9.363521-39.975267-9.363521-61.338927 0-29.5003 5.734977-57.534677 17.047615-83.324711 11.066444-25.231246 26.191502-47.537796 44.954298-66.301613 18.766882-18.764839 41.073433-33.889898 66.301613-44.955319 25.785947-11.310593 53.459718-17.046593 82.250041-17.046593 28.789302 0 56.462051 5.734977 82.252085 17.046593 25.231246 11.066444 47.538818 26.192524 66.301613 44.955319 18.763817 18.763817 33.888877 41.072411 44.953276 66.305699 11.310593 25.782882 17.047615 53.819303 17.047615 83.320624 0 21.575121-2.948191 42.052077-8.809841 61.338927l30.38394 0c30.821164 0 58.540903 11.727385 80.161994 33.916458 21.325863 21.889759 32.595595 49.522666 32.595595 79.914779l0 69.794291c20.424857-7.043583 42.091917-10.607768 64.562937-10.607768 27.951631 0 54.97161 5.50615 80.307054 16.365219 25.004462 10.716052 47.241547 25.709331 66.09424 44.562023 18.853714 18.850649 33.848014 41.089778 44.565088 66.095261 10.858048 25.338508 16.364198 52.356444 16.364198 80.303989 0 28.763763-5.543948 56.051388-16.476569 81.104884-10.71503 24.553959-25.672556 46.524419-44.456804 65.303559-18.845542 18.847585-41.082627 33.840864-66.08811 44.55998-25.344638 10.860091-52.362573 16.365219-80.309097 16.365219-22.474085 0-44.140123-3.564185-64.560893-10.607768l0 61.19591c0 30.601531-11.402533 58.184383-32.975611 79.766655C701.84418 1012.587239 674.257242 1023.99488 643.645496 1023.99488zM85.810117 803.534327l0 107.699899c0 7.753559 2.316873 13.1739 7.994645 18.707632 5.930093 5.777883 11.920458 8.243903 20.028496 8.243903l529.812238 0c7.986472 0 13.519183-2.274991 19.095821-7.85265 5.574594-5.577659 7.851628-11.112413 7.851628-19.098886L670.592944 684.116237l70.693255 60.092638c10.82638 9.203138 23.426168 16.797335 37.448976 22.574196 13.158576 5.417276 26.971966 8.051852 42.228805 8.051852 16.490871 0 31.70276-3.084058 46.507053-9.426857 15.132209-6.48786 27.961847-15.1128 39.217277-26.36823 11.325917-11.323874 19.986612-24.061572 26.482644-38.944523 6.267205-14.361961 9.313464-29.66477 9.313464-46.783893 0-16.490871-3.084058-31.701739-9.426857-46.501945-6.486838-15.135274-15.111778-27.964912-26.367209-39.21932-11.258495-11.257473-24.087111-19.882414-39.223407-26.369252-14.799185-6.341778-30.011075-9.425835-46.503988-9.425835-15.257861 0-29.073293 2.634576-42.237999 8.054916-14.014635 5.770732-26.615445 13.365951-37.444889 22.571131l-70.69019 60.079357L670.589879 386.798402c0-8.109058-2.46602-14.099424-8.245946-20.03156-5.528624-5.674707-10.947943-7.989537-18.701502-7.989537L448.509149 358.777305l60.409317-70.762719c18.397081-21.550604 27.340745-46.536678 27.340745-76.386348 0-17.810712-3.212773-33.790807-9.821175-48.855595-6.857661-15.638898-15.703255-28.752526-27.046539-40.093767-11.343283-11.343283-24.456912-20.191943-40.091724-27.049604-15.065809-6.608402-30.696535-9.819132-47.78399-9.819132s-32.717159 3.211751-47.780925 9.819132c-15.633791 6.856639-28.74844 15.704277-40.093767 27.049604-11.342261 11.342261-20.1899 24.454869-27.046539 40.089681-6.609424 15.067852-9.821175 31.049991-9.821175 48.85866 0 14.848219 2.390425 28.228472 7.30612 40.904876 5.194578 13.39864 12.227945 25.6889 20.904984 36.53571l55.770462 69.70848L113.833257 358.776283c-7.986472 0-13.676502 2.431287-19.637242 8.391006-5.956654 5.955632-8.38692 11.643619-8.38692 19.631113l0 105.644542c2.926738-1.393393 5.875952-2.832756 8.83538-4.312981 4.231257-2.11665 8.981461-4.082111 14.468203-5.981171 22.750924-9.734343 46.382424-14.668427 70.274419-14.668427 25.064734 0 48.978181 4.769613 71.075314 14.176039 21.832552 9.290991 41.212363 22.308593 57.594949 38.692201 16.382586 16.381564 29.40121 35.761376 38.694245 57.600057 9.403361 22.097133 14.172975 46.009559 14.172975 71.070206 0 25.174039-4.81354 49.007806-14.306797 70.840357-9.284862 21.357531-22.258538 40.454374-38.560421 56.756257-16.3785 16.380543-35.759333 29.400189-57.601078 38.694245-22.107348 9.405404-46.017731 14.172975-71.069185 14.172975-24.391532 0-48.470471-5.489806-71.650446-16.327422C101.166046 811.214335 94.074451 808.097589 85.810117 803.534327z" p-id="2671"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M9.96137 5.58301L9.90952 3.63626C9.88557 2.73711 9.14799 2.01469 8.24232 2.01469C7.33664 2.01469 6.59906 2.73712 6.57511 3.63626L6.52327 5.58301H2.5C2.22386 5.58301 2 5.80687 2 6.08301V8.37278C3.86427 8.4434 5.35394 9.97702 5.35394 11.8586C5.35394 13.7401 3.86427 15.2737 2 15.3444V17.51C2 17.7862 2.22386 18.01 2.5 18.01H4.85111C4.97393 16.2442 6.44528 14.8499 8.24229 14.8499C10.0393 14.8499 11.5106 16.2442 11.6335 18.01H13.9269C14.2031 18.01 14.4269 17.7862 14.4269 17.51V13.6073L16.3634 13.5457C17.2691 13.5169 17.9954 12.7723 17.9954 11.8588C17.9954 10.9452 17.2691 10.2006 16.3634 10.1718L14.4269 10.1102V6.08301C14.4269 5.80687 14.2031 5.58301 13.9269 5.58301H9.96137ZM9.64176 20.01V18.2494C9.64176 17.4765 9.0152 16.8499 8.24229 16.8499C7.46938 16.8499 6.84281 17.4765 6.84281 18.2494V20.01H2.5C1.11929 20.01 0 18.8907 0 17.51V13.3469H1.8656C2.68759 13.3469 3.35394 12.6806 3.35394 11.8586C3.35394 11.0366 2.68759 10.3702 1.8656 10.3702L0 10.3702V6.08301C0 4.7023 1.11929 3.58301 2.5 3.58301H4.57582C4.62855 1.60333 6.24991 0.0146942 8.24232 0.0146942C10.2347 0.0146942 11.8561 1.60333 11.9088 3.58301H13.9269C15.3077 3.58301 16.4269 4.7023 16.4269 6.08301V8.17278C18.4084 8.2358 19.9954 9.86195 19.9954 11.8588C19.9954 13.8556 18.4084 15.4817 16.4269 15.5447V17.51C16.4269 18.8907 15.3077 20.01 13.9269 20.01H9.64176Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1698113328889" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2458" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M362.496 661.504c0 23.552 18.944 42.496 42.496 42.496s42.496-18.944 42.496-42.496c0-23.552-18.944-42.496-42.496-42.496s-42.496 18.944-42.496 42.496zM576 661.504c0 23.552 18.944 42.496 42.496 42.496 23.552 0 42.496-18.944 42.496-42.496 0-23.552-18.944-42.496-42.496-42.496-23.552-0.512-42.496 18.944-42.496 42.496z" p-id="2459"></path><path d="M874.496 618.496v-21.504c2.048-95.744-41.984-186.368-118.272-244.224L860.16 190.464c34.304 8.192 68.608-13.312 76.8-48.128 8.192-34.304-13.312-68.608-48.128-76.8s-68.608 13.312-76.8 48.128c-4.608 18.944 0 38.4 11.776 53.76l-102.912 162.304c-64-35.328-136.192-53.248-209.408-52.224-73.216-1.536-145.408 16.384-209.408 52.224L199.68 167.424c21.504-27.648 16.896-68.096-11.264-89.6-27.648-21.504-68.096-16.896-89.6 11.264-22.016 27.648-16.896 67.584 11.264 89.6 15.36 11.776 34.816 16.384 53.76 11.776L267.776 353.28c-76.288 57.856-120.32 148.48-118.272 244.224v21.504H42.496v256h106.496v85.504h725.504v-85.504h106.496v-256h-106.496zM149.504 832H85.504v-170.496h64v170.496z m512-42.496H362.496c-70.656 0-128-57.344-128-128s57.344-128 128-128h298.496c70.656 0 128 57.344 128 128 0.512 70.656-56.832 128-127.488 128z m276.992 42.496h-64v-170.496h64v170.496z" p-id="2460"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path
d="M15.128 4.05015H16.25C18.3211 4.05015 20 5.72908 20 7.80011V12.8001C20 14.8711 18.3211 16.55 16.25 16.55H3.75C1.67895 16.55 0 14.8711 0 12.8001V7.80011C0 5.72908 1.67895 4.05015 3.75 4.05015H4.872L4.4153 1.31012C4.31315 0.697277 4.7272 0.117632 5.34005 0.015483C5.9529 -0.0866661 6.53255 0.32738 6.6347 0.940225L7.1347 3.9402C7.14085 3.977 7.1451 4.0137 7.1476 4.05015H12.8524C12.8549 4.01365 12.8591 3.977 12.8653 3.9402L13.3653 0.940225C13.4675 0.32738 14.0471 -0.0866661 14.66 0.015483C15.2728 0.117632 15.6869 0.697277 15.5847 1.31012L15.128 4.05015ZM4.9 9.3001V10.3001C4.9 10.9214 5.4037 11.4251 6.025 11.4251C6.6463 11.4251 7.15 10.9214 7.15 10.3001V9.3001C7.15 8.6788 6.6463 8.17511 6.025 8.17511C5.4037 8.17511 4.9 8.6788 4.9 9.3001ZM12.85 9.3001V10.3001C12.85 10.9214 13.3537 11.4251 13.975 11.4251C14.5963 11.4251 15.1 10.9214 15.1 10.3001V9.3001C15.1 8.6788 14.5963 8.17511 13.975 8.17511C13.3537 8.17511 12.85 8.6788 12.85 9.3001ZM5 20C4.3787 20 3.875 19.4963 3.875 18.875C3.875 18.2537 4.3787 17.75 5 17.75H15C15.6213 17.75 16.125 18.2537 16.125 18.875C16.125 19.4963 15.6213 20 15 20H5Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1698113264760" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="26082" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M981.333333 618.666667h-106.666666v-21.333334a298.666667 298.666667 0 0 0-118.186667-244.053333l103.893333-162.986667a64 64 0 1 0-36.053333-23.04l-103.04 162.133334A416.213333 416.213333 0 0 0 512 277.333333a416.213333 416.213333 0 0 0-209.28 52.053334l-103.04-162.133334a64 64 0 1 0-36.053333 23.04l103.893333 162.986667A298.666667 298.666667 0 0 0 149.333333 597.333333v21.333334H42.666667v256h106.666666v85.333333h725.333334v-85.333333h106.666666zM85.333333 832v-170.666667h64v170.666667z m746.666667 85.333333H192V597.333333c0-192 160.64-277.333333 320-277.333333s320 85.333333 320 277.333333v320z m106.666667-85.333333h-64v-170.666667h64z" p-id="26083"></path><path d="M405.333333 661.333333m-42.666666 0a42.666667 42.666667 0 1 0 85.333333 0 42.666667 42.666667 0 1 0-85.333333 0Z" p-id="26084"></path><path d="M618.666667 661.333333m-42.666667 0a42.666667 42.666667 0 1 0 85.333333 0 42.666667 42.666667 0 1 0-85.333333 0Z" p-id="26085"></path><path d="M661.333333 533.333333H362.666667a128 128 0 0 0 0 256h298.666666a128 128 0 0 0 0-256z m0 213.333334H362.666667a85.333333 85.333333 0 0 1 0-170.666667h298.666666a85.333333 85.333333 0 0 1 0 170.666667z" p-id="26086"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 21" fill="none">
<path
d="M4.90625 10.3066C4.90625 9.68738 5.40824 9.1854 6.02747 9.1854C6.6467 9.1854 7.14868 9.68738 7.14868 10.3066V11.2922C7.14868 11.9114 6.6467 12.4134 6.02747 12.4134C5.40824 12.4134 4.90625 11.9114 4.90625 11.2922V10.3066Z" />
<path
d="M13.9759 9.1854C13.3567 9.1854 12.8547 9.68738 12.8547 10.3066V11.2922C12.8547 11.9114 13.3567 12.4134 13.9759 12.4134C14.5951 12.4134 15.0971 11.9114 15.0971 11.2922V10.3066C15.0971 9.68738 14.5951 9.1854 13.9759 9.1854Z" />
<path fill-rule="evenodd" clip-rule="evenodd"
d="M5.32871 0.987933C4.71863 1.08998 4.30678 1.66727 4.40883 2.27736L4.85881 4.96762H3.7C1.65655 4.96762 0 6.62417 0 8.66762V13.8457C0 15.8892 1.65655 17.5457 3.7 17.5457H16.3C18.3435 17.5457 20 15.8892 20 13.8457V8.66762C20 6.62417 18.3435 4.96762 16.3 4.96762H15.1346L15.5846 2.27736C15.6866 1.66727 15.2748 1.08998 14.6647 0.987933C14.0546 0.885889 13.4773 1.29774 13.3753 1.90782L12.8635 4.96762H7.12993L6.61814 1.90782C6.51609 1.29774 5.9388 0.885889 5.32871 0.987933ZM3.7 6.96762H16.3C17.2389 6.96762 18 7.72874 18 8.66762V13.8457C18 14.7846 17.2389 15.5457 16.3 15.5457H3.7C2.76112 15.5457 2 14.7846 2 13.8457V8.66762C2 7.72874 2.76112 6.96762 3.7 6.96762Z" />
<path
d="M16.1183 20.0001C16.1183 20.5524 15.6706 21.0001 15.1183 21.0001H4.88692C4.33463 21.0001 3.88692 20.5524 3.88692 20.0001C3.88692 19.4478 4.33463 19.0001 4.88692 19.0001H15.1183C15.6706 19.0001 16.1183 19.4478 16.1183 20.0001Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1689170427347" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1982" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M512 26.54814777c268.11505778 0 485.45185223 217.33679445 485.45185223 485.45185223s-217.33679445 485.45185223-485.45185223 485.45185223a483.51004445 483.51004445 0 0 1-225.44384-55.43860224l-208.25884445 54.22497223a41.26340779 41.26340779 0 0 1-50.34135665-50.29281223l54.17642667-208.21029888A483.46149888 483.46149888 0 0 1 26.54814777 512C26.54814777 243.88494222 243.88494222 26.54814777 512 26.54814777z m60.77857223 533.9970378H354.22814777l-4.95160889 0.33981553a36.40888889 36.40888889 0 0 0 0 72.13814557l4.95160889 0.33981667h218.55042446l4.90306332-0.33981667a36.40888889 36.40888889 0 0 0 0-72.13814557L572.77857223 560.54518557z m96.99328-169.90814891h-315.54370446l-4.95160889 0.33981667a36.40888889 36.40888889 0 0 0 0 72.13814557L354.22814777 463.45481443h315.54370446l4.95160889-0.33981553a36.40888889 36.40888889 0 0 0 0-72.13814557L669.77185223 390.63703666z" p-id="1983"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" fill="none">
<path
d="M20.6632 6.93125C20.1358 5.67266 19.3765 4.54297 18.4108 3.57266C17.4452 2.60469 16.3179 1.84297 15.0593 1.31563C13.7725 0.774219 12.4085 0.5 10.9999 0.5H10.953C9.53505 0.507031 8.16395 0.788281 6.87255 1.34141C5.62567 1.87578 4.5077 2.63516 3.55145 3.60312C2.5952 4.57109 1.8452 5.69609 1.32489 6.95C0.78817 8.24844 0.516295 9.62891 0.523326 11.0492C0.530358 12.6758 0.91942 14.2906 1.64598 15.7344V19.2969C1.64598 19.8922 2.1288 20.375 2.72176 20.375H6.27958C7.72098 21.1039 9.33114 21.493 10.9554 21.5H11.0046C12.4061 21.5 13.7632 21.2281 15.0429 20.6961C16.2944 20.1734 17.4194 19.4234 18.3827 18.4648C19.3483 17.5063 20.1077 16.3859 20.6397 15.1367C21.1905 13.843 21.4718 12.4672 21.4788 11.0469C21.4835 9.61953 21.2069 8.23438 20.6632 6.93125ZM6.32176 12.125C5.70301 12.125 5.19911 11.6211 5.19911 11C5.19911 10.3789 5.70301 9.875 6.32176 9.875C6.94051 9.875 7.44442 10.3789 7.44442 11C7.44442 11.6211 6.94286 12.125 6.32176 12.125ZM10.9999 12.125C10.3811 12.125 9.87723 11.6211 9.87723 11C9.87723 10.3789 10.3811 9.875 10.9999 9.875C11.6186 9.875 12.1225 10.3789 12.1225 11C12.1225 11.6211 11.6186 12.125 10.9999 12.125ZM15.678 12.125C15.0593 12.125 14.5554 11.6211 14.5554 11C14.5554 10.3789 15.0593 9.875 15.678 9.875C16.2968 9.875 16.8007 10.3789 16.8007 11C16.8007 11.6211 16.2968 12.125 15.678 12.125Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1689170412707" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1828" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M512 26.54814777c268.11505778 0 485.45185223 217.33679445 485.45185223 485.45185223s-217.33679445 485.45185223-485.45185223 485.45185223a483.51004445 483.51004445 0 0 1-222.67676445-53.98224668l-185.73387889 51.79771335a60.6814811 60.6814811 0 0 1-74.75958443-74.75958557l51.84625778-185.58824334A483.51004445 483.51004445 0 0 1 26.54814777 512C26.54814777 243.88494222 243.88494222 26.54814777 512 26.54814777z m0 72.81777778A412.63407445 412.63407445 0 0 0 99.36592555 512c0 71.36142222 18.10735445 139.95576889 52.08898446 200.83143111l7.28177778 13.1072-53.98224669 193.40401778 193.54965333-53.98224555 13.1072 7.28177778A412.63407445 412.63407445 0 1 0 512 99.36592555zM354.22814777 560.54518557h218.35624334a36.40888889 36.40888889 0 0 1 4.95160889 72.4779611l-4.95160889 0.33981667H354.22814777a36.40888889 36.40888889 0 0 1-4.95160889-72.47796224L354.22814777 560.54518557h218.35624334H354.22814777z m0-169.90814891h315.78643001a36.40888889 36.40888889 0 0 1 4.90306332 72.47796224l-4.90306332 0.33981553H354.22814777a36.40888889 36.40888889 0 0 1-4.95160889-72.4779611L354.22814777 390.63703666h315.78643001H354.22814777z" p-id="1829"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path
d="M4.33594 9.99994C4.33594 10.2907 4.45144 10.5695 4.65703 10.7751C4.86263 10.9807 5.14147 11.0962 5.43222 11.0962C5.72297 11.0962 6.00181 10.9807 6.2074 10.7751C6.41299 10.5695 6.52849 10.2907 6.52849 9.99994C6.52849 9.70919 6.41299 9.43035 6.2074 9.22476C6.00181 9.01917 5.72297 8.90367 5.43222 8.90367C5.14147 8.90367 4.86263 9.01917 4.65703 9.22476C4.45144 9.43035 4.33594 9.70919 4.33594 9.99994Z" />
<path
d="M9.22484 10.7751C9.01925 10.5695 8.90375 10.2907 8.90375 9.99994C8.90375 9.70919 9.01925 9.43035 9.22484 9.22476C9.43044 9.01917 9.70928 8.90367 10 8.90367C10.2908 8.90367 10.5696 9.01917 10.7752 9.22476C10.9808 9.43035 11.0963 9.70919 11.0963 9.99994C11.0963 10.2907 10.9808 10.5695 10.7752 10.7751C10.5696 10.9807 10.2908 11.0962 10 11.0962C9.70928 11.0962 9.43044 10.9807 9.22484 10.7751Z" />
<path
d="M13.7927 10.7751C13.5871 10.5695 13.4716 10.2907 13.4716 9.99994C13.4716 9.70919 13.5871 9.43035 13.7927 9.22476C13.9982 9.01917 14.2771 8.90367 14.5678 8.90367C14.8586 8.90367 15.1374 9.01917 15.343 9.22476C15.5486 9.43035 15.6641 9.70919 15.6641 9.99994C15.6641 10.2907 15.5486 10.5695 15.343 10.7751C15.1374 10.9807 14.8586 11.0962 14.5678 11.0962C14.2771 11.0962 13.9982 10.9807 13.7927 10.7751Z" />
<path fill-rule="evenodd" clip-rule="evenodd"
d="M16.8931 3.107C17.7914 4.00751 18.4962 5.05592 18.9877 6.22397C19.4946 7.43334 19.7512 8.71885 19.7447 10.0435C19.7382 11.3616 19.4772 12.6384 18.9638 13.8391C18.4701 14.9985 17.7631 16.0382 16.8648 16.9278C15.9687 17.8174 14.9224 18.5135 13.7587 18.9985C12.5689 19.4923 11.3052 19.7446 10.0023 19.7446H9.95659C8.44705 19.7381 6.94838 19.377 5.6085 18.7005H2.30012C1.74764 18.7005 1.29956 18.2525 1.29956 17.7V14.3938C0.623092 13.0539 0.26202 11.5552 0.255494 10.0457C0.248969 8.72755 0.501285 7.44639 1.00157 6.24137C1.48445 5.07767 2.18266 4.03361 3.07229 3.13528C3.96192 2.23695 5.00164 1.53221 6.16098 1.03627C7.36166 0.522943 8.63846 0.261927 9.95659 0.255402H10.0001C11.3095 0.255402 12.5798 0.509892 13.7761 1.01235C14.9463 1.50175 15.9948 2.20867 16.8931 3.107ZM10.0001 18.0915C12.1535 18.0915 14.1764 17.2606 15.7011 15.7511C17.2324 14.2328 18.0829 12.2034 18.0959 10.037C18.1003 8.93636 17.8893 7.87054 17.4673 6.86563C17.0606 5.89552 16.4733 5.02329 15.7272 4.27722C14.979 3.52898 14.1089 2.94387 13.1388 2.53712C12.1448 2.11949 11.0898 1.9085 10.0023 1.9085H9.96529C7.79668 1.9172 5.76728 2.76551 4.24904 4.29897C2.72862 5.83244 1.8999 7.86837 1.9086 10.037C1.91512 11.3486 2.24139 12.6515 2.85478 13.8021L2.95266 13.9848V17.0474H6.01525L6.19796 17.1453C7.34861 17.7587 8.65151 18.085 9.96312 18.0915H10.0001Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1697622173220" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2398" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M722.36246914 1024.8960632h-415.54678519c-120.26260543 0-218.12969876-97.86709333-218.12969877-218.12969875v-586.42583704c0-120.26260543 97.86709333-218.12969876 218.12969877-218.12969877h415.54678519c120.26260543 0 218.12969876 97.86709333 218.12969876 218.12969877v586.42583704c0 120.26260543-97.86709333 218.12969876-218.12969876 218.12969875z m-415.54678519-898.28010667c-51.65207703 0-93.72457086 42.07249383-93.72457086 93.72457088v586.42583704c0 51.65207703 42.07249383 93.72457086 93.72457086 93.72457086h415.54678519c51.65207703 0 93.72457086-42.07249383 93.72457086-93.72457086v-586.42583704c0-51.65207703-42.07249383-93.72457086-93.72457086-93.72457088h-415.54678519z" fill="#BDD2EF" p-id="2399"></path><path d="M684.0441363 599.76969482H338.27296395c-42.07249383 0-76.11885037-34.04635653-76.11885037-76.11885037s34.04635653-76.11885037 76.11885037-76.11885037h345.77117235c42.07249383 0 76.11885037 34.04635653 76.11885037 76.11885037s-34.17581037 76.11885037-76.11885037 76.11885037zM465.00826075 360.66847605h-126.7352968c-42.07249383 0-76.11885037-34.04635653-76.11885037-76.11885036s34.04635653-76.11885037 76.11885037-76.11885038h126.7352968c42.07249383 0 76.11885037 34.04635653 76.11885036 76.11885038s-34.04635653 76.11885037-76.11885036 76.11885036zM684.0441363 360.66847605h-25.37295013c-42.07249383 0-76.11885037-34.04635653-76.11885036-76.11885036s34.04635653-76.11885037 76.11885036-76.11885038h25.37295013c42.07249383 0 76.11885037 34.04635653 76.11885037 76.11885038s-34.17581037 76.11885037-76.11885037 76.11885036zM684.0441363 838.87091358H338.27296395c-42.07249383 0-76.11885037-34.04635653-76.11885037-76.11885038s34.04635653-76.11885037 76.11885037-76.11885037h345.77117235c42.07249383 0 76.11885037 34.04635653 76.11885037 76.11885037s-34.17581037 76.11885037-76.11885037 76.11885038z" fill="#2867CE" p-id="2400"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M1.28019 2.36532C1.17847 2.56497 1.17847 2.82633 1.17847 3.34905V5.02905C1.17847 5.55176 1.17847 5.81312 1.28019 6.01277C1.36968 6.18839 1.51246 6.33117 1.68808 6.42065C1.88773 6.52238 2.14908 6.52238 2.6718 6.52238H11.3984C11.9211 6.52238 12.1825 6.52238 12.3821 6.42065C12.5578 6.33117 12.7005 6.18839 12.79 6.01277C12.8918 5.81312 12.8918 5.55176 12.8918 5.02905V3.34905C12.8918 2.82633 12.8918 2.56497 12.79 2.36532C12.7005 2.1897 12.5578 2.04692 12.3821 1.95744C12.1825 1.85571 11.9211 1.85571 11.3984 1.85571H2.6718C2.14908 1.85571 1.88773 1.85571 1.68808 1.95744C1.51246 2.04692 1.36968 2.1897 1.28019 2.36532ZM3.6542 5.06405C4.13745 5.06405 4.5292 4.6723 4.5292 4.18905C4.5292 3.7058 4.13745 3.31405 3.6542 3.31405C3.17095 3.31405 2.7792 3.7058 2.7792 4.18905C2.7792 4.6723 3.17095 5.06405 3.6542 5.06405Z"
fill="#8A95A7" />
<path fill-rule="evenodd" clip-rule="evenodd"
d="M1.28019 7.98726C1.17847 8.18691 1.17847 8.44827 1.17847 8.97099V10.651C1.17847 11.1737 1.17847 11.4351 1.28019 11.6347C1.36968 11.8103 1.51246 11.9531 1.68808 12.0426C1.88773 12.1443 2.14908 12.1443 2.6718 12.1443H11.3984C11.9211 12.1443 12.1825 12.1443 12.3821 12.0426C12.5578 11.9531 12.7005 11.8103 12.79 11.6347C12.8918 11.4351 12.8918 11.1737 12.8918 10.651V8.97099C12.8918 8.44827 12.8918 8.18691 12.79 7.98726C12.7005 7.81164 12.5578 7.66886 12.3821 7.57938C12.1825 7.47765 11.9211 7.47765 11.3984 7.47765H2.6718C2.14908 7.47765 1.88773 7.47765 1.68808 7.57938C1.51246 7.66886 1.36968 7.81164 1.28019 7.98726ZM3.6542 10.686C4.13745 10.686 4.5292 10.2942 4.5292 9.81099C4.5292 9.32774 4.13745 8.93599 3.6542 8.93599C3.17095 8.93599 2.7792 9.32774 2.7792 9.81099C2.7792 10.2942 3.17095 10.686 3.6542 10.686Z"
fill="#8A95A7" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688889092975" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2652" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M932.15857778 820.62601482V639.06702222c-26.82121482 23.42305185-57.04059259 42.71976297-89.4445037 57.28331853-104.97896297 46.11792592-218.45333333 69.41961482-333.14133333 68.32734814-148.06281482 8.61677037-294.66927408-32.768-416.39632593-117.35798519v182.89398519C101.4290963 910.07051852 277.52675555 997.45185185 512.36408889 997.45185185c234.83733333 0 409.6-88.10951111 419.79448889-168.57315555v-8.25268148z" p-id="2653"></path><path d="M932.15857778 505.93185185v-3.39816296 8.25268148c-10.19448889 80.58500741-184.95715555 168.57315555-419.79448889 168.57315555-234.83733333 0-410.93499259-87.38133333-419.18767407-167.23816295V329.10601482C214.90346667 413.81736297 361.50992592 455.08077037 509.57274075 446.464c114.688 1.09226667 228.16237037-22.08805925 333.14133333-68.32734815 32.40391111-14.68491852 62.62328889-33.98162963 89.4445037-57.28331852V505.93185185z" p-id="2654"></path><path d="M816.13558518 85.40918518c69.66234075 30.70482963 111.28983703 74.3954963 111.28983704 113.35300741 0 38.22933333-42.96248889 80.58500741-111.28983704 113.35300741-97.09037037 41.26340741-201.70524445 61.53102222-307.16965926 59.34648889-238.96367408 0-417.1245037-90.7794963-417.1245037-171.97131852s178.88900741-172.6994963 418.4594963-172.69949629c104.97896297-2.3058963 209.10838518 17.71899259 305.83466666 58.6183111z" p-id="2655"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path
d="M19.1151 4.20723V3.70556L19.1145 3.65857C19.0605 1.33579 15.0005 0 9.99998 0C4.99921 0 0.938482 1.31688 0.884903 3.65857V4.20723H0.889398C0.886409 4.24582 0.884903 4.28475 0.884903 4.32401C0.884903 6.08797 4.12799 7.51794 9.99998 7.51794C15.872 7.51794 19.1151 6.08797 19.1151 4.32401C19.1151 4.28476 19.1135 4.24583 19.1105 4.20723H19.1151Z" />
<path
d="M0.884904 6.96277V10.5214C0.884697 10.5298 0.884766 10.5381 0.884834 10.5465L0.884904 10.5591C0.884904 12.321 4.12799 13.7492 9.99998 13.7492C15.872 13.7492 19.1151 12.321 19.1151 10.5591C19.1151 10.5465 19.1149 10.5339 19.1146 10.5214L19.1151 6.96277H19.0523C18.5758 8.5689 15.3992 9.8089 9.99998 9.8089C4.60072 9.8089 1.42412 8.5689 0.947642 6.96277H0.884904Z" />
<path
d="M0.884903 12.8458V16.4229H0.88919C1.0223 18.4099 4.25132 20 9.99998 20C15.7486 20 18.9777 18.4099 19.1108 16.4229H19.1151V12.8458C19.1151 14.7619 15.872 16.3152 9.99998 16.3152C4.12799 16.3152 0.884903 14.7619 0.884903 12.8458Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688888184867" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2136" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M524.94538311 7.13007408l10.35630578 0.05178193a1104.50005333 1104.50005333 0 0 1 111.12316564 6.47269096l17.65750162 2.07126164 18.69313304 2.58907614 18.35655229 2.92565689 9.19122133 1.60522665 18.07175467 3.44347261c151.95290192 30.73233898 258.41572978 96.468992 262.45468919 182.86647585l0.12945423 5.10048119v543.70607407c0 88.9088889-107.65380267 156.63913127-262.58414342 187.96695704l-18.07175467 3.4434714-9.19122133 1.60522786-18.35655229 2.89976532-18.69313304 2.58907614c-44.01430164 5.64418727-90.74713244 8.62162489-139.13697304 8.62162489-48.38984059 0-95.12267261-2.97743762-139.13697422-8.62162489l-18.69313184-2.58907614-18.3565535-2.89976532c-166.37405867-28.14326162-285.52336118-96.468992-289.71766519-187.99284862L58.91160534 757.96227201v-543.70607407l0.12945302-5.10048119c4.03895941-86.39748384 110.50178727-152.13413808 262.45468919-182.86647585l18.07175467-3.44347261 9.19122133-1.60522665 18.3565535-2.89976654 18.69313184-2.58907613a1082.80359231 1082.80359231 0 0 1 118.50203378-8.44038995L524.94538311 7.13007408z m176.18665837 659.04943407l-18.35655229 2.89976532-18.69313304 2.58907736c-44.01430164 5.64418727-90.74713244 8.62162489-139.13697304 8.62162488-48.38984059 0-95.12267261-2.97743762-139.13697422-8.62162488l-18.69313184-2.58907736-18.3565535-2.89976532c-86.75995497-14.680064-160.70398103-40.28603141-212.17482191-74.41005985V757.96227201c0 25.42473125 29.33423764 51.91098429 78.96683375 74.25471526l11.83208062 5.07458962c18.25298963 7.50832238 38.83614815 14.47293747 61.4128948 20.66083081l15.3532243 4.01306905c15.61213155 3.88361482 32.10454873 7.45654045 49.27012621 10.5634323l17.45037631 2.97743762 17.89051851 2.66674843c12.09098786 1.68290016 24.46677333 3.15867378 37.10146727 4.40143053l19.13327525 1.70879052 19.49574636 1.3463194 19.8582175 0.98384948a1026.72419438 1026.72419438 0 0 0 81.19343999 0l19.85821749-0.98384948 19.49574637-1.3463194 19.15916682-1.70879052c12.60880236-1.24275675 24.98458905-2.71853037 37.0755757-4.40143053l17.8905185-2.66674843 17.45037631-2.97743762c17.19146784-3.10689185 33.65799466-6.65392711 49.27012622-10.5634323l15.3532243-4.01306905c22.57674786-6.2137837 43.15990638-13.15250844 61.41289601-20.66083081l11.8320794-5.07458962c47.71668029-21.48933571 76.68844681-46.78461273 78.83738074-71.32905958l0.12945424-2.92565568v-166.21871407c-51.44495051 34.14992001-125.38897659 59.75588622-212.17482313 74.43595021zM913.30686461 332.83590281c-48.90765631 32.44112949-118.06189037 57.16681008-199.28122194 72.15756325l-12.94538312 2.27838817-18.33066193 2.89976532-18.69313184 2.58907614c-44.01430164 5.64418727-90.74713244 8.62162489-139.13697423 8.6216249-41.47700622 0-81.73714606-2.1748243-120.1331508-6.3691283l-19.00382223-2.2524966-18.69313305-2.58907614-18.35655229-2.89976532c-86.75995497-14.680064-160.70398103-40.28603141-212.17482312-74.41005985V473.16385185c0 25.42473125 29.33423764 51.91098429 78.96683497 74.25471526l11.83207941 5.07458962c18.25298963 7.50832238 38.83614815 14.47293747 61.41289601 20.66083082l15.3532243 4.01306904c15.61213155 3.88361482 32.10454873 7.45654045 49.27012622 10.5634323l17.4503763 2.97743762 17.89051851 2.66674965c12.09098786 1.68290016 24.46677333 3.15867378 37.10146727 4.40142931l19.13327525 1.70879052 19.49574637 1.34632062 19.85821749 0.98384828a1026.72419438 1026.72419438 0 0 0 81.19343999 0l19.85821749-0.98384828 19.49574637-1.34632062 19.15916561-1.70879052c12.60880236-1.24275675 24.98458905-2.71853037 37.07557691-4.40142931l17.8905185-2.66674965 17.45037631-2.97743762c17.19146784-3.10689185 33.65799466-6.65392711 49.27012621-10.5634323l15.35322431-4.01306904c22.57674786-6.2137837 43.15990638-13.15250844 61.4128948-20.66083082l11.83208061-5.07458962c47.71668029-21.48933571 76.68844681-46.78461273 78.83738074-71.32905836l0.12945301-2.9256569v-140.32794904zM524.94538311 84.80237037l-10.2527431 0.05178194-15.27555201 0.25890724-15.06842548 0.49192414-19.8582175 0.98384949-19.49574636 1.34631941-19.15916561 1.70879051c-8.41449836 0.8285049-16.6995437 1.76057245-24.88102639 2.79620267l-12.16865895 1.60522786-17.91641008 2.66674843-17.45037631 2.97743884c-12.89360118 2.33016889-25.37295053 4.91924502-37.41215524 7.68955733l-11.85797097 2.84798339-15.3532243 4.0389594c-18.7966957 5.17815349-36.24707201 10.87412148-52.09221925 16.95845217l-9.32067555 3.70237865-11.83208062 5.07459084c-49.63259733 22.34373098-78.96683498 48.82998401-78.96683375 74.25471526 0 24.3373191 26.84872416 49.60670698 72.62359704 71.32905836l6.34323671 2.92565689 11.83208062 5.07458963c15.19787971 6.26556564 32.02687644 12.14276859 50.30575643 17.50215702l11.13302994 3.15867379 15.32733273 4.01306905c11.70262638 2.9256569 23.8971769 5.64418727 36.50597926 8.1555911l12.76414695 2.4078412 17.45037631 2.97743761 17.89051851 2.66674843c8.05202845 1.13919408 16.23350992 2.14893394 24.54444563 3.10689187l12.55702164 1.29453866 19.13327525 1.70879053 19.49574636 1.34631939 19.8582175 0.9838495a1026.72419438 1026.72419438 0 0 0 67.80791466 0.44014341l13.38552533-0.44014341 19.85821749-0.9838495 19.49574637-1.34631939 19.15916682-1.70879053c8.41449836-0.8285049 16.6995437-1.76057245 24.88102518-2.79620266l12.16866016-1.60522787 17.91640886-2.66674843 17.45037631-2.97743761c12.89360118-2.33016889 25.37295053-4.91924502 37.41215646-7.68955734l11.85796976-2.84798461 15.3532243-4.0389594c18.7966957-5.17815349 36.24707201-10.87412148 52.09222046-16.95845095l9.32067555-3.70237986 11.8320794-5.07458963c49.63259733-22.34373098 78.96683498-48.82998401 78.96683498-74.25471525 0-24.3373191-26.84872416-49.60670698-72.62359705-71.32905958l-6.34323793-2.92565568-11.8320794-5.07459084a515.14855939 515.14855939 0 0 0-50.30575764-17.50215702l-11.13302873-3.1586738-15.32733394-4.01306783a756.89063705 756.89063705 0 0 0-36.50597926-8.15559111l-12.76414696-2.40784118-17.45037631-2.97743884-17.8905185-2.66674843a929.63382401 929.63382401 0 0 0-24.54444564-3.10689185l-12.55702163-1.29453868-19.13327525-1.70879051-19.49574637-1.34631941-19.85821749-0.98384949c-8.88053214-0.36247111-17.86462815-0.59548801-26.92639524-0.72494102L524.94538311 84.80237037z" p-id="2137"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M2.89074 3.7C2.9088 3.73772 2.96665 3.82785 3.141 3.96499C3.4264 4.18949 3.90141 4.43536 4.57756 4.66033C5.91936 5.10676 7.83658 5.4 10.0001 5.4C12.1636 5.4 14.0808 5.10676 15.4226 4.66033C16.0988 4.43536 16.5738 4.18949 16.8592 3.96499C17.0335 3.82785 17.0914 3.73772 17.1094 3.7C17.0914 3.66228 17.0335 3.57215 16.8592 3.43501C16.5738 3.21051 16.0988 2.96464 15.4226 2.73967C14.0808 2.29324 12.1636 2 10.0001 2C7.83658 2 5.91936 2.29324 4.57756 2.73967C3.90141 2.96464 3.4264 3.21051 3.141 3.43501C2.96665 3.57215 2.9088 3.66228 2.89074 3.7ZM17.1152 6.13392C16.7861 6.29242 16.4289 6.43332 16.054 6.55805C14.4587 7.08882 12.3184 7.4 10.0001 7.4C7.68175 7.4 5.54144 7.08882 3.94616 6.55805C3.57129 6.43332 3.21409 6.29242 2.88501 6.13392V9.98819C2.89333 10.0127 2.93814 10.1087 3.13935 10.2678C3.4222 10.4915 3.89403 10.7369 4.56804 10.9615C5.90569 11.4073 7.82251 11.7 10.0001 11.7C12.1777 11.7 14.0945 11.4073 15.4321 10.9615C16.1061 10.7369 16.578 10.4915 16.8608 10.2678C17.062 10.1087 17.1068 10.0127 17.1152 9.98819V6.13392ZM17.1152 12.4386C16.7891 12.5957 16.4355 12.7353 16.0644 12.859C14.4716 13.3897 12.3309 13.7 10.0001 13.7C7.66929 13.7 5.52856 13.3897 3.93577 12.859C3.56464 12.7353 3.21103 12.5957 2.88501 12.4386V16.2882C2.89333 16.3127 2.93814 16.4087 3.13935 16.5678C3.4222 16.7915 3.89403 17.0369 4.56804 17.2615C5.90569 17.7073 7.82251 18 10.0001 18C12.1777 18 14.0945 17.7073 15.4321 17.2615C16.1061 17.0369 16.578 16.7915 16.8608 16.5678C17.062 16.4087 17.1068 16.3127 17.1152 16.2882V12.4386ZM19.1152 16.3C19.1152 17.1087 18.6256 17.7219 18.1015 18.1365C17.5672 18.5591 16.8556 18.8953 16.0644 19.159C14.4716 19.6897 12.3309 20 10.0001 20C7.66929 20 5.52856 19.6897 3.93577 19.159C3.14456 18.8953 2.43294 18.5591 1.89865 18.1365C1.37453 17.7219 0.88501 17.1087 0.88501 16.3V3.7C0.88501 2.88867 1.38006 2.27558 1.90447 1.86307C2.44036 1.44152 3.15377 1.10559 3.94616 0.841952C5.54144 0.31118 7.68175 0 10.0001 0C12.3184 0 14.4587 0.31118 16.054 0.841952C16.8464 1.10559 17.5598 1.44152 18.0957 1.86307C18.6201 2.27558 19.1152 2.88867 19.1152 3.7V16.3Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1701324062325"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4651"
xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128">
<path d="M512 512m-512 0a512 512 0 1 0 1024 0 512 512 0 1 0-1024 0Z" fill="#c6dafe" p-id="4652"></path>
<path d="M486.4 665.6h51.2v153.6h-51.2z" fill="#515151" p-id="4653"
data-spm-anchor-id="a313x.search_index.0.i3.5ac83a811R1Mg6" class="selected"></path>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 15" fill="none">
<path
d="M435.2 768h153.6v51.2h-153.6zM230.4 281.6v384h563.2V281.6H230.4z m0-51.2h563.2a51.2 51.2 0 0 1 51.2 51.2v384a51.2 51.2 0 0 1-51.2 51.2H230.4a51.2 51.2 0 0 1-51.2-51.2V281.6a51.2 51.2 0 0 1 51.2-51.2z"
fill="#515151" p-id="4654" data-spm-anchor-id="a313x.search_index.0.i1.5ac83a811R1Mg6" class="selected"></path>
<path
d="M662.272 388.864c6.144-21.5296 8.448-63.0272-29.952-68.3776-30.72-3.84-67.584 16.128-86.8352 29.2096-6.144-0.768-13.056-1.536-19.968-1.536-49.9712-0.7936-82.2016 16.128-109.8496 52.224-9.984 13.056-19.2 35.3536-22.2976 60.672 13.824-23.808 56.8576-67.584 102.1952-85.248 0 0-68.352 49.152-102.1952 118.3232v0.768c-1.5616 3.072-3.072 6.144-4.6336 9.984-33.024 82.2016-6.144 117.5552 19.2256 123.6992 23.04 6.144 55.3216-5.376 81.408-33.024 43.776 9.984 87.6288-1.536 103.7312-9.984 30.72-16.896 52.2496-46.848 56.8832-77.6192h-84.5312s-3.84 26.88-49.1776 26.88c-41.472 0-43.776-48.384-43.776-48.384h178.9952s3.072-52.2496-22.272-86.8352c-14.6176-19.2-33.8176-36.1216-60.6976-45.312 8.448-6.144 22.272-15.4112 34.56-18.4832 23.04-6.144 38.4256-2.304 48.4096 14.592 13.056 23.04-7.68 76.0832-7.68 76.0832s12.288-15.36 18.432-37.632z m-185.1648 203.6224c-35.328 29.2096-64.512 25.3696-76.0576 8.4736-9.984-15.36-11.52-42.2656 0-79.8976 5.376 14.592 13.824 28.416 26.112 40.704 15.36 15.36 32.256 25.344 49.9456 30.72z m-1.536-149.8368s1.536-34.56 39.168-37.632c32.3072-3.072 49.2032 11.52 54.5536 39.1936l-93.7472-1.536z"
fill="#2394FB" p-id="4655"></path>
d="M9.85672 2.01367H4.14326C3.70589 2.01366 3.3426 2.01366 3.04618 2.03788C2.73757 2.06309 2.45044 2.11744 2.1797 2.25539C1.76241 2.468 1.42315 2.80727 1.21053 3.22455C1.07258 3.49529 1.01824 3.78242 0.993023 4.09103C0.968804 4.38745 0.968811 4.75074 0.968819 5.18812V7.63287C0.968811 8.07025 0.968804 8.43354 0.993023 8.72996C1.01824 9.03857 1.07258 9.3257 1.21053 9.59644C1.42315 10.0137 1.76241 10.353 2.1797 10.5656C2.45044 10.7036 2.73757 10.7579 3.04618 10.7831C3.34257 10.8073 3.70583 10.8073 4.14316 10.8073H6.41666V11.8198H4.82086C4.49869 11.8198 4.23752 12.081 4.23752 12.4031C4.23752 12.7253 4.49869 12.9865 4.82086 12.9865H9.17913C9.5013 12.9865 9.76246 12.7253 9.76246 12.4031C9.76246 12.081 9.5013 11.8198 9.17913 11.8198H7.58333V10.8073H9.85671C10.294 10.8073 10.6574 10.8073 10.9538 10.7831C11.2624 10.7579 11.5495 10.7036 11.8203 10.5656C12.2376 10.353 12.5768 10.0137 12.7895 9.59644C12.9274 9.3257 12.9818 9.03857 13.007 8.72996C13.0312 8.43355 13.0312 8.07027 13.0312 7.63292V5.1881C13.0312 4.75075 13.0312 4.38744 13.007 4.09103C12.9818 3.78242 12.9274 3.49529 12.7895 3.22455C12.5768 2.80727 12.2376 2.468 11.8203 2.25539C11.5495 2.11744 11.2624 2.06309 10.9538 2.03788C10.6574 2.01366 10.2941 2.01366 9.85672 2.01367Z"
fill="#8A95A7" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688888528308" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2619" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M936.896 785.792c9.28-14.336 17.664-29.056 25.472-44.224 1.856-3.648 3.52-7.36 5.312-11.072 5.952-12.288 11.392-24.832 16.32-37.632 1.984-5.184 3.904-10.368 5.76-15.616 4.096-11.904 7.68-23.936 10.944-36.16 1.536-5.888 3.2-11.712 4.544-17.6 2.816-12.608 4.992-25.472 6.848-38.464 0.832-5.568 1.92-11.008 2.56-16.64 2.048-18.56 3.328-37.312 3.328-56.32 0-278.976-227.008-505.984-505.984-505.984S6.016 233.024 6.016 512c0 19.072 1.28 37.824 3.328 56.32 0.64 5.632 1.728 11.072 2.56 16.704 1.92 12.928 4.032 25.728 6.848 38.336 1.344 6.016 3.008 11.84 4.544 17.664 3.264 12.224 6.848 24.32 10.944 36.16 1.792 5.248 3.712 10.432 5.696 15.616 4.928 12.8 10.432 25.344 16.32 37.632 1.792 3.712 3.456 7.424 5.312 11.072 7.744 15.168 16.192 29.888 25.408 44.096 0.32 0.576 0.64 1.152 1.024 1.664C178.432 926.016 334.592 1017.984 512 1017.984s333.632-92.032 423.936-230.656C936.256 786.816 936.576 786.304 936.896 785.792zM512 248.448c102.592 0 185.984 83.456 185.984 185.984 0 102.656-83.456 186.176-185.984 186.176S326.016 537.088 326.016 434.432C326.016 331.904 409.408 248.448 512 248.448zM204.416 828.8C257.216 708.096 377.152 627.264 512 627.264s254.784 80.896 307.648 201.472C739.968 906.112 631.552 953.984 512 953.984 392.448 953.984 284.032 906.112 204.416 828.8z" p-id="2620"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path
d="M9.99985 13C6.82977 13 4.01065 14.5306 2.21585 16.906C1.82956 17.4172 1.63641 17.6728 1.64273 18.0183C1.64761 18.2852 1.81521 18.6219 2.02522 18.7867C2.29704 19 2.67372 19 3.42708 19H16.5726C17.326 19 17.7027 19 17.9745 18.7867C18.1845 18.6219 18.3521 18.2852 18.357 18.0183C18.3633 17.6728 18.1701 17.4172 17.7839 16.906C15.9891 14.5306 13.1699 13 9.99985 13Z" />
<path
d="M9.99985 9.99999C12.4851 9.99999 14.4999 7.98527 14.4999 5.49999C14.4999 3.01471 12.4851 0.999992 9.99985 0.999992C7.51457 0.999992 5.49985 3.01471 5.49985 5.49999C5.49985 7.98527 7.51457 9.99999 9.99985 9.99999Z" />
<path fill-rule="evenodd" clip-rule="evenodd"
d="M9.99985 1.99999C8.06686 1.99999 6.49985 3.567 6.49985 5.49999C6.49985 7.43299 8.06686 8.99999 9.99985 8.99999C11.9328 8.99999 13.4999 7.43299 13.4999 5.49999C13.4999 3.567 11.9328 1.99999 9.99985 1.99999ZM4.49985 5.49999C4.49985 2.46243 6.96229 -7.62939e-06 9.99985 -7.62939e-06C13.0374 -7.62939e-06 15.4999 2.46243 15.4999 5.49999C15.4999 8.53756 13.0374 11 9.99985 11C6.96229 11 4.49985 8.53756 4.49985 5.49999ZM9.99985 14C7.16082 14 4.63034 15.3693 3.0137 17.5088C2.9148 17.6397 2.83911 17.74 2.77615 17.8281C2.72835 17.895 2.69573 17.9442 2.67302 17.9814C2.82165 17.9984 3.03342 18 3.42708 18H16.5726C16.9663 18 17.1781 17.9984 17.3267 17.9814C17.304 17.9442 17.2714 17.895 17.2236 17.8281C17.1606 17.74 17.0849 17.6397 16.986 17.5088C15.3694 15.3693 12.8389 14 9.99985 14ZM1.418 16.3031C3.39096 13.692 6.49873 12 9.99985 12C13.501 12 16.6087 13.692 18.5817 16.3031C18.5906 16.3149 18.5996 16.3268 18.6086 16.3387C18.7782 16.563 18.9601 16.8035 19.0901 17.0356C19.2474 17.3164 19.364 17.6414 19.3568 18.0366C19.351 18.3542 19.2548 18.6516 19.1379 18.8864C19.021 19.1212 18.8418 19.3772 18.5918 19.5734C18.2585 19.8349 17.8956 19.9275 17.5732 19.9662C17.2904 20.0001 16.9552 20.0001 16.6182 20C16.603 20 16.5878 20 16.5726 20H3.42708C3.41189 20 3.3967 20 3.38151 20C3.04452 20.0001 2.70934 20.0001 2.42649 19.9662C2.10411 19.9275 1.7412 19.8349 1.40787 19.5734C1.15793 19.3772 0.978702 19.1212 0.861827 18.8864C0.744951 18.6516 0.648706 18.3542 0.642897 18.0366C0.63567 17.6414 0.752278 17.3164 0.909613 17.0356C1.0396 16.8035 1.22149 16.563 1.39112 16.3387C1.40012 16.3268 1.40908 16.3149 1.418 16.3031Z" />
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688888642805" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2495" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M512 1.616824c-281.876855 0-510.383176 228.508367-510.383176 510.385223 0 281.874809 228.506321 510.380106 510.383176 510.380106s510.383176-228.506321 510.383176-510.380106C1022.383176 230.125191 793.876855 1.616824 512 1.616824zM835.144748 838.149175c0.101307-0.001023 0.204661-0.001023 0.304945-0.002047-83.016739 82.334193-197.291388 133.199675-323.449693 133.199675-126.424364 0-240.915955-51.078329-323.974649-133.718491 0.039909 0 0.080841 0 0.119727-0.001023-5.981225-5.209652-11.280928-10.671037-15.808034-16.390295 71.405283-118.755708 190.999079-181.641967 339.662957-181.641967 152.783709 0 258.138198 66.104557 339.661933 181.64606C846.923002 827.15375 841.388962 832.788074 835.144748 838.149175zM358.88474 435.444417c0-84.562954 68.552306-153.11526 153.11526-153.11526s153.11526 68.552306 153.11526 153.11526-68.552306 153.11526-153.11526 153.11526S358.88474 520.007371 358.88474 435.444417zM628.101251 603.373057c53.199643-36.849256 88.051405-98.314143 88.051405-167.927617 0-112.750947-91.40171-204.155726-204.15368-204.155726s-204.15368 91.40478-204.15368 204.155726c0 69.614497 34.852786 131.079384 88.052428 167.92864-105.013729 27.350928-195.406458 90.915639-257.029958 176.574554-54.253648-75.417667-86.213547-167.948083-86.213547-267.945565 0-253.688863 205.655893-459.344756 459.344756-459.344756s459.344756 205.655893 459.344756 459.344756c0 99.998505-31.960922 192.528921-86.215594 267.947612C823.506686 694.290743 733.113957 630.723985 628.101251 603.373057z" p-id="2496"></path></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M10.0001 2C8.0671 2 6.5001 3.567 6.5001 5.5C6.5001 7.433 8.0671 9 10.0001 9C11.9331 9 13.5001 7.433 13.5001 5.5C13.5001 3.567 11.9331 2 10.0001 2ZM4.5001 5.5C4.5001 2.46243 6.96253 0 10.0001 0C13.0377 0 15.5001 2.46243 15.5001 5.5C15.5001 8.53757 13.0377 11 10.0001 11C6.96253 11 4.5001 8.53757 4.5001 5.5ZM10.0001 14C7.16106 14 4.63058 15.3693 3.01394 17.5088C2.91504 17.6397 2.83935 17.74 2.7764 17.8281C2.7286 17.895 2.69598 17.9442 2.67327 17.9814C2.82189 17.9984 3.03366 18 3.42733 18H16.5729C16.9665 18 17.1783 17.9984 17.3269 17.9814C17.3042 17.9442 17.2716 17.895 17.2238 17.8281C17.1608 17.74 17.0852 17.6397 16.9863 17.5088C15.3696 15.3693 12.8391 14 10.0001 14ZM1.41824 16.3031C3.3912 13.692 6.49897 12 10.0001 12C13.5012 12 16.609 13.692 18.582 16.3031C18.5909 16.3149 18.5998 16.3268 18.6088 16.3387C18.7785 16.563 18.9604 16.8035 19.0903 17.0356C19.2477 17.3165 19.3643 17.6414 19.3571 18.0366C19.3512 18.3542 19.255 18.6516 19.1381 18.8864C19.0212 19.1212 18.842 19.3772 18.5921 19.5734C18.2588 19.835 17.8958 19.9276 17.5735 19.9662C17.2906 20.0001 16.9554 20.0001 16.6184 20C16.6032 20 16.5881 20 16.5729 20H3.42733C3.41214 20 3.39695 20 3.38176 20C3.04476 20.0001 2.70958 20.0001 2.42674 19.9662C2.10435 19.9276 1.74144 19.835 1.40812 19.5734C1.15817 19.3772 0.978947 19.1212 0.862071 18.8864C0.745195 18.6516 0.64895 18.3542 0.643141 18.0366C0.635914 17.6414 0.752522 17.3165 0.909858 17.0356C1.03984 16.8035 1.22173 16.563 1.39137 16.3387C1.40036 16.3268 1.40932 16.3149 1.41824 16.3031Z" />
</svg>
\ No newline at end of file
......@@ -13,9 +13,11 @@
"@fastgpt/global": "workspace:*",
"@fingerprintjs/fingerprintjs": "^4.2.1",
"@monaco-editor/react": "^4.6.0",
"mammoth": "^1.6.0",
"i18next": "^22.5.1",
"joplin-turndown-plugin-gfm": "^1.0.12",
"next-i18next": "^13.3.0",
"pdfjs-dist": "^4.0.269",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-i18next": "^12.3.1",
......
......@@ -15,9 +15,6 @@
"jsx": "preserve",
"incremental": true,
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.d.ts", "../**/*.d.ts"],
"exclude": ["node_modules","./components/common/Icon/constants.ts"]
......
......@@ -47,12 +47,12 @@ importers:
js-tiktoken:
specifier: ^1.0.7
version: registry.npmmirror.com/js-tiktoken@1.0.7
nanoid:
specifier: ^4.0.1
version: registry.npmmirror.com/nanoid@4.0.1
openai:
specifier: 4.23.0
version: registry.npmmirror.com/openai@4.23.0(encoding@0.1.13)
pdfjs-dist:
specifier: ^4.0.269
version: registry.npmmirror.com/pdfjs-dist@4.0.269(encoding@0.1.13)
timezones-list:
specifier: ^3.0.2
version: registry.npmmirror.com/timezones-list@3.0.2
......@@ -96,21 +96,27 @@ importers:
jsonwebtoken:
specifier: ^9.0.2
version: registry.npmmirror.com/jsonwebtoken@9.0.2
mammoth:
specifier: ^1.6.0
version: registry.npmmirror.com/mammoth@1.6.0
mongoose:
specifier: ^7.0.2
version: registry.npmmirror.com/mongoose@7.0.2
multer:
specifier: 1.4.5-lts.1
version: registry.npmmirror.com/multer@1.4.5-lts.1
nanoid:
specifier: ^4.0.1
version: registry.npmmirror.com/nanoid@4.0.1
next:
specifier: 13.5.2
version: registry.npmmirror.com/next@13.5.2(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3)
nextjs-cors:
specifier: ^2.1.2
version: registry.npmmirror.com/nextjs-cors@2.1.2(next@13.5.2)
node-cron:
specifier: ^3.0.3
version: registry.npmmirror.com/node-cron@3.0.3
pdfjs-dist:
specifier: ^4.0.269
version: registry.npmmirror.com/pdfjs-dist@4.0.269(encoding@0.1.13)
pg:
specifier: ^8.10.0
version: registry.npmmirror.com/pg@8.10.0
......@@ -127,6 +133,9 @@ importers:
'@types/multer':
specifier: ^1.4.10
version: registry.npmmirror.com/@types/multer@1.4.10
'@types/node-cron':
specifier: ^3.0.11
version: registry.npmmirror.com/@types/node-cron@3.0.11
'@types/pg':
specifier: ^8.6.6
version: registry.npmmirror.com/@types/pg@8.6.6
......@@ -175,9 +184,15 @@ importers:
joplin-turndown-plugin-gfm:
specifier: ^1.0.12
version: registry.npmmirror.com/joplin-turndown-plugin-gfm@1.0.12
mammoth:
specifier: ^1.6.0
version: registry.npmmirror.com/mammoth@1.6.0
next-i18next:
specifier: ^13.3.0
version: registry.npmmirror.com/next-i18next@13.3.0(i18next@22.5.1)(next@13.5.2)(react-i18next@12.3.1)(react@18.2.0)
pdfjs-dist:
specifier: ^4.0.269
version: registry.npmmirror.com/pdfjs-dist@4.0.269(encoding@0.1.13)
react:
specifier: 18.2.0
version: registry.npmmirror.com/react@18.2.0
......@@ -287,9 +302,6 @@ importers:
lodash:
specifier: ^4.17.21
version: registry.npmmirror.com/lodash@4.17.21
mammoth:
specifier: ^1.6.0
version: registry.npmmirror.com/mammoth@1.6.0
mermaid:
specifier: ^10.2.3
version: registry.npmmirror.com/mermaid@10.2.3
......@@ -5107,6 +5119,12 @@ packages:
'@types/express': registry.npmmirror.com/@types/express@4.17.21
dev: true
registry.npmmirror.com/@types/node-cron@3.0.11:
resolution: {integrity: sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node-cron/-/node-cron-3.0.11.tgz}
name: '@types/node-cron'
version: 3.0.11
dev: true
registry.npmmirror.com/@types/node-fetch@2.6.10:
resolution: {integrity: sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.10.tgz}
name: '@types/node-fetch'
......@@ -11087,6 +11105,15 @@ packages:
next: registry.npmmirror.com/next@13.5.2(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3)
dev: false
registry.npmmirror.com/node-cron@3.0.3:
resolution: {integrity: sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-cron/-/node-cron-3.0.3.tgz}
name: node-cron
version: 3.0.3
engines: {node: '>=6.0.0'}
dependencies:
uuid: registry.npmmirror.com/uuid@8.3.2
dev: false
registry.npmmirror.com/node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz}
name: node-domexception
......@@ -13768,6 +13795,13 @@ packages:
engines: {node: '>= 0.4.0'}
dev: false
registry.npmmirror.com/uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz}
name: uuid
version: 8.3.2
hasBin: true
dev: false
registry.npmmirror.com/uuid@9.0.1:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz}
name: uuid
......
# dependencies
node_modules/
# next.js
.next/
out/
# production
build/
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
platform.json
testApi/
local/
.husky/
data/*.local.*
\ No newline at end of file
......@@ -37,7 +37,6 @@
"jschardet": "^3.0.0",
"jsonwebtoken": "^9.0.2",
"lodash": "^4.17.21",
"mammoth": "^1.6.0",
"mermaid": "^10.2.3",
"nanoid": "^4.0.1",
"next": "13.5.2",
......
......@@ -40,8 +40,8 @@ const FeedbackModal = ({
onSuccess() {
onSuccess(ref.current?.value || t('core.chat.feedback.No Content'));
},
successToast: t('chat.Feedback Success'),
errorToast: t('chat.Feedback Failed')
successToast: t('core.chat.Feedback Success'),
errorToast: t('core.chat.Feedback Failed')
});
return (
......@@ -49,17 +49,17 @@ const FeedbackModal = ({
isOpen={true}
onClose={onClose}
iconSrc="/imgs/modal/badAnswer.svg"
title={t('chat.Feedback Modal')}
title={t('core.chat.Feedback Modal')}
>
<ModalBody>
<Textarea ref={ref} rows={10} placeholder={t('chat.Feedback Modal Tip')} />
<Textarea ref={ref} rows={10} placeholder={t('core.chat.Feedback Modal Tip')} />
</ModalBody>
<ModalFooter>
<Button variant={'whiteBase'} mr={2} onClick={onClose}>
{t('Cancel')}
</Button>
<Button isLoading={isLoading} onClick={mutate}>
{t('chat.Feedback Submit')}
{t('core.chat.Feedback Submit')}
</Button>
</ModalFooter>
</MyModal>
......
......@@ -8,10 +8,11 @@ import MyIcon from '@fastgpt/web/components/common/Icon';
import { useRouter } from 'next/router';
import { useSelectFile } from '@/web/common/file/hooks/useSelectFile';
import { compressImgFileAndUpload } from '@/web/common/file/controller';
import { useToast } from '@/web/common/hooks/useToast';
import { customAlphabet } from 'nanoid';
import { IMG_BLOCK_KEY } from '@fastgpt/global/core/chat/constants';
import { addDays } from 'date-fns';
import { useRequest } from '@/web/common/hooks/useRequest';
import { MongoImageTypeEnum } from '@fastgpt/global/common/file/image/constants';
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 6);
enum FileTypeEnum {
......@@ -45,7 +46,6 @@ const MessageInput = ({
resetInputVal: (val: string) => void;
}) => {
const { shareId } = useRouter().query as { shareId?: string };
const { toast } = useToast();
const {
isSpeaking,
isTransCription,
......@@ -68,17 +68,18 @@ const MessageInput = ({
maxCount: 10
});
const uploadFile = useCallback(
async (file: FileItemType) => {
const { mutate: uploadFile } = useRequest({
mutationFn: async (file: FileItemType) => {
if (file.type === FileTypeEnum.image) {
try {
const src = await compressImgFileAndUpload({
type: MongoImageTypeEnum.chatImage,
file: file.rawFile,
maxW: 4329,
maxH: 4329,
maxSize: 1024 * 1024 * 5,
// 30 day expired.
expiredTime: addDays(new Date(), 30),
expiredTime: addDays(new Date(), 7),
shareId
});
setFileList((state) =>
......@@ -94,16 +95,13 @@ const MessageInput = ({
} catch (error) {
setFileList((state) => state.filter((item) => item.id !== file.id));
console.log(error);
toast({
status: 'error',
title: t('common.Upload File Failed')
});
return Promise.reject(error);
}
}
},
[shareId, t, toast]
);
errorToast: t('common.Upload File Failed')
});
const onSelectFile = useCallback(
async (files: File[]) => {
if (!files || files.length === 0) {
......@@ -219,7 +217,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')}
visibility={isSpeaking && isTransCription ? 'visible' : 'hidden'}
>
<Spinner size={'sm'} mr={4} />
{t('chat.Converting to text')}
{t('core.chat.Converting to text')}
</Flex>
{/* file preview */}
......
......@@ -5,7 +5,7 @@ import MyModal from '../MyModal';
import { useTranslation } from 'next-i18next';
import type { SearchDataResponseItemType } from '@fastgpt/global/core/dataset/type';
import QuoteItem from '../core/dataset/QuoteItem';
import { RawSourceText } from '@/pages/dataset/detail/components/InputDataModal';
import RawSourceBox from '../core/dataset/RawSourceBox';
const QuoteModal = ({
rawSearch = [],
......@@ -46,7 +46,7 @@ const QuoteModal = ({
title={
<Box>
{metadata ? (
<RawSourceText {...metadata} canView={false} />
<RawSourceBox {...metadata} canView={false} />
) : (
<>{t('core.chat.Quote Amount', { amount: rawSearch.length })}</>
)}
......
......@@ -19,7 +19,7 @@ const ReadFeedbackModal = ({
isOpen={true}
onClose={onClose}
iconSrc="/imgs/modal/readFeedback.svg"
title={t('chat.Feedback Modal')}
title={t('core.chat.Feedback Modal')}
>
<ModalBody>{content}</ModalBody>
<ModalFooter>
......
......@@ -92,7 +92,7 @@ const ResponseTags = ({
<>
{sourceList.length > 0 && (
<>
<ChatBoxDivider icon="core/chat/quoteFill" text={t('chat.Quote')} />
<ChatBoxDivider icon="core/chat/quoteFill" text={t('core.chat.Quote')} />
<Flex alignItems={'center'} flexWrap={'wrap'} gap={2}>
{sourceList.map((item) => (
<MyTooltip key={item.collectionId} label={t('core.chat.quote.Read Quote')}>
......
......@@ -46,7 +46,7 @@ const SelectMarkCollection = ({
paths={paths}
onClose={onClose}
setParentId={setParentId}
tips={t('chat.Select Mark Kb Desc')}
tips={t('core.chat.Select Mark Kb Desc')}
>
<ModalBody flex={'1 0 0'} overflowY={'auto'}>
<Grid
......@@ -164,19 +164,23 @@ const SelectMarkCollection = ({
<InputDataModal
onClose={onClose}
collectionId={adminMarkData.collectionId}
dataId={adminMarkData.dataId}
defaultValue={{
id: adminMarkData.dataId,
q: adminMarkData.q,
a: adminMarkData.a,
indexes: [getDefaultIndex({ dataId: `${Date.now()}` })]
a: adminMarkData.a
}}
onSuccess={(data) => {
if (!data.q || !adminMarkData.datasetId || !adminMarkData.collectionId || !data.id) {
if (
!data.q ||
!adminMarkData.datasetId ||
!adminMarkData.collectionId ||
!data.dataId
) {
return onClose();
}
onSuccess({
dataId: data.id,
dataId: data.dataId,
datasetId: adminMarkData.datasetId,
collectionId: adminMarkData.collectionId,
q: data.q,
......
......@@ -910,14 +910,15 @@ const ChatBox = (
)}
{/* admin mark content */}
{showMarkIcon && item.adminFeedback && (
<Box>
<Box fontSize={'sm'}>
<ChatBoxDivider
icon="core/app/markLight"
text={t('chat.Admin Mark Content')}
text={t('core.chat.Admin Mark Content')}
/>
<Box whiteSpace={'pre'}>{`${item.adminFeedback.q || ''}${
item.adminFeedback.a ? `\n${item.adminFeedback.a}` : ''
}`}</Box>
<Box whiteSpace={'pre'}>
<Box color={'black'}>{item.adminFeedback.q}</Box>
<Box color={'myGray.600'}>{item.adminFeedback.a}</Box>
</Box>
</Box>
)}
</Card>
......@@ -996,6 +997,7 @@ const ChatBox = (
setAdminMarkData={(e) => setAdminMarkData({ ...e, chatItemId: adminMarkData.chatItemId })}
onClose={() => setAdminMarkData(undefined)}
onSuccess={(adminFeedback) => {
console.log(adminMarkData);
if (!appId || !chatId || !adminMarkData.chatItemId) return;
updateChatAdminFeedback({
appId,
......@@ -1003,6 +1005,7 @@ const ChatBox = (
chatItemId: adminMarkData.chatItemId,
...adminFeedback
});
// update dom
setChatHistory((state) =>
state.map((chatItem) =>
......@@ -1234,7 +1237,7 @@ function ChatController({
{!!onDelete && (
<>
{onRetry && (
<MyTooltip label={t('chat.retry')}>
<MyTooltip label={t('core.chat.retry')}>
<MyIcon
{...controlIconStyle}
name={'common/retryLight'}
......@@ -1301,7 +1304,7 @@ function ChatController({
</MyTooltip>
))}
{!!onMark && (
<MyTooltip label={t('chat.Mark')}>
<MyTooltip label={t('core.chat.Mark')}>
<MyIcon
{...controlIconStyle}
name={'core/app/markLight'}
......
......@@ -30,7 +30,7 @@ const Navbar = ({ unread }: { unread: number }) => {
{
label: t('navbar.Chat'),
icon: 'core/chat/chatLight',
activeIcon: 'chatcore/dataset/chatFillFill',
activeIcon: 'core/chat/chatFill',
link: `/chat?appId=${lastChatAppId}&chatId=${lastChatId}`,
activeLink: ['/chat']
},
......@@ -77,6 +77,12 @@ const Navbar = ({ unread }: { unread: number }) => {
h: '58px',
borderRadius: 'md'
};
const hoverStyle: LinkProps = {
_hover: {
bg: 'myGray.05',
color: 'primary.600'
}
};
return (
<Flex
......@@ -146,10 +152,11 @@ const Navbar = ({ unread }: { unread: number }) => {
<Link
as={NextLink}
{...itemStyles}
{...hoverStyle}
prefetch
href={`/account?currentTab=inform`}
mb={0}
color={'#9096a5'}
color={'myGray.500'}
>
<Badge count={unread}>
<MyIcon name={'inform'} width={'22px'} height={'22px'} />
......@@ -161,10 +168,11 @@ const Navbar = ({ unread }: { unread: number }) => {
<MyTooltip label={t('common.system.Use Helper')} placement={'right-end'}>
<Link
{...itemStyles}
{...hoverStyle}
href={feConfigs?.chatbotUrl || getDocPath('/docs/intro')}
target="_blank"
mb={0}
color={'#9096a5'}
color={'myGray.500'}
>
<MyIcon name={'common/courseLight'} width={'26px'} height={'26px'} />
</Link>
......@@ -177,8 +185,9 @@ const Navbar = ({ unread }: { unread: number }) => {
href="https://github.com/labring/FastGPT"
target={'_blank'}
{...itemStyles}
{...hoverStyle}
mt={0}
color={'#9096a5'}
color={'myGray.500'}
>
<MyIcon name={'common/gitLight'} width={'22px'} height={'22px'} />
</Link>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment