V4.8.16 dev (#3431)

* feat: add feishu & yuque dataset (#3379)

* feat: add feishu & yuque dataset

* fix ts

* fix ts

* move type position

* fix

* fix: merge interface

* fix

* feat: dingtalk sso support (#3408)

* fix: optional sso state

* feat: dingtalk bot

* feat: dingtalk sso login

* chore: move i18n to user namespace

* feat: dingtalk bot integration (#3415)

* feat: dingtalk bot integration

* docs: config dingtalk bot

* feat:sear XNG服务 (#3413)

* feat:sear XNG服务

* 补充了courseUrl

* 添加了官方文档

* 错误时返回情况修正了一下

* Tracks (#3420)

* feat: node intro

* feat: add domain track

* dingding sso login

* perf: api dataset code and add doc

* feat: tracks

* feat: searXNG plugins

* fix: ts

* feat: delete node tracks (#3423)

* fix: dingtalk bot GET verification (#3424)

* 4.8.16 test: fix: plugin inputs render;fix: ui offset (#3426)

* fix: ui offset

* perf: dingding talk

* fix: plugin inputs render

* feat: menu all folder (#3429)

* fix: recall code

---------

Co-authored-by: heheer <heheer@sealos.io>
Co-authored-by: a.e. <49438478+I-Info@users.noreply.github.com>
Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
This commit is contained in:
Archer
2024-12-18 19:30:19 +08:00
committed by GitHub
parent 82871be054
commit bd79e7701f
154 changed files with 2519 additions and 300 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

View File

@@ -10,14 +10,20 @@ weight: 808
## 完整更新内容
1.
1. 新增 - SearXNG 搜索插件[点击查看教程](/docs/guide/plugins/searxng_plugin_guide/)
2. 新增 - 商业版支持 API 知识库和链接集合定时同步。
3. 新增 - 猜你想问支持选择模型和自定义提示词。
4. 新增 - 钉钉和企微机器人 webhook 插件。
5. 新增 - sandbox 新增 createHmac 加密全局方法。
6. 优化 - 工作流/简易模式变量初始化代码,去除监听初始化,避免因渲染顺序不一致导致的失败。
7. 修复 - 无法自动切换默认语言。增加分享链接,强制执行一次切换默认语言
8. 修复 - 数组选择器自动兼容 4.8.13 以前的数据。
9. 修复 - 站点同步知识库,链接同步时未使用选择器
10. 修复 - 简易模式转工作流,没有把系统配置项转化
11. 修复 - 插件独立运行,变量初始值未赋上
5. 新增 - 商业版支持钉钉 SSO 登录配置。[点击查看教程](/docs/guide/admin/sso_dingtalk/)
6. 新增 - 商业版支持飞书和语雀知识库导入。[点击查看教程](/docs/guide/knowledge_base/lark_dataset/)
7. 新增 - sandbox 新增 createHmac 加密全局方法
8. 新增 - 工作流右键支持
9. 优化 - 工作流/简易模式变量初始化代码,去除监听初始化,避免因渲染顺序不一致导致的失败
10. 优化 - 工作流获取数据类型不一致数据时,增加类型转化,避免 undefined
11. 修复 - 无法自动切换默认语言。增加分享链接,强制执行一次切换默认语言
12. 修复 - 数组选择器自动兼容 4.8.13 以前的数据。
13. 修复 - 站点同步知识库,链接同步时未使用选择器。
14. 修复 - 简易模式转工作流,没有把系统配置项转化。
15. 修复 - 插件独立运行,变量初始值未赋上。
16. 修复 - 工作流使用弹窗组件时,关闭弹窗后,有时候会出现页面偏移。
17. 修复 - 插件调试时,日志未保存插件输入参数。

View File

@@ -0,0 +1,9 @@
---
weight: 490
title: '商业版后台'
description: '商业版后台使用教程'
icon: 'chat_bubble'
draft: false
images: []
---
<!-- 470 ~ 500 -->

View File

@@ -0,0 +1,44 @@
---
weight: 490
title: '钉钉 SSO 配置'
description: '钉钉 SSO 登录'
icon: 'chat_bubble'
draft: false
images: []
---
## 1. 注册钉钉应用
登录 [钉钉开放平台](https://open-dev.dingtalk.com/fe/app?hash=%23%2Fcorp%2Fapp#/corp/app),创建一个应用。
![alt text](/imgs/image-25.png)
## 2. 配置钉钉应用安全设置
点击进入创建好的应用后,点开`安全设置`,配置出口 IP服务器 IP和重定向 URL。重定向 URL 填写逻辑:
`{{fastgpt 域名}}/login/provider`
![alt text](/imgs/image-26.png)
## 3. 设置钉钉应用权限
点击进入创建好的应用后,点开`权限设置`,开放两个权限: `个人手机号信息``通讯录个人信息读权限`
![alt text](/imgs/image-27.png)
## 4. 发布应用
点击进入创建好的应用后,点开`版本管理与发布`,随便创建一个新版本即可。
## 5. 在 FastGPT Admin 配置钉钉应用 id
名字都是对应上,直接填写即可。
| | |
| --- | --- |
| ![alt text](/imgs/image-28.png)| ![alt text](/imgs/image-29.png) |
## 6. 测试
![alt text](/imgs/image-30.png)

View File

@@ -0,0 +1,59 @@
---
title: '飞书知识库'
description: 'FastGPT 飞书知识库功能介绍和使用方式'
icon: 'language'
draft: false
toc: true
weight: 405
---
| | |
| --- | --- |
| ![alt text](/imgs/image-39.png) | ![alt text](/imgs/image-40.png) |
FastGPT v4.8.16 版本开始,商业版用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret并选中一个**文档空间的顶层文件夹**来导入飞书知识库。目前处于测试阶段,部分交互有待优化。
由于飞书限制,无法直接获取所有文档内容,目前仅可以获取共享空间下文件目录的内容,无法获取个人空间和知识库里的内容。
## 1. 创建飞书应用
打开 [飞书开放平台](https://open.feishu.cn/?lang=zh-CN),点击**创建应用**,选择**自建应用**,然后填写应用名称。
## 2. 配置应用权限
创建应用后,进入应用可以配置相关权限,这里需要增加两个权限:
1. 获取云空间文件夹下的云文档清单
2. 查看新版文档
![alt text](/imgs/image-41.png)
## 3. 获取 appId 和 appSecret
![alt text](/imgs/image-42.png)
## 4. 给 Folder 增加权限
可参考飞书教程: https://open.feishu.cn/document/server-docs/docs/drive-v1/faq#b02e5bfb
大致总结为:
1. 把刚刚创建的应用拉入一个群里
2. 给这个群增加目录权限
如果你的目录已经给全员组增加权限了,则可以跳过上面步骤,直接获取 Folder Token。
![alt text](/imgs/image-43.png)
## 5. 获取 Folder Token
可以页面路径上获取 Folder Token注意不要把问号复制进来。
![alt text](/imgs/image-44.png)
## 6. 创建知识库
根据 3 和 5 获取到的 3 个参数,创建知识库,选择飞书文件库类型,然后填入对应的参数,点击创建。
![alt text](/imgs/image-39.png)

View File

@@ -0,0 +1,42 @@
---
title: '语雀文件库'
description: 'FastGPT 语雀文件库功能介绍和使用方式'
icon: 'language'
draft: false
toc: true
weight: 405
---
| | |
| --- | --- |
| ![alt text](/imgs/image-31.png) | ![alt text](/imgs/image-32.png) |
FastGPT v4.8.16 版本开始,商业版用户支持语雀文件库导入,用户可以通过配置语雀的 token 和 uid 来导入语雀文档库。目前处于测试阶段,部分交互有待优化。
## 1. 获取语雀的 token 和 uid
在语雀首页 - 个人头像 - 设置,可找到对应参数。
![alt text](/imgs/image-36.png)
参考下图获取 Token 和 User ID注意给 Token 赋值权限:
| 获取 Token | 增加权限 | 获取 User ID |
| --- | --- | --- |
| ![alt text](/imgs/image-33.png) | ![alt text](/imgs/image-34.png) | ![alt text](/imgs/image-35.png) |
## 2. 创建知识库
使用上一步获取的 token 和 uid创建知识库选择语雀文件库类型然后填入对应的参数点击创建。
![alt text](/imgs/image-37.png)
![alt text](/imgs/image-31.png)
## 3. 导入文档
创建完知识库后,点击`添加文件`即可导入语雀的文档库,跟随引导即可。
语雀知识库支持定时同步功能,每天会不定时的扫描一次,如果文档有更新,则会进行同步,也可以进行手动同步。
![alt text](/imgs/image-38.png)

View File

@@ -0,0 +1,178 @@
---
title: "SearXNG 搜索插件配置与使用说明"
description: "FastGPT SearXNG 搜索插件配置指南"
icon: "search"
draft: false
toc: true
weight: 303
---
[SearXNG](https://github.com/searxng/searxng)是一款免费的互联网元搜索引擎,它汇总了来自各种搜索服务和数据库的结果。它不会跟踪或分析用户。用户可以自行部署它进行使用。本文介绍 Searxng 的部署以及接入 FastGPT 插件。
## 1. 部署应用
这里介绍在 Sealos 中部署 SearXNG 的方法。Docker 部署,可以直接参考 [SearXNG 官方教程](https://github.com/searxng/searxng)。
点击打开 [Sealos 北京区](https://bja.sealos.run/),点击应用部署,并新建一个应用:
| 打开应用部署 | 点击新建应用 |
| --- | --- |
| ![](/imgs/searxng_plugin_guide1.png) | ![alt text](/imgs/image-45.png) |
## 2. 部署配置
把下面参数,填入配置中:
* 镜像名: searxng/searxng:latest
* CPU: 0.2
* 内存: 512M
* 容器暴露端口: 8080
* 开启公网访问
* 点击高级配置,填写环境变量和配置文件
![alt text](/imgs/image-50.png)
**环境变量**
填下面两个内容,主要是为了减小并发,不然内存占用非常大。
```
UWSGI_WORKERS=4
UWSGI_THREADS=4
```
**配置文件**
新增一个配置文件,文件名:`/etc/searx/settings.yml`
文件内容:
```txt
general:
debug: false
instance_name: "searxng"
privacypolicy_url: false
donation_url: false
contact_url: false
enable_metrics: true
open_metrics: ''
brand:
new_issue_url: https://github.com/searxng/searxng/issues/new
docs_url: https://docs.searxng.org/
public_instances: https://searx.space
wiki_url: https://github.com/searxng/searxng/wiki
issue_url: https://github.com/searxng/searxng/issues
search:
safe_search: 0
autocomplete: ""
autocomplete_min: 4
default_lang: "auto"
ban_time_on_fail: 5
max_ban_time_on_fail: 120
formats:
- html
server:
port: 8080
bind_address: "0.0.0.0"
base_url: false
limiter: false
public_instance: false
secret_key: "example"
image_proxy: false
http_protocol_version: "1.0"
method: "POST"
default_http_headers:
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Robots-Tag: noindex, nofollow
Referrer-Policy: no-referrer
redis:
url: false
ui:
static_path: ""
static_use_hash: false
templates_path: ""
default_theme: simple
default_locale: ""
query_in_title: false
infinite_scroll: false
center_alignment: false
theme_args:
simple_style: auto
outgoing:
request_timeout: 30.0
max_request_timeout: 40.0
pool_connections: 200
pool_maxsize: 50
enable_http2: false
retries: 5
engines:
- name: bing
engine: bing
shortcut: bi
doi_resolvers:
oadoi.org: 'https://oadoi.org/'
doi.org: 'https://doi.org/'
doai.io: 'https://dissem.in/'
sci-hub.se: 'https://sci-hub.se/'
sci-hub.st: 'https://sci-hub.st/'
sci-hub.ru: 'https://sci-hub.ru/'
default_doi_resolver: 'oadoi.org'
```
国内目前只有 Bing 引擎可以正常用,所以上面的配置只配置了 bing 引擎。如果在海外部署,可以使用[Sealos 新加坡可用区](https://cloud.sealos.io/),并配置其他搜索引擎,可以参考[SearXNG 默认配置文件](https://github.com/searxng/searxng/blob/master/searx/settings.yml), 从里面复制一些 engine 配置。例如:
```
- name: duckduckgo
engine: duckduckgo
shortcut: ddg
- name: google
engine: google
shortcut: go
```
## 3. FastGPT 使用
复制 Sealos 部署后提供的公网地址,填入 FastGPT 的 SearXNG 插件的 URL 中。
| 复制公网地址| 填入 URL |
| --- | --- |
| ![alt text](/imgs/image-48.png) | ![alt text](/imgs/image-49.png) |
## 返回格式
* 成功时返回搜索结果数组:
```Bash
{
"result": "[{\"title\":\"标题1\",\"link\":\"链接1\",\"snippet\":\"摘要1\"}, ...]"
}
```
* 失败时通过 Promise.reject 可能返回错误信息:
```Bash
- "缺少查询参数"
- "缺少url"
- "Failed to fetch data from Search XNG"
```
一般问题来源于参数缺失与服务部署,如有更多问题可在用户群提问。
## FAQ
### 无搜索结果
1. 先直接打开外网地址,测试是否可以正常搜索。
2. 检查是否有超时的搜索引擎,通过 API 调用时不会返回结果。

View File

@@ -0,0 +1,57 @@
---
title: "接入钉钉机器人教程"
description: "FastGPT 接入钉钉机器人教程"
icon: "chat"
draft: false
toc: true
weight: 505
---
从 4.8.16 版本起FastGPT 商业版支持直接接入钉钉机器人,无需额外的 API。
## 1. 创建钉钉企业内部应用
1. 在[钉钉开发者后台](https://open-dev.dingtalk.com/fe/app)创建企业内部应用。
![图片1](/imgs/dingtalk-bot-1.png)
2. 获取**Client ID**和**Client Secret**。
![图片2](/imgs/dingtalk-bot-2.png)
## 2. 为 FastGPT 添加发布渠道
在 FastGPT 中选择要接入的应用,在**发布渠道**页面,新建一个接入钉钉机器人的发布渠道。
将前面拿到的 **Client ID****Client Secret** 填入配置弹窗中。
![图片3](/imgs/dingtalk-bot-3.png)
创建完成后,点击**请求地址**按钮,然后复制回调地址。
## 3. 为应用添加**机器人**应用能力。
在钉钉开发者后台,点击左侧**添加应用能力**,为刚刚创建的企业内部应用添加 **机器人** 应用能力。
![图片4](/imgs/dingtalk-bot-4.png)
## 4. 配置机器人回调地址
点击左侧**机器人** 应用能力,然后将底部**消息接受模式**设置为**HTTP模式**,消息接收地址填入前面复制的 FastGPT 的回调地址。
![图片5](/imgs/dingtalk-bot-5.png)
调试完成后,点击**发布**。
## 5. 发布应用
机器人发布后,还需要在**版本管理与发布**页面发布应用版本。
![图片6](/imgs/dingtalk-bot-6.png)
点击**创建新版本**后,设置版本号和版本描述后点击保存发布即可。
![图片7](/imgs/dingtalk-bot-7.png)
应用发布后,即可在钉钉企业中使用机器人功能,可对机器人私聊。或者在群组添加机器人后`@机器人`,触发对话。
![图片8](/imgs/dingtalk-bot-8.png)

View File

@@ -12,7 +12,8 @@ export enum DatasetErrEnum {
unLinkCollection = 'unLinkCollection',
invalidVectorModelOrQAModel = 'invalidVectorModelOrQAModel',
notSupportSync = 'notSupportSync',
sameApiCollection = 'sameApiCollection'
sameApiCollection = 'sameApiCollection',
noApiServer = 'noApiServer'
}
const datasetErr = [
{

View File

@@ -0,0 +1,7 @@
export enum TrackEnum {
login = 'login',
createApp = 'createApp',
useAppTemplate = 'useAppTemplate',
createDataset = 'createDataset',
appNodes = 'appNodes'
}

View File

@@ -0,0 +1,18 @@
import { TrackEnum } from './constants';
import { OAuthEnum } from '../../../support/user/constant';
import { AppTypeEnum } from '../../../core/app/constants';
export type PushTrackCommonType = {
uid: string;
teamId: string;
tmbId: string;
};
export type TrackSchemaType = {
event: TrackEnum;
createTime: Date;
uid?: string;
teamId?: string;
tmbId?: string;
data: Record<string, any>;
};

View File

@@ -63,6 +63,7 @@ export type FastGPTFeConfigsType = {
github?: string;
google?: string;
wechat?: string;
dingtalk?: string;
microsoft?: {
clientId?: string;
tenantId?: string;

View File

@@ -16,6 +16,7 @@ import { DatasetSearchModeEnum } from '../dataset/constants';
import { DispatchNodeResponseType } from '../workflow/runtime/type.d';
import { ChatBoxInputType } from '../../../../projects/app/src/components/core/chat/ChatContainer/ChatBox/type';
import { WorkflowInteractiveResponseType } from '../workflow/template/system/interactive/type';
import { FlowNodeInputItemType } from '../workflow/type/io';
export type ChatSchema = {
_id: string;
@@ -35,6 +36,7 @@ export type ChatSchema = {
variableList?: VariableItemType[];
welcomeText?: string;
variables: Record<string, any>;
pluginInputs?: FlowNodeInputItemType[];
metadata?: Record<string, any>;
};

View File

@@ -17,6 +17,8 @@ export type DatasetUpdateBody = {
externalReadUrl?: DatasetSchemaType['externalReadUrl'];
defaultPermission?: DatasetSchemaType['defaultPermission'];
apiServer?: DatasetSchemaType['apiServer'];
yuqueServer?: DatasetSchemaType['yuqueServer'];
feishuServer?: DatasetSchemaType['feishuServer'];
// sync schedule
autoSync?: boolean;

View File

@@ -22,3 +22,14 @@ export type APIFileContentResponse = {
export type APIFileReadResponse = {
url: string;
};
export type FeishuServer = {
appId: string;
appSecret: string;
folderToken: string;
};
export type YuqueServer = {
userId: string;
token: string;
};

View File

@@ -6,7 +6,9 @@ export enum DatasetTypeEnum {
dataset = 'dataset',
websiteDataset = 'websiteDataset', // depp link
externalFile = 'externalFile',
apiDataset = 'apiDataset'
apiDataset = 'apiDataset',
feishu = 'feishu',
yuque = 'yuque'
}
export const DatasetTypeMap = {
[DatasetTypeEnum.folder]: {
@@ -33,6 +35,16 @@ export const DatasetTypeMap = {
icon: 'core/dataset/externalDatasetOutline',
label: 'api_file',
collectionLabel: 'common.File'
},
[DatasetTypeEnum.feishu]: {
icon: 'core/dataset/feishuDatasetOutline',
label: 'feishu_dataset',
collectionLabel: 'common.File'
},
[DatasetTypeEnum.yuque]: {
icon: 'core/dataset/yuqueDatasetOutline',
label: 'yuque_dataset',
collectionLabel: 'common.File'
}
};

View File

@@ -10,7 +10,7 @@ import {
} from './constants';
import { DatasetPermission } from '../../support/permission/dataset/controller';
import { Permission } from '../../support/permission/controller';
import { APIFileServer } from './apiDataset';
import { APIFileServer, FeishuServer, YuqueServer } from './apiDataset';
export type DatasetSchemaType = {
_id: string;
@@ -33,6 +33,8 @@ export type DatasetSchemaType = {
};
inheritPermission: boolean;
apiServer?: APIFileServer;
feishuServer?: FeishuServer;
yuqueServer?: YuqueServer;
autoSync?: boolean;

View File

@@ -3,6 +3,7 @@ export enum PublishChannelEnum {
iframe = 'iframe',
apikey = 'apikey',
feishu = 'feishu',
dingtalk = 'dingtalk',
wecom = 'wecom',
officialAccount = 'official_account'
}

View File

@@ -14,6 +14,11 @@ export interface FeishuAppType {
verificationToken?: string;
}
export interface DingtalkAppType {
clientId: string;
clientSecret: string;
}
export interface WecomAppType {
AgentId: string;
CorpId: string;
@@ -36,7 +41,12 @@ export interface OffiAccountAppType {
// because we can not reply anything in 15s. Thus, the wechat server will treat this request as a failed request.
}
export type OutlinkAppType = FeishuAppType | WecomAppType | OffiAccountAppType | undefined;
export type OutlinkAppType =
| FeishuAppType
| WecomAppType
| OffiAccountAppType
| DingtalkAppType
| undefined;
export type OutLinkSchema<T extends OutlinkAppType = undefined> = {
_id: string;

View File

@@ -1,4 +1,5 @@
import { OAuthEnum } from './constant';
import { TrackRegisterParams } from './login/api';
export type PostLoginProps = {
username: string;
@@ -9,8 +10,7 @@ export type OauthLoginProps = {
type: `${OAuthEnum}`;
code: string;
callbackUrl: string;
inviterId?: string;
};
} & TrackRegisterParams;
export type WxLoginProps = {
inviterId?: string;

View File

@@ -16,5 +16,6 @@ export enum OAuthEnum {
google = 'google',
wechat = 'wechat',
microsoft = 'microsoft',
dingtalk = 'dingtalk',
sso = 'sso'
}

View File

@@ -2,3 +2,17 @@ export type GetWXLoginQRResponse = {
code: string;
codeUrl: string;
};
export type TrackRegisterParams = {
inviterId?: string;
bd_vid?: string;
fastgpt_sem?: {
keyword: string;
};
sourceDomain?: string;
};
export type AccountRegisterBody = {
username: string;
code: string;
password: string;
} & TrackRegisterParams;

View File

@@ -12,6 +12,7 @@ export type CreateTeamProps = {
avatar?: string;
defaultTeam?: boolean;
lafAccount?: LafAccountType;
memberName?: string;
};
export type UpdateTeamProps = {
name?: string;

View File

@@ -9,6 +9,7 @@ export enum UsageSourceEnum {
share = 'share',
wecom = 'wecom',
feishu = 'feishu',
dingtalk = 'dingtalk',
official_account = 'official_account'
}
@@ -39,5 +40,8 @@ export const UsageSourceMap = {
},
[UsageSourceEnum.wecom]: {
label: i18nT('user:usage.wecom')
},
[UsageSourceEnum.dingtalk]: {
label: i18nT('user:usage.dingtalk')
}
};

View File

@@ -37,6 +37,8 @@ export const getUsageSourceByPublishChannel = (publishchannel: PublishChannelEnu
return UsageSourceEnum.wecom;
case PublishChannelEnum.officialAccount:
return UsageSourceEnum.official_account;
case PublishChannelEnum.dingtalk:
return UsageSourceEnum.dingtalk;
default:
return UsageSourceEnum.fastgpt;
}

View File

@@ -3,6 +3,7 @@
"version": "1.0.0",
"type": "module",
"dependencies": {
"cheerio": "1.0.0-rc.12",
"@types/pg": "^8.6.6",
"axios": "^1.5.1",
"duck-duck-scrape": "^2.2.5",

View File

@@ -27,7 +27,8 @@ const packagePluginList = [
'wiki',
'databaseConnection',
'Doc2X',
'Doc2X/PDF2text'
'Doc2X/PDF2text',
'searchXNG'
];
export const list = [...staticPluginList, ...packagePluginList];

View File

@@ -0,0 +1,66 @@
import { delay } from '@fastgpt/global/common/system/utils';
import * as cheerio from 'cheerio';
import { i18nT } from '../../../web/i18n/utils';
type Props = {
query: string;
url: string;
};
interface SearchResult {
title: string;
link: string;
snippet: string;
}
type Response = Promise<{
result: string;
error?: Record<string, any>;
}>;
const main = async (props: Props, retry = 3): Response => {
const { query, url } = props;
if (!query) {
return Promise.reject(i18nT('chat:not_query'));
}
if (!url) {
return Promise.reject('Can not find url');
}
try {
const response = await fetch(`${url}?q=${encodeURIComponent(query)}&language=auto`);
const html = await response.text();
const $ = cheerio.load(html, {
xml: false,
decodeEntities: true
});
const results: SearchResult[] = [];
$('.result').each((_: number, element: cheerio.Element) => {
const $element = $(element);
results.push({
title: $element.find('h3').text().trim(),
link: $element.find('a').first().attr('href') || '',
snippet: $element.find('.content').text().trim()
});
});
return {
result: JSON.stringify(results.slice(0, 10))
};
} catch (error) {
console.log(error);
if (retry <= 0) {
console.log('Search XNG error', { error });
return Promise.reject('Failed to fetch data from Search XNG');
}
await delay(Math.random() * 2000);
return main(props, retry - 1);
}
};
export default main;

View File

@@ -0,0 +1,414 @@
{
"author": "",
"version": "4816",
"name": "Search XNG 搜索",
"avatar": "core/workflow/template/searxng",
"intro": "使用 Search XNG 服务进行搜索。",
"courseUrl": "/docs/guide/plugins/searxng_plugin_guide/",
"showStatus": true,
"weight": 10,
"isTool": true,
"templateType": "search",
"workflow": {
"nodes": [
{
"nodeId": "pluginInput",
"name": "插件开始",
"intro": "可以配置插件需要哪些输入,利用这些输入来运行插件",
"avatar": "core/workflow/template/workflowStart",
"flowNodeType": "pluginInput",
"showStatus": false,
"position": {
"x": 482.8986144681427,
"y": -77.56127656499825
},
"version": "481",
"inputs": [
{
"renderTypeList": ["input", "reference"],
"selectedTypeIndex": 0,
"valueType": "string",
"canEdit": true,
"key": "query",
"label": "query",
"description": "检索词",
"required": true,
"toolDescription": "检索词"
},
{
"renderTypeList": ["input", "reference"],
"selectedTypeIndex": 0,
"valueType": "string",
"canEdit": true,
"key": "url",
"label": "url",
"description": "部署的searXNG服务的链接",
"defaultValue": "",
"list": [
{
"label": "",
"value": ""
}
],
"maxFiles": 5,
"canSelectFile": true,
"canSelectImg": true,
"required": true,
"toolDescription": "部署的searXNG服务的链接"
}
],
"outputs": [
{
"id": "query",
"valueType": "string",
"key": "query",
"label": "query",
"type": "hidden"
},
{
"id": "url",
"valueType": "string",
"key": "url",
"label": "url",
"type": "hidden"
}
]
},
{
"nodeId": "pluginOutput",
"name": "插件输出",
"intro": "自定义配置外部输出,使用插件时,仅暴露自定义配置的输出",
"avatar": "core/workflow/template/pluginOutput",
"flowNodeType": "pluginOutput",
"showStatus": false,
"position": {
"x": 1763.7518709731714,
"y": -55.56127656499825
},
"version": "481",
"inputs": [
{
"renderTypeList": ["reference"],
"valueType": "string",
"canEdit": true,
"key": "result",
"label": "result",
"description": " 检索结果",
"value": ["hjnVuJAOwyXV", "lEyy5QqyIBrK"]
},
{
"renderTypeList": ["reference"],
"valueType": "object",
"canEdit": true,
"key": "error",
"label": "error",
"isToolOutput": true,
"description": "请求错误",
"required": true,
"value": ["hjnVuJAOwyXV", "error"]
}
],
"outputs": []
},
{
"nodeId": "hjnVuJAOwyXV",
"name": "HTTP 请求",
"intro": "可以发出一个 HTTP 请求,实现更为复杂的操作(联网搜索、数据库查询等)",
"avatar": "core/workflow/template/httpRequest",
"flowNodeType": "httpRequest468",
"showStatus": true,
"position": {
"x": 1054.6774638324207,
"y": -403.06127656499825
},
"version": "481",
"inputs": [
{
"key": "system_addInputParam",
"renderTypeList": ["addInputParam"],
"valueType": "dynamic",
"label": "",
"required": false,
"description": "common:core.module.input.description.HTTP Dynamic Input",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"arrayAny",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
},
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpMethod",
"renderTypeList": ["custom"],
"valueType": "string",
"label": "",
"value": "POST",
"required": true,
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpTimeout",
"renderTypeList": ["custom"],
"valueType": "number",
"label": "",
"value": 30,
"min": 5,
"max": 600,
"required": true,
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpReqUrl",
"renderTypeList": ["hidden"],
"valueType": "string",
"label": "",
"description": "common:core.module.input.description.Http Request Url",
"placeholder": "https://api.ai.com/getInventory",
"required": false,
"value": "searchXNG",
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpHeader",
"renderTypeList": ["custom"],
"valueType": "any",
"value": [],
"label": "",
"description": "common:core.module.input.description.Http Request Header",
"placeholder": "common:core.module.input.description.Http Request Header",
"required": false,
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpParams",
"renderTypeList": ["hidden"],
"valueType": "any",
"value": [],
"label": "",
"required": false,
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpJsonBody",
"renderTypeList": ["hidden"],
"valueType": "any",
"value": "{\n \"query\": \"{{query}}\",\n \"url\": \"{{url}}\"\n}",
"label": "",
"required": false,
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpFormBody",
"renderTypeList": ["hidden"],
"valueType": "any",
"value": [],
"label": "",
"required": false,
"debugLabel": "",
"toolDescription": ""
},
{
"key": "system_httpContentType",
"renderTypeList": ["hidden"],
"valueType": "string",
"value": "json",
"label": "",
"required": false,
"debugLabel": "",
"toolDescription": ""
},
{
"renderTypeList": ["reference"],
"valueType": "string",
"canEdit": true,
"key": "query",
"label": "query",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"arrayAny",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
},
"required": true,
"value": ["pluginInput", "query"]
},
{
"renderTypeList": ["reference"],
"valueType": "string",
"canEdit": true,
"key": "url",
"label": "url",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"arrayAny",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
},
"required": true,
"value": ["pluginInput", "url"]
}
],
"outputs": [
{
"id": "error",
"key": "error",
"label": "workflow:request_error",
"description": "HTTP请求错误信息成功时返回空",
"valueType": "object",
"type": "static"
},
{
"id": "httpRawResponse",
"key": "httpRawResponse",
"required": true,
"label": "workflow:raw_response",
"description": "HTTP请求的原始响应。只能接受字符串或JSON类型响应数据。",
"valueType": "any",
"type": "static"
},
{
"id": "system_addOutputParam",
"key": "system_addOutputParam",
"type": "dynamic",
"valueType": "dynamic",
"label": "",
"customFieldConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": false
}
},
{
"id": "lEyy5QqyIBrK",
"valueType": "string",
"type": "dynamic",
"key": "result",
"label": "result"
}
]
},
{
"nodeId": "f1mRh1D85H2D",
"name": "系统配置",
"intro": "",
"avatar": "core/workflow/template/systemConfig",
"flowNodeType": "pluginConfig",
"position": {
"x": -28.511358745511643,
"y": -103.56127656499825
},
"version": "4811",
"inputs": [],
"outputs": []
}
],
"edges": [
{
"source": "pluginInput",
"target": "hjnVuJAOwyXV",
"sourceHandle": "pluginInput-source-right",
"targetHandle": "hjnVuJAOwyXV-target-left"
},
{
"source": "hjnVuJAOwyXV",
"target": "pluginOutput",
"sourceHandle": "hjnVuJAOwyXV-source-right",
"targetHandle": "pluginOutput-target-left"
}
],
"chatConfig": {
"welcomeText": "",
"variables": [],
"questionGuide": false,
"ttsConfig": {
"type": "web"
},
"whisperConfig": {
"open": false,
"autoSend": false,
"autoTTSResponse": false
},
"chatInputGuide": {
"open": false,
"textList": [],
"customUrl": ""
},
"instruction": "",
"autoExecute": {
"open": false,
"defaultPrompt": ""
},
"_id": "67611a5eed7efa452a6e50c5"
}
}
}

View File

@@ -0,0 +1,20 @@
import { TrackSchemaType } from '@fastgpt/global/common/middle/tracks/type';
import { getMongoModel, Schema } from '../../mongo';
import { TrackEnum } from '@fastgpt/global/common/middle/tracks/constants';
const TrackSchema = new Schema({
event: { type: String, required: true, enum: Object.values(TrackEnum) },
uid: String,
teamId: String,
tmbId: String,
createTime: { type: Date, default: () => new Date() },
data: Object
});
try {
TrackSchema.index({ event: 1 });
} catch (error) {
console.log(error);
}
export const TrackModel = getMongoModel<TrackSchemaType>('track', TrackSchema);

View File

@@ -0,0 +1,62 @@
import { PushTrackCommonType } from '@fastgpt/global/common/middle/tracks/type';
import { TrackModel } from './schema';
import { TrackEnum } from '@fastgpt/global/common/middle/tracks/constants';
import { addLog } from '../../system/log';
import { OAuthEnum } from '@fastgpt/global/support/user/constant';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants';
import { getAppLatestVersion } from '../../../core/app/version/controller';
const createTrack = ({ event, data }: { event: TrackEnum; data: Record<string, any> }) => {
if (!global.feConfigs?.isPlus) return;
addLog.info('Push tracks', {
event,
...data
});
const { uid, teamId, tmbId, ...props } = data;
return TrackModel.create({
event,
uid,
teamId,
tmbId,
data: props
});
};
export const pushTrack = {
login: (data: PushTrackCommonType & { type: `${OAuthEnum}` | 'password' }) => {
return createTrack({
event: TrackEnum.login,
data
});
},
createApp: (data: PushTrackCommonType & { type: AppTypeEnum }) => {
return createTrack({
event: TrackEnum.createApp,
data
});
},
createDataset: (data: PushTrackCommonType & { type: DatasetTypeEnum }) => {
return createTrack({
event: TrackEnum.createDataset,
data
});
},
countAppNodes: async (data: PushTrackCommonType & { appId: string }) => {
try {
const { nodes } = await getAppLatestVersion(data.appId);
const nodeTypeList = nodes.map((node) => ({
type: node.flowNodeType,
pluginId: node.pluginId
}));
return createTrack({
event: TrackEnum.appNodes,
data: {
...data,
nodeTypeList
}
});
} catch (error) {}
}
};

View File

@@ -72,6 +72,7 @@ const ChatSchema = new Schema({
type: Object,
default: {}
},
pluginInputs: Array,
metadata: {
//For special storage
type: Object,

View File

@@ -10,6 +10,7 @@ import { getAppChatConfig, getGuideModule } from '@fastgpt/global/core/workflow/
import { AppChatConfigType } from '@fastgpt/global/core/app/type';
import { mergeChatResponseData } from '@fastgpt/global/core/chat/utils';
import { pushChatLog } from './pushChatLog';
import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
type Props = {
chatId: string;
@@ -62,6 +63,9 @@ export async function saveChat({
systemConfigNode: getGuideModule(nodes),
isPublicFetch: false
});
const pluginInputs = nodes?.find(
(node) => node.flowNodeType === FlowNodeTypeEnum.pluginInput
)?.inputs;
await mongoSessionRun(async (session) => {
const [{ _id: chatItemIdHuman }, { _id: chatItemIdAi }] = await MongoChatItem.insertMany(
@@ -89,6 +93,7 @@ export async function saveChat({
variableList,
welcomeText,
variables: variables || {},
pluginInputs,
title: newTitle,
source,
shareId,

View File

@@ -7,8 +7,9 @@ import { TextSplitProps, splitText2Chunks } from '@fastgpt/global/common/string/
import axios from 'axios';
import { readRawContentByFileBuffer } from '../../common/file/read/utils';
import { parseFileExtensionFromUrl } from '@fastgpt/global/common/string/tools';
import { APIFileServer } from '@fastgpt/global/core/dataset/apiDataset';
import { APIFileServer, FeishuServer, YuqueServer } from '@fastgpt/global/core/dataset/apiDataset';
import { useApiDatasetRequest } from './apiDataset/api';
import { POST } from '../../common/api/plusRequest';
export const readFileRawTextByUrl = async ({
teamId,
@@ -53,7 +54,9 @@ export const readDatasetSourceRawText = async ({
isQAImport,
selector,
externalFileId,
apiServer
apiServer,
feishuServer,
yuqueServer
}: {
teamId: string;
type: DatasetSourceReadTypeEnum;
@@ -63,6 +66,8 @@ export const readDatasetSourceRawText = async ({
selector?: string; // link selector
externalFileId?: string; // external file dataset
apiServer?: APIFileServer; // api dataset
feishuServer?: FeishuServer; // feishu dataset
yuqueServer?: YuqueServer; // yuque dataset
}): Promise<string> => {
if (type === DatasetSourceReadTypeEnum.fileLocal) {
const { rawText } = await readFileContentFromMongo({
@@ -88,28 +93,45 @@ export const readDatasetSourceRawText = async ({
});
return rawText;
} else if (type === DatasetSourceReadTypeEnum.apiFile) {
if (!apiServer) return Promise.reject('apiServer not found');
const rawText = await readApiServerFileContent({
apiServer,
feishuServer,
yuqueServer,
apiFileId: sourceId,
teamId
});
return rawText;
}
return '';
};
export const readApiServerFileContent = async ({
apiServer,
feishuServer,
yuqueServer,
apiFileId,
teamId
}: {
apiServer: APIFileServer;
apiServer?: APIFileServer;
feishuServer?: FeishuServer;
yuqueServer?: YuqueServer;
apiFileId: string;
teamId: string;
}) => {
return useApiDatasetRequest({ apiServer }).getFileContent({ teamId, apiFileId });
if (apiServer) {
return useApiDatasetRequest({ apiServer }).getFileContent({ teamId, apiFileId });
}
if (feishuServer || yuqueServer) {
return POST<string>(`/core/dataset/systemApiDataset`, {
type: 'content',
feishuServer,
yuqueServer,
apiFileId
});
}
return Promise.reject('No apiServer or feishuServer or yuqueServer');
};
export const rawText2Chunks = ({

View File

@@ -90,6 +90,12 @@ const DatasetSchema = new Schema({
apiServer: {
type: Object
},
feishuServer: {
type: Object
},
yuqueServer: {
type: Object
},
autoSync: Boolean,

View File

@@ -42,8 +42,7 @@ import {
filterWorkflowEdges,
checkNodeRunStatus,
textAdaptGptResponse,
replaceEditorVariable,
formatVariableValByType
replaceEditorVariable
} from '@fastgpt/global/core/workflow/runtime/utils';
import { ChatNodeUsageType } from '@fastgpt/global/support/wallet/bill/type';
import { dispatchRunTools } from './agent/runTool/index';

View File

@@ -172,7 +172,7 @@ export async function authDatasetCollection({
collection: CollectionWithDatasetType;
}
> {
const { teamId, tmbId, isRoot: isRootFromHeader } = await parseHeaderCert(props);
const { teamId, tmbId, userId, isRoot: isRootFromHeader } = await parseHeaderCert(props);
const collection = await getCollectionWithDataset(collectionId);
if (!collection) {
@@ -187,6 +187,7 @@ export async function authDatasetCollection({
});
return {
userId,
teamId,
tmbId,
collection,

View File

@@ -24,6 +24,7 @@ type authModeType = {
export type AuthModeType = RequireAtLeastOne<authModeType, 'authApiKey' | 'authRoot' | 'authToken'>;
export type AuthResponseType<T extends Permission = Permission> = {
userId: string;
teamId: string;
tmbId: string;
authType?: `${AuthUserTypeEnum}`;

View File

@@ -49,11 +49,7 @@ const UserSchema = new Schema({
type: String,
default: defaultAvatars[Math.floor(Math.random() * defaultAvatars.length)]
},
inviterId: {
// 谁邀请注册的
type: Schema.Types.ObjectId,
ref: userCollectionName
},
promotionRate: {
type: Number,
default: 15
@@ -71,9 +67,14 @@ const UserSchema = new Schema({
lastLoginTmbId: {
type: Schema.Types.ObjectId
},
fastgpt_sem: {
type: Object
}
inviterId: {
// 谁邀请注册的
type: Schema.Types.ObjectId,
ref: userCollectionName
},
fastgpt_sem: Object,
sourceDomain: String
});
try {

View File

@@ -91,6 +91,7 @@ export const iconPaths = {
'common/voiceLight': () => import('./icons/common/voiceLight.svg'),
'common/warn': () => import('./icons/common/warn.svg'),
'common/wechatFill': () => import('./icons/common/wechatFill.svg'),
'common/dingtalkFill': () => import('./icons/common/dingtalkFill.svg'),
configmap: () => import('./icons/configmap.svg'),
copy: () => import('./icons/copy.svg'),
'core/app/aiFill': () => import('./icons/core/app/aiFill.svg'),
@@ -169,6 +170,9 @@ export const iconPaths = {
import('./icons/core/dataset/externalDatasetColor.svg'),
'core/dataset/externalDatasetOutline': () =>
import('./icons/core/dataset/externalDatasetOutline.svg'),
'core/dataset/feishuDatasetColor': () => import('./icons/core/dataset/feishuDatasetColor.svg'),
'core/dataset/feishuDatasetOutline': () =>
import('./icons/core/dataset/feishuDatasetOutline.svg'),
'core/dataset/fileCollection': () => import('./icons/core/dataset/fileCollection.svg'),
'core/dataset/fullTextRecall': () => import('./icons/core/dataset/fullTextRecall.svg'),
'core/dataset/manualCollection': () => import('./icons/core/dataset/manualCollection.svg'),
@@ -182,6 +186,8 @@ export const iconPaths = {
'core/dataset/websiteDatasetColor': () => import('./icons/core/dataset/websiteDatasetColor.svg'),
'core/dataset/websiteDatasetOutline': () =>
import('./icons/core/dataset/websiteDatasetOutline.svg'),
'core/dataset/yuqueDatasetColor': () => import('./icons/core/dataset/yuqueDatasetColor.svg'),
'core/dataset/yuqueDatasetOutline': () => import('./icons/core/dataset/yuqueDatasetOutline.svg'),
'core/modules/basicNode': () => import('./icons/core/modules/basicNode.svg'),
'core/modules/fixview': () => import('./icons/core/modules/fixview.svg'),
'core/modules/flowLight': () => import('./icons/core/modules/flowLight.svg'),
@@ -250,6 +256,7 @@ export const iconPaths = {
'core/workflow/template/formInput': () => import('./icons/core/workflow/template/formInput.svg'),
'core/workflow/template/getTime': () => import('./icons/core/workflow/template/getTime.svg'),
'core/workflow/template/google': () => import('./icons/core/workflow/template/google.svg'),
'core/workflow/template/searxng': () => import('./icons/core/workflow/template/searxng.svg'),
'core/workflow/template/httpRequest': () =>
import('./icons/core/workflow/template/httpRequest.svg'),
'core/workflow/template/ifelse': () => import('./icons/core/workflow/template/ifelse.svg'),

View File

@@ -0,0 +1 @@
<?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="1734408223570" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1236" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M512.00341333 19.34222222C239.90613333 19.34222222 19.34222222 239.90613333 19.34222222 512.00341333 19.34222222 784.09386667 239.90613333 1004.65777778 512.00341333 1004.65777778 784.09386667 1004.65777778 1004.65777778 784.09386667 1004.65777778 512.00341333 1004.65777778 239.90613333 784.09386667 19.34222222 512.00341333 19.34222222z m227.64088889 426.68259556c-0.98645333 4.28259555-3.54645333 10.63480889-7.09290667 18.21809777h0.09898667l-0.39480889 0.73728c-20.68821333 44.21404445-74.67349333 130.96732445-74.67349333 130.96732445l-0.24462222-0.59164445-15.76504889 27.47392h76.00355556L572.37390222 815.78666667l32.99783111-131.26314667h-59.84483555l20.7872-86.80106667c-16.7936 4.03911111-36.69674667 9.59829333-60.23964445 17.18044445 0 0-31.82023111 18.61404445-91.71285333-35.84 0 0-40.39224889-35.60106667-16.94264889-44.46208 9.94872889-3.7888 48.31687111-8.61639111 78.51121778-12.65436445 40.88035555-5.51253333 65.95128889-8.46620445 65.95128889-8.46620444s-125.84618667 1.86936889-155.69464889-2.80803556c-29.85187555-4.67626667-67.72622222-54.50524445-75.80558222-98.27783111 0 0-12.46208-24.02645333 26.84586666-12.65436444 39.30680889 11.37777778 201.99537778 44.31644445 201.99537778 44.31644444s-211.55043555-64.84423111-225.6896-80.70144c-14.08682667-15.75367111-41.42193778-86.35960889-37.87548444-129.68504889 0 0 1.52803555-10.83278222 12.66005333-7.88024888 0 0 156.43306667 71.39555555 263.36711111 110.53738666 106.98296889 39.14296889 199.97582222 59.0336 187.96088889 109.69770667z" fill="#3AA2EB" p-id="1237"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1 @@
<svg t="1733810815616" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8843" width="200" height="200"><path d="M816.512 399.317333c-42.965333 5.205333-105.6 32.341333-186.666667 127.658667L597.333333 499.328l32.512 27.648C559.36 609.834667 462.848 661.333333 362.666667 661.333333a42.666667 42.666667 0 1 1 0-85.333333c70.485333 0 144.64-36.650667 202.154666-104.32 89.6-105.344 170.154667-148.48 241.450667-157.098667 66.816-8.106667 117.845333 15.616 145.706667 28.586667l4.48 2.048a42.666667 42.666667 0 0 1 2.645333 76.245333c-41.045333 22.357333-55.552 64.853333-81.365333 141.226667-24.32 71.850667-56.576 161.706667-146.090667 237.824-107.946667 91.776-222.890667 117.162667-326.442667 116.821333-151.210667-0.469333-281.173333-74.88-347.008-129.066666A42.666667 42.666667 0 0 1 42.666667 755.328V362.666667a42.666667 42.666667 0 0 1 85.333333 0v371.882666c59.861333 44.458667 162.986667 97.109333 277.461333 97.450667 88.192 0.256 181.845333-20.778667 270.933334-96.512 70.485333-59.946667 96.853333-130.048 120.533333-200.149333l4.352-13.056c13.44-40.277333 28.288-84.906667 55.893333-122.026667a140.8 140.8 0 0 0-40.661333-0.938667z" p-id="8844"></path><path d="M120.490667 338.474667a42.666667 42.666667 0 1 0-70.314667 48.384l70.314667-48.384z m647.552 423.765333a42.666667 42.666667 0 1 0-42.752-73.813333L768 762.197333zM50.176 386.858667c61.696 89.685333 180.224 213.546667 310.058667 300.586666 65.024 43.562667 135.04 79.402667 204.032 96.170667 69.205333 16.853333 140.714667 15.146667 203.776-21.333333l-42.752-73.898667c-38.272 22.186667-85.461333 25.813333-140.885334 12.330667-55.68-13.568-116.352-43.733333-176.64-84.138667-120.832-80.981333-231.637333-197.12-287.274666-278.101333L50.176 386.858667z" p-id="8845"></path><path d="M208 132.864a42.666667 42.666667 0 0 1 39.338667-26.197333h341.333333a42.666667 42.666667 0 0 1 28.586667 10.965333c78.08 70.4 123.306667 180.906667 139.946666 231.68a42.666667 42.666667 0 1 1-81.066666 26.666667c-14.506667-44.16-50.048-128.256-104.576-183.978667H357.717333c25.045333 22.016 52.650667 46.506667 80.554667 73.344 63.36 61.013333 130.133333 135.978667 175.914667 227.584a42.666667 42.666667 0 0 1-76.373334 38.144c-39.509333-79.061333-98.432-146.218667-158.72-204.245333a2505.642667 2505.642667 0 0 0-87.893333-79.658667l-0.896-0.768c-27.050667-23.722667-52.906667-46.378667-73.344-67.114667a42.666667 42.666667 0 0 1-8.96-46.421333z" p-id="8846"></path></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,14 @@
<svg viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" fill="url(#paint0_linear_15107_494)"/>
<path d="M9.26643 19.4365C9.26399 19.439 9.26154 19.4439 9.25909 19.4463C9.35449 19.3387 9.45478 19.2262 9.55263 19.1161C9.36917 19.3216 9.26643 19.4365 9.26643 19.4365Z" fill="#1590E9"/>
<path d="M25.5403 10.9779L26.1665 10.6086C26.4209 10.4594 26.3891 10.0827 26.1152 9.97504L25.8143 9.85763C25.374 9.68395 24.9777 9.41244 24.672 9.05041C24.2879 8.59789 23.5786 7.94722 22.4485 7.56319C21.1594 7.12289 18.953 7.21095 17.7226 7.30635C17.3337 7.3357 17.1111 7.75643 17.297 8.10133C18.339 10.024 17.7055 10.8972 17.1576 11.543C16.3186 12.5312 14.7751 14.2875 13.2267 16.034C13.7624 15.4347 14.2492 14.8892 14.6479 14.4416C15.5382 13.4436 16.8812 12.9373 18.1972 13.177C22.3922 13.9426 22.8692 19.3754 17.9721 22.6091C18.6105 22.5749 19.2588 22.5284 19.9094 22.4624C26.0883 21.8264 26.5775 16.785 25.2419 14.2948C24.7674 13.4118 24.6989 12.815 24.7502 12.2426C24.7992 11.7167 25.0878 11.2446 25.5403 10.9779Z" fill="#99C236"/>
<path d="M8.8775 20.9189C9.56975 20.1459 11.4019 18.0936 13.2291 16.0316C11.8935 17.5286 10.2498 19.3754 8.8775 20.9189Z" fill="#1590E9"/>
<path d="M8.96316 22.2422C8.48617 22.1811 8.27336 21.616 8.58401 21.2491C7.31938 22.6752 6.34094 23.7808 6.15993 24.0034C5.57042 24.725 12.2189 26.3981 17.9648 22.614C17.9672 22.6116 17.9721 22.6091 17.9746 22.6067C14.1464 22.8073 10.673 22.4624 8.96316 22.2422Z" fill="#CAC134"/>
<path d="M18.1996 13.1745C16.8836 12.9348 15.5407 13.4411 14.6503 14.4391C14.2516 14.8843 13.7648 15.4298 13.2291 16.0316C11.4019 18.0936 9.56975 20.1459 8.87751 20.9189C8.77722 21.0314 8.67937 21.1415 8.58397 21.2491C8.27332 21.6136 8.48613 22.1786 8.96312 22.2422C10.6729 22.4623 14.1464 22.8072 17.9721 22.6091C22.8692 19.3729 22.3946 13.9401 18.1996 13.1745Z" fill="#029F40"/>
<defs>
<linearGradient id="paint0_linear_15107_494" x1="16" y1="0" x2="4.88889" y2="29.3333" gradientUnits="userSpaceOnUse">
<stop stop-color="#F2FFD2"/>
<stop offset="1" stop-color="#C6F6D9"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1 @@
<svg t="1733816460969" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13871" width="200" height="200"><path d="M903.542857 350.4c-11.314286-45.028571 11.314286-116.8 83.885714-142.171429l-77.6-4.114285s-29.371429-102.857143-164.114285-112c-134.628571-9.257143-222.742857-3.428571-222.857143-3.428572 0.114286 0 99.885714 63.542857 59.885714 176.8-29.257143 60-75.2 109.257143-124.342857 165.371429-1.485714 1.485714-2.857143 2.971429-4 4.228571C291.885714 618.285714 36.571429 909.714286 36.571429 909.714286c281.028571 73.6 469.371429-7.2 580.8-104.114286 23.428571-0.228571 41.028571-0.342857 52.914285-0.342857 155.2 0 286.4-134.4 281.028572-283.885714-3.657143-102.742857-36.457143-125.942857-47.771429-170.971429z m-233.257143 381.714286c-12.114286 0-29.942857 0.114286-53.485714 0.342857l-26.971429 0.228571-20.342857 17.714286c-53.828571 46.857143-119.314286 81.714286-195.885714 100.114286-60 14.4-125.714286 18.514286-197.371429 10.971428 20.571429-23.428571 41.714286-47.542857 63.314286-72.114285 105.142857-119.542857 198.628571-225.714286 270.742857-306.857143l1.6-1.6 1.485715-1.714286c4.685714-5.257143 23.542857-26.628571 28.228571-32.114286 11.085714-12.685714 19.771429-22.742857 28-32.685714 35.085714-41.942857 59.657143-77.485714 78.857143-116.8l1.828571-3.771429 1.371429-3.885714c15.657143-44.342857 17.6-87.885714 7.085714-128.914286 25.714286 0.8 53.142857 2.171429 81.942857 4.114286 38.057143 2.628571 63.428571 14.742857 81.257143 33.371429 6.628571 6.857143 11.657143 14.285714 15.314286 21.371428 1.142857 2.285714 1.942857 4.114286 2.628571 5.714286l5.714286 20.228571c-17.942857 39.428571-22.742857 83.771429-13.028571 122.514286 3.428571 13.485714 7.885714 25.6 14.057142 39.314286 2.4 5.371429 10.857143 22.971429 12.571429 26.628571 11.771429 25.942857 17.6 49.142857 19.085714 89.942857 3.771429 108.114286-94.514286 207.885714-208 207.885715z" p-id="13872"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="searxng.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
id="svg8"
version="1.1"
viewBox="0 0 225.86871 38.709602"
height="38.709602mm"
width="225.86871mm">
<defs
id="defs2" />
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="2149"
inkscape:window-x="-7"
inkscape:window-height="1346"
inkscape:window-width="2560"
fit-margin-bottom="0"
fit-margin-right="0"
fit-margin-left="0"
fit-margin-top="0"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="235.27775"
inkscape:cx="1236.8338"
inkscape:zoom="0.7"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-4.020089,-7.482607)"
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<g
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
transform="translate(-25.702381,-86.178571)"
style="font-style:normal;font-weight:normal;font-size:50.8px;line-height:1.25;font-family:sans-serif;fill:#487cff;fill-opacity:1;stroke:none;stroke-width:0.264583"
id="text884"
aria-label="SearXNG">
<path
id="path886"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.8px;font-family:'Libre Franklin';-inkscape-font-specification:'Libre Franklin';fill:#487cff;fill-opacity:1;stroke-width:0.264583"
d="m 56.494069,102.70358 q -1.1684,-1.2192 -3.047999,-2.032 -1.8796,-0.812802 -4.4196,-0.812802 -3.1496,0 -5.08,1.320802 -1.9304,1.27 -1.9304,3.4544 0,2.3368 3.7084,3.6068 l 7.6708,2.6416 q 3.962399,1.3208 5.841999,3.4036 1.8796,2.0828 1.8796,5.1308 0,4.064 -2.1844,7.0104 -2.1844,2.8956 -5.943599,4.4196 -3.7592,1.524 -8.4836,1.524 -5.334,0 -9.0424,-1.778 -3.7084,-1.8288 -5.5372,-5.1308 -0.2032,-0.3556 -0.2032,-0.7112 0,-0.3556 0.4064,-0.6096 l 4.0132,-2.4384 q 0.3556,-0.254 0.762,-0.254 0.6096,0 1.1176,0.6604 1.3208,1.6256 2.3876,2.54 1.1176,0.8636 2.6924,1.3208 1.6256,0.4572 4.1656,0.4572 3.2004,0 5.1816,-1.1684 1.9812,-1.2192 1.9812,-3.7592 0,-1.27 -0.9144,-2.0828 -0.9144,-0.8636 -2.9464,-1.5748 l -7.4168,-2.4892 q -3.6576,-1.2192 -5.588,-3.556 -1.8796,-2.3876 -1.8796,-5.4356 0,-3.7592 2.1336,-6.654802 2.1336,-2.8956 5.6896,-4.4704 3.6068,-1.5748 7.874,-1.5748 4.3688,0 7.670799,1.5748 3.3528,1.524 5.1816,3.9624 0.4064,0.508 0.4064,0.762 0,0.254002 -0.3556,0.457202 l -4.5212,2.9972 q -0.0508,0.0508 -0.2032,0.0508 -0.3048,0 -1.0668,-0.762 z" />
<path
id="path888"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.8px;font-family:'Libre Franklin';-inkscape-font-specification:'Libre Franklin';fill:#487cff;fill-opacity:1;stroke-width:0.264583"
d="m 77.003775,132.37078 q -3.6068,0 -6.4008,-1.4732 -2.794,-1.4732 -4.318,-4.1148 -1.524,-2.6924 -1.524,-6.1976 0,-4.1656 1.9812,-7.874 2.032,-3.7592 5.5372,-5.9944 3.556,-2.286 7.9248,-2.286 5.334,0 8.4836,3.1496 3.1496,3.1496 3.1496,8.6868 0,1.4732 -0.2032,2.8448 -0.1016,0.4064 -0.3556,0.6096 -0.2032,0.1524 -0.8128,0.1524 h -17.1196 q -0.8128,0 -0.8128,2.1844 0,2.3876 1.524,3.7084 1.5748,1.27 4.064,1.27 1.9304,0 3.6068,-0.8128 1.6764,-0.8128 3.302,-2.54 0.254,-0.254 0.508,-0.254 0.1524,0 0.6604,0.2032 l 3.3528,1.5748 q 0.6096,0.2032 0.6096,0.6604 0,0.254 -0.254,0.6604 -2.9464,3.302 -5.8928,4.572 -2.8956,1.27 -7.0104,1.27 z m 6.4516,-16.5608 q 1.2192,0 1.2192,-1.9812 0,-1.9304 -1.1684,-3.2512 -1.1684,-1.3716 -3.2512,-1.3716 -2.54,0 -4.5212,1.9304 -1.9304,1.8796 -2.2352,4.6736 z" />
<path
id="path890"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.8px;font-family:'Libre Franklin';-inkscape-font-specification:'Libre Franklin';fill:#487cff;fill-opacity:1;stroke-width:0.264583"
d="m 109.411,129.37358 q -3.048,2.9972 -8.3312,2.9972 -3.555996,0 -5.587996,-1.8288 -2.032,-1.8288 -2.032,-4.7752 0,-3.6068 2.3876,-5.8928 2.3876,-2.3368 5.994396,-3.3528 3.6576,-1.0668 7.5692,-1.1684 l 1.8288,-0.1524 q 0.9652,0 1.1176,-0.9652 l 0.1524,-1.0668 q 0.0508,-0.254 0.0508,-0.8128 0,-3.048 -3.5052,-3.048 -4.0132,0 -5.9436,3.1496 -0.254,0.3556 -0.6604,0.3556 -0.3048,0 -0.4572,-0.0508 l -4.927596,-1.1684 q -0.508,-0.1016 -0.508,-0.6604 0,-0.508 0.254,-1.016 3.352796,-5.4864 12.649196,-5.4864 5.4864,0 8.0264,1.9304 2.5908,1.9304 2.5908,5.334 0,0.4572 -0.1016,1.4732 l -2.54,17.78 q -0.0508,0.6604 -0.2032,0.8128 -0.1524,0.1016 -0.7112,0.1016 h -5.2324 q -0.508,0 -0.6604,-0.3048 -0.1524,-0.3048 -0.2032,-1.016 l 0.0508,-1.3208 q 0,-0.4064 -0.254,-0.4064 -0.254,0 -0.8128,0.5588 z m 2.1844,-9.7536 v -0.3048 q 0,-0.2032 -0.1016,-0.254 -0.1016,-0.1016 -0.4064,-0.0508 l -1.8288,0.1524 q -2.9464,0.2032 -5.4864,1.4732 -2.54,1.27 -2.54,3.9116 0,1.2192 0.8636,1.9812 0.9144,0.7112 2.4384,0.7112 1.3208,0 2.4892,-0.3556 1.1684,-0.4064 2.032,-1.0668 1.8796,-1.4224 2.0828,-2.8956 z" />
<path
id="path892"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.8px;font-family:'Libre Franklin';-inkscape-font-specification:'Libre Franklin';fill:#487cff;fill-opacity:1;stroke-width:0.264583"
d="m 123.8636,131.86278 q -0.6096,0 -0.9144,-0.3556 -0.254,-0.3556 -0.1524,-0.9144 l 3.5052,-24.9428 q 0.0508,-0.4572 0.1524,-0.5588 0.1524,-0.1524 0.5588,-0.1524 h 6.0452 q 0.9144,0 0.7112,1.0668 l -0.3556,2.286 v 0.2032 q 0,0.3556 0.2032,0.3556 0.1524,0 0.4572,-0.3048 1.778,-1.8796 3.9624,-2.9972 2.1844,-1.1176 3.9624,-1.1176 1.0668,0 1.5748,0.1524 0.508,0.1524 0.4572,0.6096 l -0.8128,5.6896 q -0.0508,0.5588 -0.2032,0.7112 -0.1016,0.1524 -0.4064,0.1016 -1.7272,-0.254 -3.4544,-0.254 -1.3208,0 -2.794,0.7112 -1.4732,0.6604 -2.54,1.778 -1.016,1.0668 -1.1684,2.1336 l -2.0828,14.8336 q -0.1016,0.6604 -0.3556,0.8128 -0.2032,0.1524 -0.9652,0.1524 z" />
<path
id="path894"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.8px;font-family:'Libre Franklin';-inkscape-font-specification:'Libre Franklin';fill:#487cff;fill-opacity:1;stroke-width:0.264583"
d="m 176.48129,130.08478 q 0.4572,0.8128 0.4572,1.2192 0,0.3048 -0.254,0.4572 -0.254,0.1016 -0.762,0.1016 h -7.0612 q -0.6096,0 -0.9652,-0.1524 -0.3048,-0.1524 -0.508,-0.6096 l -5.6388,-11.7348 q -0.254,-0.508 -0.508,-0.508 -0.1524,0 -0.5588,0.5588 l -9.0424,11.8364 q -0.254,0.4064 -0.6096,0.508 -0.3048,0.1016 -1.0668,0.1016 h -5.9436 q -1.016,0 -1.016,-0.6604 0,-0.4572 0.762,-1.524 l 13.0048,-16.3068 q 0.5588,-0.6096 0.5588,-1.0668 0,-0.3556 -0.1016,-0.5588 l -8.4836,-16.560802 q -0.1524,-0.254 -0.1524,-0.508 0,-0.508 0.762,-0.508 h 7.4168 q 0.6604,0 0.9144,0.1524 0.254,0.1524 0.508,0.6604 l 4.9276,10.363202 q 0.1524,0.4064 0.3556,0.4064 0.2032,0 0.508,-0.4064 l 8.0264,-10.566402 q 0.3048,-0.4064 0.5588,-0.508 0.3048,-0.1016 0.9652,-0.1016 h 6.5532 q 0.6096,0 0.6096,0.5588 0,0.4064 -0.3048,0.9144 l -12.5984,15.646402 q -0.508,0.6604 -0.508,0.9144 0,0.2032 0.1524,0.508 z" />
<path
id="path896"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.8px;font-family:'Libre Franklin';-inkscape-font-specification:'Libre Franklin';fill:#487cff;fill-opacity:1;stroke-width:0.264583"
d="m 218.11268,94.169178 q 0.3556,0 0.4572,0.2032 0.1016,0.1524 0.0508,0.5588 l -5.1308,36.372802 q -0.0508,0.3556 -0.254,0.4572 -0.1524,0.1016 -0.5588,0.1016 h -5.1816 q -0.6604,0 -1.1684,-0.8128 l -13.1064,-22.7076 q -0.1524,-0.254 -0.3048,-0.254 -0.3048,0 -0.3556,0.5588 l -3.1496,22.4028 q -0.1016,0.508 -0.3048,0.6604 -0.1524,0.1524 -0.7112,0.1524 h -5.588 q -0.8128,0 -0.7112,-1.1176 l 5.08,-35.814002 q 0.1016,-0.508 0.2032,-0.6096 0.1524,-0.1524 0.6604,-0.1524 h 6.1468 q 0.508,0 0.762,0.254 0.3048,0.2032 0.5588,0.7112 l 11.9888,21.183602 q 0.254,0.4064 0.508,0.4064 0.4064,0 0.4572,-0.6096 l 2.9464,-21.285202 q 0.0508,-0.4064 0.2032,-0.508 0.2032,-0.1524 0.6604,-0.1524 z" />
<path
id="path898"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.8px;font-family:'Libre Franklin';-inkscape-font-specification:'Libre Franklin';fill:#487cff;fill-opacity:1;stroke-width:0.264583"
d="m 236.43958,132.37078 q -4.572,0 -7.9248,-1.9304 -3.3528,-1.9304 -5.1308,-5.4356 -1.7272,-3.556 -1.7272,-8.3312 0,-6.2992 2.4892,-11.5316 2.4892,-5.283202 7.0612,-8.382002 4.572,-3.0988 10.5156,-3.0988 4.064,0 7.1628,1.5748 3.1496,1.5748 4.8768,4.1656 1.7272,2.540002 1.8288,5.435602 0,0.508 -0.1016,0.762 -0.0508,0.2032 -0.254,0.254 l -6.9596,1.016 h -0.0508 q -0.2032,0 -0.3556,-0.254 -0.1016,-0.254 -0.254,-1.016 -0.3556,-2.54 -1.9304,-4.1148 -1.524,-1.574802 -4.318,-1.574802 -3.6068,0 -5.9944,2.641602 -2.3368,2.6416 -3.4544,6.8072 -1.1176,4.1148 -1.1176,8.5852 0,4.3688 1.6256,6.2992 1.6764,1.8796 4.8768,1.8796 3.0988,0 5.2324,-1.7272 2.1336,-1.7272 3.1496,-4.2164 l 0.3048,-1.4224 q 0.1524,-0.254 0.1524,-0.3556 0,-0.3048 -0.6096,-0.3048 h -6.2484 q -0.3048,0 -0.4064,-0.1016 -0.1016,-0.1524 -0.0508,-0.5588 l 0.4572,-4.1656 q 0.0508,-0.5588 0.508,-0.5588 l 14.5288,0.0508 q 0.6096,0 0.762,0.2032 0.2032,0.1524 0.1016,0.6604 l -2.4892,17.5768 q -0.0508,0.6604 -0.8128,0.6604 h -1.524 q -0.4572,0 -0.7112,-0.1524 -0.2032,-0.1524 -0.3556,-0.6096 l -0.8636,-3.7084 q -0.0508,-0.254 -0.3556,-0.254 -0.3048,0 -0.6604,0.4064 -1.6764,2.0828 -4.3688,3.4544 -2.6924,1.3716 -6.604,1.3716 z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -1 +1 @@
<?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="1734061835557" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4251" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512.003 79C272.855 79 79 272.855 79 512.003 79 751.145 272.855 945 512.003 945 751.145 945 945 751.145 945 512.003 945 272.855 751.145 79 512.003 79z m200.075 375.014c-0.867 3.764-3.117 9.347-6.234 16.012h0.087l-0.347 0.648c-18.183 38.86-65.631 115.108-65.631 115.108l-0.215-0.52-13.856 24.147h66.8L565.063 779l29.002-115.368h-52.598l18.27-76.29c-14.76 3.55-32.253 8.436-52.945 15.1 0 0-27.967 16.36-80.607-31.5 0 0-35.501-31.29-14.891-39.078 8.744-3.33 42.466-7.573 69.004-11.122 35.93-4.845 57.965-7.441 57.965-7.441s-110.607 1.643-136.841-2.468c-26.237-4.11-59.525-47.905-66.626-86.377 0 0-10.953-21.117 23.595-11.122 34.547 10 177.535 38.95 177.535 38.95s-185.933-56.992-198.36-70.929c-12.381-13.846-36.406-75.902-33.289-113.981 0 0 1.343-9.521 11.127-6.926 0 0 137.49 62.75 231.475 97.152 94.028 34.403 175.76 51.885 165.2 96.414z" fill="#3AA2EB" p-id="4252"></path></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="1734061835557" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4251" xmlns:xlink="http://www.w3.org/1999/xlink" ><path d="M512.003 79C272.855 79 79 272.855 79 512.003 79 751.145 272.855 945 512.003 945 751.145 945 945 751.145 945 512.003 945 272.855 751.145 79 512.003 79z m200.075 375.014c-0.867 3.764-3.117 9.347-6.234 16.012h0.087l-0.347 0.648c-18.183 38.86-65.631 115.108-65.631 115.108l-0.215-0.52-13.856 24.147h66.8L565.063 779l29.002-115.368h-52.598l18.27-76.29c-14.76 3.55-32.253 8.436-52.945 15.1 0 0-27.967 16.36-80.607-31.5 0 0-35.501-31.29-14.891-39.078 8.744-3.33 42.466-7.573 69.004-11.122 35.93-4.845 57.965-7.441 57.965-7.441s-110.607 1.643-136.841-2.468c-26.237-4.11-59.525-47.905-66.626-86.377 0 0-10.953-21.117 23.595-11.122 34.547 10 177.535 38.95 177.535 38.95s-185.933-56.992-198.36-70.929c-12.381-13.846-36.406-75.902-33.289-113.981 0 0 1.343-9.521 11.127-6.926 0 0 137.49 62.75 231.475 97.152 94.028 34.403 175.76 51.885 165.2 96.414z" fill="#3AA2EB" p-id="4252"></path></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -50,6 +50,8 @@ const MyModal = ({
autoFocus={false}
isCentered={isPc ? isCentered : true}
blockScrollOnMount={false}
allowPinchZoom
scrollBehavior={'inside'}
closeOnOverlayClick={closeOnOverlayClick}
>
<ModalOverlay />

View File

@@ -82,6 +82,7 @@
"month.unit": "Day",
"move.hint": "After moving, the selected application/folder will inherit the permission settings of the new folder, and the original permission settings will become invalid.",
"move_app": "Move Application",
"node_not_intro": "This node is not introduced",
"not_json_file": "Please select a JSON file",
"open_auto_execute": "Enable automatic execution",
"open_vision_function_tip": "Models with icon switches have image recognition capabilities. \nAfter being turned on, the model will parse the pictures in the file link and automatically parse the pictures in the user's question (user question ≤ 500 words).",

View File

@@ -33,6 +33,7 @@
"multiple_AI_conversations": "Multiple AI Conversations",
"new_input_guide_lexicon": "New Lexicon",
"no_workflow_response": "No workflow data",
"not_query": "Missing query content",
"not_select_file": "No file selected",
"plugins_output": "Plugin Output",
"question_tip": "From top to bottom, the response order of each module",

View File

@@ -841,7 +841,6 @@
"dataset.Create Folder": "Create Folder",
"dataset.Create manual collection": "Create Manual Dataset",
"dataset.Delete Dataset Error": "Delete Dataset Error",
"dataset.Edit API Service": "Edit API Service",
"dataset.Edit Folder": "Edit Folder",
"dataset.Edit Info": "Edit Information",
"dataset.Export": "Export",

View File

@@ -25,6 +25,7 @@
"dataset.Unsupported operation": "dataset.Unsupported operation",
"dataset.no_collections": "No datasets available",
"dataset.no_tags": "No tags available",
"edit_dataset_config": "Edit knowledge base configuration",
"error.collectionNotFound": "Collection not found~",
"external_file": "External File Library",
"external_file_dataset_desc": "Import files from an external file library to build a Dataset. The files will not be stored again.",
@@ -32,6 +33,9 @@
"external_read_url": "External Preview URL",
"external_read_url_tip": "Configure the reading URL of your file library for user authentication. Use the {{fileId}} variable to refer to the external file ID.",
"external_url": "File Access URL",
"feishu_dataset": "Feishu Dataset",
"feishu_dataset_config": "Feishu Dataset Config",
"feishu_dataset_desc": "Can build a dataset using Feishu documents by configuring permissions, without secondary storage",
"file_model_function_tip": "Enhances indexing and QA generation",
"filename": "Filename",
"folder_dataset": "Folder",
@@ -69,5 +73,8 @@
"training_mode": "Chunk mode",
"vector_model_max_tokens_tip": "Each chunk of data has a maximum length of 3000 tokens",
"website_dataset": "Website Sync",
"website_dataset_desc": "Website sync allows you to build a Dataset directly using a web link."
"website_dataset_desc": "Website sync allows you to build a Dataset directly using a web link.",
"yuque_dataset": "Yuque Dataset",
"yuque_dataset_config": "Yuque Dataset Config",
"yuque_dataset_desc": "Can build a dataset using Yuque documents by configuring permissions, without secondary storage"
}

View File

@@ -35,5 +35,11 @@
"wecom.bot_desc": "Connect to WeCom Bot directly via API",
"wecom.create_modal_title": "Create WeCom Bot",
"wecom.edit_modal_title": "Edit WeCom Bot",
"wecom.title": "Publish to WeCom Bot"
}
"wecom.title": "Publish to WeCom Bot",
"dingtalk.bot": "DingTalk Bot",
"dingtalk.bot_desc": "Connect to DingTalk Bot directly via API",
"dingtalk.create_modal_title": "Create DingTalk Bot",
"dingtalk.edit_modal_title": "Edit DingTalk Bot",
"dingtalk.title": "Publish to DingTalk Bot",
"dingtalk.api": "DingTalk API"
}

View File

@@ -26,6 +26,7 @@
"login.error": "Login Error",
"login.password_condition": "Password can be up to 60 characters",
"login.success": "Login Successful",
"login.Dingtalk": "DingTalk Login",
"manage_team": "Manage team",
"name": "Name",
"notification.Bind Notification Pipe Hint": "Please bind a notification receiving account to ensure you receive notifications such as plan expiration reminders, ensuring your service runs smoothly.",
@@ -114,6 +115,7 @@
"team.no_collaborators": "No Collaborators",
"team.write_role_member": "",
"usage.feishu": "Feishu",
"usage.dingtalk": "DingTalk",
"usage.official_account": "Official Account",
"usage.share": "Share Link",
"usage.wecom": "WeCom"

View File

@@ -57,6 +57,7 @@
"field_required": "Required",
"field_used_as_tool_input": "Used as Tool Call Parameter",
"filter_description": "Currently supports filtering by tags and creation time. Fill in the format as follows:\n{\n \"tags\": {\n \"$and\": [\"Tag 1\",\"Tag 2\"],\n \"$or\": [\"When there are $and tags, and is effective, or is not effective\"]\n },\n \"createTime\": {\n \"$gte\": \"YYYY-MM-DD HH:mm format, collection creation time greater than this time\",\n \"$lte\": \"YYYY-MM-DD HH:mm format, collection creation time less than this time, can be used with $gte\"\n }\n}",
"foldAll": "Collapse all",
"form_input_result": "User complete input result",
"form_input_result_tip": "an object containing the complete result",
"full_field_extraction": "Full Field Extraction",
@@ -179,6 +180,7 @@
"tool_params.params_name_placeholder": "name/age/sql",
"tool_params.tool_params_result": "Parameter configuration results",
"trigger_after_application_completion": "Will be triggered after the application is fully completed",
"unFoldAll": "Expand all",
"update_link_error": "Error updating link",
"update_specified_node_output_or_global_variable": "Can update the output value of a specified node or update global variables",
"use_user_id": "User ID",

View File

@@ -82,6 +82,7 @@
"month.unit": "号",
"move.hint": "移动后,所选应用/文件夹将继承新文件夹的权限设置,原先的权限设置失效。",
"move_app": "移动应用",
"node_not_intro": "这个节点没有介绍",
"not_json_file": "请选择JSON文件",
"open_auto_execute": "启用自动执行",
"open_vision_function_tip": "有图示开关的模型即拥有图片识别能力。若开启模型会解析文件链接里的图片并自动解析用户问题中的图片用户问题≤500字时生效。",

View File

@@ -33,6 +33,7 @@
"multiple_AI_conversations": "多组 AI 对话",
"new_input_guide_lexicon": "新词库",
"no_workflow_response": "没有运行数据",
"not_query": "缺少查询内容",
"not_select_file": "未选择文件",
"plugins_output": "插件输出",
"question_tip": "从上到下,为各个模块的响应顺序",

View File

@@ -840,7 +840,6 @@
"dataset.Create Folder": "创建文件夹",
"dataset.Create manual collection": "创建手动数据集",
"dataset.Delete Dataset Error": "删除知识库异常",
"dataset.Edit API Service": "编辑 API 文件接口",
"dataset.Edit Folder": "编辑文件夹",
"dataset.Edit Info": "编辑信息",
"dataset.Export": "导出",

View File

@@ -25,6 +25,7 @@
"dataset.Unsupported operation": "操作不支持",
"dataset.no_collections": "暂无数据集",
"dataset.no_tags": "暂无标签",
"edit_dataset_config": "编辑知识库配置",
"error.collectionNotFound": "集合找不到了~",
"external_file": "外部文件库",
"external_file_dataset_desc": "可以从外部文件库导入文件构建知识库,文件不会进行二次存储",
@@ -32,6 +33,9 @@
"external_read_url": "外部预览地址",
"external_read_url_tip": "可以配置你文件库的阅读地址。便于对用户进行阅读鉴权操作。目前可以使用 {{fileId}} 变量来指代外部文件 ID。",
"external_url": "文件访问 URL",
"feishu_dataset": "飞书知识库",
"feishu_dataset_config": "配置飞书知识库",
"feishu_dataset_desc": "可通过配置飞书文档权限,使用飞书文档构建知识库,文档不会进行二次存储",
"file_model_function_tip": "用于增强索引和 QA 生成",
"filename": "文件名",
"folder_dataset": "文件夹",
@@ -69,5 +73,8 @@
"training_mode": "处理方式",
"vector_model_max_tokens_tip": "每个分块数据,最大长度为 3000 tokens",
"website_dataset": "Web 站点同步",
"website_dataset_desc": "Web 站点同步允许你直接使用一个网页链接构建知识库"
"website_dataset_desc": "Web 站点同步允许你直接使用一个网页链接构建知识库",
"yuque_dataset": "语雀知识库",
"yuque_dataset_config": "配置语雀知识库",
"yuque_dataset_desc": "可通过配置语雀文档权限,使用语雀文档构建知识库,文档不会进行二次存储"
}

View File

@@ -35,5 +35,11 @@
"wecom.bot_desc": "通过 API 直接接入企业微信机器人",
"wecom.create_modal_title": "创建企微机器人",
"wecom.edit_modal_title": "编辑企微机器人",
"wecom.title": "发布到企业微信机器人"
}
"wecom.title": "发布到企业微信机器人",
"dingtalk.bot": "钉钉机器人",
"dingtalk.bot_desc": "通过 API 直接接入钉钉机器人",
"dingtalk.create_modal_title": "创建钉钉机器人",
"dingtalk.edit_modal_title": "编辑钉钉机器人",
"dingtalk.title": "发布到钉钉机器人",
"dingtalk.api": "钉钉 API"
}

View File

@@ -26,6 +26,7 @@
"login.error": "登录异常",
"login.password_condition": "密码最多 60 位",
"login.success": "登录成功",
"login.Dingtalk": "钉钉登录",
"manage_team": "管理团队",
"name": "名称",
"notification.Bind Notification Pipe Hint": "请绑定通知接收账号,以确保您能正常接收套餐过期提醒等通知,保障您的服务正常运行。",
@@ -114,6 +115,7 @@
"team.no_collaborators": "暂无协作者",
"team.write_role_member": "可写权限",
"usage.feishu": "飞书",
"usage.dingtalk": "钉钉",
"usage.official_account": "公众号",
"usage.share": "分享链接",
"usage.wecom": "企业微信"

View File

@@ -10,7 +10,6 @@
"Variable_name": "变量名",
"add_new_input": "新增输入",
"add_new_output": "新增输出",
"http_body_placeholder": "与 APIFox 类似的语法,可通过 / 来激活变量选择。字符串变量均需加双引号,其他类型变量无需加双引号。请严格检查是否符合 JSON 格式。",
"append_application_reply_to_history_as_new_context": "将该应用回复内容拼接到历史记录中,作为新的上下文返回",
"application_call": "应用调用",
"assigned_reply": "指定回复",
@@ -58,6 +57,7 @@
"field_required": "必填",
"field_used_as_tool_input": "作为工具调用参数",
"filter_description": "目前支持标签和创建时间过滤,需按照以下格式填写:\n{\n \"tags\": {\n \"$and\": [\"标签 1\",\"标签 2\"],\n \"$or\": [\"有 $and 标签时and 生效or 不生效\"]\n },\n \"createTime\": {\n \"$gte\": \"YYYY-MM-DD HH:mm 格式即可,集合的创建时间大于该时间\",\n \"$lte\": \"YYYY-MM-DD HH:mm 格式即可,集合的创建时间小于该时间,可和 $gte 共同使用\"\n }\n}",
"foldAll": "全部折叠",
"form_input_result": "用户完整输入结果",
"form_input_result_tip": "一个包含完整结果的对象",
"full_field_extraction": "字段完全提取",
@@ -65,6 +65,7 @@
"full_response_data": "完整响应数据",
"greater_than": "大于",
"greater_than_or_equal_to": "大于等于",
"http_body_placeholder": "与 APIFox 类似的语法,可通过 / 来激活变量选择。字符串变量均需加双引号,其他类型变量无需加双引号。请严格检查是否符合 JSON 格式。",
"http_extract_output": "输出字段提取",
"http_extract_output_description": "可以通过 JSONPath 语法来提取响应值中的指定字段",
"http_raw_response_description": "HTTP请求的原始响应。只能接受字符串或JSON类型响应数据。",
@@ -179,6 +180,7 @@
"tool_params.params_name_placeholder": "name/age/sql",
"tool_params.tool_params_result": "参数配置结果",
"trigger_after_application_completion": "将在应用完全结束后触发",
"unFoldAll": "全部展开",
"update_link_error": "更新链接异常",
"update_specified_node_output_or_global_variable": "可以更新指定节点的输出值或更新全局变量",
"use_user_id": "使用者 ID",

View File

@@ -82,6 +82,7 @@
"month.unit": "號",
"move.hint": "移動後,所選應用程式/資料夾將會繼承新資料夾的權限設定,原先的權限設定將會失效。",
"move_app": "移動應用程式",
"node_not_intro": "這個節點沒有介紹",
"not_json_file": "請選擇 JSON 檔案",
"open_auto_execute": "啟用自動執行",
"open_vision_function_tip": "有圖示開關的模型即擁有圖片辨識功能。若開啟,模型會解析檔案連結中的圖片,並自動解析使用者問題中的圖片(使用者問題 ≤ 500 字時生效)。",

View File

@@ -33,6 +33,7 @@
"multiple_AI_conversations": "多組 AI 對話",
"new_input_guide_lexicon": "新增詞彙庫",
"no_workflow_response": "無工作流程資料",
"not_query": "缺少查詢內容",
"not_select_file": "尚未選取檔案",
"plugins_output": "外掛程式輸出",
"question_tip": "由上至下,各個模組的回應順序",

View File

@@ -25,6 +25,7 @@
"dataset.Unsupported operation": "操作不支持",
"dataset.no_collections": "尚無資料集",
"dataset.no_tags": "尚無標籤",
"edit_dataset_config": "編輯知識庫配置",
"error.collectionNotFound": "找不到集合",
"external_file": "外部檔案庫",
"external_file_dataset_desc": "可以從外部檔案庫匯入檔案建立資料集,檔案不會進行二次儲存",
@@ -32,6 +33,9 @@
"external_read_url": "外部預覽網址",
"external_read_url_tip": "可以設定您檔案庫的讀取網址,方便對使用者進行讀取權限驗證。目前可使用 {{fileId}} 變數來代表外部檔案識別碼。",
"external_url": "檔案存取網址",
"feishu_dataset": "飛書知識庫",
"feishu_dataset_config": "配置飛書知識庫",
"feishu_dataset_desc": "可通過配置飛書文檔權限,使用飛書文檔構建知識庫,文檔不會進行二次存儲",
"file_model_function_tip": "用於增強索引和問答生成",
"filename": "檔案名稱",
"folder_dataset": "資料夾",
@@ -69,5 +73,8 @@
"training_mode": "分段模式",
"vector_model_max_tokens_tip": "每個分塊數據,最大長度為 3000 tokens",
"website_dataset": "網站同步",
"website_dataset_desc": "網站同步功能讓您可以直接使用網頁連結建立資料集"
"website_dataset_desc": "網站同步功能讓您可以直接使用網頁連結建立資料集",
"yuque_dataset": "語雀知識庫",
"yuque_dataset_config": "配置語雀知識庫",
"yuque_dataset_desc": "可通過配置語雀文檔權限,使用語雀文檔構建知識庫,文檔不會進行二次存儲"
}

View File

@@ -35,5 +35,11 @@
"wecom.bot_desc": "透過 API 直接連結企業微信聊天機器人",
"wecom.create_modal_title": "建立企業微信聊天機器人",
"wecom.edit_modal_title": "編輯企業微信聊天機器人",
"wecom.title": "發布至企業微信聊天機器人"
}
"wecom.title": "發布至企業微信聊天機器人",
"dingtalk.bot": "釘釘聊天機器人",
"dingtalk.bot_desc": "透過 API 直接連結釘釘聊天機器人",
"dingtalk.create_modal_title": "建立釘釘聊天機器人",
"dingtalk.edit_modal_title": "編輯釘釘聊天機器人",
"dingtalk.title": "發布至釘釘聊天機器人",
"dingtalk.api": "釘釘 API"
}

Some files were not shown because too many files have changed in this diff Show More