From 504156fb9541ecb1c532df350686e7bfc63fe73e Mon Sep 17 00:00:00 2001 From: "guangfei.zhao" Date: Tue, 21 Oct 2025 16:41:22 +0800 Subject: [PATCH] feat: add new SVG assets for file icons, LLM providers, and UI elements --- src/assets/svg/akshare.svg | 847 ++ src/assets/svg/api.svg | 6 + src/assets/svg/arxiv.svg | 36 + src/assets/svg/assistant.svg | 25 + src/assets/svg/baidu-fanyi.svg | 6 + src/assets/svg/baidu.svg | 6 + src/assets/svg/begin.svg | 9 + src/assets/svg/bing.svg | 32 + src/assets/svg/cancel.svg | 9 + src/assets/svg/chat-app-cube.svg | 5 + src/assets/svg/chat-configuration-atom.svg | 24 + src/assets/svg/chat-star.svg | 12 + src/assets/svg/chunk-method/book-01.svg | 80 + src/assets/svg/chunk-method/book-02.svg | 80 + src/assets/svg/chunk-method/book-03.svg | 81 + src/assets/svg/chunk-method/book-04.svg | 81 + src/assets/svg/chunk-method/chunk-empty.svg | 161 + .../svg/chunk-method/knowledge-graph-01.svg | 98 + .../svg/chunk-method/knowledge-graph-02.svg | 93 + src/assets/svg/chunk-method/law-01.svg | 96 + src/assets/svg/chunk-method/law-02.svg | 78 + src/assets/svg/chunk-method/manual-01.svg | 79 + src/assets/svg/chunk-method/manual-02.svg | 94 + src/assets/svg/chunk-method/manual-03.svg | 79 + src/assets/svg/chunk-method/manual-04.svg | 78 + src/assets/svg/chunk-method/media-01.svg | 79 + src/assets/svg/chunk-method/media-02.svg | 94 + src/assets/svg/chunk-method/naive-01.svg | 101 + src/assets/svg/chunk-method/naive-02.svg | 100 + src/assets/svg/chunk-method/one-01.svg | 79 + src/assets/svg/chunk-method/one-02.svg | 79 + src/assets/svg/chunk-method/one-03.svg | 80 + src/assets/svg/chunk-method/one-04.svg | 79 + src/assets/svg/chunk-method/paper-01.svg | 96 + src/assets/svg/chunk-method/paper-02.svg | 80 + .../svg/chunk-method/presentation-01.svg | 82 + .../svg/chunk-method/presentation-02.svg | 81 + src/assets/svg/chunk-method/qa-01.svg | 97 + src/assets/svg/chunk-method/qa-02.svg | 97 + src/assets/svg/chunk-method/resume-01.svg | 79 + src/assets/svg/chunk-method/resume-02.svg | 94 + src/assets/svg/chunk-method/table-01.svg | 93 + src/assets/svg/chunk-method/table-02.svg | 93 + src/assets/svg/chunk-method/tag-01.svg | 84 + src/assets/svg/chunk-method/tag-02.svg | 84 + src/assets/svg/concentrator.svg | 7 + src/assets/svg/crawler.svg | 12 + src/assets/svg/database.svg | 3 + src/assets/svg/deepl.svg | 13 + src/assets/svg/delete.svg | 5 + src/assets/svg/disable.svg | 6 + src/assets/svg/duck.svg | 39 + src/assets/svg/email.svg | 1 + src/assets/svg/enable.svg | 9 + src/assets/svg/es.svg | 24 + src/assets/svg/exesql.svg | 6 + src/assets/svg/file-icon/aep.svg | 10 + src/assets/svg/file-icon/ai.svg | 10 + src/assets/svg/file-icon/avi.svg | 10 + src/assets/svg/file-icon/css.svg | 10 + src/assets/svg/file-icon/csv.svg | 10 + src/assets/svg/file-icon/dmg.svg | 10 + src/assets/svg/file-icon/doc.svg | 10 + src/assets/svg/file-icon/docx.svg | 10 + src/assets/svg/file-icon/eps.svg | 10 + src/assets/svg/file-icon/exe.svg | 10 + src/assets/svg/file-icon/fig.svg | 10 + src/assets/svg/file-icon/folder.svg | 18 + src/assets/svg/file-icon/gif.svg | 10 + src/assets/svg/file-icon/html.svg | 10 + src/assets/svg/file-icon/indd.svg | 10 + src/assets/svg/file-icon/java.svg | 10 + src/assets/svg/file-icon/jpeg.svg | 10 + src/assets/svg/file-icon/jpg.svg | 10 + src/assets/svg/file-icon/js.svg | 10 + src/assets/svg/file-icon/json.svg | 10 + src/assets/svg/file-icon/md.svg | 10 + src/assets/svg/file-icon/mkv.svg | 10 + src/assets/svg/file-icon/mp3.svg | 10 + src/assets/svg/file-icon/mp4.svg | 10 + src/assets/svg/file-icon/mpeg.svg | 10 + src/assets/svg/file-icon/pdf.svg | 10 + src/assets/svg/file-icon/png.svg | 10 + src/assets/svg/file-icon/ppt.svg | 10 + src/assets/svg/file-icon/pptx.svg | 10 + src/assets/svg/file-icon/psd.svg | 10 + src/assets/svg/file-icon/rss.svg | 10 + src/assets/svg/file-icon/sql.svg | 10 + src/assets/svg/file-icon/svg.svg | 10 + src/assets/svg/file-icon/tiff.svg | 10 + src/assets/svg/file-icon/txt.svg | 10 + src/assets/svg/file-icon/wav.svg | 10 + src/assets/svg/file-icon/webp.svg | 0 src/assets/svg/file-icon/xls.svg | 10 + src/assets/svg/file-icon/xlsx.svg | 10 + src/assets/svg/file-icon/xml.svg | 10 + src/assets/svg/file-management.svg | 12 + src/assets/svg/github.svg | 25 + src/assets/svg/google-scholar.svg | 29 + src/assets/svg/google.svg | 21 + src/assets/svg/graph.svg | 6 + src/assets/svg/invoke-ai.svg | 15 + src/assets/svg/jin10.svg | 100 + src/assets/svg/keyword.svg | 9 + src/assets/svg/knowledge-base.svg | 12 + src/assets/svg/knowledge-configration.svg | 8 + src/assets/svg/knowledge-dataset.svg | 5 + src/assets/svg/knowledge-testing.svg | 11 + src/assets/svg/langfuse.svg | 10 + src/assets/svg/llm/ai302.svg | 1 + src/assets/svg/llm/anthropic.svg | 1 + src/assets/svg/llm/azure.svg | 1 + src/assets/svg/llm/baai.svg | 12 + src/assets/svg/llm/baichuan.svg | 28 + src/assets/svg/llm/bedrock.svg | 29 + src/assets/svg/llm/chat-minimax.svg | 1 + src/assets/svg/llm/cohere.svg | 1 + src/assets/svg/llm/deepinfra.svg | 1 + src/assets/svg/llm/deepseek.svg | 6 + src/assets/svg/llm/fish-audio.svg | 1 + src/assets/svg/llm/gemini.svg | 114 + src/assets/svg/llm/gitee-ai.svg | 6 + src/assets/svg/llm/github.svg | 10 + src/assets/svg/llm/google-cloud.svg | 1 + src/assets/svg/llm/google.svg | 13 + src/assets/svg/llm/gpustack.svg | 14 + src/assets/svg/llm/grok.svg | 1 + src/assets/svg/llm/groq-next.svg | 1 + src/assets/svg/llm/huggingface.svg | 37 + src/assets/svg/llm/hunyuan.svg | 1 + src/assets/svg/llm/jina.svg | 12 + src/assets/svg/llm/lepton-ai.svg | 44 + src/assets/svg/llm/lm-studio.svg | 9704 +++++++++++++++++ src/assets/svg/llm/local-ai.svg | 17 + src/assets/svg/llm/longcat.svg | 7 + src/assets/svg/llm/mistral.svg | 24 + src/assets/svg/llm/modelscope.svg | 1 + src/assets/svg/llm/moonshot.svg | 6 + src/assets/svg/llm/nomic-ai.svg | 7 + src/assets/svg/llm/novita-ai.svg | 3 + src/assets/svg/llm/nvidia.svg | 1 + src/assets/svg/llm/ollama.svg | 9 + src/assets/svg/llm/open-router.svg | 17 + src/assets/svg/llm/openai-api.svg | 1 + src/assets/svg/llm/openai.svg | 6 + src/assets/svg/llm/perfx-cloud.svg | 10 + src/assets/svg/llm/ppio.svg | 3 + src/assets/svg/llm/replicate.svg | 1 + src/assets/svg/llm/sentence-transformers.svg | 29 + src/assets/svg/llm/siliconflow.svg | 13 + src/assets/svg/llm/spark.svg | 1 + src/assets/svg/llm/stepfun.svg | 37 + src/assets/svg/llm/tencent-cloud.svg | 1 + src/assets/svg/llm/together-ai.svg | 36 + src/assets/svg/llm/tongyi.svg | 7 + src/assets/svg/llm/upstage.svg | 255 + src/assets/svg/llm/vllm.svg | 59 + src/assets/svg/llm/volc_engine.svg | 14 + src/assets/svg/llm/voyage.svg | 32 + src/assets/svg/llm/wenxin.svg | 11 + src/assets/svg/llm/xai.svg | 1 + src/assets/svg/llm/xinference.svg | 39 + src/assets/svg/llm/yi.svg | 7 + src/assets/svg/llm/yiyan.svg | 1 + src/assets/svg/llm/youdao.svg | 13 + src/assets/svg/llm/zhipu.svg | 12 + src/assets/svg/login-avatars.svg | 90 + src/assets/svg/login-background.svg | 10 + src/assets/svg/login-star.svg | 11 + src/assets/svg/logo-with-text-white.svg | 50 + src/assets/svg/logout.svg | 5 + src/assets/svg/minio.svg | 10 + src/assets/svg/model-providers.svg | 5 + src/assets/svg/moon.svg | 5 + src/assets/svg/more-model.svg | 14 + src/assets/svg/more.svg | 11 + src/assets/svg/move.svg | 6 + src/assets/svg/mysql.svg | 9 + src/assets/svg/navigation-pointer.svg | 12 + src/assets/svg/next-login-bg.svg | 23 + src/assets/svg/note.svg | 9 + src/assets/svg/nothing.svg | 24 + src/assets/svg/paper-clip.svg | 6 + src/assets/svg/password.svg | 5 + src/assets/svg/plus-circle-fill.svg | 8 + src/assets/svg/plus.svg | 5 + src/assets/svg/profile.svg | 5 + src/assets/svg/prompt.svg | 27 + src/assets/svg/pubmed.svg | 37 + src/assets/svg/qweather.svg | 6 + src/assets/svg/redis.svg | 6 + src/assets/svg/refresh.svg | 5 + src/assets/svg/resize.svg | 6 + src/assets/svg/run.svg | 11 + src/assets/svg/searxng.svg | 5 + src/assets/svg/select-files-end.svg | 23 + src/assets/svg/select-files-start.svg | 35 + src/assets/svg/selected-files-collapse.svg | 5 + src/assets/svg/sso.svg | 6 + src/assets/svg/storage.svg | 6 + src/assets/svg/switch.svg | 6 + src/assets/svg/tavily.svg | 35 + src/assets/svg/team.svg | 5 + src/assets/svg/template.svg | 6 + src/assets/svg/translation.svg | 5 + src/assets/svg/tushare.svg | 10 + src/assets/svg/wencai.svg | 25 + src/assets/svg/wikipedia.svg | 24 + src/assets/svg/yahoo-finance.svg | 39 + src/components/AppSvgIcon.tsx | 81 + src/constants/common.ts | 164 + src/hooks/setting-hooks.ts | 50 +- src/interfaces/database/llm.ts | 26 +- .../setting/components/LLMFactoryCard.tsx | 12 + src/pages/setting/components/ModelDialogs.tsx | 601 + src/pages/setting/hooks/useModelDialogs.ts | 288 + src/pages/setting/models-setting-reference.md | 119 + src/pages/setting/models.tsx | 462 +- src/services/user_service.ts | 53 +- vite.config.ts | 1 + 220 files changed, 17943 insertions(+), 23 deletions(-) create mode 100644 src/assets/svg/akshare.svg create mode 100644 src/assets/svg/api.svg create mode 100644 src/assets/svg/arxiv.svg create mode 100644 src/assets/svg/assistant.svg create mode 100644 src/assets/svg/baidu-fanyi.svg create mode 100644 src/assets/svg/baidu.svg create mode 100644 src/assets/svg/begin.svg create mode 100644 src/assets/svg/bing.svg create mode 100644 src/assets/svg/cancel.svg create mode 100644 src/assets/svg/chat-app-cube.svg create mode 100644 src/assets/svg/chat-configuration-atom.svg create mode 100644 src/assets/svg/chat-star.svg create mode 100644 src/assets/svg/chunk-method/book-01.svg create mode 100644 src/assets/svg/chunk-method/book-02.svg create mode 100644 src/assets/svg/chunk-method/book-03.svg create mode 100644 src/assets/svg/chunk-method/book-04.svg create mode 100644 src/assets/svg/chunk-method/chunk-empty.svg create mode 100644 src/assets/svg/chunk-method/knowledge-graph-01.svg create mode 100644 src/assets/svg/chunk-method/knowledge-graph-02.svg create mode 100644 src/assets/svg/chunk-method/law-01.svg create mode 100644 src/assets/svg/chunk-method/law-02.svg create mode 100644 src/assets/svg/chunk-method/manual-01.svg create mode 100644 src/assets/svg/chunk-method/manual-02.svg create mode 100644 src/assets/svg/chunk-method/manual-03.svg create mode 100644 src/assets/svg/chunk-method/manual-04.svg create mode 100644 src/assets/svg/chunk-method/media-01.svg create mode 100644 src/assets/svg/chunk-method/media-02.svg create mode 100644 src/assets/svg/chunk-method/naive-01.svg create mode 100644 src/assets/svg/chunk-method/naive-02.svg create mode 100644 src/assets/svg/chunk-method/one-01.svg create mode 100644 src/assets/svg/chunk-method/one-02.svg create mode 100644 src/assets/svg/chunk-method/one-03.svg create mode 100644 src/assets/svg/chunk-method/one-04.svg create mode 100644 src/assets/svg/chunk-method/paper-01.svg create mode 100644 src/assets/svg/chunk-method/paper-02.svg create mode 100644 src/assets/svg/chunk-method/presentation-01.svg create mode 100644 src/assets/svg/chunk-method/presentation-02.svg create mode 100644 src/assets/svg/chunk-method/qa-01.svg create mode 100644 src/assets/svg/chunk-method/qa-02.svg create mode 100644 src/assets/svg/chunk-method/resume-01.svg create mode 100644 src/assets/svg/chunk-method/resume-02.svg create mode 100644 src/assets/svg/chunk-method/table-01.svg create mode 100644 src/assets/svg/chunk-method/table-02.svg create mode 100644 src/assets/svg/chunk-method/tag-01.svg create mode 100644 src/assets/svg/chunk-method/tag-02.svg create mode 100644 src/assets/svg/concentrator.svg create mode 100644 src/assets/svg/crawler.svg create mode 100644 src/assets/svg/database.svg create mode 100644 src/assets/svg/deepl.svg create mode 100644 src/assets/svg/delete.svg create mode 100644 src/assets/svg/disable.svg create mode 100644 src/assets/svg/duck.svg create mode 100644 src/assets/svg/email.svg create mode 100644 src/assets/svg/enable.svg create mode 100644 src/assets/svg/es.svg create mode 100644 src/assets/svg/exesql.svg create mode 100644 src/assets/svg/file-icon/aep.svg create mode 100644 src/assets/svg/file-icon/ai.svg create mode 100644 src/assets/svg/file-icon/avi.svg create mode 100644 src/assets/svg/file-icon/css.svg create mode 100644 src/assets/svg/file-icon/csv.svg create mode 100644 src/assets/svg/file-icon/dmg.svg create mode 100644 src/assets/svg/file-icon/doc.svg create mode 100644 src/assets/svg/file-icon/docx.svg create mode 100644 src/assets/svg/file-icon/eps.svg create mode 100644 src/assets/svg/file-icon/exe.svg create mode 100644 src/assets/svg/file-icon/fig.svg create mode 100644 src/assets/svg/file-icon/folder.svg create mode 100644 src/assets/svg/file-icon/gif.svg create mode 100644 src/assets/svg/file-icon/html.svg create mode 100644 src/assets/svg/file-icon/indd.svg create mode 100644 src/assets/svg/file-icon/java.svg create mode 100644 src/assets/svg/file-icon/jpeg.svg create mode 100644 src/assets/svg/file-icon/jpg.svg create mode 100644 src/assets/svg/file-icon/js.svg create mode 100644 src/assets/svg/file-icon/json.svg create mode 100644 src/assets/svg/file-icon/md.svg create mode 100644 src/assets/svg/file-icon/mkv.svg create mode 100644 src/assets/svg/file-icon/mp3.svg create mode 100644 src/assets/svg/file-icon/mp4.svg create mode 100644 src/assets/svg/file-icon/mpeg.svg create mode 100644 src/assets/svg/file-icon/pdf.svg create mode 100644 src/assets/svg/file-icon/png.svg create mode 100644 src/assets/svg/file-icon/ppt.svg create mode 100644 src/assets/svg/file-icon/pptx.svg create mode 100644 src/assets/svg/file-icon/psd.svg create mode 100644 src/assets/svg/file-icon/rss.svg create mode 100644 src/assets/svg/file-icon/sql.svg create mode 100644 src/assets/svg/file-icon/svg.svg create mode 100644 src/assets/svg/file-icon/tiff.svg create mode 100644 src/assets/svg/file-icon/txt.svg create mode 100644 src/assets/svg/file-icon/wav.svg create mode 100644 src/assets/svg/file-icon/webp.svg create mode 100644 src/assets/svg/file-icon/xls.svg create mode 100644 src/assets/svg/file-icon/xlsx.svg create mode 100644 src/assets/svg/file-icon/xml.svg create mode 100644 src/assets/svg/file-management.svg create mode 100644 src/assets/svg/github.svg create mode 100644 src/assets/svg/google-scholar.svg create mode 100644 src/assets/svg/google.svg create mode 100644 src/assets/svg/graph.svg create mode 100644 src/assets/svg/invoke-ai.svg create mode 100644 src/assets/svg/jin10.svg create mode 100644 src/assets/svg/keyword.svg create mode 100644 src/assets/svg/knowledge-base.svg create mode 100644 src/assets/svg/knowledge-configration.svg create mode 100644 src/assets/svg/knowledge-dataset.svg create mode 100644 src/assets/svg/knowledge-testing.svg create mode 100644 src/assets/svg/langfuse.svg create mode 100644 src/assets/svg/llm/ai302.svg create mode 100644 src/assets/svg/llm/anthropic.svg create mode 100644 src/assets/svg/llm/azure.svg create mode 100644 src/assets/svg/llm/baai.svg create mode 100644 src/assets/svg/llm/baichuan.svg create mode 100644 src/assets/svg/llm/bedrock.svg create mode 100644 src/assets/svg/llm/chat-minimax.svg create mode 100644 src/assets/svg/llm/cohere.svg create mode 100644 src/assets/svg/llm/deepinfra.svg create mode 100644 src/assets/svg/llm/deepseek.svg create mode 100644 src/assets/svg/llm/fish-audio.svg create mode 100644 src/assets/svg/llm/gemini.svg create mode 100644 src/assets/svg/llm/gitee-ai.svg create mode 100644 src/assets/svg/llm/github.svg create mode 100644 src/assets/svg/llm/google-cloud.svg create mode 100644 src/assets/svg/llm/google.svg create mode 100644 src/assets/svg/llm/gpustack.svg create mode 100644 src/assets/svg/llm/grok.svg create mode 100644 src/assets/svg/llm/groq-next.svg create mode 100644 src/assets/svg/llm/huggingface.svg create mode 100644 src/assets/svg/llm/hunyuan.svg create mode 100644 src/assets/svg/llm/jina.svg create mode 100644 src/assets/svg/llm/lepton-ai.svg create mode 100644 src/assets/svg/llm/lm-studio.svg create mode 100644 src/assets/svg/llm/local-ai.svg create mode 100644 src/assets/svg/llm/longcat.svg create mode 100644 src/assets/svg/llm/mistral.svg create mode 100644 src/assets/svg/llm/modelscope.svg create mode 100644 src/assets/svg/llm/moonshot.svg create mode 100644 src/assets/svg/llm/nomic-ai.svg create mode 100644 src/assets/svg/llm/novita-ai.svg create mode 100644 src/assets/svg/llm/nvidia.svg create mode 100644 src/assets/svg/llm/ollama.svg create mode 100644 src/assets/svg/llm/open-router.svg create mode 100644 src/assets/svg/llm/openai-api.svg create mode 100644 src/assets/svg/llm/openai.svg create mode 100644 src/assets/svg/llm/perfx-cloud.svg create mode 100644 src/assets/svg/llm/ppio.svg create mode 100644 src/assets/svg/llm/replicate.svg create mode 100644 src/assets/svg/llm/sentence-transformers.svg create mode 100644 src/assets/svg/llm/siliconflow.svg create mode 100644 src/assets/svg/llm/spark.svg create mode 100644 src/assets/svg/llm/stepfun.svg create mode 100644 src/assets/svg/llm/tencent-cloud.svg create mode 100644 src/assets/svg/llm/together-ai.svg create mode 100644 src/assets/svg/llm/tongyi.svg create mode 100644 src/assets/svg/llm/upstage.svg create mode 100644 src/assets/svg/llm/vllm.svg create mode 100644 src/assets/svg/llm/volc_engine.svg create mode 100644 src/assets/svg/llm/voyage.svg create mode 100644 src/assets/svg/llm/wenxin.svg create mode 100644 src/assets/svg/llm/xai.svg create mode 100644 src/assets/svg/llm/xinference.svg create mode 100644 src/assets/svg/llm/yi.svg create mode 100644 src/assets/svg/llm/yiyan.svg create mode 100644 src/assets/svg/llm/youdao.svg create mode 100644 src/assets/svg/llm/zhipu.svg create mode 100644 src/assets/svg/login-avatars.svg create mode 100644 src/assets/svg/login-background.svg create mode 100644 src/assets/svg/login-star.svg create mode 100644 src/assets/svg/logo-with-text-white.svg create mode 100644 src/assets/svg/logout.svg create mode 100644 src/assets/svg/minio.svg create mode 100644 src/assets/svg/model-providers.svg create mode 100644 src/assets/svg/moon.svg create mode 100644 src/assets/svg/more-model.svg create mode 100644 src/assets/svg/more.svg create mode 100644 src/assets/svg/move.svg create mode 100644 src/assets/svg/mysql.svg create mode 100644 src/assets/svg/navigation-pointer.svg create mode 100644 src/assets/svg/next-login-bg.svg create mode 100644 src/assets/svg/note.svg create mode 100644 src/assets/svg/nothing.svg create mode 100644 src/assets/svg/paper-clip.svg create mode 100644 src/assets/svg/password.svg create mode 100644 src/assets/svg/plus-circle-fill.svg create mode 100644 src/assets/svg/plus.svg create mode 100644 src/assets/svg/profile.svg create mode 100644 src/assets/svg/prompt.svg create mode 100644 src/assets/svg/pubmed.svg create mode 100644 src/assets/svg/qweather.svg create mode 100644 src/assets/svg/redis.svg create mode 100644 src/assets/svg/refresh.svg create mode 100644 src/assets/svg/resize.svg create mode 100644 src/assets/svg/run.svg create mode 100644 src/assets/svg/searxng.svg create mode 100644 src/assets/svg/select-files-end.svg create mode 100644 src/assets/svg/select-files-start.svg create mode 100644 src/assets/svg/selected-files-collapse.svg create mode 100644 src/assets/svg/sso.svg create mode 100644 src/assets/svg/storage.svg create mode 100644 src/assets/svg/switch.svg create mode 100644 src/assets/svg/tavily.svg create mode 100644 src/assets/svg/team.svg create mode 100644 src/assets/svg/template.svg create mode 100644 src/assets/svg/translation.svg create mode 100644 src/assets/svg/tushare.svg create mode 100644 src/assets/svg/wencai.svg create mode 100644 src/assets/svg/wikipedia.svg create mode 100644 src/assets/svg/yahoo-finance.svg create mode 100644 src/components/AppSvgIcon.tsx create mode 100644 src/pages/setting/components/LLMFactoryCard.tsx create mode 100644 src/pages/setting/components/ModelDialogs.tsx create mode 100644 src/pages/setting/hooks/useModelDialogs.ts create mode 100644 src/pages/setting/models-setting-reference.md diff --git a/src/assets/svg/akshare.svg b/src/assets/svg/akshare.svg new file mode 100644 index 0000000..debaf04 --- /dev/null +++ b/src/assets/svg/akshare.svg @@ -0,0 +1,847 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/api.svg b/src/assets/svg/api.svg new file mode 100644 index 0000000..5dd6a85 --- /dev/null +++ b/src/assets/svg/api.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/arxiv.svg b/src/assets/svg/arxiv.svg new file mode 100644 index 0000000..bff0145 --- /dev/null +++ b/src/assets/svg/arxiv.svg @@ -0,0 +1,36 @@ + + + arxiv + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/assistant.svg b/src/assets/svg/assistant.svg new file mode 100644 index 0000000..43446a1 --- /dev/null +++ b/src/assets/svg/assistant.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/baidu-fanyi.svg b/src/assets/svg/baidu-fanyi.svg new file mode 100644 index 0000000..d2a34f6 --- /dev/null +++ b/src/assets/svg/baidu-fanyi.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/baidu.svg b/src/assets/svg/baidu.svg new file mode 100644 index 0000000..9e18c52 --- /dev/null +++ b/src/assets/svg/baidu.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/begin.svg b/src/assets/svg/begin.svg new file mode 100644 index 0000000..c1e7789 --- /dev/null +++ b/src/assets/svg/begin.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/bing.svg b/src/assets/svg/bing.svg new file mode 100644 index 0000000..379c6f3 --- /dev/null +++ b/src/assets/svg/bing.svg @@ -0,0 +1,32 @@ + + + bing + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/cancel.svg b/src/assets/svg/cancel.svg new file mode 100644 index 0000000..97d8f72 --- /dev/null +++ b/src/assets/svg/cancel.svg @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/chat-app-cube.svg b/src/assets/svg/chat-app-cube.svg new file mode 100644 index 0000000..f43fdcf --- /dev/null +++ b/src/assets/svg/chat-app-cube.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/chat-configuration-atom.svg b/src/assets/svg/chat-configuration-atom.svg new file mode 100644 index 0000000..47e57a2 --- /dev/null +++ b/src/assets/svg/chat-configuration-atom.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chat-star.svg b/src/assets/svg/chat-star.svg new file mode 100644 index 0000000..03b048f --- /dev/null +++ b/src/assets/svg/chat-star.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/book-01.svg b/src/assets/svg/chunk-method/book-01.svg new file mode 100644 index 0000000..f8e9f62 --- /dev/null +++ b/src/assets/svg/chunk-method/book-01.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/book-02.svg b/src/assets/svg/chunk-method/book-02.svg new file mode 100644 index 0000000..cf668ba --- /dev/null +++ b/src/assets/svg/chunk-method/book-02.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/book-03.svg b/src/assets/svg/chunk-method/book-03.svg new file mode 100644 index 0000000..2c35e06 --- /dev/null +++ b/src/assets/svg/chunk-method/book-03.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/book-04.svg b/src/assets/svg/chunk-method/book-04.svg new file mode 100644 index 0000000..9fed0e7 --- /dev/null +++ b/src/assets/svg/chunk-method/book-04.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/chunk-empty.svg b/src/assets/svg/chunk-method/chunk-empty.svg new file mode 100644 index 0000000..0193e34 --- /dev/null +++ b/src/assets/svg/chunk-method/chunk-empty.svg @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/knowledge-graph-01.svg b/src/assets/svg/chunk-method/knowledge-graph-01.svg new file mode 100644 index 0000000..f5e77a0 --- /dev/null +++ b/src/assets/svg/chunk-method/knowledge-graph-01.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/knowledge-graph-02.svg b/src/assets/svg/chunk-method/knowledge-graph-02.svg new file mode 100644 index 0000000..d2d7507 --- /dev/null +++ b/src/assets/svg/chunk-method/knowledge-graph-02.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/law-01.svg b/src/assets/svg/chunk-method/law-01.svg new file mode 100644 index 0000000..9ce6879 --- /dev/null +++ b/src/assets/svg/chunk-method/law-01.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/law-02.svg b/src/assets/svg/chunk-method/law-02.svg new file mode 100644 index 0000000..5ddb691 --- /dev/null +++ b/src/assets/svg/chunk-method/law-02.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/manual-01.svg b/src/assets/svg/chunk-method/manual-01.svg new file mode 100644 index 0000000..52a5992 --- /dev/null +++ b/src/assets/svg/chunk-method/manual-01.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/manual-02.svg b/src/assets/svg/chunk-method/manual-02.svg new file mode 100644 index 0000000..72c319d --- /dev/null +++ b/src/assets/svg/chunk-method/manual-02.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/manual-03.svg b/src/assets/svg/chunk-method/manual-03.svg new file mode 100644 index 0000000..420bcde --- /dev/null +++ b/src/assets/svg/chunk-method/manual-03.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/manual-04.svg b/src/assets/svg/chunk-method/manual-04.svg new file mode 100644 index 0000000..a7641ea --- /dev/null +++ b/src/assets/svg/chunk-method/manual-04.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/media-01.svg b/src/assets/svg/chunk-method/media-01.svg new file mode 100644 index 0000000..7589971 --- /dev/null +++ b/src/assets/svg/chunk-method/media-01.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/media-02.svg b/src/assets/svg/chunk-method/media-02.svg new file mode 100644 index 0000000..66517bf --- /dev/null +++ b/src/assets/svg/chunk-method/media-02.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/naive-01.svg b/src/assets/svg/chunk-method/naive-01.svg new file mode 100644 index 0000000..7c0e95c --- /dev/null +++ b/src/assets/svg/chunk-method/naive-01.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/naive-02.svg b/src/assets/svg/chunk-method/naive-02.svg new file mode 100644 index 0000000..3289322 --- /dev/null +++ b/src/assets/svg/chunk-method/naive-02.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/one-01.svg b/src/assets/svg/chunk-method/one-01.svg new file mode 100644 index 0000000..37f72ba --- /dev/null +++ b/src/assets/svg/chunk-method/one-01.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/one-02.svg b/src/assets/svg/chunk-method/one-02.svg new file mode 100644 index 0000000..ed0fd79 --- /dev/null +++ b/src/assets/svg/chunk-method/one-02.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/one-03.svg b/src/assets/svg/chunk-method/one-03.svg new file mode 100644 index 0000000..11754e5 --- /dev/null +++ b/src/assets/svg/chunk-method/one-03.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/one-04.svg b/src/assets/svg/chunk-method/one-04.svg new file mode 100644 index 0000000..a5ead4e --- /dev/null +++ b/src/assets/svg/chunk-method/one-04.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/paper-01.svg b/src/assets/svg/chunk-method/paper-01.svg new file mode 100644 index 0000000..54e39f8 --- /dev/null +++ b/src/assets/svg/chunk-method/paper-01.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/paper-02.svg b/src/assets/svg/chunk-method/paper-02.svg new file mode 100644 index 0000000..e23d414 --- /dev/null +++ b/src/assets/svg/chunk-method/paper-02.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/presentation-01.svg b/src/assets/svg/chunk-method/presentation-01.svg new file mode 100644 index 0000000..34f124b --- /dev/null +++ b/src/assets/svg/chunk-method/presentation-01.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/presentation-02.svg b/src/assets/svg/chunk-method/presentation-02.svg new file mode 100644 index 0000000..3090a04 --- /dev/null +++ b/src/assets/svg/chunk-method/presentation-02.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/qa-01.svg b/src/assets/svg/chunk-method/qa-01.svg new file mode 100644 index 0000000..350fea4 --- /dev/null +++ b/src/assets/svg/chunk-method/qa-01.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/qa-02.svg b/src/assets/svg/chunk-method/qa-02.svg new file mode 100644 index 0000000..05510c3 --- /dev/null +++ b/src/assets/svg/chunk-method/qa-02.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/resume-01.svg b/src/assets/svg/chunk-method/resume-01.svg new file mode 100644 index 0000000..e31d5f0 --- /dev/null +++ b/src/assets/svg/chunk-method/resume-01.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/resume-02.svg b/src/assets/svg/chunk-method/resume-02.svg new file mode 100644 index 0000000..db8c80a --- /dev/null +++ b/src/assets/svg/chunk-method/resume-02.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/table-01.svg b/src/assets/svg/chunk-method/table-01.svg new file mode 100644 index 0000000..8b741ac --- /dev/null +++ b/src/assets/svg/chunk-method/table-01.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/table-02.svg b/src/assets/svg/chunk-method/table-02.svg new file mode 100644 index 0000000..b288ed4 --- /dev/null +++ b/src/assets/svg/chunk-method/table-02.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/tag-01.svg b/src/assets/svg/chunk-method/tag-01.svg new file mode 100644 index 0000000..0ed6351 --- /dev/null +++ b/src/assets/svg/chunk-method/tag-01.svg @@ -0,0 +1,84 @@ + + knowledge-graph-B-svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/chunk-method/tag-02.svg b/src/assets/svg/chunk-method/tag-02.svg new file mode 100644 index 0000000..b8498d6 --- /dev/null +++ b/src/assets/svg/chunk-method/tag-02.svg @@ -0,0 +1,84 @@ + + knowledge-graph-A-svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/concentrator.svg b/src/assets/svg/concentrator.svg new file mode 100644 index 0000000..a5ddc57 --- /dev/null +++ b/src/assets/svg/concentrator.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/crawler.svg b/src/assets/svg/crawler.svg new file mode 100644 index 0000000..507f567 --- /dev/null +++ b/src/assets/svg/crawler.svg @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/database.svg b/src/assets/svg/database.svg new file mode 100644 index 0000000..2df69fb --- /dev/null +++ b/src/assets/svg/database.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/deepl.svg b/src/assets/svg/deepl.svg new file mode 100644 index 0000000..c0b430d --- /dev/null +++ b/src/assets/svg/deepl.svg @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/delete.svg b/src/assets/svg/delete.svg new file mode 100644 index 0000000..7e1f0a0 --- /dev/null +++ b/src/assets/svg/delete.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/disable.svg b/src/assets/svg/disable.svg new file mode 100644 index 0000000..58fca07 --- /dev/null +++ b/src/assets/svg/disable.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/duck.svg b/src/assets/svg/duck.svg new file mode 100644 index 0000000..c31dd49 --- /dev/null +++ b/src/assets/svg/duck.svg @@ -0,0 +1,39 @@ + + + duckgo + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/email.svg b/src/assets/svg/email.svg new file mode 100644 index 0000000..4706081 --- /dev/null +++ b/src/assets/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/enable.svg b/src/assets/svg/enable.svg new file mode 100644 index 0000000..49c42a2 --- /dev/null +++ b/src/assets/svg/enable.svg @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/es.svg b/src/assets/svg/es.svg new file mode 100644 index 0000000..b3274ca --- /dev/null +++ b/src/assets/svg/es.svg @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/exesql.svg b/src/assets/svg/exesql.svg new file mode 100644 index 0000000..7f43bd3 --- /dev/null +++ b/src/assets/svg/exesql.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/aep.svg b/src/assets/svg/file-icon/aep.svg new file mode 100644 index 0000000..fcf26db --- /dev/null +++ b/src/assets/svg/file-icon/aep.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/ai.svg b/src/assets/svg/file-icon/ai.svg new file mode 100644 index 0000000..4e2bf68 --- /dev/null +++ b/src/assets/svg/file-icon/ai.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/avi.svg b/src/assets/svg/file-icon/avi.svg new file mode 100644 index 0000000..7225956 --- /dev/null +++ b/src/assets/svg/file-icon/avi.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/css.svg b/src/assets/svg/file-icon/css.svg new file mode 100644 index 0000000..506a853 --- /dev/null +++ b/src/assets/svg/file-icon/css.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/csv.svg b/src/assets/svg/file-icon/csv.svg new file mode 100644 index 0000000..ad691e0 --- /dev/null +++ b/src/assets/svg/file-icon/csv.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/dmg.svg b/src/assets/svg/file-icon/dmg.svg new file mode 100644 index 0000000..4755f46 --- /dev/null +++ b/src/assets/svg/file-icon/dmg.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/doc.svg b/src/assets/svg/file-icon/doc.svg new file mode 100644 index 0000000..2e68655 --- /dev/null +++ b/src/assets/svg/file-icon/doc.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/docx.svg b/src/assets/svg/file-icon/docx.svg new file mode 100644 index 0000000..dd43254 --- /dev/null +++ b/src/assets/svg/file-icon/docx.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/eps.svg b/src/assets/svg/file-icon/eps.svg new file mode 100644 index 0000000..4f2a66b --- /dev/null +++ b/src/assets/svg/file-icon/eps.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/exe.svg b/src/assets/svg/file-icon/exe.svg new file mode 100644 index 0000000..fbaea17 --- /dev/null +++ b/src/assets/svg/file-icon/exe.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/fig.svg b/src/assets/svg/file-icon/fig.svg new file mode 100644 index 0000000..7a500cd --- /dev/null +++ b/src/assets/svg/file-icon/fig.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/folder.svg b/src/assets/svg/file-icon/folder.svg new file mode 100644 index 0000000..e522b78 --- /dev/null +++ b/src/assets/svg/file-icon/folder.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/gif.svg b/src/assets/svg/file-icon/gif.svg new file mode 100644 index 0000000..ff4e024 --- /dev/null +++ b/src/assets/svg/file-icon/gif.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/html.svg b/src/assets/svg/file-icon/html.svg new file mode 100644 index 0000000..8d157fe --- /dev/null +++ b/src/assets/svg/file-icon/html.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/indd.svg b/src/assets/svg/file-icon/indd.svg new file mode 100644 index 0000000..b86688b --- /dev/null +++ b/src/assets/svg/file-icon/indd.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/java.svg b/src/assets/svg/file-icon/java.svg new file mode 100644 index 0000000..bea4ca9 --- /dev/null +++ b/src/assets/svg/file-icon/java.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/jpeg.svg b/src/assets/svg/file-icon/jpeg.svg new file mode 100644 index 0000000..490a292 --- /dev/null +++ b/src/assets/svg/file-icon/jpeg.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/jpg.svg b/src/assets/svg/file-icon/jpg.svg new file mode 100644 index 0000000..035ef81 --- /dev/null +++ b/src/assets/svg/file-icon/jpg.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/js.svg b/src/assets/svg/file-icon/js.svg new file mode 100644 index 0000000..3791ff5 --- /dev/null +++ b/src/assets/svg/file-icon/js.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/json.svg b/src/assets/svg/file-icon/json.svg new file mode 100644 index 0000000..5ead80c --- /dev/null +++ b/src/assets/svg/file-icon/json.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/md.svg b/src/assets/svg/file-icon/md.svg new file mode 100644 index 0000000..087bc00 --- /dev/null +++ b/src/assets/svg/file-icon/md.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/mkv.svg b/src/assets/svg/file-icon/mkv.svg new file mode 100644 index 0000000..2b00a8e --- /dev/null +++ b/src/assets/svg/file-icon/mkv.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/mp3.svg b/src/assets/svg/file-icon/mp3.svg new file mode 100644 index 0000000..b311e4d --- /dev/null +++ b/src/assets/svg/file-icon/mp3.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/mp4.svg b/src/assets/svg/file-icon/mp4.svg new file mode 100644 index 0000000..4f5f79d --- /dev/null +++ b/src/assets/svg/file-icon/mp4.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/mpeg.svg b/src/assets/svg/file-icon/mpeg.svg new file mode 100644 index 0000000..23c01e8 --- /dev/null +++ b/src/assets/svg/file-icon/mpeg.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/pdf.svg b/src/assets/svg/file-icon/pdf.svg new file mode 100644 index 0000000..6e1a5f0 --- /dev/null +++ b/src/assets/svg/file-icon/pdf.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/png.svg b/src/assets/svg/file-icon/png.svg new file mode 100644 index 0000000..d581915 --- /dev/null +++ b/src/assets/svg/file-icon/png.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/ppt.svg b/src/assets/svg/file-icon/ppt.svg new file mode 100644 index 0000000..365c32d --- /dev/null +++ b/src/assets/svg/file-icon/ppt.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/pptx.svg b/src/assets/svg/file-icon/pptx.svg new file mode 100644 index 0000000..09894ce --- /dev/null +++ b/src/assets/svg/file-icon/pptx.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/psd.svg b/src/assets/svg/file-icon/psd.svg new file mode 100644 index 0000000..0aa30c0 --- /dev/null +++ b/src/assets/svg/file-icon/psd.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/rss.svg b/src/assets/svg/file-icon/rss.svg new file mode 100644 index 0000000..b4114c7 --- /dev/null +++ b/src/assets/svg/file-icon/rss.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/sql.svg b/src/assets/svg/file-icon/sql.svg new file mode 100644 index 0000000..0368a50 --- /dev/null +++ b/src/assets/svg/file-icon/sql.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/svg.svg b/src/assets/svg/file-icon/svg.svg new file mode 100644 index 0000000..0957124 --- /dev/null +++ b/src/assets/svg/file-icon/svg.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/tiff.svg b/src/assets/svg/file-icon/tiff.svg new file mode 100644 index 0000000..de81851 --- /dev/null +++ b/src/assets/svg/file-icon/tiff.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/txt.svg b/src/assets/svg/file-icon/txt.svg new file mode 100644 index 0000000..0a4fe6f --- /dev/null +++ b/src/assets/svg/file-icon/txt.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/wav.svg b/src/assets/svg/file-icon/wav.svg new file mode 100644 index 0000000..d2b018e --- /dev/null +++ b/src/assets/svg/file-icon/wav.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/webp.svg b/src/assets/svg/file-icon/webp.svg new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/svg/file-icon/xls.svg b/src/assets/svg/file-icon/xls.svg new file mode 100644 index 0000000..7fe4a5c --- /dev/null +++ b/src/assets/svg/file-icon/xls.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/xlsx.svg b/src/assets/svg/file-icon/xlsx.svg new file mode 100644 index 0000000..544a138 --- /dev/null +++ b/src/assets/svg/file-icon/xlsx.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-icon/xml.svg b/src/assets/svg/file-icon/xml.svg new file mode 100644 index 0000000..4e61546 --- /dev/null +++ b/src/assets/svg/file-icon/xml.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/file-management.svg b/src/assets/svg/file-management.svg new file mode 100644 index 0000000..9617c75 --- /dev/null +++ b/src/assets/svg/file-management.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/github.svg b/src/assets/svg/github.svg new file mode 100644 index 0000000..4489eb3 --- /dev/null +++ b/src/assets/svg/github.svg @@ -0,0 +1,25 @@ + + + GitHub + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/google-scholar.svg b/src/assets/svg/google-scholar.svg new file mode 100644 index 0000000..a2eeff7 --- /dev/null +++ b/src/assets/svg/google-scholar.svg @@ -0,0 +1,29 @@ + + + Google scholar + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/google.svg b/src/assets/svg/google.svg new file mode 100644 index 0000000..cf12a71 --- /dev/null +++ b/src/assets/svg/google.svg @@ -0,0 +1,21 @@ + + + serpapi + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/graph.svg b/src/assets/svg/graph.svg new file mode 100644 index 0000000..b0b4ced --- /dev/null +++ b/src/assets/svg/graph.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/invoke-ai.svg b/src/assets/svg/invoke-ai.svg new file mode 100644 index 0000000..783fad8 --- /dev/null +++ b/src/assets/svg/invoke-ai.svg @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/jin10.svg b/src/assets/svg/jin10.svg new file mode 100644 index 0000000..cdda728 --- /dev/null +++ b/src/assets/svg/jin10.svg @@ -0,0 +1,100 @@ + + + + + + + diff --git a/src/assets/svg/keyword.svg b/src/assets/svg/keyword.svg new file mode 100644 index 0000000..9d0350d --- /dev/null +++ b/src/assets/svg/keyword.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/knowledge-base.svg b/src/assets/svg/knowledge-base.svg new file mode 100644 index 0000000..b756e32 --- /dev/null +++ b/src/assets/svg/knowledge-base.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/knowledge-configration.svg b/src/assets/svg/knowledge-configration.svg new file mode 100644 index 0000000..481cff3 --- /dev/null +++ b/src/assets/svg/knowledge-configration.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/knowledge-dataset.svg b/src/assets/svg/knowledge-dataset.svg new file mode 100644 index 0000000..7d36526 --- /dev/null +++ b/src/assets/svg/knowledge-dataset.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/knowledge-testing.svg b/src/assets/svg/knowledge-testing.svg new file mode 100644 index 0000000..5aa40b8 --- /dev/null +++ b/src/assets/svg/knowledge-testing.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/langfuse.svg b/src/assets/svg/langfuse.svg new file mode 100644 index 0000000..cac46d8 --- /dev/null +++ b/src/assets/svg/langfuse.svg @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/src/assets/svg/llm/ai302.svg b/src/assets/svg/llm/ai302.svg new file mode 100644 index 0000000..80a864e --- /dev/null +++ b/src/assets/svg/llm/ai302.svg @@ -0,0 +1 @@ +302.AI \ No newline at end of file diff --git a/src/assets/svg/llm/anthropic.svg b/src/assets/svg/llm/anthropic.svg new file mode 100644 index 0000000..249c950 --- /dev/null +++ b/src/assets/svg/llm/anthropic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/azure.svg b/src/assets/svg/llm/azure.svg new file mode 100644 index 0000000..b3281a5 --- /dev/null +++ b/src/assets/svg/llm/azure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/baai.svg b/src/assets/svg/llm/baai.svg new file mode 100644 index 0000000..7e365e3 --- /dev/null +++ b/src/assets/svg/llm/baai.svg @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/baichuan.svg b/src/assets/svg/llm/baichuan.svg new file mode 100644 index 0000000..6ea61b5 --- /dev/null +++ b/src/assets/svg/llm/baichuan.svg @@ -0,0 +1,28 @@ + + + + diff --git a/src/assets/svg/llm/bedrock.svg b/src/assets/svg/llm/bedrock.svg new file mode 100644 index 0000000..3b01a13 --- /dev/null +++ b/src/assets/svg/llm/bedrock.svg @@ -0,0 +1,29 @@ + + + + diff --git a/src/assets/svg/llm/chat-minimax.svg b/src/assets/svg/llm/chat-minimax.svg new file mode 100644 index 0000000..3ba8f7f --- /dev/null +++ b/src/assets/svg/llm/chat-minimax.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/cohere.svg b/src/assets/svg/llm/cohere.svg new file mode 100644 index 0000000..cb1b2a5 --- /dev/null +++ b/src/assets/svg/llm/cohere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/deepinfra.svg b/src/assets/svg/llm/deepinfra.svg new file mode 100644 index 0000000..565c809 --- /dev/null +++ b/src/assets/svg/llm/deepinfra.svg @@ -0,0 +1 @@ +DeepInfra \ No newline at end of file diff --git a/src/assets/svg/llm/deepseek.svg b/src/assets/svg/llm/deepseek.svg new file mode 100644 index 0000000..50a8eb3 --- /dev/null +++ b/src/assets/svg/llm/deepseek.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/llm/fish-audio.svg b/src/assets/svg/llm/fish-audio.svg new file mode 100644 index 0000000..ec44029 --- /dev/null +++ b/src/assets/svg/llm/fish-audio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/gemini.svg b/src/assets/svg/llm/gemini.svg new file mode 100644 index 0000000..91b0bf4 --- /dev/null +++ b/src/assets/svg/llm/gemini.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/llm/gitee-ai.svg b/src/assets/svg/llm/gitee-ai.svg new file mode 100644 index 0000000..93a3cea --- /dev/null +++ b/src/assets/svg/llm/gitee-ai.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/llm/github.svg b/src/assets/svg/llm/github.svg new file mode 100644 index 0000000..6f80a87 --- /dev/null +++ b/src/assets/svg/llm/github.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/svg/llm/google-cloud.svg b/src/assets/svg/llm/google-cloud.svg new file mode 100644 index 0000000..2f78705 --- /dev/null +++ b/src/assets/svg/llm/google-cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/google.svg b/src/assets/svg/llm/google.svg new file mode 100644 index 0000000..f0d10ec --- /dev/null +++ b/src/assets/svg/llm/google.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/svg/llm/gpustack.svg b/src/assets/svg/llm/gpustack.svg new file mode 100644 index 0000000..95a07f9 --- /dev/null +++ b/src/assets/svg/llm/gpustack.svg @@ -0,0 +1,14 @@ + + + Combined Shape + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/grok.svg b/src/assets/svg/llm/grok.svg new file mode 100644 index 0000000..9201bbc --- /dev/null +++ b/src/assets/svg/llm/grok.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/groq-next.svg b/src/assets/svg/llm/groq-next.svg new file mode 100644 index 0000000..5608a42 --- /dev/null +++ b/src/assets/svg/llm/groq-next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/huggingface.svg b/src/assets/svg/llm/huggingface.svg new file mode 100644 index 0000000..43c5d3c --- /dev/null +++ b/src/assets/svg/llm/huggingface.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/src/assets/svg/llm/hunyuan.svg b/src/assets/svg/llm/hunyuan.svg new file mode 100644 index 0000000..43a78d0 --- /dev/null +++ b/src/assets/svg/llm/hunyuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/jina.svg b/src/assets/svg/llm/jina.svg new file mode 100644 index 0000000..6a241fc --- /dev/null +++ b/src/assets/svg/llm/jina.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/svg/llm/lepton-ai.svg b/src/assets/svg/llm/lepton-ai.svg new file mode 100644 index 0000000..b7ccd3d --- /dev/null +++ b/src/assets/svg/llm/lepton-ai.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/assets/svg/llm/lm-studio.svg b/src/assets/svg/llm/lm-studio.svg new file mode 100644 index 0000000..98d4c1d --- /dev/null +++ b/src/assets/svg/llm/lm-studio.svg @@ -0,0 +1,9704 @@ + + + + diff --git a/src/assets/svg/llm/local-ai.svg b/src/assets/svg/llm/local-ai.svg new file mode 100644 index 0000000..3be050a --- /dev/null +++ b/src/assets/svg/llm/local-ai.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/longcat.svg b/src/assets/svg/llm/longcat.svg new file mode 100644 index 0000000..f123daf --- /dev/null +++ b/src/assets/svg/llm/longcat.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/svg/llm/mistral.svg b/src/assets/svg/llm/mistral.svg new file mode 100644 index 0000000..b4a57ef --- /dev/null +++ b/src/assets/svg/llm/mistral.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/modelscope.svg b/src/assets/svg/llm/modelscope.svg new file mode 100644 index 0000000..8b3778f --- /dev/null +++ b/src/assets/svg/llm/modelscope.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg/llm/moonshot.svg b/src/assets/svg/llm/moonshot.svg new file mode 100644 index 0000000..dbaf1f6 --- /dev/null +++ b/src/assets/svg/llm/moonshot.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/llm/nomic-ai.svg b/src/assets/svg/llm/nomic-ai.svg new file mode 100644 index 0000000..26e624a --- /dev/null +++ b/src/assets/svg/llm/nomic-ai.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/svg/llm/novita-ai.svg b/src/assets/svg/llm/novita-ai.svg new file mode 100644 index 0000000..c44bd70 --- /dev/null +++ b/src/assets/svg/llm/novita-ai.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/llm/nvidia.svg b/src/assets/svg/llm/nvidia.svg new file mode 100644 index 0000000..217afaa --- /dev/null +++ b/src/assets/svg/llm/nvidia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/ollama.svg b/src/assets/svg/llm/ollama.svg new file mode 100644 index 0000000..6e9fb28 --- /dev/null +++ b/src/assets/svg/llm/ollama.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/svg/llm/open-router.svg b/src/assets/svg/llm/open-router.svg new file mode 100644 index 0000000..e6130e7 --- /dev/null +++ b/src/assets/svg/llm/open-router.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/openai-api.svg b/src/assets/svg/llm/openai-api.svg new file mode 100644 index 0000000..a0ecf99 --- /dev/null +++ b/src/assets/svg/llm/openai-api.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/openai.svg b/src/assets/svg/llm/openai.svg new file mode 100644 index 0000000..6114c7c --- /dev/null +++ b/src/assets/svg/llm/openai.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/llm/perfx-cloud.svg b/src/assets/svg/llm/perfx-cloud.svg new file mode 100644 index 0000000..3767a1e --- /dev/null +++ b/src/assets/svg/llm/perfx-cloud.svg @@ -0,0 +1,10 @@ + + logo + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/ppio.svg b/src/assets/svg/llm/ppio.svg new file mode 100644 index 0000000..eb9e9d4 --- /dev/null +++ b/src/assets/svg/llm/ppio.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/llm/replicate.svg b/src/assets/svg/llm/replicate.svg new file mode 100644 index 0000000..3124192 --- /dev/null +++ b/src/assets/svg/llm/replicate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/sentence-transformers.svg b/src/assets/svg/llm/sentence-transformers.svg new file mode 100644 index 0000000..f777b3d --- /dev/null +++ b/src/assets/svg/llm/sentence-transformers.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/siliconflow.svg b/src/assets/svg/llm/siliconflow.svg new file mode 100644 index 0000000..c678506 --- /dev/null +++ b/src/assets/svg/llm/siliconflow.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/spark.svg b/src/assets/svg/llm/spark.svg new file mode 100644 index 0000000..30f6040 --- /dev/null +++ b/src/assets/svg/llm/spark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/stepfun.svg b/src/assets/svg/llm/stepfun.svg new file mode 100644 index 0000000..919ab7f --- /dev/null +++ b/src/assets/svg/llm/stepfun.svg @@ -0,0 +1,37 @@ + + + + diff --git a/src/assets/svg/llm/tencent-cloud.svg b/src/assets/svg/llm/tencent-cloud.svg new file mode 100644 index 0000000..b33a970 --- /dev/null +++ b/src/assets/svg/llm/tencent-cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/together-ai.svg b/src/assets/svg/llm/together-ai.svg new file mode 100644 index 0000000..93e744c --- /dev/null +++ b/src/assets/svg/llm/together-ai.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/tongyi.svg b/src/assets/svg/llm/tongyi.svg new file mode 100644 index 0000000..d7104d6 --- /dev/null +++ b/src/assets/svg/llm/tongyi.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/upstage.svg b/src/assets/svg/llm/upstage.svg new file mode 100644 index 0000000..09a7512 --- /dev/null +++ b/src/assets/svg/llm/upstage.svg @@ -0,0 +1,255 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/vllm.svg b/src/assets/svg/llm/vllm.svg new file mode 100644 index 0000000..6aca384 --- /dev/null +++ b/src/assets/svg/llm/vllm.svg @@ -0,0 +1,59 @@ + + vllm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/volc_engine.svg b/src/assets/svg/llm/volc_engine.svg new file mode 100644 index 0000000..2c56cb0 --- /dev/null +++ b/src/assets/svg/llm/volc_engine.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/voyage.svg b/src/assets/svg/llm/voyage.svg new file mode 100644 index 0000000..d6bee9b --- /dev/null +++ b/src/assets/svg/llm/voyage.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/wenxin.svg b/src/assets/svg/llm/wenxin.svg new file mode 100644 index 0000000..2c673b6 --- /dev/null +++ b/src/assets/svg/llm/wenxin.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/xai.svg b/src/assets/svg/llm/xai.svg new file mode 100644 index 0000000..a6808fb --- /dev/null +++ b/src/assets/svg/llm/xai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/xinference.svg b/src/assets/svg/llm/xinference.svg new file mode 100644 index 0000000..8d2ab4f --- /dev/null +++ b/src/assets/svg/llm/xinference.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/yi.svg b/src/assets/svg/llm/yi.svg new file mode 100644 index 0000000..83ebd22 --- /dev/null +++ b/src/assets/svg/llm/yi.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/svg/llm/yiyan.svg b/src/assets/svg/llm/yiyan.svg new file mode 100644 index 0000000..4c571c3 --- /dev/null +++ b/src/assets/svg/llm/yiyan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/llm/youdao.svg b/src/assets/svg/llm/youdao.svg new file mode 100644 index 0000000..5af5885 --- /dev/null +++ b/src/assets/svg/llm/youdao.svg @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/llm/zhipu.svg b/src/assets/svg/llm/zhipu.svg new file mode 100644 index 0000000..5561830 --- /dev/null +++ b/src/assets/svg/llm/zhipu.svg @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/login-avatars.svg b/src/assets/svg/login-avatars.svg new file mode 100644 index 0000000..d235c32 --- /dev/null +++ b/src/assets/svg/login-avatars.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/login-background.svg b/src/assets/svg/login-background.svg new file mode 100644 index 0000000..ca0269d --- /dev/null +++ b/src/assets/svg/login-background.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/svg/login-star.svg b/src/assets/svg/login-star.svg new file mode 100644 index 0000000..09a8d3d --- /dev/null +++ b/src/assets/svg/login-star.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/logo-with-text-white.svg b/src/assets/svg/logo-with-text-white.svg new file mode 100644 index 0000000..048fa69 --- /dev/null +++ b/src/assets/svg/logo-with-text-white.svg @@ -0,0 +1,50 @@ + + + RAG- logos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/logout.svg b/src/assets/svg/logout.svg new file mode 100644 index 0000000..21dda40 --- /dev/null +++ b/src/assets/svg/logout.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/minio.svg b/src/assets/svg/minio.svg new file mode 100644 index 0000000..23dd107 --- /dev/null +++ b/src/assets/svg/minio.svg @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/model-providers.svg b/src/assets/svg/model-providers.svg new file mode 100644 index 0000000..7a88551 --- /dev/null +++ b/src/assets/svg/model-providers.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/moon.svg b/src/assets/svg/moon.svg new file mode 100644 index 0000000..14d49b7 --- /dev/null +++ b/src/assets/svg/moon.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/more-model.svg b/src/assets/svg/more-model.svg new file mode 100644 index 0000000..c54f885 --- /dev/null +++ b/src/assets/svg/more-model.svg @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/more.svg b/src/assets/svg/more.svg new file mode 100644 index 0000000..58ae40b --- /dev/null +++ b/src/assets/svg/more.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/move.svg b/src/assets/svg/move.svg new file mode 100644 index 0000000..1e9e7c9 --- /dev/null +++ b/src/assets/svg/move.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/mysql.svg b/src/assets/svg/mysql.svg new file mode 100644 index 0000000..05dfb70 --- /dev/null +++ b/src/assets/svg/mysql.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/navigation-pointer.svg b/src/assets/svg/navigation-pointer.svg new file mode 100644 index 0000000..b8abd68 --- /dev/null +++ b/src/assets/svg/navigation-pointer.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/next-login-bg.svg b/src/assets/svg/next-login-bg.svg new file mode 100644 index 0000000..a7c3bad --- /dev/null +++ b/src/assets/svg/next-login-bg.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/note.svg b/src/assets/svg/note.svg new file mode 100644 index 0000000..6613b71 --- /dev/null +++ b/src/assets/svg/note.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/nothing.svg b/src/assets/svg/nothing.svg new file mode 100644 index 0000000..dbbad2d --- /dev/null +++ b/src/assets/svg/nothing.svg @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/paper-clip.svg b/src/assets/svg/paper-clip.svg new file mode 100644 index 0000000..d3fdc54 --- /dev/null +++ b/src/assets/svg/paper-clip.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/password.svg b/src/assets/svg/password.svg new file mode 100644 index 0000000..dacbb24 --- /dev/null +++ b/src/assets/svg/password.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/plus-circle-fill.svg b/src/assets/svg/plus-circle-fill.svg new file mode 100644 index 0000000..118318d --- /dev/null +++ b/src/assets/svg/plus-circle-fill.svg @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/plus.svg b/src/assets/svg/plus.svg new file mode 100644 index 0000000..782d281 --- /dev/null +++ b/src/assets/svg/plus.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/assets/svg/profile.svg b/src/assets/svg/profile.svg new file mode 100644 index 0000000..65069a0 --- /dev/null +++ b/src/assets/svg/profile.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/prompt.svg b/src/assets/svg/prompt.svg new file mode 100644 index 0000000..408c30a --- /dev/null +++ b/src/assets/svg/prompt.svg @@ -0,0 +1,27 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/pubmed.svg b/src/assets/svg/pubmed.svg new file mode 100644 index 0000000..4fa2054 --- /dev/null +++ b/src/assets/svg/pubmed.svg @@ -0,0 +1,37 @@ + + + pubmed + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/qweather.svg b/src/assets/svg/qweather.svg new file mode 100644 index 0000000..78c00d5 --- /dev/null +++ b/src/assets/svg/qweather.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/redis.svg b/src/assets/svg/redis.svg new file mode 100644 index 0000000..821e5bd --- /dev/null +++ b/src/assets/svg/redis.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/refresh.svg b/src/assets/svg/refresh.svg new file mode 100644 index 0000000..0b57571 --- /dev/null +++ b/src/assets/svg/refresh.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/resize.svg b/src/assets/svg/resize.svg new file mode 100644 index 0000000..1f193f5 --- /dev/null +++ b/src/assets/svg/resize.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/run.svg b/src/assets/svg/run.svg new file mode 100644 index 0000000..c3dd697 --- /dev/null +++ b/src/assets/svg/run.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svg/searxng.svg b/src/assets/svg/searxng.svg new file mode 100644 index 0000000..8b6fd7e --- /dev/null +++ b/src/assets/svg/searxng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/svg/select-files-end.svg b/src/assets/svg/select-files-end.svg new file mode 100644 index 0000000..ab62136 --- /dev/null +++ b/src/assets/svg/select-files-end.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/select-files-start.svg b/src/assets/svg/select-files-start.svg new file mode 100644 index 0000000..e47094b --- /dev/null +++ b/src/assets/svg/select-files-start.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/selected-files-collapse.svg b/src/assets/svg/selected-files-collapse.svg new file mode 100644 index 0000000..4ef8e36 --- /dev/null +++ b/src/assets/svg/selected-files-collapse.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/sso.svg b/src/assets/svg/sso.svg new file mode 100644 index 0000000..0925d4f --- /dev/null +++ b/src/assets/svg/sso.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg/storage.svg b/src/assets/svg/storage.svg new file mode 100644 index 0000000..0cd231b --- /dev/null +++ b/src/assets/svg/storage.svg @@ -0,0 +1,6 @@ + + + storage-solid + + + \ No newline at end of file diff --git a/src/assets/svg/switch.svg b/src/assets/svg/switch.svg new file mode 100644 index 0000000..2ca5b92 --- /dev/null +++ b/src/assets/svg/switch.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/tavily.svg b/src/assets/svg/tavily.svg new file mode 100644 index 0000000..f4e5fb7 --- /dev/null +++ b/src/assets/svg/tavily.svg @@ -0,0 +1,35 @@ + + + tavily + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/team.svg b/src/assets/svg/team.svg new file mode 100644 index 0000000..36cc1d7 --- /dev/null +++ b/src/assets/svg/team.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/template.svg b/src/assets/svg/template.svg new file mode 100644 index 0000000..d3871d2 --- /dev/null +++ b/src/assets/svg/template.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/translation.svg b/src/assets/svg/translation.svg new file mode 100644 index 0000000..4ba0c14 --- /dev/null +++ b/src/assets/svg/translation.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/svg/tushare.svg b/src/assets/svg/tushare.svg new file mode 100644 index 0000000..502366c --- /dev/null +++ b/src/assets/svg/tushare.svg @@ -0,0 +1,10 @@ + + tushare + + + + + + \ No newline at end of file diff --git a/src/assets/svg/wencai.svg b/src/assets/svg/wencai.svg new file mode 100644 index 0000000..1ba940f --- /dev/null +++ b/src/assets/svg/wencai.svg @@ -0,0 +1,25 @@ + + + wencai + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/wikipedia.svg b/src/assets/svg/wikipedia.svg new file mode 100644 index 0000000..f7e0c19 --- /dev/null +++ b/src/assets/svg/wikipedia.svg @@ -0,0 +1,24 @@ + + + wikipedia + + + + + + + \ No newline at end of file diff --git a/src/assets/svg/yahoo-finance.svg b/src/assets/svg/yahoo-finance.svg new file mode 100644 index 0000000..bb6df47 --- /dev/null +++ b/src/assets/svg/yahoo-finance.svg @@ -0,0 +1,39 @@ + + + yahoofinance + + + + + + + + + \ No newline at end of file diff --git a/src/components/AppSvgIcon.tsx b/src/components/AppSvgIcon.tsx new file mode 100644 index 0000000..cb01c19 --- /dev/null +++ b/src/components/AppSvgIcon.tsx @@ -0,0 +1,81 @@ +import React from "react"; +import { SvgIcon, type SvgIconProps } from "@mui/material"; +import logger from "@/utils/logger"; + +const svgPath = '/src/assets/svg' + +interface AppSvgIconProps extends SvgIconProps { + name: string; + point: 'llm' | 'chunk' | 'file' | 'default'; +} + +const getPointPath = (point: AppSvgIconProps['point']) => { + if (point != 'default') { + if (point === 'llm') { + return '/llm' + } else if (point === 'chunk') { + return '/chunk-method' + } else if (point === 'file') { + return '/file-icon' + } + } + return '' +} + +/** + * 通用 SVG 图标组件 + * + */ +export default function AppSvgIcon(props: AppSvgIconProps) { + const { name, point = 'default', ...rest } = props; + + const pointPath = getPointPath(point); + + // 动态导入 SVG 文件 + const [Icon, setIcon] = React.useState> | null>(null); + const [loading, setLoading] = React.useState(true); + + React.useEffect(() => { + const loadIcon = async () => { + try { + setLoading(true); + const iconPath = `${svgPath}${pointPath}/${name}.svg?react`; + logger.debug(`[AppSvgIcon] 加载图标: ${iconPath}`); + + const iconModule = await import(/* @vite-ignore */ iconPath); + setIcon(() => iconModule.default); + } catch (error) { + logger.warn(`[AppSvgIcon] 未找到图标: ${name}`, error); + setIcon(null); + } finally { + setLoading(false); + } + }; + + loadIcon(); + }, [name, pointPath]); + + if (loading) { + return null; // 或者返回一个加载占位符 + } + + if (!Icon) { + logger.warn(`[AppSvgIcon] 图标加载失败: ${name}`); + return null; + } + + return ; +} + + +export function LlmSvgIcon(props: Omit) { + return ; +} + +export function ChunkSvgIcon(props: Omit) { + return ; +} + +export function FileSvgIcon(props: Omit) { + return ; +} \ No newline at end of file diff --git a/src/constants/common.ts b/src/constants/common.ts index e69de29..cacd95f 100644 --- a/src/constants/common.ts +++ b/src/constants/common.ts @@ -0,0 +1,164 @@ +export const fileIconMap = { + aep: 'aep.svg', + ai: 'ai.svg', + avi: 'avi.svg', + css: 'css.svg', + csv: 'csv.svg', + dmg: 'dmg.svg', + doc: 'doc.svg', + docx: 'docx.svg', + eps: 'eps.svg', + exe: 'exe.svg', + fig: 'fig.svg', + gif: 'gif.svg', + html: 'html.svg', + indd: 'indd.svg', + java: 'java.svg', + jpeg: 'jpeg.svg', + jpg: 'jpg.svg', + js: 'js.svg', + json: 'json.svg', + mkv: 'mkv.svg', + mp3: 'mp3.svg', + mp4: 'mp4.svg', + mpeg: 'mpeg.svg', + pdf: 'pdf.svg', + png: 'png.svg', + ppt: 'ppt.svg', + pptx: 'pptx.svg', + psd: 'psd.svg', + rss: 'rss.svg', + sql: 'sql.svg', + svg: 'svg.svg', + tiff: 'tiff.svg', + txt: 'txt.svg', + wav: 'wav.svg', + webp: 'webp.svg', + xls: 'xls.svg', + xlsx: 'xlsx.svg', + xml: 'xml.svg', +}; + +export const LanguageList = [ + 'English', + 'Chinese', + 'Traditional Chinese', + 'Indonesia', + 'Spanish', + 'Vietnamese', + 'Japanese', + 'Portuguese BR', + 'German', + 'French', +]; +export const LanguageMap = { + English: 'English', + Chinese: '简体中文', + 'Traditional Chinese': '繁體中文', + Indonesia: 'Indonesia', + Spanish: 'Español', + Vietnamese: 'Tiếng việt', + Japanese: '日本語', + 'Portuguese BR': 'Português BR', + German: 'German', + French: 'Français', +}; + +export const LANUGAGE_ABBREVIATION_TYPE = Object.freeze({ + En: 'en', + Zh: 'zh', + ZhTraditional: 'zh-TRADITIONAL', + Id: 'id', + Ja: 'ja', + Es: 'es', + Vi: 'vi', + PtBr: 'pt-BR', + De: 'de', + Fr: 'fr', +} as const) + +export type LanguageAbbreviation = (typeof LANUGAGE_ABBREVIATION_TYPE)[keyof typeof LANUGAGE_ABBREVIATION_TYPE] + +export const LanguageAbbreviationMap = { + [LANUGAGE_ABBREVIATION_TYPE.En]: 'English', + [LANUGAGE_ABBREVIATION_TYPE.Zh]: '简体中文', + [LANUGAGE_ABBREVIATION_TYPE.ZhTraditional]: '繁體中文', + [LANUGAGE_ABBREVIATION_TYPE.Id]: 'Indonesia', + [LANUGAGE_ABBREVIATION_TYPE.Es]: 'Español', + [LANUGAGE_ABBREVIATION_TYPE.Vi]: 'Tiếng việt', + [LANUGAGE_ABBREVIATION_TYPE.Ja]: '日本語', + [LANUGAGE_ABBREVIATION_TYPE.PtBr]: 'Português BR', + [LANUGAGE_ABBREVIATION_TYPE.De]: 'Deutsch', + [LANUGAGE_ABBREVIATION_TYPE.Fr]: 'Français', +}; + +export const LanguageTranslationMap = { + English: 'en', + Chinese: 'zh', + 'Traditional Chinese': 'zh-TRADITIONAL', + Indonesia: 'id', + Spanish: 'es', + Vietnamese: 'vi', + Japanese: 'ja', + 'Portuguese BR': 'pt-br', + German: 'de', + French: 'fr', +}; + +export const FILE_MINE_TYPE = Object.freeze({ + Bmp: 'image/bmp', + Csv: 'text/csv', + Odt: 'application/vnd.oasis.opendocument.text', + Doc: 'application/msword', + Docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + Gif: 'image/gif', + Htm: 'text/htm', + Html: 'text/html', + Jpg: 'image/jpg', + Jpeg: 'image/jpeg', + Pdf: 'application/pdf', + Png: 'image/png', + Ppt: 'application/vnd.ms-powerpoint', + Pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + Tiff: 'image/tiff', + Txt: 'text/plain', + Xls: 'application/vnd.ms-excel', + Xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + Mp4: 'video/mp4', + Json: 'application/json', +} as const) + +export type FileMimeType = (typeof FILE_MINE_TYPE)[keyof typeof FILE_MINE_TYPE] + +//#region file preview +export const Images = [ + 'jpg', + 'jpeg', + 'png', + 'gif', + 'bmp', + 'tif', + 'tiff', + 'webp', + // 'svg', + 'ico', +]; + +// Without FileViewer +export const ExceptiveType = ['xlsx', 'xls', 'pdf', 'docx', ...Images]; + +export const SupportedPreviewDocumentTypes = [...ExceptiveType]; +//#endregion + +// export enum Platform { +// RAGFlow = 'RAGFlow', +// Dify = 'Dify', +// FastGPT = 'FastGPT', +// Coze = 'Coze', +// } + +// export enum ThemeEnum { +// Dark = 'dark', +// Light = 'light', +// System = 'system', +// } diff --git a/src/hooks/setting-hooks.ts b/src/hooks/setting-hooks.ts index 7c0fb0e..b790f3d 100644 --- a/src/hooks/setting-hooks.ts +++ b/src/hooks/setting-hooks.ts @@ -1,10 +1,15 @@ import { useUserData } from "./useUserData"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import logger from "@/utils/logger"; import type { IUserInfo } from "@/interfaces/database/user-setting"; import userService from "@/services/user_service"; import { rsaPsw } from "../utils/encryption"; +import type { IFactory, IMyLlmModel } from "@/interfaces/database/llm"; +import type { LLMFactory } from "@/constants/llm"; +/** + * 个人中心设置 + */ export function useProfileSetting() { const {fetchUserInfo, userInfo} = useUserData(); @@ -39,4 +44,45 @@ export function useProfileSetting() { updateUserInfo, changeUserPassword, }; -} \ No newline at end of file +} + +/** + * LLM 模型设置 + */ +export function useLlmModelSetting() { + const [llmFactory, setLlmFactory] = useState([]); + const [myLlm, setMyLlm] = useState>(); + + useEffect(() => { + const fetchLlmFactory = async () => { + try { + const res = await userService.llm_factories_list(); + const arr = res.data.data || []; + setLlmFactory(arr); + } catch (error) { + logger.error('获取模型工厂失败:', error); + throw error; + } + } + + const fetchMyLlm = async () => { + try { + const res = await userService.my_llm(); + const llm_dic = res.data.data || {}; + setMyLlm(llm_dic); + } catch (error) { + logger.error('获取我的模型失败:', error); + throw error; + } + } + + fetchLlmFactory(); + fetchMyLlm(); + }, []); // 空依赖数组,只在组件挂载时执行一次 + + return { + llmFactory, + myLlm, + } +} + diff --git a/src/interfaces/database/llm.ts b/src/interfaces/database/llm.ts index 2608e5a..0f563ec 100644 --- a/src/interfaces/database/llm.ts +++ b/src/interfaces/database/llm.ts @@ -18,23 +18,43 @@ export interface IThirdOAIModel { export type IThirdOAIModelCollection = Record; +/** + * 模型工厂 +{ + "create_date": "Sun, 28 Sep 2025 11:30:34 GMT", + "create_time": 1759030234446, + "logo": "", + "model_types": [ + "chat", + "image2text" + ], + "name": "01.AI", + "status": "1", + "tags": "LLM,IMAGE2TEXT", + "update_date": "Sun, 28 Sep 2025 11:30:34 GMT", + "update_time": 1759030234446 +} + */ export interface IFactory { create_date: string; create_time: number; logo: string; name: string; status: string; + model_types: string[]; tags: string; update_date: string; update_time: number; } -export interface IMyLlmValue { - llm: Llm[]; +export interface IMyLlmModel { + llm: ILlmItem[]; tags: string; } -export interface Llm { +export interface ILlmItem { + api_base: string; + max_tokens: number; name: string; type: string; used_token: number; diff --git a/src/pages/setting/components/LLMFactoryCard.tsx b/src/pages/setting/components/LLMFactoryCard.tsx new file mode 100644 index 0000000..4819f66 --- /dev/null +++ b/src/pages/setting/components/LLMFactoryCard.tsx @@ -0,0 +1,12 @@ +import { Box, Typography } from "@mui/material"; + +function LLMFactoryCard() { + return ( + + + + + ) +} + +export default LLMFactoryCard; diff --git a/src/pages/setting/components/ModelDialogs.tsx b/src/pages/setting/components/ModelDialogs.tsx new file mode 100644 index 0000000..aea3ed7 --- /dev/null +++ b/src/pages/setting/components/ModelDialogs.tsx @@ -0,0 +1,601 @@ +import React, { useEffect } from 'react'; +import { + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Button, + TextField, + FormControl, + InputLabel, + Select, + MenuItem, + Box, + Typography, + Alert, + CircularProgress, + IconButton, + InputAdornment, +} from '@mui/material'; +import { Visibility, VisibilityOff } from '@mui/icons-material'; +import { useForm, Controller } from 'react-hook-form'; + +// 接口定义 +export interface ApiKeyFormData { + api_key: string; + base_url?: string; + group_id?: string; +} + +export interface AzureOpenAIFormData { + api_key: string; + azure_endpoint: string; + api_version: string; + deployment_name: string; +} + +export interface BedrockFormData { + access_key_id: string; + secret_access_key: string; + region: string; +} + +export interface OllamaFormData { + base_url: string; + model_name: string; +} + +// Bedrock 区域列表 +const BEDROCK_REGIONS = [ + 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2', + 'eu-west-1', 'eu-west-2', 'eu-central-1', 'eu-north-1', + 'ap-southeast-1', 'ap-southeast-2', 'ap-northeast-1', 'ap-northeast-2', + 'ap-south-1', 'ca-central-1', 'sa-east-1' +]; + +// 通用 API Key 对话框 +interface ApiKeyDialogProps { + open: boolean; + onClose: () => void; + onSubmit: (data: ApiKeyFormData) => Promise; + loading: boolean; + factoryName: string; + initialData?: Partial; + editMode?: boolean; +} + +/** + * 通用 API Key 对话框 + */ +export const ApiKeyDialog: React.FC = ({ + open, + onClose, + onSubmit, + loading, + factoryName, + initialData, + editMode = false +}) => { + const { control, handleSubmit, reset, formState: { errors } } = useForm({ + defaultValues: { + api_key: '', + base_url: '', + group_id: '' + } + }); + const [showApiKey, setShowApiKey] = React.useState(false); + + useEffect(() => { + if (open && initialData) { + reset(initialData); + } else if (open) { + reset({ api_key: '', base_url: '', group_id: '' }); + } + }, [open, initialData, reset]); + + const handleFormSubmit = async (data: ApiKeyFormData) => { + try { + await onSubmit(data); + onClose(); + } catch (error) { + console.error('提交失败:', error); + } + }; + + const needsBaseUrl = ['OpenAI', 'AzureOpenAI'].includes(factoryName); + const needsGroupId = factoryName.toLowerCase() === 'minimax'; + + return ( + + + {editMode ? `编辑 ${factoryName}` : `配置 ${factoryName}`} + + + + ( + + setShowApiKey(!showApiKey)} + edge="end" + > + {showApiKey ? : } + + + ), + }} + /> + )} + /> + + {needsBaseUrl && ( + ( + + )} + /> + )} + + {needsGroupId && ( + ( + + )} + /> + )} + + + + + + + + ); +}; + +// Azure OpenAI 对话框 +interface AzureOpenAIDialogProps { + open: boolean; + onClose: () => void; + onSubmit: (data: AzureOpenAIFormData) => Promise; + loading: boolean; + initialData?: Partial; + editMode?: boolean; +} + +/** + * Azure OpenAI 对话框 + */ +export const AzureOpenAIDialog: React.FC = ({ + open, + onClose, + onSubmit, + loading, + initialData, + editMode = false +}) => { + const { control, handleSubmit, reset, formState: { errors } } = useForm({ + defaultValues: { + api_key: '', + azure_endpoint: '', + api_version: '2023-12-01-preview', + deployment_name: '' + } + }); + const [showApiKey, setShowApiKey] = React.useState(false); + + useEffect(() => { + if (open && initialData) { + reset(initialData); + } else if (open) { + reset({ + api_key: '', + azure_endpoint: '', + api_version: '2023-12-01-preview', + deployment_name: '' + }); + } + }, [open, initialData, reset]); + + const handleFormSubmit = async (data: AzureOpenAIFormData) => { + try { + await onSubmit(data); + onClose(); + } catch (error) { + console.error('提交失败:', error); + } + }; + + return ( + + + {editMode ? '编辑 Azure OpenAI' : '配置 Azure OpenAI'} + + + + ( + + setShowApiKey(!showApiKey)} + edge="end" + > + {showApiKey ? : } + + + ), + }} + /> + )} + /> + + ( + + )} + /> + + ( + + )} + /> + + ( + + )} + /> + + + + + + + + ); +}; + +// AWS Bedrock 对话框 +interface BedrockDialogProps { + open: boolean; + onClose: () => void; + onSubmit: (data: BedrockFormData) => Promise; + loading: boolean; + initialData?: Partial; + editMode?: boolean; +} + +/** + * AWS Bedrock 对话框 + */ +export const BedrockDialog: React.FC = ({ + open, + onClose, + onSubmit, + loading, + initialData, + editMode = false +}) => { + const { control, handleSubmit, reset, formState: { errors } } = useForm({ + defaultValues: { + access_key_id: '', + secret_access_key: '', + region: 'us-east-1' + } + }); + const [showSecretKey, setShowSecretKey] = React.useState(false); + + useEffect(() => { + if (open && initialData) { + reset(initialData); + } else if (open) { + reset({ + access_key_id: '', + secret_access_key: '', + region: 'us-east-1' + }); + } + }, [open, initialData, reset]); + + const handleFormSubmit = async (data: BedrockFormData) => { + try { + await onSubmit(data); + onClose(); + } catch (error) { + console.error('提交失败:', error); + } + }; + + return ( + + + {editMode ? '编辑 AWS Bedrock' : '配置 AWS Bedrock'} + + + + ( + + )} + /> + + ( + + setShowSecretKey(!showSecretKey)} + edge="end" + > + {showSecretKey ? : } + + + ), + }} + /> + )} + /> + + ( + + Region + + {errors.region && ( + + {errors.region.message} + + )} + + )} + /> + + + + + + + + ); +}; + +interface OllamaDialogProps { + open: boolean; + onClose: () => void; + onSubmit: (data: OllamaFormData) => Promise; + loading: boolean; + initialData?: Partial; + editMode?: boolean; +} + +/** + * Ollama 对话框 + */ +export const OllamaDialog: React.FC = ({ + open, + onClose, + onSubmit, + loading, + initialData, + editMode = false +}) => { + const { control, handleSubmit, reset, formState: { errors } } = useForm({ + defaultValues: { + base_url: 'http://localhost:11434', + model_name: '' + } + }); + + useEffect(() => { + if (open && initialData) { + reset(initialData); + } else if (open) { + reset({ + base_url: 'http://localhost:11434', + model_name: '' + }); + } + }, [open, initialData, reset]); + + const handleFormSubmit = async (data: OllamaFormData) => { + try { + await onSubmit(data); + onClose(); + } catch (error) { + console.error('提交失败:', error); + } + }; + + return ( + + + {editMode ? '编辑 Ollama' : '配置 Ollama'} + + + + 请确保 Ollama 服务正在运行,并且可以通过指定的 URL 访问。 + + + ( + + )} + /> + + ( + + )} + /> + + + + + + + + ); +}; \ No newline at end of file diff --git a/src/pages/setting/hooks/useModelDialogs.ts b/src/pages/setting/hooks/useModelDialogs.ts new file mode 100644 index 0000000..236cc9b --- /dev/null +++ b/src/pages/setting/hooks/useModelDialogs.ts @@ -0,0 +1,288 @@ +import { useState, useCallback } from 'react'; +import { useMessage } from '@/hooks/useSnackbar'; +import userService from '@/services/user_service'; +import logger from '@/utils/logger'; +import type { + ApiKeyFormData, + AzureOpenAIFormData, + BedrockFormData, + OllamaFormData, +} from '../components/ModelDialogs'; + +// 对话框状态管理 hook +export const useDialogState = () => { + const [open, setOpen] = useState(false); + const [loading, setLoading] = useState(false); + const [editMode, setEditMode] = useState(false); + const [initialData, setInitialData] = useState(null); + + const openDialog = useCallback((data?: any, isEdit = false) => { + setInitialData(data); + setEditMode(isEdit); + setOpen(true); + }, []); + + const closeDialog = useCallback(() => { + setOpen(false); + setInitialData(null); + setEditMode(false); + }, []); + + return { + open, + loading, + editMode, + initialData, + setLoading, + openDialog, + closeDialog, + }; +}; + +// API Key 对话框管理 +export const useApiKeyDialog = () => { + const dialogState = useDialogState(); + const showMessage = useMessage(); + const [factoryName, setFactoryName] = useState(''); + + const openApiKeyDialog = useCallback((factory: string, data?: Partial, isEdit = false) => { + setFactoryName(factory); + dialogState.openDialog(data, isEdit); + }, [dialogState]); + + const submitApiKey = useCallback(async (data: ApiKeyFormData) => { + dialogState.setLoading(true); + try { + await userService.set_api_key({ + factory_name: factoryName, + model_name: '', // 根据实际需求调整 + // api_key: data.api_key, + ...data + }); + showMessage.success('API Key 配置成功'); + dialogState.closeDialog(); + } catch (error) { + logger.error('API Key 配置失败:', error); + showMessage.error('API Key 配置失败'); + throw error; + } finally { + dialogState.setLoading(false); + } + }, [factoryName, dialogState]); + + return { + ...dialogState, + factoryName, + openApiKeyDialog, + submitApiKey, + }; +}; + +// Azure OpenAI 对话框管理 +export const useAzureOpenAIDialog = () => { + const dialogState = useDialogState(); + const showMessage = useMessage(); + + const submitAzureOpenAI = useCallback(async (data: AzureOpenAIFormData) => { + dialogState.setLoading(true); + try { + // 调用 Azure OpenAI 特定的 API + await userService.set_api_key({ + factory_name: 'AzureOpenAI', + model_name: data.deployment_name, + api_key: data.api_key, + // azure_endpoint: data.azure_endpoint, + // api_version: data.api_version, + }); + showMessage.success('Azure OpenAI 配置成功'); + dialogState.closeDialog(); + } catch (error) { + logger.error('Azure OpenAI 配置失败:', error); + showMessage.error('Azure OpenAI 配置失败'); + throw error; + } finally { + dialogState.setLoading(false); + } + }, [dialogState]); + + return { + ...dialogState, + submitAzureOpenAI, + }; +}; + +// AWS Bedrock 对话框管理 +export const useBedrockDialog = () => { + const dialogState = useDialogState(); + const showMessage = useMessage(); + + const submitBedrock = useCallback(async (data: BedrockFormData) => { + dialogState.setLoading(true); + try { + // 调用 Bedrock 特定的 API + await userService.set_api_key({ + factory_name: 'Bedrock', + model_name: '', + api_key: '', // Bedrock 使用 access key + // access_key_id: data.access_key_id, + // secret_access_key: data.secret_access_key, + // region: data.region, + }); + showMessage.success('AWS Bedrock 配置成功'); + dialogState.closeDialog(); + } catch (error) { + logger.error('AWS Bedrock 配置失败:', error); + showMessage.error('AWS Bedrock 配置失败'); + throw error; + } finally { + dialogState.setLoading(false); + } + }, [dialogState]); + + return { + ...dialogState, + submitBedrock, + }; +}; + +// Ollama 对话框管理 +export const useOllamaDialog = () => { + const dialogState = useDialogState(); + const showMessage = useMessage(); + + const submitOllama = useCallback(async (data: OllamaFormData) => { + dialogState.setLoading(true); + try { + // 调用添加 LLM 的 API + await userService.add_llm({ + factory_name: 'Ollama', + model_name: data.model_name, + // base_url: data.base_url, + }); + showMessage.success('Ollama 模型添加成功'); + dialogState.closeDialog(); + } catch (error) { + logger.error('Ollama 模型添加失败:', error); + showMessage.error('Ollama 模型添加失败'); + throw error; + } finally { + dialogState.setLoading(false); + } + }, [dialogState]); + + return { + ...dialogState, + submitOllama, + }; +}; + +// 删除操作管理 +export const useDeleteOperations = () => { + const showMessage = useMessage(); + const [loading, setLoading] = useState(false); + + const deleteLlm = useCallback(async (factoryName: string, modelName: string) => { + setLoading(true); + try { + await userService.delete_llm({ + factory_name: factoryName, + model_name: modelName, + }); + showMessage.success('模型删除成功'); + } catch (error) { + logger.error('模型删除失败:', error); + showMessage.error('模型删除失败'); + throw error; + } finally { + setLoading(false); + } + }, []); + + const deleteFactory = useCallback(async (factoryName: string) => { + setLoading(true); + try { + await userService.deleteFactory({ + factory_name: factoryName, + }); + showMessage.success('模型工厂删除成功'); + } catch (error) { + logger.error('模型工厂删除失败:', error); + showMessage.error('模型工厂删除失败'); + throw error; + } finally { + setLoading(false); + } + }, []); + + return { + loading, + deleteLlm, + deleteFactory, + }; +}; + +// 系统默认模型设置 +export const useSystemModelSetting = () => { + const dialogState = useDialogState(); + const showMessage = useMessage(); + + const submitSystemModelSetting = useCallback(async (data: { defaultModel: string }) => { + dialogState.setLoading(true); + try { + // 这里需要根据实际的 API 接口调整 + // await userService.setSystemDefaultModel(data); + showMessage.success('系统默认模型设置成功'); + dialogState.closeDialog(); + } catch (error) { + logger.error('系统默认模型设置失败:', error); + showMessage.error('系统默认模型设置失败'); + throw error; + } finally { + dialogState.setLoading(false); + } + }, [dialogState]); + + return { + ...dialogState, + submitSystemModelSetting, + }; +}; + +// 统一的模型对话框管理器 +export const useModelDialogs = () => { + const apiKeyDialog = useApiKeyDialog(); + const azureDialog = useAzureOpenAIDialog(); + const bedrockDialog = useBedrockDialog(); + const ollamaDialog = useOllamaDialog(); + const systemDialog = useSystemModelSetting(); + const deleteOps = useDeleteOperations(); + + // 根据工厂类型打开对应的对话框 + const openFactoryDialog = useCallback((factoryName: string, data?: any, isEdit = false) => { + switch (factoryName.toLowerCase()) { + case 'azureopenai': + azureDialog.openDialog(data, isEdit); + break; + case 'bedrock': + bedrockDialog.openDialog(data, isEdit); + break; + case 'ollama': + ollamaDialog.openDialog(data, isEdit); + break; + default: + // 默认使用 API Key 对话框 + apiKeyDialog.openApiKeyDialog(factoryName, data, isEdit); + break; + } + }, [apiKeyDialog, azureDialog, bedrockDialog, ollamaDialog]); + + return { + apiKeyDialog, + azureDialog, + bedrockDialog, + ollamaDialog, + systemDialog, + deleteOps, + openFactoryDialog, + }; +}; \ No newline at end of file diff --git a/src/pages/setting/models-setting-reference.md b/src/pages/setting/models-setting-reference.md new file mode 100644 index 0000000..826de8a --- /dev/null +++ b/src/pages/setting/models-setting-reference.md @@ -0,0 +1,119 @@ +# Models Setting 页面功能分析 + +## 概述 +Models Setting 页面是一个复杂的模型管理界面,主要用于管理 LLM 模型工厂和用户的个人模型配置。 + +## 主要功能模块 + +### 1. 核心数据结构 +- **LLM Factory**: 模型工厂列表,包含各种 AI 服务提供商 +- **My LLM**: 用户已配置的模型列表 +- **Model Types**: 支持多种模型类型(LLM、TEXT EMBEDDING、TEXT RE-RANK、TTS、SPEECH2TEXT、IMAGE2TEXT、MODERATION) + +### 2. 支持的模型工厂 +根据参考代码,支持以下模型工厂: +- **OpenAI**: 通用 API Key 配置 +- **Azure OpenAI**: 需要特殊配置的 Azure 服务 +- **Google Cloud**: Google 云服务模型 +- **AWS Bedrock**: Amazon 的 AI 服务 +- **Ollama**: 本地部署模型 +- **VolcEngine**: 火山引擎 +- **Tencent HunYuan**: 腾讯混元 +- **XunFei Spark**: 讯飞星火 +- **Baidu YiYan**: 百度一言 +- **Fish Audio**: 语音合成服务 +- **Tencent Cloud**: 腾讯云 +- **Langfuse**: 模型监控和分析 + +### 3. 主要组件结构 + +#### 3.1 主页面组件 (index.tsx) +- **ModelCard**: 模型工厂卡片组件 + - 显示工厂信息、支持的模型类型标签 + - 提供配置按钮(API Key 或添加模型) + - 显示/隐藏模型列表功能 + - 删除工厂功能 +- **模型列表**: 展示每个工厂下的具体模型 + - 模型名称和类型 + - 编辑和删除操作 + +#### 3.2 配置模态框组件 +每个模型工厂都有对应的配置模态框: + +- **api-key-modal**: 通用 API Key 配置 + - API Key 输入 + - Base URL 配置(OpenAI 等) + - Group ID 配置(Minimax 等) + +- **azure-openai-modal**: Azure OpenAI 特殊配置 +- **google-modal**: Google Cloud 配置 +- **bedrock-modal**: AWS Bedrock 配置 +- **ollama-modal**: Ollama 本地模型配置 +- **volcengine-modal**: 火山引擎配置 +- **hunyuan-modal**: 腾讯混元配置 +- **spark-modal**: 讯飞星火配置 +- **yiyan-modal**: 百度一言配置 +- **fish-audio-modal**: Fish Audio 配置 +- **next-tencent-modal**: 腾讯云配置 + +#### 3.3 系统设置 +- **system-model-setting-modal**: 系统默认模型设置 +- **langfuse**: 模型监控和分析配置 + +### 4. 状态管理 (hooks.ts) +提供统一的状态管理 hooks: +- **useSubmitApiKey**: API Key 配置状态管理 +- **useSubmitAzure**: Azure 配置状态管理 +- **useSubmitGoogle**: Google 配置状态管理 +- **useSubmitBedrock**: Bedrock 配置状态管理 +- **useSubmitOllama**: Ollama 配置状态管理 +- **useSubmitSystemModelSetting**: 系统模型设置状态管理 +- **useHandleDeleteLlm**: 删除模型操作 +- **useHandleDeleteFactory**: 删除工厂操作 + +### 5. 常量配置 (constant.ts) +- **BedrockRegionList**: AWS Bedrock 支持的区域列表 + +## 用户交互流程 + +### 5.1 添加模型工厂 +1. 用户点击"添加模型"或"API-Key"按钮 +2. 根据工厂类型打开对应的配置模态框 +3. 用户填写必要的配置信息(API Key、Base URL 等) +4. 提交配置,系统验证并保存 + +### 5.2 管理已有模型 +1. 查看模型工厂卡片,显示基本信息和标签 +2. 点击"显示更多模型"查看具体模型列表 +3. 对单个模型进行编辑或删除操作 +4. 删除整个模型工厂 + +### 5.3 系统设置 +1. 设置系统默认使用的 LLM 模型 +2. 配置模型监控和分析工具 + +## 技术特点 + +### 6.1 模块化设计 +- 每个模型工厂都有独立的配置组件 +- 统一的状态管理和操作接口 +- 可扩展的架构设计 + +### 6.2 用户体验 +- 直观的卡片式布局 +- 标签系统清晰显示模型能力 +- 折叠/展开功能优化空间利用 +- 确认对话框防止误操作 + +### 6.3 数据处理 +- 支持多种配置参数 +- 实时验证和错误处理 +- 本地和云端模型统一管理 + +## 实现要点 + +1. **组件复用**: 通用的模态框组件可以复用基础结构 +2. **状态管理**: 使用 hooks 统一管理各种模态框的显示状态 +3. **类型安全**: 严格的 TypeScript 类型定义 +4. **错误处理**: 完善的表单验证和错误提示 +5. **国际化**: 支持多语言界面 \ No newline at end of file diff --git a/src/pages/setting/models.tsx b/src/pages/setting/models.tsx index ead1a46..7d29350 100644 --- a/src/pages/setting/models.tsx +++ b/src/pages/setting/models.tsx @@ -1,9 +1,457 @@ -function ModelsSetting() { - return ( -
-

Model Setting

-
- ); +import React, { useState, useCallback } from 'react'; +import { + Box, + Typography, + Card, + CardContent, + Button, + Chip, + IconButton, + Collapse, + Grid, + Divider, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + InputLabel, + Select, + MenuItem, + Alert, + CircularProgress, + Tooltip, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, + ExpandLess as ExpandLessIcon, + Settings as SettingsIcon, + Delete as DeleteIcon, + Edit as EditIcon, + Add as AddIcon, + Visibility as VisibilityIcon, + VisibilityOff as VisibilityOffIcon, +} from '@mui/icons-material'; +import { useLlmModelSetting } from '@/hooks/setting-hooks'; +import { useModelDialogs } from './hooks/useModelDialogs'; +import { LlmSvgIcon } from '@/components/AppSvgIcon'; +import { LLM_FACTORY_LIST, IconMap, type LLMFactory } from '@/constants/llm'; +import type { IFactory, IMyLlmModel, ILlmItem } from '@/interfaces/database/llm'; + +// 模型类型标签颜色映射 +const MODEL_TYPE_COLORS: Record = { + 'LLM': '#1976d2', + 'TEXT EMBEDDING': '#388e3c', + 'TEXT RE-RANK': '#f57c00', + 'TTS': '#7b1fa2', + 'SPEECH2TEXT': '#c2185b', + 'IMAGE2TEXT': '#5d4037', + 'MODERATION': '#455a64', +}; + +// 模型工厂卡片组件 +interface ModelFactoryCardProps { + factory: IFactory; + myModels: ILlmItem[]; + onConfigure: (factory: IFactory) => void; + onDeleteFactory: (factoryName: string) => void; + onDeleteModel: (factoryName: string, modelName: string) => void; + onEditModel: (factory: IFactory, model: ILlmItem) => void; } -export default ModelsSetting; \ No newline at end of file +const ModelFactoryCard: React.FC = ({ + factory, + myModels, + onConfigure, + onDeleteFactory, + onDeleteModel, + onEditModel, +}) => { + const [expanded, setExpanded] = useState(false); + const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); + + const handleExpandClick = () => { + setExpanded(!expanded); + }; + + const handleDeleteFactory = () => { + onDeleteFactory(factory.name); + setShowDeleteConfirm(false); + }; + + // 获取工厂图标名称 + const getFactoryIconName = (factoryName: LLMFactory) => { + return IconMap[factoryName] || 'default'; + }; + + return ( + <> + + + + + + + + {factory.name} + + + {factory.model_types.map((type) => ( + + ))} + + + + + + {myModels.length > 0 && ( + + {expanded ? : } + + )} + setShowDeleteConfirm(true)} + > + + + + + + + + + 已配置的模型 ({myModels.length}) + + + {myModels.map((model) => ( + + + + + + {model.name} + + + {model.type} + + + Max Tokens: {model.max_tokens} + + + Used: {model.used_token} + + + + onEditModel(factory, model)} + > + + + onDeleteModel(factory.name, model.name)} + > + + + + + + + ))} + + + + + + {/* 删除确认对话框 */} + setShowDeleteConfirm(false)}> + 确认删除 + + + 确定要删除模型工厂 "{factory.name}" 吗?这将删除该工厂下的所有模型配置。 + + + + + + + + + ); +}; + +// 系统默认模型设置组件 +interface SystemModelSettingProps { + myLlm: Record | undefined; +} + +const SystemModelSetting: React.FC = ({ myLlm }) => { + const [defaultModel, setDefaultModel] = useState(''); + const [loading, setLoading] = useState(false); + + // 获取所有可用的聊天模型 + const chatModels = myLlm ? Object.values(myLlm).flatMap(group => + group.llm.filter(model => model.type.toLowerCase().includes('chat') || model.type.toLowerCase().includes('llm')) + ) : []; + + const handleSaveDefaultModel = async () => { + if (!defaultModel) return; + + setLoading(true); + try { + // TODO: 调用设置系统默认模型的 API + console.log('Setting default model:', defaultModel); + // await userService.setSystemDefaultModel({ model: defaultModel }); + } catch (error) { + console.error('设置默认模型失败:', error); + } finally { + setLoading(false); + } + }; + + return ( + + + + 系统默认 LLM 模型 + + + 设置系统默认使用的大语言模型,用于对话和文本生成任务。 + + + + 选择默认模型 + + + + + + + ); +}; + +// 主页面组件 +function ModelsPage() { + const { llmFactory, myLlm } = useLlmModelSetting(); + const modelDialogs = useModelDialogs(); + + // 处理配置模型工厂 + const handleConfigureFactory = useCallback((factory: IFactory) => { + // modelDialogs.openDialog(factory.name); + }, [modelDialogs]); + + // 处理删除模型工厂 + const handleDeleteFactory = useCallback(async (factoryName: string) => { + try { + // await modelDialogs.deleteOperations.deleteFactory(factoryName); + // 刷新数据 + window.location.reload(); + } catch (error) { + console.error('删除工厂失败:', error); + } + }, []); + + // 处理删除单个模型 + const handleDeleteModel = useCallback(async (factoryName: string, modelName: string) => { + try { + // await modelDialogs.deleteOperations.deleteLlm(factoryName, modelName); + // 刷新数据 + window.location.reload(); + } catch (error) { + console.error('删除模型失败:', error); + } + }, []); + + // 处理编辑模型 + const handleEditModel = useCallback((factory: IFactory, model: ILlmItem) => { + // 设置编辑模式并打开对话框 + // modelDialogs.openDialog(factory.name, { + // model_name: model.name, + // api_base: model.api_base, + // max_tokens: model.max_tokens, + // }); + }, [modelDialogs]); + + // 根据工厂名称获取对应的模型列表 + const getModelsForFactory = (factoryName: LLMFactory): ILlmItem[] => { + if (!myLlm) return []; + const factoryGroup = myLlm[factoryName]; + return factoryGroup?.llm || []; + }; + + if (!llmFactory || !myLlm) { + return ( + + + + ); + } + + return ( + + + 模型设置 + + + 管理您的 LLM 模型工厂和个人模型配置 + + + {/* 系统默认模型设置 */} + + + {/* My LLM 部分 */} + {/* + + 我的 LLM 模型 + + {!myLlm || Object.keys(myLlm).length === 0 ? ( + + 您还没有配置任何 LLM 模型。请在下方的模型工厂中进行配置。 + + ) : ( + + {Object.entries(myLlm).map(([factoryName, group]) => ( + + + + + {factoryName} + + + {group.tags.split(',').map((tag) => ( + + ))} + + + {group.llm.map((model) => ( + + + + + {model.name} + + + handleEditModel({ name: factoryName } as IFactory, model)} + > + + + handleDeleteModel(factoryName, model.name)} + > + + + + + + + Max Tokens: {model.max_tokens} + + + Used: {model.used_token} + + {model.api_base && ( + + Base URL: {model.api_base} + + )} + + + ))} + + + + + ))} + + )} + */} + + {/* LLM Factory 部分 */} + + + LLM 模型工厂 + + + 配置各种 AI 服务提供商的模型 + + + {llmFactory.map((factory) => ( + + ))} + + + {/* 模型配置对话框 */} + {/* */} + + ); +}; + +export default ModelsPage; \ No newline at end of file diff --git a/src/services/user_service.ts b/src/services/user_service.ts index 3f0c834..51b527b 100644 --- a/src/services/user_service.ts +++ b/src/services/user_service.ts @@ -36,16 +36,6 @@ const userService = { return post(api.setting, data); }, - // 获取租户信息 - getTenantInfo: () => { - return request.get(api.tenant_info); - }, - - // 设置租户信息 - setTenantInfo: (data: ITenantInfo) => { - return post(api.set_tenant_info, data); - }, - // 获取登录渠道 getLoginChannels: () => { return request.get(api.login_channels); @@ -56,6 +46,16 @@ const userService = { window.location.href = api.login_channel(channel); }, + /** 租户用户管理接口 */ + // 获取租户信息 + getTenantInfo: () => { + return request.get(api.tenant_info); + }, + + // 设置租户信息 + setTenantInfo: (data: ITenantInfo) => { + return post(api.set_tenant_info, data); + }, // 租户用户管理 listTenantUser: (tenantId: string) => { return request.get(api.listTenantUser(tenantId)); @@ -78,10 +78,41 @@ const userService = { return request.put(api.agreeTenant(tenantId)); }, - // 获取LLM模型列表 + /** LLM 模型相关接口 */ + // llm list llm_list: (data: { model_type?: LlmModelType }) => { return request.get(api.llm_list, { params: data }); }, + + // my llm list + my_llm: (params: { include_details?: boolean } = {}) => { + return request.get(api.my_llm, { params: { include_details: params.include_details } }); + }, + + // llm factory list + llm_factories_list: () => { + return request.get(api.factories_list); + }, + + // add llm + add_llm: (data: { factory_name: string; model_name: string }) => { + return request.post(api.add_llm, data); + }, + + // delete llm + delete_llm: (data: { factory_name: string; model_name: string }) => { + return request.post(api.delete_llm, data); + }, + + // delete factory + deleteFactory: (data: { factory_name: string }) => { + return request.post(api.deleteFactory, data); + }, + + // set api key + set_api_key: (data: { factory_name: string; model_name: string; api_key: string }) => { + return request.post(api.set_api_key, data); + }, }; export default userService; \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index ace547d..be9097c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import path from 'path' +// import svgr from "vite-plugin-svgr"; // https://vite.dev/config/ export default defineConfig({