Compare commits

...

1039 Commits

Author SHA1 Message Date
heheer
686b09afd1 chatbot not overflow (#3777)
* chatbot not overflow

* add comment
2025-02-13 15:10:22 +08:00
heheer
3cfec37e9d fix embed chatbot default open (#3774) 2025-02-13 13:36:56 +08:00
Archer
d3641c877c perf: unlogin user fetch data (#3775)
* model config

* feat: normalization embedding

* perf: unlogin user fetch data
2025-02-13 13:36:33 +08:00
Archer
1094c65f2b perf: http empty params (#3773)
* model config

* feat: normalization embedding

* perf: http empty params

* doc
2025-02-13 10:35:11 +08:00
Archer
abe082b9ab i18n perf (#3770)
* model config

* feat: normalization embedding

* perf: mark ui

* perf: i18n

* fix: rerank error tip
2025-02-12 16:36:21 +08:00
heheer
132cf69372 optimize dnd drag code (#3768) 2025-02-12 15:25:31 +08:00
heheer
06a8a5e23d fix: simple mode variables dnd (#3767)
* fix: simple mode variables dnd

* optimize dnd drag
2025-02-12 14:36:04 +08:00
heheer
c42deab63b global variable & interactive node dnd (#3764) 2025-02-12 12:27:36 +08:00
Archer
58f715e878 perf: request quantity;perf: share page error circulation;perf: share chat toast (#3763)
* model config

* feat: normalization embedding

* perf: share page error circulation

* perf: request quantity

* perf: share chat toast

* perf: queue
2025-02-12 11:36:29 +08:00
Archer
116936ffa9 更新 share.md (#3757) 2025-02-11 23:54:42 +08:00
heheer
f5d045eece export csv format & log title debounce (#3754) 2025-02-11 17:36:00 +08:00
sbcyk
8ac6494e60 Update chat.md (#3746)
示例代码的json内容少了一个引号
2025-02-11 17:31:30 +08:00
heheer
f002896a24 chat logs filter & export (#3737)
* chat logs filter & export

* export chat detail
2025-02-11 16:32:47 +08:00
Archer
8738c32fb0 4.8.21 feature (#3742)
* model config

* feat: normalization embedding

* adapt unstrea  reasoning response

* remove select app

* perf: dataset search code

* fix: multiple audio video show

* perf: query extension output

* perf: link check

* perf: faq doc

* fix: ts

* feat: support reasoning text output

* feat: workflow support reasoning output
2025-02-11 13:53:08 +08:00
heheer
896a3f1472 add plugin unexist error tips (#3717)
* add plugin unexist error tips

* throw error when run plugin

* check workflow

* plugin data avoid request twice

* auth owner tmbId

* fix
2025-02-10 15:20:49 +08:00
John Chen
4284b78707 Update configuration.md (#3725)
由于4.8.20版本放弃在config.json中配置模型,在说明文档中,修正二级标题的版本号,并添加注释
2025-02-10 09:13:17 +08:00
Archer
fac5b6b50d 更新 4820.md (#3730) 2025-02-09 10:06:08 +08:00
Archer
51e17a47fa feat: normalization embedding;feat: model top_p param config (#3723)
* edit form force close image select

* model config

* feat: normalization embedding

* perf: add share page title force refresh
2025-02-08 12:16:46 +08:00
Archer
42b2046f96 4.8.21 feature (#3720)
* agent search demo

* edit form force close image select

* feat: llm params and doubao1.5

* perf: model error tip

* fix: template register path

* package
2025-02-08 10:44:33 +08:00
heheer
bb82b515e0 feat: auto adapt outlink chatwindow position (#3707) 2025-02-08 09:49:41 +08:00
clidxhk
fe688cdf2d Update utils.ts (#3699)
本地windows平台开发,加载model列表出现两次盘符导致加载失败,修改代码确保生成的路径不会包含重复的盘符,从而避免 ENOENT 错误。
2025-02-07 09:52:08 +08:00
Archer
0d35326909 fix: yml (#3709) 2025-02-06 16:03:45 +08:00
Archer
d857a391b3 4.8.20 update (#3706)
* fix: rerank auth token

* feat: check null value

* bind notify

* perf: reasoning config

* Adapt mongo 4.x index
2025-02-06 14:34:43 +08:00
Archer
772c1cde77 remove log (#3692) 2025-02-05 11:17:38 +08:00
Archer
b6e441c5eb fix: replace img host (#3691) 2025-02-05 10:21:35 +08:00
Archer
ac95828660 update doc (#3690) 2025-02-05 10:01:57 +08:00
Archer
f252918228 model config doc (#3689) 2025-02-05 09:52:03 +08:00
Archer
5c360b5ae6 doc (#3688) 2025-02-05 01:34:10 +08:00
Archer
09fa602dde readme (#3687)
* fix: doc deploy

* readme
2025-02-05 00:26:24 +08:00
Archer
db2c0a0bdb V4.8.20 feature (#3686)
* Aiproxy (#3649)

* model config

* feat: model config ui

* perf: rename variable

* feat: custom request url

* perf: model buffer

* perf: init model

* feat: json model config

* auto login

* fix: ts

* update packages

* package

* fix: dockerfile

* feat: usage filter & export & dashbord (#3538)

* feat: usage filter & export & dashbord

* adjust ui

* fix tmb scroll

* fix code & selecte all

* merge

* perf: usages list;perf: move components (#3654)

* perf: usages list

* team sub plan load

* perf: usage dashboard code

* perf: dashboard ui

* perf: move components

* add default model config (#3653)

* 4.8.20 test (#3656)

* provider

* perf: model config

* model perf (#3657)

* fix: model

* dataset quote

* perf: model config

* model tag

* doubao model config

* perf: config model

* feat: model test

* fix: POST 500 error on dingtalk bot (#3655)

* feat: default model (#3662)

* move model config

* feat: default model

* fix: false triggerd org selection (#3661)

* export usage csv i18n (#3660)

* export usage csv i18n

* fix build

* feat: markdown extension (#3663)

* feat: markdown extension

* media cros

* rerank test

* default price

* perf: default model

* fix: cannot custom provider

* fix: default model select

* update bg

* perf: default model selector

* fix: usage export

* i18n

* fix: rerank

* update init extension

* perf: ip limit check

* doubao model order

* web default modle

* perf: tts selector

* perf: tts error

* qrcode package

* reload buffer (#3665)

* reload buffer

* reload buffer

* tts selector

* fix: err tip (#3666)

* fix: err tip

* perf: training queue

* doc

* fix interactive edge (#3659)

* fix interactive edge

* fix

* comment

* add gemini model

* fix: chat model select

* perf: supplement assistant empty response (#3669)

* perf: supplement assistant empty response

* check array

* perf: max_token count;feat: support resoner output;fix: member scroll (#3681)

* perf: supplement assistant empty response

* check array

* perf: max_token count

* feat: support resoner output

* member scroll

* update provider order

* i18n

* fix: stream response (#3682)

* perf: supplement assistant empty response

* check array

* fix: stream response

* fix: model config cannot set to null

* fix: reasoning response (#3684)

* perf: supplement assistant empty response

* check array

* fix: reasoning response

* fix: reasoning response

* doc (#3685)

* perf: supplement assistant empty response

* check array

* doc

* lock

* animation

* update doc

* update compose

* doc

* doc

---------

Co-authored-by: heheer <heheer@sealos.io>
Co-authored-by: a.e. <49438478+I-Info@users.noreply.github.com>
2025-02-05 00:10:47 +08:00
Ge
c393002f1d feat: support mssql in databaseConnection plugin (#3674)
* feat: support mssql in databaseConnection plugin

* feat: trust server certificate for mssql
2025-02-01 10:53:20 +08:00
Archer
16629e32a7 4819 doc (#3646) 2025-01-22 10:01:09 +08:00
a.e.
d67474170a fix: permission conflict after moving (#3639) 2025-01-21 22:35:10 +08:00
Yee
e02a7ab350 chore: add intern and moka provider (#3640)
* chore: add intern and moka provider

* fix: svg show issue
2025-01-21 22:32:49 +08:00
heheer
d491105752 fix model provider icon (#3644) 2025-01-21 22:31:52 +08:00
shilin
fe59eadcee fix: 数字输入框无法输入0 (#3641) 2025-01-21 18:56:57 +08:00
Archer
946bd20dbf fix: loal file api error (#3637)
* update doc

* fix: loal file api error

* fix: number input import

* feat: icon load
2025-01-21 16:46:49 +08:00
Archer
3c97757e4d 4.8.19-feature (#3636)
* feat: sync org from wecom, pref: member list pagination (#3549)

* feat: sync org

* chore: fe

* chore: loading

* chore: type

* pref: team member list change to pagination. Edit a sort of list apis.

* feat: member update avatar

* chore: user avatar move to tmb

* chore: init scripts move user avatar

* chore: sourceMember

* fix: list api sourceMember

* fix: member sync

* fix: pagination

* chore: adjust code

* chore: move changeOwner to pro

* chore: init v4819 script

* chore: adjust code

* chore: UserBox

* perf: scroll page code

* perf: list data

* docs:更新用户答疑 (#3576)

* docs: add custom uid docs (#3572)

* fix: pagination bug (#3577)

* 4.8.19 test (#3584)

* faet: dataset search filter

* fix: scroll page

* fix: collection list api old version (#3591)

* fix: collection list api format

* fix: type error of addSourceMemeber

* fix: scroll fetch (#3592)

* fix: yuque dataset file folder can enter (#3593)

* perf: load members;perf: yuque load;fix: workflow llm params cannot close (#3594)

* chat openapi doc

* feat: dataset openapi doc

* perf: load members

* perf: member load code

* perf: yuque load

* fix: workflow llm params cannot close

* fix: api dataset reference tag preview (#3600)

* perf: doc

* feat: chat page config

* fix: http parse (#3634)

* update doc

* fix: http parse

* fix code run node reset template (#3633)

Co-authored-by: Archer <545436317@qq.com>

* docs:faq (#3627)

* docs:faq

* docsFix

* perf: sleep plugin

* fix: selector

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
Co-authored-by: heheer <heheer@sealos.io>
2025-01-20 19:42:33 +08:00
shilin
9f33729ca9 feat(core): 添加 sleep 插件 (#3583)
(cherry picked from commit 09bdc63977)
2025-01-20 18:31:47 +08:00
Archer
a8d456f448 Update docker.md (#3599) 2025-01-15 13:16:57 +08:00
Archer
59177d307e fix: http (#3596) 2025-01-15 12:09:12 +08:00
Archer
bfb598d686 doc (#3590) 2025-01-14 17:43:05 +08:00
heheer
b780fbd6a7 fix lexical editor space (#3586)
* fix lexical editor space

* delete console
2025-01-14 17:24:16 +08:00
Archer
7861229325 4.8.18 test (#3589)
* update doc

* add subpath
2025-01-14 17:10:58 +08:00
Archer
5b0516c28b update doc (#3588) 2025-01-14 16:59:59 +08:00
Archer
740e8eb30c update doc (#3587) 2025-01-14 16:53:52 +08:00
Archer
05a357dffe fix: http variable (#3585) 2025-01-14 13:45:45 +08:00
Archer
781fd45e39 update doc (#3581) 2025-01-14 09:57:26 +08:00
Archer
80c8897e10 fix: create plugin by curl (#3580) 2025-01-13 18:27:31 +08:00
heheer
e933dacb05 curl create plugin with inputs (#3573) 2025-01-13 17:37:27 +08:00
Archer
cdf4f0e67d faq (#3574) 2025-01-13 14:08:35 +08:00
Archer
4dfeb21da3 4.8.18 test (#3571)
* rename

* update doc

* doc

* doc

* perf: intro
2025-01-13 10:43:38 +08:00
Archer
d0d1a2cae8 perf: http body;perf: create by json;perf: create by curl (#3570)
* perf: http body

* feat: create app by json (#3557)

* feat: create app by json

* fix build

* perf: create by json;perf: create by curl

* fix: ts

---------

Co-authored-by: heheer <heheer@sealos.io>
2025-01-12 22:49:03 +08:00
Archer
f1f0ae2839 fix: per;fix: invite user un refresh;perf: loginout (#3566)
* perf: loginout

* fix: invite user un refresh

* fix: per

* fix: dockerfile

* perf: docker file
2025-01-11 17:16:17 +08:00
Archer
10d8c56e23 V4.8.18 feature (#3565)
* feat: org CRUD (#3380)

* feat: add org schema

* feat: org manage UI

* feat: OrgInfoModal

* feat: org tree view

* feat: org management

* fix: init root org

* feat: org permission for app

* feat: org support for dataset

* fix: disable org role control

* styles: opt type signatures

* fix: remove unused permission

* feat: delete org collaborator

* perf: Team org ui (#3499)

* perf: org ui

* perf: org ui

* feat: org auth for app & dataset (#3498)

* feat: auth org resource permission

* feat: org auth support for app & dataset

* perf: org permission check (#3500)

* i18n (#3501)

* name

* i18n

* feat: support dataset changeOwner (#3483)

* feat: support dataset changeOwner

* chore: update dataset change owner api

* feat: permission manage UI for org (#3503)

* perf: password check;perf: image upload check;perf: sso login check (#3509)

* perf: password check

* perf: image upload check

* perf: sso login check

* force show update notification modal & fix login page text (#3512)

* fix login page English text

* update notification modal

* perf: notify account (#3515)

* perf(plugin): improve searXNG empty result handling and documentation (#3507)

* perf(plugin): improve searXNG empty result handling and documentation

* 修改了文档和代码部分无搜索的结果的反馈

* refactor: org pathId (#3516)

* optimize payment process (#3517)

* feat: support wecom sso (#3518)

* feat: support wecom sso

* chore: remove unused wecom js-sdk dependency

* fix qrcode script (#3520)

* fix qrcode script

* i18n

* perf: full text collection and search code;perf: rename function (#3519)

* perf: full text collection and search code

* perf: rename function

* perf: notify modal

* remove invalid code

* perf: sso login

* perf: pay process

* 4.8.18 test (#3524)

* perf: remove local token

* perf: index

* perf: file encoding;perf: leave team code;@c121914yu perf: full text search code (#3528)

* perf: text encoding

* perf: leave team code

* perf: full text search code

* fix: http status

* perf: embedding search and vector avatar

* perf: async read file (#3531)

* refactor: team permission  manager (#3535)

* perf: classify org, group and member

* refactor: team per manager

* fix: missing functions

* 4.8.18 test (#3543)

* perf: login check

* doc

* perf: llm model config

* perf: team clb config

* fix: MemberModal UI (#3553)

* fix: adapt MemberModal title and icon

* fix: adapt member modal

* fix: search input placeholder

* fix: add button text

* perf: org permission (#3556)

* docs:用户答疑的官方文档补充 (#3540)

* docs:用户答疑的官方文档补充

* 问题回答的内容修补

* share link random avatar (#3541)

* share link random avatar

* fix

* delete unused code

* share page avatar (#3558)

* feat: init 4818

* share page avatar

* feat: tmp upgrade code (#3559)

* feat: tmp upgrade code

* fulltext search test

* update action

* full text tmp code (#3561)

* full text tmp code

* fix: init

* fix: init

* remove tmp code

* remove tmp code

* 4818-alpha

* 4.8.18 test (#3562)

* full text tmp code

* fix: init

* upgrade code

* account log

* account log

* perf: dockerfile

* upgrade code

* chore: update docs app template submission (#3564)

---------

Co-authored-by: a.e. <49438478+I-Info@users.noreply.github.com>
Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
Co-authored-by: heheer <heheer@sealos.io>
Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
2025-01-11 15:15:38 +08:00
Archer
bb669ca3ff fix: plugin cost (#3533) 2025-01-06 12:43:04 +08:00
Archer
72ed72e595 fix: charts plugins (#3530) 2025-01-05 14:41:34 +08:00
Archer
e5735fddd1 Update 4817.md (#3523) 2025-01-03 16:39:55 +08:00
Archer
fa92ef86b9 fix: system title (#3522) 2025-01-03 15:30:46 +08:00
Archer
f39ea04178 feat: new provider (#3513) 2025-01-02 15:38:06 +08:00
Archer
bd4893ced9 更新 README.md (#3511) 2025-01-02 10:31:25 +08:00
Archer
b75e807f24 fix: tool choice run same tool will error (#3502) 2024-12-31 10:58:52 +08:00
Archer
b2fdefdc0c update config.json (#3497) 2024-12-30 13:53:12 +08:00
Archer
896fec4b82 update doc (#3496) 2024-12-30 13:51:05 +08:00
Archer
50bf7f9a3b V4.8.17 feature (#3493)
* split tokens into input and output (#3477)

* split tokens into input and output

* query extension & tool call & question guide

* fix

* perf: input and output tokens

* perf: tool call if else

* perf: remove code

* fix: extract usage count

* fix: qa usage count

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-12-30 10:13:25 +08:00
Archer
da2831b948 update doc (#3488) 2024-12-27 20:21:08 +08:00
Archer
b520988c64 V4.8.17 feature (#3485)
* feat: add third party account config (#3443)

* temp

* editor workflow variable style

* add team to dispatch

* i18n

* delete console

* change openai account position

* fix

* fix

* fix

* fix

* fix

* 4.8.17 test (#3461)

* perf: external provider config

* perf: ui

* feat: add template config (#3434)

* change template position

* template config

* delete console

* delete

* fix

* fix

* perf: Mongo visutal field (#3464)

* remve invalid code

* perf: team member visutal code

* perf: virtual search; perf: search test data

* fix: ts

* fix: image response headers

* perf: template code

* perf: auth layout;perf: auto save (#3472)

* perf: auth layout

* perf: auto save

* perf: auto save

* fix: template guide display & http input support external variables (#3475)

* fix: template guide display

* http editor support external workflow variables

* perf: auto save;fix: ifelse checker line break; (#3478)

* perf: auto save

* perf: auto save

* fix: ifelse checker line break

* perf: doc

* perf: doc

* fix: update var type error

* 4.8.17 test (#3479)

* perf: auto save

* perf: auto save

* perf: template code

* 4.8.17 test (#3480)

* perf: auto save

* perf: auto save

* perf: model price model

* feat: add react memo

* perf: model provider filter

* fix: ts (#3481)

* perf: auto save

* perf: auto save

* fix: ts

* simple app tool select (#3473)

* workflow plugin userguide & simple tool ui

* simple tool filter

* reuse component

* change component to hook

* fix

* perf: too selector modal (#3484)

* perf: auto save

* perf: auto save

* perf: markdown render

* perf: too selector

* fix: app version require tmbId

* perf: templates refresh

* perf: templates refresh

* hide auto save error tip

* perf: toolkit guide

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-12-27 20:05:12 +08:00
Archer
a209856d48 Fix config (#3476)
* feat: SiliconCloud doc

* feat: SiliconCloud doc

* perf: silicon cloud doc

* perf: silicon cloud doc
2024-12-26 21:36:09 +08:00
f7942655a2 docs: fix typo (#3471) 2024-12-26 11:21:36 +08:00
Archer
108e1b92ef perf: model provider show; perf: get init data buffer (#3459)
* pr code

* perf: model table show

* perf: model provider show

* perf: get init data buffer

* perf: get init data buffer

* perf: icon
2024-12-24 15:12:07 +08:00
Archer
f646ef8595 feat: model select support close params;perf: dataset params slider;update doc (#3453)
* feat: model select support close params

* perf: dataset params slider

* update doc

* update doc

* add delete log

* perf: ai config overflow

* test

* test

* test

* delete collection tags

* delete collection tags
2024-12-23 23:47:33 +08:00
Archer
a7f25994d5 update doc (#3452) 2024-12-23 12:46:35 +08:00
Archer
58fbf78c6e perf: ai param config (#3451)
* perf: ai param config

* pacakge import

* perf: ai config doc
2024-12-23 10:31:15 +08:00
Archer
ae149069bf fix: pc check (#3447)
* fix: pc check

* fix: pc check
2024-12-21 12:28:32 +08:00
Archer
e5b8dea9ae perf: schema indexes (#3446) 2024-12-21 00:01:14 +08:00
imgbot[bot]
b48eff4212 [ImgBot] Optimize images (#3444)
*Total -- 8,930.88kb -> 6,422.90kb (28.08%)

/docSite/assets/imgs/dingtalk-bot-3.png -- 150.74kb -> 80.43kb (46.64%)
/docSite/assets/imgs/image-45.png -- 241.12kb -> 139.12kb (42.3%)
/docSite/assets/imgs/dingtalk-bot-7.png -- 157.98kb -> 93.12kb (41.05%)
/docSite/assets/imgs/image-22.png -- 85.17kb -> 50.65kb (40.52%)
/docSite/assets/imgs/image-21.png -- 166.09kb -> 105.67kb (36.37%)
/docSite/assets/imgs/image-30.png -- 949.57kb -> 610.28kb (35.73%)
/docSite/assets/imgs/image-39.png -- 157.46kb -> 103.23kb (34.44%)
/docSite/assets/imgs/image-31.png -- 152.24kb -> 100.19kb (34.19%)
/docSite/assets/imgs/image-32.png -- 202.03kb -> 133.60kb (33.87%)
/docSite/assets/imgs/image-40.png -- 190.04kb -> 125.73kb (33.84%)
/docSite/assets/imgs/image-20.png -- 156.46kb -> 103.55kb (33.82%)
/docSite/assets/imgs/image-48.png -- 310.79kb -> 207.13kb (33.35%)
/docSite/assets/imgs/image-42.png -- 281.93kb -> 188.72kb (33.06%)
/docSite/assets/imgs/image-25.png -- 320.31kb -> 216.69kb (32.35%)
/docSite/assets/imgs/image-29.png -- 366.64kb -> 251.01kb (31.54%)
/docSite/assets/imgs/image-37.png -- 195.95kb -> 134.56kb (31.33%)
/docSite/assets/imgs/image-44.png -- 197.77kb -> 136.19kb (31.13%)
/docSite/assets/imgs/image-28.png -- 320.12kb -> 221.57kb (30.79%)
/docSite/assets/imgs/image-26.png -- 357.81kb -> 251.20kb (29.79%)
/docSite/assets/imgs/image-38.png -- 205.90kb -> 144.59kb (29.77%)
/docSite/assets/imgs/image-49.png -- 118.70kb -> 83.41kb (29.73%)
/docSite/assets/imgs/image-47.png -- 250.87kb -> 177.99kb (29.05%)
/docSite/assets/imgs/image-50.png -- 248.29kb -> 176.23kb (29.02%)
/docSite/assets/imgs/image-41.png -- 351.94kb -> 250.54kb (28.81%)
/docSite/assets/imgs/image-34.png -- 60.95kb -> 43.46kb (28.71%)
/docSite/assets/imgs/image-43.png -- 190.00kb -> 135.54kb (28.66%)
/docSite/assets/imgs/image-46.png -- 249.17kb -> 177.94kb (28.59%)
/docSite/assets/imgs/image-36.png -- 153.27kb -> 113.29kb (26.08%)
/docSite/assets/imgs/image-27.png -- 488.49kb -> 367.54kb (24.76%)
/docSite/assets/imgs/image-24.png -- 72.54kb -> 57.77kb (20.35%)
/docSite/assets/imgs/image-23.png -- 113.25kb -> 91.34kb (19.34%)
/docSite/assets/imgs/image-35.png -- 78.37kb -> 63.56kb (18.9%)
/docSite/assets/imgs/image-33.png -- 79.92kb -> 65.38kb (18.2%)
/docSite/assets/imgs/dingtalk-bot-8.png -- 129.33kb -> 112.41kb (13.08%)
/docSite/assets/imgs/dingtalk-bot-2.png -- 158.93kb -> 141.03kb (11.26%)
/docSite/assets/imgs/dingtalk-bot-6.png -- 108.22kb -> 96.11kb (11.19%)
/docSite/assets/imgs/dingtalk-bot-5.png -- 168.14kb -> 152.32kb (9.41%)
/docSite/assets/imgs/dingtalk-bot-1.png -- 91.40kb -> 82.86kb (9.35%)
/docSite/assets/imgs/searxng_plugin_guide1.png -- 338.63kb -> 323.95kb (4.33%)
/docSite/assets/imgs/dingtalk-bot-4.png -- 314.37kb -> 313.01kb (0.43%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2024-12-20 19:40:04 +08:00
Archer
87e7c23da4 4.8.16 test (#3445)
* perf: model selector ux

* perf: model selector ux
2024-12-20 19:38:20 +08:00
Archer
e6d53e3daa 4.8.16 test (#3442)
* perf: simple app save

* fix: notify config i18n

* perf: service side props render

* perf: model selector

* update doc
2024-12-20 18:58:40 +08:00
Archer
922cb433d3 perf: pay ui;update version doc (#3439)
* perf: pay ui

* update doc
2024-12-19 17:54:56 +08:00
Archer
a997f277ad 4.8.16 test (#3437)
* perf: auto login code

* perf: invoice phone
2024-12-19 14:52:19 +08:00
papapatrick
1f4e5f6d71 perf: add contact phone number in invoice header (#3427) 2024-12-19 14:01:07 +08:00
heheer
ce2e926d76 fix: add sso auto login config (#3436) 2024-12-19 13:33:56 +08:00
Archer
bd79e7701f 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>
2024-12-18 19:30:19 +08:00
Archer
82871be054 Update 4815.md (#3409) 2024-12-16 19:02:43 +08:00
Archer
8ba339e78f Perf webhook (#3406)
* perf: plugin webhook

* perf: plugin webhook
2024-12-16 16:44:39 +08:00
Jiangween
8e9c030600 feat:钉钉和企微的webhook (#3393) 2024-12-16 15:05:02 +08:00
Hexiao Zhang
9b8779ba08 Update controller.ts (#3404) 2024-12-16 15:04:24 +08:00
Archer
bfac393ab1 Add question guide config (#3403)
* feat:Prompt task (#3337)

* feat:猜你想问自定义功能

* 修改用户输入框部分,去除冗余代码

* 删除不必要的属性

* 删除多余内容

* 修正了格式问题,并实现获取调试和app最新参数

* 修正了几行代码

* feat:Prompt task (#3337)

* feat:猜你想问自定义功能

* 修改用户输入框部分,去除冗余代码

* 删除不必要的属性

* 删除多余内容

* 修正了格式问题,并实现获取调试和app最新参数

* 修正了几行代码

* perf: question gudide code

* fix: i18n

* hunyuan logo

* fix: cq templates

* perf: create question guide code

* udpate svg

---------

Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
2024-12-16 13:49:31 +08:00
a.e.
76d20b2b76 fix: handle sso state (#3402) 2024-12-16 12:17:13 +08:00
papapatrick
b4933471cd refactor: 知识块都改为markdown渲染 (#3389) 2024-12-16 12:16:44 +08:00
Archer
c995bccef8 fix: input form value type error (#3399) 2024-12-15 19:58:50 +08:00
a.e.
3deac290bf fix: sso redirect (#3395) 2024-12-13 17:58:57 +08:00
Archer
b7eb4c15de fix: add multiple selector null check (#3392) 2024-12-13 14:15:30 +08:00
heheer
41a8536c16 fix template (#3390) 2024-12-13 12:08:36 +08:00
Archer
1e618502c7 Update 4815.md (#3388) 2024-12-13 11:27:50 +08:00
Archer
e9297c2c6a Update 4815.md (#3387) 2024-12-13 11:26:25 +08:00
Archer
30a89fe4cb fix: list permission (#3386) 2024-12-13 11:00:22 +08:00
Archer
c41def5fbb Fix input (#3385)
* doc

* fix: inputs

* fix: inputs

* fix: inputs

* fix: inputs
2024-12-13 08:28:33 +08:00
Archer
b596976a96 fix: render inputs (#3384) 2024-12-13 08:06:05 +08:00
Archer
e71708ee76 doc (#3383)
* doc

* feat: navbar size

* navbar ui
2024-12-12 17:54:38 +08:00
Archer
ddddd998c8 Fix workflow detail (#3382)
* fix: loop node init

* fix: workflow detail

* fix: point table

* add null check
2024-12-12 17:14:46 +08:00
heheer
181b854342 fix: cost tool tip display (#3381) 2024-12-12 17:05:27 +08:00
Archer
40af63b1dd perf: remove auto delete invalid item (#3377) 2024-12-11 22:46:32 +08:00
Archer
d2a56a2fed Update 4815.md (#3375) 2024-12-11 22:14:27 +08:00
Archer
4b9b0dbbb9 perf: private app check (#3376)
* perf: private app check

* perf: clb count
2024-12-11 22:12:57 +08:00
Archer
c0135f5f21 fix: permission (#3374)
* fix: permission

* feat: create dataset per
2024-12-11 20:56:52 +08:00
Archer
8a4715293e Update 4815.md (#3373) 2024-12-11 16:36:08 +08:00
Archer
69dc927a5a feat: login limit (#3369)
* feat: login limit

* feat: env template

* fix: ts
2024-12-11 15:46:21 +08:00
Archer
d5752ddbaa feat: Sync collection (#3368)
* feat: sync collection

* feat: sync collection

* perf: website selector

* update doc
2024-12-11 15:03:41 +08:00
Archer
048f5a2d53 fix: emb page cannot save lng;feat: Add classify error log (#3367)
* fix: emb page cannot save lng

* perf: i18n check
2024-12-11 14:18:48 +08:00
Archer
096afef629 update image (#3364) 2024-12-11 09:47:37 +08:00
Archer
f832d32c62 fix: icon (#3363) 2024-12-10 22:02:15 +08:00
Archer
d7c6204e62 Update faq.md (#3362) 2024-12-10 17:35:57 +08:00
Archer
806109b748 remove test code (#3361) 2024-12-10 14:27:26 +08:00
Archer
b327e487a5 perf: app cron job (#3360) 2024-12-10 14:05:34 +08:00
heheer
c98224dda3 fix: multirow selector default value (#3358)
* fix: multirow selector default value

* fix
2024-12-10 11:53:19 +08:00
Archer
5cea6015c0 perf: http body parse (#3357)
* perf: http body parse

* perf: http body parse
2024-12-10 11:19:46 +08:00
Archer
fd47f73086 fix: auto send delay (#3352) 2024-12-10 09:51:49 +08:00
Archer
fc8f73fc55 更新 navbarPhone.tsx (#3353) 2024-12-09 22:48:44 +08:00
Archer
1b8b11239c perf: speech check (#3351)
* perf: speech check

* perf: version
2024-12-09 21:27:07 +08:00
Archer
15dc7b220e perf: snap code (#3350)
* perf: readme

* perf: snap code
2024-12-09 18:27:40 +08:00
heheer
c64d629a6a fix: loop node snapshot & infinite reload (#3349) 2024-12-09 18:18:33 +08:00
Archer
1a294c1fd3 perf: load plugin groups code;perf: system plugin schema;fix: special variables replace;perf: retry cron app job (#3347)
* perf: load plugin groups code

* perf: system plugin schema

* feat: retry cron app job

* fix: special variables replace
2024-12-09 17:18:07 +08:00
Archer
a4f6128a89 Update 4814.md (#3345) 2024-12-09 14:50:54 +08:00
heheer
021ec0595d fix: plugin group api position & team selector optional display (#3339) 2024-12-09 09:55:10 +08:00
YeYuheng
6ceee7cb5e marker doc (#3335)
* marker doc

* marker doc
2024-12-07 20:28:40 +08:00
Archer
90d7d2a164 perf: workflow snapshots;fix: extrat node selected (#3334)
* doc

* perf: workflow snapshots

* fix: extrat node selected

* refresh page reset snapshot
2024-12-06 18:08:52 +08:00
imgbot[bot]
0c308fcf8b [ImgBot] Optimize images (#3333)
*Total -- 16,249.30kb -> 13,885.08kb (14.55%)

/docSite/assets/imgs/translate7.png -- 238.17kb -> 92.79kb (61.04%)
/docSite/assets/imgs/image-16.png -- 138.74kb -> 72.25kb (47.92%)
/docSite/assets/imgs/api-dataset-1.png -- 96.68kb -> 56.44kb (41.62%)
/docSite/assets/imgs/integration1.png -- 2.11kb -> 1.23kb (41.47%)
/docSite/assets/imgs/image-17.png -- 222.24kb -> 138.71kb (37.59%)
/docSite/assets/imgs/image-19.png -- 167.16kb -> 108.02kb (35.38%)
/docSite/assets/imgs/document_analysis1.png -- 37.93kb -> 24.90kb (34.37%)
/docSite/assets/imgs/image-9.png -- 82.66kb -> 54.82kb (33.68%)
/docSite/assets/imgs/knowledge_merge1.png -- 25.64kb -> 17.10kb (33.29%)
/docSite/assets/imgs/flow-tool1.png -- 54.42kb -> 36.44kb (33.04%)
/docSite/assets/imgs/image-18.png -- 157.53kb -> 105.89kb (32.78%)
/docSite/assets/imgs/image-8.png -- 116.99kb -> 79.61kb (31.95%)
/docSite/assets/imgs/image-12.png -- 179.21kb -> 122.00kb (31.92%)
/docSite/assets/imgs/image-10.png -- 81.53kb -> 55.61kb (31.79%)
/docSite/assets/imgs/image-13.png -- 172.11kb -> 117.71kb (31.61%)
/docSite/assets/imgs/image-7.png -- 416.11kb -> 287.61kb (30.88%)
/docSite/assets/imgs/image-6.png -- 471.28kb -> 329.27kb (30.13%)
/docSite/assets/imgs/image-5.png -- 371.50kb -> 263.09kb (29.18%)
/docSite/assets/imgs/document_analysis2.png -- 26.52kb -> 18.92kb (28.65%)
/docSite/assets/imgs/htmlRendering1.png -- 70.58kb -> 50.45kb (28.52%)
/.github/imgs/image.png -- 20.82kb -> 15.08kb (27.54%)
/docSite/assets/imgs/flow-tool6.png -- 15.63kb -> 11.35kb (27.39%)
/docSite/assets/imgs/variable_update1.png -- 19.61kb -> 14.98kb (23.59%)
/docSite/assets/imgs/translate10.png -- 84.00kb -> 65.14kb (22.45%)
/docSite/assets/imgs/google_search_plugin4.png -- 50.35kb -> 39.31kb (21.92%)
/docSite/assets/imgs/translate8.png -- 68.96kb -> 54.29kb (21.27%)
/docSite/assets/imgs/bing_search_plugin5.png -- 54.46kb -> 42.89kb (21.24%)
/docSite/assets/imgs/form_input1.png -- 52.12kb -> 41.63kb (20.12%)
/docSite/assets/imgs/translate9.png -- 106.28kb -> 86.35kb (18.75%)
/docSite/assets/imgs/flow-tool7.png -- 36.86kb -> 30.04kb (18.51%)
/docSite/assets/imgs/image-11.png -- 819.07kb -> 669.89kb (18.21%)
/docSite/assets/imgs/template_submission3.png -- 283.37kb -> 232.65kb (17.9%)
/docSite/assets/imgs/doc2x_plugin3.png -- 121.64kb -> 100.78kb (17.15%)
/docSite/assets/imgs/spellcheck5.png -- 36.60kb -> 30.87kb (15.65%)
/docSite/assets/imgs/knowledge_merge3.png -- 179.32kb -> 151.42kb (15.56%)
/docSite/assets/imgs/RAG1.png -- 381.41kb -> 322.90kb (15.34%)
/docSite/assets/imgs/image-15.png -- 257.77kb -> 219.79kb (14.74%)
/docSite/assets/imgs/image-14.png -- 599.17kb -> 511.20kb (14.68%)
/docSite/assets/imgs/spellcheck3.png -- 48.21kb -> 41.18kb (14.58%)
/docSite/assets/imgs/doc2x_plugin4.png -- 62.40kb -> 53.33kb (14.53%)
/docSite/assets/imgs/spellcheck2.png -- 128.33kb -> 110.10kb (14.2%)
/docSite/assets/imgs/spellcheck1.png -- 63.44kb -> 54.54kb (14.02%)
/docSite/assets/imgs/spellcheck4.png -- 153.90kb -> 132.41kb (13.97%)
/docSite/assets/imgs/translate12.png -- 176.14kb -> 151.87kb (13.78%)
/docSite/assets/imgs/translate11.png -- 237.58kb -> 206.44kb (13.11%)
/docSite/assets/imgs/knowledge_merge2.png -- 123.49kb -> 107.44kb (13%)
/docSite/assets/imgs/translate4.png -- 174.85kb -> 153.32kb (12.31%)
/docSite/assets/imgs/flow-tool3.png -- 163.79kb -> 143.71kb (12.26%)
/docSite/assets/imgs/user-selection1.png -- 60.21kb -> 52.85kb (12.23%)
/docSite/assets/imgs/plugin_submission3.png -- 182.66kb -> 161.34kb (11.67%)
/docSite/assets/imgs/plugin_submission5.png -- 188.61kb -> 169.78kb (9.99%)
/docSite/assets/imgs/RAG3.png -- 77.61kb -> 69.96kb (9.86%)
/docSite/assets/imgs/flow-tool4.png -- 152.11kb -> 138.04kb (9.25%)
/docSite/assets/imgs/form_input3.png -- 173.80kb -> 158.12kb (9.02%)
/docSite/assets/imgs/translate15.png -- 126.36kb -> 115.04kb (8.95%)
/docSite/assets/imgs/translate2.png -- 315.54kb -> 287.55kb (8.87%)
/docSite/assets/imgs/translate14.png -- 216.02kb -> 196.93kb (8.84%)
/docSite/assets/imgs/translate13.png -- 257.41kb -> 235.13kb (8.66%)
/docSite/assets/imgs/google_search_plugin3.png -- 207.39kb -> 189.77kb (8.49%)
/docSite/assets/imgs/flow-tool5.png -- 337.84kb -> 309.44kb (8.4%)
/docSite/assets/imgs/translate3.png -- 341.09kb -> 312.54kb (8.37%)
/docSite/assets/imgs/form_input2.png -- 147.56kb -> 136.13kb (7.75%)
/docSite/assets/imgs/bing_search_plugin2.png -- 222.07kb -> 205.64kb (7.4%)
/docSite/assets/imgs/translate1.png -- 261.13kb -> 242.17kb (7.26%)
/docSite/assets/imgs/translate20.png -- 433.50kb -> 403.10kb (7.01%)
/docSite/assets/imgs/bing_search_plugin3.png -- 145.72kb -> 135.72kb (6.86%)
/docSite/assets/imgs/translate18.png -- 441.89kb -> 411.76kb (6.82%)
/docSite/assets/imgs/variable_update2.png -- 179.43kb -> 167.96kb (6.39%)
/docSite/assets/imgs/google_search_plugin2.png -- 84.19kb -> 78.98kb (6.18%)
/docSite/assets/imgs/variable_update3.png -- 189.57kb -> 178.13kb (6.03%)
/docSite/assets/imgs/translate5.png -- 463.44kb -> 436.15kb (5.89%)
/docSite/assets/imgs/plugin_submission4.png -- 156.23kb -> 147.34kb (5.69%)
/docSite/assets/imgs/points1.png -- 146.54kb -> 138.21kb (5.69%)
/docSite/assets/imgs/google_search_plugin1.png -- 51.28kb -> 48.38kb (5.66%)
/docSite/assets/imgs/flow-tool2.png -- 70.64kb -> 66.65kb (5.65%)
/docSite/assets/imgs/translate61.png -- 590.71kb -> 558.60kb (5.44%)
/docSite/assets/imgs/bing_search_plugin1.png -- 101.07kb -> 95.63kb (5.38%)
/docSite/assets/imgs/translate16.png -- 88.25kb -> 83.76kb (5.1%)
/docSite/assets/imgs/user-selection2.png -- 162.55kb -> 154.34kb (5.05%)
/docSite/assets/imgs/user-selection3.png -- 179.79kb -> 170.84kb (4.98%)
/docSite/assets/imgs/template_submission1.png -- 177.66kb -> 169.88kb (4.38%)
/docSite/assets/imgs/translate19.png -- 464.75kb -> 448.85kb (3.42%)
/docSite/assets/imgs/bing_search_plugin4.png -- 91.43kb -> 88.42kb (3.3%)
/docSite/assets/imgs/variable_update5.png -- 185.49kb -> 179.44kb (3.26%)
/docSite/assets/imgs/variable_update4.png -- 174.67kb -> 169.14kb (3.17%)
/docSite/assets/imgs/translate21.png -- 66.15kb -> 64.78kb (2.07%)
/docSite/assets/imgs/plugin_submission1.png -- 209.81kb -> 206.46kb (1.6%)
/docSite/assets/imgs/htmlRendering3.png -- 58.24kb -> 57.57kb (1.16%)
/docSite/assets/imgs/RAG2.png -- 44.26kb -> 43.84kb (0.93%)
/docSite/assets/imgs/translate17.png -- 284.26kb -> 281.84kb (0.85%)
/docSite/assets/imgs/htmlRendering2.png -- 91.74kb -> 91.13kb (0.66%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2024-12-06 11:13:35 +08:00
Archer
1aebe5f185 V4.8.15 feature (#3331)
* feat: add customize toolkit (#3205)

* chaoyang

* fix-auth

* add toolkit

* add order

* plugin usage

* fix

* delete console:

* Fix: Fix fullscreen preview top positioning and improve Markdown rendering logic (#3247)

* 完成任务:修复全屏预览顶部固定问题,优化 Markdown 渲染逻辑

* 有问题修改

* 问题再修改

* 修正问题

* fix: plugin standalone display issue (#3254)

* 4.8.15 test (#3246)

* o1 config

* perf: system plugin code

* 调整系统插件代码。增加html 渲染安全配置。 (#3258)

* perf: base64 picker

* perf: list app or dataset

* perf: plugin config code

* 小窗适配等问题 (#3257)

* 小窗适配等问题

* git问题

* 小窗剩余问题

* feat: system plugin auth and lock version (#3265)

* feat: system plugin auth and lock version

* update comment

* 4.8.15 test (#3267)

* tmp log

* perf: login direct

* perf: iframe html code

* remove log

* fix: plugin standalone display (#3277)

* refactor: 页面拆分&i18n拆分 (#3281)

* refactor: account组件拆成独立页面

* script: 新增i18n json文件创建脚本

* refactor: 页面i18n拆分

* i18n: add en&hant

* 4.8.15 test (#3285)

* tmp log

* remove log

* fix: watch avatar refresh

* perf: i18n code

* fix(plugin): use intro instead of userguide (#3290)

* Universal SSO (#3292)

* tmp log

* remove log

* feat: common oauth

* readme

* perf: sso provider

* remove sso code

* perf: refresh plugins

* feat: add api dataset (#3272)

* add api-dataset

* fix api-dataset

* fix api dataset

* fix ts

* perf: create collection code (#3301)

* tmp log

* remove log

* perf: i18n change

* update version doc

* feat: question guide from chatId

* perf: create collection code

* fix: request api

* fix: request api

* fix: tts auth and response type (#3303)

* perf: md splitter

* fix: tts auth and response type

* fix: api file dataset (#3307)

* perf: api dataset init (#3310)

* perf: collection schema

* perf: api dataset init

* refactor: 团队管理独立页面 (#3302)

* ui: 团队管理独立页面

* 代码优化

* fix

* perf: sync collection and ui check (#3314)

* perf: sync collection

* remove script

* perf: update api server

* perf: api dataset parent

* perf: team ui

* perf: team 18n

* update team ui

* perf: ui check

* perf: i18n

* fix: debug variables & cronjob & system plugin callback load (#3315)

* fix: debug variables & cronjob & system plugin callback load

* fix type

* fix

* fix

* fix: plugin dataset quote;perf: system variables init (#3316)

* fix: plugin dataset quote

* perf: system variables init

* perf: node templates ui;fix: dataset import ui (#3318)

* fix: dataset import ui

* perf: node templates ui

* perf: ui refresh

* feat:套餐改名和套餐跳转配置 (#3309)

* fixing:except Sidebar

* 去除了多余的代码

* 修正了套餐说明的代码

* 修正了误删除的show_git代码

* 修正了名字部分等代码

* 修正了问题,遗留了其他和ui讨论不一致的部分

* 4.8.15 test (#3319)

* remove log

* pref: bill ui

* pref: bill ui

* perf: log

* html渲染文档 (#3270)

* html渲染文档

* 文档有点小问题

* feat: doc (#3322)

* 集合重训练 (#3282)

* rebaser

* 一点补充

* 小问题

* 其他问题修正,删除集合保留文件的参数还没找到...

* reTraining

* delete uesless

* 删除了一行错误代码

* 集合重训练部分

* fixing

* 删除console代码

* feat: navbar item config (#3326)

* perf: custom navbar code;perf: retraining code;feat: api dataset and dataset api doc (#3329)

* feat: api dataset and dataset api doc

* perf: retraining code

* perf: custom navbar code

* fix: ts (#3330)

* fix: ts

* fix: ts

* retraining ui

* perf: api collection filter

* perf: retrining button

---------

Co-authored-by: heheer <heheer@sealos.io>
Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
Co-authored-by: papapatrick <109422393+Patrickill@users.noreply.github.com>
2024-12-06 10:56:53 +08:00
Archer
b188544386 Update 4814.md (#3325) 2024-12-05 17:43:42 +08:00
heheer
7faa427e84 microsoft oauth tenantId & custom button name (#3300) 2024-12-03 15:28:56 +08:00
Archer
cb56d1e53e fix: ts (#3296) 2024-12-03 00:11:38 +08:00
Archer
f28b7e41a8 fix: auto send prompt runtime (#3295) 2024-12-03 00:02:56 +08:00
heheer
c506442993 fix simple snapshot init & auto excute when change app (#3293) 2024-12-02 21:40:31 +08:00
Archer
1cef206c13 Fix share page feedback auth (#3284)
* fix: share page mark auth

* perf: lang check

* perf: load share
2024-12-01 21:09:13 +08:00
gallonyin
d0e8c9c62e Fix: Sandbox Dockerfile (#3280)
修复打包异常,异常信息:
Step 17/28 : COPY package.json pnpm-workspace.yaml /app
When using COPY with more than one source file, the destination must be a directory and end with a /
2024-11-30 11:09:51 +08:00
Archer
a4a8b7909c Update README.md (#3276) 2024-11-29 16:51:43 +08:00
Archer
6c77134e82 Fix plugin runtime cannot upload files (#3271)
* app logo

* fix: plugin runtime cannot upload file
2024-11-28 22:47:24 +08:00
Archer
93e302b7e8 Update faq.md (#3269) 2024-11-28 17:23:49 +08:00
Archer
78f52a7836 perf: i18n (#3268)
* perf: i18n

* update
2024-11-28 16:42:57 +08:00
Archer
0d30b7ba73 update doc (#3263) 2024-11-28 13:40:09 +08:00
Archer
31f7cf6cc5 Update 4814.md (#3260) 2024-11-28 12:13:51 +08:00
YeYuheng
b09e972c20 pdf2md (#3213)
* pdf2md

* pdf2md

* pdf2md

* pdf2md

* pdf2md
2024-11-27 16:28:14 +08:00
Archer
5fa2e3c5ac fix: milvus sdk (#3249) 2024-11-27 10:06:12 +08:00
Archer
4723a08d98 fix: check reference (#3240) 2024-11-26 14:57:32 +08:00
Archer
3d9c1d5472 Update official_account.md (#3239) 2024-11-26 14:23:32 +08:00
Archer
a75036b626 fix: base64 image (#3238)
* fix: base64 image

* perf: quote qa
2024-11-26 13:28:51 +08:00
Archer
cf1a90c596 doc (#3237) 2024-11-26 13:00:54 +08:00
Archer
8aa6b53760 V4.8.14 dev (#3234)
* feat: rewrite chat context (#3176)

* feat: add app auto execute (#3115)

* feat: add app auto execute

* auto exec configtion

* chatting animation

* change icon

* fix

* fix

* fix link

* feat: add chat context to all chatbox

* perf: loading ui

---------

Co-authored-by: heheer <heheer@sealos.io>

* app auto exec (#3179)

* add chat records loaded state (#3184)

* perf: chat store reset storage (#3186)

* perf: chat store reset storage

* perf: auto exec code

* chore: workflow ui (#3175)

* chore: workflow ui

* fix

* change icon color config

* change popover to mymenu

* 4.8.14 test (#3189)

* update doc

* fix: token check

* perf: icon button

* update doc

* feat: share page support configuration Whether to allow the original view (#3194)

* update doc

* perf: fix index (#3206)

* perf: i18n

* perf: Add service entry (#3226)

* 4.8.14 test (#3228)

* fix: ai log

* fix: text splitter

* fix: reference unselect & user form description & simple to advance (#3229)

* fix: reference unselect & user form description & simple to advance

* change abort position

* perf

* perf: code (#3232)

* perf: code

* update doc

* fix: create btn permission (#3233)

* update doc

* fix: refresh chatbox listener

* perf: check invalid reference

* perf: check invalid reference

* update doc

* fix: ui props

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-11-26 12:02:58 +08:00
Archer
7e1d31b5a9 Update intro.md (#3235) 2024-11-25 22:47:31 +08:00
Menghuan
bc79d46d4b 更新Doc2X插件:输出文本预处理改进 (#3199)
* Error text fix

* Add post-processing for table

* Some table can not convert

* Refactor table conversion logic in PDF2text plugin

* Fix table separator formatting issue

* Refactor table separator formatting in PDF2text plugin

* Refactor table conversion logic in PDF2text plugin and add HTMLtable option

* 修复本地部署时无法获取文件的问题

* Refactor PDF fetching and parsing logic

* Refactor PDF fetching and parsing logic, and fix table separator formatting issue

* Bug fix: HTMLtable control not work
2024-11-25 20:01:50 +08:00
Peter Dave Hello
dfd2fed033 Add zh_TW Traditional Chinese translation (#3220) 2024-11-25 10:04:08 +08:00
Archer
51559bc821 update deploy yml (#3224) 2024-11-25 00:00:45 +08:00
Chenglong.li
c7681342f7 Fix milvus description (#3216)
Signed-off-by: JackLCL <chenglong.li@zilliz.com>
2024-11-23 00:49:47 +08:00
Jiangween
0f4870a7a5 修复文档图片路径问题和更新用户选择示意图 (#3210)
* 修复 userSelect.svg 文件的问题

* 图片路径有误
2024-11-21 23:03:59 +08:00
heheer
763b41b385 simple app snapshot init (#3207)
* simple init

* change old past position
2024-11-21 17:38:30 +08:00
Archer
019bf67e2d Snip test (#3204)
* fix: index

* fix: snapshot error; perf: snapshot diff compare

* perf: init simple edit history
2024-11-21 16:26:43 +08:00
heheer
9b2c3b242a refactor: snapshot store to diff (#3155)
* refactor: snapshot store to diff

* change initial state position

* fix old snapshot format

* encapsulate json diff
2024-11-21 13:12:42 +08:00
Archer
4f55025906 rFix textspliter (#3200)
* fix: text splitter

* perf: splitter
2024-11-21 12:01:55 +08:00
Archer
489bb076a3 更新 configuration.md (#3188) 2024-11-19 10:19:21 +08:00
Archer
a9db5b57c5 feat: add training retry time (#3187)
* feat: add training retry time

* remoce log
2024-11-18 20:57:03 +08:00
Archer
fdb3720b41 Update 4813.md (#3185) 2024-11-18 18:34:08 +08:00
Archer
00641a8652 Update official_account.md (#3181) 2024-11-18 14:54:35 +08:00
Archer
5c56b375c7 Update official_account.md (#3180) 2024-11-18 14:28:01 +08:00
Archer
d8d9b936c4 fix: custom uid (#3177)
* chat api doc

* fix: custom uid
2024-11-18 10:27:52 +08:00
Archer
b237a3ec55 更新 4813.md (#3174) 2024-11-16 10:32:27 +08:00
Archer
af894680cb Update official_account.md (#3169) 2024-11-15 15:26:28 +08:00
Archer
58745f8c35 4.8.14 test (#3164)
* perf: match base 64 image

* perf: register plugins
2024-11-15 10:35:04 +08:00
Archer
f699061dea 更新 plugin.ts (#3163) 2024-11-14 23:11:33 +08:00
Archer
3f72f88591 perf: doc2x plugins (#3162) 2024-11-14 21:56:13 +08:00
Menghuan1918
be59c2f6a7 更新Doc2X插件:适配新接口 (#3159)
* fix: doc2x now not hava the picture API

* fix: 适配doc2x V2 API

* Update to axios to request doc2x

* Add time out
2024-11-14 20:55:37 +08:00
Archer
795904a357 remove log (#3161) 2024-11-14 20:31:01 +08:00
Archer
e8824987fa 4.8.14 test (#3160)
* perf: remove base64 check

* perf: update doc
2024-11-14 18:33:43 +08:00
Archer
b6d650adfb Update 4813.md (#3158) 2024-11-14 16:46:02 +08:00
Archer
710fa37847 fix: chat variable update (#3156)
* perf: file encoding

* fix: chat variable update
2024-11-14 15:50:47 +08:00
Archer
e22031ca6c update doc (#3151) 2024-11-14 10:45:05 +08:00
heheer
0c9e10dd2b feat: add microsoft oauth (#3152) 2024-11-14 10:33:49 +08:00
Archer
0472dc2967 perf: checkbox dom (#3149)
* perf: checkbox dom

* perf: null check

* perf: simple mode variables

* perf: get csv encoding code

* fix: dataset filter

* perf: code editor ui
2024-11-13 18:29:24 +08:00
居里栈栈
98d4a6ee75 Fix garbled code (#3126)
* 修复:修复引导输入批量导入中文乱码问题

* 兼容非UTF-8的CSV导入

---------

Co-authored-by: 勤劳上班的卑微小张 <jiazhan.zhang@ggimage.com>
2024-11-13 17:02:32 +08:00
Jiangween
c12159bfb4 Remove some global variables (#3143)
* Restore docSite content based on upstream/4.8.13-dev (#3138)

* Restore docSite content based on upstream/4.8.13-dev

* 4813.md缺少更正

* 去除多余全局变量

* Revert "Restore docSite content based on upstream/4.8.13-dev (#3138)"

This reverts commit af4380a332.

* 实现了隐藏多余全局变量
2024-11-13 16:59:03 +08:00
Jiangween
abce1e9cf6 更新中文文档内容及相关图片 (#3146) 2024-11-13 16:14:03 +08:00
Archer
c3cc51c9a0 fix: share page data;Adapt findLastIndex api (#3147)
* perf: share page data

* perf: adapt findLastIndex
2024-11-13 13:08:34 +08:00
heheer
519b519458 fix extra point number input register (#3145) 2024-11-13 12:01:09 +08:00
Archer
e9d52ada73 4.8.13 feature (#3118)
* chore(ui): login page & workflow page (#3046)

* login page & number input & multirow select & llm select

* workflow

* adjust nodes

* New file upload (#3058)

* feat: toolNode aiNode readFileNode adapt new version

* update docker-compose

* update tip

* feat: adapt new file version

* perf: file input

* fix: ts

* feat: add chat history time label (#3024)

* feat:add chat and logs time

* feat: add chat history time label

* code perf

* code perf

---------

Co-authored-by: 勤劳上班的卑微小张 <jiazhan.zhang@ggimage.com>

* add chatType (#3060)

* pref: slow query of full text search (#3044)

* Adapt findLast api;perf: markdown zh format. (#3066)

* perf: context code

* fix: adapt findLast api

* perf: commercial plugin run error

* perf: markdown zh format

* perf: dockerfile proxy (#3067)

* fix ui (#3065)

* fix ui

* fix

* feat: support array reference multi-select (#3041)

* feat: support array reference multi-select

* fix build

* fix

* fix loop multi-select

* adjust condition

* fix get value

* array and non-array conversion

* fix plugin input

* merge func

* feat: iframe code block;perf: workflow selector type (#3076)

* feat: iframe code block

* perf: workflow selector type

* node pluginoutput check (#3074)

* feat: View will move when workflow check error;fix: ui refresh error when continuous file upload (#3077)

* fix: plugin output check

* fix: ui refresh error when continuous file upload

* feat: View will move when workflow check error

* add dispatch try catch (#3075)

* perf: workflow context split (#3083)

* perf: workflow context split

* perf: context

* 4.8.13 test (#3085)

* perf: workflow node ui

* chat iframe url

* feat: support sub route config (#3071)

* feat: support sub route config

* dockerfile

* fix upload

* delete unused code

* 4.8.13 test (#3087)

* fix: image expired

* fix: datacard navbar ui

* perf: build action

* fix: workflow file upload refresh (#3088)

* fix: http tool response (#3097)

* loop node dynamic height (#3092)

* loop node dynamic height

* fix

* fix

* feat: support push chat log (#3093)

* feat: custom uid/metadata

* to: custom info

* fix: chat push latest

* feat: add chat log envs

* refactor: move timer to pushChatLog

* fix: using precise log

---------

Co-authored-by: Finley Ge <m13203533462@163.com>

* 4.8.13 test (#3098)

* perf: loop node refresh

* rename context

* comment

* fix: ts

* perf: push chat log

* array reference check & node ui (#3100)

* feat: loop start add index (#3101)

* feat: loop start add index

* update doc

* 4.8.13 test (#3102)

* fix: loop index;edge parent check

* perf: reference invalid check

* fix: ts

* fix: plugin select files and ai response check (#3104)

* fix: plugin select files and ai response check

* perf: text editor selector;tool call tip;remove invalid image url;

* perf: select file

* perf: drop files

* feat: source id prefix env (#3103)

* 4.8.13 test (#3106)

* perf: select file

* perf: drop files

* perf: env template

* 4.8.13 test (#3107)

* perf: select file

* perf: drop files

* fix: imple mode adapt files

* perf: push chat log (#3109)

* fix: share page load title error (#3111)

* 4.8.13 perf (#3112)

* fix: share page load title error

* update file input doc

* perf: auto add file urls

* perf: auto ser loop node offset height

* 4.8.13 test (#3117)

* perf: plugin

* updat eaction

* feat: add more share config (#3120)

* feat: add more share config

* add i18n en

* fix: missing subroute (#3121)

* perf: outlink config (#3128)

* update action

* perf: outlink config

* fix: ts (#3129)

* 更新 docSite 文档内容 (#3131)

* fix: null pointer (#3130)

* fix: null pointer

* perf: not input text

* update doc url

* perf: outlink default value (#3134)

* update doc (#3136)

* 4.8.13 test (#3137)

* update doc

* perf: completions chat api

* Restore docSite content based on upstream/4.8.13-dev (#3138)

* Restore docSite content based on upstream/4.8.13-dev

* 4813.md缺少更正

* update doc (#3141)

---------

Co-authored-by: heheer <heheer@sealos.io>
Co-authored-by: papapatrick <109422393+Patrickill@users.noreply.github.com>
Co-authored-by: 勤劳上班的卑微小张 <jiazhan.zhang@ggimage.com>
Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
Co-authored-by: a.e. <49438478+I-Info@users.noreply.github.com>
Co-authored-by: Finley Ge <m13203533462@163.com>
Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
2024-11-13 11:29:53 +08:00
dignfei
e1f5483432 解决第二次运行pnpm i时报错: /app # pnpm i Scope: all 8 workspace projects Lockfile is up to date, resolution step is skipped Already up to date . postinstall$ sh ./scripts/postinstall.sh │ mkdir: can't create directory 'projects/app/tmp': File exists └─ Failed in 16ms at /app  ELIFECYCLE  Command failed with exit code 1. (#3132) 2024-11-12 18:28:37 +08:00
heheer
2c5f88b85f add baidu keywords (#3127) 2024-11-12 16:44:09 +08:00
Archer
2e1bf66d3d perf: auto add empty response (#3113) 2024-11-11 15:41:12 +08:00
Archer
952771e34d Update 4813.md (#3108) 2024-11-09 16:24:17 +08:00
Jiangween
49bee95b12 Optimize InputDataModal and useEditTitle in main project (#3086) 2024-11-07 12:03:55 +08:00
Carson Yang
0645b274da Docs: add docs for loop node (#3069) 2024-11-05 10:11:59 +08:00
heheer
cf8786b194 fix: node version update flicker (#3052) 2024-11-01 15:54:12 +08:00
tzq84
be6269688b feat(voice): add fallback for browsers without MediaSource support (#3043)
- Add MediaSource support detection function
- Implement fallback solution for browsers that don't support MediaSource:
  - For single audio: Read full stream before playing
  - For segmented audio: Wait until all text is received then play as one audio
- Improve code robustness and browser compatibility
2024-11-01 14:50:49 +08:00
Archer
912b264a47 perf: forbid image to base64 (#3038)
* perf: forbid image to base64

* update file upload path

* feat: support promptCall use image

* fix: echarts load

* update doc
2024-11-01 14:29:20 +08:00
Archer
7ef1821557 Update 4812.md (#3051) 2024-11-01 11:16:27 +08:00
Archer
4061b11922 fix: dataset select check (#3048) 2024-10-31 17:25:02 +08:00
Finley Ge
bc171db945 fix: alldataset get dataset without folders. omit the permission check (#3047) 2024-10-31 17:06:56 +08:00
Jiangween
eb365fef44 Update i18n files and Upload component (#3040)
* Update i18n files and Upload component

* 完善 i18n 和优化 Upload.tsx 文件

* 修改Upload.tsx 文件的问题...
2024-10-31 15:25:00 +08:00
Archer
2e7047cb3b Update 4812.md (#3036) 2024-10-31 00:48:36 +08:00
Archer
89a817d1c9 fix: dataset select cannot refresh (#3032)
* fix: dataset select cannot refresh

* update cors
2024-10-30 19:30:31 +08:00
Finley Ge
e788bcaabe fix: only owner or team owner can change app's owner (#3033) 2024-10-30 19:11:54 +08:00
heheer
9219903341 add goole tag manager (#3028) 2024-10-30 19:04:26 +08:00
Finley Ge
6939899baa fix: allDataset (#3031) 2024-10-30 19:02:08 +08:00
papapatrick
732b6d7780 add more market template (#3030)
* add more market template

* delete long translate avatar
2024-10-30 18:42:46 +08:00
heheer
e361279208 feat: add baidu conversion tracking (#3016)
* feat: add baidu conversion tracking

* chore
2024-10-30 14:40:49 +08:00
Archer
946fda0843 4.8.12 test (#3026)
* perf: app list permission

* perf: create dataset tip

* fix: create dataset
2024-10-30 14:23:37 +08:00
Archer
97216eec59 perf: app list permission (#3023)
* perf: app list permission

* perf: create dataset tip
2024-10-30 12:38:16 +08:00
Finley Ge
9f4aa3160e fix: app/dataset auth (#3021) 2024-10-30 11:50:25 +08:00
Archer
8e4084f7ee update text splitter (#3020) 2024-10-30 01:10:35 +08:00
Archer
ee718750e2 perf: dataset data auth (#3015) 2024-10-29 15:44:46 +08:00
Archer
1e02544c3a feat: reset milvus (#3013) 2024-10-29 14:55:27 +08:00
heheer
98771284e4 app list open-api & completion with appid & get history source (#3011)
* app list open-api & completion with appid & get history source

* change default value position
2024-10-29 14:27:29 +08:00
Finley Ge
efc4e860b7 fix/group (#3012)
* fix: app/dataset list private resource bug

* fix: auth owner
2024-10-29 11:22:21 +08:00
Archer
e06d72e86e 4.8.12 test (#3006)
* perf: oneapi error tip

* fix: qps limit condition error

* perf: Plan tip

* fix: permission modal ui

* perf: dataset slider ui

* perf: api key auth tmbId problem

* perf: dataset upload i18n

* fix: http json path check
2024-10-28 22:47:45 +08:00
Finley Ge
b712a821f8 fix: upload file (#2992)
* fix: upload file

* chore: remove wasm, support html image parse

* chore: adjust

* chore: move base64match function into htmlstr2md
2024-10-28 21:44:50 +08:00
Finley Ge
4e3d817b63 fix: milvus (#3004) 2024-10-28 16:06:08 +08:00
heheer
78a85bf847 fix: optimize tool node check in workflow (#3002)
* fix: optimize tool node check in workflow

* comment
2024-10-28 15:37:00 +08:00
ainuoyan
a5b913f1b1 Update chat.md (#2996) 2024-10-27 18:44:52 +08:00
Jiangween
7ee1a340e6 Re-add RAG documentation and images (#2995) 2024-10-27 09:15:44 +08:00
Archer
c722ced68d 4.8.12 test (#2994)
* perf: run loop code

* doc

* fix: mulity loop node will error; loop node variables cannot inherit

* back save tip position

* fix: child workflow runtime

* stream connection
2024-10-25 23:13:53 +08:00
Archer
f89452acdd Group role (#2993)
* feat: app/dataset support group (#2898)

* pref: member-group (#2862)

* feat: group list ordered by updateTime

* fix: transfer ownership of group when deleting member

* fix: i18n fix

* feat: can not set member as admin/owner when user is not active

* fix: GroupInfoModal hover input do not change color

* fix(fe): searchinput do not scroll

* feat: app collaborator with group, remove default permission

* feat: dataset collaborator with group, remove default permission

* chore(test): pref mock

* chore: remove useless code

* chore: adjust

* fix: add self as collaborator when creating folder

* fix(fe): folder manage menu do not show when user has write permission
only

* fix: dataset folder create

* feat: Add code comment

* Pref: app move (#2952)

* perf: app schema

* doc

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-10-25 19:39:11 +08:00
Archer
74d58d562b 4.8.12 test fix (#2988)
* perf: qps limit

* perf: http response data

* perf: json path check

* fix: ts

* loop support reference parent variable
2024-10-25 16:34:26 +08:00
heheer
165fe077bc fix: http raw response undefined (#2981) 2024-10-25 11:53:32 +08:00
Finley Ge
75494f8d01 feat: QPS Limit middleware (#2956)
* feat: QPS Limit middleware

* chore: use request-ip to get client ip

* feat: frequencyLimit schema
2024-10-25 10:08:59 +08:00
papapatrick
bb727b0710 add bing search plugins (#2970) 2024-10-23 22:45:06 +08:00
Archer
9b0706ed92 HTTP support jsonPath; System plugin support save file. (#2969)
* perf: system plugin auto save file

* feat: http support jsonPath

* fix: assistant response

* reset milvus version

* fix: textarea register

* fix: global variable

* delete tip

* doc
2024-10-23 00:40:54 +08:00
Finley Ge
718108a552 fix: milvus (#2968) 2024-10-22 21:53:48 +08:00
heheer
025facbc2d perf:textarea auto height (#2967)
* perf:textarea auto height

* optimize editor height & fix variable label split
2024-10-22 18:33:02 +08:00
Archer
87b4061302 System plugin adapt reference type in plugin input (#2965)
* perf: plugin input support reference

* perf: system plugin adapt plugin input reference
2024-10-22 14:51:15 +08:00
Archer
618729a254 Concat textinput to input type (#2963)
* perf: toast position

* concat textinput to input
2024-10-22 12:04:16 +08:00
heheer
3f34c33d4c perf: all plugin variables type support referense & replace input and textarea with prompt editor (#2950)
* support reference as plugin variables

* replace input and textarea with prompt editor

* adjust height & optimize textarea and input

* input select
2024-10-22 11:21:28 +08:00
zhengkai
779ff29ed5 typofix:laf函数调用时,弹出文字错误 (#2951)
* typofix:laf函数调用时,弹出文字错误

laf函数调用,新增/编辑输出时,显示错误,目前显示为新增/编辑输入

* fix typo ui
2024-10-22 08:50:03 +08:00
papapatrick
445a38924f add google search plugin (#2947) 2024-10-22 08:49:05 +08:00
silencezhang
7ec2253f0a 新增数据源配置:可以直接执行sql,支持MySQL,PG数据库 (#2958) 2024-10-21 14:26:33 +08:00
heheer
6522cc7dfa chore: adjust toast top distance (#2953)
* adjust toast top distance

* save button top
2024-10-18 17:20:57 +08:00
Archer
40f527a021 4.8.12 test (#2936)
* system config tip

* perf: prompt editor code

* perf: cookie tip
2024-10-18 16:49:35 +08:00
Zhenyi-Wang
4aaf9bfeb0 在“发布成功”通知中,显示关闭按钮 (#2948)
* feat: remove style tag when fetching url

* 在“发布成功”通知中,显示关闭按钮

---------

Co-authored-by: zhenyiwang <zhenyiwang@intl.zju.edu.cn>
2024-10-17 18:12:40 +08:00
papapatrick
5efa70f3a1 feat: add cookies tip drawer (#2935) 2024-10-16 15:18:55 +08:00
heheer
d45d18cc3b fix: variable label i18n & create question guide language (#2933) 2024-10-16 14:21:53 +08:00
heheer
8bdb35ff51 fix: quote settings default value & zindex & i18n (#2931) 2024-10-16 13:26:51 +08:00
居里栈栈
e56965a8ed feat: add AI Icon Svg Logo (#2930)
Co-authored-by: 勤劳上班的卑微小张 <jiazhan.zhang@ggimage.com>
2024-10-16 12:19:53 +08:00
Archer
d4e0a43771 4.8.12 dev (#2928)
* perf: optimize global variables (#2863)

* feat: add global variable types

* add global variables to debug

* fix select dnd

* unify InputTypeConfig params

* feat: http node url support variables (#2891)

* feat: http node url support variables

* change to prompt editor

* fix: global variables (#2892)

* fix global variables

* fix type

* perf: global variables

* perf: workflow delete node error (#2905)

* update lock

* update 4812 doc

* feat: add node course url config (#2897)

* feat: add node course url config

* change plugin course url

* change default doc url

* change url store

* delete unused code

* fix: global variable (#2915)

* fix: global variable

* add comment

* fix: interactive check

* locj

* perf: debug switch to global tab when click run & global var default reset (#2925)

* fix: tool course url

* fix: global var default value & wrap variable form (#2926)

* fix: add dataset tags not update render (#2927)

* feat: tool will save histories

* perf: global variables code

* perf: FE_DOMAIN config

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-10-15 20:23:18 +08:00
heheer
00638d6ee7 fix: add dataset tags not update render (#2927) 2024-10-15 17:44:50 +08:00
Archer
da281ea9ec perf: variable replace rang (#2923) 2024-10-15 16:42:42 +08:00
Archer
4f1ce640a7 Tool call support interactive node (#2903)
* feat: tool call support interactive node

* feat: interactive node tool response

* fix: tool call concat

* fix: llm history concat
2024-10-14 21:55:18 +08:00
Zhenyi-Wang
2a2b919daf feat: remove style tag when fetching url (#2913)
Co-authored-by: zhenyiwang <zhenyiwang@intl.zju.edu.cn>
2024-10-14 14:37:29 +08:00
Archer
3f01cc9c63 Doc (#2916)
* perf: community code

* update doc
2024-10-14 14:36:28 +08:00
Archer
bc70428d89 update feishu-img (#2914) 2024-10-14 12:31:07 +08:00
Archer
d55ccc9f64 Doc (#2910)
* feat: add app chat openapi (#2908)

* add chat openapi

* create question guide openapi

* change auth method

* add chat openapi doc

* delete unused code

* feat: chat openapi doc

* rerank doc

* add chat detail openapi & doc

* update chat openapi doc

---------

Co-authored-by: heheer <heheer@sealos.io>
Co-authored-by: heheer <1239331448@qq.com>
2024-10-14 10:26:57 +08:00
Nathanael
27ef4dc8ea Updated readme english (#2907) 2024-10-13 15:48:27 +08:00
papapatrick
daa5b552b1 plugins: add wiki search (#2886)
* plugins: add wiki search

* 扁平化代码

* fix: url error
2024-10-12 15:02:00 +08:00
Finley Ge
fe6c8897ce fix: resource permission indexes (#2890) 2024-10-12 09:59:59 +08:00
heheer
0dcda9822e change app template default author (#2893) 2024-10-12 09:59:16 +08:00
heheer
06e1c5d68d fix: not delete edges when deleting non-deletable nodes (#2887) 2024-10-11 12:09:33 +08:00
methol
d52da7d4e0 fix:fastgpt-sandbox image version (#2882) 2024-10-10 22:20:24 +08:00
Archer
a42707064a Update 469.md (#2880) 2024-10-10 19:51:23 +08:00
Archer
02bcab8802 fix: workflow delete error (#2879)
* fix: workflow delete key error

* fix: chat auth error
2024-10-10 19:31:51 +08:00
Archer
27291faa66 fix: dataset data list api adapt (#2878)
* fix: dataset data list api adapt

* update doc version

* perf: fedomain env

* add fedomain env
2024-10-10 18:10:19 +08:00
Archer
3878a50d0f fix: file extension check (#2876) 2024-10-10 17:35:56 +08:00
Archer
15b8353c7d Update README.md (#2875)
* Update README.md

* Update README.md
2024-10-10 16:56:59 +08:00
Archer
b950146031 update o1 config (#2874)
* update o1 config

* update yml
2024-10-10 16:52:32 +08:00
Archer
887e1d53d6 fix: o1 model cannot run in simpleApp (#2873) 2024-10-10 16:46:32 +08:00
Archer
1dcd39bfbe action (#2872) 2024-10-10 15:46:15 +08:00
Archer
01dad96618 4.8.11 test (#2871)
* fix: variables check

* remove log

* update version doc
2024-10-10 14:54:09 +08:00
Archer
13401294ad IOS safari whisper support (#2870)
* fix: variables check

* remove log

* perf: safari whisper

* feat: comment

* perf: connetion check

* doc
2024-10-10 12:24:07 +08:00
heheer
8273c96bbc fix: form-data not display in http node log (#2868)
* fix: fix form-data not display in http node log

* fix
2024-10-10 11:47:45 +08:00
Archer
61c6b1e471 Perf: delete app tip; fix: can't stop debug. (#2865)
* fix: variables check

* remove log

* perf: delete app tip

* perf: remove node code

* fix: can not stop debug

* update version

* update version intro

* fix: per error

* perf: apikey manager

* Add permission check

* update README
2024-10-10 11:30:36 +08:00
heheer
f06aca9874 fix: customize flow remove change (#2858)
* fix: customize flow remove change

* fix when mouse not in canvas
2024-10-09 22:02:17 +08:00
Archer
3a4b4a866b Team group (#2864)
* feat(member-group): Team (#2616)

* feat: member-group schema define

* feat(fe): create group

* feat: add group edit modal

* feat(fe): add avatar group component

* feat: edit group
fix: permission select menu style

* feat: bio-mode support for select-member component

* fix: avatar group key unique

* feat: group manage

* feat: divide member into group and clbs

* feat: finish team permission

* chore: adjust

* fix: get clbs

* perf: groups code

* pref: member group for team (#2706)

* chore: fe adjust
fix: remove the member from groups when removing from team
feat: change the groups avatar when updating the team's avatar

* chore: DefaultGroupName as a constant string ''

* fix: create default group when create team for root

* feat: comment

* feat: 4811 init

* pref: member group for team (#2732)

* chore: default group name

* feat: get default group when get by tmbid

* feat(fe): adjust

* member ui

* fix: delete group (#2736)

* perf: init4811

* pref: member group (#2818)

* fix: update clb per then refetch clb list

* fix: calculate group permission

* feat(fe): group tag

* refactor(fe): team and group manage

* feat: manage group member

* feat: add group transfer owner modal

* feat: group manage member

* chore: adjust the file structure

* pref: member group

* chore: adjust fe style

* fix: ts error

* chore: fe adjust

* chore: fe adjust

* chore: adjust

* chore: adjust the code

* perf: i18n and schema name

* pref: member-group (#2862)

* feat: group list ordered by updateTime

* fix: transfer ownership of group when deleting member

* fix: i18n fix

* feat: can not set member as admin/owner when user is not active

* fix: GroupInfoModal hover input do not change color

* fix(fe): searchinput do not scroll

* perf: team group ui

* doc

* remove enum

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-10-09 18:32:10 +08:00
Finley Ge
7afa8f00b8 pref: trim the input of outlink (#2860) 2024-10-09 14:05:23 +08:00
Archer
f6c5695df4 Optimize base64 storage in files to support concurrent storage (#2856)
* fix: variables check

* remove log

* perf: file img saved

* update doc
2024-10-08 12:58:33 +08:00
papapatrick
dd3a1b910b docs: add FAQ (#2833) 2024-10-08 12:36:23 +08:00
Archer
a66d9d2e98 4.8.11 test (#2850)
* fix: variables check

* remove log

* fix: variables refresh

* perf: team select button

* perf: remove change fn
2024-10-04 10:25:20 +08:00
Archer
fc6f28f26e fix: variables check (#2849)
* fix: variables check

* remove log
2024-10-01 11:11:19 +08:00
Archer
d4b99ddcab fix: login ip check (#2848) 2024-09-30 18:24:03 +08:00
Archer
df328b2a73 fix: comment node cannot save (#2847) 2024-09-30 18:16:20 +08:00
Archer
fadb389294 fix: loop node cannot save parentId (#2845) 2024-09-30 17:58:17 +08:00
Archer
7c38d1da9a 4.8.11 test (#2843)
* feat: app version test

* update doc

* fix: paging num error

* fix: doc api domain

* rename variable

* perf: memment node min size
2024-09-30 17:28:03 +08:00
heheer
7c829febec feat: add context menu & comment node (#2834)
* feat: add comment node

* useMemo
2024-09-29 10:08:19 +08:00
heheer
7bdff9ce9c perf: change tool params type label & enum input conditional rendering (#2835) 2024-09-28 18:00:22 +08:00
heheer
1599d144ce feat: add tool params node & tool params add array type (#2824)
* add tool params node

* add tool params enum

* node response

* tool add array type params

* fix tool params

* fix

* fix

* fix
2024-09-28 15:58:55 +08:00
Archer
f2749cbb00 4.8.11 perf (#2832)
* save toast

* perf: surya ocr

* perf: remove same model name

* fix: indexes

* perf: ip check

* feat: Fixed the version number of the subapplication

* feat: simple app get latest child version

* perf: update child dispatch variables

* feat: variables update doc
2024-09-28 15:31:25 +08:00
heheer
f7a8203454 fix:variable not update in nested workflow runs (#2830) 2024-09-28 13:59:35 +08:00
Archer
d95f71e9e3 Update dataset_engine.md (#2829) 2024-09-28 10:08:54 +08:00
Deepturn
a43d845298 Update configuration.md (#2828)
修改 claude
2024-09-28 09:57:16 +08:00
papapatrick
3e64f46d92 fix: change ip detect url (#2827) 2024-09-27 22:19:48 +08:00
yiming-alicloud
0335f16742 submit ocr module (#2815) 2024-09-27 16:07:28 +08:00
Archer
98dbec2cf7 4.8.11 fix (#2822)
* fix: tool choice hostiry error

* fix: chat page auth error redirect

* perf: ip redirect tip

* feat: fedomain env

* fix: tool desc empty

* feat: 4811 doc
2024-09-27 15:52:33 +08:00
silencezhang7
d259eda6b4 新增BI圖標功能-柱狀圖 (#2779)
* 新增BI圖標功能-柱狀圖

* 新增BI图表功能-柱狀圖,优化代码,删除无用代码

* 优化生成逻辑,支持插件手动选择图表类型:目前支持柱状图,折线图,饼图

* 修改包名称,完成基础图表
2024-09-27 13:50:42 +08:00
heheer
7c8f2ab6f5 perf: support prompt editor dynamic height increase & modify aichat placeholder (#2817) 2024-09-27 13:45:44 +08:00
papapatrick
691476c821 feat: add login page ip detect (#2819)
* feat: add login page ip detect

* code perf
2024-09-27 13:39:10 +08:00
Archer
efcb53cd6d Rename node(#2814) 2024-09-26 18:25:42 +08:00
Archer
21ab855871 perf: stream response (#2813)
* perf: stream response

* fold code
2024-09-26 18:09:01 +08:00
heheer
aee5de29c7 fix: tool node fold (#2811)
* fix: tool node fold

* delete console
2024-09-26 18:04:43 +08:00
heheer
78d15c2a2f fix: form input value type & default form & ui (#2802)
* fix: form input value type & default form & ui

* variables form ui
2024-09-26 16:33:38 +08:00
Archer
54e0a0eab1 4.8.11 code perf (#2804)
* perf: support child layout

* perf: user form ui

* perf: plugin tool output code

* perf: code

* perf: node fold hook
2024-09-26 16:27:28 +08:00
papapatrick
e6bad93b32 fix: mobile history slider records disappear (#2806)
* fix: mobile history slider records disappear

* change h
2024-09-26 16:26:00 +08:00
heheer
12d7ba5d73 feat: support workflow node fold (#2797)
* feat: support workflow node fold

* fix

* fix
2024-09-26 15:44:04 +08:00
Zhenyi-Wang
5ad8c81ef3 fix: 网页抓取:正确处理//开头的超链接 (#2803)
Co-authored-by: zhenyiwang <zhenyiwang@intl.zju.edu.cn>
2024-09-26 14:53:24 +08:00
papapatrick
cb6fe9d0da feat: support select field as tool output (#2798)
* feat: support select field as tool output

* defaultOutput
2024-09-26 14:37:06 +08:00
heheer
1cf76ee7df feat: add form input node (#2773)
* add node

* dispatch

* extract InputTypeConfig component

* question tip

* fix build

* fix

* fix
2024-09-26 13:48:03 +08:00
Archer
edebfdf5ef fix: ts (#2799) 2024-09-26 13:20:05 +08:00
Archer
86436d55ff 4.8.11 test (#2794)
* perf: version list type

* perf: add node default value

* perf: snapshot status

* fix: version detail auth

* fix: export defalt
2024-09-26 11:02:09 +08:00
Archer
e31d6ec2c1 remove invalid code (#2785) 2024-09-25 09:49:51 +08:00
heheer
6bb10ca150 perf: optimize simple app history (#2782)
* simple app history

* ui

* extract context content into hooks
2024-09-24 21:09:59 +08:00
Archer
7aa75f8ee0 fix: chat page render performance (#2784)
* fix: chat page render performance

* fix: ts
2024-09-24 18:05:27 +08:00
Archer
afd2c394d8 Perf ui detail (#2775)
* perf: tool response tip

* perf: image extract

* perf: user question tool desc

* fix: simple mode load app module

* perf: simple mode plugin version

* perf: share page reload

* refresh simple mode data
2024-09-24 18:04:11 +08:00
Archer
434c03c955 Record scroll test (#2783)
* perf: history add scrollList (#2696)

* perf: chatHistorySlider add virtualList

* perf: chat records add scrollList

* delete console

* perf: ScrollData add ref props

* 优化代码

* optimize code && add line breaks

* add total records display

* finish test

* perf: ScrollComponent load data

* perf: Scroll components load

* perf: scroll code

---------

Co-authored-by: papapatrick <109422393+Patrickill@users.noreply.github.com>
2024-09-24 17:13:32 +08:00
Archer
f4d4d6516c Support simpleApp select workflow (#2772)
* fix: share page id error

* feat: simple workflow support childApp tool

* perf: aichat box animation
2024-09-23 15:43:57 +08:00
zqhong
b6833ca3ea updated: docs/docker.md,修改 config.json 的地址 (#2771)
原先 config.json 的地址是:
https://github.com/labring/FastGPT/blob/main/projects/app/data/config.json

如果没有考虑太多,直接 wget "https://github.com/labring/FastGPT/blob/main/projects/app/data/config.json",则会下载到网页版的 `config.json`。这不是一个 json 文件,而是 github 的网页。

所以,修改为 `https://raw.githubusercontent.com/labring/FastGPT/refs/heads/main/projects/app/data/config.json` 更加合理
2024-09-23 15:24:55 +08:00
Archer
3ab934771f 4.8.11 perf (#2768)
* perf: watch local

* perf: dataset list ui

* perf: Check workflow invalid edges in saved

* remove log

* perf: Forbid touch scale

* perf: rename dataset process

* feat: support child app unstream mode

* feat: Dispatch child app will record detail

* feat: Save childApp run log

* fix: share page init error

* perf: chatId reset
2024-09-23 10:17:49 +08:00
Archer
4245ea4998 Update README.md (#2769) 2024-09-22 14:40:09 +08:00
Archer
9eb02b7e38 feat: plan index;flat i18n and add variable value type (#2762)
* feat: plan index

* flat i18n and add variable value type

* fix: ts

* perf: free plan tip
2024-09-20 17:36:33 +08:00
Archer
75af549c7f Plugin support select file (#2756)
* feat: plugin support upload files (#2716)

* feat: plugin support file upload

* file history

* fix history & chattest

* chore: code

* plugin config icon & file preview padding

* perf: undefined fn

* fix: plugin file numbers & plugin template add config (#2743)

* perf: run plugin without human message (#2749)

* perf: run plugin without human message

* fix build

* fix build

* rename node

* perf: ui

* perf: plugin rerun with last params & plugin log add file (#2755)

* perf: plugin run with last params & plugin log add file

* delete console

* perf: plugin refresh code

* fix: ts

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-09-20 14:12:58 +08:00
Archer
5e7c97b7b8 4.8.11 test fix (#2746)
* fix: refresh tool param

* perf: load image message

* fix: cannot remoce externalReadUrl

* perf: variables update dom

* perf: empty response tip

* fix: conflict
2024-09-20 11:28:58 +08:00
Finley Ge
6c2a7574c3 perf: app list (#2747) 2024-09-20 10:16:27 +08:00
Finley Ge
ca9f36ef9f chore: Jest Testing structure (#2707)
* deps: add jest deps

* chore: mock

* feat: use mocinggoose

* feat: jest

* chore: remove babel.config.js
2024-09-19 13:34:03 +08:00
Archer
265434799f Add externalfile api params (#2745)
* feat: external dataset api

* perf: doc
2024-09-19 13:28:55 +08:00
Archer
258de4471e Update 4810.md (#2744) 2024-09-19 11:34:33 +08:00
Archer
d83bb9d2c7 remove code (#2735) 2024-09-18 13:47:42 +08:00
Archer
093bfa2134 feat: dataset quote role support system; fix: adapt o1 model (#2733)
* feat: dataset quote support system role

* perf: adapt dataset quote role

* fix: adapt o1 model
2024-09-18 13:38:50 +08:00
Archer
539bc77934 fix: aichat response (#2728) 2024-09-17 23:07:30 +08:00
Archer
aabbe06e41 Update intro.md (#2726) 2024-09-16 16:18:05 +08:00
Archer
bb22fa6548 Update 4810.md (#2725) 2024-09-16 16:15:13 +08:00
Archer
bd2509bd41 Update doc and domain (#2722)
* feat: doc

* replace domain

* README
2024-09-16 01:39:50 +08:00
Archer
561516eeef feat: doc (#2721) 2024-09-15 23:02:52 +08:00
Archer
2bdda4638d Feat: Workflow loop node;feat: support openai o1;perf: query extension prompt;fix: intro was not delivered when the datase was created (#2719)
* feat: loop node (#2675)

* loop node frontend

* loop-node

* fix-code

* fix version

* fix

* fix

* fix

* perf: loop array code

* perf: get histories error tip

* feat: support openai o1

* perf: query extension prompt

* feat: 4811 doc

* remove log

* fix: loop node zindex & variable picker type (#2710)

* perf: performance

* perf: workflow performance

* remove uninvalid code

* perf:code

* fix: invoice table refresh

* perf: loop node data type

* fix: loop node store assistants

* perf: target connection

* feat: loop node support help line

* perf: add default icon

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-09-15 22:41:05 +08:00
Finley Ge
1ebc95a282 feat: specify the api's auth type (#2715) 2024-09-15 13:06:51 +08:00
Archer
d0e8f7203c perf: plugin support files (#2708) 2024-09-14 15:11:44 +08:00
Archer
092bb9ab17 feat: sandbox support str to base64 function;feat: compiance text ui (#2702)
* feat: sandbox strToBase64 function

* feat: compiance text ui
2024-09-13 17:54:22 +08:00
Patrickill
9de8849193 优化代码 2024-09-13 17:25:45 +08:00
Patrickill
3d5da27079 add ComplianceTip for dataset&chat 2024-09-13 17:25:45 +08:00
Archer
c454fe07cb Update 4810.md 2024-09-13 15:28:56 +08:00
Patrickill
3e144c4227 remove the trailing #xx when copy 2024-09-13 13:18:08 +08:00
Archer
d8b2887625 feat: comment (#2697) 2024-09-13 11:37:32 +08:00
勤劳上班的卑微小张
ba3b3280b4 Fixed an issue where chunk splitter were lost when clicking on the link sync 2024-09-13 11:08:00 +08:00
Archer
390b8f5b86 Update index.tsx 2024-09-12 18:23:59 +08:00
Finley Ge
d74e6a47d6 fix: chat log get member info 2024-09-12 18:23:59 +08:00
shilin66
424c745cbb fix: Stream模式下使用toolChoice,toolCall的function和type可能为null 2024-09-12 18:12:17 +08:00
archer
0abbcf1401 fix: ts 2024-09-12 18:11:34 +08:00
Archer
da1126ed3c fix: share init error (#2690) 2024-09-12 18:04:31 +08:00
Archer
56281d92f2 Perf: worfklow scroll cannot wheel. Adapt wrokflow skip circle. Change tab alway output stream (#2688)
* perf: teaxtarea no wheel

* remove render error

* adapt workflow skip circle

* perf: change tab can stream output
2024-09-12 17:22:52 +08:00
Archer
fde1618af2 Workflow experience optimization (#2681)
* perf: workflow handle connect

* feat: pan drag mode

* perf: workflow keyboard and touchTable adapt

* perf: teaxtarea no wheel

* remove render error
2024-09-12 17:10:39 +08:00
Archer
22bb4c1e2e Update official_account.md (#2677) 2024-09-12 17:10:39 +08:00
Archer
6331f4b845 perf scroll components (#2676)
* perf: add scroll list && virtualist (#2665)

* perf: chatHistorySlider add virtualList

* perf: dataCard add scroll

* fix: ts

* perf: scroll list components

* perf: hook refresh

---------

Co-authored-by: papapatrick <109422393+Patrickill@users.noreply.github.com>
2024-09-11 19:53:49 +08:00
湛露先生
5101c7a6dc Fix typo location of python bge-rerank (#2674)
Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2024-09-11 19:46:12 +08:00
Archer
02bf400bf3 Add workflow rename; Fix: userselect chatId unrefresh (#2672)
* feat: workflow node support rename

* perf: push data to training queue

* fix: userselect chatId unrefresh
2024-09-11 15:27:47 +08:00
Archer
11cbcca2d4 Update 4810.md (#2668) 2024-09-11 10:09:56 +08:00
Finley Ge
34422f9549 fix: sso (#2661) 2024-09-10 18:24:29 +08:00
Archer
aeba79267a Workflow deep and workflow connection performance (#2664)
* feat: Workflow dispatch deep

* perf: workflow connection
2024-09-10 16:57:59 +08:00
Archer
7473be5922 pay pre wrap (#2659) 2024-09-10 14:04:57 +08:00
Finley Ge
de59b3d2e5 fix: app select dataset (#2660) 2024-09-10 13:50:23 +08:00
Archer
08190c2f0d fix: toolNode max tokens and toolDescription i18n (#2655)
* fix: toolNode max tokens

* fix: toolNode max tokens

* fix: workflow  tool desc i18n
2024-09-09 22:26:20 +08:00
heheer
6a85c8c2b6 fix: cq template missing chatconfig (#2654) 2024-09-09 19:37:15 +08:00
Archer
bbdab1d40e fix: entry (#2652) 2024-09-09 16:21:22 +08:00
Finley Ge
78ad2791cd chore: openapi doc generator (#2644)
* chore: extract the type and comment from apis

* chore: template code

* feat: openapi

* pref: openapi generator. send into public/openapi folder
2024-09-09 15:43:09 +08:00
Archer
5f3c8e9046 Fix: workflow init status (#2649)
* i18n

* fix: entry
2024-09-09 15:37:20 +08:00
papapatrick
30057f01a6 fix: workflow i18n (#2645)
* fix: workflow i18n

* i18n completion
2024-09-09 14:36:35 +08:00
Archer
3ea185315d fix: workflow clear repeat check run (#2646) 2024-09-09 14:14:32 +08:00
Finley Ge
a1ae08f62b perf: logs, auth root as super admin, etc (#2615)
* chore: usePagination hook type

* feat: chat log show outlinkuid or tmb avatar and name

* fix: ts error for pagination

* feat: auth root
2024-09-09 10:05:18 +08:00
Archer
91ec895fd2 fix: oauth (#2640)
* fix: oauth

* remove log

* fix: oauth dispatch
2024-09-08 20:56:33 +08:00
xianlezheng
1a33642635 Fixs:当最后一条数据因大模型没返回数据时导致调试时前端报错。 (#2637)
在lastMessageValue取值时需要提前判断空值。

Co-authored-by: zhengxianle <nopanic@ilikejobs.com>
2024-09-08 15:26:05 +08:00
archer
e9681c8ed5 log 2024-09-08 15:03:29 +08:00
imgbot[bot]
69ff65973f [ImgBot] Optimize images (#2639)
*Total -- 6,985.44kb -> 4,501.25kb (35.56%)

/python/sensevoice/app/iic/SenseVoiceSmall/fig/inference.png -- 935.23kb -> 292.81kb (68.69%)
/python/sensevoice/app/iic/SenseVoiceSmall/fig/asr_results.png -- 238.19kb -> 76.62kb (67.83%)
/python/sensevoice/app/iic/SenseVoiceSmall/fig/sensevoice.png -- 879.78kb -> 332.45kb (62.21%)
/python/sensevoice/app/iic/SenseVoiceSmall/fig/ser_table.png -- 318.12kb -> 145.67kb (54.21%)
/docSite/assets/imgs/wechat6.png -- 208.98kb -> 119.19kb (42.97%)
/docSite/assets/imgs/collection-tags-2.png -- 83.02kb -> 52.57kb (36.67%)
/.github/imgs/intro3.png -- 258.74kb -> 167.94kb (35.09%)
/python/sensevoice/app/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/fig/struct.png -- 27.26kb -> 17.81kb (34.66%)
/.github/imgs/intro1.png -- 259.12kb -> 173.33kb (33.11%)
/docSite/assets/imgs/fileinpu-2.png -- 214.61kb -> 147.20kb (31.41%)
/.github/imgs/intro4.png -- 227.64kb -> 158.71kb (30.28%)
/docSite/assets/imgs/questionGuide.png -- 38.89kb -> 27.95kb (28.13%)
/python/sensevoice/app/iic/SenseVoiceSmall/fig/aed_figure.png -- 115.93kb -> 85.46kb (26.28%)
/.github/imgs/intro2.png -- 370.64kb -> 273.45kb (26.22%)
/docSite/assets/imgs/offiaccount-9.png -- 38.62kb -> 28.89kb (25.18%)
/docSite/assets/imgs/collection-tags-3.png -- 125.71kb -> 98.27kb (21.83%)
/docSite/assets/imgs/offiaccount-3.png -- 90.57kb -> 71.85kb (20.66%)
/docSite/assets/imgs/feishu-bot-4.png -- 85.73kb -> 68.44kb (20.17%)
/docSite/assets/imgs/feishu-bot-2.png -- 92.49kb -> 73.94kb (20.05%)
/docSite/assets/imgs/offiaccount-1.png -- 99.70kb -> 79.77kb (19.98%)
/docSite/assets/imgs/feishu-bot-1.png -- 154.50kb -> 126.89kb (17.87%)
/docSite/assets/imgs/feishu-bot-6.png -- 160.72kb -> 133.59kb (16.88%)
/docSite/assets/imgs/fileinpu-6.jpg -- 179.04kb -> 150.60kb (15.88%)
/docSite/assets/imgs/feishu-bot-8.png -- 43.64kb -> 36.83kb (15.61%)
/docSite/assets/imgs/offiaccount-7.png -- 73.88kb -> 62.58kb (15.29%)
/python/sensevoice/app/iic/SenseVoiceSmall/fig/ser_figure.png -- 194.25kb -> 167.12kb (13.97%)
/docSite/assets/imgs/feishu-bot-5.png -- 169.50kb -> 146.65kb (13.48%)
/docSite/assets/imgs/offiaccount-8.png -- 129.99kb -> 114.37kb (12.02%)
/docSite/assets/imgs/offiaccount-6.png -- 131.04kb -> 115.30kb (12.01%)
/docSite/assets/imgs/feishu-bot-3.png -- 165.20kb -> 145.86kb (11.71%)
/docSite/assets/imgs/offiaccount-4.png -- 158.75kb -> 140.69kb (11.38%)
/docSite/assets/imgs/feishu-bot-7.png -- 95.10kb -> 84.29kb (11.37%)
/docSite/assets/imgs/offiaccount-5.png -- 158.34kb -> 140.59kb (11.21%)
/docSite/assets/imgs/offiaccount-2.png -- 163.30kb -> 145.59kb (10.84%)
/docSite/assets/imgs/gpt-translate-example.png -- 299.24kb -> 297.98kb (0.42%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2024-09-08 10:23:27 +08:00
Archer
52ac445557 fix: mobild sso login (#2636)
* fix: mobild sso login

* feat: max call tool times
2024-09-07 18:24:38 +08:00
Archer
d45cb2f84a Update 4810.md (#2634) 2024-09-06 17:29:23 +08:00
Archer
1cb71c6bfb 4.8.10 perf (#2633)
* perf: i18n init

* i18n

* 4.8.10 doc

* doc
2024-09-06 17:22:24 +08:00
papapatrick
fb59b60761 addition i18n (#2631) 2024-09-06 16:57:47 +08:00
Archer
9334a0dcf6 4.8.10 perf (#2630)
* perf: i18n init

* i18n

* fix: user select end status

* fix: interactive workflow

* fix: restart chat

* fix: oauth login
2024-09-06 15:45:02 +08:00
Archer
c614f8b9ca Perf: i18n change and captcha code. (#2625)
* perf: send captcha check

* perf: back router

* perf: i18n init

* perf: ui

* i18n

* perf: ui duration
2024-09-05 23:01:12 +08:00
heheer
478386c612 chore: template author name & icon border radius (#2624) 2024-09-05 20:44:31 +08:00
papapatrick
dfcffc7fc1 I18n: Completed i18n&&proofread some translations (#2619)
* i18n-1

* i18n: Completed the remaining parts of i18n and proofread some translations

* i18n: add default lang&&add app template i18n
2024-09-05 17:29:36 +08:00
Finley Ge
b4238257b6 feat: dynamic website crawler (#2609)
* feat: cheerio returns cherrio.load for pro version website sync

* chore: rename
2024-09-05 14:49:57 +08:00
Archer
38f47956cd fix: ts (#2621) 2024-09-05 14:04:45 +08:00
Archer
7fed4d697f perf: captcha code (#2620)
* perf:  captcha code

* perf: dockerfile
2024-09-05 13:41:11 +08:00
EthanD4869
5ed89130ef add sensevoice & cosevoice (#2562)
Signed-off-by: EthanD <EthanD4869@gmail.com>
Co-authored-by: EthanD <EthanD4869@gmail.com>
2024-09-05 13:36:11 +08:00
Archer
3671e55001 4.8.10 test (#2618)
* perf: menu arrow ui

* perf: http node placeholder

* perf: http node form input

* perf: chatBox performance
2024-09-05 11:49:13 +08:00
papapatrick
3bcc3430fb feat: add captcha (#2613)
* feat: captcha

* add borderRadius

* code perf
2024-09-05 11:46:51 +08:00
heheer
d6233cd7b1 fix: add http params focus & ui (#2611) 2024-09-04 13:37:29 +08:00
Archer
64708ea424 Update userselect ux (#2610)
* perf: user select ux and api

* perf: http variables replace code

* perf: http variables replace code

* perf: chat box question guide adapt interactive

* remove comment
2024-09-04 11:11:08 +08:00
heheer
85a11d08b2 feat: http body type & http input support editor variable (#2603)
* feat: http body type & http input support editor variable

* fix type

* chore: code

* code
2024-09-03 23:43:21 +08:00
papapatrick
a7569037fe perf: modal add size props&menu add menuItemStyles (#2600)
* perf: modal add size props&menu add menuItemStyles

* delete minH

* mobile adaptation

* 优化部分代码
2024-09-03 14:56:09 +08:00
Archer
4726034344 Update official_account.md (#2604) 2024-09-03 14:41:46 +08:00
Archer
9a57e94b79 4.8.10 test (#2601)
* perf: workflow children run params

* feat: workflow userId

* fix: ui size

* perf: Markdown whitespace and ai images split

* fix: openai sdk ts
2024-09-03 13:43:56 +08:00
Archer
761e35c226 4.8.10 workflow perf (#2596)
* perf: run plugin variables init

* perf: init free plan

* perf: dataset data ui

* perf: workflow theme

* perf: plugin input modal ui

* perf: workflow dispatch

* fix: account ui

* feat: 4810 doc
2024-09-03 09:56:33 +08:00
papapatrick
5ebe0017a0 perf: user default avatar (#2594)
* perf: user default avatar

* refactor: 修改文件路径
2024-09-02 21:04:49 +08:00
papapatrick
036097243a perf: workflow&plugins json config import and export (#2592) 2024-09-02 15:05:58 +08:00
heheer
84de95d294 fix: plugin input type options & save button (#2590) 2024-09-02 13:06:48 +08:00
papapatrick
fdab383b26 Style-dataset-2.5 (#2580)
* style: dataset detail page 2.5

* fix merge error

* fix: flash bug

* fix: build error

* revert: 滚动变回分页
2024-09-02 10:00:55 +08:00
Archer
060492dbf7 feat: admin add custom plugin (#2582)
* feat: admin add custom plugin

* refresh plugins

* plugin input box ui

* fix: run plugin varialbes error

* perf: comment

* fix: ts
2024-08-30 22:45:35 +08:00
heheer
9d5fd24085 feat: plugin input type add select and custom var (#2571)
* feat: plugin input type add select and custom var

* fix

* fix ui

* fix

* fix
2024-08-30 18:03:04 +08:00
heheer
903f39fe17 feat: add plugin instruction config (#2579)
* feat: add plugin instruction config

* fix build
2024-08-30 17:12:57 +08:00
Archer
2ef98c24be 4.8.10 test (#2578)
* fix: auth error

* perf: refresh members

* fix: variable run

* fix: runtime check

* fix: dataset info show
2024-08-30 10:27:07 +08:00
Archer
6d00f73e91 4.8.10 test (#2573)
* feat: more debug response

* fix: debug edge status

* perf: doc

* fix: workflow edge check

* perf: i18n

* package.json

* perf: markdown mask
2024-08-29 23:19:39 +08:00
Archer
813eaacfd0 4.8.10 fix (#2572)
* fix: circle workflow response modal

* perf: workflow runtime check
2024-08-29 18:00:56 +08:00
Archer
322ca757af 4.8.10 test (#2568)
* perf: i18n perf

* fix: detail=fasle response

* fix: dataset tag load repeat

* feat :doc

* perf: rename fun

* code comment
2024-08-29 14:51:34 +08:00
heheer
a177a302d4 fix: plugin input (#2567) 2024-08-29 14:19:16 +08:00
heheer
034108c218 fix: global variable during debug & variable update textarea rerender (#2553)
* fix: global variable during debug & variable update textarea rerender

* update var node use prompt editor

* fix
2024-08-29 14:09:20 +08:00
heheer
0632dfed80 fix: tags manage (#2556)
* fix: tags manage

* fix infinite invoke
2024-08-29 12:04:45 +08:00
居里栈栈
6c16fa9166 Fix: Custom delimiter does not take effect when document type is link (#2565)
Co-authored-by: 勤劳上班的卑微小张 <jiazhan.zhang@ggimage.com>
2024-08-29 11:16:17 +08:00
papapatrick
ac4854a47b template add i18n (#2558)
* template add i18n

* add English translation
2024-08-28 21:33:03 +08:00
Archer
b9a6b71fe9 perf: Dataset new ui (#2555)
* perf: dataset detail ui

* fix: collection tag modal

* perf: data card support markdown

* fix :ts
2024-08-28 12:48:55 +08:00
papapatrick
aba50e958e style: 知识库二期 (#2554) 2024-08-28 12:17:45 +08:00
Archer
52cbfeace3 feat: custom read file service (#2548) 2024-08-28 11:35:06 +08:00
papapatrick
bebf565c06 style: dataset detail page style refactor (#2501)
* style: dataset detail page style refactor

* remove px

* remove py px px

* change shadow

* style: 2期联调结束

* 优化部分代码
2024-08-28 10:17:49 +08:00
Archer
c9bb39d802 4.8.10 test (#2539)
* fix: i18n

* fix: null value

* fix: workflow refresh variables

* perf: copy data

* doc

* perf: run app code

* perf: variable store

* update doc

* perf: pay ui

* fix: log header ui

* fix: log header ui
2024-08-27 19:48:42 +08:00
papapatrick
454a479fd8 style: pay page perf (#2535)
* style: pay page perf

* perf: package status logic && add pay text
2024-08-27 18:56:08 +08:00
heheer
d057ad3a45 fix: global variable persist during api calls (#2544) 2024-08-27 18:23:15 +08:00
heheer
a206d77287 fix: run app node display (#2546) 2024-08-27 18:16:35 +08:00
不吃辣不喝酒
14bd1b5404 fix: toolCall.function.arguments maybe undefined (#2545)
当arg===undefined时,会导致 currentTool.function.arguments += arg; 字符串拼接出问题。
2024-08-27 17:41:59 +08:00
Archer
450167c951 App run node update (#2542)
* feat(workflow): allow apps to be invoked like plugins (#2521)

* feat(workflow): allow apps to be invoked like plugins

* fix type

* Encapsulate SSE response methods (#2530)

* perf: sse response fn

* perf: sse response

* fix: ts

* perf: not ssl copy

* perf: myselect auto scroll

* perf: run app code

* fix: app plugin (#2538)

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-08-27 16:43:19 +08:00
heheer
67445b40bc fix: global variable key repeat & value type (#2540) 2024-08-27 16:04:00 +08:00
heheer
d3731d221a fix: change workflow start node output when change file config (#2527) 2024-08-27 13:47:26 +08:00
Archer
f6e2d13e21 fix: load member list (#2536)
* fix: load member list

* fix: extract field type error

* fix: workflow runtime error

* fix: ts
2024-08-27 12:07:57 +08:00
Carson Yang
77e6cf4157 Docs: update baseURL (#2533)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-08-27 09:47:20 +08:00
heheer
fd3f32d083 fix welcome text rerender & add copyright (#2525) 2024-08-26 16:03:15 +08:00
Archer
f7544ea47b 4.8.10 test fix (#2517)
* fix: chat config load error

* prompt perf
2024-08-26 14:26:45 +08:00
Finley Ge
a1a9a0b463 chore: add i18n query script (#2518) 2024-08-26 12:31:30 +08:00
Finley Ge
dbfe1fca31 fix: fix i18n (#2516) 2024-08-26 12:23:19 +08:00
Archer
94f3b7f2d6 conversion points (#2514) 2024-08-26 10:48:02 +08:00
Archer
22a0f6bcfa perf: plan tip (#2513) 2024-08-26 10:43:52 +08:00
Archer
c1d08c0ccc New pay (#2484) (#2510)
* New pay (#2484)

* remove sub status

* feat: new pay mode

* fix: ts

* limit
2024-08-26 09:52:09 +08:00
Archer
a4c19fbd0a 4810 doc (#2504)
* 4810 doc

* doc

* feishu doc

* 4811 文档
2024-08-26 01:00:11 +08:00
Archer
ace84f015e 4.8.10 test (#2499)
* 48190 init

* path
2024-08-25 01:06:18 +08:00
heheer
bb7adc96ed perf: disabled change version when change version name (#2497)
* perf: disabled change version when change version name

* fix

* fix

* toast condition
2024-08-25 00:49:33 +08:00
Archer
ad63210f45 perf: onpublish app (#2498) 2024-08-24 23:43:52 +08:00
Archer
fa106eb24c fix: dispatch workflow skip status (#2496) 2024-08-24 23:36:59 +08:00
heheer
3248e95d53 fix: undo & redo (#2493)
* fix: undo & redo

* fix

* fix
2024-08-24 23:15:28 +08:00
Archer
3e57c7f559 perf: workflow code (#2492)
* perf: workflow code

* perf: converpoints ui

* perf: account page ui
2024-08-23 17:56:38 +08:00
Finley Ge
eaaf6f5978 feat(fe): balance conversion button and modal (#2491)
* feat: add balance conversion api declaration

* feat(fe): add conversion modal

* fix: show button when standplan and the user has manage permission

* feat: hide balance when <= 0
2024-08-23 17:14:07 +08:00
heheer
6288dc9492 feat: undo-redo & edit snapshots (#2436)
* feat: undo-redo & edit snapshots

* fix merge

* add simple history back

* fix some undo

* change app latest version

* fix

* chatconfig

* fix snapshot

* fix

* fix

* fix

* fix compare

* fix initial

* fix merge:

* fix useEffect

* fix snapshot initial and saved state

* chore

* fix

* compare snapshot

* nodes edges useEffct

* fix chatconfig

* fix

* delete unused method

* fix

* fix

* fix

* default version name
2024-08-23 15:58:43 +08:00
Archer
de573e4303 4.8.10 test fix (#2488)
* perf: update vision default

* fix: update dataset default permission

* perf: no network request
2024-08-23 14:57:52 +08:00
Archer
b3acd570f7 4.8.10 test (#2470)
* i18n

* perf: invoice type

* fix: helper line change error

* perf: base64 image

* perf: app list ui

* perf: upload max size check

* perf: init system plugin

* perf: dataset list ui

* perf: http node ui

* perf: ui

* perf: invoice tip

* fix: ts

* perf: invoice table

* perf: null check
2024-08-22 13:43:19 +08:00
Archer
19904e648b Update official_account.md (#2472) 2024-08-22 13:38:52 +08:00
Archer
785ba03239 Update official_account.md (#2471) 2024-08-22 13:37:05 +08:00
papapatrick
366fe0eada perf: invoice page refresh after apply (#2469)
* perf: 发票申请弹窗成功后刷新

* refactor: 组件内拿invoiceTab
2024-08-22 12:24:33 +08:00
Archer
225554f22c Update README.md (#2468) 2024-08-22 10:12:40 +08:00
heheer
5627a4bfde feat: add http node timeout (#2465)
* fix $ in replacement string misinterpreted as regex special character

* add http timeout

* delete console log
2024-08-21 20:23:35 +08:00
papapatrick
113c57bcbe style: database refactor (#2460)
* fix: dataset folder modal

* style: dataset style refactor

* sideTag i18n pef
2024-08-21 18:15:05 +08:00
Finley Ge
649de7f028 pref: login/forgetpass texts (#2457)
* chore: fastgptfeconfig type

* pref: login, forget password, texts
2024-08-21 14:46:53 +08:00
Archer
26d800981c 4.8.10 test (#2433)
* perf: node template ui

* perf: select tool path load error

* pay i18n

* i18n

* perf: oneapi code

* perf: doc

* node templates

* perf: usage table role

* feat: count vector total by datasetId

* perf: user select tip and tempalte market ui

* i18n

* perf: sso config tip
2024-08-20 18:31:40 +08:00
papapatrick
40b1d22d9d style: 知识库新列表 (#2448)
* style: 知识库新列表

* i18n adjust

* fix:  i18n
2024-08-20 17:29:41 +08:00
Finley Ge
2d0e6bd085 feat: SSO (#2414)
* feat: sso button

* feat: sso

* feat: sso callback url should be a page

* feat: sso redirect page

* chore: sso fe adjusting
2024-08-20 17:09:29 +08:00
Finley Ge
226cae5ab9 perf: add docs entries in the publish page (#2449) 2024-08-20 17:08:45 +08:00
Finley Ge
238381256d feat: custom-censor-check (#2437)
* feat: custom-censor-check

* chore: adjust
2024-08-20 10:05:19 +08:00
Archer
5fab3734fa Invoice (#2435)
* feat: invoice (#2293)

* feat: default voice header

* add i18n

* refactor: 优化代码

* feat: 用户开票

* refactor: 代码优化&&样式联调 (#2384)

* Feat: invoice upload (#2424)

* refactor: 验收问题&&样式调整

* feat: 文件上传

* 小调整

* perf: invoice ui

---------

Co-authored-by: papapatrick <109422393+Patrickill@users.noreply.github.com>
2024-08-19 17:44:48 +08:00
papapatrick
884c2d9553 fix: i18n display (#2429) 2024-08-19 15:15:33 +08:00
Finley Ge
918d7fb257 docs(offiaccount): add offiaccount docs (#2427) 2024-08-19 12:17:15 +08:00
heheer
0719f7bd4a chore(ui): dataset-tags (#2415) 2024-08-16 18:32:20 +08:00
Finley Ge
9b74437417 fix(publish): generate correct chat history and usage (#2412) 2024-08-16 15:59:17 +08:00
heheer
bebbba399a perf: change value desc position & fix templates (#2413) 2024-08-16 15:58:21 +08:00
Archer
14e22687e3 4.8.10 test (#2411)
* update doc

* update doc

* update doc imgs
2024-08-16 13:27:44 +08:00
Archer
61347d9aaa 4.8.10 test (#2401)
* perf: i18n

* perf: i18n and img tip

* perf: readme

* perf: hide tool ai response

* fix: copy app

* fix: parse image url regx

* perf: folder collection forbid update
2024-08-16 13:09:17 +08:00
折戟沉沙、丿
5bf0dd0ef1 feat(http): text/plain is allowed (#2376)
* feat(http): plan/txt is allowed

* Update http468.ts

* Update http468.ts

* body 添加string类型
2024-08-16 10:03:43 +08:00
何翀彬
5545e84bb9 调整.env.template关于mongodb的说明,使得更易于理解 (#2398) 2024-08-16 09:58:50 +08:00
Archer
86c27e85ef 4.8.10 perf (#2378)
* perf: helpline code

* fix: prompt call stream=false response prefix

* fix: app chat log auth

* perf: new chat i18n

* fix: milvus dataset cannot export data

* perf: doc intro
2024-08-15 13:12:39 +08:00
Archer
fdeb1590d7 User select node (#2397)
* feat: add user select node (#2300)

* feat: add user select node

* fix

* type

* fix

* fix

* fix

* perf: user select code

* perf: user select histories

* perf: i18n

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-08-15 12:27:04 +08:00
Finley Ge
f8b8fcc172 feat(publish): Wechat OffiAccount (#2386)
* feat: OffiAccount fe

* feat: offiaccount

* fix: wecom requires AES key

* fix: OffiAccountEditModal

* chore: change wechat svg icon

* chore: add offiaccount svg

* chore: hide unimplemented wecom entries
2024-08-15 12:06:13 +08:00
changan-77
5bbaa8264a Update feishu.md (#2382) 2024-08-14 11:45:03 +08:00
Archer
0f3418daf5 Publish app - feishu and wecom (#2375)
* feat(app publish): feishu bot (#2290)

* feat: feishu publish channel fe

* feat: enable feishu fe,
feat: feishu token api

* feat: feishu bot

* chore: extract saveChat from projects/app

* chore: remove debug log output

* feat: Basic Info

* chore: feishu bot fe adjusting

* feat: feishu bot docs

* feat: new tmpData collection for all tmpdata

* chore: compress the image

* perf: feishu config

* feat: source name

* perf: text desc

* perf: load system plugins

* perf: chat source

* feat(publish): Wecom bot (#2343)

* chore: Wecom Config

* feat(fe): wecom config fe

* feat: wecom fe

* chore: uses the newest editmodal

* feat: update png; adjust the fe

* chore: adjust fe

* perf: publish app ui

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-08-13 21:52:18 +08:00
heheer
7417de74da feat: add workflow helperline (#2356)
* feat: add workflow helperline

* del console

* across zoom & adjust distance
2024-08-13 21:42:17 +08:00
Archer
fe9cb437e5 feat: file input doc (#2359) 2024-08-13 14:25:49 +08:00
Zong
2827c633cd docs(bge-rerank): qa docs (#2358) 2024-08-13 14:11:38 +08:00
Archer
dd1e2d5eb7 Update 489.md (#2353) 2024-08-13 10:06:29 +08:00
Zong
6293801bfa fix(docs): home host typo (#2352) 2024-08-13 10:04:34 +08:00
Zong
7f2aa97de7 fix(docs): reranker typo (#2341) 2024-08-12 18:25:06 +08:00
Archer
2196930005 App template market (#2337)
* feat: add app template market (#2012)

* feat: add app template market

* fix

* fix

* i18n

* fix

* perf: template market ux

* perf: simple mode app ui

* perf: tempalte modal ui

* perf: tempalte market ui

* perf: template position

* feat: create app modal

* regiter default app

* perf: icon

* change templates position (#2331)

* change templates position

* fix

* perf: template market ux

---------

Co-authored-by: heheer <heheer@sealos.io>
2024-08-12 16:21:21 +08:00
Archer
231afc4ac5 Update README.md (#2335) 2024-08-12 13:58:49 +08:00
Archer
2dc0b0fbec feat: 4.8.9 doc (#2334)
* feat: 4.8.9 doc

* doc

* README.md
2024-08-12 13:58:04 +08:00
Archer
72bb3f667b fix: doc (#2332) 2024-08-12 12:15:09 +08:00
Archer
02d6b7c788 4.8.9 test fix (#2330)
* perf: query extension prompt

* perf: get preview histories

* perf: i18n

* fix: share page cannot feedback

* fix: publish i18n
2024-08-12 12:09:14 +08:00
Archer
e098b2f1dc Update ExtraPlan.tsx 2024-08-10 00:43:25 +08:00
Finley Ge
832a4d6638 chore: change notification account bind hint text (#2310) 2024-08-09 17:56:03 +08:00
Menghuan1918
4d570ecd4f 修改插件:Doc2X插件适配文件上传功能 (#2284)
* Change to download first and check contentType

* Up to date

* Some bug fix, still some bug with img

* Update tool to read from file

* improve formatting in PDF

* Add tool of img file OCR , but meet some bug

* Bug fix for parameter passing error.

* Modification Introduction
2024-08-08 18:56:05 +08:00
Zong
067f3f4098 fix(query): extension prompt template (#2288) 2024-08-08 18:47:34 +08:00
Archer
d682a8252f 4.8.9 test (#2299)
* perf: read file prompt

* perf: read file prompt

* perf: free plan tip

* feat: cron job usage

* perf: app templates

* perf: get llm model by name

* feat: support outlink upload file

* fix: upload limit
2024-08-08 17:45:15 +08:00
papapatrick
c6dd3076c5 fix: quote display error (#2298) 2024-08-08 14:41:21 +08:00
Finley Ge
b4f3a77b01 fix: bind notification account (#2297) 2024-08-08 14:40:56 +08:00
Finley Ge
7141189102 chore(notification bind): team member notification bind hint text (#2295)
adjusting
2024-08-08 11:54:57 +08:00
Archer
3ba9c21828 4.8.9 test fix (#2291)
* perf: read file icon

* perf:icon

* fix: i18n

* perf: hide pro api

* perf: upload expired time

* perf: upload file frequency limit

* perf: upload file ux

* perf: input file tip

* perf: qa custom chunk size

* feat: dataset openapi

* fix: auth dataset list

* fix: openapi doc

* perf: zero temperature change to 0.01

* perf: read file prompt

* perf: read file prompt

* perf: free plan tip

* feat: cron job usage
2024-08-08 10:07:24 +08:00
Coder-Wjt
7b388b287a Adjust the parameters of gpt-40-mini model, custom for QA mode Add chunkSize setting input (#2139)
* Adjust the parameters of gpt-40-mini model, custom for QA mode Add chunkSize setting input

* Adjust the parameters of gpt-40-mini model
2024-08-07 18:05:41 +08:00
shilin
e9ba00d38f fix(dataset): 知识库列表右下角类型的名称上下居中 (#2287) 2024-08-07 18:01:13 +08:00
Archer
a109c59cc6 Move app owner (#2280)
* feat: app owner change (#2271)

* feat(app): changeOwner api

* feat: changeOwner api

* feat: ChangeOwnerModal

* feat: update change owner api

* chore: move change owner api into pro version
feat(fe): change owner modal

* feat: add change owner button and modal to InfoModal

* change owner ux

* feat: doc

* perf: remove info change owner btn

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-08-06 22:13:16 +08:00
Archer
91bc573571 Update 482.md (#2283) 2024-08-06 20:16:30 +08:00
Hwting
2712ef21ff docs: Repair and supplement document content xinference.md (#2278)
Repair and supplement document content
2024-08-06 19:59:34 +08:00
Archer
593af8f7dc Update README.md (#2274) 2024-08-06 12:13:58 +08:00
Archer
96ebec9809 Fix navbar (#2273)
* fix: phone navbar cannot scroll; fix: file uplaod process error

* perf: select repeat file
2024-08-06 11:49:52 +08:00
shilin
f35ba8e5a7 feat(chatbot-extension): a Chrome extension that can be using for chat with AI on any website (#2235)
* feat(chatbot-extension): a Chrome extension that can be using for chat with AI on any website

* fix: 插件支持语音输入
feat:chatbot支持切换

* fix: 切换chatbot后,自动隐藏bot列表
2024-08-06 10:53:01 +08:00
Archer
e36d9d794f File input (#2270)
* doc

* feat: file upload  config

* perf: chat box file params

* feat: markdown show file

* feat: chat file store and clear

* perf: read file contentType

* feat: llm vision config

* feat: file url output

* perf: plugin error text

* perf: image load

* feat: ai chat document

* perf: file block ui

* feat: read file node

* feat: file read response field

* feat: simple mode support read files

* feat: tool call

* feat: read file histories

* perf: select file

* perf: select file config

* i18n

* i18n

* fix: ts; feat: tool response preview result
2024-08-06 10:00:22 +08:00
papapatrick
10dcdb5491 I18n Translations (#2267)
* rebase

* i18n-1

* add error info i18n

* fix

* fix

* refactor: 删除error.json

* delete useI18n
2024-08-05 18:42:21 +08:00
heheer
025d405fe2 feat: allow adding tags when creating collections via api (#2268)
* feat: allow adding tags when creating collections via api

* fix
2024-08-05 18:33:58 +08:00
Archer
fe71efbbd2 Collection tag (#2266)
* feat: collection metadata filter (#2211)

* feat: add dataset collection tags (#2231)

* dataset page

* workflow page

* move

* fix

* add plus filter

* fix

* fix

* fix

* perf: collection tag code

* fix: collection tags (#2249)

* fix

* fix

* fix tags of dataset page

* fix tags of workflow page

* doc

* add comments

* fix: collection tags (#2264)

* fix: metadata filter

* feat: search filter

---------

Co-authored-by: heheer <1239331448@qq.com>
Co-authored-by: heheer <heheer@sealos.io>
2024-08-05 12:08:46 +08:00
Archer
56f6e69bc7 System inform (#2263)
* feat: Bind Notification Pipe (#2229)

* chore: account page add bind notification modal

* feat: timerlock schema and type

* feat(fe): bind notification method modal

* chore: fe adjust

* feat: clean useless code

* fix: cron lock

* chore: adjust the code

* chore: rename api

* chore: remove unused code

* chore: fe adjust

* perf: bind inform ux

* fix: time ts

* chore: notification (#2251)

* perf: send message code

* perf: sub schema index

* fix: timezone plugin

* fix: format

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-08-05 00:29:14 +08:00
heheer
998e7833e8 fix: workflow plugin module default input value (#2257) 2024-08-03 18:16:50 +08:00
heheer
110bf9391f fix: get plugin input variables from history (#2255) 2024-08-03 12:31:31 +08:00
heheer
48f2c95bb9 fix: add delete all input guide lexicon button (#2241)
* fix: add delete all input guide lexicon button

* fix

* fix permisstion
2024-08-03 12:29:15 +08:00
Archer
9f37e56173 Chat perf test (#2252)
* perf: optimize chat init api (#2233)

* perf: optimize the chat/init api

* perf: 添加团队和分享api的优化

* perf: api写法优化

* perf: api写法优化

* perf: 完善细节

* perf: 添加auth字段

* perf: 优雅的写法🥳

* fix: Fix the bug in debugging Tag (#2250)

* fix: 修复调试tag不显示bug

* perf

* perf: 优化代码

* fix: 返回新对象

* fix: show tag error

---------

Co-authored-by: papapatrick <109422393+Patrickill@users.noreply.github.com>
2024-08-03 10:44:31 +08:00
lolocoo
af1cff6230 fix(appList): 删除应用后回到聊天选择最后一次对话的应用时提示无该应用bug (#2236) 2024-08-02 10:14:39 +08:00
Archer
3760726354 Update 488.md (#2234) 2024-08-01 12:24:38 +08:00
Archer
6ddf0b23fc Update 488.md (#2232) 2024-08-01 10:06:44 +08:00
Archer
f680bdf54d yml version (#2230) 2024-07-31 17:04:48 +08:00
Archer
834d36981f fix: response modal (#2228) 2024-07-31 16:11:04 +08:00
Archer
2fdca621e6 perf: remove unuse code (#2227) 2024-07-31 15:43:58 +08:00
heheer
8c7f4a3a30 fix: add check for reset (#2226) 2024-07-31 15:42:59 +08:00
Leo Liu Junyi
41da52d6ed Fix Switch state inconsistency for Scheduled Trigger (#2221)
* 修复定时关闭时Switch显示不同步

* 优化写法
2024-07-31 12:07:31 +08:00
Archer
446d9cb1b9 fix: oneapi image (#2222) 2024-07-31 12:04:11 +08:00
Rick
48a5853550 fix: the helm release failed due to version handle (#2199)
Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
2024-07-31 10:19:42 +08:00
Archer
c129874d59 fix: dataset params default error (#2210) 2024-07-30 17:58:40 +08:00
papapatrick
cc6fa4207a style: 优化样式 (#2203) 2024-07-30 11:47:26 +08:00
papapatrick
e27abe1f6b perf: 运行详情弹窗优化 (#2192)
* perf: 运行详情弹窗优化

* style: 调整样式

* style: 弹窗样式优化&&应用切换圆角添加

* fix: 修复编译错误
2024-07-29 18:36:13 +08:00
Zhedong Cen
5cecef5836 Update README.md (#2197) 2024-07-29 17:28:50 +08:00
Archer
ee89d0d7a4 Update package.json 2024-07-29 16:00:20 +08:00
Archer
6eeb1b4da1 perf: dataset upload process render (#2191) 2024-07-29 15:58:59 +08:00
Carson Yang
b6c9bb4a65 docs: add subtitle translation example (#2195)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-07-29 15:09:12 +08:00
Archer
20aad33850 fix: plugin revert (#2190) 2024-07-29 11:01:12 +08:00
Archer
02b51317b4 feat: 4.8.8 doc (#2188) 2024-07-29 10:56:29 +08:00
Archer
ba933c7450 perf: markdown code css (#2187) 2024-07-29 10:01:14 +08:00
Archer
856d7ce48f fix: app type (#2185) 2024-07-29 09:47:47 +08:00
Archer
23f22cda18 Add mongo forward read. Fix markdown code block. (#2174)
* perf: read from mongo forward node

* fix: code block ui

* perf: markdown code css
2024-07-29 09:47:30 +08:00
Archer
0a9a7691b4 Update 488.md 2024-07-26 13:50:42 +08:00
Archer
8d25a1d3ec Add img extension (#2172)
* perf: mongo log

* perf: img read

* doc
2024-07-26 12:46:07 +08:00
heheer
2d1e53c3b5 fix: plugin input default value & validate (#2171)
* fix: plugin input default value & validate

* delete console
2024-07-26 12:41:18 +08:00
Finley Ge
71d0093768 fix: app get readable team plugin error (#2169)
In the former code. User who access the plugin should have Write
Permission which should be Read.
2024-07-26 11:43:46 +08:00
Archer
cd554f573e 4.8.8 test fix (#2149)
* perf: code comment

* feat: system plugin input guide

* perf: variable avatar

* feat: feishu webhook

* perf: select tool config tip

* perf: rename variable

* fix: per inherit error

* perf: docker-compose oneapi version and i18n

* perf: ui tip bug

* fix: ts

* perf: pg log

* perf: editor color

* perf: update init
2024-07-26 10:23:44 +08:00
heheer
2d016b7462 fix: editor focus & picker highlight & ui (#2166)
* fix ui

* fix editor focus & picker highlight
2024-07-26 00:03:07 +08:00
Finley Ge
65515e7952 dataset inheritance permission (#2151)
* refactor: dataset create and update api

* chore: defaultpermission & resume fe

* refactor: database auth

* fix(ts): add inheritPermission into default data types

* chore: adjust the code

* fix: list api type filter

* fix: query condition
2024-07-25 19:03:24 +08:00
heheer
5906daff9f fix: plugin run & setting quote variables (#2150)
* fix

* fix

* change variables & variablelabels show condition

* fix type

* fix
2024-07-25 18:01:43 +08:00
Finley Ge
55cefccad1 fix: enable http request (#2159) 2024-07-25 14:39:22 +08:00
Finley Ge
87dac54f1e fix: outlink manage can delete/update others (#2158)
* fix: outlink manage be able to delete/update others

* fix: remove enum validation for teamMemberSchema.
because the old data has the role property, which may cause unknown bug

* perf: change findAndRemove to deleteOne
2024-07-25 13:52:16 +08:00
Archer
45b8d7e8de 4.8.8 test fix (#2143)
* perf: transcriptions api

* perf: variable picker tip

* perf: variable picker tip

* perf: chat select app

* feat: router to app detail

* perf: variable avoid space

* perf: variable picker

* perf: doc2x icon and params

* perf: sandbox support countToken

* feat: sandbox support delay and countToken
2024-07-24 16:02:53 +08:00
Finley Ge
a478621730 refactor openapikey and outlink apis (#2134)
* refactor: OpenAPIKey refactor

* refactor: outlink api refactor

fix: list return wrong data

* chore: remove deprecated type definition

* chore: remove throw Error. instead of Promise.reject

* fix: auth openapikey's owner

* fix: manager could read all keys
2024-07-24 11:11:36 +08:00
heheer
a233ab9584 fix build (#2146) 2024-07-24 11:10:48 +08:00
Menghuan1918
8d2a192515 添加插件:Doc2X 图片/文档识别 (#2097)
* Init the requrest part

* Finish the img deal part

* For test only one plugin

* Finish img2text part

* Finish pdf ocr part

* Change vscode setting back

* Change `for` into` for await` type
2024-07-24 09:59:20 +08:00
heheer
dcaf972767 fix: variable dynamic refresh & space match (#2142)
* fix: variable dynamic refresh & space match

* fix variable picker filter
2024-07-23 22:02:36 +08:00
Zong
f9d43ac009 feat(textSplitter): typo (#2138) 2024-07-23 21:54:55 +08:00
papapatrick
abcf48d5ec perf: switch perf (#2131)
* feat:  新增对话框底部复制按钮

* fix: 对话框底部复制按钮定位问题

* perf: 优化应用切换逻辑

* perf: 删除不必要代码

* fix: 修复编译失败bug&&修复冲突错误

* feat:  新增对话框底部复制按钮

* fix: 对话框底部复制按钮定位问题

* feat: 过长引用折叠功能

* merge: 合并主仓库代码

* refactor:  删除不必要代码

* perf: 优化应用切换逻辑

* perf: 删除不必要代码

* fix: 修复编译失败bug&&修复冲突错误

* merge

* merge: 处理冲突

* refactor: 重构代码删除不必要代码

* perf: 删除不必要代码
2024-07-23 18:53:48 +08:00
heheer
bf5145e632 perf: variable label picker scroll & focus disappear (#2135)
* fix: variable label picker scroll & focus disappear

* fix

* fix filter

* revert
2024-07-23 18:03:53 +08:00
Finley Ge
f37cdabb15 purge old permission (#2118)
* chore: purge old permission
- remove useless role of teamMember
- Cleanup auth apis' Props and Return type Definitions

* chore: a better way of RequireAtLeastOne

Signed-off-by: Finley Ge <m13203533462@163.com>

---------

Signed-off-by: Finley Ge <m13203533462@163.com>
2024-07-23 14:55:54 +08:00
Archer
e99c91aaa6 Perf system plugin and worker (#2126)
* perf: worker pool

* perf: worker register

* perf: worker controller

* perf: system plugin worker

* perf: system plugin worker

* perf: worker

* perf: worker

* worker timeout

* perf: copy icon
2024-07-23 11:23:42 +08:00
heheer
a4787bce5c feat: get node variables in prompt editor (#2087)
* feat: get node variables in prompt editor

* fix

* fix build

* merge

* fix build

* delete default parent

* fix

* fix
2024-07-23 11:20:23 +08:00
jingyang
f24e41f5ec update: i18n common.json keys (#2124) 2024-07-22 20:31:27 +08:00
papapatrick
85de3c1d64 Chat-perf (#2117)
* feat:  新增对话框底部复制按钮

* fix: 对话框底部复制按钮定位问题

* feat: 过长引用折叠功能

* merge: 合并主仓库代码

* refactor: 删除不必要代码

* doc: 文档补充的部分修改成英文
2024-07-22 18:25:25 +08:00
Finley Ge
c6f682310c fix resource permission schema (#2116)
* fix: resource permission schema

* fix: ResorceType
2024-07-22 17:27:48 +08:00
jingyang
991398b8d2 scripts: add delete-unused-keys (#2115)
* scripts: add delete-unused-keys

* update script

* fix keys

* fix ci

* update keys

* add i18n

* update
2024-07-22 15:03:35 +08:00
Archer
f452554663 fix: markdown echarts (#2101)
* fix: markdown echarts

* perf: packages
2024-07-22 10:10:32 +08:00
jingyang
57ff38e16f feat: Optimize i18n keys and remove unused keys, supporting static files in I18nT (#2092)
* feat: packages web i18n

* delete file

* feat:i18n add i18nT

* handle keys

* delete unusedKeys

* fix build

* update dev.md
2024-07-19 16:28:07 +08:00
Archer
f7b55b501f Update 488.md 2024-07-19 14:23:11 +08:00
Archer
cf7145ab54 System plugin (#2091)
* System template (#2082)

* feat: system plugin (#2024)

* add plugin cost & change plugin avatar (#2030)

* add plugin cost & change plugin avatar

* add author

* feat: duckduckgo plugin

* duckduck search

* perf: templates select system plugin

* perf: system plugin avatar

* feat: duckduck plugins

* doc

* perf: plugin classify

* perf: icon avatar component

* perf: system template avatar

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>

* feat: system plugin search

* perf: plugin packages important

* perf: source avatar

* nextconfig

* perf: i18n

* perf: default model

* perf: system plugin author

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-07-19 14:15:01 +08:00
Carson Yang
1eedb9caba Update workflow to change baseurl for cn site (#2081)
* Docs: fix gitinfo

Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>

* Update workflow to change baseurl for cn site

Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>

---------

Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-07-18 12:15:03 +08:00
heheer
6390d64417 fix: delete plugin output node check filter (#2080) 2024-07-18 10:44:13 +08:00
Archer
3d80eb288b lock (#2079) 2024-07-18 10:13:47 +08:00
Archer
5cb196535f 4.8.7 fix (#2076) 2024-07-17 19:06:37 +08:00
jingyang
982325d066 fix i18next.d.ts (#2064)
* fix i18next.d.ts

* feat: packages web i18n

* delete file
2024-07-17 15:27:51 +08:00
Archer
36f8755d09 lock (#2063)
* lock

* perf: init data

* perf: vision model url

* fix: chat index
2024-07-17 00:16:57 +08:00
jingyang
fc96bb99cc feat: optimize i18n implementation for better localization (#2062)
* feat: optimize i18n implementation for better localization

* delete i18n-ally-custom-framework.yml

* update common key
2024-07-16 17:56:27 +08:00
papapatrick
1e4ffc2481 docs: 完善本地开发教程 (#2061) 2024-07-16 17:38:11 +08:00
Archer
ee7496467b 4.8.7 test (#2058)
* fix: query extension id;App page change type invalid

* prettier
2024-07-16 16:55:12 +08:00
Archer
b5c98a4f63 Plugin runtime (#2050)
* feat: plugin run (#1950)

* feat: plugin run

* fix

* ui

* fix

* change user input type

* fix

* fix

* temp

* split out plugin chat

* perf: chatbox

* perf: chatbox

* fix: plugin runtime (#2032)

* fix: plugin runtime

* fix

* fix build

* fix build

* perf: chat send prompt

* perf: chat log ux

* perf: chatbox context and share page plugin runtime

* perf: plugin run time config

* fix: ts

* feat: doc

* perf: isPc check

* perf: variable input render

* feat: app search

* fix: response box height

* fix: phone ui

* perf: lock

* perf: plugin route

* fix: chat (#2049)

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-07-15 22:50:48 +08:00
Zong
090c880860 feat(image): metadata support image mime type (#2026) 2024-07-14 23:25:16 +08:00
Archer
dd2a9bdee5 Update 486.md 2024-07-11 14:43:34 +08:00
Archer
8d60ef505f Update 486.md 2024-07-11 14:41:48 +08:00
Archer
b14514c105 4.8.6 sandbox (#2020)
* fix: openapi doc

* update doc
2024-07-11 14:36:27 +08:00
Archer
11ffaaf2c5 4.8.6 sandbox (#2017)
* fix: openapi doc

* update doc
2024-07-11 10:34:59 +08:00
Archer
e2ae571d15 4.8.6 fix (#1970)
* fix: full text search match query

* perf: mongo schema import, Avoid duplicate import

* feat: mongo log store

* doc

* fix: sandbox outputs

* perf: desc color

* fix: node init

* perf code

* perf: chat header
2024-07-10 15:52:39 +08:00
Zong
f548e24e7d fix(env): typo template (#1990) 2024-07-08 15:05:23 +08:00
Archer
5605f1a892 4.8.6 fix (#1963)
* feat: log store

* fix: full text search match query

* perf: mongo schema import, Avoid duplicate import
2024-07-05 17:37:42 +08:00
Archer
88d10451c9 perf: collection created response (#1947)
* perf: collection created response

* update openapi doc

* remove default collection

* perf: chat ui

* fix: system prompt concat

* perf: published check

* perf: update app
2024-07-05 10:27:38 +08:00
Zong
8a7bd689ae fix(prompt): typo extra content (#1942)
* fix(prompt): typo extra content

* refactor(prompt): AIChat template
2024-07-04 19:08:26 +08:00
Archer
a9cdece341 4.8.6 merge (#1943)
* Dataset collection forbid (#1885)

* perf: tool call support same id

* feat: collection forbid

* feat: collection forbid

* Inheritance Permission for apps (#1897)

* feat: app schema define

chore: references of authapp

* feat: authApp method inheritance

* feat: create and update api

* feat: update

* feat: inheritance Permission controller for app.

* feat: abstract version of inheritPermission

* feat: ancestorId for apps

* chore: update app

* fix: inheritPermission abstract version

* feat: update folder defaultPermission

* feat: app update api

* chore: inheritance frontend

* chore: app list api

* feat: update defaultPermission in app deatil

* feat: backend api finished

* feat: app inheritance permission fe

* fix: app update defaultpermission causes collaborator miss

* fix: ts error

* chore: adjust the codes

* chore: i18n

chore: i18n

* chore: fe adjust and i18n

* chore: adjust the code

* feat: resume api;
chore: rewrite update api and inheritPermission methods

* chore: something

* chore: fe code adjusting

* feat: frontend adjusting

* chore: fe code adjusting

* chore: adjusting the code

* perf: fe loading

* format

* Inheritance fix (#1908)

* fix: SlideCard

* fix: authapp did not return parent app for inheritance app

* fix: fe adjusting

* feat: fe adjusing

* perf: inherit per ux

* doc

* fix: ts errors (#1916)

* perf: inherit permission

* fix: permission inherit

* Workflow type (#1938)

* perf: workflow type

tmp workflow

perf: workflow type

feat: custom field config

* perf: dynamic input

* perf: node classify

* perf: node classify

* perf: node classify

* perf: node classify

* fix: workflow custom input

* feat: text editor and customFeedback move to basic nodes

* feat: community system plugin

* fix: ts

* feat: exprEval plugin

* perf: workflow type

* perf: plugin important

* fix: default templates

* perf: markdown hr css

* lock

* perf: fetch url

* perf: new plugin version

* fix: chat histories update

* fix: collection paths invalid

* perf: app card ui

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-07-04 17:42:09 +08:00
Zong
babf03c218 fix(prompt): typo template tag (#1918) 2024-07-04 14:53:46 +08:00
wh0amI
9e169a48e3 Update docker.md (#1910)
* Update docker.md

Fix typo: AUX --> AVX

* Update docker.md

'v' in 'AvX' should be upper case.
2024-07-02 15:43:51 +08:00
江晚
e223390231 添加AI对话时隐藏头部的功能,主要是适配移动端 (#1874) 2024-07-01 11:32:02 +08:00
Archer
3257744c76 Update intro.md 2024-06-30 10:14:02 +08:00
Archer
e1e112eaff Update intro.md 2024-06-30 09:45:59 +08:00
Archer
5c37d29451 Update config.yml 2024-06-28 00:34:25 +08:00
Archer
3a16f1a21c Update README.md 2024-06-28 00:33:14 +08:00
Archer
fa7b73f942 Update 485.md 2024-06-27 15:53:12 +08:00
Archer
f8610d750d Update 484.md 2024-06-27 15:52:53 +08:00
Archer
96a03e9927 4.8.5 test (#1869)
* update upgrade doc

* update upgrade doc
2024-06-27 12:21:05 +08:00
Archer
a3b0ef066b 4.8.5 test fix (#1862)
* app list ui

* feat: photo view

* perf: app dataset filter

* perf: app dataset filter

* fix: chat recently apps

* perf: workflow header phone

* default templates

* default templates

* fix: input guide phone

* fix: i18n

* team chat history

* remove code

* perf: mongo connection

* log level
2024-06-27 10:09:55 +08:00
江晚
9d084b633c 实现在移动端,点击AI回答的图片后,可以通过双指放大缩小移动图片的功能 (#1857) 2024-06-26 16:26:41 +08:00
gaord
4b4bea196a updateUserFeedback api could be authenticated by api key through bearer token as well with more flexibility (#1855) 2024-06-26 16:02:36 +08:00
Archer
e247545afa 4.8.5 perf (#1854)
* update yml

* perf: chat slider

* perf: workflow name

* i18n

* fix: ts

* fix: ts
2024-06-26 12:51:36 +08:00
heheer
93b44fc8f5 fix error toast (#1853) 2024-06-26 11:58:55 +08:00
Archer
9aa6fd4904 4.8.5 perf app ui (#1845)
* list ui and layout

* rename token key

* app ui

* ssr
2024-06-25 19:37:28 +08:00
Archer
c8bc9838e3 feat: app template;fix: chat test reset (#1838)
* feat: app template;fix: chat test reset

* template output

* template output
2024-06-25 13:47:25 +08:00
Archer
5c8c7fb9f2 4.8.5 test fix (#1835)
* faq

* perf: navbar name and fix dataset selector

* feat: app tag

* perf: icon

* fix: update workflow bug

* perf: dataset ui

* perf: menu

* fix: ts

* fix: auth file and app list ui

* app list

* app list

* perf: init api

* update per

* log level
2024-06-25 10:10:24 +08:00
WhiteBottle
d902d29c71 i18n: update Chinese (zh) localization strings (#1827)
* style: add a space between Chinese and alphanumeric characters

在中文和英文、数字之间添加空格,保持中文界面的字符串样式统一

Signed-off-by: WhiteBottle <whitebottle@qq.com>

* style: use fullwidth punctuation in Chinese localization

使用全角标点符号,同时增补/删去部分标点符号,保持中文界面的字符串样式统一

Signed-off-by: WhiteBottle <whitebottle@qq.com>

* fix: standardize spelling of proper nouns and terms and correct typos

规范部分专有名词、术语的拼写与用法,订正错别字

Signed-off-by: WhiteBottle <whitebottle@qq.com>

---------

Signed-off-by: WhiteBottle <whitebottle@qq.com>
2024-06-24 19:31:39 +08:00
Finley Ge
9d29b471bc chore: dataset fe adjusting (#1833) 2024-06-24 19:04:42 +08:00
Finley Ge
4a33e04a08 Dataset frontend style adjusting (#1820)
* feat: dataset controllers

feat: dataset schema

fix: add missing type to dataset schema
Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: use new auth method

Signed-off-by: FinleyGe <m13203533462@163.com>

* feat: finish the dataset permission

fix: ts errors
Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: adjust the code

* chore: adjust the code

* chore: dataset fe adjusting

* fix: double delete confirm

---------

Signed-off-by: FinleyGe <m13203533462@163.com>
2024-06-24 14:58:44 +08:00
Archer
a9ab9ebe8e 4.8.5 test (#1825)
* update model logo

* perf: hide list clb api
2024-06-24 09:29:54 +08:00
Archer
24596a6e21 4.8.5 test (#1819) 2024-06-21 18:32:05 +08:00
Archer
5cc01b8509 4.8.5 test (#1805)
* perf: revert tip

* feat: create copy app

* perf: file stream read

* perf: read directory over 100 files

* perf: index

* fix: team chat api error

* lock

* fix: i18n file
2024-06-21 10:09:00 +08:00
Finley Ge
980b4d3db5 Dataset Permission (#1786)
* feat: dataset controllers

feat: dataset schema

fix: add missing type to dataset schema
Signed-off-by: FinleyGe <m13203533462@163.com>

* feat: dataset list api

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: all dataset api

Signed-off-by: FinleyGe <m13203533462@163.com>

* feat: new auth dataset method

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: use new auth method in detail, paths.
feat: add new param defaultPermission to create api

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: app auth params

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: use new auth method

Signed-off-by: FinleyGe <m13203533462@163.com>

* feat: new auth collection and file method

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: dataset collection api new auth

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: create/*.ts auth

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: dataset auth

Signed-off-by: FinleyGe <m13203533462@163.com>

* fix: import paths

Signed-off-by: FinleyGe <m13203533462@163.com>

* feat: dataset collaborator

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: dataset frontend

feat: dataset list frontend

feat: dataset detail
Signed-off-by: FinleyGe <m13203533462@163.com>

* feat: finish the dataset permission

fix: ts errors
Signed-off-by: FinleyGe <m13203533462@163.com>

* fix: empty response of collection api

Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: adjust the code

* chore: adjust the code

* chore: i18n

* fix: ts error

* fix: fe CollectionCard permission

---------

Signed-off-by: FinleyGe <m13203533462@163.com>
2024-06-20 20:52:03 +08:00
powerfool
2b25e3cc2d fix(typo): fixed typo in license (#1800) 2024-06-19 17:06:14 +08:00
Archer
565bfc8486 Concat plugin to app (#1799) 2024-06-19 14:38:21 +08:00
左风
b17d14bb7d doc: update wechat (#1791) 2024-06-18 22:16:05 +08:00
Archer
c11131d653 fix: simple bot dataset load error (#1764) 2024-06-14 12:18:46 +08:00
Archer
f7f4a8de4d feat: chat slider support folder (#1759)
* feat: docker-compose version

* feat: chat slider support folder

* lazy behavior

* pref: code sandbox size
2024-06-13 23:09:36 +08:00
Archer
6385794603 fix: system plugin run time error (#1754) 2024-06-13 14:50:51 +08:00
Archer
b8b26ad700 Perf: vector queue and app ui (#1750) 2024-06-13 12:35:26 +08:00
Archer
05611df056 perf: vector generate (#1748) 2024-06-12 16:42:46 +08:00
Archer
d0085a23e6 4.8.4 (#1746) 2024-06-12 15:17:21 +08:00
Archer
bc6864c3dc Feat: App folder and permission (#1726)
* app folder

* feat: app foldere

* fix: run app param error

* perf: select app ux

* perf: folder rerender

* fix: ts

* fix: parentId

* fix: permission

* perf: loading ux

* perf: per select ux

* perf: clb context

* perf: query extension tip

* fix: ts

* perf: app detail per

* perf: default per
2024-06-11 10:16:24 +08:00
Archer
b20d075d35 Updae theme and fix some bug (#1711) 2024-06-07 12:54:30 +08:00
Archer
19c8a06d51 Permission (#1687)
Co-authored-by: Archer <545436317@qq.com>
Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-06-04 17:52:00 +08:00
Archer
fcb915c988 Update docker.md 2024-06-02 12:11:02 +08:00
Archer
9bffb9ffc0 fix code response 2024-06-01 18:14:14 +08:00
Archer
c1d7c08c7a Update docker.md 2024-06-01 15:20:50 +08:00
Archer
a5d590e0bd Update docker.md 2024-06-01 15:20:08 +08:00
Archer
db544afa7c Fix doc (#1655)
* fix: docker doc

* fix: docker doc

* version doc
2024-06-01 09:33:21 +08:00
Archer
a259d034b8 4.8.3 (#1654)
* Milvus (#1644)

* feat: support regx

* 4.8.3 test and fix (#1648)

* perf: version tip

* feat: sandbox support log

* fix: debug component render

* fix: share page header

* fix: input guide auth

* fix: iso viewport

* remove file

* fix: route url

* feat: add debug timout

* perf: reference select support trigger

* perf: session code

* perf: theme

* perf: load milvus
2024-06-01 09:26:11 +08:00
ShinChven ✨
9fc6a8c74a Add icon for Google Gemini (#1635)
Add icon for Google Gemini
2024-05-30 15:54:46 +08:00
Carson Yang
5c8f2f95f7 Docs: fix zh-cn sitemap (#1631)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-05-29 15:46:43 +08:00
Carson Yang
f1e16b209a Docs: fix base url (#1630)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-05-29 14:57:53 +08:00
Carson Yang
ced23e1695 Docs: add google analytics, baidu and clarity (#1629)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-05-29 14:44:26 +08:00
Carson Yang
1db816150b Docs: add umami analytics (#1626)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-05-29 11:46:14 +08:00
Archer
1e48922bc9 Context extract support value type (#1620)
* perf: chat box components

* perf: chatbox context

* feat: extract support value type

* workflow performance

* update doc

* feat: error response

* feat: error response

* oauth sort

* perf: logo

* fix: update laf account

* perf: team permission api

* update type
2024-05-28 23:33:05 +08:00
Archer
8ba8488086 4.8.2-fix (#1612) 2024-05-28 16:55:06 +08:00
Archer
9639139b52 Sandbox (#1610) (#1611) 2024-05-28 14:47:10 +08:00
Archer
d9f5f4ede0 Update README.md 2024-05-27 00:00:17 +08:00
Carson Yang
6609cb98dc Update README (#1589)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-05-24 21:12:26 +08:00
Archer
74830f0ac8 Update 481.md 2024-05-24 11:10:56 +08:00
Archer
9c7c74050b Release update (#1580)
* release doc

* fix: reg metch

* perf: tool call arg

* fix: stream update variables

* remove status

* update prompt

* rename embeddong model
2024-05-24 11:07:03 +08:00
ShinChven ✨
92a3d6d268 Update config.json (#1583)
Fix embedding model names
2024-05-24 11:02:10 +08:00
Archer
c4ce1236ea perf: tool promot and reg slice;query extension prompt (#1576) 2024-05-23 15:14:22 +08:00
RandyZhang
4eb2c9bd07 更新Nextjs配置,更新服务端组件的声明 (#1570)
Co-authored-by: randy <randy@aihelp.net>
2024-05-23 09:11:33 +08:00
Archer
b1aafde7c9 4.8.1 test-fix (#1561) 2024-05-22 18:49:39 +08:00
Cheer
87e4afe89b fix: chunk preview drawer can not scroll, common drawer content scroll should decide by content; (#1539) 2024-05-22 10:18:21 +08:00
Archer
a14a8ae627 perf: input guide (#1558) 2024-05-21 18:18:32 +08:00
Archer
fb368a581c Perf input guide (#1557)
* perf: input guide code

* perf: input guide ui

* Chat input guide api

* Update app chat config store

* perf: app chat config field

* perf: app context

* perf: params

* fix: ts

* perf: filter private config

* perf: filter private config

* perf: import workflow

* perf: limit max tip amount
2024-05-21 17:52:04 +08:00
Archer
8e8ceb7439 Add request log and uncatch error tip. (#1531) 2024-05-20 10:31:44 +08:00
heheer
e35ce2caa0 feat: question guide (#1508)
* feat: question guide

* fix

* fix

* fix

* change interface

* fix
2024-05-19 17:34:16 +08:00
Archer
fd31a0b763 feat: fix admin role (#1527) 2024-05-18 13:32:50 +08:00
Archer
ba517b6a73 fix: api key delete bug (#1524) 2024-05-17 18:03:14 +08:00
Archer
2f93dedfb6 Update permission (#1522)
* Permission (#1442)

* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* feat: add permission display in the team manager modal

* feat: add permission i18n

* feat: let team module acquire permission ablity

* feat: add ownerPermission property into metaData

* feat: team premission system

* feat: extract the resourcePermission from resource schemas

* fix: move enum definition to constant

* feat: auth member permission handler, invite user

* feat: permission manage

* feat: adjust the style

* feat: team card style
- add a new icon

* feat: team permission in guest mode

* chore: change the type

* chore: delete useless file

* chore: delete useless code

* feat: do not show owner in PermissionManage view

* chore: fix style

* fix: icon remove fill

* feat: adjust the codes

---------

Co-authored-by: Archer <545436317@qq.com>

* perf: permission modal

* lock

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
2024-05-17 17:42:33 +08:00
Archer
67c52992d7 External dataset (#1519)
* perf: local file create collection

* rename middleware

* perf: remove code

* feat: next14

* feat: external file dataset

* collection tags field

* external file dataset doc

* fix: ts
2024-05-17 16:44:15 +08:00
Archer
2d1ec9b3ad perf: token count (#1509) 2024-05-16 17:05:56 +08:00
Archer
6067f5aff3 perf: tiktoken count (#1507)
* perf: tiktoken count

* fix: rerank histories

* fix: rerank histories

* update npmrc
2024-05-16 15:42:15 +08:00
Archer
c6d9b15897 External dataset (#1497)
* perf: read rawText and chunk code

* perf: read raw text

* perf: read rawtext

* perf: token count

* log
2024-05-16 11:47:53 +08:00
heheer
d5073f98ab perf:change plugin version update position (#1493)
* perf:change plugin version update position

* use nodeversion
2024-05-15 17:06:49 +08:00
Archer
8386f707cd Perf workflow (#1492)
* perf: handle edge check

* search model

* feat: plugin input can render all input; fix: plugin default value

* fix ts

* feat: plugin input support required
2024-05-15 16:17:43 +08:00
Archer
cd876251b7 External dataset (#1485)
* fix: revert version

* feat: external collection

* import context

* external ui

* doc

* fix: ts

* clear invalid data

* feat: rename sub name

* fix: node if else edge remove

* fix: init

* api size

* fix: if else node refresh
2024-05-15 10:19:51 +08:00
heheer
fb04889a31 feat: node version (#1484)
* feat: node version tip

* fix

* i18n

* init version

* fix ts

* fix ts

* fix ts
2024-05-14 23:26:03 +08:00
Archer
b779e2806d fix doc (#1475) 2024-05-14 12:58:04 +08:00
Fengrui Liu
240f60c0ca Fixes: fix edge handler with onDelEdge (#1471)
* fixes: Fix edge handler

* fixes: fix edge handler with onDelEdge

* fixes: fix edge handler with onDelEdge
2024-05-14 00:17:44 +08:00
Archer
8d2230f24f Update intro.md 2024-05-13 17:08:37 +08:00
Archer
610ebded3b Dir tree doc and move some code (#1466)
* tree doc and move some code

* fix: ts
2024-05-13 17:07:29 +08:00
Archer
80a84a5733 Change embedding (#1463)
* rebuild embedding queue

* dataset menu

* feat: rebuild data api

* feat: ui change embedding model

* dataset ui

* feat: rebuild index ui

* rename collection
2024-05-13 14:51:42 +08:00
Archer
59fd94384d fix: session (#1455)
* fix: session

* doc

* fix: i188n
2024-05-13 11:04:50 +08:00
Archer
ee8cb0915e i18n (#1444)
* adapt not input type

* adapt not input type

* file i18n

* publish i18n

* translate

* i18n
2024-05-11 00:21:01 +08:00
Archer
8cf643d972 adapt not input type (#1443)
* adapt not input type

* adapt not input type
2024-05-10 22:27:32 +08:00
Archer
26f4c92124 Perf: i18n ns (#1441)
* i18n

* fix: handle
2024-05-10 18:41:41 +08:00
heheer
f351d4ea68 fix: openapi integer & array type (#1439) 2024-05-10 18:40:01 +08:00
Archer
d70efe1d6f Fix export dataset (#1436)
* fix: export dataset

* remove file buffer
2024-05-10 16:15:23 +08:00
Cheer
435b2fba25 feat: i18n modify; (#1336) 2024-05-10 11:20:31 +08:00
Carson Yang
d61de17df2 README: update wechat qr code (#1431)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-05-10 11:20:12 +08:00
Archer
08a310c41f Update doc (#1430) 2024-05-10 10:13:48 +08:00
samqin123
50716ff782 Create mongodump跨环境迁移数据库.md (#1426)
* Create mongodump跨环境迁移数据库.md

* Update mongodump跨环境迁移数据库.md
2024-05-10 10:00:59 +08:00
Archer
5e250b2f65 Change embedding (#1428)
* fix: text spliter

* perf: embedding model
2024-05-09 23:23:49 +08:00
Archer
434af56abd 4.8-alpha fix (#1424) 2024-05-09 22:48:44 +08:00
Archer
6463427d93 perf: detail=false, not response variable update (#1419) 2024-05-09 16:44:52 +08:00
heheer
af4c732d93 fix: change photo max size (#1416) 2024-05-09 16:31:56 +08:00
Archer
d4169bf066 fix: embedding recall drop-dead halt (#1415) 2024-05-09 16:13:06 +08:00
Archer
afe5039cd3 update docker-compose (#1414) 2024-05-09 15:52:15 +08:00
Archer
2155489be3 update doc and fix copy node (#1399)
* update doc

* fix: copy node

* perf: adapt tip

* update doc and package

* remove code
2024-05-09 14:09:24 +08:00
imgbot[bot]
eb36b71ac3 [ImgBot] Optimize images (#1398)
*Total -- 2,413.51kb -> 1,556.03kb (35.53%)

/docSite/assets/imgs/flow-tool2.png -- 171.30kb -> 34.32kb (79.96%)
/docSite/assets/imgs/judgement1.png -- 70.87kb -> 43.74kb (38.29%)
/docSite/assets/imgs/aichat2.png -- 64.94kb -> 40.39kb (37.8%)
/docSite/assets/imgs/demo-appointment5.png -- 70.95kb -> 45.23kb (36.25%)
/docSite/assets/imgs/cq1.png -- 104.80kb -> 67.09kb (35.98%)
/docSite/assets/imgs/string.png -- 67.67kb -> 43.75kb (35.35%)
/docSite/assets/imgs/chatinput.png -- 53.12kb -> 34.58kb (34.89%)
/docSite/assets/imgs/flow-intro2.png -- 263.99kb -> 173.15kb (34.41%)
/docSite/assets/imgs/flow-tool3.png -- 216.30kb -> 143.88kb (33.48%)
/docSite/assets/imgs/specialreply.png -- 152.58kb -> 101.64kb (33.39%)
/docSite/assets/imgs/aichat02.png -- 110.38kb -> 73.73kb (33.21%)
/docSite/assets/imgs/aichat.png -- 108.55kb -> 72.68kb (33.04%)
/docSite/assets/imgs/flow-intro1.png -- 306.26kb -> 205.67kb (32.85%)
/docSite/assets/imgs/flow-intro3.png -- 105.33kb -> 71.29kb (32.32%)
/docSite/assets/imgs/flow-dataset1.png -- 91.96kb -> 62.57kb (31.96%)
/docSite/assets/imgs/flow-tool1.png -- 94.70kb -> 64.60kb (31.78%)
/docSite/assets/imgs/extract1.png -- 74.00kb -> 50.68kb (31.51%)
/docSite/assets/imgs/flow-tool4.png -- 196.36kb -> 138.21kb (29.62%)
/docSite/assets/imgs/laf4.png -- 89.45kb -> 88.83kb (0.69%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2024-05-08 23:02:27 +08:00
左风
2230bc40c5 Doc: update doc (#1391)
* Doc: update doc

* Doc: update video link
2024-05-08 22:38:11 +08:00
Archer
917e4e9262 4.8 test fix (#1397)
* adapt v1 chat init

* adapt v1 chat init

* adapt v1 chat init

* perf: message input line; fix: http request un stream

* perf: message input line; fix: http request un stream

* perf: message input line; fix: http request un stream

* perf: error tip
2024-05-08 22:18:22 +08:00
Archer
3c6e5a6e00 4.8 test (#1394)
* fix: chat variable sync

* feat: chat save variable config

* fix: target handle hidden

* adapt v1 chat init

* adapt v1 chat init

* adapt v1 chat init

* adapt v1 chat init
2024-05-08 19:49:17 +08:00
heheer
7b75a99ba2 fix: add pptx encoding try catch (#1393) 2024-05-08 18:10:37 +08:00
heheer
2e468fc8ca 4.8 test fix (#1386)
* fix: boolean of if else input

* fix laf node

* fix laf bind

* fix laf input type

* fix if else check

* fix

* fix
2024-05-08 14:39:02 +08:00
Archer
caa0755d9a perf: global variable any type (#1387) 2024-05-07 18:54:32 +08:00
Archer
fef1a1702b 4.8 test fix (#1385)
* fix: tool name cannot startwith number

* fix: chatbox update

* fix: chatbox

* perf: drag ui

* perf: drag component

* drag component
2024-05-07 18:41:34 +08:00
heheer
2a99e46353 fix: if else node (#1383)
* fix: if else node

* fix

* fix
2024-05-07 17:16:33 +08:00
Archer
8f9203c053 4.8 test (#1382)
* perf: some log, chatTest histories slice; http request failed tip

* fix: ssr render

* perf: if else node ui and fix value type select
2024-05-07 15:27:05 +08:00
heheer
2053bbdb1b feat: add elseif to ifelse node (#1378) 2024-05-07 14:50:58 +08:00
Archer
9e192c6d11 Ai histories (#1376)
* perf: workflow node ui

* i18n

* rename controller

* fix: zindex

* fix: leave page callback

* revert button
2024-05-07 13:32:01 +08:00
Archer
eef609a063 Fix 4.8 node (#1370)
* perf: runtime props

* fix: Plugin run faied in debug mode

* perf: variable update

* fix: ts

* perf: variable ui
2024-05-06 17:13:50 +08:00
heheer
5bb9c550f6 fix: add judge to update variable node input (#1369) 2024-05-06 15:54:15 +08:00
Archer
db1c27cdc7 feat: adapt v1 system plugin (#1366) 2024-05-06 15:21:29 +08:00
heheer
8863337606 fix: reference input of updateVariable node (#1367)
* fix: reference input of updateVariable node

* fix
2024-05-06 13:51:15 +08:00
heheer
59bd2a47b6 feat: add update variable node (#1362)
* feat: add variable update node

* fix

* fix

* change component quote
2024-05-06 12:20:29 +08:00
Archer
d057ba29f0 feat: custom feedback plugin (#1365) 2024-05-06 11:01:50 +08:00
Archer
b500631a4d fix: leave user will can not login (#1345) 2024-05-06 10:41:01 +08:00
Carson Yang
bf6084da69 Enhance English language support in i18n (#1348)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-05-02 08:35:59 +08:00
Archer
b5f0ac3e1d Perf: read file woker (#1337)
* perf: read file worker

* fix: Http node url input

* fix: htm2md

* fix: html2md

* fix: ts

* perf: Problem classification increases the matching order

* feat: tool response answer
2024-04-30 18:12:20 +08:00
Cheer
1529c1e991 fix: issues/1334 useTransition 导致光标刷新后移问题; (#1338) 2024-04-30 15:59:39 +08:00
Archer
db6fc53840 Publish histories (#1331)
* fix http plugin edge (#95)

* fix http plugin edge

* use getHandleId

* perf: i18n file

* feat: histories list

* perf: request lock

* fix: ts

* move box components

* fix: edit form refresh

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-30 12:42:13 +08:00
Archer
a0c1320d47 4.8-preview fix (#1324)
* feishu app release (#85)

* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* perf: workflow ux

* system config

* feat: feishu app release

* chore: sovle the conflicts files; fix the feishu entry

* fix: rename Feishu interface to FeishuType

* fix: fix type problem in app.ts

* fix: type problem

* fix: style problem

---------

Co-authored-by: Archer <545436317@qq.com>

* perf: publish channel code

* change system variable position (#94)

* perf: workflow context

* perf: variable select

* hide publish

* perf: simple edit auto refresh

* perf: simple edit data refresh

* fix: target handle

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-29 11:13:10 +08:00
Cheer
5ca4049757 feat: 增加自定义 meta description; (#1246)
* feat: 增加自定义 meta description;

* fix: 环境变量使用错误;

---------

Co-authored-by: junshun.mq <junshun.mq@alibaba-inc.com>
2024-04-28 18:31:47 +08:00
Archer
59ece446a2 fix @node-rs/jieba and window not found (#1313)
* dynamic import

* perf: entry

* fix: jieba package
2024-04-28 10:27:34 +08:00
Archer
d407e87dd9 4.8-fix (#1305)
* fix if-else find variables (#92)

* fix if-else find variables

* change workflow output type

* fix tooltip style

* fix

* 4.8 (#93)

* api middleware

* perf: app version histories

* faq

* perf: value type show

* fix: ts

* fix: Run the same node multiple times

* feat: auto save workflow

* perf: auto save workflow

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-27 12:21:01 +08:00
gaord
c8412e7dc9 chatbot url没有配置时,不显示chatbot界面,改善页面一致性 (#1295)
Signed-off-by: Ben Gao <bengao168@msn.com>
2024-04-26 13:31:44 +08:00
Archer
f6247fe11d remove isolate vm (#1299) 2024-04-26 12:56:41 +08:00
Archer
613699fe59 package (#1298) 2024-04-26 12:45:10 +08:00
Archer
c56c28be23 pnpm lock (#1297) 2024-04-26 12:10:23 +08:00
Archer
89ab17ea2e perf: tool value type and complections body size (#1291) 2024-04-26 10:54:39 +08:00
gaord
c608f86146 增加给嵌入父窗口发送外链聊天开始消息,改善父窗口对聊天过程的协同响应能力 (#1252)
Signed-off-by: Ben Gao <bengao168@msn.com>
2024-04-25 22:41:42 +08:00
Archer
0a8b104bd7 Update README.md 2024-04-25 18:31:08 +08:00
Archer
439c819ff1 4.8 preview (#1288)
* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* perf: workflow ux

* system config

* Newflow (#89)

* docs: Add doc for Xinference (#1266)

Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>

* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* perf: workflow ux

* system config

* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* rename code

* move code

* update flow

* input type selector

* perf: workflow runtime

* feat: node adapt newflow

* feat: adapt plugin

* feat: 360 connection

* check workflow

* perf: flow 性能

* change plugin input type (#81)

* change plugin input type

* plugin label mode

* perf: nodecard

* debug

* perf: debug ui

* connection ui

* change workflow ui (#82)

* feat: workflow debug

* adapt openAPI for new workflow (#83)

* adapt openAPI for new workflow

* i18n

* perf: plugin debug

* plugin input ui

* delete

* perf: global variable select

* fix rebase

* perf: workflow performance

* feat: input render type icon

* input icon

* adapt flow (#84)

* adapt newflow

* temp

* temp

* fix

* feat: app schedule trigger

* feat: app schedule trigger

* perf: schedule ui

* feat: ioslatevm run js code

* perf: workflow varialbe table ui

* feat: adapt simple mode

* feat: adapt input params

* output

* feat: adapt tamplate

* fix: ts

* add if-else module (#86)

* perf: worker

* if else node

* perf: tiktoken worker

* fix: ts

* perf: tiktoken

* fix if-else node (#87)

* fix if-else node

* type

* fix

* perf: audio render

* perf: Parallel worker

* log

* perf: if else node

* adapt plugin

* prompt

* perf: reference ui

* reference ui

* handle ux

* template ui and plugin tool

* adapt v1 workflow

* adapt v1 workflow completions

* perf: time variables

* feat: workflow keyboard shortcuts

* adapt v1 workflow

* update workflow example doc (#88)

* fix: simple mode select tool

---------

Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
Co-authored-by: Carson Yang <yangchuansheng33@gmail.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>

* doc

* perf: extract node

* extra node field

* update plugin version

* doc

* variable

* change doc & fix prompt editor (#90)

* fold workflow code

* value type label

---------

Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
Co-authored-by: Carson Yang <yangchuansheng33@gmail.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-25 17:51:20 +08:00
Carson Yang
b08d81f887 docs: Add doc for Xinference (#1266)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-04-22 23:56:55 +08:00
Archer
bc0ac6d26b Fix: websync doc and export dataset ux (#1225)
* Revert "lafAccount add pat & re request when token invalid (#76)" (#77)

This reverts commit 83d85dfe37adcaef4833385ea52ee79fd84720be.

* perf: workflow ux

* system config

* perf: export data

* doc

* update doc

* fix: whisper
2024-04-18 12:03:30 +08:00
xiaotian
78d50e157f fix: base64 image undefined (#1231) 2024-04-17 22:56:52 +08:00
allence
3d046974b8 Update commercial price (#1) (#1222) 2024-04-16 23:05:08 +08:00
gao
dc2bf0409f Docs: fix README.md style (#1215) 2024-04-15 16:50:11 +08:00
JINGLE
97d097a490 修复拖动聊天图标容易中断问题 (#1194) 2024-04-15 16:49:22 +08:00
Archer
c314312a57 4.7.1 production (#1173)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-11 16:30:17 +08:00
Howie Lau
db2dd91f03 fix the problem that no permission to exported knowledge when the cookie cannot be get (#1182) 2024-04-11 11:50:35 +08:00
Archer
2991c07467 Fix share page whisper auth (#1161)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-09 21:38:47 +08:00
Archer
adfad8ff7f Update laf module document (#1154)
* Yjl (#74)

* FIX: Query Extension 历史记录拼接不正确 (#1144)

* FIX: Query Extension 历史记录拼接不正确

* add .text

* fix: tts modal close and rerank doc

* laf doc

---------

Co-authored-by: Hexiao Zhang <731931282qq@gmail.com>

* update emb script

* feat: add route push to laf params

* perf: logo size

* README

* README

* laf doc icon

---------

Co-authored-by: Hexiao Zhang <731931282qq@gmail.com>
2024-04-09 00:15:04 +08:00
Archer
1fbc407ecf 4.7.1-alpha2 (#1153)
Co-authored-by: UUUUnotfound <31206589+UUUUnotfound@users.noreply.github.com>
Co-authored-by: Hexiao Zhang <731931282qq@gmail.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-08 21:17:33 +08:00
Hexiao Zhang
3b0b2d68cc FIX: Query Extension 历史记录拼接不正确 (#1144)
* FIX: Query Extension 历史记录拼接不正确

* add .text
2024-04-08 10:38:05 +08:00
Archer
64db0e4f25 Update queryExtension.ts
修复问题扩展历史记录问题
2024-04-08 10:24:49 +08:00
Archer
5cfa43287f Update README.md 2024-04-06 22:19:17 +08:00
UUUUnotfound
a01b945bc9 Update docker-compose.yml (#1134)
Fix `docker-compose up -d`  Error : 
 ```
ERROR: Invalid interpolation format for "entrypoint" option in service "mongo": "openssl rand -base64 128 > /data/mongodb.key
```
修复docker-compose.yml中环境变量替换问题

由于docker-compose在解析entrypoint中的$字符时会将其误认为环境变量,导致无法正确处理脚本里的特殊变量(如 "$@")。通过将$字符替换为$$来避免这一问题,确保了docker-compose可以正确解析并执行MongoDB初始化脚本。
2024-04-06 22:16:25 +08:00
Archer
3b99e05cdc doc (#1131)
doc

doc

doc

doc

http error response

remove upload file count token

Add more timeout
2024-04-03 18:18:18 +08:00
Archer
8a46372418 4.7.1-alpha (#1120)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-04-03 18:14:09 +08:00
Archer
9ae581e09b Update README.md 2024-04-03 10:34:49 +08:00
Archer
21288d1736 Feat: pptx and xlsx loader (#1118)
* perf: plan tip

* perf: upload size controller

* feat: add image ttl index

* feat: new upload file ux

* remove file

* feat: support read pptx

* feat: support xlsx

* fix: rerank docker flie
2024-04-01 19:01:26 +08:00
Yao Yao
f9d266a6af fix name from originBucekerName to originBucketName (#1114) 2024-04-01 16:03:10 +08:00
Rick
692e75627b doc: add readme file of the helm chart (#1095)
Signed-off-by: rick <LinuxSuRen@users.noreply.github.com>
Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
2024-03-30 22:40:33 +08:00
Rick
018424c0fa chore: avoid trigger the helm release in main branch (#1089) 2024-03-29 09:27:25 +08:00
Archer
0490b83b9e fix doc images (#1083)
* perf: clear tmp files

* fix doc images

* update docker-compose
2024-03-28 10:17:28 +08:00
wikkipedia
00ace0b69c update reranker source code (#1082) 2024-03-27 21:43:48 +08:00
wertycn
3f892bd810 Fix: HTTP组件中文错别字修复 (#1080)
* fix: HTTP组件错别字修复

* fix: Http 组件中文错别字修复
2024-03-27 17:02:05 +08:00
Rick
d127060bc8 fix: the helm dep update step is missing (#1077)
Signed-off-by: rick <LinuxSuRen@users.noreply.github.com>
Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
2024-03-27 17:01:37 +08:00
Archer
1829b22c01 fix: plugin update (#1076)
fix: ts

perf: max w

perf: inform tip

fix: inform

remove deploy doc

remove volumn
2024-03-27 13:52:29 +08:00
Archer
9e193b16a1 调整更新文档,不要挂载持久化 (#1075)
* fix: plugin update

* feat: get current time plugin

* fix: ts

* perf: select app ux

* fix: ts

* perf: max w

* perf: inform tip

* fix: inform

* remove deploy doc
2024-03-27 13:47:16 +08:00
Archer
6b7b03c245 4.7 doc update (#1068)
* fix: plugin update

* feat: get current time plugin

* fix: ts

* perf: select app ux

* fix: ts

* perf: max w

* move code

* perf: inform tip

* fix: inform

* doc

* fix: tool handle

* perf: tmp file store

* doc

* fix: message file selector

* feat: doc

* perf: switch trigger

* doc

* fix: openapi import

* rount the number

* parse openapi schema

* fix empty line after variables (#64)

* doc image

* image size

* doc

* doc

* catch error

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-03-27 12:50:07 +08:00
Rick
c7e6448272 feat: support to install fastgpt via helm chart (#1023)
* feat: support to install fastgpt via helm chart

Signed-off-by: rick <LinuxSuRen@users.noreply.github.com>

---------

Signed-off-by: rick <LinuxSuRen@users.noreply.github.com>
Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
2024-03-26 16:50:24 +08:00
Archer
911512b36d 4.7-production (#1053)
* 4.7-alpha3 (#62)

* doc

* Optimize possible null Pointers and parts of Ux

* fix: mulity index training error

* feat: doc and rename question guide

* fix ios speech input (#59)

* fix: prompt editor variables nowrap (#61)

* change openapi import in http module with curl import (#60)

* chore(ui): dataset import modal ui (#58)

* chore(ui): dataset import modal ui

* use component

* fix height

* 4.7 (#63)

* fix: claude3 image type verification failed (#1038) (#1040)

* perf: curl import modal

* doc img

* perf: adapt cohere rerank

* perf: code

* perf: input style

* doc

---------

Co-authored-by: xiaotian <dimsky@163.com>

* fix: ts

* docker deploy

* perf: prompt call

* doc

* ts

* finish ui

* perf: outlink detail ux

* perf: user schema

* fix: plugin update

* feat: get current time plugin

* fix: ts

* perf: fetch anamation

* perf: mark ux

* doc

* perf: select app ux

* fix: split text custom string conflict

* peref: inform readed

* doc

* memo flow component

* perf: version

* faq

* feat: flow max runtimes

* feat: similarity tip

* feat: auto detect file encoding

* Supports asymmetric vector model

* fix: ts

* perf: max w

* move code

* perf: hide whisper

* fix: ts

* feat: system msg modal

* perf: catch error

* perf: inform tip

* fix: inform

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
Co-authored-by: xiaotian <dimsky@163.com>
2024-03-26 12:09:31 +08:00
xiaotian
ef15ca894e fix: claude3 image type verification failed (#1038) (#1040) 2024-03-22 13:19:42 +08:00
Archer
a63467d751 优化建议模式;修复多索引训练失败问题 (#1043)
* doc

* Optimize possible null Pointers and parts of Ux

* fix: mulity index training error
2024-03-21 19:48:57 +08:00
Archer
9d27de154b 4.7-alpha2 (#1027)
* feat: stop toolCall and rename some field. (#46)

* perf: node delete tip;pay tip

* fix: toolCall cannot save child answer

* feat: stop tool

* fix: team modal

* fix feckbackMoal  auth bug (#47)

* 简单的支持提示词运行tool。优化workflow模板 (#49)

* remove templates

* fix: request body undefined

* feat: prompt tool run

* feat: workflow tamplates modal

* perf: plugin start

* 4.7 (#50)

* fix docker-compose download url (#994)

original code is a bad url with '404 NOT FOUND' return.
fix docker-compose download url, add 'v' before docker-compose version

* Update ai_settings.md (#1000)

* Update configuration.md

* Update configuration.md

* Fix history in classifyQuestion and extract modules (#1012)

* Fix history in classifyQuestion and extract modules

* Add chatValue2RuntimePrompt import and update text formatting

* flow controller to packages

* fix: rerank select

* modal ui

* perf: modal code path

* point not sufficient

* feat: http url support variable

* fix http key

* perf: prompt

* perf: ai setting modal

* simple edit ui

---------

Co-authored-by: entorick <entorick11@qq.com>
Co-authored-by: liujianglc <liujianglc@163.com>
Co-authored-by: Fengrui Liu <liufengrui.work@bytedance.com>

* fix team share redirect to login (#51)

* feat: support openapi import plugins (#48)

* feat: support openapi import plugins

* feat: import from url

* fix: add body params parse

* fix build

* fix

* fix

* fix

* tool box ui (#52)

* fix: training queue

* feat: simple edit tool select

* perf: simple edit dataset prompt

* fix: chatbox tool ux

* feat: quote prompt module

* perf: plugin tools sign

* perf: model avatar

* tool selector ui

* feat: max histories

* perf: http plugin import (#53)

* perf: plugin http import

* chatBox ui

* perf: name

* fix: Node template card (#54)

* fix: ts

* setting modal

* package

* package

* feat: add plugins search (#57)

* feat: add plugins search

* perf: change http plugin header input

* Yjl (#56)

* perf: prompt tool call

* perf: chat box ux

* doc

* doc

* price tip

* perf: tool selector

* ui'

* fix: vector queue

* fix: empty tool and empty response

* fix: empty msg

* perf: pg index

* perf: ui tip

* doc

* tool tip

---------

Co-authored-by: yst <77910600+yu-and-liu@users.noreply.github.com>
Co-authored-by: entorick <entorick11@qq.com>
Co-authored-by: liujianglc <liujianglc@163.com>
Co-authored-by: Fengrui Liu <liufengrui.work@bytedance.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-03-21 13:32:31 +08:00
Fengrui Liu
6d4b331db9 Fix history in classifyQuestion and extract modules (#1012)
* Fix history in classifyQuestion and extract modules

* Add chatValue2RuntimePrompt import and update text formatting
2024-03-18 19:47:40 +08:00
Archer
a6bb554fa4 Update configuration.md 2024-03-17 09:51:20 +08:00
Archer
f5b0d60ff1 Update configuration.md 2024-03-16 22:28:16 +08:00
liujianglc
d62f5b4f25 Update ai_settings.md (#1000) 2024-03-15 09:47:14 +08:00
entorick
029a2f8090 fix docker-compose download url (#994)
original code is a bad url with '404 NOT FOUND' return. 
fix docker-compose download url, add 'v' before docker-compose version
2024-03-14 14:43:27 +08:00
GooYoung
98834ece54 docs: Fixed misspelled key "usedInToolCall" (#992) 2024-03-14 12:52:15 +08:00
Archer
9501c3f3a1 V4.7-alpha (#985)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-03-13 10:50:02 +08:00
Carson Yang
5bca15f12f Docs: fix HomePage (#977)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-03-12 13:51:30 +08:00
Archer
753b164ea2 修复4.6.9问题 (#976)
* Fixbranch (#43)

* move components to web package (#37)

* move components

* fix

* openapi config

* fix team share bug

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
Co-authored-by: archer <545436317@qq.com>

* fix: http variable and ai base url

* remove log

---------

Co-authored-by: yst <77910600+yu-and-liu@users.noreply.github.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-03-11 20:12:55 +08:00
Archer
64492b8b33 move components to web package (#37) (#970)
* move components

* fix

openapi config

doc

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-03-11 13:38:52 +08:00
Carson Yang
80bdbf6bce Docs: update workflow for building docs image (#968)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-03-11 12:52:21 +08:00
Archer
9f0b1d6bad Update README.md 2024-03-10 23:18:01 +08:00
Archer
c44b944fa6 Update docker.md 2024-03-09 21:25:37 +08:00
Archer
61419a5676 Update docker-compose.yml 2024-03-09 21:24:45 +08:00
Archer
47227c1b84 Update docker.md 2024-03-08 21:54:00 +08:00
Archer
4d66e0f828 4.6.9-production (#952)
* move components to web package (#37)

* move components

* fix

* fix: cq connection

* fix pagination (#41)

* doc

* openapi config

* fix team share app lose (#42)

* fix: ts

* doc

* doc

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
Co-authored-by: yst <77910600+yu-and-liu@users.noreply.github.com>
2024-03-08 13:33:45 +08:00
sgdream
46d9a6461f fix: 知识库QA生成,答案中有“Q”会导致提前截断。 (#950) 2024-03-08 09:47:48 +08:00
John Chen
b74dd2341b reranker.md优化docker启动命令,并增加docker-compose.yml示例 (#936)
原docker启动命令启动后的容器只能使用CPU运行。本次修改增加了GPU参数,并提供docker-compose.yml示例
2024-03-06 18:13:55 +08:00
Archer
af581bc903 Global variables support external variable; Extract module support default value (#921) 2024-03-05 14:13:22 +08:00
Archer
42a8184ea0 v4.6.9-alpha (#918)
Co-authored-by: Mufei <327958099@qq.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-03-04 00:05:25 +08:00
Mufei
f9f0b4bffd Update http468.ts (#903)
修复HTTP模块,http请求错误的stack堆栈信息长度冗余导致超过MongoDB数据库限制从而导致聊天对话插入数据库失败,修复方法为修改为如果http请求错误只返回几项重要信息而不是整个堆栈数据
2024-03-03 22:21:30 +08:00
Archer
064c64e74c V4.6.9-first commit (#899)
* perf: insert mongo dataset data session

* perf: dataset data index

* remove delay

* rename bill schema

* rename bill record

* perf: bill table

* perf: prompt

* perf: sub plan

* change the usage count

* feat: usage bill

* publish usages

* doc

* 新增团队聊天功能 (#20)

* perf: doc

* feat 添加标签部分

feat 信息团队标签配置

feat 新增团队同步管理

feat team分享页面

feat 完成team分享页面

feat 实现模糊搜索

style 格式化

fix 修复迷糊匹配

style 样式修改

fix 团队标签功能修复

* fix 修复鉴权功能

* merge 合并代码

* fix 修复引用错误

* fix 修复pr问题

* fix 修复ts格式问题

---------

Co-authored-by: archer <545436317@qq.com>
Co-authored-by: liuxingwan <liuxingwan.lxw@alibaba-inc.com>

* update extra plan

* fix: ts

* format

* perf: bill field

* feat: standard plan

* fix: ts

* feat 个人账号页面修改 (#22)

* feat 添加标签部分

feat 信息团队标签配置

feat 新增团队同步管理

feat team分享页面

feat 完成team分享页面

feat 实现模糊搜索

style 格式化

fix 修复迷糊匹配

style 样式修改

fix 团队标签功能修复

* fix 修复鉴权功能

* merge 合并代码

* fix 修复引用错误

* fix 修复pr问题

* fix 修复ts格式问题

* feat 修改个人账号页

---------

Co-authored-by: liuxingwan <liuxingwan.lxw@alibaba-inc.com>

* sub plan page (#23)

* fix chunk index; error page text

* feat: dataset process Integral prediction

* feat: stand plan field

* feat: sub plan limit

* perf: index

* query extension

* perf: share link push app name

* perf: plan point unit

* perf: get sub plan

* perf: account page

* feat 新增套餐详情弹窗代码 (#24)

* merge 合并代码

* fix 新增套餐详情弹框

* fix 修复pr问题

* feat: change http node input to prompt editor (#21)

* feat: change http node input to prompt editor

* fix

* split PromptEditor to HttpInput

* Team plans (#25)

* perf: pay check

* perf: team plan test

* plan limit check

* replace sensitive text

* perf: fix some null

* collection null check

* perf: plans modal

* perf: http module

* pacakge (#26)

* individuation page and pay modal amount (#27)

* feat: individuation page

* team chat config

* pay modal

* plan count and replace invalid chars (#29)

* fix: user oneapi

* fix: training queue

* fix: qa queue

* perf: remove space chars

* replace invalid chars

* change httpinput dropdown menu (#28)

* perf: http

* reseet free plan

* perf: plan code to packages

* remove llm config to package

* perf: code

* perf: faq

* fix: get team plan

---------

Co-authored-by: yst <77910600+yu-and-liu@users.noreply.github.com>
Co-authored-by: liuxingwan <liuxingwan.lxw@alibaba-inc.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-02-28 13:19:15 +08:00
Holata Seminole
32686f9e3e docs: fix typos (#898) 2024-02-27 18:53:17 +08:00
Archer
fd9b6291af Revert "sub plan page (#885)" (#886)
This reverts commit 443ad37b6a.
2024-02-23 17:48:15 +08:00
Archer
443ad37b6a sub plan page (#885)
* perf: insert mongo dataset data session

* perf: dataset data index

* remove delay

* rename bill schema

* rename bill record

* perf: bill table

* perf: prompt

* perf: sub plan

* change the usage count

* feat: usage bill

* publish usages

* doc

* 新增团队聊天功能 (#20)

* perf: doc

* feat 添加标签部分

feat 信息团队标签配置

feat 新增团队同步管理

feat team分享页面

feat 完成team分享页面

feat 实现模糊搜索

style 格式化

fix 修复迷糊匹配

style 样式修改

fix 团队标签功能修复

* fix 修复鉴权功能

* merge 合并代码

* fix 修复引用错误

* fix 修复pr问题

* fix 修复ts格式问题

---------

Co-authored-by: archer <545436317@qq.com>
Co-authored-by: liuxingwan <liuxingwan.lxw@alibaba-inc.com>

* update extra plan

* fix: ts

* format

* perf: bill field

* feat: standard plan

* fix: ts

* feat 个人账号页面修改 (#22)

* feat 添加标签部分

feat 信息团队标签配置

feat 新增团队同步管理

feat team分享页面

feat 完成team分享页面

feat 实现模糊搜索

style 格式化

fix 修复迷糊匹配

style 样式修改

fix 团队标签功能修复

* fix 修复鉴权功能

* merge 合并代码

* fix 修复引用错误

* fix 修复pr问题

* fix 修复ts格式问题

* feat 修改个人账号页

---------

Co-authored-by: liuxingwan <liuxingwan.lxw@alibaba-inc.com>

* fix chunk index; error page text

* feat: dataset process Integral prediction

* feat: stand plan field

* feat: sub plan limit

* perf: index

* query extension

* perf: share link push app name

* perf: plan point unit

* perf: get sub plan

* perf: account page

---------

Co-authored-by: yst <77910600+yu-and-liu@users.noreply.github.com>
Co-authored-by: liuxingwan <liuxingwan.lxw@alibaba-inc.com>
2024-02-23 17:47:34 +08:00
Kenith-Zhang
7a87f13aa8 docs:Update chatglm2.md and reranker.md the 'requirements' the word error (#866)
* Update chatglm2.md

docs:chatglm2.md the 'requirements' the word error

* docs reranker.md  the 'requirements' the word error
2024-02-22 09:48:45 +08:00
imgbot[bot]
d4aa19d8f2 [ImgBot] Optimize images (#859)
*Total -- 1,066.38kb -> 626.26kb (41.27%)

/docSite/assets/imgs/dataset_search_process.png -- 427.67kb -> 91.64kb (78.57%)
/docSite/assets/imgs/dataset_tree.png -- 100.17kb -> 24.38kb (75.66%)
/docSite/assets/imgs/http1.jpg -- 30.60kb -> 26.77kb (12.54%)
/docSite/static/android-chrome-256x256.png -- 5.57kb -> 4.93kb (11.41%)
/docSite/assets/imgs/sealos_price.jpg -- 148.36kb -> 135.89kb (8.41%)
/docSite/static/android-chrome-512x512.png -- 11.31kb -> 10.37kb (8.3%)
/docSite/static/android-chrome-192x192.png -- 4.11kb -> 3.77kb (8.15%)
/docSite/static/apple-touch-icon.png -- 3.87kb -> 3.55kb (8.08%)
/docSite/static/docs/mstile-150x150.png -- 3.01kb -> 2.77kb (8%)
/docSite/static/mstile-150x150.png -- 3.01kb -> 2.77kb (8%)
/docSite/assets/imgs/demo-appointment5.jpg -- 160.47kb -> 154.53kb (3.7%)
/docSite/assets/imgs/1.png -- 108.90kb -> 106.11kb (2.56%)
/docSite/static/favicon-32x32.png -- 1.01kb -> 0.99kb (2.13%)
/docSite/assets/imgs/2.png -- 32.49kb -> 31.97kb (1.6%)
/docSite/assets/imgs/versatile_assistant_5.png -- 25.81kb -> 25.80kb (0.06%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2024-02-18 20:07:44 +08:00
Archer
0c439c7827 perf: mongo doc (#855) 2024-02-17 10:57:39 +08:00
Archer
bf7ee919b6 Fix: pdf version (#853)
* doc

* perf: mongo index

* perf: chat item index

* fix: packages
2024-02-16 12:19:05 +08:00
Archer
91bcf8c53e 4.6.8 supplement (#831)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-02-15 12:26:02 +08:00
Archer
51bbdf26a3 4.6.8-production (#822)
* Json completion (#16)

* json-completion

* fix duplicate

* fix

* fix: config json

* feat: query extension

* perf: i18n

* 468 doc

* json editor

* perf: doc

* perf: default extension model

* docker file

* doc

* perf: token count

* perf: search extension

* format

* perf: some constants data

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-02-05 00:51:46 +08:00
Robin Wang
ec8e2512bc change gpt-4-turbo maxResponse configuration template (#814)
用最新的配置文件4.6.8 ,对话选gpt-4-turbo 报错:
null max_tokens is too large: 62500. This model supports at most 4096 completion tokens, whereas you provided 62500. (request id: 20240202110253407344738SmDnkwX1)
原因是官方gpt-4-turbo 最大的返回token 4096.
2024-02-02 12:20:16 +08:00
Archer
34602b25df 4.6.8-alpha (#804)
* perf: redirect request and err log replace

perf: dataset openapi

feat: session

fix: retry input error

feat: 468 doc

sub page

feat: standard sub

perf: rerank tip

perf: rerank tip

perf: api sdk

perf: openapi

sub plan

perf: sub ui

fix: ts

* perf: init log

* fix: variable select

* sub page

* icon

* perf: llm model config

* perf: menu ux

* perf: system store

* perf: publish app name

* fix: init data

* perf: flow edit ux

* fix: value type format and ux

* fix prompt editor default value (#13)

* fix prompt editor default value

* fix prompt editor update when not focus

* add key with variable

---------

Co-authored-by: Archer <545436317@qq.com>

* fix: value type

* doc

* i18n

* import path

* home page

* perf: mongo session running

* fix: ts

* perf: use toast

* perf: flow edit

* perf: sse response

* slider ui

* fetch error

* fix prompt editor rerender when not focus by key defaultvalue (#14)

* perf: prompt editor

* feat: dataset search concat

* perf: doc

* fix:ts

* perf: doc

* fix json editor onblur value (#15)

* faq

* vector model default config

* ipv6

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-02-01 21:57:41 +08:00
Fengrui Liu
fc19c4cf09 Add IPv6 support for hostnames (#807) 2024-02-01 21:44:29 +08:00
Nils Jacobsen
9188752b41 fix: badge points to right repo now (#799) 2024-01-29 19:11:14 +08:00
Nils Jacobsen
6b40062504 feat: add localization editor and ide extension (#786)
* feat: add localization editor and ide extension

* feat: add markdown status translation badge
2024-01-29 18:14:02 +08:00
Fengrui Liu
72d1503fa3 Fixes: Fix logic error when extraction result is "false". (#797)
BUG when the value of arg is 'false'
2024-01-29 12:03:03 +08:00
Archer
2c6dbe13d9 fix: retry input and whisper (#785) 2024-01-25 15:41:29 +08:00
Archer
318116627c perf: redirect request and err log replace (#768)
perf: dataset openapi

openapi
2024-01-23 10:46:02 +08:00
Archer
379673cae1 fix colection create api (#766)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-01-23 09:01:24 +08:00
Archer
aab6ee51eb V4.6.7-production (#759) 2024-01-22 13:48:55 +08:00
William Zhang
91b7d81c1a bugfix: correct time to real 7 days (#754) 2024-01-19 21:36:38 +08:00
Archer
5e2adb22f0 4.6.7 fix (#752) 2024-01-19 20:16:08 +08:00
Archer
c031e6dcc9 4.6.7-alpha commit (#743)
Co-authored-by: Archer <545436317@qq.com>
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-01-19 11:17:28 +08:00
lolocoo
8ee7407c4c Update data_search.md (#745)
错别字
2024-01-18 11:25:58 +08:00
Archer
006ad17c6a 4.6.7 first pr (#726) 2024-01-10 23:35:04 +08:00
徒言
414b693303 Improve the i18n configuration of the chat page (#719) 2024-01-10 15:18:55 +08:00
Yao Yao
dfa6586e5e Docs: update SystemParams to systemEnv (#712)
* Ignore .idea directory

* docs: update SystemParams to systemEnv
2024-01-10 15:16:55 +08:00
Yao Yao
5968bfeb12 Ignore .idea directory (#711) 2024-01-10 15:16:32 +08:00
Archer
5876a47da6 Update rearanker code url. Add chat storage ip address (#717)
* save chat origin ip

* reranker code url
2024-01-09 12:09:36 +08:00
Carson Yang
13eda40443 docs: optimize css style (#700)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-01-06 18:42:27 +08:00
Archer
84cc4baf21 Commercial baseurl (#697) 2024-01-06 10:36:31 +08:00
Carson Yang
dfa4c0831c Update workflow deploy-docs-preview (#699)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-01-05 22:47:07 +08:00
Carson Yang
9329ddeac5 docs: update cdn link (#698)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-01-05 22:31:17 +08:00
Carson Yang
8d17f96600 docs: update font and cdn (#696)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2024-01-05 18:02:53 +08:00
Archer
3f088bce6a Update docs and response tag in share page (#694)
* perf: chunk index show

* share response

* perf: vector query

* web printFinger

* remove log

* fix: bucket name

* perf: training schema

* perf: sort index
2024-01-05 18:02:37 +08:00
不做了睡大觉
331d18c88f 修复m3e向量模型无法正常处理字符串的问题 (#693) 2024-01-05 12:58:50 +08:00
Archer
828829011a feat: Text check before synchronization (#689)
* fix: icon

* fix: web selector

* fix: web selector

* perf: link sync

* dev doc

* chomd doc

* perf: git intro

* 466 intro

* intro img

* add json editor (#5)

* team limit

* websync limit

* json editor

* text editor

* perf: search test

* change cq value type

* doc

* intro img

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-01-04 23:19:24 +08:00
Archer
c2abbb579f perf: auto load icons (#688)
* perf: icon

* perf: icon

* doc

* perf: simple edit ui

* doc

* doc

* doc

* doc
2024-01-03 23:51:12 +08:00
Archer
2fc6e921e0 perf: imgs (#686) 2024-01-03 15:51:30 +08:00
Archer
13b10720ac v4.6.6-search test adapt diff search mode (#685) 2024-01-03 15:40:03 +08:00
leoterry
c766a0ed8a fix: init pg error error: CREATE INDEX CONCURRENTLY cannot run inside a transaction block (#684)
Co-authored-by: weifj <“weifj@tuyuansu.com.cn”>
2024-01-03 14:19:08 +08:00
luanshaotong
d5b24eca57 add reranker (#679) 2024-01-02 18:10:15 +08:00
Archer
2e75851b02 v4.6.6-fix (#676) 2024-01-02 14:18:51 +08:00
Archer
d645a7406b g# This is a combination of 6 commits. (#675)
perf: node render

perf: react flow performance

config

perf: pg index

perf: oauth login

doc

doc
2024-01-01 13:46:09 +08:00
Archer
9ccfda47b7 V4.6.6-2 (#673) 2023-12-31 14:12:51 +08:00
xavierxcn
ccca0468da fix: 知识库-导入-QA 中提示可以选择 md 和 html 文件,但是确无法选择 md 和 html 文件。是因为 QA.tsx中定义的fileExtension变量少写了一个逗号,我加上了这个逗号。 (#672) 2023-12-30 12:40:30 +08:00
Archer
5b676ff4ad config (#662) 2023-12-27 20:43:01 +08:00
Archer
759a2330e6 V4.6.6-1 (#656) 2023-12-27 11:07:39 +08:00
Archer
86286efb54 fix: init (#653) 2023-12-26 10:10:36 +08:00
Carson Yang
99e8ba2256 Docs: update qr-code (#646)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-12-23 00:26:33 +08:00
Carson Yang
f84fd93cbb Update README (#645)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-12-23 00:19:23 +08:00
Archer
cd682d4275 4.6.5- CoreferenceResolution Module (#631) 2023-12-22 10:47:31 +08:00
Archer
41115a96c0 perf: prompt textarea (#625) 2023-12-18 21:41:17 +08:00
Archer
b14a1db2f9 fix: worker un exit (#624) 2023-12-18 20:35:17 +08:00
Archer
703583fff7 v4.6.5 (#620) 2023-12-18 16:24:50 +08:00
左风
d33c99f564 Docs:fix sealos.md (#619)
* Docs:fix sealos.md

* Docs:fix sealos.md
2023-12-18 13:01:53 +08:00
Archer
05bf1b2265 V4.6.5-alpha (#609) 2023-12-15 15:57:39 +08:00
左风
dd7b4b98ae Docs:add judgement and string modules (#608)
* Docs:add judgement and string modules

* Docs:fix judgement modules
2023-12-15 15:55:31 +08:00
gaord
34656dfda0 解决上传大文件超时的问题 (#606) 2023-12-15 09:55:37 +08:00
左风
7b5c35018b Docs: add data search update OneAPI guide and wechat (#607)
* Docs:update OneAPI guide

* Docs:update use-cases weachat

* Docs:add data search
2023-12-15 09:55:21 +08:00
Carson Yang
7630417679 Update README (#603)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-12-13 22:43:01 +08:00
aigcxiaoyi
63ce76413e Update README.md (#599) 2023-12-13 11:46:55 +08:00
左风
1c1305fcb6 Docs:update sealos guide (#592)
* Docs:update commercial doc

* Docs:update sealos guide
2023-12-12 19:50:44 +08:00
Archer
c3437b9367 fix: template (#597) 2023-12-12 18:17:17 +08:00
Archer
e18c79ca71 v4.6.4-Outlink (#589) 2023-12-12 14:42:20 +08:00
Archer
d2d7eac9e0 4.6.4 (#588) 2023-12-11 15:12:14 +08:00
Archer
84cf6b5658 v4.6.4 (#585)
* perf: md format

* add systemConfig schema (#2)

* fix: markdown

* fix: root

* fix: root

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2023-12-08 16:33:15 +08:00
Archer
b58249fc3a 4.6.4-alpha (#582) 2023-12-08 15:01:11 +08:00
angular-moon
54d52d8d25 fixed: Adjust the api authentication sequence to preferentially process authentication to avoid incorrect authentication caused by cookies (#572) 2023-12-07 18:19:18 +08:00
Carson Yang
f298b90b69 Docs: update theme version (#571)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-12-07 18:07:57 +08:00
Archer
e01c38efe0 4.6.4-alpha (#569) 2023-12-07 13:43:08 +08:00
Archer
71afe71192 docker file and version intro (#556) 2023-12-05 10:46:27 +08:00
Archer
62e87551ac New dpcs structure and dataset i18n (#551)
* perf: check balance

* md

* lock way

* i18n

* docs

* doc

* i18n

* update doc

* feat: one link sync

* feat: one link sync

* feat: one link sync

* feat: one link sync

* feat: one link sync

* feat: one link sync

* feat: one link sync
2023-12-04 21:37:07 +08:00
Peter Dave Hello
c3ae38df8b Optimize apk install process in Dockerfile (#553) 2023-12-04 21:29:12 +08:00
Archer
9c77dfbddd fix: img compress (#546) 2023-12-03 23:56:45 +08:00
NongMO
7fc05af09e fix: custom chat title (#534)
* Fix: Update Custom Chat Title Based on chatId

* remove `new:true` option

* Update update.ts

---------

Co-authored-by: Archer <545436317@qq.com>
2023-12-03 21:19:22 +08:00
Archer
a9ae270335 4.6.3-website dataset (#532) 2023-12-03 20:45:57 +08:00
Archer
b916183848 4.6.3-alpha1 (#529) 2023-11-29 20:45:36 +08:00
Archer
007fce2deb system title (#526) 2023-11-29 10:56:53 +08:00
Archer
abc1e576b7 rerank api (#525) 2023-11-28 21:13:15 +08:00
Archer
a74e1d7166 v4.6.2 (#523) 2023-11-28 19:28:46 +08:00
Mufei
e765c3bf95 Update useSelectFile.tsx (#524)
修复知识库选择文件onChange事件遇到有http请求时无法响应的bug
2023-11-28 19:09:56 +08:00
Archer
933c3fdfd6 Add mongo index (#519) 2023-11-26 20:17:29 +08:00
Archer
f818260711 4.6.2-production (#518) 2023-11-26 16:13:45 +08:00
Archer
3acbf1ab17 4.6.2-alpha (#517) 2023-11-25 21:58:00 +08:00
Archer
9cb4280a16 v4.6.2-alpah (#511) 2023-11-24 15:29:43 +08:00
Archer
60f752629f 4.6.1 production (#498) 2023-11-21 18:26:18 +08:00
Archer
0558379ddb v4.6.1 (#497) 2023-11-20 19:20:55 +08:00
heheer
9c4eabfc9e fix audio input infinite rendering (#496) 2023-11-20 18:43:10 +08:00
Archer
b05dd0fde1 oenapi doc (#493)
* mongo init

* perf: mongo connect

* docs

* fix: select file

* format

* remove seed

* doc format

* doc

* perf: tts model type

* doc

* upload time

* doc

* doc

* doc
2023-11-20 13:43:33 +08:00
Ikko Eltociear Ashimine
0df5152202 Docs: Add Japanese README (#455) 2023-11-20 12:36:50 +08:00
左风
e044d3583d Docs:update wechat.md (#494)
* update wechat.md

* update wechat.md
2023-11-20 12:36:21 +08:00
Archer
c5664c7e90 feat: vision model (#489)
* mongo init

* perf: mongo connect

* perf: tts

perf: whisper and tts

peref: tts whisper permission

log

reabase (#488)

* perf: modal

* i18n

* perf: schema lean

* feat: vision model format

* perf: tts loading

* perf: static data

* perf: tts

* feat: image

* perf: image

* perf: upload image and title

* perf: image size

* doc

* perf: color

* doc

* speaking can not select file

* doc
2023-11-18 15:42:35 +08:00
heheer
70f3373246 add image input (#486)
* add image input

* use json
2023-11-17 18:22:29 +08:00
左风
af16817a4a add wechat (#482) 2023-11-17 17:15:41 +08:00
Archer
4358b6de4d Add whisper and tts ui (#484)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2023-11-17 00:03:05 +08:00
Archer
f6aea484ce fix: 46 tmbId empty (#480)
* mongo init

* perf: mongo connect

* perf: favicon

* fix: member  id

* 46fix sh

* doc
2023-11-16 17:10:04 +08:00
Archer
fbe1d8cfed Fixed the duplicate data check problem, history filter and add tts stream (#477) 2023-11-16 16:22:08 +08:00
Archer
16103029f5 doc and config rerank (#475) 2023-11-16 10:46:47 +08:00
Archer
cd3acb44ab v4.6-4 (#473) 2023-11-15 21:35:50 +08:00
Archer
bfd8be5df0 v4.6-3 (#471) 2023-11-15 11:36:25 +08:00
Carson Yang
592e1a93a2 README: add "back top top" button (#441)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-11-15 11:30:21 +08:00
heheer
2b8ff7d32c change default title (#468) 2023-11-13 22:44:11 +08:00
heheer
4593eef2ff add “favicon” feconfig (#467)
* add favicon config

* add default
2023-11-13 16:05:05 +08:00
Archer
d91551e6be v4.6-3 (#463) 2023-11-10 11:14:08 +08:00
Archer
0a0fe31d3c V4.6-2 (#460) 2023-11-09 12:56:16 +08:00
不做了睡大觉
9f889d8806 Create Python API (#457)
* 更新镜像

* 更新镜像信息

* 更新镜像信息

* Create openai_api.py

* Create requirements.txt

* Create README.md

* 添加python接口

* Delete python directory

* Create README.md

* Create Python API

* 文件结构化

* 文件结构化
2023-11-09 11:52:53 +08:00
Archer
8bb5588305 v4.6 -1 (#459) 2023-11-09 09:46:57 +08:00
Archer
661ee79943 fix: CQ module output (#445) 2023-10-30 16:45:36 +08:00
Archer
60ee160131 v4.5.2 (#439) 2023-10-30 13:26:42 +08:00
Archer
008d0af010 Quote Modal UI and fix doc (#432) 2023-10-25 20:13:32 +08:00
lizhuang
f2fb0aedfd Update README.md 文档改为https://doc.fastgpt.in网站访问 (#424)
文档改为https://doc.fastgpt.in网站访问
2023-10-24 18:07:30 +08:00
Archer
1dca5edcc6 v4.5.1-3 (#427) 2023-10-24 17:32:36 +08:00
Archer
1942cb0d67 perf: btn color (#423) 2023-10-24 13:19:23 +08:00
Archer
bf6dbfb245 v4.5.1-2 (#421) 2023-10-23 15:05:13 +08:00
Archer
d37433eacd Config file to set doc baseurl (#419) 2023-10-23 08:56:43 +08:00
Archer
a3534407bf v4.5.1 (#417) 2023-10-22 23:54:04 +08:00
Carson Yang
3091a90df6 Update README (#418)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-22 23:47:09 +08:00
Carson Yang
41b8f4443c Docs: update qr for wechat group (#416)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-22 23:28:46 +08:00
Carson Yang
777f089423 Docs: update README (#407)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-18 15:51:51 +08:00
不做了睡大觉
b23e00f3e5 添加Baichuan2-7B-Chat模型接口文件 (#404)
* 更新镜像

* 更新镜像信息

* 更新镜像信息

* Create openai_api.py

* Create requirements.txt
2023-10-18 10:34:22 +08:00
Archer
3b776b6639 v4.5 (#403) 2023-10-17 10:00:32 +08:00
Archer
dd8f2744bf Extraction schema (#398) 2023-10-14 23:02:01 +08:00
左风
7db8d3ea0f Docs: add quick start and video link (#395) 2023-10-13 20:16:18 +08:00
Archer
ad7a17bf40 Optimize the project structure and introduce DDD design (#394) 2023-10-12 17:46:37 +08:00
李启爱
76ac5238b6 Update 447.md (#392) 2023-10-12 14:56:18 +08:00
Carson Yang
add73aa2c5 Docs: use docsearch (#391)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-12 00:04:45 +08:00
Archer
bcf9491999 v4.4.7-2 (#388) 2023-10-11 17:18:43 +08:00
Archer
d0041a98b4 Optimize the file storage structure of the knowledge base (#386) 2023-10-10 22:41:05 +08:00
Carson Yang
29d152784f Docs: delete image cdn for vercel (#385)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-09 15:03:07 +08:00
Carson Yang
cd7214ba8d Docs: update workflow for building docs image (#384)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-09 14:32:47 +08:00
Archer
6a84e73a82 fix: packages (#378) 2023-10-08 09:59:05 +08:00
Archer
98ce5103a0 v4.4.6 (#377) 2023-10-07 18:02:20 +08:00
Carson Yang
c65a36d3ab Docs: hide button for questionnaire on mobile device (#376)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-07 14:57:26 +08:00
Carson Yang
b6e49da288 Docs: update button for questionnaire (#375)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-06 23:52:45 +08:00
Archer
45998f9cf5 README (#372) 2023-10-06 21:19:44 +08:00
Carson Yang
4197f63751 Update README (#371)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-06 14:07:37 +08:00
Carson Yang
ace8134a16 Docs: add Dockerfile for docs (#369)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-06 08:01:16 +08:00
Carson Yang
7f1fecb84e Docs: update theme (#368)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-10-04 22:25:07 +08:00
Archer
bf172fab81 perf: markdown more wrap (#365) 2023-10-02 20:19:09 +08:00
Archer
36f5648cae perf: v4.4.6-1 (#364) 2023-09-28 17:30:05 +08:00
Archer
ab57bfcc4a perf: completions api.fix: new chat question guide (#361) 2023-09-27 12:05:13 +08:00
Archer
11848b8f44 v4.4.5-3 (#357) 2023-09-26 21:17:13 +08:00
epoh
a11e0bd9c3 Update chatglm2.md (#354) 2023-09-26 15:06:38 +08:00
Archer
f6552d0d4f v4.4.5-2 (#355) 2023-09-26 14:31:37 +08:00
epoh
38d4db5d5f Rename requirement.txt to requirements.txt (#352) 2023-09-26 09:38:14 +08:00
Archer
63cd379682 Add share link hook (#351) 2023-09-25 23:12:42 +08:00
Archer
9136c9306a Add OpenAPI docs;Correct the glm document (#346) 2023-09-25 14:28:44 +08:00
Byte Sound
c9db9f33ea Update intro.md (#348)
错别字,市区改为时区
2023-09-25 13:33:30 +08:00
Archer
3d7178d06f monorepo packages (#344) 2023-09-24 18:02:09 +08:00
Archer
a4ff5a3f73 perf: api key (#342) 2023-09-23 20:28:03 +08:00
Archer
814c5b3d3c Add bill of training and rate of file upload (#339) 2023-09-21 21:02:44 +08:00
Chen X
e7e0677291 Docs:add-workflow-case-全能助手 (#334) 2023-09-21 15:57:42 +08:00
Archer
823f4b7ad1 Optimize the structure and naming of projects (#335) 2023-09-21 14:49:56 +08:00
Carson Yang
a3c77480f7 Add action for translating Non-English issues content to English (#333)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-21 14:19:54 +08:00
Archer
e367265dbb feat: function call prompt version (#331) 2023-09-21 12:27:48 +08:00
Archer
7e0deb29e0 Add SSE controller; fix share page login failed (#330) 2023-09-20 16:34:32 +08:00
Archer
0d94db4331 fix: ts and default dataset (#329) 2023-09-20 11:43:49 +08:00
Carson Yang
177482b33a Docs: fix code block highlight (#328)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-20 11:43:35 +08:00
Archer
63b183a9fe fix: mark modal cannot select folder (#327) 2023-09-20 11:26:17 +08:00
Carson Yang
858117f8c0 Docs: update font to LXGW WenKai (#325)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-19 21:22:04 +08:00
Archer
ac4355d2e1 Add modal to show completion response data (#324) 2023-09-19 20:31:45 +08:00
Archer
ce7da2db66 Optimize chat reponse data (#322) 2023-09-19 16:10:30 +08:00
Archer
0a4a1def1e fix: connected error (#318) 2023-09-19 07:54:50 +08:00
Archer
35f4deca76 Revert "Feature: 高级编排自动布局 (#314)" (#319)
This reverts commit ba1451a0e9.
2023-09-18 23:44:44 +08:00
jaden
ba1451a0e9 Feature: 高级编排自动布局 (#314)
* feat: adFlow auto layout

* chore: delete file and build pnpm lock file
2023-09-18 23:39:19 +08:00
Archer
40d69e6e20 version (#317) 2023-09-18 21:56:38 +08:00
Sr
b8ba947ba8 feat: Added defaultOpen Attribute for iframe (#302)
* feat: Added defaultOpen Attribute for iframe

This commit introduces a new attribute `defaultOpen` for the iframe created in `iframe.js`. The `defaultOpen` attribute allows the iframe to be visible by default when the page loads. This new feature enhances the user experience by providing an option to display the chatbot window immediately after the page is loaded, without requiring user interaction.

* Update iframe.js

code standard
2023-09-18 21:27:08 +08:00
Archer
06be57815e v4.4.3 (#316) 2023-09-18 21:26:42 +08:00
Carson Yang
81e37a5736 Update architecture diagram (#315)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-18 21:26:15 +08:00
Archer
b8ea546b3f v4.2.2 (#312) 2023-09-18 13:37:25 +08:00
Carson Yang
0bb31b985d Docs: update style (#310)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-17 15:06:25 +08:00
Carson Yang
453824260f Docs: fix typo (#307)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-15 22:44:04 +08:00
hehan
a8fdffc3e9 Docs: intergate feishu (#305) 2023-09-15 14:32:43 +08:00
Carson Yang
24164d9454 Update deploy-docs-preview workflow (#304)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-15 13:43:36 +08:00
Archer
4365a94ea9 System optimize (#303) 2023-09-15 10:21:46 +08:00
Carson Yang
7c1ec04380 Docs: add github badge (#301)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-14 17:36:51 +08:00
Archer
09b6365321 perf: action cache (#300) 2023-09-13 22:17:55 +08:00
Archer
eb2e383cc7 perf: document icon and language select (#299) 2023-09-13 19:54:29 +08:00
Archer
ae4c479f37 file name (#297) 2023-09-13 18:23:55 +08:00
Archer
6a996272da fix: share link quote (#296) 2023-09-13 18:15:22 +08:00
Carson Yang
1bf76ebe7a Docs: add limiting responsibility (#295)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-13 17:00:46 +08:00
Archer
a19afca148 v4.4.1 (#294)
* move file

* perf: dataset file manage

* v441 description

* fix: qa csv update file

* feat: rename file

* frontend show system-version
2023-09-13 17:00:17 +08:00
Carson Yang
be3b680bc6 Docs: add community (#293)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-13 13:55:50 +08:00
Carson Yang
31dbcfde9f Docs: update cdn (#291)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-13 09:29:17 +08:00
Archer
6d438aafdf google login and power share link (#292) 2023-09-13 08:49:22 +08:00
Carson Yang
1aaafcf631 Docs: update weight (#290)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-12 22:36:34 +08:00
Carson Yang
7521bce77e Docs: update cdn (#289)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-12 21:33:12 +08:00
Carson Yang
c8dee29dc4 Docs: add pricing doc (#287)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-12 20:06:09 +08:00
Carson Yang
8f953d1fc4 Update README.md (#283)
Add demo video

Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-12 12:46:29 +08:00
Carson Yang
970b62be25 Docs: enable ‘Edit this page’ (#280)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-11 23:59:14 +08:00
Carson Yang
b2b3aa651d Docs: add details shortcode (#279)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-11 20:48:14 +08:00
Archer
b0e7d25464 docs weight (#278) 2023-09-11 18:36:43 +08:00
Archer
b46048609c feat: move dataset (#277) 2023-09-11 18:23:51 +08:00
Archer
ae2887e956 fix: file_id undefined bug (#275) 2023-09-11 10:15:52 +08:00
Archer
7917766024 Dataset folder manager (#274)
* feat: retry send

* perf: qa default value

* feat: dataset folder

* feat: kb folder delete and path

* fix: ts

* perf: script load

* feat: fileCard and dataCard

* feat: search file

* feat: max token

* feat: select dataset

* fix: preview chunk

* perf: source update

* export data limit file_id

* docs

* fix: export limit
2023-09-10 16:37:32 +08:00
不做了睡大觉
a1a63260dd 更新镜像通道 (#272)
* 更新镜像

* 更新镜像信息

* 更新镜像信息
2023-09-08 18:13:37 +08:00
Archer
6f2d556a87 demo (#266) 2023-09-06 18:56:59 +08:00
Carson Yang
565f9c8113 Docs: fix typo (#265)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-06 14:29:49 +08:00
Carson Yang
975e011e03 Docs: update table style (#264)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-06 13:54:23 +08:00
Carson Yang
19ce6f66ca Docs: fix typo (#263)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-06 13:39:47 +08:00
cuisongliu
da6e26f95c build(main): add docs for ci (#261)
Signed-off-by: cuisongliu <cuisongliu@qq.com>
2023-09-06 12:06:51 +08:00
archer
71abe08f05 fix: onwechat yml 2023-09-06 10:46:55 +08:00
Carson Yang
45ba5e1e01 Docs: optimize codeblock (#259)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-06 09:53:37 +08:00
Carson Yang
139d0be52b Docs: fix favicon (#258)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-05 21:28:13 +08:00
Carson Yang
1ba3d72a8a Update docs: change image width (#256)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-09-05 20:51:50 +08:00
archer
cd455b2a79 prompt docs 2023-09-05 20:22:22 +08:00
archer
fa3f3e6264 limit prompt template 2023-09-05 18:29:18 +08:00
archer
9bf5a3ec76 m3e doc 2023-09-05 18:29:15 +08:00
qing hua
95389e31f7 修改了一些错误 (#254)
* Update sse.ts

解决chatglm2控制台输出一半不输出的问题

* 解决知识库相似度搜索结果超过1

* Update sse.ts

---------

Co-authored-by: Archer <545436317@qq.com>
2023-09-05 18:28:59 +08:00
archer
ea65d9b34b onwechat demo 2023-09-05 14:31:04 +08:00
archer
2dd2976efa perf: dev doc 2023-09-05 11:47:04 +08:00
archer
64fde42c87 perf: default lang 2023-09-05 11:44:31 +08:00
archer
7a926b7086 user timezone 2023-09-05 11:30:52 +08:00
archer
562fd2692d issue template 2023-09-04 23:44:08 +08:00
archer
935287a95a doc favicon 2023-09-04 19:45:24 +08:00
archer
bd419a22f4 adapt echarts 2023-09-04 19:25:28 +08:00
不做了睡大觉
32f482b232 增加对echarts图表的支持 (#249)
* 增加对echarts图表的支持

* 增加对echarts的支持
2023-09-04 18:17:39 +08:00
archer
5d596bd3d5 favicon html 2023-09-04 18:16:29 +08:00
archer
ae88d79d6f update bash 2023-09-04 18:03:20 +08:00
archer
1207e3e566 update bash 2023-09-04 17:51:56 +08:00
archer
3449024678 feat: labBot demo 2023-09-04 17:02:21 +08:00
archer
8dba2c39e1 fix: empty kb 2023-09-04 15:47:01 +08:00
archer
94c53804ce fix: quick question and variable 2023-09-04 14:45:01 +08:00
archer
a1bcd798e1 image name 2023-09-04 14:31:03 +08:00
archer
6d51b3babe README 2023-09-04 11:37:46 +08:00
archer
a5fe671ffe perf: timeout 2023-09-04 11:32:49 +08:00
archer
44e772f0fd feat: file relate kb 2023-09-04 10:51:57 +08:00
archer
a3c6d6800b fix: file id 2023-09-03 22:59:11 +08:00
archer
19b1ff5a8d version docs 2023-09-03 22:52:17 +08:00
archer
8d55587cf4 version docs 2023-09-03 22:43:24 +08:00
archer
a754ceaf3b dataset save raw file 2023-09-03 22:39:09 +08:00
archer
086ea83fac docs 2023-09-03 19:06:12 +08:00
archer
1ace8fb9a3 error track 2023-09-03 18:26:36 +08:00
archer
e0b23a26f2 feat: error track, app scroll 2023-09-03 17:43:15 +08:00
archer
7c16d08ec0 feat: crud file 2023-09-03 17:43:14 +08:00
archer
5157e62fed feat: gridfs save file 2023-09-03 17:43:13 +08:00
archer
1fe2c49204 fastgpt char 2023-09-02 00:28:08 +08:00
archer
b9b50a0f5a README 2023-09-01 23:57:58 +08:00
archer
23cc2f81e9 perf: code 2023-09-01 11:47:06 +08:00
archer
68cdf50cb6 perf: config home page 2023-09-01 10:22:31 +08:00
archer
2ae8d43216 fix: reg failed 2023-08-31 20:06:49 +08:00
archer
0ea464f30f docs 2023-08-31 19:04:56 +08:00
archer
7cb035ba24 docs 2023-08-31 18:54:41 +08:00
archer
7231a847f7 fix: variable 2023-08-31 18:46:48 +08:00
archer
4f0f950dd4 docs 2023-08-31 18:43:10 +08:00
archer
c1f4785392 docs 2023-08-31 18:16:24 +08:00
archer
b22c878cf9 fix: variable input and update chat time 2023-08-31 18:09:33 +08:00
archer
3420f677b6 env template 2023-08-31 18:09:32 +08:00
不做了睡大觉
baee8cfe82 私有化模型对接oneapi教程+镜像更新 (#237)
* chatglm2-m3e对接教程

* chatglm2docker部署+对接Oneapi

* Update m3e.md
2023-08-31 17:58:48 +08:00
archer
0b0570fa54 perf: mark icon show 2023-08-30 14:31:46 +08:00
gaord
299409aa7b add python requirement.txt for running GLM2 model (#226)
Signed-off-by: Ben Gao <bengao168@msn.com>
2023-08-30 08:18:03 +08:00
archer
5284312eb3 chat default model 2023-08-29 18:22:45 +08:00
archer
86a0e7ce23 perf: guide modules 2023-08-29 17:59:24 +08:00
archer
e0de04dddb perf: open push data api 2023-08-29 11:07:25 +08:00
archer
19d7edb585 readme 2023-08-28 22:09:42 +08:00
archer
fbb75c97d0 docs 2023-08-28 21:59:25 +08:00
archer
7e9cac3478 feat: config login tip 2023-08-28 21:43:15 +08:00
archer
be937956af perf: config home title 2023-08-28 21:36:37 +08:00
archer
c5c3826714 perf: vector over range error 2023-08-28 15:51:28 +08:00
archer
42fec3a95c perf: git login 2023-08-28 15:30:18 +08:00
archer
64b9367ca1 perf: quote output prompt 2023-08-28 13:47:33 +08:00
Archer
5fcdf28c5c user feedback and admin mark (#228)
* fix: csv empty data

* feat: user feedback and mark answer

* version intro

* perf: chat logs sort
2023-08-27 23:12:06 +08:00
archer
2556c19a9a issue template 2023-08-27 01:18:33 +08:00
Archer
8fd21ad5a7 Update issue templates 2023-08-27 01:13:13 +08:00
archer
efebcd6f1b docs images 2023-08-27 00:27:48 +08:00
Carson Yang
05e681f98f Fix favicon (#225)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-08-27 00:26:51 +08:00
archer
17c59bedfe README 2023-08-27 00:26:14 +08:00
archer
92ebd6a0b9 doc: m3e model 2023-08-26 22:31:21 +08:00
archer
0d26b1d48e fix: file sprcial char 2023-08-26 21:36:48 +08:00
archer
4973d7ad9c fix: default vector 2023-08-26 19:40:18 +08:00
archer
defc73651b glm2 docs 2023-08-26 19:24:14 +08:00
archer
eefc976d42 perf: qa prompt 2023-08-26 19:21:15 +08:00
archer
be33794a5f feat: self vector search 2023-08-26 18:25:12 +08:00
archer
13439c5183 perf: read file token error 2023-08-26 17:17:19 +08:00
archer
93030afe3e fix: limit prompt 2023-08-26 11:56:26 +08:00
archer
dfc40db835 prompt 2023-08-26 10:52:55 +08:00
MaricoHan
7f48acc42e 修正单词拼写 (#223) 2023-08-26 09:36:18 +08:00
archer
5661b11aee docs 2023-08-25 16:34:49 +08:00
archer
4b088e84c7 fix: ts 2023-08-25 15:45:24 +08:00
archer
6d93059e25 feat: config vector model and qa model 2023-08-25 15:00:51 +08:00
archer
a9970dd694 logo 2023-08-25 10:15:09 +08:00
Carson Yang
81421bccef Fix CI workflow (#220)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-08-25 10:06:20 +08:00
Carson Yang
f4ae980a75 Update favicon (#219)
Signed-off-by: Carson Yang <yangchuansheng33@gmail.com>
2023-08-25 09:41:12 +08:00
3326 changed files with 266620 additions and 154877 deletions

12
.dockerignore Normal file
View File

@@ -0,0 +1,12 @@
Dockerfile
.dockerignore
node_modules
npm-debug.log
README.md
.next
.git
.yalc/
yalc.lock
testApi/
*.local.*

30
.github/ISSUE_TEMPLATE/bugs.md vendored Normal file
View File

@@ -0,0 +1,30 @@
---
name: 问题反馈
about: 详细清晰的描述你遇到的问题
title: ''
labels: bug
assignees: ''
---
**例行检查**
[//]: # '方框内填 x 表示打钩'
- [ ] 我已确认目前没有类似 issue
- [ ] 我已完整查看过项目 README以及[项目文档](https://doc.tryfastgpt.ai/docs/intro/)
- [ ] 我使用了自己的 key并确认我的 key 是可正常使用的
- [ ] 我理解并愿意跟进此 issue协助测试和提供反馈
- [x] 我理解并认可上述内容,并理解项目维护者精力有限,**不遵循规则的 issue 可能会被无视或直接关闭**
**你的版本**
- [ ] 公有云版本
- [ ] 私有部署版本, 具体版本号:
**问题描述, 日志截图,配置文件等**
**复现步骤**
**预期结果**
**相关截图**

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: 飞书话题群
url: https://oss.laf.run/otnvvf-imgs/fastgpt-feishu1.png
about: FastGPT 全是问题群

23
.github/ISSUE_TEMPLATE/features.md vendored Normal file
View File

@@ -0,0 +1,23 @@
---
name: 功能请求
about: 详细描述你期望的功能
title: ''
labels: enhancement
assignees: ''
---
**例行检查**
[//]: # '方框内填 x 表示打钩'
- [ ] 我已确认目前没有类似 features
- [ ] 我已确认我已升级到最新版本
- [ ] 我已完整查看过项目 README已确定现有版本无法满足需求
- [ ] 我理解并愿意跟进此 features协助测试和提供反馈
- [x] 我理解并认可上述内容,并理解项目维护者精力有限,**不遵循规则的 features 可能会被无视或直接关闭**
**功能描述**
**应用场景**
**相关示例**

30
.github/gh-bot.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
version: v1
debug: true
action:
printConfig: false
release:
retry: 15s
actionName: Release
allowOps:
- cuisongliu
bot:
prefix: /
spe: _
allowOps:
- sealos-ci-robot
- sealos-release-robot
email: sealos-ci-robot@sealos.io
username: sealos-ci-robot
repo:
org: false
message:
success: |
🤖 says: Hooray! The action {{.Body}} has been completed successfully. 🎉
format_error: |
🤖 says: ‼️ There is a formatting issue with the action, kindly verify the action's format.
permission_error: |
🤖 says: ‼️ The action doesn't have permission to trigger.
release_error: |
🤖 says: ‼️ Release action failed.
Error details: {{.Error}}

BIN
.github/imgs/image.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 548 KiB

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 437 KiB

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 KiB

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 159 KiB

15
.github/imgs/logo-left.svg vendored Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

619
.github/imgs/logo.svg vendored
View File

@@ -1,599 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="256px" height="256px" viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve"> <image id="image0" width="256" height="256" x="0" y="0"
href="data:image/png;base64,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
MDqUEekAAAAASUVORK5CYII=" />
</svg>
<svg width="49" height="48" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M20.3692 7.00001L28.9536 7V7.00294C29.0284 7.00099 29.1033 7.00002 29.1782 7.00002C30.3387 7.00002 31.4878 7.2344 32.5599 7.68979C33.6321 8.14518 34.6062 8.81265 35.4268 9.6541C36.2474 10.4956 36.8983 11.4945 37.3424 12.5939C37.7865 13.6933 38.0151 14.8716 38.0151 16.0616L20.3691 16.0616L20.3691 41C19.2418 41 18.1255 40.7655 17.084 40.3097C16.0425 39.854 15.0961 39.1861 14.299 38.344C13.5018 37.502 12.8695 36.5024 12.4381 35.4022C12.0566 34.4292 11.8388 33.3945 11.7935 32.3446H11.7846L11.7846 16.2792H11.7871C11.772 15.6165 11.8258 14.9506 11.9496 14.2938C12.2808 12.536 13.0984 10.9214 14.299 9.6541C15.4995 8.38681 17.0291 7.52377 18.6944 7.17413C19.2486 7.05776 19.8095 7 20.3692 7.00001Z"
fill="url(#paint0_linear_1008_3495)" />
<path
d="M27.7569 29.8173H24.7138V21.5343H27.8019V21.5345C28.8803 21.5403 29.9474 21.7544 30.944 22.1651C31.9544 22.5815 32.8725 23.1919 33.6458 23.9613C34.4191 24.7308 35.0326 25.6442 35.4511 26.6496C35.8696 27.6549 36.085 28.7324 36.085 29.8205H27.7569V29.8173Z"
fill="url(#paint1_linear_1008_3495)" />
<defs>
<linearGradient id="paint0_linear_1008_3495" x1="24.8999" y1="7" x2="24.8999" y2="41"
gradientUnits="userSpaceOnUse">
<stop stop-color="#326DFF" />
<stop offset="1" stop-color="#8EAEFF" />
</linearGradient>
<linearGradient id="paint1_linear_1008_3495" x1="30.3994" y1="21.5343" x2="30.3994" y2="29.8205"
gradientUnits="userSpaceOnUse">
<stop stop-color="#326DFF" />
<stop offset="1" stop-color="#8EAEFF" />
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

4
.github/sync_imgs.yml vendored Normal file
View File

@@ -0,0 +1,4 @@
yangchuansheng/fastgpt-imgs:
- source: docSite/assets/imgs/
dest: imgs/
deleteOrphaned: true

View File

@@ -0,0 +1,96 @@
name: Build fastgpt-sandbox images
on:
workflow_dispatch:
push:
paths:
- 'projects/sandbox/**'
tags:
- 'v*'
jobs:
build-fastgpt-sandbox-images:
runs-on: ubuntu-20.04
steps:
# install env
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install Dependencies
run: |
sudo apt update && sudo apt install -y nodejs npm
- name: Set up QEMU (optional)
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# login docker
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Login to Ali Hub
uses: docker/login-action@v2
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ALI_HUB_USERNAME }}
password: ${{ secrets.ALI_HUB_PASSWORD }}
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
# Set tag
- name: Set image name and tag
run: |
if [[ "${{ github.ref_name }}" == "main" ]]; then
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
else
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt-sandbox:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sandbox:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sandbox:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sandbox:latest" >> $GITHUB_ENV
fi
- name: Build and publish image for main branch or tag push event
env:
Git_Tag: ${{ env.Git_Tag }}
Git_Latest: ${{ env.Git_Latest }}
Ali_Tag: ${{ env.Ali_Tag }}
Ali_Latest: ${{ env.Ali_Latest }}
Docker_Hub_Tag: ${{ env.Docker_Hub_Tag }}
Docker_Hub_Latest: ${{ env.Docker_Hub_Latest }}
run: |
docker buildx build \
-f projects/sandbox/Dockerfile \
--platform linux/amd64,linux/arm64 \
--label "org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/fastgpt-sandbox" \
--label "org.opencontainers.image.description=fastgpt-sandbox image" \
--push \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache \
-t ${Git_Tag} \
-t ${Git_Latest} \
-t ${Ali_Tag} \
-t ${Ali_Latest} \
-t ${Docker_Hub_Tag} \
-t ${Docker_Hub_Latest} \
.

View File

@@ -1,71 +0,0 @@
name: deploy-docs
on:
workflow_dispatch:
push:
paths:
- 'docSite/**'
branches:
- 'main'
tags:
- 'v*.*.*'
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains jobs "deploy-production"
deploy-production:
# The environment this job references
environment:
name: Production
url: ${{ steps.vercel-action.outputs.preview-url }}
# The type of runner that the job will run on
runs-on: ubuntu-22.04
# Job outputs
outputs:
docs: ${{ steps.filter.outputs.docs }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Step 1 - Checks-out your repository under $GITHUB_WORKSPACE
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive # Fetch submodules
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
# Step 2 Detect changes to Docs Content
- name: Detect changes in doc content
uses: dorny/paths-filter@v2
id: filter
with:
filters: |
docs:
- 'docSite/content/docs/**'
base: main
# Step 3 - Install Hugo (specific version)
- name: Install Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.117.0'
extended: true
# Step 4 - Builds the site using Hugo
- name: Build
run: hugo -v --minify -s docSite
env:
HUGO_BASEURL: ${{ vars.BASE_URL }}
# Step 5 - Push our generated site to Vercel
- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
id: vercel-action
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }} # Required
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} #Required
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} #Required
github-comment: false
vercel-args: '--prod --local-config ../vercel.json' # Optional
working-directory: docSite/public

View File

@@ -0,0 +1,91 @@
name: Deploy doc image by kubeconfig
on:
workflow_dispatch:
push:
paths:
- 'docSite/**'
branches:
- 'main'
tags:
- 'v*.*.*'
jobs:
build-fastgpt-docs-images:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Change baseURL
run: sed -i 's|^baseURL =.*|baseURL = "https://doc.fastgpt.cn"|g' ./docSite/hugo.toml
- name: Get current date and time
id: datetime
run: echo "datetime=$(date +'%Y%m%d%H%M%S')" >> "$GITHUB_OUTPUT"
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: |
${{ secrets.DOCKER_HUB_NAME }}/fastgpt-docs
ghcr.io/${{ github.repository_owner }}/fastgpt-docs
registry.cn-hangzhou.aliyuncs.com/${{ secrets.ALI_HUB_USERNAME }}/fastgpt-docs
tags: |
${{ steps.datetime.outputs.datetime }}
flavor: latest=false
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Login to Aliyun
uses: docker/login-action@v3
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ALI_HUB_USERNAME }}
password: ${{ secrets.ALI_HUB_PASSWORD }}
- name: Build and push Docker images to ghcr.io and DockerHub
uses: docker/build-push-action@v5
with:
context: .
file: ./docSite/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
outputs:
tags: ${{ steps.datetime.outputs.datetime }}
update-docs-image:
needs: build-fastgpt-docs-images
runs-on: ubuntu-20.04
if: github.repository == 'labring/FastGPT'
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: set image deployment/fastgpt-docs fastgpt-docs=registry.cn-hangzhou.aliyuncs.com/${{ secrets.ALI_HUB_USERNAME }}/fastgpt-docs:${{ needs.build-fastgpt-docs-images.outputs.tags }}
- uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: annotate deployment/fastgpt-docs originImageName="registry.cn-hangzhou.aliyuncs.com/${{ secrets.ALI_HUB_USERNAME }}/fastgpt-docs:${{ needs.build-fastgpt-docs-images.outputs.tags }}" --overwrite

View File

@@ -0,0 +1,79 @@
name: Deploy doc image to vercel
on:
workflow_dispatch:
push:
paths:
- 'docSite/**'
branches:
- 'main'
tags:
- 'v*.*.*'
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains jobs "deploy-production"
deploy-production:
# The environment this job references
environment:
name: Production
url: ${{ steps.vercel-action.outputs.preview-url }}
# The type of runner that the job will run on
runs-on: ubuntu-22.04
# Job outputs
outputs:
docs: ${{ steps.filter.outputs.docs }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Step 1 - Checks-out your repository under $GITHUB_WORKSPACE
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive # Fetch submodules
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
# Step 2 Detect changes to Docs Content
- name: Detect changes in doc content
uses: dorny/paths-filter@v2
id: filter
with:
filters: |
docs:
- 'docSite/content/docs/**'
base: main
- name: Add cdn for images
run: |
sed -i "s#\](/imgs/#\](https://cdn.jsdelivr.net/gh/yangchuansheng/fastgpt-imgs@main/imgs/#g" $(grep -rl "\](/imgs/" docSite/content/zh-cn/docs)
# Step 3 - Install Hugo (specific version)
- name: Install Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.117.0'
extended: true
# Step 4 - Builds the site using Hugo
- name: Build
run: cd docSite && hugo mod get -u github.com/colinwilson/lotusdocs@6d0568e && hugo -v --minify
# Step 5 - Push our generated site to Vercel
- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
id: vercel-action
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }} # Required
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} #Required
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} #Required
github-comment: false
vercel-args: '--prod --local-config ../vercel.json' # Optional
working-directory: docSite/public
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GH_PAT }}
publish_dir: docSite/public

98
.github/workflows/docs-preview.yml vendored Normal file
View File

@@ -0,0 +1,98 @@
name: Preview FastGPT docs
on:
pull_request_target:
paths:
- 'docSite/**'
branches:
- 'main'
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains jobs "deploy-production"
deploy-preview:
# The environment this job references
environment:
name: Preview
url: ${{ steps.vercel-action.outputs.preview-url }}
# The type of runner that the job will run on
runs-on: ubuntu-22.04
# Job outputs
outputs:
url: ${{ steps.vercel-action.outputs.preview-url }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Step 1 - Checks-out your repository under $GITHUB_WORKSPACE
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
submodules: recursive # Fetch submodules
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
# Step 2 Detect changes to Docs Content
- name: Detect changes in doc content
uses: dorny/paths-filter@v2
id: filter
with:
filters: |
docs:
- 'docSite/content/docs/**'
base: main
- name: Add cdn for images
run: |
sed -i "s#\](/imgs/#\](https://cdn.jsdelivr.net/gh/yangchuansheng/fastgpt-imgs@main/imgs/#g" $(grep -rl "\](/imgs/" docSite/content/zh-cn/docs)
# Step 3 - Install Hugo (specific version)
- name: Install Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.117.0'
extended: true
# Step 4 - Builds the site using Hugo
- name: Build
run: cd docSite && hugo mod get -u github.com/colinwilson/lotusdocs@6d0568e && hugo -v --minify
# Step 5 - Push our generated site to Vercel
- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
id: vercel-action
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }} # Required
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} #Required
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} #Required
github-comment: false
vercel-args: '--local-config ../vercel.json' # Optional
working-directory: docSite/public
alias-domains: | #Optional
fastgpt-staging.vercel.app
docsOutput:
needs: [deploy-preview]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Write md
run: |
echo "# 🤖 Generated by deploy action" > report.md
echo "[👀 Visit Preview](${{ needs.deploy-preview.outputs.url }})" >> report.md
cat report.md
- name: Gh Rebot for Sealos
uses: labring/gh-rebot@v0.0.6
if: ${{ (github.event_name == 'pull_request_target') }}
with:
version: v0.0.6
env:
GH_TOKEN: '${{ secrets.GH_PAT }}'
SEALOS_TYPE: 'pr_comment'
SEALOS_FILENAME: 'report.md'
SEALOS_REPLACE_TAG: 'DEFAULT_REPLACE_DEPLOY'

View File

@@ -0,0 +1,52 @@
name: Build FastGPT images in Personal warehouse
on:
workflow_dispatch:
push:
paths:
- 'projects/app/**'
- 'packages/**'
branches:
- 'main'
jobs:
build-fastgpt-images:
runs-on: ubuntu-20.04
if: github.repository != 'labring/FastGPT'
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Set DOCKER_REPO_TAGGED based on branch or tag
run: |
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt:latest" >> $GITHUB_ENV
- name: Build and publish image for main branch or tag push event
env:
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
run: |
docker buildx build \
--build-arg name=app \
--label "org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/FastGPT" \
--label "org.opencontainers.image.description=fastgpt image" \
--push \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache \
-t ${DOCKER_REPO_TAGGED} \
-f Dockerfile \
.

View File

@@ -1,17 +1,17 @@
name: Build fastgpt images and copy image to docker hub
name: Build FastGPT images
on:
workflow_dispatch:
push:
paths:
- 'client/**'
branches:
- 'main'
- 'projects/app/**'
- 'packages/**'
tags:
- 'v*.*.*'
- 'v*'
jobs:
build-fastgpt-images:
runs-on: ubuntu-20.04
steps:
# install env
- name: Checkout
uses: actions/checkout@v3
with:
@@ -25,55 +25,234 @@ jobs:
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# login docker
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Set DOCKER_REPO_TAGGED based on branch or tag
- name: Login to Ali Hub
uses: docker/login-action@v2
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ALI_HUB_USERNAME }}
password: ${{ secrets.ALI_HUB_PASSWORD }}
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
# Set tag
- name: Set image name and tag
run: |
if [[ "${{ github.ref_name }}" == "main" ]]; then
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt:latest" >> $GITHUB_ENV
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt:latest" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt:latest" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt:latest" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt:latest" >> $GITHUB_ENV
else
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt:latest" >> $GITHUB_ENV
fi
- name: Build and publish image for main branch or tag push event
env:
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
run: |
cd client && \
docker buildx build \
-f projects/app/Dockerfile \
--platform linux/amd64,linux/arm64 \
--label "org.opencontainers.image.source= https://github.com/ ${{ github.repository_owner }}/FastGPT" \
--label "org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/FastGPT" \
--label "org.opencontainers.image.description=fastgpt image" \
--label "org.opencontainers.image.licenses=MIT" \
--push \
-t ${DOCKER_REPO_TAGGED} \
-f Dockerfile \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache \
-t ${Git_Tag} \
-t ${Git_Latest} \
-t ${Ali_Tag} \
-t ${Ali_Latest} \
-t ${Docker_Hub_Tag} \
-t ${Docker_Hub_Latest} \
.
push-to-docker-hub:
needs: build-fastgpt-images
build-fastgpt-images-sub-route:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
# install env
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Install Dependencies
run: |
sudo apt update && sudo apt install -y nodejs npm
- name: Set up QEMU (optional)
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# login docker
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Login to Ali Hub
uses: docker/login-action@v2
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ALI_HUB_USERNAME }}
password: ${{ secrets.ALI_HUB_PASSWORD }}
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Set DOCKER_REPO_TAGGED based on branch or tag
# Set tag
- name: Set image name and tag
run: |
if [[ "${{ github.ref_name }}" == "main" ]]; then
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
else
echo "IMAGE_TAG=${{ github.ref_name }}" >> $GITHUB_ENV
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route:latest" >> $GITHUB_ENV
fi
- name: Pull image from GitHub Container Registry
run: docker pull ghcr.io/${{ github.repository_owner }}/fastgpt:${{env.IMAGE_TAG}}
- name: Tag image with Docker Hub repository name and version tag
run: docker tag ghcr.io/${{ github.repository_owner }}/fastgpt:${{env.IMAGE_TAG}} ${{ secrets.DOCKER_IMAGE_NAME }}:${{env.IMAGE_TAG}}
- name: Push image to Docker Hub
run: docker push ${{ secrets.DOCKER_IMAGE_NAME }}:${{env.IMAGE_TAG}}
- name: Build and publish image for main branch or tag push event
env:
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
run: |
docker buildx build \
-f projects/app/Dockerfile \
--platform linux/amd64,linux/arm64 \
--build-arg base_url=/fastai \
--label "org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/FastGPT" \
--label "org.opencontainers.image.description=fastgpt image" \
--push \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache \
-t ${Git_Tag} \
-t ${Git_Latest} \
-t ${Ali_Tag} \
-t ${Ali_Latest} \
-t ${Docker_Hub_Tag} \
-t ${Docker_Hub_Latest} \
.
build-fastgpt-images-sub-route-gchat:
runs-on: ubuntu-20.04
steps:
# install env
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Install Dependencies
run: |
sudo apt update && sudo apt install -y nodejs npm
- name: Set up QEMU (optional)
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# login docker
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Login to Ali Hub
uses: docker/login-action@v2
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ALI_HUB_USERNAME }}
password: ${{ secrets.ALI_HUB_PASSWORD }}
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
# Set tag
- name: Set image name and tag
run: |
if [[ "${{ github.ref_name }}" == "main" ]]; then
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
else
echo "Git_Tag=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route-gchat:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Git_Latest=ghcr.io/${{ github.repository_owner }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
echo "Ali_Tag=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route-gchat:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Ali_Latest=${{ secrets.ALI_IMAGE_NAME }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
echo "Docker_Hub_Tag=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route-gchat:${{ github.ref_name }}" >> $GITHUB_ENV
echo "Docker_Hub_Latest=${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-sub-route-gchat:latest" >> $GITHUB_ENV
fi
- name: Build and publish image for main branch or tag push event
env:
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
run: |
docker buildx build \
-f projects/app/Dockerfile \
--platform linux/amd64,linux/arm64 \
--build-arg base_url=/gchat \
--label "org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/FastGPT" \
--label "org.opencontainers.image.description=fastgpt-sub-route-gchat image" \
--push \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache \
-t ${Git_Tag} \
-t ${Git_Latest} \
-t ${Ali_Tag} \
-t ${Ali_Latest} \
-t ${Docker_Hub_Tag} \
-t ${Docker_Hub_Latest} \
.

29
.github/workflows/helm-release.yaml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Release helm chart
on:
push:
tags:
- 'v*.*.*'
workflow_dispatch:
jobs:
helm:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
- name: Set output
id: vars
run: echo "tag=$(git describe --tags)" >> $GITHUB_OUTPUT
- name: Release Helm
run: |
echo ${{ secrets.GH_PAT }} | helm registry login ghcr.io -u ${{ github.repository_owner }} --password-stdin
export APP_VERSION=${{ steps.vars.outputs.tag }}
export HELM_VERSION=${{ steps.vars.outputs.tag }}
export HELM_REPO=ghcr.io/${{ github.repository_owner }}
helm dependency update files/helm/fastgpt
helm package files/helm/fastgpt --version ${HELM_VERSION}-helm --app-version ${APP_VERSION} -d bin
helm push bin/fastgpt-${HELM_VERSION}-helm.tgz oci://${HELM_REPO}

View File

@@ -0,0 +1,81 @@
name: Preview FastGPT images
on:
pull_request_target:
paths:
- 'projects/app/**'
- 'packages/**'
workflow_dispatch:
jobs:
preview-fastgpt-images:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
submodules: recursive # Fetch submodules
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Set DOCKER_REPO_TAGGED based on branch or tag
run: |
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt-pr:${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
- name: Build image for PR
env:
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
run: |
docker buildx build \
-f projects/app/Dockerfile \
--label "org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/FastGPT" \
--label "org.opencontainers.image.description=fastgpt-pr image" \
--label "org.opencontainers.image.licenses=Apache" \
--push \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache \
-t ${DOCKER_REPO_TAGGED} \
.
# Add write md step after build
- name: Write md
run: |
echo "# 🤖 Generated by deploy action" > report.md
echo "📦 Preview Image: \`${DOCKER_REPO_TAGGED}\`" >> report.md
cat report.md
- name: Gh Rebot for Sealos
uses: labring/gh-rebot@v0.0.6
if: ${{ (github.event_name == 'pull_request_target') }}
with:
version: v0.0.6
env:
GH_TOKEN: '${{ secrets.GH_PAT }}'
SEALOS_TYPE: 'pr_comment'
SEALOS_FILENAME: 'report.md'
SEALOS_REPLACE_TAG: 'DEFAULT_REPLACE_DEPLOY'
helm-check:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Helm Check
run: |
helm dependency update files/helm/fastgpt
helm lint files/helm/fastgpt
helm package files/helm/fastgpt

35
.github/workflows/sync_imgs.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Sync images
on:
pull_request_target:
branches:
- main
paths:
- docSite/assets/imgs/**
push:
branches:
- main
paths:
- docSite/assets/imgs/**
workflow_dispatch:
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
if: ${{ (github.event_name == 'pull_request_target') }}
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Checkout
uses: actions/checkout@v3
- name: Run GitHub File Sync
uses: BetaHuhn/repo-file-sync-action@v1.21.0
with:
GH_PAT: ${{ secrets.IMG_GH_PAT }}
CONFIG_PATH: .github/sync_imgs.yml
ORIGINAL_MESSAGE: true
SKIP_PR: true
COMMIT_EACH_FILE: false

12
.gitignore vendored
View File

@@ -33,4 +33,14 @@ dist/
# hugo
**/.hugo_build.lock
docSite/public/
docSite/public/
docSite/resources/_gen/
docSite/.vercel
*.local.*
.idea/
files/helm/fastgpt/fastgpt-0.1.0.tgz
files/helm/fastgpt/charts/*.tgz
tmp/

9
.imgbotconfig Normal file
View File

@@ -0,0 +1,9 @@
{
"schedule": "daily", // daily|weekly|monthly
"ignoredFiles": [
"*.svg",
"packages/*",
"projects/*",
],
"minKBReduced": 200, // delay new prs until size reduction meets this threshold (default to 10)
}

3
.npmrc Normal file
View File

@@ -0,0 +1,3 @@
public-hoist-pattern[]=*tiktoken*
public-hoist-pattern[]=*@zilliz/milvus2-sdk-node*
registry=https://registry.npmjs.org/

View File

@@ -1,4 +1,8 @@
dist
.vscode
**/.DS_Store
node_modules
node_modules
docSite/
*.md
cl100l_base.ts

46
.vscode/i18n-ally-custom-framework.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
# .vscode/i18n-ally-custom-framework.yml
# An array of strings which contain Language Ids defined by VS Code
# You can check available language ids here: https://code.visualstudio.com/docs/languages/identifiers
languageIds:
- javascript
- typescript
- javascriptreact
- typescriptreact
# An array of RegExes to find the key usage. **The key should be captured in the first match group**.
# You should unescape RegEx strings in order to fit in the YAML file
# To help with this, you can use https://www.freeformatter.com/json-escape.html
usageMatchRegex:
# The following example shows how to detect `t("your.i18n.keys")`
# the `{key}` will be placed by a proper keypath matching regex,
# you can ignore it and use your own matching rules as well
- "[^\\w\\d]t\\(['\"`]({key})['\"`]"
- "[^\\w\\d]commonT\\(['\"`]({key})['\"`]"
# 支持 appT("your.i18n.keys")
- "[^\\w\\d]appT\\(['\"`]({key})['\"`]"
# 支持 datasetT("your.i18n.keys")
- "[^\\w\\d]datasetT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]fileT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]publishT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]workflowT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]userT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]chatT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]i18nT\\(['\"`]({key})['\"`]"
# A RegEx to set a custom scope range. This scope will be used as a prefix when detecting keys
# and works like how the i18next framework identifies the namespace scope from the
# useTranslation() hook.
# You should unescape RegEx strings in order to fit in the YAML file
# To help with this, you can use https://www.freeformatter.com/json-escape.html
scopeRangeRegex: "([^:]+):"
# An array of strings containing refactor templates.
# The "$1" will be replaced by the keypath specified.
# Optional: uncomment the following two lines to use
# refactorTemplates:
# - i18n.get("$1")
# If set to true, only enables this custom framework (will disable all built-in frameworks)
monopoly: false

122
.vscode/nextapi.code-snippets vendored Normal file
View File

@@ -0,0 +1,122 @@
{
// Place your FastGPT 工作区 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
// is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
// used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
// Placeholders with the same ids are connected.
// Example:
"Next api template": {
"scope": "javascript,typescript",
"prefix": "nextapi",
"body": [
"import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next';",
"import { NextAPI } from '@/service/middleware/entry';",
"",
"export type ${TM_FILENAME_BASE}Query = {};",
"",
"export type ${TM_FILENAME_BASE}Body = {};",
"",
"export type ${TM_FILENAME_BASE}Response = {};",
"",
"async function handler(",
" req: ApiRequestProps<${TM_FILENAME_BASE}Body, ${TM_FILENAME_BASE}Query>,",
" res: ApiResponseType<any>",
"): Promise<${TM_FILENAME_BASE}Response> {",
" $1",
" return {}",
"}",
"",
"export default NextAPI(handler);"
],
"description": "FastGPT Next API template"
},
"use context template": {
"scope": "typescriptreact",
"prefix": "context",
"body": [
"import React, { ReactNode } from 'react';",
"import { createContext } from 'use-context-selector';",
"",
"type ContextType = {$1};",
"",
"export const Context = createContext<ContextType>({});",
"",
"const ContextProvider = ({ children }: { children: ReactNode }) => {",
" const contextValue: ContextType = {};",
" return <Context.Provider value={contextValue}>{children}</Context.Provider>;",
"};",
"",
"export default ContextProvider"
],
"description": "FastGPT usecontext template"
},
"Jest test template": {
"scope": "typescriptreact",
"prefix": "jesttest",
"body": [
"import '@/pages/api/__mocks__/base';",
"import { root } from '@/pages/api/__mocks__/db/init';",
"import { getTestRequest } from '@/test/utils';",
"import { AppErrEnum } from '@fastgpt/global/common/error/code/app';",
"import handler from './demo';",
"",
"// Import the schema",
"import { MongoOutLink } from '@fastgpt/service/support/outLink/schema';",
"",
"beforeAll(async () => {",
" // await MongoOutLink.create({",
" // shareId: 'aaa',",
" // appId: root.appId,",
" // tmbId: root.tmbId,",
" // teamId: root.teamId,",
" // type: 'share',",
" // name: 'aaa'",
" // })",
"});",
"",
"test('Should return a list of outLink', async () => {",
" // Mock request",
" const res = (await handler(",
" ...getTestRequest({",
" query: {",
" appId: root.appId,",
" type: 'share'",
" },",
" user: root",
" })",
" )) as any;",
"",
" expect(res.code).toBe(200);",
" expect(res.data.length).toBe(2);",
"});",
"",
"test('appId is required', async () => {",
" const res = (await handler(",
" ...getTestRequest({",
" query: {",
" type: 'share'",
" },",
" user: root",
" })",
" )) as any;",
" expect(res.code).toBe(500);",
" expect(res.error).toBe(AppErrEnum.unExist);",
"});",
"",
"test('if type is not provided, return nothing', async () => {",
" const res = (await handler(",
" ...getTestRequest({",
" query: {",
" appId: root.appId",
" },",
" user: root",
" })",
" )) as any;",
" expect(res.code).toBe(200);",
" expect(res.data.length).toBe(0);",
"});"
]
}
}

34
.vscode/settings.json vendored
View File

@@ -1,15 +1,33 @@
{
"editor.formatOnSave": true,
"editor.mouseWheelZoom": true,
"typescript.tsdk": "client/node_modules/typescript/lib",
"prettier.prettierPath": "./node_modules/prettier",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.prettierPath": "node_modules/prettier",
"typescript.tsdk": "node_modules/typescript/lib",
"i18n-ally.localesPaths": [
"client/public/locales"
"packages/web/i18n",
],
"i18n-ally.enabledParsers": ["json"],
"i18n-ally.keystyle": "nested",
"i18n-ally.enabledParsers": [
"json",
"yaml",
"js",
"ts"
],
"i18n-ally.keystyle": "flat",
"i18n-ally.sortKeys": true,
"i18n-ally.keepFulfilled": true,
"i18n-ally.sourceLanguage": "zh", // 根据此语言文件翻译其他语言文件的变量和内容
"i18n-ally.displayLanguage": "en", // 显示语言
"i18n-ally.keepFulfilled": false,
"i18n-ally.sourceLanguage": "zh-CN", // 根据此语言文件翻译其他语言文件的变量和内容
"i18n-ally.displayLanguage": "zh-CN", // 显示语言
"i18n-ally.namespace": true,
"i18n-ally.pathMatcher": "{locale}/{namespaces}.json",
"i18n-ally.extract.targetPickingStrategy": "most-similar-by-key",
"i18n-ally.translate.engines": ["google"],
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"markdown.copyFiles.destination": {
"/docSite/content/**/*": "${documentWorkspaceFolder}/docSite/assets/imgs/"
},
"markdown.copyFiles.overwriteBehavior": "nameIncrementally",
"markdown.copyFiles.transformPath": "const filename = uri.path.split('/').pop(); return `/imgs/${filename}`;"
}

View File

@@ -5,7 +5,7 @@ The FastGPT is licensed under the Apache License 2.0, with the following additio
1. FastGPT is permitted to be used for commercialization. You can use FastGPT as a "backend-as-a-service" for your other applications, or delivering it to enterprises as an application development platform. However, when the following conditions are met, you must contact the producer to obtain a commercial license:
a. Multi-tenant SaaS service: Unless explicitly authorized by FastGPT in writing, you may not use the FastGPT.AI source code to operate a multi-tenant SaaS service that is similar to the FastGPT.
b. LOGO and copyright information: In the process of using FastGPT, you may not remove or moFastGPT the LOGO or copyright information in the FastGPT console.
b. LOGO and copyright information: In the process of using FastGPT, you may not remove or modify the LOGO or copyright information in the FastGPT console.
Please contact yujinlong@sealos.io by email to inquire about licensing matters.

25
Makefile Normal file
View File

@@ -0,0 +1,25 @@
# 定义默认变量
proxy=null
image=null
# 定义目标
.PHONY: build
# 检查 target 是否定义
ifndef name
$(error name is not defined)
endif
filePath=./projects/$(name)/Dockerfile
dev:
pnpm --prefix ./projects/$(name) dev
build:
ifeq ($(proxy), taobao)
docker build -f $(filePath) -t $(image) . --build-arg proxy=taobao
else ifeq ($(proxy), clash)
docker build -f $(filePath) -t $(image) . --network host --build-arg HTTP_PROXY=http://127.0.0.1:7890 --build-arg HTTPS_PROXY=http://127.0.0.1:7890
else
docker build -f $(filePath) -t $(image) .
endif

234
README.md
View File

@@ -1,121 +1,219 @@
<div align="center">
<a href="https://fastgpt.run/"><img src="/.github/imgs/logo.svg" width="120" height="120" alt="fastgpt logo"></a>
<a href="https://tryfastgpt.ai/"><img src="/.github/imgs/logo.svg" width="120" height="120" alt="fastgpt logo"></a>
# FastGPT
<p align="center">
<a href="./README_en.md">English</a> |
<a href="./README.md">简体中文</a> |
<a href="./README_ja.md">日语</a>
</p>
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!
</div>
<p align="center">
<a href="https://fastgpt.run/">线上体验</a>
·
<a href="https://doc.fastgpt.run/docs/intro">相关文档</a>
·
<a href="https://doc.fastgpt.run/docs/development">本地开发</a>
·
<a href="https://github.com/labring/FastGPT#-%E7%9B%B8%E5%85%B3%E9%A1%B9%E7%9B%AE">相关项目</a>
<a href="https://tryfastgpt.ai/">
<img height="21" src="https://img.shields.io/badge/在线使用-d4eaf7?style=flat-square&logo=spoj&logoColor=7d09f1" alt="cloud">
</a>
<a href="https://doc.tryfastgpt.ai/docs/intro">
<img height="21" src="https://img.shields.io/badge/相关文档-7d09f1?style=flat-square" alt="document">
</a>
<a href="https://doc.tryfastgpt.ai/docs/development">
<img height="21" src="https://img.shields.io/badge/本地开发-%23d4eaf7?style=flat-square&logo=xcode&logoColor=7d09f1" alt="development">
</a>
<a href="/#-%E7%9B%B8%E5%85%B3%E9%A1%B9%E7%9B%AE">
<img height="21" src="https://img.shields.io/badge/相关项目-7d09f1?style=flat-square" alt="project">
</a>
</p>
## 🛸 在线体验
https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409bd33f6d4
[fastgpt.run](https://fastgpt.run/)(服务器在新加坡,部分地区可能无法直连)
## 🛸 在线使用
- 🌍 国际版:[tryfastgpt.ai](https://tryfastgpt.ai/)
| | |
| ---------------------------------- | ---------------------------------- |
| ![Demo](./.github/imgs/intro1.png) | ![Demo](./.github/imgs/intro2.png) |
| ![Demo](./.github/imgs/intro3.png) | ![Demo](./.github/imgs/intro4.png) |
## 💡 功能
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
1. 强大的可视化编排,轻松构建 AI 应用
- [x] 提供简易模式,无需操作编排
- [x] 用户对话前引导
- [x] 全局变量
- [x] 知识库搜索
- [x] 多 LLM 模型对话
- [x] 文本内容提取成结构化数据
- [x] HTTP 扩展
- [ ] 沙盒 JS 运行模块
- [ ] 连续对话引导
- [ ] 对话多路线选择
- [ ] 源文件引用追踪
2. 丰富的知识库预处理
## 💡 RoadMap
`1` 应用编排能力
- [x] 对话工作流、插件工作流
- [x] 工具调用
- [x] Code sandbox
- [x] 循环调用
- [x] 用户选择
- [x] 表单输入
`2` 知识库能力
- [x] 多库复用,混用
- [x] chunk 记录修改和删除
- [x] 支持直接分段导入
- [x] 支持 QA 拆分导入
- [x] 支持手动输入内容
- [x] 支持 url 读取导入
- [x] 支持 CSV 批量导入问答对
- [ ] 支持知识库单独设置向量模型
- [ ] 源文件存储
3. 多种效果测试渠道
- [x] 支持手动输入直接分段QA 拆分导入
- [x] 支持 txtmdhtmlpdfdocxpptxcsvxlsx (有需要更多可 PR file loader),支持 url 读取、CSV 批量导入
- [x] 混合检索 & 重排
- [x] API 知识库
- [ ] 自定义文件读取服务
- [ ] 自定义分块服务
`3` 应用调试能力
- [x] 知识库单点搜索测试
- [x] 对话时反馈引用并可修改与删除
- [x] 完整上下文呈现
- [ ] 完整模块中间值呈现
4. OpenAPI
- [x] completions 接口(对齐 GPT 接口)
- [ ] 知识库 CRUD
5. 运营功能
- [x] 完整模块中间值呈现
- [ ] 高级编排 DeBug 模式
`4` OpenAPI 接口
- [x] completions 接口 (chat 模式对齐 GPT 接口)
- [x] 知识库 CRUD
- [x] 对话 CRUD
`5` 运营能力
- [x] 免登录分享窗口
- [x] Iframe 一键嵌入
- [ ] 统一查阅对话记录
- [x] 聊天窗口嵌入支持自定义 Icon默认打开拖拽等功能
- [x] 统一查阅对话记录,并对数据进行标注
`6` 其他
- [x] 可视化模型配置。
- [x] 支持语音输入和输出 (可配置语音输入语音回答)
- [x] 模糊输入提示
- [x] 模板市场
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
## 👨‍💻 开发
项目技术栈: NextJs + TS + ChakraUI + Mongo + PostgresVector 插件
项目技术栈NextJs + TS + ChakraUI + MongoDB + PostgreSQL (PG Vector 插件)/Milvus
- **⚡ 快速部署**
> Sealos 的服务器在国外,不需要额外处理网络问题,无需服务器、无需魔法、无需域名,支持高并发 & 动态伸缩。点击以下按钮即可一键部署 👇
> 使用 [Sealos](https://sealos.io) 服务,无需采购服务器、无需域名,支持高并发 & 动态伸缩,并且数据库应用采用 kubeblocks 的数据库,在 IO 性能方面,远超于简单的 Docker 容器部署。
[![](https://cdn.jsdelivr.us/gh/labring-actions/templates@main/Deploy-on-Sealos.svg)](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dfastgpt)
[点击查看 Sealos 一键部署 FastGPT 教程](https://doc.tryfastgpt.ai/docs/development/sealos/)
由于需要部署数据库,部署完后需要等待 2~4 分钟才能正常访问。默认用了最低配置,首次访问时会有些慢。
* [快速开始本地开发](https://doc.tryfastgpt.ai/docs/development/intro/)
* [部署 FastGPT](https://doc.tryfastgpt.ai/docs/development/sealos/)
* [系统配置文件说明](https://doc.tryfastgpt.ai/docs/development/configuration/)
* [多模型配置方案](https://doc.tryfastgpt.ai/docs/development/modelconfig/one-api/)
* [版本更新/升级介绍](https://doc.tryfastgpt.ai/docs/development/upgrading/)
* [OpenAPI API 文档](https://doc.tryfastgpt.ai/docs/development/openapi/)
* [知识库结构详解](https://doc.tryfastgpt.ai/docs/guide/knowledge_base/rag/)
* [快开始本地开发](https://doc.fastgpt.run/docs/development)
* [部署 FastGPT](https://doc.fastgpt.run/docs/installation)
* [系统配置文件说明](https://doc.fastgpt.run/docs/installation/reference)
* [多模型配置](https://doc.fastgpt.run/docs/installation/reference/models)
* [版本升级](https://doc.fastgpt.run/docs/installation/upgrading)
* [API 文档](https://kjqvjse66l.feishu.cn/docx/DmLedTWtUoNGX8xui9ocdUEjnNh?pre_pathname=%2Fdrive%2Fhome%2F)
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
## 🏘️ 社区交流群
| 交流群 | 小助手 |
| --------------------------------------------------- | ---------------------------------------------- |
| ![](https://otnvvf-imgs.oss.laf.run/wxqun300-2.jpg) | ![](https://otnvvf-imgs.oss.laf.run/wx300.jpg) |
扫码加入飞书话题群:
## 👀 其他
![](https://oss.laf.run/otnvvf-imgs/fastgpt-feishu1.png)
- [FastGpt 常见问题](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh)
- [docker 部署教程视频](https://www.bilibili.com/video/BV1jo4y147fT/)
- [公众号接入视频教程](https://www.bilibili.com/video/BV1xh4y1t7fy/)
- [FastGpt 知识库演示](https://www.bilibili.com/video/BV1Wo4y1p7i1/)
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
## 🏘️ 加入我们
我们正在寻找志同道合的小伙伴,加速 FastGPT 的发展。你可以通过 [FastGPT 2025 招聘](https://fael3z0zfze.feishu.cn/wiki/P7FOwEmPziVcaYkvVaacnVX1nvg)了解 FastGPT 的招聘信息。
## 💪 相关项目
- [Laf: 3 分钟快速接入三方应用](https://github.com/labring/laf)
- [Sealos: 快速部署集群应用](https://github.com/labring/sealos)
- [One API: 多模型管理,支持 Azure、文心一言等](https://github.com/songquanpeng/one-api)
- [TuShan: 5 分钟搭建后台管理系统](https://github.com/msgbyte/tushan)
- [Laf3 分钟快速接入三方应用](https://github.com/labring/laf)
- [Sealos快速部署集群应用](https://github.com/labring/sealos)
- [One API多模型管理,支持 Azure、文心一言等](https://github.com/songquanpeng/one-api)
- [TuShan5 分钟搭建后台管理系统](https://github.com/msgbyte/tushan)
## 🤝 第三方生态
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
- [luolinAI: 企微机器人,开箱即用](https://github.com/luolin-ai/FastGPT-Enterprise-WeChatbot)
## 🌿 第三方生态
- [COW 个人微信/企微机器人](https://doc.tryfastgpt.ai/docs/use-cases/external-integration/onwechat/)
- [SiliconCloud (硅基流动) —— 开源模型在线体验平台](https://cloud.siliconflow.cn/i/TR9Ym0c4)
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
## 👀 其他
- [保姆级 FastGPT 教程](https://www.bilibili.com/video/BV1n34y1A7Bo/?spm_id_from=333.999.0.0)
- [接入飞书](https://www.bilibili.com/video/BV1Su4y1r7R3/?spm_id_from=333.999.0.0)
- [接入企微](https://www.bilibili.com/video/BV1Tp4y1n72T/?spm_id_from=333.999.0.0)
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
## 🤝 参与贡献
我们非常欢迎各种形式的贡献。如果你对贡献代码感兴趣,可以查看我们的 GitHub [Issues](https://github.com/labring/FastGPT/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc),大展身手,向我们展示你的奇思妙想。
<a href="https://github.com/labring/FastGPT/graphs/contributors" target="_blank">
<table>
<tr>
<th colspan="2">
<br><img src="https://contrib.rocks/image?repo=labring/FastGPT"><br><br>
</th>
</tr>
<tr>
<td>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=active&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=dark">
<img alt="Active participants of labring - past 28 days" src="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=active&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=light">
</picture>****
</td>
<td rowspan="2">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-org-participants-growth/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=4x7&color_scheme=dark">
<img alt="New trends of labring" src="https://next.ossinsight.io/widgets/official/compose-org-participants-growth/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=4x7&color_scheme=light">
</picture>
</td>
</tr>
<tr>
<td>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=dark">
<img alt="New participants of labring - past 28 days" src="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=light">
</picture>
</td>
</tr>
</table>
</a>
## 🌟 Star History
[![Star History Chart](https://api.star-history.com/svg?repos=labring/FastGPT&type=Date)](https://star-history.com/#labring/FastGPT&Date)
<a href="https://github.com/labring/FastGPT/stargazers" target="_blank" style="display: block" align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=labring/FastGPT&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=labring/FastGPT&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=labring/FastGPT&type=Date" />
</picture>
</a>
<a href="#readme">
<img src="https://img.shields.io/badge/-返回顶部-7d09f1.svg" alt="#" align="right">
</a>
## 使用协议
本仓库遵循 [FstGPT Open Source License](./LICENSE) 开源协议。
本仓库遵循 [FastGPT Open Source License](./LICENSE) 开源协议。
1. 允许作为后台服务直接商用,但不允许直接使用 saas 服务商用
2. 需保留相关版权信息。
3. 完整请查看 [FstGPT Open Source License](./LICENSE)
4. 联系方式:yujinlong@sealos.io, [点击查看定价策略](https://fael3z0zfze.feishu.cn/docx/F155dbirfo8vDDx2WgWc6extnwf)
1. 允许作为后台服务直接商用,但不允许提供 SaaS 服务。
2. 未经商业授权,任何形式的商用服务均需保留相关版权信息。
3. 完整请查看 [FastGPT Open Source License](./LICENSE)
4. 联系方式:Dennis@sealos.io[点击查看商业版定价策略](https://doc.tryfastgpt.ai/docs/shopping_cart/intro/)

View File

@@ -1,103 +1,90 @@
<div align="center">
<a href="https://fastgpt.run/"><img src="/.github/imgs/logo.svg" width="120" height="120" alt="fastgpt logo"></a>
<a href="https://tryfastgpt.ai/"><img src="/.github/imgs/logo.svg" width="120" height="120" alt="fastgpt logo"></a>
# FastGPT
FastGPT is a knowledge-based question answering system based on the LLM language model, providing out-of-the-box capabilities for data processing, model invocation, and more. It also allows for complex question answering scenarios through visual workflow orchestration using Flow!
</div>
![Qoute](./.github/imgs/image.png)
<p align="center">
<a href="https://fastgpt.run/">Online</a>
·
<a href="https://doc.fastgpt.run/docs/intro">Document</a>
·
<a href="https://doc.fastgpt.run/docs/development">Development</a>
·
<a href="https://doc.fastgpt.run/docs/installation">Deploy</a>
·
<a href="#powered-by">Power By</a>
<a href="./README_en.md">English</a> |
<a href="./README.md">简体中文</a> |
<a href="./README_ja.md">日语</a>
</p>
## 🛸 Online
FastGPT is a knowledge-based platform built on the LLMs, offers a comprehensive suite of out-of-the-box capabilities such as data processing, RAG retrieval, and visual AI workflow orchestration, letting you easily develop and deploy complex question-answering systems without the need for extensive setup or configuration.
[![GitHub Repo stars](https://img.shields.io/github/stars/labring/FastGPT?style=flat-square&labelColor=d4eaf7&color=7d09f1)](https://github.com/labring/FastGPT/stargazers)
[![GitHub pull request](https://img.shields.io/badge/PRs-welcome-fffff?style=flat-square&labelColor=d4eaf7&color=7d09f1)](https://github.com/labring/FastGPT/pulls)
[![GitHub last commit](https://img.shields.io/github/last-commit/labring/FastGPT?style=flat-square&labelColor=d4eaf7&color=7d09f1)](https://github.com/labring/FastGPT/pulls)
[![License](https://img.shields.io/badge/License-Apache--2.0-ffffff?style=flat-square&labelColor=d4eaf7&color=7d09f1)](https://github.com/labring/FastGPT/blob/main/LICENSE)
[![Documentation](https://img.shields.io/badge/Documentation-7d09f1?style=flat-square)](https://doc.tryfastgpt.ai/docs/intro)
[![Local Development](https://img.shields.io/badge/Local_Development-%23d4eaf7?style=flat-square&logo=xcode&logoColor=7d09f1)](https://doc.tryfastgpt.ai/docs/intro)
[![Explore our platform](https://img.shields.io/badge/Explore_our_platform-d4eaf7?style=flat-square&logo=spoj&logoColor=7d09f1)](https://tryfastgpt.ai/)
[![discord](https://theme.zdassets.com/theme_assets/678183/cc59daa07820943e943c2fc283b9079d7003ff76.svg)](https://discord.gg/mp68xkZn2Q)&nbsp;&nbsp;&nbsp;&nbsp;
[![Wechat](https://upload.wikimedia.org/wikipedia/en/thumb/a/af/WeChat_logo.svg/100px-WeChat_logo.svg.png?20231125073656)](https://oss.laf.run/otnvvf-imgs/feishu3.png)
</div>
## 🎥 Comprehensive Feature Demonstration
https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409bd33f6d4
## 🛸 Online Use
Website: [tryfastgpt.ai](https://tryfastgpt.ai/)
[fastgpt.run](https://fastgpt.run/)
| | |
| ---------------------------------- | ---------------------------------- |
| Conversational AI Setup | Workflow Automation |
| ![Demo](./.github/imgs/intro1.png) | ![Demo](./.github/imgs/intro2.png) |
| Knowledge Base Setup | Integration Process |
| ![Demo](./.github/imgs/intro3.png) | ![Demo](./.github/imgs/intro4.png) |
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 💡 Features
1. Powerful visual orchestration for easy AI application building
| **Features** | **Details** |
|--------------------------------------------|---------------------------------------------------|
| **Application Orchestration Features** | ✅ Offers a straightforward mode, eliminating the need for complex orchestration <br> ✅ Provides clear next-step instructions in dialogues <br> ✅ Facilitates workflow orchestration <br> ✅ Tracks references in source files <br> ✅ Encapsulates modules for enhanced reuse at multiple levels <br> ✅ Combines search and reordering functions <br> 🔜 Includes a tool module <br> 🔜 Integrates [Laf](https://github.com/labring/laf) for online HTTP module creation <br> 🔜 Plugin encapsulation capabilities |
| **Knowledge Base Features** | ✅ Allows for the mixed use of multiple databases <br> ✅ Keeps track of modifications and deletions in data chunks <br> ✅ Enables specific vector models for each knowledge base <br> ✅ Stores original source files <br> ✅ Supports direct input and segment-based QA import <br> ✅ Compatible with a variety of file formats: pdf, docx, txt, html, md, csv <br> ✅ Facilitates URL reading and bulk CSV importing <br> 🔜 Supports PPT and Excel file import <br> 🔜 Features a file reader <br> 🔜 Offers diverse data preprocessing options |
| **Application Debugging Features** | ✅ Enables targeted search testing within the knowledge base <br> ✅ Allows feedback, editing, and deletion during conversations <br> ✅ Presents the full context of interactions <br> ✅ Displays all intermediate values within modules <br> 🔜 Advanced Debug mode for orchestration |
| **OpenAPI Interface** | ✅ The completions interface (aligned with GPT's chat mode interface) <br> ✅ CRUD operations for the knowledge base <br> 🔜 CRUD operations for conversation |
| **Operational Features** | ✅ Share without requiring login <br> ✅ Easy embedding with Iframe <br> ✅ Customizable chat window embedding with features like default open, drag-and-drop <br> ✅ Centralizes conversation records for review and annotation |
- [x] Provides a simple mode without the need for orchestration operations
- [x] User dialogue pre-guidance
- [x] Global variables
- [x] Knowledge base search
- [x] Multi-LLM model dialogue
- [x] Extraction of text content into structured data
- [x] HTTP extension
- [ ] Sandbox JS runtime module
- [ ] Continuous dialogue guidance
- [ ] Dialogue multi-path selection
- [ ] Source file reference tracking
2. Rich knowledge base preprocessing
- [x] Multiple library reuse and mixing
- [x] Chunk record modification and deletion
- [x] Supports direct segment import
- [x] Supports QA split import
- [x] Supports manual input content
- [ ] Supports URL import reading
- [x] Supports batch import of Q&A pairs in CSV format
- [ ] Supports separate vector model settings for knowledge bases
- [ ] Source file storage
3. Multiple effect testing channels
- [x] Knowledge base single point search testing
- [x] Feedback references and ability to modify and delete during dialogue
- [x] Complete context presentation
- [ ] Complete module intermediate value presentation
4. OpenAPI
- [x] completions interface (aligned with GPT interface)
- [ ] Knowledge base CRUD
5. Operational functions
- [x] Login-free sharing window
- [x] One-click embedding with Iframe
- [ ] Unified access to dialogue records
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 👨‍💻 Development
Project tech stack: NextJs + TS + ChakraUI + Mongo + Postgres (Vector plugin)
Project tech stack: NextJs + TS + ChakraUI + MongoDB + PostgreSQL (PG Vector plug-in)/Milvus
- [Getting Started with Local Development](https://doc.fastgpt.run/docs/development)
- [Deploying FastGPT](https://doc.fastgpt.run/docs/installation)
- [System Configuration File Explanation](https://doc.fastgpt.run/docs/installation/reference)
- [Multi-model Configuration](https://doc.fastgpt.run/docs/installation/reference/models)
- [V3 Upgrade V4 Initialization](https://doc.fastgpt.run/docs/installation/upgrading)
- **⚡ Fast Deployment**
<!-- ## :point_right: RoadMap
- [FastGpt RoadMap](https://kjqvjse66l.feishu.cn/docx/RVUxdqE2WolDYyxEKATcM0XXnte) -->
> When using [Sealos](https://sealos.io) services, there is no need to purchase servers or domain names. It supports high concurrency and dynamic scaling, and the database application uses the kubeblocks database, which far exceeds the simple Docker container deployment in terms of IO performance.
<div align="center">
[![](https://cdn.jsdelivr.net/gh/labring-actions/templates@main/Deploy-on-Sealos.svg)](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dfastgpt)
</div>
<!-- ## 🏘️ Community
Give it a 2-4 minute wait after deployment as it sets up the database. Initially, it might be a too slow since we're using the basic settings.
| Community Group | Assistant |
| ------------------------------------------------- | ---------------------------------------------- |
| ![](https://otnvvf-imgs.oss.laf.run/wxqun300.jpg) | ![](https://otnvvf-imgs.oss.laf.run/wx300.jpg) | -->
[sealos one click deployment tutorial](https://doc.tryfastgpt.ai/docs/development/sealos/)
## 👀 Others
- [Getting Started with Local Development](https://doc.tryfastgpt.ai/docs/development)
- [Deploying FastGPT](https://doc.tryfastgpt.ai/docs/installation)
- [Guide on System Configs](https://doc.tryfastgpt.ai/docs/installation/reference)
- [Configuring Multiple Models](https://doc.tryfastgpt.ai/docs/installation/reference/models)
- [Version Updates & Upgrades](https://doc.tryfastgpt.ai/docs/installation/upgrading)
- [FastGpt FAQ](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh)
- [Docker Deployment Tutorial Video](https://www.bilibili.com/video/BV1jo4y147fT/)
- [Official Account Integration Video Tutorial](https://www.bilibili.com/video/BV1xh4y1t7fy/)
- [FastGpt Knowledge Base Demo](https://www.bilibili.com/video/BV1Wo4y1p7i1/)
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 💪 Related Projects
@@ -106,10 +93,100 @@ Project tech stack: NextJs + TS + ChakraUI + Mongo + Postgres (Vector plugin)
- [One API: Multi-model management, supports Azure, Wenxin Yiyuan, etc.](https://github.com/songquanpeng/one-api)
- [TuShan: Build a backend management system in 5 minutes](https://github.com/msgbyte/tushan)
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 🤝 Third-party Ecosystem
- [luolinAI: Enterprise WeChat bot, ready to use](https://github.com/luolin-ai/FastGPT-Enterprise-WeChatbot)
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 🏘️ Community & Support
+ 🌐 Visit the [FastGPT website](https://tryfastgpt.ai/) for full documentation and useful links.
+ 💬 Join our [Discord server](https://discord.gg/mp68xkZn2Q) is to chat with FastGPT developers and other FastGPT users. This is a good place to learn about FastGPT, ask questions, and share your experiences.
+ 🐞 Create [GitHub Issues](https://github.com/labring/FastGPT/issues/new/choose) for bug reports and feature requests.
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 👀 Others
- [FastGPT FAQ](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh)
- [Docker Deployment Tutorial Video](https://www.bilibili.com/video/BV1jo4y147fT/)
- [Official Account Integration Video Tutorial](https://www.bilibili.com/video/BV1xh4y1t7fy/)
- [FastGPT Knowledge Base Demo](https://www.bilibili.com/video/BV1Wo4y1p7i1/)
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 🌱 Contributors
We welcome all forms of contributions. If you are interested in contributing code, you can check out our GitHub [Issues](https://github.com/labring/FastGPT/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) to show us your ideas.
<a href="https://github.com/labring/FastGPT/graphs/contributors" target="_blank">
<table>
<tr>
<th colspan="2">
<br><img src="https://contrib.rocks/image?repo=labring/FastGPT"><br><br>
</th>
</tr>
<tr>
<td>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=active&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=dark">
<img alt="Active participants of labring - past 28 days" src="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=active&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=light">
</picture>
</td>
<td rowspan="2">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-org-participants-growth/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=4x7&color_scheme=dark">
<img alt="New trends of labring" src="https://next.ossinsight.io/widgets/official/compose-org-participants-growth/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=4x7&color_scheme=light">
</picture>
</td>
</tr>
<tr>
<td>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=dark">
<img alt="New participants of labring - past 28 days" src="https://next.ossinsight.io/widgets/official/compose-org-active-contributors/thumbnail.png?activity=new&period=past_28_days&owner_id=102226726&repo_ids=605673387&image_size=2x3&color_scheme=light">
</picture>
</td>
</tr>
</table>
</a>
## 🌟 Star History
[![Star History Chart](https://api.star-history.com/svg?repos=labring/FastGPT&type=Date)](https://star-history.com/#labring/FastGPT&Date)
<a href="https://github.com/labring/FastGPT/stargazers" target="_blank" style="display: block" align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=labring/FastGPT&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=labring/FastGPT&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=labring/FastGPT&type=Date" />
</picture>
</a>
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>
## 📄 Usage Agreement
This repository complies with the [FastGPT Open Source License](./LICENSE) open source agreement.
1. Direct commercial use as a backend service is allowed, but provision of SaaS services is not allowed.
2. Without commercial authorization, any form of commercial service must retain relevant copyright information.
3. For full details, please see [FastGPT Open Source License](./LICENSE)
4. Contact: Dennis@sealos.io , [click to view commercial version pricing strategy](https://doc.tryfastgpt.ai/docs/commercial)
<a href="#FastGPT">
<img src="https://img.shields.io/badge/-Back_to_Top-7d09f1.svg" alt="#" align="right">
</a>

136
README_ja.md Normal file
View File

@@ -0,0 +1,136 @@
<div align="center">
<a href="https://tryfastgpt.ai/"><img src="/.github/imgs/logo.svg" width="120" height="120" alt="fastgpt logo"></a>
# FastGPT
<p align="center">
<a href="./README_en.md">English</a> |
<a href="./README.md">简体中文</a> |
<a href="./README_ja.md">日语</a>
</p>
FastGPT は、LLM 上 に 構築 された 知識 ベースの Q&A システムで、すぐに 使 えるデータ 処理 とモデル 呼 び 出 し 機能 を 提供 し、Flow の 可視化 を 通 じてワークフローのオーケストレーションを 可能 にします!
</div>
<p align="center">
<a href="https://tryfastgpt.ai/">
<img height="21" src="https://img.shields.io/badge/在线使用-d4eaf7?style=flat-square&logo=spoj&logoColor=7d09f1" alt="cloud">
</a>
<a href="https://doc.tryfastgpt.ai/docs/intro">
<img height="21" src="https://img.shields.io/badge/相关文档-7d09f1?style=flat-square" alt="document">
</a>
<a href="https://doc.tryfastgpt.ai/docs/development">
<img height="21" src="https://img.shields.io/badge/本地开发-%23d4eaf7?style=flat-square&logo=xcode&logoColor=7d09f1" alt="development">
</a>
<a href="/#-%E7%9B%B8%E5%85%B3%E9%A1%B9%E7%9B%AE">
<img height="21" src="https://img.shields.io/badge/相关项目-7d09f1?style=flat-square" alt="project">
</a>
<a href="https://github.com/labring/FastGPT/blob/main/LICENSE">
<img height="21" src="https://img.shields.io/badge/License-Apache--2.0-ffffff?style=flat-square&labelColor=d4eaf7&color=7d09f1" alt="license">
</a>
</p>
https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409bd33f6d4
## 🛸 クラウドサービスの 利用
[tryfastgpt.ai](https://tryfastgpt.ai/)
| | |
| ---------------------------------- | ---------------------------------- |
| ![Demo](./.github/imgs/intro1.png) | ![Demo](./.github/imgs/intro2.png) |
| ![Demo](./.github/imgs/intro3.png) | ![Demo](./.github/imgs/intro4.png) |
## 💡 機能
1. パワフルなビジュアルワークフローAI アプリケーションを 簡単 に 作成
- [x] デッキのシンプルモード - マニュアルアレンジ 不要
- [x] ユーザ 対話事前 ガイダンス
- [x] グローバル 変数
- [x] ナレッジベース 検索
- [x] 複数 の LLM モデルによる 対話
- [x] テキストマジック - 構造化 データへの 変換
- [x] HTTP による 拡張
- [ ] on-the-fly HTTP モジュールのための 埋 め 込 みLaf
- [x] 次 の 対話 ステップへの 指示
- [x] ソースファイル 参照 の 追跡
- [ ] カスタムファイルリーダー
- [ ] モジュールをプラグインにパッケージして 再利用 する
2. 広範 なナレッジベースの 前処理
- [x] 複数 のナレッジベースの 再利用 と 混合
- [x] チャンクの 変更 と 削除 を 追跡
- [x] 手動入力、直接分割、QA 分割 インポートをサポート
- [x] URL フェッチとバッチ CSV インポートをサポート
- [x] ナレッジベースにユニークなベクトルモデルを 設定可能
- [x] オリジナルファイルの 保存
- [ ] ファイル 学習 エージェント
3. 複数 の 効果測定 チャンネル
- [x] シングルポイントナレッジベース 検索 テスト
- [x] 対話中 のフィードバック 参照 と 修正 ・ 削除機能
- [x] 完全 なコンテキストの 提示
- [ ] 完全 なモジュール 中間値提示
4. OpenAPI
- [x] 補完 インターフェイス (GPT インターフェイスに 合 わせる)
- [ ] ナレッジベース CRUD
5. オペレーション 機能
- [x] ログイン 不要 の 共有 ウィンドウ
- [x] Iframe によるワンクリック 埋 め 込 み
- [ ] 対話記録 への 統一 されたアクセス
## 👨‍💻 開発
プロジェクトの 技術 スタックNextJs + TS + ChakraUI + Mongo + Postgres (Vector プラグイン)
- **⚡ デプロイ**
[![](https://cdn.jsdelivr.net/gh/labring-actions/templates@main/Deploy-on-Sealos.svg)](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dfastgpt)
デプロイ 後、データベースをセットアップするので、24分待 ってください。基本設定 を 使 っているので、最初 は 少 し 遅 いかもしれません。
- [ローカル 開発入門](https://doc.tryfastgpt.ai/docs/development)
- [FastGPT のデプロイ](https://doc.tryfastgpt.ai/docs/installation)
- [システム 設定 ガイド](https://doc.tryfastgpt.ai/docs/installation/reference)
- [複数 モデルの 設定](https://doc.tryfastgpt.ai/docs/installation/reference/models)
- [バージョン 更新 とアップグレード](https://doc.tryfastgpt.ai/docs/installation/upgrading)
<!-- ## :point_right: ロードマップ
- [FastGPT ロードマップ](https://kjqvjse66l.feishu.cn/docx/RVUxdqE2WolDYyxEKATcM0XXnte) -->
<!-- ## 🏘️ コミュニティ
| コミュニティグループ | アシスタント |
| ------------------------------------------------- | ---------------------------------------------- |
| ![](https://otnvvf-imgs.oss.laf.run/wxqun300.jpg) | ![](https://otnvvf-imgs.oss.laf.run/wx300.jpg) | -->
## 👀 その 他
- [FastGPT FAQ](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh)
- [Docker 導入 チュートリアル 動画](https://www.bilibili.com/video/BV1jo4y147fT/)
- [公式 アカウント 統合 ビデオチュートリアル](https://www.bilibili.com/video/BV1xh4y1t7fy/)
- [FastGPT ナレッジベースデモ](https://www.bilibili.com/video/BV1Wo4y1p7i1/)
## 💪 関連 プロジェクト
- [Lafサードパーティ 製 アプリケーションに 3 分 でクイックアクセス](https://github.com/labring/laf)
- [Sealosクラスタアプリケーションの 迅速 な 展開](https://github.com/labring/sealos)
- [One APIマルチモデル 管理、Azure、Wenxin Yiyuan などをサポートします。](https://github.com/songquanpeng/one-api)
- [TuShan5 分 でバックエンド 管理 システムを 構築](https://github.com/msgbyte/tushan)
## 🤝 サードパーティエコシステム
- [luolinAIすぐに 使 える 企業向 け WeChat ボット](https://github.com/luolin-ai/FastGPT-Enterprise-WeChatbot)
## 🌟 Star History
[![Star History Chart](https://api.star-history.com/svg?repos=labring/FastGPT&type=Date)](https://star-history.com/#labring/FastGPT&Date)

BIN
bin/fastgpt-v1.0.0-helm.tgz Normal file

Binary file not shown.

View File

@@ -1,21 +0,0 @@
# 默认用户密码,用户名为 root每次重启时会自动更新。
DEFAULT_ROOT_PSW=123456
# 代理
# AXIOS_PROXY_HOST=127.0.0.1
# AXIOS_PROXY_PORT=7890
# 数据库最大连接数
DB_MAX_LINK=5
# token
TOKEN_KEY=dfdasfdas
# root key, 最高权限
ROOT_KEY=fdafasd
# openai 基本地址,可用作中转。
OPENAI_BASE_URL=https://api.openai.com/v1
# oneapi 地址,可以使用 oneapi 来实现多模型接入
# ONEAPI_URL=https://xxxx.cloud.sealos.io/openai/v1
# 通用key。可以是 openai 的也可以是 oneapi 的。
# 此处逻辑:优先走 ONEAPI_URL如果填写了 ONEAPI_URLkey 也需要是 ONEAPI 的 key
CHAT_API_KEY=sk-xxxx
# db
MONGODB_URI=mongodb://username:password@0.0.0.0:27017/fastgpt
PG_URL=postgresql://username:password@host:port/postgres

32
client/.gitignore vendored
View File

@@ -1,32 +0,0 @@
# 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.*

View File

@@ -1,65 +0,0 @@
# Install dependencies only when needed
FROM node:current-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat && npm install -g pnpm
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json ./
COPY pnpm-lock.yaml* ./
RUN \
[ -f pnpm-lock.yaml ] && pnpm fetch || \
(echo "Lockfile not found." && exit 1)
# Rebuild the source code only when needed
FROM node:current-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY pnpm-lock.yaml* ./
COPY package.json ./
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
ENV NEXT_TELEMETRY_DISABLED 1
RUN npm install -g pnpm
RUN \
[ -f pnpm-lock.yaml ] && (pnpm --offline install && pnpm run build) || \
(echo "Lockfile not found." && exit 1)
# Production image, copy all the files and run next
FROM node:current-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
RUN sed -i 's/https/http/' /etc/apk/repositories
RUN apk add curl \
&& apk add ca-certificates \
&& update-ca-certificates
# You only need to copy next.config.js if you are NOT using the default configuration
# COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
# COPY --from=builder /app/.env* .
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
ENV PORT=3000
EXPOSE 3000
CMD ["node", "server.js"]

View File

@@ -1,63 +0,0 @@
{
"FeConfig": {
"show_emptyChat": true,
"show_register": false,
"show_appStore": false,
"show_userDetail": false,
"show_git": true,
"systemTitle": "FastGPT",
"authorText": "Made by FastGPT Team.",
"gitLoginKey": "",
"scripts": []
},
"SystemParams": {
"gitLoginSecret": "",
"vectorMaxProcess": 15,
"qaMaxProcess": 15,
"pgIvfflatProbe": 20
},
"ChatModels": [
{
"model": "gpt-3.5-turbo",
"name": "GPT35-4k",
"contextMaxToken": 4000,
"quoteMaxToken": 2000,
"maxTemperature": 1.2,
"price": 0,
"defaultSystem": ""
},
{
"model": "gpt-3.5-turbo-16k",
"name": "GPT35-16k",
"contextMaxToken": 16000,
"quoteMaxToken": 8000,
"maxTemperature": 1.2,
"price": 0,
"defaultSystem": ""
},
{
"model": "gpt-4",
"name": "GPT4-8k",
"contextMaxToken": 8000,
"quoteMaxToken": 4000,
"maxTemperature": 1.2,
"price": 0,
"defaultSystem": ""
}
],
"QAModels": [
{
"model": "gpt-3.5-turbo-16k",
"name": "GPT35-16k",
"maxToken": 16000,
"price": 0
}
],
"VectorModels": [
{
"model": "text-embedding-ada-002",
"name": "Embedding-2",
"price": 0
}
]
}

View File

@@ -1,5 +0,0 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@@ -1,12 +0,0 @@
//next-i18next.config.js
/**
* @type {import('next-i18next').UserConfig}
*/
module.exports = {
i18n: {
defaultLocale: 'en',
locales: ['en', 'zh', 'zh-Hans'],
localeDetection: false
}
};

View File

@@ -1,40 +0,0 @@
/** @type {import('next').NextConfig} */
const { i18n } = require('./next-i18next.config');
const nextConfig = {
i18n,
output: 'standalone',
reactStrictMode: false,
compress: true,
webpack(config, { isServer }) {
if (!isServer) {
config.resolve = {
...config.resolve,
fallback: {
...config.resolve.fallback,
fs: false
}
};
}
config.experiments = {
asyncWebAssembly: true,
layers: true
};
config.module = {
...config.module,
rules: config.module.rules.concat([
{
test: /\.svg$/i,
issuer: /\.[jt]sx?$/,
use: ['@svgr/webpack']
}
]),
exprContextCritical: false
};
return config;
}
};
module.exports = nextConfig;

View File

@@ -1,90 +0,0 @@
{
"name": "fastgpt",
"version": "3.7",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@chakra-ui/icons": "^2.0.17",
"@chakra-ui/react": "^2.7.0",
"@chakra-ui/system": "^2.5.8",
"@dqbd/tiktoken": "^1.0.7",
"@emotion/react": "^11.10.6",
"@emotion/styled": "^11.10.6",
"@mozilla/readability": "^0.4.4",
"@next/font": "13.1.6",
"@tanstack/react-query": "^4.24.10",
"@types/nprogress": "^0.2.0",
"axios": "^1.3.3",
"cookie": "^0.5.0",
"crypto": "^1.0.1",
"date-fns": "^2.30.0",
"dayjs": "^1.11.7",
"echarts": "^5.4.1",
"formidable": "^2.1.1",
"framer-motion": "^9.0.6",
"hyperdown": "^2.4.29",
"i18next": "^22.5.1",
"immer": "^9.0.19",
"js-cookie": "^3.0.5",
"jsdom": "^22.1.0",
"jsonwebtoken": "^9.0.0",
"lodash": "^4.17.21",
"mammoth": "^1.5.1",
"mermaid": "^10.2.3",
"mongoose": "^6.10.0",
"nanoid": "^4.0.1",
"next": "13.1.6",
"next-i18next": "^13.3.0",
"nextjs-cors": "^2.1.2",
"nprogress": "^0.2.0",
"openai": "^3.3.0",
"papaparse": "^5.4.1",
"pg": "^8.10.0",
"react": "18.2.0",
"react-day-picker": "^8.7.1",
"react-dom": "18.2.0",
"react-hook-form": "^7.43.1",
"react-i18next": "^12.3.1",
"react-markdown": "^8.0.7",
"react-syntax-highlighter": "^15.5.0",
"reactflow": "^11.7.4",
"rehype-katex": "^6.0.2",
"remark-breaks": "^3.0.3",
"remark-gfm": "^3.0.1",
"remark-math": "^5.1.1",
"request-ip": "^3.3.0",
"sass": "^1.58.3",
"tunnel": "^0.0.6",
"winston": "^3.10.0",
"winston-mongodb": "^5.1.1",
"zustand": "^4.3.5"
},
"devDependencies": {
"@svgr/webpack": "^6.5.1",
"@types/cookie": "^0.5.1",
"@types/formidable": "^2.0.5",
"@types/js-cookie": "^3.0.3",
"@types/jsdom": "^21.1.1",
"@types/jsonwebtoken": "^9.0.1",
"@types/lodash": "^4.14.191",
"@types/node": "18.14.0",
"@types/papaparse": "^5.3.7",
"@types/pg": "^8.6.6",
"@types/react": "18.0.28",
"@types/react-dom": "18.0.11",
"@types/react-syntax-highlighter": "^15.5.6",
"@types/request-ip": "^0.0.37",
"@types/tunnel": "^0.0.3",
"eslint": "8.34.0",
"eslint-config-next": "13.1.6",
"typescript": "4.9.5"
},
"engines": {
"node": ">=18.0.0"
}
}

12275
client/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,21 +0,0 @@
### 常见问题
- [**Git 地址**,点击查看项目地址](https://github.com/labring/FastGPT)
- [本地部署 FastGPT](https://doc.fastgpt.run/docs/installation)
- [API 文档](https://kjqvjse66l.feishu.cn/docx/DmLedTWtUoNGX8xui9ocdUEjnNh?pre_pathname=%2Fdrive%2Fhome%2F)
- **反馈问卷**: 如果你遇到任何使用问题或有期望的功能,可以[填写该问卷](https://www.wjx.cn/vm/rLIw1uD.aspx#)
- **问题文档**: [先看文档,再提问](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh)
**价格表**
| 计费项 | 价格: 元/ 1K tokens包含上下文|
| --- | --- |
| 知识库 - 索引 | 0.002 |
| FastAI4k - 对话 | 0.015 |
| FastAI16k - 对话 | 0.03 |
| FastAI-Plus - 对话 | 0.45 |
| 文件拆分 | 0.03 |
**其他问题**
| 交流群 | 小助手 |
| ----------------------- | -------------------- |
| ![](https://otnvvf-imgs.oss.laf.run/wxqun300.jpg) | ![](https://otnvvf-imgs.oss.laf.run/wx300.jpg) |

View File

@@ -1,8 +0,0 @@
### Fast GPT V4.2
1. 新增 - 应用日志初版,可观测到所有对话记录
2. 新增 - 好友邀请链接,[点击查看](/account?currentTab=promotion)
3. 新增 - Iframe 嵌入页面图标可拖拽
4. 优化 - 知识库搜索提示词
5. 优化 - [使用文档](https://doc.fastgpt.run/docs/intro/)
6. [点击查看高级编排介绍文档](https://doc.fastgpt.run/docs/workflow)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1440" height="900" viewBox="0 0 1440 900" fill="none"><defs><path id="path_0"
transform="translate(0 0) rotate(0 720 450)"
d="M0,900L1440,900L1440,0L0,0L0,900Z" /><linearGradient id="linear_0" x1="45.776671171188354%" y1="3.4534157006028896%" x2="45.77667520943754%" y2="95.15074645348403%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4D3AF9" stop-opacity="1" /><stop offset="0.4571722174852774" stop-color="#3B4DFE" stop-opacity="1" /><stop offset="1" stop-color="#1A68FF" stop-opacity="1" /></linearGradient><linearGradient id="linear_1" x1="50%" y1="2.535076530612245%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4581FF" stop-opacity="1" /><stop offset="1" stop-color="#1C57FE" stop-opacity="1" /></linearGradient><linearGradient id="linear_2" x1="50%" y1="2.535076530612245%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4581FF" stop-opacity="1" /><stop offset="1" stop-color="#1C57FE" stop-opacity="1" /></linearGradient><linearGradient id="linear_3" x1="50%" y1="0%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#29BFA8" stop-opacity="1" /><stop offset="1" stop-color="#34D1B6" stop-opacity="1" /></linearGradient><linearGradient id="linear_4" x1="50%" y1="2.535076530612245%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4581FF" stop-opacity="1" /><stop offset="1" stop-color="#1C57FE" stop-opacity="1" /></linearGradient></defs><g opacity="1" transform="translate(0 0) rotate(0 720 450)"><mask id="mask-0" fill="white"><use xlink:href="#path_0"></use></mask><g mask="url(#mask-0)"><path id="Mask" fill-rule="evenodd" fill="url(#linear_0)" transform="translate(0 0) rotate(0 720 450)" opacity="1" d="M0,900L1440,900L1440,0L0,0L0,900Z " /></g><g mask="url(#mask-0)"><path id="Oval" fill-rule="evenodd" fill="url(#linear_1)" transform="translate(51.66666666666667 412.5) rotate(0 37.5 37.5)" opacity="1" d="M75,37.5C75,16.79 58.21,0 37.5,0C16.79,0 0,16.79 0,37.5C0,58.21 16.79,75 37.5,75C58.21,75 75,58.21 75,37.5Z " /></g><g mask="url(#mask-0)"><path id="Oval Copy 2" fill-rule="evenodd" fill="url(#linear_2)" transform="translate(1049.166666666667 -3.333333333333333) rotate(0 30.833333333333336 30.833333333333336)" opacity="0.69" d="M61.67,30.83C61.67,13.81 47.86,0 30.83,0C13.81,0 0,13.81 0,30.83C0,47.86 13.81,61.67 30.83,61.67C47.86,61.67 61.67,47.86 61.67,30.83Z " /></g><g mask="url(#mask-0)"><g opacity="0.55" transform="translate(-64.16666666666667 547.4999999999999) rotate(0 50 226.5)"><path id="Rectangle 2" fill-rule="evenodd" style="fill:#5088FF" transform="translate(14.63769413070223 15.28431509376342) rotate(-45 35.20283757354478 34.876453649023716)" opacity="1" d="M8.17,61.88L70.41,69.75L47.22,22.97L0,0L8.17,61.88Z " /><path id="Rectangle 3" fill-rule="evenodd" fill="url(#linear_3)" transform="translate(0 50.20419426048581) rotate(0 26.487523940001577 201.14790286975716)" opacity="1" d="M0,402.3L51.51,402.3L52.98,23.25L0,0L0,402.3Z " /><path id="Rectangle 3 Copy" fill-rule="evenodd" fill="url(#linear_4)" transform="translate(48.48484848484848 50.20419426048581) rotate(0 25.75757575757576 201.14790286975716)" opacity="1" d="M0,402.3L51.52,402.3L51.52,0L0,21.68L0,402.3Z " /></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -1,599 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="256px" height="256px" viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve"> <image id="image0" width="256" height="256" x="0" y="0"
href="data:image/png;base64,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
MDqUEekAAAAASUVORK5CYII=" />
</svg>

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -1 +0,0 @@
<?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="1689494925506" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1120" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M149.76 0C104.96 0 66.56 35.2 66.56 80V940.8c0 48 38.4 83.2 83.2 83.2h732.8c44.8 0 80-35.2 80-80V323.2L658.56 0H149.76z" fill="#DD5154" p-id="1121"></path><path d="M962.56 326.4v16h-204.8s-99.2-19.2-96-105.6c0 0 3.2 89.6 96 89.6h204.8z" fill="#6B0D12" p-id="1122"></path><path d="M329.91232 652.3904l2.31424 0.02048c21.02272 0.33792 36.81792 5.3504 47.29856 15.15008 10.9056 10.19904 16.29184 26.112 16.29184 47.60064 0 41.71776-21.63712 63.2832-64.01536 63.90272l-1.90976 0.01536h-36.43904v63.45216l-0.03072 1.2544c-0.19968 3.59424-1.23392 6.5536-3.15904 8.8064-2.2784 2.65216-5.85216 3.90144-10.5472 3.90144-4.92544 0-8.63232-1.37728-10.9056-4.28032-1.85344-2.37056-2.87744-5.2224-3.08736-8.4992l-0.03584-1.24928v-173.78816l0.02048-1.28512c0.15872-5.4784 1.34656-9.3696 3.83488-11.61728 2.44736-2.21696 6.91712-3.24608 13.58336-3.36896l1.46432-0.01536h45.32224z m407.21408 0l1.0752 0.02048c8.66304 0.33792 13.47584 4.8384 13.47584 12.86144 0 4.57216-1.30048 7.98208-4.08064 9.96864-2.26304 1.61792-5.40672 2.45248-9.43616 2.60096l-1.37216 0.0256H659.3536v59.38688l69.74464 0.00512 1.17248 0.0256c6.43072 0.26112 10.69056 2.75456 12.00128 7.20896 1.28 2.80576 1.152 5.9392-0.128 8.82688-1.37216 5.7088-5.60128 8.8064-12.0576 9.10336l-1.03936 0.0256H659.3536v81.23904l-0.03584 1.13664c-0.2048 3.31776-1.28 6.0672-3.24608 8.1408-2.29376 2.42688-6.00064 3.52768-11.0336 3.52768-4.88448 0-8.448-1.1264-10.55744-3.6352-1.7408-2.06336-2.67776-4.75136-2.8672-8.00256l-0.03072-1.24416v-176.37888l0.02048-1.20832c0.16896-4.77184 1.3312-8.2688 3.69664-10.3936 2.28864-2.06848 5.88288-3.07712 10.78272-3.2256l1.24928-0.01536h89.79456z m-233.00096 0l2.65728 0.03072c13.3888 0.3072 25.0624 2.90816 35.00544 7.8336 10.57792 5.23776 19.34336 12.42112 26.27584 21.5296 6.89664 9.0624 12.0064 19.73248 15.33952 31.98976 3.31264 12.17024 4.9664 25.15456 4.9664 38.94784 0 13.98272-1.65376 27.06432-4.9664 39.23456-3.328 12.24704-8.38656 22.95296-15.17568 32.1024a72.28416 72.28416 0 0 1-25.85088 21.69344c-9.79968 4.95104-21.26336 7.55712-34.37056 7.84896l-2.47808 0.0256H451.59936l-1.14176-0.01024c-5.84704-0.11776-9.53856-1.09056-11.24352-3.51232-1.38752-1.96096-2.06336-4.92544-2.176-8.97536l-0.01536-1.24416v-173.78816l0.02048-1.25952c0.11264-4.01408 0.78336-6.9632 2.17088-8.92416 1.6896-2.39616 5.32992-3.38944 11.136-3.5072l1.27488-0.01536h52.50048z m-5.76512 24.33024h-33.85856v152.576h41.02656c17.3568 0 30.73536-6.5024 40.3712-19.59936 9.76896-13.27104 14.69952-32.53248 14.69952-57.83552 0-24.51456-5.06368-43.18208-15.08864-56.05888-9.56928-12.288-24.51968-18.6624-45.07648-19.06176l-2.0736-0.02048z m-168.46848 0.86016h-36.43904v76.88192h36.43904c14.08 0 23.92576-3.13344 29.67552-9.23136 5.79584-6.144 8.76544-16.04096 8.76544-29.78304 0-13.6704-3.29728-23.296-9.7536-29.056-6.22592-5.5552-15.13472-8.50944-26.81856-8.79104l-1.8688-0.02048zM658.56 0L962.56 326.4h-208c-80 0-96-64-96-92.8V0z" fill="#FFFFFF" p-id="1123"></path></svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -1 +0,0 @@
<?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="1692418843591" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4084" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M511.5 82c-236.6 0-429 192.4-429 429 0 236.5 192.5 429 429 429 236.6 0 429-192.4 429-429 0-236.5-192.4-429-429-429z m377.6 403.8H734.3c-4-139.9-41.4-259.9-97.5-331.9C776.5 203 879 332 889.1 485.8z m-402.8-349v349h-147c5.5-175.5 68.6-322.6 147-349z m0 399.4v349c-78.4-26.4-141.4-173.5-147-349h147z m50.5 349v-349h147c-5.6 175.5-68.6 322.6-147 349z m0-399.4v-349c78.4 26.4 141.4 173.5 147 349h-147zM386.3 153.9c-56.1 72-93.5 192-97.5 331.9H133.9C144.1 332 246.5 203 386.3 153.9zM133.9 536.2h154.8c4 139.9 41.4 259.9 97.5 331.9C246.5 819 144.1 690 133.9 536.2z m502.8 331.9c56.1-72 93.5-192 97.5-331.9H889C879 690 776.5 819 636.7 868.1z" fill="#5F9BEB" p-id="4085"></path></svg>

Before

Width:  |  Height:  |  Size: 1006 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,89 +0,0 @@
async function embedChatbot() {
const chatBtnId = 'fastgpt-chatbot-button';
const chatWindowId = 'fastgpt-chatbot-window';
const script = document.getElementById('fastgpt-iframe');
const botSrc = script?.getAttribute('data-src');
const primaryColor = script?.getAttribute('data-color') || '#4e83fd';
if (!botSrc) {
console.error(`Can't find appid`);
return;
}
if (document.getElementById(chatBtnId)) {
return;
}
const MessageIcon = `<?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="1690532785664" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4132" xmlns:xlink="http://www.w3.org/1999/xlink" ><path d="M512 32C247.04 32 32 224 32 464A410.24 410.24 0 0 0 172.48 768L160 965.12a25.28 25.28 0 0 0 39.04 22.4l168-112A528.64 528.64 0 0 0 512 896c264.96 0 480-192 480-432S776.96 32 512 32z m244.8 416l-361.6 301.76a12.48 12.48 0 0 1-19.84-12.48l59.2-233.92h-160a12.48 12.48 0 0 1-7.36-23.36l361.6-301.76a12.48 12.48 0 0 1 19.84 12.48l-59.2 233.92h160a12.48 12.48 0 0 1 8 22.08z" fill=${primaryColor} p-id="4133"></path></svg>`;
const CloseIcon = `<?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="1690535441526" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6367" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M512 1024A512 512 0 1 1 512 0a512 512 0 0 1 0 1024zM305.956571 370.395429L447.488 512 305.956571 653.604571a45.568 45.568 0 1 0 64.438858 64.438858L512 576.512l141.604571 141.531429a45.568 45.568 0 0 0 64.438858-64.438858L576.512 512l141.531429-141.604571a45.568 45.568 0 1 0-64.438858-64.438858L512 447.488 370.395429 305.956571a45.568 45.568 0 0 0-64.438858 64.438858z" fill=${primaryColor} p-id="6368"></path></svg>`;
const ChatBtn = document.createElement('div');
ChatBtn.id = chatBtnId;
ChatBtn.style.cssText =
'position: fixed; bottom: 1rem; right: 1rem; width: 40px; height: 40px; cursor: pointer; z-index: 2147483647; transition: 0;';
const ChatBtnDiv = document.createElement('div');
ChatBtnDiv.innerHTML = MessageIcon;
const iframe = document.createElement('iframe');
iframe.allow = 'fullscreen;microphone';
iframe.title = 'FastGpt Chat Window';
iframe.id = chatWindowId;
iframe.src = botSrc;
iframe.style.cssText =
'visibility: hidden; border: none; position: fixed; flex-direction: column; justify-content: space-between; box-shadow: rgba(150, 150, 150, 0.2) 0px 10px 30px 0px, rgba(150, 150, 150, 0.2) 0px 0px 0px 1px; bottom: 4rem; right: 1rem; width: 24rem; height: 40rem; max-width: 90vw; max-height: 85vh; border-radius: 0.75rem; display: flex; z-index: 2147483647; overflow: hidden; left: unset; background-color: #F3F4F6;';
document.body.appendChild(iframe);
let chatBtnDragged = false;
let chatBtnDown = false;
let chatBtnMouseX;
let chatBtnMouseY;
ChatBtn.addEventListener('click', function () {
if (chatBtnDragged) {
chatBtnDragged = false;
return;
}
const chatWindow = document.getElementById(chatWindowId);
if (!chatWindow) return;
const visibilityVal = chatWindow.style.visibility;
if (visibilityVal === 'hidden') {
chatWindow.style.visibility = 'unset';
ChatBtnDiv.innerHTML = CloseIcon;
} else {
chatWindow.style.visibility = 'hidden';
ChatBtnDiv.innerHTML = MessageIcon;
}
});
ChatBtn.addEventListener('mousedown', (e) => {
if (!chatBtnMouseX && !chatBtnMouseY) {
chatBtnMouseX = e.clientX;
chatBtnMouseY = e.clientY;
}
chatBtnDown = true;
});
ChatBtn.addEventListener('mousemove', (e) => {
if (!chatBtnDown) return;
chatBtnDragged = true;
const transformX = e.clientX - chatBtnMouseX;
const transformY = e.clientY - chatBtnMouseY;
ChatBtn.style.transform = `translate3d(${transformX}px, ${transformY}px, 0)`;
e.stopPropagation();
});
ChatBtn.addEventListener('mouseup', (e) => {
chatBtnDown = false;
});
ChatBtn.addEventListener('mouseleave', (e) => {
chatBtnDown = false;
});
ChatBtn.appendChild(ChatBtnDiv);
document.body.appendChild(ChatBtn);
}
document.body.onload = embedChatbot;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,172 +0,0 @@
{
"App": "App",
"Cancel": "No",
"Confirm": "Yes",
"Running": "Running",
"Warning": "Warning",
"UnKnow": "UnKnow",
"app": {
"Advance App TestTip": "The current application is advanced editing mode \n. If you need to switch to [simple mode], please click the save button on the left",
"App Detail": "App Detail",
"Chat Logs Tips": "Logs record the app's online, shared, and API conversations",
"Chat logs": "Chat Logs",
"Confirm Del App Tip": "Confirm to delete the app and all its chats",
"Confirm Save App Tip": "The application may be in advanced orchestration mode, and the advanced orchestration configuration will be overwritten after saving, please confirm!",
"Connection is invalid": "Connecting is invalid",
"Connection type is different": "Connection type is different",
"Copy Module Config": "Copy config",
"Export Config Successful": "The configuration has been copied. Please check for important data",
"Export Configs": "Export Configs",
"Import Config": "Import Config",
"Import Config Failed": "Failed to import the configuration, please ensure that the configuration is normal!",
"Import Configs": "Import Configs",
"Input Field Settings": "Input Field Settings",
"Logs Empty": "Logs is empty",
"Logs Message Total": "Message Count",
"Logs Source": "Source",
"Logs Time": "Time",
"Logs Title": "Title",
"My Apps": "My Apps",
"Output Field Settings": "Output Field Settings",
"Paste Config": "Paste Config"
},
"chat": {
"Complete Response": "Complete Response",
"Confirm to clear history": "Confirm to clear history?",
"Exit Chat": "Exit",
"History": "History",
"New Chat": "New Chat",
"You need to a chat app": "You need to a chat app",
"logs": {
"api": "API",
"online": "Online Chat",
"share": "Share",
"test": "Test Chat "
}
},
"commom": {
"Password inconsistency": "Password inconsistency"
},
"common": {
"Add": "Add",
"Cancel": "Cancel",
"Collect": "Collect",
"Copy": "Copy",
"Copy Successful": "Copy Successful",
"Course": "",
"Delete": "Delete",
"Filed is repeat": "Filed is repeated",
"Filed is repeated": "",
"Input": "Input",
"Output": "Output",
"export": ""
},
"dataset": {
"Confirm to delete the data": "Confirm to delete the data?",
"Queue Desc": "This data refers to the current amount of training for the entire system. FastGPT uses queued training, and if you have too much data to train, you may need to wait for a while",
"System Data Queue": "Data Queue"
},
"file": {
"Click to download CSV template": "Click to download CSV template",
"Create File": "Create File",
"Create file": "Create file",
"Drag and drop": "Drag and drop files here",
"Fetch Url": "Fetch Url",
"If the imported file is garbled, please convert CSV to UTF-8 encoding format": "If the imported file is garbled, please convert CSV to UTF-8 encoding format",
"Release the mouse to upload the file": "Release the mouse to upload the file",
"Select a maximum of 10 files": "Select a maximum of 10 files",
"max 10": "Max 10 files",
"select a document": "select a document",
"support": "support {{fileExtension}} file",
"upload error description": "Only upload multiple files or one folder at a time"
},
"home": {
"AI Assistant": "AI Assistant",
"AI Assistant Desc": "",
"Advanced Settings": "",
"Advanced Settings Desc": "",
"Choice Debug": "Convenient Debugging",
"Choice Debug Desc": "Search testing, reference modification, full conversation preview and many other debugging ways",
"Choice Desc": "FastGPT follows the Apache License 2.0 open source protocol",
"Choice Extension": "Infinite Extension",
"Choice Extension Desc": "HTTP based extension, easy to achieve custom functions",
"Choice Models": "Multiple Models",
"Choice Models Desc": "",
"Choice Open": "Open",
"Choice Open Desc": "",
"Choice QA": "QA Struceture",
"Choice QA Desc": "The index is constructed with the structure of QA pairs, and ADAPTS to various scenarios such as Q&A and reading",
"Choice Visual": "Visual workflow",
"Choice Visual Desc": "Visualize modular operations, easily implement complex workflows, and make your AI no longer monolithic",
"Community": "Community",
"Dateset": "",
"Dateset Desc": "",
"Docs": "Docs",
"FastGPT Ability": "FastGPT Ability",
"FastGPT Desc": "FastGPT is a knowledgebase question answering system based on LLM large language model, which provides out-of-the-box data processing, model invocation and other capabilities. At the same time, workflow orchestration can be performed through Flow visualization to achieve complex Q&A scenarios!",
"Features": "Features",
"Footer Developer": "Developer",
"Footer Docs": "Docs",
"Footer FastGPT Cloud": "FastGPT Cloud",
"Footer Feedback": "Feedback",
"Footer Git": "Code",
"Footer Product": "Product",
"Footer Support": "Support",
"Login": "Login",
"Open": "",
"OpenAPI": "OpenAPI",
"OpenAPI Desc": "",
"Quickly build AI question and answer library": "Quickly build AI question and answer library",
"Start Now": "Start Now",
"Visual AI orchestration": "Visual AI orchestration",
"Why FastGPT": "",
"desc": "",
"slogan": ""
},
"navbar": {
"Account": "Account",
"Apps": "Apps",
"Chat": "Chat",
"Datasets": "DataSets",
"Store": "Store",
"Tools": "Tools"
},
"user": {
"Account": "Account",
"Amount of earnings": "Earnings",
"Amount of inviter": "Inviter",
"Application Name": "Application Name",
"Avatar": "Avatar",
"Balance": "Balance",
"Bill Detail": "Bill Detail",
"Change": "Change",
"Copy invite url": "Copy invitation link",
"Invite Url": "Invite Url",
"Invite url tip": "Friends who register through this link will be permanently bound to you, and you will get a certain balance reward when they recharge. In addition, when friends register with their mobile phone number, you will get 5 yuan reward immediately.",
"Notice": "Notice",
"Old password is error": "Old password is error",
"OpenAI Account Setting": "OpenAI Account Setting",
"Password": "Password",
"Pay": "Pay",
"Personal Information": "Personal",
"Promotion": "Promotion",
"Promotion Rate": "Promotion Rate",
"Promotion Record": "Promotion",
"Promotion rate tip": "You will be rewarded with a percentage of the balance when your friends top up",
"Recharge Record": "Recharge",
"Replace": "Replace",
"Set OpenAI Account Failed": "Set OpenAI account failed",
"Sign Out": "Sign Out",
"Source": "Source",
"Time": "Time",
"Total Amount": "Total Amount",
"Update Password": "Update Password",
"Update password failed": "Update password failed",
"Update password succseful": "Update password succseful",
"Usage Record": "Usage",
"promotion": {
"pay": "",
"register": ""
}
}
}

View File

@@ -1,172 +0,0 @@
{
"App": "应用",
"Cancel": "取消",
"Confirm": "确认",
"Running": "运行中",
"Warning": "提示",
"UnKnow": "未知",
"app": {
"Advance App TestTip": "当前应用为高级编排模式\n如需切换为【简易模式】请点击左侧保存按键",
"App Detail": "应用详情",
"Chat Logs Tips": "日志会记录该应用的在线、分享和 API 对话记录",
"Chat logs": "对话日志",
"Confirm Del App Tip": "确认删除该应用及其所有聊天记录?",
"Confirm Save App Tip": "该应用可能为高级编排模式,保存后将会覆盖高级编排配置,请确认!",
"Connection is invalid": "连接无效",
"Connection type is different": "连接的类型不一致",
"Copy Module Config": "复制配置",
"Export Config Successful": "已复制配置,请注意检查是否有重要数据",
"Export Configs": "导出配置",
"Import Config": "导入配置",
"Import Config Failed": "导入配置失败,请确保配置正常!",
"Import Configs": "导入配置",
"Input Field Settings": "输入字段编辑",
"Logs Empty": "还没有日志噢~",
"Logs Message Total": "消息总数",
"Logs Source": "来源",
"Logs Time": "时间",
"Logs Title": "标题",
"My Apps": "我的应用",
"Output Field Settings": "输出字段编辑",
"Paste Config": "粘贴配置"
},
"chat": {
"Complete Response": "完整响应",
"Confirm to clear history": "确认清空该应用的聊天记录?",
"Exit Chat": "退出聊天",
"History": "记录",
"New Chat": "新对话",
"You need to a chat app": "你需要创建一个应用",
"logs": {
"api": "API 调用",
"online": "在线使用",
"share": "外部链接调用",
"test": "测试"
}
},
"commom": {
"Password inconsistency": "两次密码不一致"
},
"common": {
"Add": "添加",
"Cancel": "取消",
"Collect": "收藏",
"Copy": "复制",
"Copy Successful": "复制成功",
"Course": "",
"Delete": "删除",
"Filed is repeat": "",
"Filed is repeated": "字段重复了",
"Input": "输入",
"Output": "输出",
"export": ""
},
"dataset": {
"Confirm to delete the data": "确认删除该数据?",
"Queue Desc": "该数据是指整个系统当前待训练的数量。FastGPT 采用排队训练的方式,如果待训练的数据过多,可能需要等待一段时间",
"System Data Queue": "排队长度"
},
"file": {
"Click to download CSV template": "点击下载 CSV 模板",
"Create File": "创建新文件",
"Create file": "创建文件",
"Drag and drop": "拖拽文件至此",
"Fetch Url": "链接读取",
"If the imported file is garbled, please convert CSV to UTF-8 encoding format": "如果导入文件乱码,请将 CSV 转成 UTF-8 编码格式",
"Release the mouse to upload the file": "松开鼠标上传文件",
"Select a maximum of 10 files": "最多选择10个文件",
"max 10": "最多选择 10 个文件",
"select a document": "选择文件",
"support": "支持 {{fileExtension}} 文件",
"upload error description": "单次只支持上传多个文件或者一个文件夹"
},
"home": {
"AI Assistant": "AI 客服",
"AI Assistant Desc": "无论对内还是对外AI 将 24 小时为您的用户提供服务",
"Advanced Settings": "高级编排",
"Advanced Settings Desc": "基于 Flow 的流程编排模式,让你的 AI 轻松实现数据库查询、IO 操作、联网通信等扩展能力",
"Choice Debug": "调试便捷",
"Choice Debug Desc": "拥有搜索测试、引用修改、完整对话预览等多种调试途径",
"Choice Desc": "",
"Choice Extension": "无限扩展",
"Choice Extension Desc": "基于 HTTP 实现扩展,轻松实现定制功能",
"Choice Models": "支持多种模型",
"Choice Models Desc": "支持 GPT、Claude、文心一言等多模型",
"Choice Open": "更开放",
"Choice Open Desc": "FastGPT 遵循 Apache License 2.0 开源协议",
"Choice QA": "独特的 QA 结构",
"Choice QA Desc": "采用 QA 对的结构构建索引,适应问答、阅读等多种场景",
"Choice Visual": "可视化工作流",
"Choice Visual Desc": "可视化模块操作,轻松实现复杂工作流,让你的 AI 不再单一",
"Community": "社区",
"Dateset": "自动数据预处理",
"Dateset Desc": "提供手动输入、直接分段、LLM 自动处理和 CSV 等多种数据导入途径",
"Docs": "文档",
"FastGPT Ability": "FastGPT 能力",
"FastGPT Desc": "FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!",
"Features": "特点",
"Footer Developer": "开发者",
"Footer Docs": "文档",
"Footer FastGPT Cloud": "FastGPT 线上服务",
"Footer Feedback": "反馈",
"Footer Git": "源码",
"Footer Product": "产品",
"Footer Support": "支持",
"Login": "登录",
"Open": "",
"OpenAPI": "OpenAPI",
"OpenAPI Desc": "与 GPT API 一致的对外接口,助你轻松接入已有应用",
"Quickly build AI question and answer library": "快速搭建 AI 问答系统",
"Start Now": "立即开始",
"Visual AI orchestration": "可视化 AI 编排",
"Why FastGPT": "为什么选择 FastGPT",
"desc": "基于 LLM 大模型的 AI 知识库问答平台",
"slogan": "让 AI 更懂你的知识"
},
"navbar": {
"Account": "账号",
"Apps": "应用",
"Chat": "聊天",
"Datasets": "知识库",
"Store": "应用市场",
"Tools": "工具"
},
"user": {
"Account": "账号",
"Amount of earnings": "收益(¥)",
"Amount of inviter": "累计邀请人数",
"Application Name": "应用名",
"Avatar": "头像",
"Balance": "余额",
"Bill Detail": "账单详情",
"Change": "变更",
"Copy invite url": "复制邀请链接",
"Invite Url": "邀请链接",
"Invite url tip": "通过该链接注册的好友将永久与你绑定,其充值时你会获得一定余额奖励。\n此外好友使用手机号注册时你将立即获得 5 元奖励。",
"Notice": "通知",
"Old password is error": "旧密码错误",
"OpenAI Account Setting": "OpenAI 账号配置",
"Password": "密码",
"Pay": "充值",
"Personal Information": "个人信息",
"Promotion": "",
"Promotion Rate": "返现比例",
"Promotion Record": "推广记录",
"Promotion rate tip": "好友充值时你将获得一定比例的余额奖励",
"Recharge Record": "充值记录",
"Replace": "更换",
"Set OpenAI Account Failed": "设置 OpenAI 账号异常",
"Sign Out": "登出",
"Source": "来源",
"Time": "时间",
"Total Amount": "总金额",
"Update Password": "修改密码",
"Update password failed": "修改密码异常",
"Update password succseful": "修改密码成功",
"Usage Record": "使用记录",
"promotion": {
"pay": "好友充值",
"register": "好友注册"
}
}
}

View File

@@ -1,56 +0,0 @@
import { GET, POST, DELETE, PUT } from './request';
import type { AppSchema } from '@/types/mongoSchema';
import type { AppListItemType, AppUpdateParams } from '@/types/app';
import { RequestPaging } from '../types/index';
import type { Props as CreateAppProps } from '@/pages/api/app/create';
import { addDays } from 'date-fns';
/**
* 获取模型列表
*/
export const getMyModels = () => GET<AppListItemType[]>('/app/myApps');
/**
* 创建一个模型
*/
export const postCreateApp = (data: CreateAppProps) => POST<string>('/app/create', data);
/**
* 根据 ID 删除模型
*/
export const delModelById = (id: string) => DELETE(`/app/del?appId=${id}`);
/**
* 根据 ID 获取模型
*/
export const getModelById = (id: string) => GET<AppSchema>(`/app/detail?appId=${id}`);
/**
* 根据 ID 更新模型
*/
export const putAppById = (id: string, data: AppUpdateParams) =>
PUT(`/app/update?appId=${id}`, data);
/* 共享市场 */
/**
* 获取共享市场模型
*/
export const getShareModelList = (data: { searchText?: string } & RequestPaging) =>
POST(`/app/share/getModels`, data);
/**
* 收藏/取消收藏模型
*/
export const triggerModelCollection = (appId: string) =>
POST<number>(`/app/share/collection?appId=${appId}`);
// ====================== data
export const getAppTotalUsage = (data: { appId: string }) =>
POST<{ date: String; total: number }[]>(`/app/data/totalUsage`, {
...data,
start: addDays(new Date(), -13),
end: addDays(new Date(), 1)
}).then((res) => (res.length === 0 ? [{ date: new Date(), total: 0 }] : res));
export const getAppChatLogs = (data: RequestPaging & { appId: string }) =>
POST(`/chat/getChatLogs`, data);

View File

@@ -1,66 +0,0 @@
import { GET, POST, DELETE, PUT } from './request';
import type { ChatHistoryItemType } from '@/types/chat';
import type { InitChatResponse, InitShareChatResponse } from './response/chat';
import { RequestPaging } from '../types/index';
import type { OutLinkSchema } from '@/types/mongoSchema';
import type { ShareChatEditType } from '@/types/app';
import type { Props as UpdateHistoryProps } from '@/pages/api/chat/history/updateChatHistory';
/**
* 获取初始化聊天内容
*/
export const getInitChatSiteInfo = (data: { appId: string; chatId?: string }) =>
GET<InitChatResponse>(`/chat/init`, data);
/**
* 获取历史记录
*/
export const getChatHistory = (data: RequestPaging & { appId?: string }) =>
POST<ChatHistoryItemType[]>('/chat/history/getHistory', data);
/**
* 删除一条历史记录
*/
export const delChatHistoryById = (chatId: string) => DELETE(`/chat/removeHistory`, { chatId });
/**
* clear all history by appid
*/
export const clearChatHistoryByAppId = (appId: string) => DELETE(`/chat/removeHistory`, { appId });
/**
* 删除一句对话
*/
export const delChatRecordById = (data: { chatId: string; contentId: string }) =>
DELETE(`/chat/delChatRecordByContentId`, data);
/**
* 修改历史记录: 标题/置顶
*/
export const putChatHistory = (data: UpdateHistoryProps) =>
PUT('/chat/history/updateChatHistory', data);
/**
* 初始化分享聊天
*/
export const initShareChatInfo = (data: { shareId: string }) =>
GET<InitShareChatResponse>(`/chat/shareChat/init`, data);
/**
* create a shareChat
*/
export const createShareChat = (
data: ShareChatEditType & {
appId: string;
}
) => POST<string>(`/chat/shareChat/create`, data);
/**
* get shareChat
*/
export const getShareChatList = (appId: string) =>
GET<OutLinkSchema[]>(`/chat/shareChat/list`, { appId });
/**
* delete a shareChat
*/
export const delShareChatById = (id: string) => DELETE(`/chat/shareChat/delete?id=${id}`);

View File

@@ -1,115 +0,0 @@
import { sseResponseEventEnum, TaskResponseKeyEnum } from '@/constants/chat';
import { getErrText } from '@/utils/tools';
import { parseStreamChunk, SSEParseData } from '@/utils/sse';
import type { ChatHistoryItemResType } from '@/types/chat';
import { StartChatFnProps } from '@/components/ChatBox';
import { getToken } from '@/utils/user';
interface StreamFetchProps {
url?: string;
data: Record<string, any>;
onMessage: StartChatFnProps['generatingMessage'];
abortSignal: AbortController;
}
export const streamFetch = ({
url = '/api/openapi/v1/chat/completions',
data,
onMessage,
abortSignal
}: StreamFetchProps) =>
new Promise<{
responseText: string;
[TaskResponseKeyEnum.responseData]: ChatHistoryItemResType[];
}>(async (resolve, reject) => {
try {
const response = await window.fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
token: getToken()
},
signal: abortSignal.signal,
body: JSON.stringify({
...data,
detail: true,
stream: true
})
});
if (!response?.body) {
throw new Error('Request Error');
}
const reader = response.body?.getReader();
// response data
let responseText = '';
let errMsg = '';
let responseData: ChatHistoryItemResType[] = [];
const parseData = new SSEParseData();
const read = async () => {
try {
const { done, value } = await reader.read();
if (done) {
if (response.status === 200 && !errMsg) {
return resolve({
responseText,
responseData
});
} else {
return reject({
message: errMsg || '响应过程出现异常~',
responseText
});
}
}
const chunkResponse = parseStreamChunk(value);
chunkResponse.forEach((item) => {
// parse json data
const { eventName, data } = parseData.parse(item);
if (!eventName || !data) return;
if (eventName === sseResponseEventEnum.answer && data !== '[DONE]') {
const answer: string = data?.choices?.[0]?.delta?.content || '';
onMessage({ text: answer });
responseText += answer;
} else if (
eventName === sseResponseEventEnum.moduleStatus &&
data?.name &&
data?.status
) {
onMessage(data);
} else if (
eventName === sseResponseEventEnum.appStreamResponse &&
Array.isArray(data)
) {
responseData = data;
} else if (eventName === sseResponseEventEnum.error) {
errMsg = getErrText(data, '流响应错误');
}
});
read();
} catch (err: any) {
if (err?.message === 'The user aborted a request.') {
return resolve({
responseText,
responseData
});
}
reject({
responseText,
message: getErrText(err, '请求异常')
});
}
};
read();
} catch (err: any) {
console.log(err, 'fetch error');
reject(getErrText(err, '请求异常'));
}
});

View File

@@ -1,16 +0,0 @@
import { GET, POST, DELETE } from './request';
import { UserOpenApiKey } from '@/types/openapi';
/**
* crete a api key
*/
export const createAOpenApiKey = () => POST<string>('/openapi/postKey');
/**
* get api keys
*/
export const getOpenApiKeys = () => GET<UserOpenApiKey[]>('/openapi/getKeys');
/**
* delete api by id
*/
export const delOpenApiById = (id: string) => DELETE(`/openapi/delKey?id=${id}`);

View File

@@ -1,6 +0,0 @@
import { GET, POST, PUT, DELETE } from '../request';
import type { FetchResultItem } from '@/types/plugin';
export const fetchUrls = (urlList: string[]) =>
POST<FetchResultItem[]>(`/plugins/urlFetch`, { urlList });

View File

@@ -1,96 +0,0 @@
import { GET, POST, PUT, DELETE } from '../request';
import type { KbItemType, KbListItemType } from '@/types/plugin';
import { RequestPaging } from '@/types/index';
import { TrainingModeEnum } from '@/constants/plugin';
import {
Props as PushDataProps,
Response as PushDateResponse
} from '@/pages/api/openapi/kb/pushData';
import {
Props as SearchTestProps,
Response as SearchTestResponse
} from '@/pages/api/openapi/kb/searchTest';
import { Response as KbDataItemType } from '@/pages/api/plugins/kb/data/getDataById';
import { Props as UpdateDataProps } from '@/pages/api/openapi/kb/updateData';
export type KbUpdateParams = {
id: string;
name: string;
tags: string;
avatar: string;
};
/* knowledge base */
export const getKbList = () => GET<KbListItemType[]>(`/plugins/kb/list`);
export const getKbById = (id: string) => GET<KbItemType>(`/plugins/kb/detail?id=${id}`);
export const postCreateKb = (data: { name: string }) => POST<string>(`/plugins/kb/create`, data);
export const putKbById = (data: KbUpdateParams) => PUT(`/plugins/kb/update`, data);
export const delKbById = (id: string) => DELETE(`/plugins/kb/delete?id=${id}`);
/* kb data */
type GetKbDataListProps = RequestPaging & {
kbId: string;
searchText: string;
};
export const getKbDataList = (data: GetKbDataListProps) =>
POST(`/plugins/kb/data/getDataList`, data);
/**
* 获取导出数据(不分页)
*/
export const getExportDataList = (kbId: string) =>
GET<[string, string, string][]>(
`/plugins/kb/data/exportModelData`,
{ kbId },
{
timeout: 600000
}
);
/**
* 获取模型正在拆分数据的数量
*/
export const getTrainingData = (data: { kbId: string; init: boolean }) =>
POST<{
qaListLen: number;
vectorListLen: number;
}>(`/plugins/kb/data/getTrainingData`, data);
/* get length of system training queue */
export const getTrainingQueueLen = () => GET<number>(`/plugins/kb/data/getQueueLen`);
export const getKbDataItemById = (dataId: string) =>
GET<KbDataItemType>(`/plugins/kb/data/getDataById`, { dataId });
/**
* 直接push数据
*/
export const postKbDataFromList = (data: PushDataProps) =>
POST<PushDateResponse>(`/openapi/kb/pushData`, data);
/**
* 更新一条数据
*/
export const putKbDataById = (data: UpdateDataProps) => PUT('/openapi/kb/updateData', data);
/**
* 删除一条知识库数据
*/
export const delOneKbDataByDataId = (dataId: string) =>
DELETE(`/openapi/kb/delDataById?dataId=${dataId}`);
/**
* 拆分数据
*/
export const postSplitData = (data: {
kbId: string;
chunks: string[];
prompt: string;
mode: `${TrainingModeEnum}`;
}) => POST(`/openapi/text/pushData`, data);
export const searchText = (data: SearchTestProps) =>
POST<SearchTestResponse>(`/openapi/kb/searchTest`, data);

View File

@@ -1,127 +0,0 @@
import axios, { Method, InternalAxiosRequestConfig, AxiosResponse } from 'axios';
import { clearToken, getToken } from '@/utils/user';
import { TOKEN_ERROR_CODE } from '@/service/errorCode';
interface ConfigType {
headers?: { [key: string]: string };
hold?: boolean;
timeout?: number;
}
interface ResponseDataType {
code: number;
message: string;
data: any;
}
/**
* 请求开始
*/
function requestStart(config: InternalAxiosRequestConfig): InternalAxiosRequestConfig {
if (config.headers) {
config.headers.token = getToken();
}
return config;
}
/**
* 请求成功,检查请求头
*/
function responseSuccess(response: AxiosResponse<ResponseDataType>) {
return response;
}
/**
* 响应数据检查
*/
function checkRes(data: ResponseDataType) {
if (data === undefined) {
console.log('error->', data, 'data is empty');
return Promise.reject('服务器异常');
} else if (data.code < 200 || data.code >= 400) {
return Promise.reject(data);
}
return data.data;
}
/**
* 响应错误
*/
function responseError(err: any) {
console.log('error->', '请求错误', err);
if (!err) {
return Promise.reject({ message: '未知错误' });
}
if (typeof err === 'string') {
return Promise.reject({ message: err });
}
// 有报错响应
if (err?.code in TOKEN_ERROR_CODE) {
clearToken();
window.location.replace(
`/login?lastRoute=${encodeURIComponent(location.pathname + location.search)}`
);
return Promise.reject({ message: 'token过期重新登录' });
}
if (err?.response?.data) {
return Promise.reject(err?.response?.data);
}
return Promise.reject(err);
}
/* 创建请求实例 */
const instance = axios.create({
timeout: 60000, // 超时时间
headers: {
'content-type': 'application/json'
}
});
/* 请求拦截 */
instance.interceptors.request.use(requestStart, (err) => Promise.reject(err));
/* 响应拦截 */
instance.interceptors.response.use(responseSuccess, (err) => Promise.reject(err));
function request(url: string, data: any, config: ConfigType, method: Method): any {
/* 去空 */
for (const key in data) {
if (data[key] === null || data[key] === undefined) {
delete data[key];
}
}
return instance
.request({
baseURL: '/api',
url,
method,
data: ['POST', 'PUT'].includes(method) ? data : null,
params: !['POST', 'PUT'].includes(method) ? data : null,
...config // 用户自定义配置,可以覆盖前面的配置
})
.then((res) => checkRes(res.data))
.catch((err) => responseError(err));
}
/**
* api请求方式
* @param {String} url
* @param {Any} params
* @param {Object} config
* @returns
*/
export function GET<T>(url: string, params = {}, config: ConfigType = {}): Promise<T> {
return request(url, params, config, 'GET');
}
export function POST<T>(url: string, data = {}, config: ConfigType = {}): Promise<T> {
return request(url, data, config, 'POST');
}
export function PUT<T>(url: string, data = {}, config: ConfigType = {}): Promise<T> {
return request(url, data, config, 'PUT');
}
export function DELETE<T>(url: string, data = {}, config: ConfigType = {}): Promise<T> {
return request(url, data, config, 'DELETE');
}

View File

@@ -1,6 +0,0 @@
import { AppListItemType } from '@/types/app';
export type AppListResponse = {
myApps: AppListItemType[];
myCollectionApps: AppListItemType[];
};

View File

@@ -1,25 +0,0 @@
import type { AppSchema } from '@/types/mongoSchema';
import type { ChatItemType } from '@/types/chat';
import { VariableItemType } from '@/types/app';
export interface InitChatResponse {
chatId: string;
appId: string;
app: {
variableModules?: VariableItemType[];
welcomeText?: string;
chatModels?: string[];
name: string;
avatar: string;
intro: string;
canUse?: boolean;
};
title: string;
variables: Record<string, any>;
history: ChatItemType[];
}
export interface InitShareChatResponse {
userAvatar: string;
app: InitChatResponse['app'];
}

View File

@@ -1,13 +0,0 @@
import type { UserType } from '@/types/user';
import type { PromotionRecordSchema } from '@/types/mongoSchema';
export interface ResLogin {
user: UserType;
token: string;
}
export interface PromotionRecordType {
_id: PromotionRecordSchema['_id'];
type: PromotionRecordSchema['type'];
createTime: PromotionRecordSchema['createTime'];
amount: PromotionRecordSchema['amount'];
}

View File

@@ -1,8 +0,0 @@
import { GET, POST } from './request';
export const textCensor = (data: { text: string }) =>
POST<{ code?: number; message: string }>('/plugins/censor/text_baidu', data).then((res) => {
if (res?.code === 5000) {
return Promise.reject(res.message);
}
});

View File

@@ -1,121 +0,0 @@
import axios, { Method, InternalAxiosRequestConfig, AxiosResponse } from 'axios';
import { baseUrl } from '../../service/ai/openai';
interface ConfigType {
headers?: { [key: string]: string };
hold?: boolean;
timeout?: number;
}
interface ResponseDataType {
code: number;
message: string;
data: any;
}
/**
* 请求开始
*/
function requestStart(config: InternalAxiosRequestConfig): InternalAxiosRequestConfig {
if (config.headers) {
config.headers.rootkey = process.env.ROOT_KEY;
}
return config;
}
/**
* 请求成功,检查请求头
*/
function responseSuccess(response: AxiosResponse<ResponseDataType>) {
return response;
}
/**
* 响应数据检查
*/
function checkRes(data: ResponseDataType) {
if (data === undefined) {
console.log('error->', data, 'data is empty');
return Promise.reject('服务器异常');
} else if (data?.code && (data.code < 200 || data.code >= 400)) {
return Promise.reject(data);
}
return data.data;
}
/**
* 响应错误
*/
function responseError(err: any) {
if (!err) {
return Promise.reject({ message: '未知错误' });
}
if (typeof err === 'string') {
return Promise.reject({ message: err });
}
if (err?.response?.data) {
return Promise.reject(err?.response?.data);
}
return Promise.reject(err);
}
/* 创建请求实例 */
const instance = axios.create({
timeout: 60000, // 超时时间
headers: {
'content-type': 'application/json'
}
});
/* 请求拦截 */
instance.interceptors.request.use(requestStart, (err) => Promise.reject(err));
/* 响应拦截 */
instance.interceptors.response.use(responseSuccess, (err) => Promise.reject(err));
export function request(url: string, data: any, config: ConfigType, method: Method): any {
if (!global.systemEnv?.pluginBaseUrl) {
return Promise.reject('商业版插件加载中...');
}
/* 去空 */
for (const key in data) {
if (data[key] === null || data[key] === undefined) {
delete data[key];
}
}
return instance
.request({
baseURL: global.systemEnv.pluginBaseUrl,
url,
method,
data: ['POST', 'PUT'].includes(method) ? data : null,
params: !['POST', 'PUT'].includes(method) ? data : null,
...config // 用户自定义配置,可以覆盖前面的配置
})
.then((res) => checkRes(res.data))
.catch((err) => responseError(err));
}
/**
* api请求方式
* @param {String} url
* @param {Any} params
* @param {Object} config
* @returns
*/
export function GET<T>(url: string, params = {}, config: ConfigType = {}): Promise<T> {
return request(url, params, config, 'GET');
}
export function POST<T>(url: string, data = {}, config: ConfigType = {}): Promise<T> {
return request(url, data, config, 'POST');
}
export function PUT<T>(url: string, data = {}, config: ConfigType = {}): Promise<T> {
return request(url, data, config, 'PUT');
}
export function DELETE<T>(url: string, data = {}, config: ConfigType = {}): Promise<T> {
return request(url, data, config, 'DELETE');
}

View File

@@ -1,6 +0,0 @@
import { GET, POST, PUT } from './request';
import type { InitDateResponse } from '@/pages/api/system/getInitData';
export const getInitData = () => GET<InitDateResponse>('/system/getInitData');
export const uploadImg = (base64Img: string) => POST<string>('/system/uploadImage', { base64Img });

View File

@@ -1,102 +0,0 @@
import { GET, POST, PUT } from './request';
import { createHashPassword } from '@/utils/tools';
import type { ResLogin, PromotionRecordType } from './response/user';
import { UserAuthTypeEnum } from '@/constants/common';
import { UserBillType, UserType, UserUpdateParams } from '@/types/user';
import type { PagingData, RequestPaging } from '@/types';
import { informSchema, PaySchema } from '@/types/mongoSchema';
export const sendAuthCode = (data: {
username: string;
type: `${UserAuthTypeEnum}`;
googleToken: string;
}) => POST(`/plusApi/user/account/sendCode`, data);
export const getTokenLogin = () => GET<UserType>('/user/account/tokenLogin');
export const gitLogin = (params: { code: string; inviterId?: string }) =>
GET<ResLogin>('/user/account/gitLogin', params);
export const postRegister = ({
username,
password,
code,
inviterId
}: {
username: string;
code: string;
password: string;
inviterId: string;
}) =>
POST<ResLogin>(`/plusApi/user/account/register`, {
username,
code,
inviterId,
password: createHashPassword(password)
});
export const postFindPassword = ({
username,
code,
password
}: {
username: string;
code: string;
password: string;
}) =>
POST<ResLogin>(`/plusApi/user/account/updatePasswordByCode`, {
username,
code,
password: createHashPassword(password)
});
export const updatePasswordByOld = ({ oldPsw, newPsw }: { oldPsw: string; newPsw: string }) =>
POST('/user/account/updatePasswordByOld', {
oldPsw: createHashPassword(oldPsw),
newPsw: createHashPassword(newPsw)
});
export const postLogin = ({ username, password }: { username: string; password: string }) =>
POST<ResLogin>('/user/account/loginByPassword', {
username,
password: createHashPassword(password)
});
export const loginOut = () => GET('/user/account/loginout');
export const putUserInfo = (data: UserUpdateParams) => PUT('/user/account/update', data);
export const getUserBills = (data: RequestPaging) =>
POST<PagingData<UserBillType>>(`/user/getBill`, data);
export const getPayOrders = () => GET<PaySchema[]>(`/user/getPayOrders`);
export const getPayCode = (amount: number) =>
GET<{
codeUrl: string;
payId: string;
}>(`/plusApi/user/pay/getPayCode`, { amount });
export const checkPayResult = (payId: string) =>
GET<number>(`/plusApi/user/pay/checkPayResult`, { payId }).then(() => {
try {
GET('/user/account/paySuccess');
} catch (error) {}
return 'success';
});
export const getInforms = (data: RequestPaging) =>
POST<PagingData<informSchema>>(`/user/inform/list`, data);
export const getUnreadCount = () => GET<number>(`/user/inform/countUnread`);
export const readInform = (id: string) => GET(`/user/inform/read`, { id });
/* get promotion init data */
export const getPromotionInitData = () =>
GET<{
invitedAmount: number;
earningsAmount: number;
}>('/user/promotion/getPromotionData');
/* promotion records */
export const getPromotionRecords = (data: RequestPaging) =>
POST<PromotionRecordType>(`/user/promotion/getPromotions`, data);

View File

@@ -1,143 +0,0 @@
import React, { useState } from 'react';
import {
Box,
Button,
Flex,
ModalFooter,
ModalBody,
Table,
Thead,
Tbody,
Tr,
Th,
Td,
TableContainer,
IconButton
} from '@chakra-ui/react';
import { getOpenApiKeys, createAOpenApiKey, delOpenApiById } from '@/api/openapi';
import { useQuery, useMutation } from '@tanstack/react-query';
import { useLoading } from '@/hooks/useLoading';
import dayjs from 'dayjs';
import { AddIcon, DeleteIcon } from '@chakra-ui/icons';
import { getErrText, useCopyData } from '@/utils/tools';
import { useToast } from '@/hooks/useToast';
import MyIcon from '../Icon';
import MyModal from '../MyModal';
const APIKeyModal = ({ onClose }: { onClose: () => void }) => {
const { Loading } = useLoading();
const { toast } = useToast();
const {
data: apiKeys = [],
isLoading: isGetting,
refetch
} = useQuery(['getOpenApiKeys'], getOpenApiKeys);
const [apiKey, setApiKey] = useState('');
const { copyData } = useCopyData();
const { mutate: onclickCreateApiKey, isLoading: isCreating } = useMutation({
mutationFn: () => createAOpenApiKey(),
onSuccess(res) {
setApiKey(res);
refetch();
},
onError(err) {
toast({
status: 'warning',
title: getErrText(err)
});
}
});
const { mutate: onclickRemove, isLoading: isDeleting } = useMutation({
mutationFn: async (id: string) => delOpenApiById(id),
onSuccess() {
refetch();
}
});
return (
<MyModal isOpen onClose={onClose} w={'600px'}>
<Box py={3} px={5}>
<Box fontWeight={'bold'} fontSize={'2xl'}>
API
</Box>
<Box fontSize={'sm'} color={'myGray.600'}>
API 使~
</Box>
</Box>
<ModalBody minH={'300px'} maxH={['70vh', '500px']} overflow={'overlay'}>
<TableContainer mt={2} position={'relative'}>
<Table>
<Thead>
<Tr>
<Th>Api Key</Th>
<Th></Th>
<Th>使</Th>
<Th />
</Tr>
</Thead>
<Tbody fontSize={'sm'}>
{apiKeys.map(({ id, apiKey, createTime, lastUsedTime }) => (
<Tr key={id}>
<Td>{apiKey}</Td>
<Td>{dayjs(createTime).format('YYYY/MM/DD HH:mm:ss')}</Td>
<Td>
{lastUsedTime
? dayjs(lastUsedTime).format('YYYY/MM/DD HH:mm:ss')
: '没有使用过'}
</Td>
<Td>
<IconButton
icon={<DeleteIcon />}
size={'xs'}
aria-label={'delete'}
variant={'base'}
colorScheme={'gray'}
onClick={() => onclickRemove(id)}
/>
</Td>
</Tr>
))}
</Tbody>
</Table>
</TableContainer>
</ModalBody>
<ModalFooter>
<Button
variant="base"
leftIcon={<AddIcon color={'myGray.600'} fontSize={'sm'} />}
onClick={() => onclickCreateApiKey()}
>
</Button>
</ModalFooter>
<Loading loading={isGetting || isCreating || isDeleting} fixed={false} />
<MyModal isOpen={!!apiKey} w={'400px'} onClose={() => setApiKey('')}>
<Box py={3} px={5}>
<Box fontWeight={'bold'} fontSize={'2xl'}>
API
</Box>
<Box fontSize={'sm'} color={'myGray.600'}>
~
</Box>
</Box>
<ModalBody>
<Flex bg={'myGray.100'} px={3} py={2} cursor={'pointer'} onClick={() => copyData(apiKey)}>
<Box flex={1}>{apiKey}</Box>
<MyIcon name={'copy'} w={'16px'}></MyIcon>
</Flex>
</ModalBody>
<ModalFooter>
<Button variant="base" onClick={() => setApiKey('')}>
</Button>
</ModalFooter>
</MyModal>
</MyModal>
);
};
export default APIKeyModal;

View File

@@ -1,22 +0,0 @@
import React from 'react';
import { Image } from '@chakra-ui/react';
import type { ImageProps } from '@chakra-ui/react';
import { LOGO_ICON } from '@/constants/chat';
const Avatar = ({ w = '30px', ...props }: ImageProps) => {
return (
<Image
fallbackSrc={LOGO_ICON}
fallbackStrategy={'onError'}
borderRadius={'50%'}
objectFit={'cover'}
alt=""
w={w}
h={w}
p={'1px'}
{...props}
/>
);
};
export default Avatar;

View File

@@ -1,42 +0,0 @@
import React from 'react';
import { Box } from '@chakra-ui/react';
const Badge = ({
children,
isDot = false,
max = 99,
count = 0
}: {
children: React.ReactNode;
isDot?: boolean;
max?: number;
count?: number;
}) => {
return (
<Box position={'relative'}>
{children}
{count > 0 && (
<Box position={'absolute'} right={0} top={0} transform={'translate(70%,-50%)'}>
{isDot ? (
<Box w={'5px'} h={'5px'} bg={'myRead.600'} borderRadius={'20px'}></Box>
) : (
<Box
color={'white'}
bg={'myRead.600'}
lineHeight={0.9}
borderRadius={'100px'}
px={'4px'}
py={'2px'}
fontSize={'12px'}
border={'1px solid white'}
>
{count > max ? `${max}+` : count}
</Box>
)}
</Box>
)}
</Box>
);
};
export default Badge;

View File

@@ -1,43 +0,0 @@
import React from 'react';
import { ModalBody, Box, useTheme } from '@chakra-ui/react';
import { ChatItemType } from '@/types/chat';
import MyModal from '../MyModal';
const ContextModal = ({
context = [],
onClose
}: {
context: ChatItemType[];
onClose: () => void;
}) => {
const theme = useTheme();
return (
<MyModal
isOpen={true}
onClose={onClose}
title={`完整对话记录(${context.length}条)`}
h={['90vh', '80vh']}
minW={['90vw', '600px']}
isCentered
>
<ModalBody pt={0} whiteSpace={'pre-wrap'} textAlign={'justify'} fontSize={'sm'}>
{context.map((item, i) => (
<Box
key={i}
p={2}
borderRadius={'lg'}
border={theme.borders.base}
_notLast={{ mb: 2 }}
position={'relative'}
>
<Box fontWeight={'bold'}>{item.obj}</Box>
<Box>{item.value}</Box>
</Box>
))}
</ModalBody>
</MyModal>
);
};
export default ContextModal;

View File

@@ -1,149 +0,0 @@
import React, { useCallback, useState } from 'react';
import { ModalBody, Box, useTheme } from '@chakra-ui/react';
import { getKbDataItemById } from '@/api/plugins/kb';
import { useLoading } from '@/hooks/useLoading';
import { useToast } from '@/hooks/useToast';
import { getErrText } from '@/utils/tools';
import { QuoteItemType } from '@/types/chat';
import MyIcon from '@/components/Icon';
import InputDataModal from '@/pages/kb/detail/components/InputDataModal';
import MyModal from '../MyModal';
type SearchType = {
kb_id?: string;
id?: string;
q: string;
a?: string;
source?: string | undefined;
};
const QuoteModal = ({
onUpdateQuote,
rawSearch = [],
onClose
}: {
onUpdateQuote: (quoteId: string, sourceText: string) => Promise<void>;
rawSearch: SearchType[];
onClose: () => void;
}) => {
const theme = useTheme();
const { toast } = useToast();
const { setIsLoading, Loading } = useLoading();
const [editDataItem, setEditDataItem] = useState<{
kbId: string;
dataId: string;
a: string;
q: string;
}>();
/**
* click edit, get new kbDataItem
*/
const onclickEdit = useCallback(
async (item: SearchType) => {
if (!item.id) return;
try {
setIsLoading(true);
const data = (await getKbDataItemById(item.id)) as QuoteItemType;
if (!data) {
onUpdateQuote(item.id, '已删除');
throw new Error('该数据已被删除');
}
setEditDataItem({
kbId: data.kb_id,
dataId: data.id,
q: data.q,
a: data.a
});
} catch (err) {
toast({
status: 'warning',
title: getErrText(err)
});
}
setIsLoading(false);
},
[setIsLoading, toast, onUpdateQuote]
);
return (
<>
<MyModal
isOpen={true}
onClose={onClose}
h={['90vh', '80vh']}
isCentered
minW={['90vw', '600px']}
title={
<>
({rawSearch.length})
<Box fontSize={['xs', 'sm']} fontWeight={'normal'}>
注意: 修改知识库内容成功后
</Box>
</>
}
>
<ModalBody pt={0} whiteSpace={'pre-wrap'} textAlign={'justify'} fontSize={'sm'}>
{rawSearch.map((item, i) => (
<Box
key={i}
flex={'1 0 0'}
p={2}
borderRadius={'lg'}
border={theme.borders.base}
_notLast={{ mb: 2 }}
position={'relative'}
_hover={{ '& .edit': { display: 'flex' } }}
overflow={'hidden'}
>
{item.source && <Box color={'myGray.600'}>({item.source})</Box>}
<Box>{item.q}</Box>
<Box>{item.a}</Box>
{item.id && (
<Box
className="edit"
display={'none'}
position={'absolute'}
right={0}
top={0}
bottom={0}
w={'40px'}
bg={'rgba(255,255,255,0.9)'}
alignItems={'center'}
justifyContent={'center'}
boxShadow={'-10px 0 10px rgba(255,255,255,1)'}
>
<MyIcon
name={'edit'}
w={'18px'}
h={'18px'}
cursor={'pointer'}
color={'myGray.600'}
_hover={{
color: 'myBlue.700'
}}
onClick={() => onclickEdit(item)}
/>
</Box>
)}
</Box>
))}
</ModalBody>
<Loading fixed={false} />
</MyModal>
{editDataItem && (
<InputDataModal
onClose={() => setEditDataItem(undefined)}
onSuccess={() => onUpdateQuote(editDataItem.dataId, '手动修改')}
onDelete={() => onUpdateQuote(editDataItem.dataId, '已删除')}
kbId={editDataItem.kbId}
defaultValues={editDataItem}
/>
)}
</>
);
};
export default QuoteModal;

View File

@@ -1,108 +0,0 @@
import React, { useCallback, useMemo, useState } from 'react';
import { ChatModuleEnum } from '@/constants/chat';
import { ChatHistoryItemResType, ChatItemType, QuoteItemType } from '@/types/chat';
import { Flex, BoxProps, useDisclosure } from '@chakra-ui/react';
import { useTranslation } from 'react-i18next';
import { useGlobalStore } from '@/store/global';
import dynamic from 'next/dynamic';
import Tag from '../Tag';
import MyTooltip from '../MyTooltip';
const QuoteModal = dynamic(() => import('./QuoteModal'), { ssr: false });
const ContextModal = dynamic(() => import('./ContextModal'), { ssr: false });
const WholeResponseModal = dynamic(() => import('./WholeResponseModal'), { ssr: false });
const ResponseTags = ({
chatId,
contentId,
responseData = []
}: {
chatId?: string;
contentId?: string;
responseData?: ChatHistoryItemResType[];
}) => {
const { isPc } = useGlobalStore();
const { t } = useTranslation();
const [quoteModalData, setQuoteModalData] = useState<QuoteItemType[]>();
const [contextModalData, setContextModalData] = useState<ChatItemType[]>();
const {
isOpen: isOpenWholeModal,
onOpen: onOpenWholeModal,
onClose: onCloseWholeModal
} = useDisclosure();
const {
quoteList = [],
completeMessages = [],
tokens = 0
} = useMemo(() => {
const chatData = responseData.find((item) => item.moduleName === ChatModuleEnum.AIChat);
if (!chatData) return {};
return {
quoteList: chatData.quoteList,
completeMessages: chatData.completeMessages,
tokens: responseData.reduce((sum, item) => sum + (item.tokens || 0), 0)
};
}, [responseData]);
const updateQuote = useCallback(async (quoteId: string, sourceText: string) => {}, []);
const TagStyles: BoxProps = {
mr: 2,
bg: 'transparent'
};
return responseData.length === 0 ? null : (
<Flex alignItems={'center'} mt={2} flexWrap={'wrap'}>
{quoteList.length > 0 && (
<MyTooltip label="查看引用">
<Tag
colorSchema="blue"
cursor={'pointer'}
{...TagStyles}
onClick={() => setQuoteModalData(quoteList)}
>
{quoteList.length}
</Tag>
</MyTooltip>
)}
{completeMessages.length > 0 && (
<MyTooltip label={'点击查看完整对话记录'}>
<Tag
colorSchema="green"
cursor={'pointer'}
{...TagStyles}
onClick={() => setContextModalData(completeMessages)}
>
{completeMessages.length}
</Tag>
</MyTooltip>
)}
{isPc && tokens > 0 && (
<Tag colorSchema="purple" cursor={'default'} {...TagStyles}>
{tokens}Tokens
</Tag>
)}
<MyTooltip label={'点击查看完整响应值'}>
<Tag colorSchema="gray" cursor={'pointer'} {...TagStyles} onClick={onOpenWholeModal}>
{t('chat.Complete Response')}
</Tag>
</MyTooltip>
{!!quoteModalData && (
<QuoteModal
rawSearch={quoteModalData}
onUpdateQuote={updateQuote}
onClose={() => setQuoteModalData(undefined)}
/>
)}
{!!contextModalData && (
<ContextModal context={contextModalData} onClose={() => setContextModalData(undefined)} />
)}
{isOpenWholeModal && (
<WholeResponseModal response={responseData} onClose={onCloseWholeModal} />
)}
</Flex>
);
};
export default ResponseTags;

View File

@@ -1,71 +0,0 @@
import React, { useMemo } from 'react';
import { Box, ModalBody, useTheme, ModalHeader, Flex } from '@chakra-ui/react';
import type { ChatHistoryItemResType } from '@/types/chat';
import { useTranslation } from 'react-i18next';
import MyModal from '../MyModal';
import MyTooltip from '../MyTooltip';
import { QuestionOutlineIcon } from '@chakra-ui/icons';
const ResponseModal = ({
response,
onClose
}: {
response: ChatHistoryItemResType[];
onClose: () => void;
}) => {
const { t } = useTranslation();
const theme = useTheme();
const formatResponse = useMemo(
() =>
response.map((item) => {
const copy = { ...item };
delete copy.completeMessages;
delete copy.quoteList;
return copy;
}),
[response]
);
return (
<MyModal
isOpen={true}
onClose={onClose}
h={['90vh', '80vh']}
minW={['90vw', '600px']}
title={
<Flex alignItems={'center'}>
{t('chat.Complete Response')}
<MyTooltip
label={
'moduleName: 模型名\nprice: 价格倍率100000\nmodel?: 模型名\ntokens?: token 消耗\n\nanswer?: 回答内容\nquestion?: 问题\ntemperature?: 温度\nmaxToken?: 最大 tokens\n\nsimilarity?: 相似度\nlimit?: 单次搜索结果\n\ncqList?: 问题分类列表\ncqResult?: 分类结果\n\nextractDescription?: 内容提取描述\nextractResult?: 提取结果'
}
>
<QuestionOutlineIcon ml={2} />
</MyTooltip>
</Flex>
}
isCentered
>
<ModalBody>
{formatResponse.map((item, i) => (
<Box
key={i}
p={2}
pt={[0, 2]}
borderRadius={'lg'}
border={theme.borders.base}
_notLast={{ mb: 2 }}
position={'relative'}
whiteSpace={'pre-wrap'}
>
{JSON.stringify(item, null, 2)}
</Box>
))}
</ModalBody>
</MyModal>
);
};
export default ResponseModal;

View File

@@ -1,43 +0,0 @@
.stopIcon {
animation: zoomStopIcon 0.4s infinite alternate;
}
@keyframes zoomStopIcon {
0% {
transform: scale(0.8);
}
100% {
transform: scale(1.2);
}
}
.newChat {
.modelListContainer {
height: 0;
overflow: hidden;
}
.modelList {
border-radius: 6px;
}
&:hover {
.modelListContainer {
height: 60vh;
}
.modelList {
box-shadow: 0 0 5px rgba($color: #000000, $alpha: 0.05);
border: 1px solid #dee0e2;
}
}
}
.statusAnimation {
animation: statusBox 0.8s linear infinite alternate;
}
@keyframes statusBox {
0% {
opacity: 1;
}
100% {
opacity: 0.11;
}
}

View File

@@ -1,862 +0,0 @@
import React, {
useCallback,
useRef,
useState,
useMemo,
forwardRef,
useImperativeHandle,
ForwardedRef,
useEffect
} from 'react';
import { throttle } from 'lodash';
import {
ChatHistoryItemResType,
ChatItemType,
ChatSiteItemType,
ExportChatType
} from '@/types/chat';
import { useToast } from '@/hooks/useToast';
import {
useCopyData,
voiceBroadcast,
cancelBroadcast,
hasVoiceApi,
getErrText
} from '@/utils/tools';
import { Box, Card, Flex, Input, Textarea, Button, useTheme, BoxProps } from '@chakra-ui/react';
import { feConfigs } from '@/store/static';
import { Types } from 'mongoose';
import { EventNameEnum } from '../Markdown/constant';
import { adaptChatItem_openAI } from '@/utils/plugin/openai';
import { useMarkdown } from '@/hooks/useMarkdown';
import { VariableItemType } from '@/types/app';
import { VariableInputEnum } from '@/constants/app';
import { useForm } from 'react-hook-form';
import { MessageItemType } from '@/pages/api/openapi/v1/chat/completions';
import { fileDownload } from '@/utils/file';
import { htmlTemplate } from '@/constants/common';
import { useRouter } from 'next/router';
import { useGlobalStore } from '@/store/global';
import { TaskResponseKeyEnum, getDefaultChatVariables } from '@/constants/chat';
import { useTranslation } from 'react-i18next';
import { customAlphabet } from 'nanoid';
import MyIcon from '@/components/Icon';
import Avatar from '@/components/Avatar';
import Markdown from '@/components/Markdown';
import MySelect from '@/components/Select';
import MyTooltip from '../MyTooltip';
import dynamic from 'next/dynamic';
const ResponseTags = dynamic(() => import('./ResponseTags'));
import styles from './index.module.scss';
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 24);
const textareaMinH = '22px';
type generatingMessageProps = { text?: string; name?: string; status?: 'running' | 'finish' };
export type StartChatFnProps = {
chatList: ChatSiteItemType[];
messages: MessageItemType[];
controller: AbortController;
variables: Record<string, any>;
generatingMessage: (e: generatingMessageProps) => void;
};
export type ComponentRef = {
getChatHistory: () => ChatSiteItemType[];
resetVariables: (data?: Record<string, any>) => void;
resetHistory: (chatId: ChatSiteItemType[]) => void;
scrollToBottom: (behavior?: 'smooth' | 'auto') => void;
};
const VariableLabel = ({
required = false,
children
}: {
required?: boolean;
children: React.ReactNode | string;
}) => (
<Box as={'label'} display={'inline-block'} position={'relative'} mb={1}>
{children}
{required && (
<Box position={'absolute'} top={'-2px'} right={'-10px'} color={'red.500'} fontWeight={'bold'}>
*
</Box>
)}
</Box>
);
const Empty = () => {
const { data: chatProblem } = useMarkdown({ url: '/chatProblem.md' });
const { data: versionIntro } = useMarkdown({ url: '/versionIntro.md' });
return (
<Box pt={6} w={'85%'} maxW={'600px'} m={'auto'} alignItems={'center'} justifyContent={'center'}>
{/* version intro */}
<Card p={4} mb={10} minH={'200px'}>
<Markdown source={versionIntro} />
</Card>
<Card p={4} minH={'600px'}>
<Markdown source={chatProblem} />
</Card>
</Box>
);
};
const ChatAvatar = ({ src, type }: { src?: string; type: 'Human' | 'AI' }) => {
const theme = useTheme();
return (
<Box
w={['28px', '34px']}
h={['28px', '34px']}
p={'2px'}
borderRadius={'lg'}
border={theme.borders.base}
boxShadow={'0 0 5px rgba(0,0,0,0.1)'}
bg={type === 'Human' ? 'white' : 'myBlue.100'}
>
<Avatar src={src} w={'100%'} h={'100%'} />
</Box>
);
};
const ChatBox = (
{
showEmptyIntro = false,
chatId,
appAvatar,
userAvatar,
variableModules,
welcomeText,
onUpdateVariable,
onStartChat,
onDelMessage
}: {
showEmptyIntro?: boolean;
chatId?: string;
appAvatar?: string;
userAvatar?: string;
variableModules?: VariableItemType[];
welcomeText?: string;
onUpdateVariable?: (e: Record<string, any>) => void;
onStartChat?: (e: StartChatFnProps) => Promise<{
responseText: string;
[TaskResponseKeyEnum.responseData]: ChatHistoryItemResType[];
}>;
onDelMessage?: (e: { contentId?: string; index: number }) => void;
},
ref: ForwardedRef<ComponentRef>
) => {
const ChatBoxRef = useRef<HTMLDivElement>(null);
const theme = useTheme();
const router = useRouter();
const { t } = useTranslation();
const { copyData } = useCopyData();
const { toast } = useToast();
const { isPc } = useGlobalStore();
const TextareaDom = useRef<HTMLTextAreaElement>(null);
const controller = useRef(new AbortController());
const [refresh, setRefresh] = useState(false);
const [variables, setVariables] = useState<Record<string, any>>({});
const [chatHistory, setChatHistory] = useState<ChatSiteItemType[]>([]);
const isChatting = useMemo(
() =>
chatHistory[chatHistory.length - 1] &&
chatHistory[chatHistory.length - 1]?.status !== 'finish',
[chatHistory]
);
const variableIsFinish = useMemo(() => {
if (!variableModules || chatHistory.length > 0) return true;
for (let i = 0; i < variableModules.length; i++) {
const item = variableModules[i];
if (item.required && !variables[item.key]) {
return false;
}
}
return true;
}, [chatHistory.length, variableModules, variables]);
const { register, reset, getValues, setValue, handleSubmit } = useForm<Record<string, any>>({
defaultValues: variables
});
// 滚动到底部
const scrollToBottom = useCallback(
(behavior: 'smooth' | 'auto' = 'smooth') => {
if (!ChatBoxRef.current) return;
ChatBoxRef.current.scrollTo({
top: ChatBoxRef.current.scrollHeight,
behavior
});
},
[ChatBoxRef]
);
// 聊天信息生成中……获取当前滚动条位置,判断是否需要滚动到底部
const generatingScroll = useCallback(
throttle(() => {
if (!ChatBoxRef.current) return;
const isBottom =
ChatBoxRef.current.scrollTop + ChatBoxRef.current.clientHeight + 150 >=
ChatBoxRef.current.scrollHeight;
isBottom && scrollToBottom('auto');
}, 100),
[]
);
// eslint-disable-next-line react-hooks/exhaustive-deps
const generatingMessage = useCallback(
({ text = '', status, name }: generatingMessageProps) => {
setChatHistory((state) =>
state.map((item, index) => {
if (index !== state.length - 1) return item;
return {
...item,
...(text
? {
value: item.value + text
}
: {}),
...(status && name
? {
status,
moduleName: name
}
: {})
};
})
);
generatingScroll();
},
[generatingScroll, setChatHistory]
);
// 复制内容
const onclickCopy = useCallback(
(value: string) => {
copyData(value);
},
[copyData]
);
// 重置输入内容
const resetInputVal = useCallback((val: string) => {
if (!TextareaDom.current) return;
setTimeout(() => {
/* 回到最小高度 */
if (TextareaDom.current) {
TextareaDom.current.value = val;
TextareaDom.current.style.height =
val === '' ? textareaMinH : `${TextareaDom.current.scrollHeight}px`;
}
}, 100);
}, []);
/**
* user confirm send prompt
*/
const sendPrompt = useCallback(
async (variables: Record<string, any> = {}, inputVal = '') => {
if (!onStartChat) return;
if (isChatting) {
toast({
title: '正在聊天中...请等待结束',
status: 'warning'
});
return;
}
// get input value
const val = inputVal.trim();
if (!val) {
toast({
title: '内容为空',
status: 'warning'
});
return;
}
const newChatList: ChatSiteItemType[] = [
...chatHistory,
{
dataId: nanoid(),
obj: 'Human',
value: val,
status: 'finish'
},
{
dataId: nanoid(),
obj: 'AI',
value: '',
status: 'loading'
}
];
// 插入内容
setChatHistory(newChatList);
// 清空输入内容
resetInputVal('');
setTimeout(() => {
scrollToBottom();
}, 100);
try {
// create abort obj
const abortSignal = new AbortController();
controller.current = abortSignal;
const messages = adaptChatItem_openAI({ messages: newChatList, reserveId: true });
const { responseData } = await onStartChat({
chatList: newChatList,
messages,
controller: abortSignal,
generatingMessage,
variables: {
...getDefaultChatVariables(),
...variables
}
});
// set finish status
setChatHistory((state) =>
state.map((item, index) => {
if (index !== state.length - 1) return item;
return {
...item,
status: 'finish',
responseData
};
})
);
setTimeout(() => {
generatingScroll();
isPc && TextareaDom.current?.focus();
}, 100);
} catch (err: any) {
toast({
title: getErrText(err, '聊天出错了~'),
status: 'error',
duration: 5000,
isClosable: true
});
if (!err?.responseText) {
resetInputVal(inputVal);
setChatHistory(newChatList.slice(0, newChatList.length - 2));
}
// set finish status
setChatHistory((state) =>
state.map((item, index) => {
if (index !== state.length - 1) return item;
return {
...item,
status: 'finish'
};
})
);
}
},
[
isChatting,
chatHistory,
resetInputVal,
toast,
scrollToBottom,
onStartChat,
generatingMessage,
generatingScroll,
isPc
]
);
useImperativeHandle(ref, () => ({
getChatHistory: () => chatHistory,
resetVariables(e) {
const defaultVal: Record<string, any> = {};
variableModules?.forEach((item) => {
defaultVal[item.key] = '';
});
reset(e || defaultVal);
setVariables(e || defaultVal);
},
resetHistory(e) {
setChatHistory(e);
},
scrollToBottom
}));
const controlIconStyle = {
w: '14px',
cursor: 'pointer',
p: 1,
bg: 'white',
borderRadius: 'lg',
boxShadow: '0 0 5px rgba(0,0,0,0.1)',
border: theme.borders.base,
mr: 3
};
const controlContainerStyle = {
className: 'control',
color: 'myGray.400',
display: ['flex', 'none'],
pl: 1,
mt: 2
};
const MessageCardStyle: BoxProps = {
px: 4,
py: 3,
borderRadius: '0 8px 8px 8px',
boxShadow: '0 0 8px rgba(0,0,0,0.15)'
};
const messageCardMaxW = ['calc(100% - 25px)', 'calc(100% - 40px)'];
const showEmpty = useMemo(
() =>
feConfigs?.show_emptyChat &&
showEmptyIntro &&
chatHistory.length === 0 &&
!variableModules?.length &&
!welcomeText,
[chatHistory.length, showEmptyIntro, variableModules, welcomeText]
);
const statusBoxData = useMemo(() => {
const colorMap = {
loading: '#67c13b',
running: '#67c13b',
finish: 'myBlue.600'
};
if (!isChatting) return;
const chatContent = chatHistory[chatHistory.length - 1];
if (!chatContent) return;
return {
bg: colorMap[chatContent.status] || colorMap.loading,
name: t(chatContent.moduleName || 'Running')
};
}, [chatHistory, isChatting, t]);
useEffect(() => {
return () => {
controller.current?.abort('leave');
// close voice
cancelBroadcast();
};
}, [router.query]);
useEffect(() => {
const listen = () => {
cancelBroadcast();
};
window.addEventListener('beforeunload', listen);
return () => {
window.removeEventListener('beforeunload', listen);
};
}, []);
return (
<Flex flexDirection={'column'} h={'100%'}>
<Box ref={ChatBoxRef} flex={'1 0 0'} h={0} w={'100%'} overflow={'overlay'} px={[4, 0]} pb={3}>
<Box maxW={['100%', '92%']} h={'100%'} mx={'auto'}>
{showEmpty && <Empty />}
{!!welcomeText && (
<Flex flexDirection={'column'} alignItems={'flex-start'} py={2}>
{/* avatar */}
<ChatAvatar src={appAvatar} type={'AI'} />
{/* message */}
<Card order={2} mt={2} {...MessageCardStyle} bg={'white'} maxW={messageCardMaxW}>
<Markdown
source={`~~~guide \n${welcomeText}`}
isChatting={false}
onClick={(e) => {
const val = e?.data;
if (e?.event !== EventNameEnum.guideClick || !val) return;
handleSubmit((data) => sendPrompt(data, val))();
}}
/>
</Card>
</Flex>
)}
{/* variable input */}
{!!variableModules?.length && (
<Flex flexDirection={'column'} alignItems={'flex-start'} py={2}>
{/* avatar */}
<ChatAvatar src={appAvatar} type={'AI'} />
{/* message */}
<Card
order={2}
mt={2}
bg={'white'}
w={'400px'}
maxW={messageCardMaxW}
{...MessageCardStyle}
>
{variableModules.map((item) => (
<Box key={item.id} mb={4}>
<VariableLabel required={item.required}>{item.label}</VariableLabel>
{item.type === VariableInputEnum.input && (
<Input
isDisabled={variableIsFinish}
{...register(item.key, {
required: item.required
})}
/>
)}
{item.type === VariableInputEnum.select && (
<MySelect
width={'100%'}
isDisabled={variableIsFinish}
list={(item.enums || []).map((item) => ({
label: item.value,
value: item.value
}))}
value={getValues(item.key)}
onchange={(e) => {
setValue(item.key, e);
setRefresh(!refresh);
}}
/>
)}
</Box>
))}
{!variableIsFinish && (
<Button
leftIcon={<MyIcon name={'chatFill'} w={'16px'} />}
size={'sm'}
maxW={'100px'}
borderRadius={'lg'}
onClick={handleSubmit((data) => {
onUpdateVariable?.(data);
setVariables(data);
})}
>
{'开始对话'}
</Button>
)}
</Card>
</Flex>
)}
{/* chat history */}
<Box id={'history'}>
{chatHistory.map((item, index) => (
<Flex
position={'relative'}
key={item.dataId}
flexDirection={'column'}
alignItems={item.obj === 'Human' ? 'flex-end' : 'flex-start'}
py={5}
_hover={{
'& .control': {
display: item.status === 'finish' ? 'flex' : 'none'
}
}}
>
{item.obj === 'Human' && (
<>
<Flex w={'100%'} alignItems={'center'} justifyContent={'flex-end'}>
<Flex {...controlContainerStyle} justifyContent={'flex-end'} mr={3}>
<MyTooltip label={'复制'}>
<MyIcon
{...controlIconStyle}
name={'copy'}
_hover={{ color: 'myBlue.700' }}
onClick={() => onclickCopy(item.value)}
/>
</MyTooltip>
{onDelMessage && (
<MyTooltip label={'删除'}>
<MyIcon
{...controlIconStyle}
mr={0}
name={'delete'}
_hover={{ color: 'red.600' }}
onClick={() => {
setChatHistory((state) =>
state.filter((chat) => chat.dataId !== item.dataId)
);
onDelMessage({
contentId: item.dataId,
index
});
}}
/>
</MyTooltip>
)}
</Flex>
<ChatAvatar src={userAvatar} type={'Human'} />
</Flex>
<Box position={'relative'} maxW={messageCardMaxW} mt={['6px', 2]}>
<Card
className="markdown"
whiteSpace={'pre-wrap'}
{...MessageCardStyle}
bg={'myBlue.300'}
borderRadius={'8px 0 8px 8px'}
>
<Box as={'p'}>{item.value}</Box>
</Card>
</Box>
</>
)}
{item.obj === 'AI' && (
<>
<Flex w={'100%'} alignItems={'flex-end'}>
<ChatAvatar src={appAvatar} type={'AI'} />
<Flex {...controlContainerStyle} ml={3}>
<MyTooltip label={'复制'}>
<MyIcon
{...controlIconStyle}
name={'copy'}
_hover={{ color: 'myBlue.700' }}
onClick={() => onclickCopy(item.value)}
/>
</MyTooltip>
{onDelMessage && (
<MyTooltip label={'删除'}>
<MyIcon
{...controlIconStyle}
name={'delete'}
_hover={{ color: 'red.600' }}
onClick={() => {
setChatHistory((state) =>
state.filter((chat) => chat.dataId !== item.dataId)
);
onDelMessage({
contentId: item.dataId,
index
});
}}
/>
</MyTooltip>
)}
{hasVoiceApi && (
<MyTooltip label={'语音播报'}>
<MyIcon
{...controlIconStyle}
name={'voice'}
_hover={{ color: '#E74694' }}
onClick={() => voiceBroadcast({ text: item.value })}
/>
</MyTooltip>
)}
</Flex>
{statusBoxData && index === chatHistory.length - 1 && (
<Flex
ml={3}
alignItems={'center'}
px={3}
py={'1px'}
borderRadius="md"
border={theme.borders.base}
>
<Box
className={styles.statusAnimation}
bg={statusBoxData.bg}
w="8px"
h="8px"
borderRadius={'50%'}
mt={'1px'}
></Box>
<Box ml={2} color={'myGray.600'}>
{statusBoxData.name}
</Box>
</Flex>
)}
</Flex>
<Box position={'relative'} maxW={messageCardMaxW} mt={['6px', 2]}>
<Card bg={'white'} {...MessageCardStyle}>
<Markdown
source={item.value}
isChatting={index === chatHistory.length - 1 && isChatting}
/>
<ResponseTags
chatId={chatId}
contentId={item.dataId}
responseData={item.responseData}
/>
</Card>
</Box>
</>
)}
</Flex>
))}
</Box>
</Box>
</Box>
{/* input */}
{onStartChat && variableIsFinish ? (
<Box m={['0 auto', '10px auto']} w={'100%'} maxW={['auto', 'min(750px, 100%)']} px={[0, 5]}>
<Box
py={'18px'}
position={'relative'}
boxShadow={`0 0 10px rgba(0,0,0,0.2)`}
borderTop={['1px solid', 0]}
borderTopColor={'myGray.200'}
borderRadius={['none', 'md']}
backgroundColor={'white'}
>
{/* 输入框 */}
<Textarea
ref={TextareaDom}
py={0}
pr={['45px', '55px']}
border={'none'}
_focusVisible={{
border: 'none'
}}
placeholder="提问"
resize={'none'}
rows={1}
height={'22px'}
lineHeight={'22px'}
maxHeight={'150px'}
maxLength={-1}
overflowY={'auto'}
whiteSpace={'pre-wrap'}
wordBreak={'break-all'}
boxShadow={'none !important'}
color={'myGray.900'}
onChange={(e) => {
const textarea = e.target;
textarea.style.height = textareaMinH;
textarea.style.height = `${textarea.scrollHeight}px`;
}}
onKeyDown={(e) => {
// 触发快捷发送
if (isPc && e.keyCode === 13 && !e.shiftKey) {
handleSubmit((data) => sendPrompt(data, TextareaDom.current?.value))();
e.preventDefault();
}
// 全选内容
// @ts-ignore
e.key === 'a' && e.ctrlKey && e.target?.select();
}}
/>
{/* 发送和等待按键 */}
<Flex
alignItems={'center'}
justifyContent={'center'}
h={'25px'}
w={'25px'}
position={'absolute'}
right={['12px', '20px']}
bottom={'15px'}
>
{isChatting ? (
<MyIcon
className={styles.stopIcon}
width={['22px', '25px']}
height={['22px', '25px']}
cursor={'pointer'}
name={'stop'}
color={'gray.500'}
onClick={() => controller.current?.abort('stop')}
/>
) : (
<MyIcon
name={'chatSend'}
width={['18px', '20px']}
height={['18px', '20px']}
cursor={'pointer'}
color={'gray.500'}
onClick={() => {
handleSubmit((data) => sendPrompt(data, TextareaDom.current?.value))();
}}
/>
)}
</Flex>
</Box>
</Box>
) : null}
</Flex>
);
};
export default React.memo(forwardRef(ChatBox));
export const useChatBox = () => {
const onExportChat = useCallback(
({ type, history }: { type: ExportChatType; history: ChatItemType[] }) => {
const getHistoryHtml = () => {
const historyDom = document.getElementById('history');
if (!historyDom) return;
const dom = Array.from(historyDom.children).map((child, i) => {
const avatar = `<img src="${
child.querySelector<HTMLImageElement>('.avatar')?.src
}" alt="" />`;
const chatContent = child.querySelector<HTMLDivElement>('.markdown');
if (!chatContent) {
return '';
}
const chatContentClone = chatContent.cloneNode(true) as HTMLDivElement;
const codeHeader = chatContentClone.querySelectorAll('.code-header');
codeHeader.forEach((childElement: any) => {
childElement.remove();
});
return `<div class="chat-item">
${avatar}
${chatContentClone.outerHTML}
</div>`;
});
const html = htmlTemplate.replace('{{CHAT_CONTENT}}', dom.join('\n'));
return html;
};
const map: Record<ExportChatType, () => void> = {
md: () => {
fileDownload({
text: history.map((item) => item.value).join('\n\n'),
type: 'text/markdown',
filename: 'chat.md'
});
},
html: () => {
const html = getHistoryHtml();
html &&
fileDownload({
text: html,
type: 'text/html',
filename: '聊天记录.html'
});
},
pdf: () => {
const html = getHistoryHtml();
html &&
// @ts-ignore
html2pdf(html, {
margin: 0,
filename: `聊天记录.pdf`
});
}
};
map[type]();
},
[]
);
return {
onExportChat
};
};

View File

@@ -1,29 +0,0 @@
import { SystemInputEnum } from '@/constants/app';
import { FlowModuleTypeEnum } from '@/constants/flow';
import { getChatModel } from '@/service/utils/data';
import { AppModuleItemType, VariableItemType } from '@/types/app';
export const getSpecialModule = (modules: AppModuleItemType[]) => {
const welcomeText: string =
modules
.find((item) => item.flowType === FlowModuleTypeEnum.userGuide)
?.inputs?.find((item) => item.key === SystemInputEnum.welcomeText)?.value || '';
const variableModules: VariableItemType[] =
modules
.find((item) => item.flowType === FlowModuleTypeEnum.variable)
?.inputs.find((item) => item.key === SystemInputEnum.variables)?.value || [];
return {
welcomeText,
variableModules
};
};
export const getChatModelNameList = (modules: AppModuleItemType[]): string[] => {
const chatModules = modules.filter((item) => item.flowType === FlowModuleTypeEnum.chatNode);
return chatModules
.map(
(item) => getChatModel(item.inputs.find((input) => input.key === 'model')?.value)?.name || ''
)
.filter((item) => item);
};

View File

@@ -1,30 +0,0 @@
import React from 'react';
import { Button, ModalFooter, ModalBody } from '@chakra-ui/react';
import MyModal from '../MyModal';
import { useTranslation } from 'react-i18next';
import Markdown from '../Markdown';
const md = `
| 交流群 | 小助手 |
| ----------------------- | -------------------- |
| ![](https://otnvvf-imgs.oss.laf.run/wxqun300.jpg) | ![](https://otnvvf-imgs.oss.laf.run/wx300.jpg) |
`;
const CommunityModal = ({ onClose }: { onClose: () => void }) => {
const { t } = useTranslation();
return (
<MyModal isOpen={true} onClose={onClose} title={t('home.Community')}>
<ModalBody textAlign={'center'}>
<Markdown source={md} />
</ModalBody>
<ModalFooter>
<Button variant={'base'} onClick={onClose}>
</Button>
</ModalFooter>
</MyModal>
);
};
export default CommunityModal;

View File

@@ -1,4 +0,0 @@
.datePicker {
--rdp-background-color: #d6e8ff;
--rdp-accent-color: #0000ff;
}

View File

@@ -1,121 +0,0 @@
import React, { useState, useMemo, useRef } from 'react';
import { Box, Card, Flex, useTheme, useOutsideClick, Button } from '@chakra-ui/react';
import { addDays, format } from 'date-fns';
import { type DateRange, DayPicker } from 'react-day-picker';
import MyIcon from '../Icon';
import 'react-day-picker/dist/style.css';
import styles from './index.module.scss';
import zhCN from 'date-fns/locale/zh-CN';
const DateRangePicker = ({
onChange,
onSuccess,
position = 'bottom',
defaultDate = {
from: addDays(new Date(), -30),
to: new Date()
}
}: {
onChange?: (date: DateRange) => void;
onSuccess?: (date: DateRange) => void;
position?: 'bottom' | 'top';
defaultDate?: DateRange;
}) => {
const theme = useTheme();
const OutRangeRef = useRef(null);
const [range, setRange] = useState<DateRange | undefined>(defaultDate);
const [showSelected, setShowSelected] = useState(false);
const formatSelected = useMemo(() => {
if (range?.from && range.to) {
return `${format(range.from, 'y-MM-dd')} ~ ${format(range.to, 'y-MM-dd')}`;
}
return `${format(new Date(), 'y-MM-dd')} ~ ${format(new Date(), 'y-MM-dd')}`;
}, [range]);
useOutsideClick({
ref: OutRangeRef,
handler: () => {
setShowSelected(false);
}
});
return (
<Box position={'relative'} ref={OutRangeRef}>
<Flex
border={theme.borders.base}
px={3}
py={1}
borderRadius={'sm'}
cursor={'pointer'}
bg={'myWhite.600'}
fontSize={'sm'}
onClick={() => setShowSelected(true)}
>
<Box>{formatSelected}</Box>
<MyIcon ml={2} name={'date'} w={'16px'} color={'myGray.600'} />
</Flex>
{showSelected && (
<Card
position={'absolute'}
zIndex={1}
{...(position === 'top'
? {
bottom: '40px'
}
: {})}
>
<DayPicker
locale={zhCN}
id="test"
mode="range"
className={styles.datePicker}
defaultMonth={defaultDate.to}
selected={range}
disabled={[
{ from: new Date(2022, 3, 1), to: addDays(new Date(), -90) },
{ from: addDays(new Date(), 1), to: new Date(2099, 1, 1) }
]}
onSelect={(date) => {
if (date?.from === undefined) {
date = {
from: range?.from,
to: range?.from
};
}
if (date?.to === undefined) {
date.to = date.from;
}
setRange(date);
onChange && onChange(date);
}}
footer={
<Flex justifyContent={'flex-end'}>
<Button
variant={'outline'}
size={'sm'}
mr={2}
onClick={() => setShowSelected(false)}
>
</Button>
<Button
size={'sm'}
onClick={() => {
onSuccess && onSuccess(range || defaultDate);
setShowSelected(false);
}}
>
</Button>
</Flex>
}
/>
</Card>
)}
</Box>
);
};
export default DateRangePicker;
export type DateRangeType = DateRange;

View File

@@ -1,22 +0,0 @@
import React from 'react';
import { Flex, type FlexProps } from '@chakra-ui/react';
import MyIcon from '@/components/Icon';
const CloseIcon = (props: FlexProps) => {
return (
<Flex
cursor={'pointer'}
w={'22px'}
h={'22px'}
alignItems={'center'}
justifyContent={'center'}
borderRadius={'50%'}
_hover={{ bg: 'myGray.200' }}
{...props}
>
<MyIcon name={'closeLight'} w={'12px'} color={'myGray.500'} />
</Flex>
);
};
export default CloseIcon;

View File

@@ -1 +0,0 @@
<?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="1686969412308" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3481" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M517.864056 487.834624c-56.774051-54.213739-58.850339-144.187937-4.6366-200.960964 54.212716-56.773028 144.187937-58.849316 200.960964-4.6366 56.775074 54.213739 58.850339 144.186913 4.6366 200.960964C664.613328 539.972075 574.639131 542.048363 517.864056 487.834624zM687.194626 452.994118c37.533848-39.308261 36.09508-101.596909-3.210112-139.128711-39.304168-37.531801-101.593839-36.094056-139.127687 3.211135-37.532825 39.307238-36.093033 101.593839 3.212158 139.125641C587.374176 493.736031 649.660778 492.302379 687.194626 452.994118zM479.104287 670.917406l-101.495602 106.289792c26.206872 25.024953 27.167756 66.540486 2.14178 92.749404-25.028023 26.209942-66.543555 27.16571-92.750427 2.140757l-58.361199 53.027727c0 0-68.750827 11.100826-100.379175-19.101033-31.630395-30.205952-37.865399-112.721271-37.865399-112.721271l246.37427-258.302951c-63.173808-117.608581-47.24707-267.162736 49.939389-368.939747 36.517705-38.242999 80.346933-65.156976 127.165238-81.040734l1.084705 46.269813c-35.443233 14.07967-68.566632 35.596729-96.618525 64.973804-80.271208 84.064604-96.099708 205.865671-49.433876 305.083393l23.075555 39.163975L146.090774 798.015106c0 0 0.593518 49.77873 17.242709 65.677838 14.888082 14.216793 61.832254 9.828856 61.832254 9.828856l60.407812-63.260789 31.631418 30.203906c8.741082 8.346085 22.570042 8.030907 30.91715-0.711198 8.347109-8.742105 8.026814-22.571065-0.713244-30.91715l-31.632441-30.207999 156.456355-163.846672 39.009456 22.481014c101.259218 42.039465 222.201731 20.61041 302.474986-63.453171 104.251366-109.178585 100.260471-282.211477-8.91709-386.464889-33.591049-32.075533-73.260537-53.829999-115.093295-65.49262l-1.030469-45.153386c53.197596 12.471033 103.945397 38.547944 146.323577 79.015611 126.645398 120.931257 131.277906 321.649698 10.344602 448.296119C748.158093 705.787588 599.500355 728.598106 479.104287 670.917406z" p-id="3482"></path></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1 +0,0 @@
<?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="1689057990782" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1770" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M878.5 255.1H770V146.7c0-43.6-35.5-79.1-79.1-79.1H145.2c-43.6 0-79.1 35.5-79.1 79.1v545.8c0 43.6 35.5 79.1 79.1 79.1h108.4V880c0 43.6 35.5 79.1 79.1 79.1h545.8c43.6 0 79.1-35.5 79.1-79.1V334.2c-0.1-43.6-35.6-79.1-79.1-79.1zM145.2 707.5c-8.3 0-15.1-6.8-15.1-15.1V146.7c0-8.3 6.8-15.1 15.1-15.1H691c8.3 0 15.1 6.8 15.1 15.1v545.8c0 8.3-6.8 15.1-15.1 15.1H145.2zM893.5 880c0 8.3-6.8 15.1-15.1 15.1H332.7c-8.3 0-15.1-6.8-15.1-15.1V771.5H691c43.6 0 79.1-35.5 79.1-79.1V319.1h108.4c8.3 0 15.1 6.8 15.1 15.1V880z" p-id="1771"></path></svg>

Before

Width:  |  Height:  |  Size: 840 B

View File

@@ -1 +0,0 @@
<?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="1681997838051" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4520" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M898 178.7H665.3c4.3-9.8 6.7-20.6 6.7-32 0-44-36-80-80-80H432c-44 0-80 36-80 80 0 11.4 2.4 22.2 6.7 32H126c-13.2 0-24 10.8-24 24s10.8 24 24 24h772c13.2 0 24-10.8 24-24s-10.8-24-24-24z m-466 0c-8.5 0-16.5-3.4-22.6-9.4-6.1-6.1-9.4-14.1-9.4-22.6s3.4-16.5 9.4-22.6c6.1-6.1 14.1-9.4 22.6-9.4h160c8.5 0 16.5 3.4 22.6 9.4 6.1 6.1 9.4 14.1 9.4 22.6 0 8.5-3.4 16.5-9.4 22.6-6.1 6.1-14.1 9.4-22.6 9.4H432zM513 774.7c18.1 0 33-14.8 33-33v-334c0-18.1-14.9-33-33-33h-2c-18.1 0-33 14.8-33 33v334c0 18.2 14.8 33 33 33h2zM363 774.7c18.1 0 33-14.8 33-33v-334c0-18.1-14.9-33-33-33h-2c-18.1 0-33 14.8-33 33v334c0 18.2 14.8 33 33 33h2zM663 774.7c18.1 0 33-14.8 33-33v-334c0-18.1-14.9-33-33-33h-2c-18.1 0-33 14.8-33 33v334c0 18.2 14.8 33 33 33h2z" p-id="4521"></path><path d="M812 280.7c-13.3 0-24 10.7-24 24v530c0 41.9-34.1 76-76 76H312c-41.9 0-76-34.1-76-76v-530c0-13.3-10.7-24-24-24s-24 10.7-24 24v530c0 68.4 55.6 124 124 124h400c68.4 0 124-55.6 124-124v-530c0-13.2-10.7-24-24-24z" p-id="4522"></path></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +0,0 @@
<?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="1684826302600" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2244" xmlns:xlink="http://www.w3.org/1999/xlink" ><path d="M904 512h-56c-4.4 0-8 3.6-8 8v320H184V184h320c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V520c0-4.4-3.6-8-8-8z" p-id="2245"></path><path d="M355.9 534.9L354 653.8c-0.1 8.9 7.1 16.2 16 16.2h0.4l118-2.9c2-0.1 4-0.9 5.4-2.3l415.9-415c3.1-3.1 3.1-8.2 0-11.3L785.4 114.3c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1 0.8-5.7 2.3l-415.8 415c-1.4 1.5-2.3 3.5-2.3 5.6z m63.5 23.6L779.7 199l45.2 45.1-360.5 359.7-45.7 1.1 0.7-46.4z" p-id="2246"></path></svg>

Before

Width:  |  Height:  |  Size: 810 B

View File

@@ -1 +0,0 @@
<?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="1686468581713" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2951" xmlns:xlink="http://www.w3.org/1999/xlink" ><path d="M512 640.64a42.666667 42.666667 0 0 0 42.666667-42.666667v-341.333333h130.986666a21.333333 21.333333 0 0 0 14.250667-5.461333l2.688-2.901334a21.333333 21.333333 0 0 0-4.010667-29.909333l-165.717333-126.464a32 32 0 0 0-38.912 0.042667L329.472 218.453333a21.333333 21.333333 0 0 0 12.970667 38.229334H469.333333v341.333333a42.666667 42.666667 0 0 0 42.666667 42.666667z m229.674667-298.368a42.666667 42.666667 0 0 0 4.992 85.034667H853.333333v426.666666H170.666667v-426.666666h106.666666a42.666667 42.666667 0 0 0 0-85.333334H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333334v426.666666a85.333333 85.333333 0 0 0 85.333334 85.333334h682.666666a85.333333 85.333333 0 0 0 85.333334-85.333334v-426.666666a85.333333 85.333333 0 0 0-85.333334-85.333334h-106.666666z" fill="#000000" p-id="2952"></path></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +0,0 @@
<?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="1689324655973" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3734" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M512 601.09184948l-213.36752354-331.89890023A41.3976083 41.3976083 0 0 0 222.02342717 291.06546788v428.06065559H208.2150185a41.42522469 41.42522469 0 0 0 0 82.85044936h110.46726671a41.42522469 41.42522469 0 0 0 0-82.85044936h-13.80840868V432.10455041l172.27370066 267.99358607a41.42522469 41.42522469 0 0 0 69.70484562 0l172.27370066-267.99358607V719.12612347H705.31771479a41.42522469 41.42522469 0 0 0 0 82.85044936h110.46726671a41.42522469 41.42522469 0 0 0 0-82.85044936h-13.80840867V291.06546788a41.42522469 41.42522469 0 0 0-76.69189974-21.76205051L512 601.09184948z" p-id="3735"></path><path d="M14.8973037 180.59820247a165.70089876 165.70089876 0 0 1 165.70089877-165.70089877h662.80359506a165.70089876 165.70089876 0 0 1 165.70089877 165.70089877v662.80359506a165.70089876 165.70089876 0 0 1-165.70089877 165.70089877H180.59820247a165.70089876 165.70089876 0 0 1-165.70089877-165.70089877V180.59820247z m165.70089877-82.85044938a82.85044939 82.85044939 0 0 0-82.85044938 82.85044938v662.80359506a82.85044939 82.85044939 0 0 0 82.85044938 82.85044938h662.80359506a82.85044939 82.85044939 0 0 0 82.85044938-82.85044938V180.59820247a82.85044939 82.85044939 0 0 0-82.85044938-82.85044938H180.59820247z" p-id="3736"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +0,0 @@
<?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="1689325086843" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1918" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M75.09333333 220.72888889h-36.40888888H75.09333333z m0 582.54222222h0z m194.18074112 194.18074112v-36.40888889 36.40888889z m485.4518511 0v0z m194.18074112-194.18074112h-36.40888889 36.40888889z m0-307.92211001h0zM480.10581333 26.54814777v-36.40888889V26.54814777zM269.27407445 26.54814777v0z m622.73763556 331.46652444l-25.72894891 25.72894891 25.72894891-25.72894891z m-274.57156779-274.57156664l25.72894777-25.72894891-25.72894777 25.72894891zM560.54518557 220.72888889h-36.4088889 36.4088889z m194.18073998 194.18074112v0zM38.68444445 220.72888889v582.54222222h72.81777777V220.72888889h-72.81777777zM269.27407445 1033.86074112h485.4518511v-72.81777778H269.27407445v72.81777778zM985.31555555 803.27111111v-307.92211001h-72.81777777V803.27111111h72.81777777zM480.10581333-9.86074112H269.27407445v72.81777778h210.83173888v-72.81777778z m437.68339001 342.14646557l-274.62011335-274.62011222-51.45789554 51.45789554 274.57156665 274.66865778 51.45789668-51.45789554zM480.10581333 62.95703666a157.77185223 157.77185223 0 0 1 111.55683556 46.21501667l51.45789668-51.45789667a230.58963001 230.58963001 0 0 0-163.01473224-67.57489778v72.81777778z m505.20974222 432.39196444c0-61.16693333-24.27259221-119.80951666-67.52635221-163.06327665l-51.45789667 51.45789667c29.56401778 29.61256334 46.16647111 69.75943111 46.16647111 111.60537998h72.81777777zM38.68444445 803.27111111A230.58963001 230.58963001 0 0 0 269.27407445 1033.86074112v-72.81777778A157.77185223 157.77185223 0 0 1 111.50222222 803.27111111h-72.81777777z m72.81777777-582.54222222A157.77185223 157.77185223 0 0 1 269.27407445 62.95703666v-72.81777778A230.58963001 230.58963001 0 0 0 38.68444445 220.72888889h72.81777777zM754.72592555 1033.86074112A230.58963001 230.58963001 0 0 0 985.31555555 803.27111111h-72.81777777A157.77185223 157.77185223 0 0 1 754.72592555 961.04296334v72.81777778zM524.13629667 26.54814777v194.18074112h72.81777778V26.54814777h-72.81777778zM754.72592555 451.3185189h194.18074112v-72.81777778h-194.18074112v72.81777778zM524.13629667 220.72888889A230.58963001 230.58963001 0 0 0 754.72592555 451.3185189v-72.81777778A157.77185223 157.77185223 0 0 1 596.95407445 220.72888889h-72.81777778z" p-id="1919"></path><path d="M241.94313443 594.76954112V803.27111111h42.08867556v-78.6432h27.42803001c19.07825778 0 33.64181333-0.97090333 43.69066667-3.0098011 7.37886777-1.60199111 14.61210112-4.8545189 21.74824334-9.80612779 7.18468779-5.00015445 13.1072-11.89356999 17.76753778-20.63170332 4.66033778-8.73813333 6.99050667-19.46661888 6.99050666-32.28254891 0-16.55390777-4.02924999-30.09801443-12.13629667-40.53522887a54.56478777 54.56478777 0 0 0-30.00092445-20.43752334c-7.76723001-2.08744334-24.46677333-3.15543666-50.00154112-3.15543666H241.89459001z m271.07631446 0h-76.9441189V803.27111111h79.1771978c15.53445888 0 28.01057223-1.45635555 37.28270222-4.36906666 12.42756779-4.02924999 22.28224-9.5634011 29.6125622-16.69954333 9.66049223-9.36922112 17.08790557-21.65115221 22.33078557-36.79725113 4.22343111-12.42756779 6.35941888-27.18530333 6.35941888-44.37029888 0-19.56371001-2.28162333-35.92343666-6.79632555-49.22481778a91.02222222 91.02222222 0 0 0-19.90352554-33.83599445 69.71088555 69.71088555 0 0 0-31.45728-19.22389333c-9.12649443-2.66998557-22.33078557-3.98070557-39.66141668-3.98070443z m133.98471111 0V803.27111111h42.04012999v-88.59496334h87.0415178v-35.29234887h-87.0415178v-49.32190891h100.87689558v-35.29234887H646.95561443zM283.98326557 689.18992555v-59.12803556h20.34043221q22.71914667 0 30.29219555 1.40781113a29.12711111 29.12711111 0 0 1 16.89372445 9.22358443c4.46615666 4.95160889 6.69923555 11.16539221 6.69923555 18.78698666a27.71930112 27.71930112 0 0 1-17.9617189 26.45712669c-5.53415111 2.18453333-16.6509989 3.25252779-33.25345109 3.25252665h-23.01041777z m194.13219555 78.93447111v-138.06250667h18.93262222c17.13644999 0 28.64165888 0.63108779 34.51562667 1.94180779q11.79648 2.57289443 19.51516444 9.85467221c5.09724445 4.8545189 9.07795001 11.55375445 11.94211556 20.1947978 2.81562112 8.64104334 4.27197667 20.97152 4.27197554 37.0885211s-1.45635555 28.88438557-4.27197554 38.30215111c-2.86416555 9.27212999-6.5536 15.97136555-11.11684779 20.0491611q-6.65068999 6.11669333-16.89372444 8.64104335a114.66372779 114.66372779 0 0 1-25.48622223 1.99035221h-31.40873443z" p-id="1920"></path></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -1 +0,0 @@
<?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="1689491332665" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5892" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M393.2 701.7c-8.2 0-16.4-3.1-22.6-9.4-12.5-12.5-12.5-32.8 0-45.3l115.3-115.3c14-14 36.9-14 50.9 0L652.1 647c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-95.5-95.5-95.5 95.5c-6.2 6.2-14.4 9.4-22.6 9.4z" fill="" p-id="5893"></path><path d="M511.3 921.1c-17.7 0-32-14.3-32-32v-276c0-17.7 14.3-32 32-32s32 14.3 32 32v276c0 17.6-14.3 32-32 32z" fill="" p-id="5894"></path><path d="M732.7 784.9c-17.7 0-32-14.3-32-32s14.3-32 32-32c90.6 0 164.3-73.7 164.3-164.3 0-82.9-61.9-153-144-163.1l-22.7-2.8-4.7-22.4c-20.8-99.9-110.1-172.4-212.4-172.4-102.2 0-191.5 72.5-212.4 172.4l-4.7 22.4-22.7 2.8c-82.1 10.1-144 80.2-144 163.1 0 90.6 73.7 164.3 164.3 164.3 17.7 0 32 14.3 32 32s-14.3 32-32 32c-61 0-118.3-23.8-161.5-66.9-43.1-43.1-66.9-100.5-66.9-161.5 0-107.6 75.2-199.7 178.2-222.8 15.8-53.8 47.7-102.2 91.3-138.1 50.1-41.2 113.4-63.9 178.3-63.9s128.3 22.7 178.3 63.9c43.6 35.9 75.5 84.3 91.3 138.1C885.9 356.8 961 448.9 961 556.5c0 61-23.8 118.3-66.9 161.5-43.1 43.1-100.4 66.9-161.4 66.9z" fill="" p-id="5895"></path></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +0,0 @@
<?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="1689598169213" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3429" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M254.80971969 32C131.70542094 32 32 131.82654219 32 254.83663531c0 123.11775656 99.81308438 222.83214938 222.80971969 222.83214938h222.92186906V254.83663531C477.72710281 131.71439281 377.91401844 32 254.80971969 32z m514.38056062 0c-122.99214938 0-222.92186906 99.82654219-222.92186906 222.83663531v222.83214938h222.92186906C892.18691562 477.66878469 992 377.95887875 992 254.83663531 992 131.71439281 892.18691562 32 769.19028031 32zM32 769.16336469C32 892.28560719 131.81308438 992 254.80971969 992c123.10429875 0 222.80971969-99.71439281 222.80971968-222.83663531v-222.83214938H254.80971969C131.81308438 546.33121531 32 646.04112125 32 769.16336469z m737.07813094-222.83214938h-222.91738313v222.83214938c0 123.12224344 99.81308438 222.83663531 222.91738313 222.83663531 123.10878469 0 222.80971969-99.82654219 222.80971968-222.83663531 0.11214937-123.11775656-99.700935-222.83214938-222.80971968-222.83214938z" p-id="3430"></path></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

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