From 0b96ab1668a700db9f8669b1b5a7495a16aeb482 Mon Sep 17 00:00:00 2001 From: arch3rPro <30855883+arch3rPro@users.noreply.github.com> Date: Fri, 1 Aug 2025 15:01:31 +0800 Subject: [PATCH] feat: add app GPT4Free --- README.md | 20 ++++++++ apps/gpt4free/0.5.7.0-slim/data.yml | 24 +++++++++ apps/gpt4free/0.5.7.0-slim/docker-compose.yml | 20 ++++++++ apps/gpt4free/0.5.7.0-slim/scripts/init.sh | 4 ++ apps/gpt4free/0.5.7.0/data.yml | 35 +++++++++++++ apps/gpt4free/0.5.7.0/docker-compose.yml | 22 +++++++++ apps/gpt4free/0.5.7.0/scripts/init.sh | 4 ++ apps/gpt4free/README.md | 46 ++++++++++++++++++ apps/gpt4free/README_en.md | 41 ++++++++++++++++ apps/gpt4free/data.yml | 27 ++++++++++ apps/gpt4free/latest/data.yml | 35 +++++++++++++ apps/gpt4free/latest/docker-compose.yml | 22 +++++++++ apps/gpt4free/latest/scripts/init.sh | 4 ++ apps/gpt4free/logo.png | Bin 0 -> 13412 bytes 14 files changed, 304 insertions(+) create mode 100644 apps/gpt4free/0.5.7.0-slim/data.yml create mode 100644 apps/gpt4free/0.5.7.0-slim/docker-compose.yml create mode 100644 apps/gpt4free/0.5.7.0-slim/scripts/init.sh create mode 100644 apps/gpt4free/0.5.7.0/data.yml create mode 100644 apps/gpt4free/0.5.7.0/docker-compose.yml create mode 100644 apps/gpt4free/0.5.7.0/scripts/init.sh create mode 100644 apps/gpt4free/README.md create mode 100644 apps/gpt4free/README_en.md create mode 100644 apps/gpt4free/data.yml create mode 100644 apps/gpt4free/latest/data.yml create mode 100644 apps/gpt4free/latest/docker-compose.yml create mode 100644 apps/gpt4free/latest/scripts/init.sh create mode 100644 apps/gpt4free/logo.png diff --git a/README.md b/README.md index cb41581..b4689ef 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,26 @@ + + + + + + + + +
+ + +GPT4Free +
GPT4Free +
+ +🚀 免费的GPT-4和其他大语言模型API接口 + +0.5.7.0 • [官网链接](https://github.com/xtekky/gpt4free) + +
#### 📝 文档与内容管理 diff --git a/apps/gpt4free/0.5.7.0-slim/data.yml b/apps/gpt4free/0.5.7.0-slim/data.yml new file mode 100644 index 0000000..6cc825a --- /dev/null +++ b/apps/gpt4free/0.5.7.0-slim/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 8080 + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Interface Port + labelZh: Web界面端口 + label: + en: Web Interface Port + zh: Web界面端口 + zh-Hant: Web界面埠 + required: true + rule: paramPort + type: number + - default: 1337 + envKey: PANEL_APP_PORT_API + labelEn: API Port + labelZh: API接口端口 + label: + en: API Port + zh: API接口端口 + zh-Hant: API接口埠 + required: true + rule: paramPort + type: number diff --git a/apps/gpt4free/0.5.7.0-slim/docker-compose.yml b/apps/gpt4free/0.5.7.0-slim/docker-compose.yml new file mode 100644 index 0000000..4f1afd0 --- /dev/null +++ b/apps/gpt4free/0.5.7.0-slim/docker-compose.yml @@ -0,0 +1,20 @@ +services: + gpt4free: + image: hlohaus789/g4f:0.5.7.0-slim + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + volumes: + - ./har_and_cookies:/app/har_and_cookies + - ./generated_media:/app/generated_media + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + - ${PANEL_APP_PORT_API}:8080 + environment: + - OLLAMA_HOST=host.docker.internal + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/gpt4free/0.5.7.0-slim/scripts/init.sh b/apps/gpt4free/0.5.7.0-slim/scripts/init.sh new file mode 100644 index 0000000..df14afb --- /dev/null +++ b/apps/gpt4free/0.5.7.0-slim/scripts/init.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +chown -R 1000:1000 har_and_cookies +chown -R 1000:1000 generated_media \ No newline at end of file diff --git a/apps/gpt4free/0.5.7.0/data.yml b/apps/gpt4free/0.5.7.0/data.yml new file mode 100644 index 0000000..57e44a5 --- /dev/null +++ b/apps/gpt4free/0.5.7.0/data.yml @@ -0,0 +1,35 @@ +additionalProperties: + formFields: + - default: 8080 + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Interface Port + labelZh: Web界面端口 + label: + en: Web Interface Port + zh: Web界面端口 + zh-Hant: Web界面埠 + required: true + rule: paramPort + type: number + - default: 1337 + envKey: PANEL_APP_PORT_API + labelEn: API Port + labelZh: API接口端口 + label: + en: API Port + zh: API接口端口 + zh-Hant: API接口埠 + required: true + rule: paramPort + type: number + - default: 7900 + envKey: PANEL_APP_PORT_REMOTE + labelEn: Remote Desktop Port + labelZh: 远程桌面端口 + label: + en: Remote Desktop Port + zh: 远程桌面端口 + zh-Hant: 遠程桌面埠 + required: true + rule: paramPort + type: number diff --git a/apps/gpt4free/0.5.7.0/docker-compose.yml b/apps/gpt4free/0.5.7.0/docker-compose.yml new file mode 100644 index 0000000..bbffdbb --- /dev/null +++ b/apps/gpt4free/0.5.7.0/docker-compose.yml @@ -0,0 +1,22 @@ +services: + gpt4free: + image: hlohaus789/g4f:latest + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + shm_size: 2gb + volumes: + - ./har_and_cookies:/app/har_and_cookies + - ./generated_media:/app/generated_media + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + - ${PANEL_APP_PORT_API}:8080 + - ${PANEL_APP_PORT_REMOTE}:7900 + environment: + - OLLAMA_HOST=host.docker.internal + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/gpt4free/0.5.7.0/scripts/init.sh b/apps/gpt4free/0.5.7.0/scripts/init.sh new file mode 100644 index 0000000..90ee9cc --- /dev/null +++ b/apps/gpt4free/0.5.7.0/scripts/init.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +chown -R 1200:1201 har_and_cookies +chown -R 1200:1201 generated_media \ No newline at end of file diff --git a/apps/gpt4free/README.md b/apps/gpt4free/README.md new file mode 100644 index 0000000..5b82626 --- /dev/null +++ b/apps/gpt4free/README.md @@ -0,0 +1,46 @@ +# GPT4Free + +GPT4Free是一个开源项目,提供免费的GPT-4和其他大语言模型API接口。它支持多种模型,如GPT-4、Claude、Gemini等,让用户可以免费访问这些强大的AI模型。 + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/gpt4free.png) + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/GPT4Free-Model.png) + +![](https://img.shields.io/badge/Copyright-arch3rPro-ff9800?style=flat&logo=github&logoColor=white) + +## 功能特点 + +- 支持多种大语言模型,包括GPT-4、Claude、Gemini等 +- 提供类似OpenAI的API接口 +- 支持文本生成和图像生成 +- 内置Web界面,方便用户直接使用 +- 支持本地推理和远程API调用 + +## 版本区别 + +- latest:最新稳定版 +- version:当前最新版本号 +- version-slim:当前最新精简版(不包含远程桌面进行模型配置) + +## 使用方法 + +安装完成后,可以通过以下方式访问GPT4Free: + +1. Web界面:访问 `http://您的IP:8080/chat/` 使用内置的聊天界面 +2. API接口:使用 `http://您的IP:1337/v1` 作为API基础URL + +## 环境变量 + +- `OLLAMA_HOST`: Ollama服务器地址,默认为host.docker.internal + +## 端口说明 + +- 8080: Web界面(也可用于API接口) +- 1337: API接口 +- 7900: 远程桌面(用于提供者登录) + +## 更多信息 + +- 官方网站:[g4f.dev](https://g4f.dev/) +- GitHub仓库:[github.com/xtekky/gpt4free](https://github.com/xtekky/gpt4free) +- 文档:[g4f.dev/docs](https://github.com/gpt4free/g4f.dev/blob/main/docs) \ No newline at end of file diff --git a/apps/gpt4free/README_en.md b/apps/gpt4free/README_en.md new file mode 100644 index 0000000..cbc260e --- /dev/null +++ b/apps/gpt4free/README_en.md @@ -0,0 +1,41 @@ +# GPT4Free + +GPT4Free is an open-source project that provides free access to GPT-4 and other large language models. It supports various models such as GPT-4, Claude, Gemini, and more, allowing users to access these powerful AI models for free. + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/gpt4free.png) + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/GPT4Free-Model.png) + +![](https://img.shields.io/badge/Copyright-arch3rPro-ff9800?style=flat&logo=github&logoColor=white) + + +## Features + +- Support for multiple large language models including GPT-4, Claude, Gemini, and more +- OpenAI-compatible API interface +- Text and image generation capabilities +- Built-in web interface for easy use +- Support for both local inference and remote API calls + +## Usage + +After installation, you can access GPT4Free through: + +1. Web Interface: Visit `http://your-ip:8080/chat/` to use the built-in chat interface +2. API Interface: Use `http://your-ip:1337/v1` as your API base URL + +## Environment Variables + +- `OLLAMA_HOST`: Ollama server address, defaults to host.docker.internal + +## Port Information + +- 8080: Web interface and API +- 1337: Alternative API port +- 7900: Remote desktop (for provider login) + +## More Information + +- Official Website: [g4f.dev](https://g4f.dev/) +- GitHub Repository: [github.com/xtekky/gpt4free](https://github.com/xtekky/gpt4free) +- Documentation: [g4f.dev/docs](https://github.com/gpt4free/g4f.dev/blob/main/docs) \ No newline at end of file diff --git a/apps/gpt4free/data.yml b/apps/gpt4free/data.yml new file mode 100644 index 0000000..1fb30d5 --- /dev/null +++ b/apps/gpt4free/data.yml @@ -0,0 +1,27 @@ +name: GPT4Free +tags: + - AI / 大模型 +title: 免费的GPT-4和其他大语言模型API接口 +description: GPT4Free是一个开源项目,提供免费的GPT-4和其他大语言模型API接口,支持多种模型如GPT-4、Claude、Gemini等。 +additionalProperties: + key: gpt4free + name: GPT4Free + tags: + - AI + shortDescZh: 免费的GPT-4和其他大语言模型API接口 + shortDescEn: Free API for GPT-4 and other large language models + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://g4f.dev/ + github: https://github.com/xtekky/gpt4free + document: https://github.com/gpt4free/g4f.dev/blob/main/docs + description: + en: Free API for GPT-4 and other large language models + zh: 免费的GPT-4和其他大语言模型API接口 + zh-Hant: 免費的GPT-4和其他大語言模型API接口 + memoryRequired: 2048 + architectures: + - amd64 + - arm64 diff --git a/apps/gpt4free/latest/data.yml b/apps/gpt4free/latest/data.yml new file mode 100644 index 0000000..57e44a5 --- /dev/null +++ b/apps/gpt4free/latest/data.yml @@ -0,0 +1,35 @@ +additionalProperties: + formFields: + - default: 8080 + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Interface Port + labelZh: Web界面端口 + label: + en: Web Interface Port + zh: Web界面端口 + zh-Hant: Web界面埠 + required: true + rule: paramPort + type: number + - default: 1337 + envKey: PANEL_APP_PORT_API + labelEn: API Port + labelZh: API接口端口 + label: + en: API Port + zh: API接口端口 + zh-Hant: API接口埠 + required: true + rule: paramPort + type: number + - default: 7900 + envKey: PANEL_APP_PORT_REMOTE + labelEn: Remote Desktop Port + labelZh: 远程桌面端口 + label: + en: Remote Desktop Port + zh: 远程桌面端口 + zh-Hant: 遠程桌面埠 + required: true + rule: paramPort + type: number diff --git a/apps/gpt4free/latest/docker-compose.yml b/apps/gpt4free/latest/docker-compose.yml new file mode 100644 index 0000000..bbffdbb --- /dev/null +++ b/apps/gpt4free/latest/docker-compose.yml @@ -0,0 +1,22 @@ +services: + gpt4free: + image: hlohaus789/g4f:latest + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + shm_size: 2gb + volumes: + - ./har_and_cookies:/app/har_and_cookies + - ./generated_media:/app/generated_media + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + - ${PANEL_APP_PORT_API}:8080 + - ${PANEL_APP_PORT_REMOTE}:7900 + environment: + - OLLAMA_HOST=host.docker.internal + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/gpt4free/latest/scripts/init.sh b/apps/gpt4free/latest/scripts/init.sh new file mode 100644 index 0000000..90ee9cc --- /dev/null +++ b/apps/gpt4free/latest/scripts/init.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +chown -R 1200:1201 har_and_cookies +chown -R 1200:1201 generated_media \ No newline at end of file diff --git a/apps/gpt4free/logo.png b/apps/gpt4free/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..68b2b4451d46c4f8b59f2a7764f16b14726c080c GIT binary patch literal 13412 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 z