From ffc7ce296d0f48be63911c79e6b85a72579a100d Mon Sep 17 00:00:00 2001 From: okxlin Date: Tue, 21 May 2024 21:40:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0lobe-chat=E5=88=B0?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/lobe-chat/0.160.6/.env.sample | 6 ++++ apps/lobe-chat/0.160.6/data.yml | 40 ++++++++++++++++++++++ apps/lobe-chat/0.160.6/docker-compose.yml | 21 ++++++++++++ apps/lobe-chat/README.md | 12 +++++++ apps/lobe-chat/data.yml | 19 ++++++++++ apps/lobe-chat/latest/.env.sample | 6 ++++ apps/lobe-chat/latest/data.yml | 40 ++++++++++++++++++++++ apps/lobe-chat/latest/docker-compose.yml | 21 ++++++++++++ apps/lobe-chat/logo.png | Bin 0 -> 9050 bytes 9 files changed, 165 insertions(+) create mode 100644 apps/lobe-chat/0.160.6/.env.sample create mode 100644 apps/lobe-chat/0.160.6/data.yml create mode 100644 apps/lobe-chat/0.160.6/docker-compose.yml create mode 100644 apps/lobe-chat/README.md create mode 100644 apps/lobe-chat/data.yml create mode 100644 apps/lobe-chat/latest/.env.sample create mode 100644 apps/lobe-chat/latest/data.yml create mode 100644 apps/lobe-chat/latest/docker-compose.yml create mode 100644 apps/lobe-chat/logo.png diff --git a/apps/lobe-chat/0.160.6/.env.sample b/apps/lobe-chat/0.160.6/.env.sample new file mode 100644 index 00000000..03cf13c0 --- /dev/null +++ b/apps/lobe-chat/0.160.6/.env.sample @@ -0,0 +1,6 @@ +ACCESS_CODE="access_password" +CONTAINER_NAME="lobe-chat" +OPENAI_API_KEY="sk-xxx" +OPENAI_MODEL_LIST="" +OPENAI_PROXY_URL="https://api.openai.com/v1" +PANEL_APP_PORT_HTTP="40247" diff --git a/apps/lobe-chat/0.160.6/data.yml b/apps/lobe-chat/0.160.6/data.yml new file mode 100644 index 00000000..aba6f716 --- /dev/null +++ b/apps/lobe-chat/0.160.6/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: 40247 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "password" + edit: true + envKey: OPENAI_API_KEY + labelEn: OpenAI API Key + labelZh: OpenAI API 密钥 + required: false + type: password + - default: "https://api.openai.com/v1" + edit: true + envKey: OPENAI_PROXY_URL + labelEn: OpenAI Proxy URL + labelZh: OpenAI 代理 URL + required: false + type: text + - default: "" + edit: true + envKey: ACCESS_CODE + labelEn: Access Code + labelZh: 访问密码 + random: true + required: false + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: OPENAI_MODEL_LIST + labelEn: OpenAI Model List + labelZh: OpenAI 模型列表 + required: false + type: text diff --git a/apps/lobe-chat/0.160.6/docker-compose.yml b/apps/lobe-chat/0.160.6/docker-compose.yml new file mode 100644 index 00000000..2ae9f90c --- /dev/null +++ b/apps/lobe-chat/0.160.6/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3.3' +services: + lobe-chat: + image: lobehub/lobe-chat:v0.160.6 + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3210" + environment: + - OPENAI_API_KEY=${OPENAI_API_KEY} + - OPENAI_PROXY_URL=${OPENAI_PROXY_URL} + - ACCESS_CODE=${ACCESS_CODE} + - OPENAI_MODEL_LIST=${OPENAI_MODEL_LIST} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/lobe-chat/README.md b/apps/lobe-chat/README.md new file mode 100644 index 00000000..06ff5fd1 --- /dev/null +++ b/apps/lobe-chat/README.md @@ -0,0 +1,12 @@ +
+ +

Lobe Chat

+ +现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架
+支持语音合成、多模态、可扩展的([function call][docs-functionc-call])插件系统
+一键**免费**拥有你自己的 ChatGPT/Gemini/Claude/Ollama 应用 + +[English](https://github.com/lobehub/lobe-chat/blob/main/README.md) · **简体中文** · [更新日志](https://github.com/lobehub/lobe-chat/blob/main/CHANGELOG.md) · [文档](https://lobehub.com/docs) · [报告问题](https://github.com/lobehub/lobe-chat/issues) · [请求功能](https://github.com/lobehub/lobe-chat/issues) + + +![](https://private-user-images.githubusercontent.com/28616219/306135690-9f155dff-4737-429f-9cad-a70a1a860c5f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTYyNjc0OTgsIm5iZiI6MTcxNjI2NzE5OCwicGF0aCI6Ii8yODYxNjIxOS8zMDYxMzU2OTAtOWYxNTVkZmYtNDczNy00MjlmLTljYWQtYTcwYTFhODYwYzVmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA1MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNTIxVDA0NTMxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJlOWNlODY5NmI4ODA2Y2Y5NmM3NzVjNzU4MjAzYWE3NDU2YmJlMzdmOWU1YjIyNjcwMGRjNTJhNTRhYTFjZjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.5xWoXxU6RhqvqRFH2e17oshXIeMqJLUDPLonpz9wTGU) \ No newline at end of file diff --git a/apps/lobe-chat/data.yml b/apps/lobe-chat/data.yml new file mode 100644 index 00000000..59397dc7 --- /dev/null +++ b/apps/lobe-chat/data.yml @@ -0,0 +1,19 @@ +name: LobeChat +tags: + - AI / 大模型 +title: 现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架 +description: 现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架 +additionalProperties: + key: lobe-chat + name: LobeChat + tags: + - AI + shortDescZh: 现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架 + shortDescEn: An open-source, modern-design ChatGPT/LLMs UI/Framework + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://lobehub.com + github: https://github.com/lobehub/lobe-chat + document: https://lobehub.com/docs diff --git a/apps/lobe-chat/latest/.env.sample b/apps/lobe-chat/latest/.env.sample new file mode 100644 index 00000000..03cf13c0 --- /dev/null +++ b/apps/lobe-chat/latest/.env.sample @@ -0,0 +1,6 @@ +ACCESS_CODE="access_password" +CONTAINER_NAME="lobe-chat" +OPENAI_API_KEY="sk-xxx" +OPENAI_MODEL_LIST="" +OPENAI_PROXY_URL="https://api.openai.com/v1" +PANEL_APP_PORT_HTTP="40247" diff --git a/apps/lobe-chat/latest/data.yml b/apps/lobe-chat/latest/data.yml new file mode 100644 index 00000000..aba6f716 --- /dev/null +++ b/apps/lobe-chat/latest/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: 40247 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "password" + edit: true + envKey: OPENAI_API_KEY + labelEn: OpenAI API Key + labelZh: OpenAI API 密钥 + required: false + type: password + - default: "https://api.openai.com/v1" + edit: true + envKey: OPENAI_PROXY_URL + labelEn: OpenAI Proxy URL + labelZh: OpenAI 代理 URL + required: false + type: text + - default: "" + edit: true + envKey: ACCESS_CODE + labelEn: Access Code + labelZh: 访问密码 + random: true + required: false + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: OPENAI_MODEL_LIST + labelEn: OpenAI Model List + labelZh: OpenAI 模型列表 + required: false + type: text diff --git a/apps/lobe-chat/latest/docker-compose.yml b/apps/lobe-chat/latest/docker-compose.yml new file mode 100644 index 00000000..18e77608 --- /dev/null +++ b/apps/lobe-chat/latest/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3.3' +services: + lobe-chat: + image: lobehub/lobe-chat:latest + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3210" + environment: + - OPENAI_API_KEY=${OPENAI_API_KEY} + - OPENAI_PROXY_URL=${OPENAI_PROXY_URL} + - ACCESS_CODE=${ACCESS_CODE} + - OPENAI_MODEL_LIST=${OPENAI_MODEL_LIST} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/lobe-chat/logo.png b/apps/lobe-chat/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..531bae6aa3d59c2db8e2884c19f7982ebb3e57ff GIT binary patch literal 9050 zcmV-gBcr5qc0#jn*4=74l1S<9h)vyVKYj3T!jr|ITIAklIHO(au4~=m zfMwccGKuYb{O#iX@#X!#bSVoq{ltC$^yvJ%eDjNM`mbd?6%a@@0QOwC8g@=8vBAkY@Y2p!lR*_nTJ!zNh!8ocz3L zLm&$BhHdzvPB9G`?}0S*gdLR`8}p!=^_E2Kn4Cs4TkUu@<7YejwzI@viSmp(EDb3~ zDg$wFs@`EO`{mVBN~ZRnY5&$%+k>O}xsv#BWbtaYm-GaabQND;DeRQFh%X1!QXs{1{Ljs=S_t#Mht5?0s7Cps#d(!Q7Iun{~u#QKf-vy!4fEtcS`> zMwr%)z44cj=tC-PXoJ=PyO3nG!ECLGU8e5a&&gnIQ#W2; z>qUx=$g6y&jES-Rn~lM%pj;%X`Bza`+(46BqVBGskxPekt>NX+#8geKV@|eIvp}LI zBd(N<)4j8kcC$@ElW!@~SH?nAH796IG<;x9KOjRrDgd5!th6T;zglsQbZV?bNXIY~ zUr~2iKyX`EgN1{voPUC4NnX;PlAW=leRGH40000ubW%=J02BWH{{A;3{`-e#>vU2? z{nxXjnc!gdf5O8#_Eh7}>CWxm{hjHqq_=Kn+t`ZAwwQubv4DVlu*14|001A|Nkll*v=0KX!P~EQxJfTU&T>Z0z>_oa%N4e2(#P&7uv*@|&Waem6j$waBR<_k@b#Oict<)5pnYp!KFjx-;9|u9j zF{s$jQ1*o7xPyzJUTD_x>8uI9KS+z=^$Mv?HvY1Knq4zqg|Qp@DxKvRC8wtsuuI5A<@ei7N{WOBu{!xB4wA zn4?%k7SyaV`;fd;;^od4U(akwP4$7@{E|1on!J^P>9V)Hdmdt`7DD> zySHDxf4{rC`yOof^iK^2T>!J$4jQc2D==@yKo(*&&0Qnxwr=r|^!pVW?ZJtt#7a$Q zh|A z-y^s(?^AQpKx13`hl++-s*hZ?BanfZ$mOyymtI$|Mo_a3a13e0Vho47*hJ&RW;L=T z;EyT-ihsOHk!pnwXriDqT(m-;89!3ZPAij*a=Co7jwxMTy|q$}fef)sDwb+UcDPwA z6sYZ5t=sKxA_QLo94V1m#zZ5ut6gF`rnqQ{-hH(_3pp3H{z zBCuDH*i~jn1UekXyy&{A#)4t@ax$6RKnShWYak

nSwnXlRFrYL;Y}LolQ0tKo18 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 M07*qoM6N<$g5xbKN&o-= literal 0 HcmV?d00001