From bcb4eb3983998624f2c469271198c299c2d909c0 Mon Sep 17 00:00:00 2001 From: alanchen <40684202+chenliang15405@users.noreply.github.com> Date: Mon, 21 Jul 2025 12:08:39 +0800 Subject: [PATCH] feat(RAG): support knowledgeSpace custom retrieve strategy (#2842) --- .../dbgpt-app/src/dbgpt_app/knowledge/api.py | 11 +++ .../src/dbgpt_app/knowledge/service.py | 13 +++- .../src/dbgpt_app/static/web/404.html | 2 +- .../src/dbgpt_app/static/web/404/index.html | 2 +- .../construct/prompt/add.json | 0 .../construct/prompt/edit.json | 0 .../XdVCfsqb08x2KqO0pf_us/_buildManifest.js | 1 + .../_ssgManifest.js | 0 .../chunks/008713dc-21e55fe6d2975832.js | 1 + .../chunks/008713dc-ea223c6e7bc47bf6.js | 1 - .../static/chunks/1154-5374436bc6c264ea.js | 73 ------------------- ...f87e0c2bd7.js => 1278-edc9b98f2c09de56.js} | 4 +- ...4e7546.js => 175675d1-42df1a7f249e9790.js} | 2 +- .../static/chunks/1787.0ed83cd88361eb99.js | 8 ++ .../static/chunks/2640.8960666e27506a9c.js | 52 ------------- ...d997956492.js => 2913-315ad705b1306902.js} | 0 .../chunks/33a1eaa4-04202844a5e2fbdc.js | 1 - .../chunks/33a1eaa4-9a18d5bdae7c78ef.js | 1 + ...cbc660.js => 355a6ca7-8e25493d011365b3.js} | 2 +- ...abc1a231b3.js => 3768-c103701c0e085303.js} | 2 +- ...0c798fc2d4.js => 3913-14e25827516e9971.js} | 2 +- ...9e5d10f721.js => 4019.69b5de142d793bfc.js} | 2 +- .../static/chunks/4035-f1c8101dadd76def.js | 1 - .../chunks/4d857c35-0fb8bfbaea5d41f5.js | 1 - .../chunks/4d857c35-f8bf0071f22fe250.js | 1 + ...214a9c9287.js => 5000.aaa140f50aeee551.js} | 6 +- .../chunks/554c6155-97b5938bc21e889d.js | 1 + .../chunks/554c6155-cc8f8ba4718a108c.js | 1 - .../static/chunks/5558-c633b2e682d04555.js | 5 ++ .../static/chunks/5558-d22696c0a03f8006.js | 5 -- ...2c900d4cd6.js => 5653-90637fdb7cef3adb.js} | 2 +- ...ced8168bb8.js => 5789-bd14cb2041ce42aa.js} | 2 +- .../static/chunks/6277-1fea3f632fdcd4ff.js | 1 + .../static/chunks/7249-0360e5143d1c0a16.js | 1 - .../static/chunks/7249-0e14dc028129d044.js | 1 + .../static/chunks/7389-e67f25eff98de47f.js | 73 +++++++++++++++++++ .../chunks/83cd118e-4096a239f8273fef.js | 1 - .../static/chunks/8453.30ff83063b4f248e.js | 1 + ...b660fa31a4.js => 8624.060379384e33d091.js} | 2 +- ...c0846084731.js => 952-717301e098bab4be.js} | 0 .../static/chunks/9618.dfb7bdf799b27b23.js | 1 - ...eca476.js => 971df74e-f3c263af350cb1b6.js} | 2 +- .../chunks/d9005de1-4b6bd21314b59fc4.js | 1 + .../chunks/d9005de1-b2c9f7745c9220a9.js | 1 - .../chunks/f9a75a99-8b7c2d960a804903.js | 1 - .../chunks/f9a75a99-8cea48cf64d5fcda.js | 1 + ...53afa0df7e.js => _app-33e8b024c30a307f.js} | 2 +- ...243c1.js => construct-f9c701adc0a10f23.js} | 2 +- ...65d8020c0.js => agent-3606e4148128f3fc.js} | 2 +- ...771db7dc416.js => app-15d9c9bf52a54645.js} | 2 +- ...s => create-app-modal-4c12d3bf7462a2f0.js} | 0 .../construct/app/extra-16afa89704d3981a.js | 52 ------------- .../construct/app/extra-b419d81eb6fb4644.js | 8 ++ ...70a1.js => AwelLayout-e9b369e30d978f3f.js} | 2 +- .../components/NativeApp-73f5a2ad66a9a33c.js | 52 ------------- .../components/NativeApp-b34262ede7bf148d.js | 8 ++ .../components/auto-plan-2d218a9f3d3a537d.js | 8 ++ .../components/auto-plan-79ea6c304d0952b1.js | 52 ------------- .../auto-plan/DetailsCard-e181159ed4f260d4.js | 8 ++ .../auto-plan/DetailsCard-ff2ef99799f94c82.js | 52 ------------- .../PromptSelect-822bbf044fc85eb0.js | 52 ------------- .../PromptSelect-a3e0a1e97b26f491.js | 8 ++ ...js => ResourceContent-dbff1f8cc50c0505.js} | 0 ...0.js => ResourcesCard-5adc8dc91fe8f87e.js} | 0 ...7acef9.js => database-77c1f65a716e1862.js} | 2 +- ...dce1f60e.js => dbgpts-75802be168a2deb5.js} | 2 +- ...46f1cac542.js => flow-9cbec244a306e918.js} | 2 +- ...85e62987.js => canvas-0c034182a71c000c.js} | 2 +- .../construct/knowledge-846c6d4d591d6228.js | 61 ---------------- .../construct/knowledge-e6e35bb7540c7200.js | 17 +++++ .../knowledge/chunk-84708b77c7efd99f.js | 20 +++++ .../knowledge/chunk-ddca56aa0d03d1aa.js | 64 ---------------- ...265883fc.js => models-a3a9c2e8008069cf.js} | 2 +- ...390a0a27.js => prompt-52b54761f22eefec.js} | 2 +- ...d7340c40.js => [type]-227342656ddf4279.js} | 2 +- ...4539.js => evaluation-73a5a25545e7ac97.js} | 2 +- ...cad9a050f.js => index-78d869cb07a5ae47.js} | 0 ...6a37793c9.js => graph-cb09b9d105c41f3d.js} | 2 +- .../pages/mobile/chat-571d18aeb0d28e62.js | 1 + .../pages/mobile/chat-7830cb16b5070d0c.js | 1 - .../components/ChatDialog-4dd6daf534aa814b.js | 8 ++ .../components/ChatDialog-ff2a846e0cd709d3.js | 52 ------------- .../components/Content-45d4f6fc93d39daf.js | 8 ++ .../components/Content-feb3a01247fad15c.js | 52 ------------- .../components/Feedback-3c5d6710e40297a6.js | 1 + .../components/Feedback-c8ebb89feab2cc57.js | 1 - .../components/Header-23207ebef7a35361.js | 1 + .../components/Header-bd7c7988a55ea6e8.js | 1 - .../InputContainer-03aea22279fce759.js | 1 + .../InputContainer-c5fb747e4c14e8cd.js | 1 - .../ModelSelector-1f1e727e1f64017b.js | 1 - .../ModelSelector-5379f79269fc3c40.js | 1 + .../components/Resource-a1baba670afd6ffc.js | 1 - .../components/Resource-e0bb5d656d5c83cb.js | 1 + .../Thermometer-bf63c6e5d942923b.js | 1 + .../Thermometer-d8b1777045f777bd.js | 1 - .../static/chunks/webpack-0026ba7f9cd5bba9.js | 1 - .../static/chunks/webpack-8d3a6e27a44f1596.js | 1 + ...18ca294c40cfe.css => 32f689fce2a81f40.css} | 2 +- ...aad1d23646914.css => 3864b451a61e4546.css} | 2 +- ...63a08f2d107d5.css => 88659f8120a79784.css} | 2 +- ...0b79bd2662f8a.css => 8c00eb1a7814fbbd.css} | 2 +- ...78cd0c1325bdb.css => bf3ae0b868d32458.css} | 2 +- .../gv0k09BrvWkKGZ4Em_Hmf/_buildManifest.js | 1 - .../src/dbgpt_app/static/web/chat/index.html | 2 +- .../static/web/construct/agent/index.html | 2 +- .../components/create-app-modal/index.html | 2 +- .../extra/components/AwelLayout/index.html | 2 +- .../app/extra/components/NativeApp/index.html | 2 +- .../components/RecommendQuestions/index.html | 2 +- .../auto-plan/DetailsCard/index.html | 2 +- .../auto-plan/PromptSelect/index.html | 2 +- .../auto-plan/ResourceContent/index.html | 2 +- .../auto-plan/ResourceContentV2/index.html | 2 +- .../auto-plan/ResourcesCard/index.html | 2 +- .../auto-plan/ResourcesCardV2/index.html | 2 +- .../app/extra/components/auto-plan/index.html | 2 +- .../web/construct/app/extra/config/index.html | 2 +- .../static/web/construct/app/extra/index.html | 2 +- .../static/web/construct/app/index.html | 2 +- .../static/web/construct/database/index.html | 2 +- .../static/web/construct/dbgpts/index.html | 2 +- .../web/construct/flow/canvas/index.html | 2 +- .../static/web/construct/flow/index.html | 2 +- .../web/construct/flow/libro/index.html | 2 +- .../dbgpt_app/static/web/construct/index.html | 2 +- .../web/construct/knowledge/chunk/index.html | 2 +- .../static/web/construct/knowledge/index.html | 2 +- .../static/web/construct/models/index.html | 2 +- .../web/construct/prompt/add/index.html | 2 +- .../web/construct/prompt/edit/index.html | 2 +- .../static/web/construct/prompt/index.html | 2 +- .../static/web/evaluation/index.html | 2 +- .../src/dbgpt_app/static/web/index.html | 2 +- .../static/web/knowledge/graph/index.html | 2 +- .../chat/components/ChatDialog/index.html | 2 +- .../mobile/chat/components/Content/index.html | 2 +- .../chat/components/DislikeDrawer/index.html | 2 +- .../chat/components/Feedback/index.html | 2 +- .../mobile/chat/components/Header/index.html | 2 +- .../chat/components/InputContainer/index.html | 2 +- .../chat/components/ModelSelector/index.html | 2 +- .../chat/components/OptionIcon/index.html | 2 +- .../chat/components/Resource/index.html | 2 +- .../chat/components/Thermometer/index.html | 2 +- .../static/web/mobile/chat/index.html | 2 +- .../rag/retriever/knowledge_space.py | 28 ++++++- web/client/api/request.ts | 4 + web/components/knowledge/arguments-modal.tsx | 37 +++++++++- web/hooks/use-chat.ts | 11 +-- web/locales/en/common.ts | 2 + web/locales/zh/common.ts | 2 + web/types/knowledge.ts | 8 ++ 153 files changed, 373 insertions(+), 732 deletions(-) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/{gv0k09BrvWkKGZ4Em_Hmf => XdVCfsqb08x2KqO0pf_us}/construct/prompt/add.json (100%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/{gv0k09BrvWkKGZ4Em_Hmf => XdVCfsqb08x2KqO0pf_us}/construct/prompt/edit.json (100%) create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/XdVCfsqb08x2KqO0pf_us/_buildManifest.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/{gv0k09BrvWkKGZ4Em_Hmf => XdVCfsqb08x2KqO0pf_us}/_ssgManifest.js (100%) create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/008713dc-21e55fe6d2975832.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/008713dc-ea223c6e7bc47bf6.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/1154-5374436bc6c264ea.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{2516-5736bbf87e0c2bd7.js => 1278-edc9b98f2c09de56.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{175675d1-b7090d0f154e7546.js => 175675d1-42df1a7f249e9790.js} (80%) create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/1787.0ed83cd88361eb99.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/2640.8960666e27506a9c.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{2913-19ce7fd997956492.js => 2913-315ad705b1306902.js} (100%) delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/33a1eaa4-04202844a5e2fbdc.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/33a1eaa4-9a18d5bdae7c78ef.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{355a6ca7-1d76aad7c3cbc660.js => 355a6ca7-8e25493d011365b3.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{3768-deadababc1a231b3.js => 3768-c103701c0e085303.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{3913-50cdfc0c798fc2d4.js => 3913-14e25827516e9971.js} (69%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{4019.0099949e5d10f721.js => 4019.69b5de142d793bfc.js} (99%) delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/4035-f1c8101dadd76def.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/4d857c35-0fb8bfbaea5d41f5.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/4d857c35-f8bf0071f22fe250.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{5000.b4ac08214a9c9287.js => 5000.aaa140f50aeee551.js} (99%) create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/554c6155-97b5938bc21e889d.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/554c6155-cc8f8ba4718a108c.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/5558-c633b2e682d04555.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/5558-d22696c0a03f8006.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{5653-6a30e52c900d4cd6.js => 5653-90637fdb7cef3adb.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{5789-9438e4ced8168bb8.js => 5789-bd14cb2041ce42aa.js} (99%) create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/6277-1fea3f632fdcd4ff.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/7249-0360e5143d1c0a16.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/7249-0e14dc028129d044.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/7389-e67f25eff98de47f.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/83cd118e-4096a239f8273fef.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/8453.30ff83063b4f248e.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{8624.e1bf79b660fa31a4.js => 8624.060379384e33d091.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{952-cf4fcc0846084731.js => 952-717301e098bab4be.js} (100%) delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/9618.dfb7bdf799b27b23.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/{971df74e-c3b3cf72e9eca476.js => 971df74e-f3c263af350cb1b6.js} (97%) create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/d9005de1-4b6bd21314b59fc4.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/d9005de1-b2c9f7745c9220a9.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/f9a75a99-8b7c2d960a804903.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/f9a75a99-8cea48cf64d5fcda.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/{_app-b5031b53afa0df7e.js => _app-33e8b024c30a307f.js} (70%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/{construct-ff2a59e7541243c1.js => construct-f9c701adc0a10f23.js} (98%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/{agent-1972eba65d8020c0.js => agent-3606e4148128f3fc.js} (98%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/{app-76744771db7dc416.js => app-15d9c9bf52a54645.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/components/{create-app-modal-339aaef29519ae77.js => create-app-modal-4c12d3bf7462a2f0.js} (100%) delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra-16afa89704d3981a.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra-b419d81eb6fb4644.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/{AwelLayout-1acc4adbea7270a1.js => AwelLayout-e9b369e30d978f3f.js} (99%) delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/NativeApp-73f5a2ad66a9a33c.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/NativeApp-b34262ede7bf148d.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan-2d218a9f3d3a537d.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan-79ea6c304d0952b1.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan/DetailsCard-e181159ed4f260d4.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan/DetailsCard-ff2ef99799f94c82.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan/PromptSelect-822bbf044fc85eb0.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan/PromptSelect-a3e0a1e97b26f491.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan/{ResourceContent-8fd8a42175ce2ace.js => ResourceContent-dbff1f8cc50c0505.js} (100%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/app/extra/components/auto-plan/{ResourcesCard-a836ce1adfc996a0.js => ResourcesCard-5adc8dc91fe8f87e.js} (100%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/{database-90f005fbec7acef9.js => database-77c1f65a716e1862.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/{dbgpts-4e8ea129dce1f60e.js => dbgpts-75802be168a2deb5.js} (98%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/{flow-d4222946f1cac542.js => flow-9cbec244a306e918.js} (98%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/flow/{canvas-2f274b1c85e62987.js => canvas-0c034182a71c000c.js} (99%) delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/knowledge-846c6d4d591d6228.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/knowledge-e6e35bb7540c7200.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/knowledge/chunk-84708b77c7efd99f.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/knowledge/chunk-ddca56aa0d03d1aa.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/{models-52bdbb71265883fc.js => models-a3a9c2e8008069cf.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/{prompt-16303945390a0a27.js => prompt-52b54761f22eefec.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/construct/prompt/{[type]-5e34d970d7340c40.js => [type]-227342656ddf4279.js} (97%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/{evaluation-eec97fe8ccee4539.js => evaluation-73a5a25545e7ac97.js} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/{index-c9af054cad9a050f.js => index-78d869cb07a5ae47.js} (100%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/knowledge/{graph-897c09e6a37793c9.js => graph-cb09b9d105c41f3d.js} (96%) create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat-571d18aeb0d28e62.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat-7830cb16b5070d0c.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/ChatDialog-4dd6daf534aa814b.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/ChatDialog-ff2a846e0cd709d3.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Content-45d4f6fc93d39daf.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Content-feb3a01247fad15c.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Feedback-3c5d6710e40297a6.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Feedback-c8ebb89feab2cc57.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Header-23207ebef7a35361.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Header-bd7c7988a55ea6e8.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/InputContainer-03aea22279fce759.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/InputContainer-c5fb747e4c14e8cd.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/ModelSelector-1f1e727e1f64017b.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/ModelSelector-5379f79269fc3c40.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Resource-a1baba670afd6ffc.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Resource-e0bb5d656d5c83cb.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Thermometer-bf63c6e5d942923b.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/pages/mobile/chat/components/Thermometer-d8b1777045f777bd.js delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/webpack-0026ba7f9cd5bba9.js create mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/webpack-8d3a6e27a44f1596.js rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/css/{41b18ca294c40cfe.css => 32f689fce2a81f40.css} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/css/{acdaad1d23646914.css => 3864b451a61e4546.css} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/css/{5ae63a08f2d107d5.css => 88659f8120a79784.css} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/css/{f200b79bd2662f8a.css => 8c00eb1a7814fbbd.css} (99%) rename packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/css/{94378cd0c1325bdb.css => bf3ae0b868d32458.css} (99%) delete mode 100644 packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/gv0k09BrvWkKGZ4Em_Hmf/_buildManifest.js diff --git a/packages/dbgpt-app/src/dbgpt_app/knowledge/api.py b/packages/dbgpt-app/src/dbgpt_app/knowledge/api.py index 3ccd69ad5..005283c60 100644 --- a/packages/dbgpt-app/src/dbgpt_app/knowledge/api.py +++ b/packages/dbgpt-app/src/dbgpt_app/knowledge/api.py @@ -126,6 +126,17 @@ def space_delete(request: KnowledgeSpaceRequest): return Result.failed(code="E000X", msg=f"space delete error {e}") +@router.post("/knowledge/retrieve_strategy_list") +async def retrieve_strategy_list(): + try: + res = await blocking_func_to_async( + get_executor(), knowledge_space_service.get_retrieve_strategy_list + ) + return Result.succ(res) + except Exception as e: + return Result.failed(code="E000X", msg=f"get retrieve strategy list error {e}") + + @router.post("/knowledge/{space_id}/arguments") async def arguments(space_id: str): logger.info(f"/knowledge/{space_id}/arguments params: {space_id}") diff --git a/packages/dbgpt-app/src/dbgpt_app/knowledge/service.py b/packages/dbgpt-app/src/dbgpt_app/knowledge/service.py index 2befe7f65..3f8e0dc0d 100644 --- a/packages/dbgpt-app/src/dbgpt_app/knowledge/service.py +++ b/packages/dbgpt-app/src/dbgpt_app/knowledge/service.py @@ -3,7 +3,7 @@ import logging import re import timeit from datetime import datetime -from typing import List +from typing import Dict, List from dbgpt._private.config import Config from dbgpt.component import ComponentType @@ -641,3 +641,14 @@ class KnowledgeService: } ) return res + + def get_retrieve_strategy_list(self) -> List[Dict]: + """get retrieve model list + retrieve strategy: dbgpt.rag.retriever.base.RetrieverStrategy + """ + return [ + {"name": "SEMANTIC", "name_cn": "语义检索", "value": "SEMANTIC"}, + {"name": "KEYWORD", "name_cn": "全文检索", "value": "KEYWORD"}, + {"name": "Tree", "name_cn": "树形检索", "value": "Tree"}, + {"name": "HYBRID", "name_cn": "混合检索", "value": "HYBRID"}, + ] diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/404.html b/packages/dbgpt-app/src/dbgpt_app/static/web/404.html index 5e1bd64cc..91a75e01f 100644 --- a/packages/dbgpt-app/src/dbgpt_app/static/web/404.html +++ b/packages/dbgpt-app/src/dbgpt_app/static/web/404.html @@ -1 +1 @@ -
d&&(d=w),k d&&(d=w),k >>1;c[g]=1?Math.ceil(k):1,C=l||("auto"===(n=nz(a,"width"))?a.offsetWidth:parseFloat(n))||a.width/k,w=u||("auto"===(r=nz(a,"height"))?a.offsetHeight:parseFloat(r))||a.height/k),s&&(rL.offscreenCanvas=s),i.devicePixelRatio=k,i.requestAnimationFrame=null!=v?v:n1.bind(rL.globalThis),i.cancelAnimationFrame=null!=y?y:n2.bind(rL.globalThis),i.supportsTouchEvents=null!=E?E:"ontouchstart"in rL.globalThis,i.supportsPointerEvents=null!=m?m:!!rL.globalThis.PointerEvent,i.isTouchEvent=null!=S?S:function(t){return i.supportsTouchEvents&&t instanceof rL.globalThis.TouchEvent},i.isMouseEvent=null!=N?N:function(t){return!rL.globalThis.MouseEvent||t instanceof rL.globalThis.MouseEvent&&(!i.supportsPointerEvents||!(t instanceof rL.globalThis.PointerEvent))},i.initRenderingContext({container:o,canvas:a,width:C,height:w,renderer:h,offscreenCanvas:s,devicePixelRatio:k,cursor:d||"default",background:p||"transparent",createImage:g,document:f,supportsCSSTransform:x,useNativeClickEvent:T,alwaysTriggerPointerEventOnCanvas:P}),i.initDefaultCamera(C,w,h.clipSpaceNearZ),i.initRenderer(h,!0),i}(0,W.ZT)(e,t),e.prototype.initRenderingContext=function(t){this.context.config=t,this.context.renderingContext={root:this.document.documentElement,renderListCurrentFrame:[],unculledEntities:[],renderReasons:new Set,force:!1,dirty:!1}},e.prototype.initDefaultCamera=function(t,e,n){var r=this,i=new rL.CameraContribution;i.clipSpaceNearZ=n,i.setType(A.EXPLORING,O.DEFAULT).setPosition(t/2,e/2,500).setFocalPoint(t/2,e/2,0).setOrthographic(-(t/2),t/2,e/2,-(e/2),.1,1e3),i.canvas=this,i.eventEmitter.on(tK.UPDATED,function(){r.context.renderingContext.renderReasons.add(z.CAMERA_CHANGED),rL.enableSizeAttenuation&&r.getConfig().renderer.getConfig().enableSizeAttenuation&&r.updateSizeAttenuation()}),this.context.camera=i},e.prototype.updateSizeAttenuation=function(){var t=this.getCamera().getZoom();this.document.documentElement.forEach(function(e){rL.styleValueRegistry.updateSizeAttenuation(e,t)})},e.prototype.getConfig=function(){return this.context.config},e.prototype.getRoot=function(){return this.document.documentElement},e.prototype.getCamera=function(){return this.context.camera},e.prototype.getContextService=function(){return this.context.contextService},e.prototype.getEventService=function(){return this.context.eventService},e.prototype.getRenderingService=function(){return this.context.renderingService},e.prototype.getRenderingContext=function(){return this.context.renderingContext},e.prototype.getStats=function(){return this.getRenderingService().getStats()},Object.defineProperty(e.prototype,"ready",{get:function(){var t=this;return!this.readyPromise&&(this.readyPromise=new Promise(function(e){t.resolveReadyPromise=function(){e(t)}}),this.inited&&this.resolveReadyPromise()),this.readyPromise},enumerable:!1,configurable:!0}),e.prototype.destroy=function(t,e){void 0===t&&(t=!0),void 0===e&&(e=!1),e||this.dispatchEvent(new rg(j.BEFORE_DESTROY)),this.frameId&&(this.getConfig().cancelAnimationFrame||cancelAnimationFrame)(this.frameId);var n=this.getRoot();this.unmountChildren(n),t&&(this.document.destroy(),this.getEventService().destroy()),this.getRenderingService().destroy(),this.getContextService().destroy(),t&&this.context.rBushRoot&&(this.context.rBushRoot.clear(),this.context.rBushRoot=null,this.context.renderingContext.root=null),e||this.dispatchEvent(new rg(j.AFTER_DESTROY))},e.prototype.changeSize=function(t,e){this.resize(t,e)},e.prototype.resize=function(t,e){var n=this.context.config;n.width=t,n.height=e,this.getContextService().resize(t,e);var r=this.context.camera,i=r.getProjectionMode();r.setPosition(t/2,e/2,500).setFocalPoint(t/2,e/2,0),i===I.ORTHOGRAPHIC?r.setOrthographic(-(t/2),t/2,e/2,-(e/2),r.getNear(),r.getFar()):r.setAspect(t/e),this.dispatchEvent(new rg(j.RESIZE,{width:t,height:e}))},e.prototype.appendChild=function(t,e){return this.document.documentElement.appendChild(t,e)},e.prototype.insertBefore=function(t,e){return this.document.documentElement.insertBefore(t,e)},e.prototype.removeChild=function(t){return this.document.documentElement.removeChild(t)},e.prototype.removeChildren=function(){this.document.documentElement.removeChildren()},e.prototype.destroyChildren=function(){this.document.documentElement.destroyChildren()},e.prototype.render=function(t){var e=this;this.dispatchEvent(is),this.getRenderingService().render(this.getConfig(),t,function(){e.dispatchEvent(il)}),this.dispatchEvent(iu)},e.prototype.run=function(){var t=this,e=function(n,r){t.render(r),t.frameId=t.requestAnimationFrame(e)};e()},e.prototype.initRenderer=function(t,e){var n=this;if(void 0===e&&(e=!1),!t)throw Error("Renderer is required.");this.inited=!1,this.readyPromise=void 0,this.context.rBushRoot=new tN,this.context.renderingPlugins=[],this.context.renderingPlugins.push(new it,new ii,new r7([new ir])),this.loadRendererContainerModule(t),this.context.contextService=new this.context.ContextService((0,W.pi)((0,W.pi)({},rL),this.context)),this.context.renderingService=new rT(rL,this.context),this.context.eventService=new rx(rL,this.context),this.context.eventService.init(),this.context.contextService.init?(this.context.contextService.init(),this.initRenderingService(t,e,!0)):this.context.contextService.initAsync().then(function(){n.initRenderingService(t,e)})},e.prototype.initRenderingService=function(t,e,n){var r=this;void 0===e&&(e=!1),void 0===n&&(n=!1),this.context.renderingService.init(function(){r.inited=!0,e?(n?r.requestAnimationFrame(function(){r.dispatchEvent(new rg(j.READY))}):r.dispatchEvent(new rg(j.READY)),r.readyPromise&&r.resolveReadyPromise()):r.dispatchEvent(new rg(j.RENDERER_CHANGED)),e||r.getRoot().forEach(function(t){var e=t.renderable;e&&(e.renderBoundsDirty=!0,e.boundsDirty=!0,e.dirty=!0)}),r.mountChildren(r.getRoot()),t.getConfig().enableAutoRendering&&r.run()})},e.prototype.loadRendererContainerModule=function(t){var e=this;t.getPlugins().forEach(function(t){t.context=e.context,t.init(rL)})},e.prototype.setRenderer=function(t){var e=this.getConfig();if(e.renderer!==t){var n=e.renderer;e.renderer=t,this.destroy(!1,!0),(0,W.ev)([],(0,W.CR)(null==n?void 0:n.getPlugins()),!1).reverse().forEach(function(t){t.destroy(rL)}),this.initRenderer(t)}},e.prototype.setCursor=function(t){this.getConfig().cursor=t,this.getContextService().applyCursorStyle(t)},e.prototype.unmountChildren=function(t){var e=this;t.childNodes.forEach(function(t){e.unmountChildren(t)}),this.inited&&(t.isMutationObserved?t.dispatchEvent(ia):(ia.target=t,this.dispatchEvent(ia,!0)),t!==this.document.documentElement&&(t.ownerDocument=null),t.isConnected=!1),t.isCustomElement&&t.disconnectedCallback&&t.disconnectedCallback()},e.prototype.mountChildren=function(t){var e=this;this.inited?t.isConnected||(t.ownerDocument=this.document,t.isConnected=!0,t.isMutationObserved?t.dispatchEvent(io):(io.target=t,this.dispatchEvent(io,!0))):console.warn("[g]: You are trying to call `canvas.appendChild` before canvas' initialization finished. You can either await `canvas.ready` or listen to `CanvasEvent.READY` manually.","appended child: ",t.nodeName),t.childNodes.forEach(function(t){e.mountChildren(t)}),t.isCustomElement&&t.connectedCallback&&t.connectedCallback()},e.prototype.client2Viewport=function(t){return this.getEventService().client2Viewport(t)},e.prototype.viewport2Client=function(t){return this.getEventService().viewport2Client(t)},e.prototype.viewport2Canvas=function(t){return this.getEventService().viewport2Canvas(t)},e.prototype.canvas2Viewport=function(t){return this.getEventService().canvas2Viewport(t)},e.prototype.getPointByClient=function(t,e){return this.client2Viewport({x:t,y:e})},e.prototype.getClientByPoint=function(t,e){return this.viewport2Client({x:t,y:e})}}(rm)}}]);
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/008713dc-ea223c6e7bc47bf6.js b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/008713dc-ea223c6e7bc47bf6.js
deleted file mode 100644
index 32d31b60a..000000000
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/008713dc-ea223c6e7bc47bf6.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2837],{25601:function(t,e,n){n.d(e,{$6:function(){return j},Aw:function(){return rg},Dk:function(){return X},F6:function(){return tC},GL:function(){return U},NB:function(){return rE},R:function(){return eC},bn:function(){return k},mN:function(){return tY}});var r,i,o,a,s,l,u,c,h,p,d,f,v,y,g,m,E,x,b,T,P,S,N,C,w,k,M,R,A,O,I,L,D,G,B,F,_,U,V,Z,Y,z,X,j,W=n(97582),H=n(14457),q=n(77160),K=n(85975),J=n(35600),$=n(98333),Q=n(32945),tt=n(31437),te=n(25897),tn=n(95147),tr=n(76714),ti=n(81957),to=n(69877),ta=n(71523),ts=n(13882),tl=n(80450),tu=n(8614),tc=n(4848),th=n(75839),tp=n(99872),td=n(92455),tf=n(65850),tv=n(28659),ty=n(83555),tg=n(71154),tm=n(5199),tE=n(90134),tx=n(4637),tb=n(84329),tT=n(16372),tP=n(11702),tS=("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self&&self,{exports:{}});tS.exports=function(){function t(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function e(t,e){return t=1?Math.ceil(k):1,C=l||("auto"===(n=nz(a,"width"))?a.offsetWidth:parseFloat(n))||a.width/k,w=u||("auto"===(r=nz(a,"height"))?a.offsetHeight:parseFloat(r))||a.height/k),s&&(rL.offscreenCanvas=s),i.devicePixelRatio=k,i.requestAnimationFrame=null!=v?v:n1.bind(rL.globalThis),i.cancelAnimationFrame=null!=y?y:n2.bind(rL.globalThis),i.supportsTouchEvents=null!=E?E:"ontouchstart"in rL.globalThis,i.supportsPointerEvents=null!=m?m:!!rL.globalThis.PointerEvent,i.isTouchEvent=null!=S?S:function(t){return i.supportsTouchEvents&&t instanceof rL.globalThis.TouchEvent},i.isMouseEvent=null!=N?N:function(t){return!rL.globalThis.MouseEvent||t instanceof rL.globalThis.MouseEvent&&(!i.supportsPointerEvents||!(t instanceof rL.globalThis.PointerEvent))},i.initRenderingContext({container:o,canvas:a,width:C,height:w,renderer:h,offscreenCanvas:s,devicePixelRatio:k,cursor:d||"default",background:p||"transparent",createImage:g,document:f,supportsCSSTransform:x,useNativeClickEvent:T,alwaysTriggerPointerEventOnCanvas:P}),i.initDefaultCamera(C,w,h.clipSpaceNearZ),i.initRenderer(h,!0),i}(0,W.ZT)(e,t),e.prototype.initRenderingContext=function(t){this.context.config=t,this.context.renderingContext={root:this.document.documentElement,renderListCurrentFrame:[],unculledEntities:[],renderReasons:new Set,force:!1,dirty:!1}},e.prototype.initDefaultCamera=function(t,e,n){var r=this,i=new rL.CameraContribution;i.clipSpaceNearZ=n,i.setType(A.EXPLORING,O.DEFAULT).setPosition(t/2,e/2,500).setFocalPoint(t/2,e/2,0).setOrthographic(-(t/2),t/2,e/2,-(e/2),.1,1e3),i.canvas=this,i.eventEmitter.on(tK.UPDATED,function(){r.context.renderingContext.renderReasons.add(z.CAMERA_CHANGED),rL.enableSizeAttenuation&&r.getConfig().renderer.getConfig().enableSizeAttenuation&&r.updateSizeAttenuation()}),this.context.camera=i},e.prototype.updateSizeAttenuation=function(){var t=this.getCamera().getZoom();this.document.documentElement.forEach(function(e){rL.styleValueRegistry.updateSizeAttenuation(e,t)})},e.prototype.getConfig=function(){return this.context.config},e.prototype.getRoot=function(){return this.document.documentElement},e.prototype.getCamera=function(){return this.context.camera},e.prototype.getContextService=function(){return this.context.contextService},e.prototype.getEventService=function(){return this.context.eventService},e.prototype.getRenderingService=function(){return this.context.renderingService},e.prototype.getRenderingContext=function(){return this.context.renderingContext},e.prototype.getStats=function(){return this.getRenderingService().getStats()},Object.defineProperty(e.prototype,"ready",{get:function(){var t=this;return!this.readyPromise&&(this.readyPromise=new Promise(function(e){t.resolveReadyPromise=function(){e(t)}}),this.inited&&this.resolveReadyPromise()),this.readyPromise},enumerable:!1,configurable:!0}),e.prototype.destroy=function(t,e){void 0===t&&(t=!0),void 0===e&&(e=!1),e||this.dispatchEvent(new rg(j.BEFORE_DESTROY)),this.frameId&&(this.getConfig().cancelAnimationFrame||cancelAnimationFrame)(this.frameId);var n=this.getRoot();this.unmountChildren(n),t&&(this.document.destroy(),this.getEventService().destroy()),this.getRenderingService().destroy(),this.getContextService().destroy(),t&&this.context.rBushRoot&&(this.context.rBushRoot.clear(),this.context.rBushRoot=null,this.context.renderingContext.root=null),e||this.dispatchEvent(new rg(j.AFTER_DESTROY))},e.prototype.changeSize=function(t,e){this.resize(t,e)},e.prototype.resize=function(t,e){var n=this.context.config;n.width=t,n.height=e,this.getContextService().resize(t,e);var r=this.context.camera,i=r.getProjectionMode();r.setPosition(t/2,e/2,500).setFocalPoint(t/2,e/2,0),i===I.ORTHOGRAPHIC?r.setOrthographic(-(t/2),t/2,e/2,-(e/2),r.getNear(),r.getFar()):r.setAspect(t/e),this.dispatchEvent(new rg(j.RESIZE,{width:t,height:e}))},e.prototype.appendChild=function(t,e){return this.document.documentElement.appendChild(t,e)},e.prototype.insertBefore=function(t,e){return this.document.documentElement.insertBefore(t,e)},e.prototype.removeChild=function(t){return this.document.documentElement.removeChild(t)},e.prototype.removeChildren=function(){this.document.documentElement.removeChildren()},e.prototype.destroyChildren=function(){this.document.documentElement.destroyChildren()},e.prototype.render=function(t){var e=this;this.dispatchEvent(is),this.getRenderingService().render(this.getConfig(),t,function(){e.dispatchEvent(il)}),this.dispatchEvent(iu)},e.prototype.run=function(){var t=this,e=function(n,r){t.render(r),t.frameId=t.requestAnimationFrame(e)};e()},e.prototype.initRenderer=function(t,e){var n=this;if(void 0===e&&(e=!1),!t)throw Error("Renderer is required.");this.inited=!1,this.readyPromise=void 0,this.context.rBushRoot=new tN,this.context.renderingPlugins=[],this.context.renderingPlugins.push(new it,new ii,new r7([new ir])),this.loadRendererContainerModule(t),this.context.contextService=new this.context.ContextService((0,W.pi)((0,W.pi)({},rL),this.context)),this.context.renderingService=new rT(rL,this.context),this.context.eventService=new rx(rL,this.context),this.context.eventService.init(),this.context.contextService.init?(this.context.contextService.init(),this.initRenderingService(t,e,!0)):this.context.contextService.initAsync().then(function(){n.initRenderingService(t,e)})},e.prototype.initRenderingService=function(t,e,n){var r=this;void 0===e&&(e=!1),void 0===n&&(n=!1),this.context.renderingService.init(function(){r.inited=!0,e?(n?r.requestAnimationFrame(function(){r.dispatchEvent(new rg(j.READY))}):r.dispatchEvent(new rg(j.READY)),r.readyPromise&&r.resolveReadyPromise()):r.dispatchEvent(new rg(j.RENDERER_CHANGED)),e||r.getRoot().forEach(function(t){var e=t.renderable;e&&(e.renderBoundsDirty=!0,e.boundsDirty=!0,e.dirty=!0)}),r.mountChildren(r.getRoot()),t.getConfig().enableAutoRendering&&r.run()})},e.prototype.loadRendererContainerModule=function(t){var e=this;t.getPlugins().forEach(function(t){t.context=e.context,t.init(rL)})},e.prototype.setRenderer=function(t){var e=this.getConfig();if(e.renderer!==t){var n=e.renderer;e.renderer=t,this.destroy(!1,!0),(0,W.ev)([],(0,W.CR)(null==n?void 0:n.getPlugins()),!1).reverse().forEach(function(t){t.destroy(rL)}),this.initRenderer(t)}},e.prototype.setCursor=function(t){this.getConfig().cursor=t,this.getContextService().applyCursorStyle(t)},e.prototype.unmountChildren=function(t){var e=this;t.childNodes.forEach(function(t){e.unmountChildren(t)}),this.inited&&(t.isMutationObserved?t.dispatchEvent(ia):(ia.target=t,this.dispatchEvent(ia,!0)),t!==this.document.documentElement&&(t.ownerDocument=null),t.isConnected=!1),t.isCustomElement&&t.disconnectedCallback&&t.disconnectedCallback()},e.prototype.mountChildren=function(t){var e=this;this.inited?t.isConnected||(t.ownerDocument=this.document,t.isConnected=!0,t.isMutationObserved?t.dispatchEvent(io):(io.target=t,this.dispatchEvent(io,!0))):console.warn("[g]: You are trying to call `canvas.appendChild` before canvas' initialization finished. You can either await `canvas.ready` or listen to `CanvasEvent.READY` manually.","appended child: ",t.nodeName),t.childNodes.forEach(function(t){e.mountChildren(t)}),t.isCustomElement&&t.connectedCallback&&t.connectedCallback()},e.prototype.client2Viewport=function(t){return this.getEventService().client2Viewport(t)},e.prototype.viewport2Client=function(t){return this.getEventService().viewport2Client(t)},e.prototype.viewport2Canvas=function(t){return this.getEventService().viewport2Canvas(t)},e.prototype.canvas2Viewport=function(t){return this.getEventService().canvas2Viewport(t)},e.prototype.getPointByClient=function(t,e){return this.client2Viewport({x:t,y:e})},e.prototype.getClientByPoint=function(t,e){return this.viewport2Client({x:t,y:e})}}(rm)}}]);
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/1154-5374436bc6c264ea.js b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/1154-5374436bc6c264ea.js
deleted file mode 100644
index a3f4bb3d6..000000000
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/1154-5374436bc6c264ea.js
+++ /dev/null
@@ -1,73 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1154],{29158:function(t,e,n){"use strict";n.d(e,{Z:function(){return l}});var r=n(87462),i=n(67294),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"}}]},name:"link",theme:"outlined"},o=n(13401),l=i.forwardRef(function(t,e){return i.createElement(o.Z,(0,r.Z)({},t,{ref:e,icon:a}))})},64352:function(t,e,n){"use strict";n.d(e,{w:function(){return ev}});var r=n(97582),i={line_chart:{id:"line_chart",name:"Line Chart",alias:["Lines"],family:["LineCharts"],def:"A line chart uses lines with segments to show changes in data in a ordinal dimension.",purpose:["Comparison","Trend","Anomaly"],coord:["Cartesian2D"],category:["Statistic"],shape:["Lines"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Time","Ordinal"]},{minQty:0,maxQty:1,fieldConditions:["Nominal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Position","Direction"],recRate:"Recommended"},step_line_chart:{id:"step_line_chart",name:"Step Line Chart",alias:["Step Lines"],family:["LineCharts"],def:"A step line chart is a line chart in which points of each line are connected by horizontal and vertical line segments, looking like steps of a staircase.",purpose:["Comparison","Trend"],coord:["Cartesian2D"],category:["Statistic"],shape:["Lines"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Time","Ordinal"]},{minQty:0,maxQty:1,fieldConditions:["Nominal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Position","Direction"],recRate:"Recommended"},area_chart:{id:"area_chart",name:"Area Chart",alias:[],family:["AreaCharts"],def:"An area chart uses series of line segments with overlapped areas to show the change in data in a ordinal dimension.",purpose:["Comparison","Trend","Anomaly"],coord:["Cartesian2D"],category:["Statistic"],shape:["Area"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Time","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]},{minQty:0,maxQty:1,fieldConditions:["Nominal"]}],channel:["Color","Position"],recRate:"Recommended"},stacked_area_chart:{id:"stacked_area_chart",name:"Stacked Area Chart",alias:[],family:["AreaCharts"],def:"A stacked area chart uses layered line segments with different styles of padding regions to display how multiple sets of data change in the same ordinal dimension, and the endpoint heights of the segments on the same dimension tick are accumulated by value.",purpose:["Composition","Trend"],coord:["Cartesian2D"],category:["Statistic"],shape:["Area"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Time","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]},{minQty:1,maxQty:1,fieldConditions:["Nominal"]}],channel:["Color","Length"],recRate:"Recommended"},percent_stacked_area_chart:{id:"percent_stacked_area_chart",name:"Percent Stacked Area Chart",alias:["Percent Stacked Area","% Stacked Area","100% Stacked Area"],family:["AreaCharts"],def:"A percent stacked area chart is an extented stacked area chart in which the height of the endpoints of the line segment on the same dimension tick is the accumulated proportion of the ratio, which is 100% of the total.",purpose:["Comparison","Composition","Proportion","Trend"],coord:["Cartesian2D"],category:["Statistic"],shape:["Area"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Time","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]},{minQty:1,maxQty:1,fieldConditions:["Nominal"]}],channel:["Color","Length"],recRate:"Recommended"},column_chart:{id:"column_chart",name:"Column Chart",alias:["Columns"],family:["ColumnCharts"],def:"A column chart uses series of columns to display the value of the dimension. The horizontal axis shows the classification dimension and the vertical axis shows the corresponding value.",purpose:["Comparison","Distribution","Rank"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:1,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Position","Color"],recRate:"Recommended"},grouped_column_chart:{id:"grouped_column_chart",name:"Grouped Column Chart",alias:["Grouped Column"],family:["ColumnCharts"],def:"A grouped column chart uses columns of different colors to form a group to display the values of dimensions. The horizontal axis indicates the grouping of categories, the color indicates the categories, and the vertical axis shows the corresponding value.",purpose:["Comparison","Distribution","Rank"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Position"],recRate:"Recommended"},stacked_column_chart:{id:"stacked_column_chart",name:"Stacked Column Chart",alias:["Stacked Column"],family:["ColumnCharts"],def:"A stacked column chart uses stacked bars of different colors to display the values for each dimension. The horizontal axis indicates the first classification dimension, the color indicates the second classification dimension, and the vertical axis shows the corresponding value.",purpose:["Comparison","Composition","Distribution","Rank"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Length","Position"],recRate:"Recommended"},percent_stacked_column_chart:{id:"percent_stacked_column_chart",name:"Percent Stacked Column Chart",alias:["Percent Stacked Column","% Stacked Column","100% Stacked Column"],family:["ColumnCharts"],def:"A percent stacked column chart uses stacked bars of different colors to display the values for each dimension. The horizontal axis indicates the first classification dimension, the color indicates the second classification dimension, and the vertical axis shows the percentage of the corresponding classification.",purpose:["Comparison","Composition","Distribution","Proportion"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Length"],recRate:"Recommended"},range_column_chart:{id:"range_column_chart",name:"Range Column Chart",alias:[],family:["ColumnCharts"],def:"A column chart that does not have to start from zero axis.",purpose:["Comparison"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Interval","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Nominal"]}],channel:["Length"],recRate:"Recommended"},waterfall_chart:{id:"waterfall_chart",name:"Waterfall Chart",alias:["Flying Bricks Chart","Mario Chart","Bridge Chart","Cascade Chart"],family:["ColumnCharts"],def:"A waterfall chart is used to portray how an initial value is affected by a series of intermediate positive or negative values",purpose:["Comparison","Trend"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Ordinal","Time","Nominal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Length","Position"],recRate:"Recommended"},histogram:{id:"histogram",name:"Histogram",alias:[],family:["ColumnCharts"],def:"A histogram is an accurate representation of the distribution of numerical data.",purpose:["Distribution"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Position"],recRate:"Recommended"},bar_chart:{id:"bar_chart",name:"Bar Chart",alias:["Bars"],family:["BarCharts"],def:"A bar chart uses series of bars to display the value of the dimension. The vertical axis shows the classification dimension and the horizontal axis shows the corresponding value.",purpose:["Comparison","Distribution","Rank"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:1,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Position","Color"],recRate:"Recommended"},stacked_bar_chart:{id:"stacked_bar_chart",name:"Stacked Bar Chart",alias:["Stacked Bar"],family:["BarCharts"],def:"A stacked bar chart uses stacked bars of different colors to display the values for each dimension. The vertical axis indicates the first classification dimension, the color indicates the second classification dimension, and the horizontal axis shows the corresponding value.",purpose:["Comparison","Composition","Distribution","Rank"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Length","Position"],recRate:"Recommended"},percent_stacked_bar_chart:{id:"percent_stacked_bar_chart",name:"Percent Stacked Bar Chart",alias:["Percent Stacked Bar","% Stacked Bar","100% Stacked Bar"],family:["BarCharts"],def:"A percent stacked column chart uses stacked bars of different colors to display the values for each dimension. The vertical axis indicates the first classification dimension, the color indicates the second classification dimension, and the horizontal axis shows the percentage of the corresponding classification.",purpose:["Comparison","Composition","Distribution","Proportion"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Length"],recRate:"Recommended"},grouped_bar_chart:{id:"grouped_bar_chart",name:"Grouped Bar Chart",alias:["Grouped Bar"],family:["BarCharts"],def:"A grouped bar chart uses bars of different colors to form a group to display the values of the dimensions. The vertical axis indicates the grouping of categories, the color indicates the categories, and the horizontal axis shows the corresponding value.",purpose:["Comparison","Distribution","Rank"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Position"],recRate:"Recommended"},range_bar_chart:{id:"range_bar_chart",name:"Range Bar Chart",alias:[],family:["BarCharts"],def:"A bar chart that does not have to start from zero axis.",purpose:["Comparison"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Interval"]},{minQty:1,maxQty:1,fieldConditions:["Nominal","Ordinal"]}],channel:["Length"],recRate:"Recommended"},radial_bar_chart:{id:"radial_bar_chart",name:"Radial Bar Chart",alias:["Radial Column Chart"],family:["BarCharts"],def:"A bar chart that is plotted in the polar coordinate system. The axis along radius shows the classification dimension and the angle shows the corresponding value.",purpose:["Comparison","Distribution","Rank"],coord:["Polar"],category:["Statistic"],shape:["Round"],dataPres:[{minQty:1,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Angle","Color"],recRate:"Recommended"},bullet_chart:{id:"bullet_chart",name:"Bullet Chart",alias:[],family:["BarCharts"],def:"A bullet graph is a variation of a bar graph developed by Stephen Few. Seemingly inspired by the traditional thermometer charts and progress bars found in many dashboards, the bullet graph serves as a replacement for dashboard gauges and meters.",purpose:["Proportion"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:3,maxQty:3,fieldConditions:["Interval"]},{minQty:1,maxQty:1,fieldConditions:["Nominal","Ordinal"]}],channel:["Position","Color"],recRate:"Recommended"},pie_chart:{id:"pie_chart",name:"Pie Chart",alias:["Circle Chart","Pie"],family:["PieCharts"],def:"A pie chart is a chart that the classification and proportion of data are represented by the color and arc length (angle, area) of the sector.",purpose:["Comparison","Composition","Proportion"],coord:["Polar"],category:["Statistic"],shape:["Round"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Angle","Area","Color"],recRate:"Use with Caution"},donut_chart:{id:"donut_chart",name:"Donut Chart",alias:["Donut","Doughnut","Doughnut Chart","Ring Chart"],family:["PieCharts"],def:"A donut chart is a variation on a Pie chart except it has a round hole in the center which makes it look like a donut.",purpose:["Comparison","Composition","Proportion"],coord:["Polar"],category:["Statistic"],shape:["Round"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["ArcLength"],recRate:"Recommended"},nested_pie_chart:{id:"nested_pie_chart",name:"Nested Pie Chart",alias:["Nested Circle Chart","Nested Pie","Nested Donut Chart"],family:["PieCharts"],def:"A nested pie chart is a chart that contains several donut charts, where all the donut charts share the same center in position.",purpose:["Comparison","Composition","Proportion"],coord:["Polar"],category:["Statistic"],shape:["Round"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:"*",fieldConditions:["Interval"]}],channel:["Angle","Area","Color","Position"],recRate:"Use with Caution"},rose_chart:{id:"rose_chart",name:"Rose Chart",alias:["Nightingale Chart","Polar Area Chart","Coxcomb Chart"],family:["PieCharts"],def:"Nightingale Rose Chart is a peculiar combination of the Radar Chart and Stacked Column Chart types of data visualization.",purpose:["Comparison","Composition","Proportion"],coord:["Polar"],category:["Statistic"],shape:["Round"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Angle","Color","Length"],recRate:"Use with Caution"},scatter_plot:{id:"scatter_plot",name:"Scatter Plot",alias:["Scatter Chart","Scatterplot"],family:["ScatterCharts"],def:"A scatter plot is a type of plot or mathematical diagram using Cartesian coordinates to display values for typically two variables for series of data.",purpose:["Comparison","Distribution","Anomaly"],coord:["Cartesian2D"],category:["Statistic"],shape:["Scatter"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Interval"]},{minQty:0,maxQty:1,fieldConditions:["Nominal"]}],channel:["Color","Position"],recRate:"Recommended"},bubble_chart:{id:"bubble_chart",name:"Bubble Chart",alias:["Bubble Chart"],family:["ScatterCharts"],def:"A bubble chart is a type of chart that displays four dimensions of data with x, y positions, circle size and circle color.",purpose:["Comparison","Distribution"],coord:["Cartesian2D"],category:["Statistic"],shape:["Scatter"],dataPres:[{minQty:3,maxQty:3,fieldConditions:["Interval"]},{minQty:0,maxQty:1,fieldConditions:["Nominal"]}],channel:["Color","Position","Size"],recRate:"Recommended"},non_ribbon_chord_diagram:{id:"non_ribbon_chord_diagram",name:"Non-Ribbon Chord Diagram",alias:[],family:["GeneralGraph"],def:"A stripped-down version of a Chord Diagram, with only the connection lines showing. This provides more emphasis on the connections within the data.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},arc_diagram:{id:"arc_diagram",name:"Arc Diagram",alias:[],family:["GeneralGraph"],def:"A graph where the edges are represented as arcs.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},chord_diagram:{id:"chord_diagram",name:"Chord Diagram",alias:[],family:["GeneralGraph"],def:"A graphical method of displaying the inter-relationships between data in a matrix. The data are arranged radially around a circle with the relationships between the data points typically drawn as arcs connecting the data.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},treemap:{id:"treemap",name:"Treemap",alias:[],family:["TreeGraph"],def:"A visual representation of a data tree with nodes. Each node is displayed as a rectangle, sized and colored according to values that you assign.",purpose:["Composition","Comparison","Hierarchy"],coord:["Cartesian2D"],category:["Statistic"],shape:["Square"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Area"],recRate:"Recommended"},sankey_diagram:{id:"sankey_diagram",name:"Sankey Diagram",alias:[],family:["GeneralGraph"],def:"A graph shows the flows with weights between objects.",purpose:["Flow","Trend","Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},funnel_chart:{id:"funnel_chart",name:"Funnel Chart",alias:[],family:["FunnelCharts"],def:"A funnel chart is often used to represent stages in a sales process and show the amount of potential revenue for each stage.",purpose:["Trend"],coord:["SymmetricCartesian"],category:["Statistic"],shape:["Symmetric"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Length"],recRate:"Recommended"},mirror_funnel_chart:{id:"mirror_funnel_chart",name:"Mirror Funnel Chart",alias:["Contrast Funnel Chart"],family:["FunnelCharts"],def:"A mirror funnel chart is a funnel chart divided into two series by a central axis.",purpose:["Comparison","Trend"],coord:["SymmetricCartesian"],category:["Statistic"],shape:["Symmetric"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]},{minQty:1,maxQty:1,fieldConditions:["Nominal"]}],channel:["Color","Length","Direction"],recRate:"Recommended"},box_plot:{id:"box_plot",name:"Box Plot",alias:["Box and Whisker Plot","boxplot"],family:["BarCharts"],def:"A box plot is often used to graphically depict groups of numerical data through their quartiles. Box plots may also have lines extending from the boxes indicating variability outside the upper and lower quartiles. Outliers may be plotted as individual points.",purpose:["Distribution","Anomaly"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Position"],recRate:"Recommended"},heatmap:{id:"heatmap",name:"Heatmap",alias:[],family:["HeatmapCharts"],def:"A heatmap is a graphical representation of data where the individual values contained in a matrix are represented as colors.",purpose:["Distribution"],coord:["Cartesian2D"],category:["Statistic"],shape:["Square"],dataPres:[{minQty:2,maxQty:2,fieldConditions:["Nominal","Ordinal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Position"],recRate:"Recommended"},density_heatmap:{id:"density_heatmap",name:"Density Heatmap",alias:["Heatmap"],family:["HeatmapCharts"],def:"A density heatmap is a heatmap for representing the density of dots.",purpose:["Distribution"],coord:["Cartesian2D"],category:["Statistic"],shape:["Area"],dataPres:[{minQty:3,maxQty:3,fieldConditions:["Interval"]}],channel:["Color","Position","Area"],recRate:"Recommended"},radar_chart:{id:"radar_chart",name:"Radar Chart",alias:["Web Chart","Spider Chart","Star Chart","Cobweb Chart","Irregular Polygon","Kiviat diagram"],family:["RadarCharts"],def:"A radar chart maps series of data volume of multiple dimensions onto the axes. Starting at the same center point, usually ending at the edge of the circle, connecting the same set of points using lines.",purpose:["Comparison"],coord:["Radar"],category:["Statistic"],shape:["Round"],dataPres:[{minQty:1,maxQty:2,fieldConditions:["Nominal"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Color","Position"],recRate:"Recommended"},wordcloud:{id:"wordcloud",name:"Word Cloud",alias:["Wordle","Tag Cloud","Text Cloud"],family:["Others"],def:"A word cloud is a collection, or cluster, of words depicted in different sizes, colors, and shapes, which takes a piece of text as input. Typically, the font size in the word cloud is encoded as the word frequency in the input text.",purpose:["Proportion"],coord:["Cartesian2D"],category:["Diagram"],shape:["Scatter"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Nominal"]},{minQty:0,maxQty:1,fieldConditions:["Interval"]}],channel:["Size","Position","Color"],recRate:"Recommended"},candlestick_chart:{id:"candlestick_chart",name:"Candlestick Chart",alias:["Japanese Candlestick Chart)"],family:["BarCharts"],def:"A candlestick chart is a specific version of box plot, which is a style of financial chart used to describe price movements of a security, derivative, or currency.",purpose:["Trend","Distribution"],coord:["Cartesian2D"],category:["Statistic"],shape:["Bars"],dataPres:[{minQty:1,maxQty:1,fieldConditions:["Time"]},{minQty:1,maxQty:1,fieldConditions:["Interval"]}],channel:["Position"],recRate:"Recommended"},compact_box_tree:{id:"compact_box_tree",name:"CompactBox Tree",alias:[],family:["TreeGraph"],def:"A type of tree graph layout which arranges the nodes with same depth on the same level.",purpose:["Relation","Hierarchy"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},dendrogram:{id:"dendrogram",name:"Dendrogram",alias:[],family:["TreeGraph"],def:"A type of tree graph layout which arranges the leaves on the same level.",purpose:["Relation","Hierarchy"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},indented_tree:{id:"indented_tree",name:"Indented Tree Layout",alias:[],family:["TreeGraph"],def:"A type of tree graph layout where the hierarchy of tree is represented by the horizontal indentation, and each element will occupy one row/column. It is commonly used to represent the file directory structure.",purpose:["Relation","Hierarchy"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},radial_tree:{id:"radial_tree",name:"Radial Tree Layout",alias:[],family:["TreeGraph"],def:"A type of tree graph layout which places the root at the center, and the branches around the root radially.",purpose:["Relation","Hierarchy"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},flow_diagram:{id:"flow_diagram",name:"Flow Diagram",alias:["Dagre Graph Layout","Dagre","Flow Chart"],family:["GeneralGraph"],def:"Directed flow graph.",purpose:["Relation","Flow"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},fruchterman_layout_graph:{id:"fruchterman_layout_graph",name:"Fruchterman Graph Layout",alias:[],family:["GeneralGraph"],def:"A type of force directed graph layout.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},force_directed_layout_graph:{id:"force_directed_layout_graph",name:"Force Directed Graph Layout",alias:[],family:["GeneralGraph"],def:"The classical force directed graph layout.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},fa2_layout_graph:{id:"fa2_layout_graph",name:"Force Atlas 2 Graph Layout",alias:["FA2 Layout"],family:["GeneralGraph"],def:"A type of force directed graph layout algorithm. It focuses more on the degree of the node when calculating the force than the classical force-directed algorithm .",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},mds_layout_graph:{id:"mds_layout_graph",name:"Multi-Dimensional Scaling Layout",alias:["MDS Layout"],family:["GeneralGraph"],def:"A type of dimension reduction algorithm that could be used for calculating graph layout. MDS (Multidimensional scaling) is used for project high dimensional data onto low dimensional space.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},circular_layout_graph:{id:"circular_layout_graph",name:"Circular Graph Layout",alias:[],family:["GeneralGraph"],def:"A type of graph layout which arranges all the nodes on a circle.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},spiral_layout_graph:{id:"spiral_layout_graph",name:"Spiral Graph Layout",alias:[],family:["GeneralGraph"],def:"A type of graph layout which arranges all the nodes along a spiral line.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},radial_layout_graph:{id:"radial_layout_graph",name:"Radial Graph Layout",alias:[],family:["GeneralGraph"],def:"A type of graph layout which places a focus node on the center and the others on the concentrics centered at the focus node according to the shortest path length to the it.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},concentric_layout_graph:{id:"concentric_layout_graph",name:"Concentric Graph Layout",alias:[],family:["GeneralGraph"],def:"A type of graph layout which arranges the nodes on concentrics.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"},grid_layout_graph:{id:"grid_layout_graph",name:"Grid Graph Layout",alias:[],family:["GeneralGraph"],def:"A type of graph layout arranges the nodes on grids.",purpose:["Relation"],coord:["Cartesian2D"],category:["Graph"],shape:["Network"],dataPres:[{minQty:1,maxQty:"*",fieldConditions:["Nominal"]}],channel:["Color","Size","Opacity","Stroke","LineWidth"],recRate:"Recommended"}};function a(t,e){return e.every(function(e){return t.includes(e)})}var o=["bar_chart","grouped_bar_chart","stacked_bar_chart","percent_stacked_bar_chart","column_chart","grouped_column_chart","stacked_column_chart","percent_stacked_column_chart"],l=["bar_chart","grouped_bar_chart","stacked_bar_chart","percent_stacked_bar_chart","column_chart","grouped_column_chart","stacked_column_chart","percent_stacked_column_chart"];function s(t,e){return e.some(function(e){return t.includes(e)})}function c(t,e){return t.distincts+e*o),{valueStep:o,valueBandWidth:l,adjustedRange:t}}({align:t,range:n,round:r,flex:i,paddingInner:this.getPaddingInner(),paddingOuter:this.getPaddingOuter(),domain:e});this.valueStep=r,this.valueBandWidth=n,this.adjustedRange=t}}let tl=(t,e,n)=>{let r,i,a=t,o=e;if(a===o&&0{let[e,n,r]=t,i=_(Y(0,.5),k(e,n)),a=_(Y(.5,1),k(n,r));return t=>(e>r?t0?(t=Math.floor(t/i)*i,e=Math.ceil(e/i)*i):i<0&&(t=Math.ceil(t*i)/i,e=Math.floor(e*i)/i),r=i}}(f,h,n)),(p=function(t,e,n){var r,i,a,o,l=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e0,i=(0,a.Wn)(e)>a.Ho;function o(t,n){return(0,a.mC)(t)*(0,a.mC)(n)>e}function h(t,n,r){var i=s(t),o=s(n),h=[1,0,0],p=u(i,o),g=c(p,p),m=p[0],y=g-m*m;if(!y)return!r&&t;var v=e*g/y,b=-e*m/y,x=u(h,p),O=d(h,v);f(O,d(p,b));var w=c(O,x),_=c(x,x),k=w*w-_*(c(O,O)-1);if(!(k<0)){var C=(0,a._b)(k),M=d(x,(-w-C)/_);if(f(M,O),M=l(M),!r)return M;var j,S=t[0],A=n[0],E=t[1],P=n[1];A0^M[1]<((0,a.Wn)(M[0]-S)=n-1){var u=l[e];u.x0=i,u.y0=a,u.x1=o,u.y1=s;return}for(var f=c[e],d=r/2+f,h=e+1,p=n-1;h