From ca15f65484793b3c90cadaa5f90c6015a48b01a0 Mon Sep 17 00:00:00 2001 From: igophper <34326532+igophper@users.noreply.github.com> Date: Mon, 8 Jan 2024 10:38:45 +0800 Subject: [PATCH] feat: add one-api (#751) --- apps/one-api/0.5.10/data.yml | 24 +++++++++++++ apps/one-api/0.5.10/docker-compose.yml | 20 +++++++++++ apps/one-api/README.md | 48 +++++++++++++++++++++++++ apps/one-api/data.yml | 13 +++++++ apps/one-api/latest/data.yml | 24 +++++++++++++ apps/one-api/latest/docker-compose.yml | 20 +++++++++++ apps/one-api/logo.png | Bin 0 -> 8085 bytes 7 files changed, 149 insertions(+) create mode 100644 apps/one-api/0.5.10/data.yml create mode 100644 apps/one-api/0.5.10/docker-compose.yml create mode 100644 apps/one-api/README.md create mode 100644 apps/one-api/data.yml create mode 100644 apps/one-api/latest/data.yml create mode 100644 apps/one-api/latest/docker-compose.yml create mode 100644 apps/one-api/logo.png diff --git a/apps/one-api/0.5.10/data.yml b/apps/one-api/0.5.10/data.yml new file mode 100644 index 000000000..017018f8e --- /dev/null +++ b/apps/one-api/0.5.10/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: '' + edit: true + envKey: SQL_DSN + labelEn: SQL_DSN + labelZh: SQL_DSN + required: false + type: text \ No newline at end of file diff --git a/apps/one-api/0.5.10/docker-compose.yml b/apps/one-api/0.5.10/docker-compose.yml new file mode 100644 index 000000000..7a2682057 --- /dev/null +++ b/apps/one-api/0.5.10/docker-compose.yml @@ -0,0 +1,20 @@ +version: "3" +services: + one-api: + image: justsong/one-api:v0.5.10 + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + volumes: + - ./data:/data + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + environment: + - TZ=${TZ} + - SQL_DSN=${SQL_DSN} + labels: + createdBy: "igophper" +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/one-api/README.md b/apps/one-api/README.md new file mode 100644 index 000000000..47ab7c43a --- /dev/null +++ b/apps/one-api/README.md @@ -0,0 +1,48 @@ +# 使用说明 + +- 默认账户密码 + +``` +username:root +password:123456 +``` + +# 主要功能 + +**通过标准的 OpenAI API 格式访问所有的大模型,开箱即用** +- 支持多种大模型: + + [x] [OpenAI ChatGPT 系列模型](https://platform.openai.com/docs/guides/gpt/chat-completions-api)(支持 [Azure OpenAI API](https://learn.microsoft.com/en-us/azure/ai-services/openai/reference)) + + [x] [Anthropic Claude 系列模型](https://anthropic.com) + + [x] [Google PaLM2/Gemini 系列模型](https://developers.generativeai.google) + + [x] [百度文心一言系列模型](https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html) + + [x] [阿里通义千问系列模型](https://help.aliyun.com/document_detail/2400395.html) + + [x] [讯飞星火认知大模型](https://www.xfyun.cn/doc/spark/Web.html) + + [x] [智谱 ChatGLM 系列模型](https://bigmodel.cn) + + [x] [360 智脑](https://ai.360.cn) + + [x] [腾讯混元大模型](https://cloud.tencent.com/document/product/1729) +- 支持配置镜像以及众多第三方代理服务。 +- 支持通过**负载均衡**的方式访问多个渠道。 +- 支持 **stream 模式**,可以通过流式传输实现打字机效果。 +- 支持**多机部署**。 +- 支持**令牌管理**,设置令牌的过期时间和额度。 +- 支持**兑换码管理**,支持批量生成和导出兑换码,可使用兑换码为账户进行充值。 +- 支持**通道管理**,批量创建通道。 +- 支持**用户分组**以及**渠道分组**,支持为不同分组设置不同的倍率。 +- 支持渠道**设置模型列表**。 +- 支持**查看额度明细**。 +- 支持**用户邀请奖励**。 +- 支持以美元为单位显示额度。 +- 支持发布公告,设置充值链接,设置新用户初始额度。 +- 支持模型映射,重定向用户的请求模型,如无必要请不要设置,设置之后会导致请求体被重新构造而非直接透传,会导致部分还未正式支持的字段无法传递成功。 +- 支持失败自动重试。 +- 支持绘图接口。 +- 支持 [Cloudflare AI Gateway](https://developers.cloudflare.com/ai-gateway/providers/openai/),渠道设置的代理部分填写 `https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/openai` 即可。 +- 持丰富的**自定义**设置, + 1. 支持自定义系统名称,logo 以及页脚。 + 2. 支持自定义首页和关于页面,可以选择使用 HTML & Markdown 代码进行自定义,或者使用一个单独的网页通过 iframe 嵌入。 +- 支持通过系统访问令牌访问管理 API(bearer token,用以替代 cookie,你可以自行抓包来查看 API 的用法)。 +- 支持 Cloudflare Turnstile 用户校验。 +- 支持用户管理,支持**多种用户登录注册方式**: + + 邮箱登录注册(支持注册邮箱白名单)以及通过邮箱进行密码重置。 + + [GitHub 开放授权](https://github.com/settings/applications/new)。 + + 微信公众号授权(需要额外部署 [WeChat Server](https://github.com/songquanpeng/wechat-server))。 \ No newline at end of file diff --git a/apps/one-api/data.yml b/apps/one-api/data.yml new file mode 100644 index 000000000..0064189e0 --- /dev/null +++ b/apps/one-api/data.yml @@ -0,0 +1,13 @@ +additionalProperties: + key: one-api + name: one-api + tags: + - Tool + shortDescZh: ✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 ✨ + shortDescEn: ✨ Access all LLM through the standard OpenAI API format, easy to deploy & use ✨ + type: tool + crossVersionUpdate: true + limit: 0 + website: https://github.com/songquanpeng/one-api + github: https://github.com/songquanpeng/one-api + document: https://github.com/songquanpeng/one-api \ No newline at end of file diff --git a/apps/one-api/latest/data.yml b/apps/one-api/latest/data.yml new file mode 100644 index 000000000..017018f8e --- /dev/null +++ b/apps/one-api/latest/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: '' + edit: true + envKey: SQL_DSN + labelEn: SQL_DSN + labelZh: SQL_DSN + required: false + type: text \ No newline at end of file diff --git a/apps/one-api/latest/docker-compose.yml b/apps/one-api/latest/docker-compose.yml new file mode 100644 index 000000000..5b6bc4d2a --- /dev/null +++ b/apps/one-api/latest/docker-compose.yml @@ -0,0 +1,20 @@ +version: "3" +services: + one-api: + image: justsong/one-api:latest + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + volumes: + - ./data:/data + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + environment: + - TZ=${TZ} + - SQL_DSN=${SQL_DSN} + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/one-api/logo.png b/apps/one-api/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0f237a226583e08f89f14a15d86aa330a11151ae GIT binary patch literal 8085 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