{"repo":"songquanpeng/one-api","free":true,"listed":false,"github":"https://github.com/songquanpeng/one-api","clone":"git clone https://github.com/songquanpeng/one-api.git","description":"LLM API 管理 & 分发系统，支持 OpenAI、Azure、Anthropic Claude、Google Gemini、DeepSeek、字节豆包、ChatGLM、文心一言、讯飞星火、通义千问、360 智脑、腾讯混元等主流模型，统一 API 适配，可用于 key 管理与二次分发。单可执行文件，提供 Docker 镜像，一键部署，开箱即用。LLM API management & key redistribution system, unifying multiple providers under a single API. Single binary, Docker-ready, with an English UI.","language":"JavaScript","stars":36403,"topics":["api","api-gateway","azure-openai-api","chatgpt","claude","ernie-bot","gemini","gpt","openai","openai-api","proxy"],"license":"MIT","category":"api_gateway","readme_excerpt":"<p align=\"right\">\n   <strong>中文</strong> | <a href=\"./README.en.md\">English</a> | <a href=\"./README.ja.md\">日本語</a>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/songquanpeng/one-api\"><img src=\"https://raw.githubusercontent.com/songquanpeng/one-api/main/web/default/public/logo.png\" width=\"150\" height=\"150\" alt=\"one-api logo\"></a>\n</p>\n\n<div align=\"center\">\n\n# One API\n\n_✨ 通过标准的 OpenAI API 格式访问所有的大模型，开箱即用 ✨_\n\n</div>\n\n<p align=\"center\">\n  <a href=\"https://raw.githubusercontent.com/songquanpeng/one-api/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/songquanpeng/one-api?color=brightgreen\" alt=\"license\">\n  </a>\n  <a href=\"https://github.com/songquanpeng/one-api/releases/latest\">\n    <img src=\"https://img.shields.io/github/v/release/songquanpeng/one-api?color=brightgreen&include_prereleases\" alt=\"release\">\n  </a>\n  <a href=\"https://hub.docker.com/repository/docker/justsong/one-api\">\n    <img src=\"https://img.shields.io/docker/pulls/justsong/one-api?color=brightgreen\" alt=\"docker pull\">\n  </a>\n  <a href=\"https://github.com/songquanpeng/one-api/releases/latest\">\n    <img src=\"https://img.shields.io/github/downloads/songquanpeng/one-api/total?color=brightgreen&include_prereleases\" alt=\"release\">\n  </a>\n  <a href=\"https://goreportcard.com/report/github.com/songquanpeng/one-api\">\n    <img src=\"https://goreportcard.com/badge/github.com/songquanpeng/one-api\" alt=\"GoReportCard\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/songquanpeng/one-api#部署\">部署教程</a>\n  ·\n  <a href=\"https://github.com/songquanpeng/one-api#使用方法\">使用方法</a>\n  ·\n  <a href=\"https://github.com/songquanpeng/one-api/issues\">意见反馈</a>\n  ·\n  <a href=\"https://github.com/songquanpeng/one-api#截图展示\">截图展示</a>\n  ·\n  <a href=\"https://openai.justsong.cn/\">在线演示</a>\n  ·\n  <a href=\"https://github.com/songquanpeng/one-api#常见问题\">常见问题</a>\n  ·\n  <a href=\"https://github.com/songquanpeng/one-api#相关项目\">相关项目</a>\n  ·\n  <a href=\"https://iamazing.cn/page/reward\">赞赏支持</a>\n</p>\n\n> [!NOTE]\n> 本项目为开源项目，使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用，不得用于非法用途。\n>\n> 根据[《生成式人工智能服务管理暂行办法》](http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求，请勿对中国地区公众提供一切未经备案的生成式人工智能服务。\n\n> [!NOTE]\n> 稳定版 / 预览版镜像地址：[justsong/one-api](https://hub.docker.com/repository/docker/justsong/one-api)\n> 或者 [ghcr.io/songquanpeng/one-api](https://github.com/songquanpeng/one-api/pkgs/container/one-api)\n>\n> alpha 版镜像地址：[justsong/one-api-alpha](https://hub.docker.com/repository/docker/justsong/one-api-alpha)\n> 或者 [ghcr.io/songquanpeng/one-api-alpha](https://github.com/songquanpeng/one-api/pkgs/container/one-api-alpha)\n\n> [!WARNING]\n> 使用 root 用户初次登录系统后，务必修改默认密码 `123456`！\n\n## 功能\n1. 支持多种大模型：\n   + [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)）\n   + [x] [Anthropic Claude 系列模型](https://anthropic.com) (支持 AWS Claude)\n   + [x] [Google PaLM2/Gemini 系列模型](https://developers.generativeai.google)\n   + [x] [Mistral 系列模型](https://mistral.ai/)\n   + [x] [字节跳动豆包大模型（火山引擎）](https://www.volcengine.com/experience/ark?utm_term=202502dsinvite&ac=DSASUQY5&rc=2QXCA1VI)\n   + [x] [百度文心一言系列模型](https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html)\n   + [x] [阿里通义千问系列模型](https://help.aliyun.com/document_detail/2400395.html)\n   + [x] [讯飞星火认知大模型](https://www.xfyun.cn/doc/spark/Web.html)\n   + [x] [智谱 ChatGLM 系列模型](https://bigmodel.cn)\n   + [x] [360 智脑](https://ai.360.cn)\n   + [x] [腾讯混元大模型](https://cloud.tencent.com/document/product/1729)\n   + [x] [Moonshot AI](https://platform.moonshot.cn/)\n   + [x] [百川大模型](https://platform.baichuan-ai.com)\n   + [x] [MINIMAX](https://api.minimax.chat/)\n   + [x] [Groq](https://wow.groq.com/)\n   + [x] [Ollama](https://github.com/ollama/ollama)\n   + [x] [零一万物](https://platform.lingyiwanwu.com/)\n   + [x] [阶跃星辰](https://platform.stepfun.com/)\n   + [x] [Coze](https://www.coze.com/)\n   + [x] [Cohere](https://cohere.com/)\n   + [x] [DeepSeek](https://www.deepseek.com/)\n   + [x] [Cloudflare Workers AI](https://developers.cloudflare.com/workers-ai/)\n   + [x] [DeepL](https://www.deepl.com/)\n   + [x] [together.ai](https://www.together.ai/)\n   + [x] [novita.ai](https://www.novita.ai/)\n   + [x] [硅基流动 SiliconCloud](https://cloud.siliconflow.cn/i/rKXmRobW)\n   + [x] [xAI](https://x.ai/)\n2. 支持配置镜像以及众多[第三方代理服务](https://iamazing.cn/page/openai-api-third-party-services)。\n3. 支持通过**负载均衡**的方式访问多个渠道。\n4. 支持 **stream 模式**，可以通过流式传输实现打字机效果。\n5. 支持**多机部署**，[详见此处](#多机部署)。\n6. 支持**令牌管理**，设置令牌的过期时间、额度、允许的 IP 范围以及允许的模型访问。\n7. 支持**兑换码管理**，支持批量生成和导出兑换码，可使用兑换码为账户进行充值。\n8. 支持**渠道管理**，批量创建渠道。\n9. 支持**用户分组**以及**渠道分组**，支持为不同分组设置不同的倍率。\n10. 支持渠道**设置模型列表**。\n11. 支持**查看额度明细**。\n12. 支持**用户邀请奖励**。\n13. 支持以美元为单位显示额度。\n14. 支持发布公告，设置充值链接，设置新用户初始额度。\n15. 支持模型映射，重定向用户的请求模型，如无必要请不要设置，设置之后会导致请求体被重新构造而非直接透传，会导致部分还未正式支持的字段无法传递成功。\n16. 支持失败自动重试。\n17. 支持绘图接口。\n18. 支持 [Cloudflare AI Gateway](https://developers.cloudflare.com/ai-gateway/providers/openai/)，渠道设置的代理部分填写 `https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/openai` 即可。\n19. 支持丰富的**自定义**设置，\n    1. 支持自定义系统名称，logo 以及页脚。\n    2. 支持自定义首页和关于页面，可以选择使用 HTML & Markdown 代码进行自定义，或者使用一个单独的网页通过 iframe 嵌入。\n20. 支持通过系统访问令牌调用管理 API，进而**在无需二开的情况下扩展和自定义** One API 的功能，详情请参考此处 [API 文档](./docs/API.md)。\n21. 支持 Cloudflare Turnstile 用户校验。\n22. 支持用户管理，支持**多种用户登录注册方式**：\n    + 邮箱登录注册（支持注册邮箱白名单）以及通过邮箱进行密码重置。\n    + 支持[飞书授权登录](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/authen-v1/authorize/get)（[这里有 One API 的实现细节阐述供参考](https://iamazing.cn/page/feishu-oauth-login)）。\n    + 支持 [GitHub 授权登录](https://github.com/settings/applications/new)。\n    + 微信公众号授权（需要额外部署 [WeChat Server](https://github.com/songquanpeng/wechat-server)）。\n23. 支持主题切换，设置环境变量 `THEME` 即可，默认为 `default`，欢迎 PR 更多主题，具体参考[此处](./web/README.md)。\n24. 配合 [Message Pusher](https://github.com/songquanpeng/message-pusher) 可将报警信息推送到多种 App 上。\n\n## 部署\n### 基于 Docker 进行部署\n```shell\n# 使用 SQLite 的部署命令：\ndocker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api\n# 使用 MySQL 的部署命令，在上面的基础上添加 `-e SQL_DSN=\"root:123456@tcp(localhost:3306)/oneapi\"`，请自行修改数据库连接参数，不清楚如何修改请参见下面环境变量一节。\n# 例如：\ndocker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN=\"root:123456@tcp(localhost:3306)/oneapi\" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api\n```\n\n其中，`-p 3000:3000` 中的第一个 `3000` 是宿主机的端口，可以根据需要进行修改。\n\n数据和日志将会保存在宿主机的 `/home/ubuntu/data/one-api` 目录，请确保该目录存在且具有写入权限，或者更改为合适的目录。\n\n如果启动失败，请添加 `--privileged=true`，具体参考 https://github.com/songquanpeng/one-api/issues/482 。\n\n如果上面的镜像无法拉取，可以尝试使用 GitHub 的 Docker 镜像，将上面的 `justsong/one-api` 替换为 `ghcr.io/songquanpeng/one-api` 即可。\n\n如果你的并发量较大，**务必**设置 `SQL_DSN`，详见下面[环境变量](#环境变量)一节。\n\n更新命令：`docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -cR`\n\nNginx 的参考配置：\n```\nserver{\n   server_name openai.justsong.cn;  # 请根据实际情况修改你的域名\n\n   location / {\n          client_max_body_size  64m;\n          proxy_http_version 1.1;\n          proxy_pass http://localhost:3000;  # 请根据实际情况修改你的端口\n          proxy_set_header Host $host;\n          proxy_set_header X-Forwarded-For $remote_addr;\n          proxy_cache_bypass $http_upgrade;\n          proxy_set_header Accept-Encoding gzip;\n          proxy_read_timeout 300s;  # GPT-4 需要较长的超时时间，请自行调整\n   }\n}\n```\n\n之后使用 Let's Encrypt 的 certbot 配置 HTTPS：\n```bash\n# Ubuntu 安装 certbot：\nsudo snap install --classic certbot\nsudo ln -s /snap/bin/certbot /usr/bin/certbot\n# 生成证书 & 修改 Nginx 配置\nsudo certbot --nginx\n# 根据指示进行操作\n# 重启 Nginx\nsudo service nginx restart\n```\n\n初始账号用户名为 `root`，密码为 `123456`。\n\n### 通过宝塔面板进行一键部署\n1. 安装宝塔面板9.2.0及以上版本，前往 [宝塔面板](https://www.bt.cn/new/download.html?r=dk_oneapi) 官网，选择正式版的脚本下载安装；\n2. 安装后登录宝塔面板，在左侧菜单栏中点击 `Docker`，首次进入会提示安装 `Docker` 服务，点击立即安装，按提示完成安装；\n3. 安装完成后在应用商店中搜索 `One-API`，点击安装，配置域名等基本信息即可完成安装；\n\n### 基于 Docker Compose 进行部署\n\n> 仅启动方式不同，参数设置不变，请参考基于 Docker 部署部分\n\n```shell\n# 目前支持 MySQL 启动，数据存储在 ./data/mysql 文件夹内\ndocker-compose up -d\n\n# 查看部署状态\ndocker-compose ps\n```\n\n### 手动部署\n1. 从 [GitHub Releases](https://github.com/songquanpeng/one-api/releases/latest) 下载可执行文件或者从源码编译：\n   ```shell\n   git clone https://github.com/songquanpeng/one-api.git\n\n   # 构建前端\n   cd one-api/web/default\n   npm install\n   npm run build\n\n   # 构建后端\n   cd ../..\n   go mod download\n   go build -ldflags \"-s -w\" -o one-api\n   ````\n2. 运行：\n   ```shell\n   chmod u+x one-api\n   ./one-api --port 3000 --log-dir ./logs\n   ```\n3. 访问 [http://localhost:3000/](http://localhost:3000/) 并登录。初始账号用户名为 `root`，密码为 `123456`。\n\n更加详细的部署教程[参见此处](https://iamazing.cn/page/how-to-deploy-a-website)。\n\n### 多机部署\n1. 所有服务器 `SESSION_SECRET` 设置一样的值。\n2. 必须设置 `SQL_DSN`，使用 MySQL 数据库而非 SQLite，所有服务器连接同一个数据库。\n3. 所有从服务器必须设置 `NODE_TYPE` 为 `slave`，不设置则默认为主服务器。\n4. 设置 `SYNC_FREQUENCY` 后服务器将定期从数据库同步配置，在使用远程数据库的情况下，推荐设置该项并启用 Redis，无论主从。\n5. 从服务器可以选择设置 `FRONTEND_BASE_URL`，以重定向页面请求到主服务器。\n6. 从服务器上**分别**装好 Redis，设置好 `REDIS_CONN_STRING`，这样可以做到在缓存未过期的情况下数据库零访问，可以减少延迟（Redis 集群或者哨兵模式的支持请参考环境变量说明）。\n7. 如果主服务器访问数据库延迟也比较高，则也需要启用 Redis，并设置 `SYNC_FREQUENCY`，以定期从数据库同步配置。\n\n环境变量的具体使用方法详见[此处](#环境变量)。\n\n### 宝塔部署教程\n\n详见 [#175](https://github.com/songquanpeng/one-api/issues/175)。\n\n如果部署后访问出现空白页面，详见 [#97](https://github.com/songquanpeng/one-api/issues/97)。\n\n### 部署第三方服务配合 One API 使用\n> 欢迎 PR 添加更多示例。\n\n#### ChatGPT Next Web\n项目主页：https://github.com/Yidadaa/ChatGPT-Next-Web\n\n```bash\ndocker run --name chat-next-web -d -p 3001:3000 yidadaa/chatgpt-next-web\n```\n\n注意修改端口号，之后在页面上设置接口地址（例如：https://openai.justsong.cn/ ）和 API Key 即可。\n\n#### ChatGPT Web\n项目主页：https://github.com/Chanzhaoyu/chatgpt-web\n\n```bash\ndocker run --name chatgpt-web -d -p 3002:3002 -e OPENAI_API_BASE_URL=https://openai.justsong.cn -e OPENAI_API_KEY=sk-xxx chenzhaoyu94/chatgpt-web\n```\n\n注意修改端口号、`OPENAI_API_BASE_URL` 和 `OPENAI_API_KEY`。\n\n#### QChatGPT - QQ机器人\n项目主页：https://github.com/RockChinQ/QChatGPT\n\n根据[文档](https://qchatgpt.rockchin.top)完成部署后，在 `data/provider.json`设置`requester.openai-chat-completions.base-url`为 One API 实例地址，并填写 API Key 到 `keys.openai` 组中，设置 `model` 为要使用的模型名称。\n\n运行期间可","default_branch":"main","files":564,"tree":[".env.example",".github/FUNDING.yml",".github/ISSUE_TEMPLATE/bug_report.md",".github/ISSUE_TEMPLATE/config.yml",".github/ISSUE_TEMPLATE/feature_request.md",".github/workflows/ci.yml",".github/workflows/docker-image.yml",".github/workflows/linux-release.yml",".github/workflows/macos-release.yml",".github/workflows/windows-release.yml",".gitignore","Dockerfile","LICENSE","README.en.md","README.ja.md","README.md","VERSION","bin/migration_v0.2-v0.3.sql","bin/migration_v0.3-v0.4.sql","bin/time_test.sh","common/blacklist/main.go","common/client/init.go","common/config/config.go","common/constants.go","common/conv/any.go","common/crypto.go","common/ctxkey/key.go","common/custom-event.go","common/database.go","common/embed-file-system.go","common/env/helper.go","common/gin.go","common/helper/helper.go","common/helper/key.go","common/helper/time.go","common/i18n/i18n.go","common/i18n/locales/en.json","common/i18n/locales/zh-CN.json","common/image/image.go","common/image/image_test.go","common/init.go","common/logger/constants.go","common/logger/logger.go","common/message/email.go","common/message/main.go","common/message/message-pusher.go","common/message/template.go","common/network/ip.go","common/network/ip_test.go","common/random/main.go","common/rate-limit.go","common/redis.go","common/render/render.go","common/utils.go","common/utils/array.go","common/validate.go","common/verification.go","controller/auth/github.go","controller/auth/lark.go","controller/auth/oidc.go","controller/auth/wechat.go","controller/billing.go","controller/channel-billing.go","controller/channel-test.go","controller/channel.go","controller/group.go","controller/log.go","controller/misc.go","controller/model.go","controller/option.go","controller/redemption.go","controller/relay.go","controller/token.go","controller/user.go","docker-compose.yml","docs/API.md","go.mod","go.sum","main.go","middleware/auth.go","middleware/cache.go","middleware/cors.go","middleware/distributor.go","middleware/gzip.go","middleware/language.go","middleware/logger.go","middleware/rate-limit.go","middleware/recover.go","middleware/request-id.go","middleware/turnstile-check.go","middleware/utils.go","model/ability.go","model/cache.go","model/channel.go","model/log.go","model/main.go","model/option.go","model/redemption.go","model/token.go","model/user.go","model/utils.go","monitor/channel.go","monitor/manage.go","monitor/metric.go","one-api.service","pull_request_template.md","relay/adaptor.go","relay/adaptor/ai360/constants.go","relay/adaptor/aiproxy/adaptor.go","relay/adaptor/aiproxy/constants.go","relay/adaptor/aiproxy/main.go","relay/adaptor/aiproxy/model.go","relay/adaptor/ali/adaptor.go","relay/adaptor/ali/constants.go","relay/adaptor/ali/image.go","relay/adaptor/ali/main.go","relay/adaptor/ali/model.go","relay/adaptor/alibailian/constants.go","relay/adaptor/alibailian/main.go","relay/adaptor/anthropic/adaptor.go","relay/adaptor/anthropic/constants.go","relay/adaptor/anthropic/main.go","relay/adaptor/anthropic/model.go","relay/adaptor/aws/adaptor.go","relay/adaptor/aws/claude/adapter.go","relay/adaptor/aws/claude/main.go","relay/adaptor/aws/claude/model.go","relay/adaptor/aws/llama3/adapter.go","relay/adaptor/aws/llama3/main.go","relay/adaptor/aws/llama3/main_test.go","relay/adaptor/aws/llama3/model.go","relay/adaptor/aws/registry.go","relay/adaptor/aws/utils/adaptor.go","relay/adaptor/aws/utils/utils.go","relay/adaptor/baichuan/constants.go","relay/adaptor/baidu/adaptor.go","relay/adaptor/baidu/constants.go","relay/adaptor/baidu/main.go","relay/adaptor/baidu/model.go","relay/adaptor/baiduv2/constants.go","relay/adaptor/baiduv2/main.go","relay/adaptor/cloudflare/adaptor.go","relay/adaptor/cloudflare/constant.go","relay/adaptor/cloudflare/main.go","relay/adaptor/cloudflare/model.go","relay/adaptor/cohere/adaptor.go","relay/adaptor/cohere/constant.go","relay/adaptor/cohere/main.go","relay/adaptor/cohere/model.go","relay/adaptor/common.go","relay/adaptor/coze/adaptor.go","relay/adaptor/coze/constant/contenttype/define.go","relay/adaptor/coze/constant/event/define.go","relay/adaptor/coze/constant/messagetype/define.go","relay/adaptor/coze/constants.go","relay/adaptor/coze/helper.go","relay/adaptor/coze/main.go","relay/adaptor/coze/model.go","relay/adaptor/deepl/adaptor.go","relay/adaptor/deepl/constants.go","relay/adaptor/deepl/helper.go","relay/adaptor/deepl/main.go","relay/adaptor/deepl/model.go","relay/adaptor/deepseek/constants.go","relay/adaptor/doubao/constants.go","relay/adaptor/doubao/main.go","relay/adaptor/gemini/adaptor.go","relay/adaptor/gemini/constants.go","relay/adaptor/gemini/main.go","relay/adaptor/gemini/model.go","relay/adaptor/geminiv2/constants.go","relay/adaptor/geminiv2/main.go","relay/adaptor/groq/constants.go","relay/adaptor/interface.go","relay/adaptor/lingyiwanwu/constants.go","relay/adaptor/minimax/constants.go","relay/adaptor/minimax/main.go","relay/adaptor/mistral/constants.go","relay/adaptor/moonshot/constants.go","relay/adaptor/novita/constants.go","relay/adaptor/novita/main.go","relay/adaptor/ollama/adaptor.go","relay/adaptor/ollama/constants.go","relay/adaptor/ollama/main.go","relay/adaptor/ollama/model.go","relay/adaptor/openai/adaptor.go","relay/adaptor/openai/compatible.go","relay/adaptor/openai/constants.go","relay/adaptor/openai/helper.go","relay/adaptor/openai/image.go","relay/adaptor/openai/main.go","relay/adaptor/openai/model.go","relay/adaptor/openai/token.go","relay/adaptor/openai/util.go","relay/adaptor/openrouter/constants.go","relay/adaptor/palm/adaptor.go","relay/adaptor/palm/constants.go","relay/adaptor/palm/model.go","relay/adaptor/palm/palm.go","relay/adaptor/proxy/adaptor.go","relay/adaptor/replicate/adaptor.go","relay/adaptor/replicate/chat.go","relay/adaptor/replicate/constant.go","relay/adaptor/replicate/image.go","relay/adaptor/replicate/model.go","relay/adaptor/siliconflow/constants.go","relay/adaptor/stepfun/constants.go","relay/adaptor/tencent/adaptor.go","relay/adaptor/tencent/constants.go","relay/adaptor/tencent/main.go","relay/adaptor/tencent/model.go","relay/adaptor/togetherai/constants.go","relay/adaptor/vertexai/adaptor.go","relay/adaptor/vertexai/claude/adapter.go","relay/adaptor/vertexai/claude/model.go","relay/adaptor/vertexai/gemini/adapter.go","relay/adaptor/vertexai/registry.go","relay/adaptor/vertexai/token.go","relay/adaptor/xai/constants.go","relay/adaptor/xunfei/adaptor.go","relay/adaptor/xunfei/constants.go","relay/adaptor/xunfei/domain.go","relay/adaptor/xunfei/main.go","relay/adaptor/xunfei/model.go","relay/adaptor/xunfeiv2/constants.go","relay/adaptor/zhipu/adaptor.go","relay/adaptor/zhipu/constants.go","relay/adaptor/zhipu/main.go","relay/adaptor/zhipu/model.go","relay/adaptor_test.go","relay/apitype/define.go","relay/billing/billing.go","relay/billing/ratio/group.go","relay/billing/ratio/image.go","relay/billing/ratio/model.go","relay/channeltype/define.go","relay/channeltype/helper.go","relay/channeltype/url.go","relay/channeltype/url_test.go","relay/constant/common.go","relay/constant/finishreason/define.go","relay/constant/role/define.go","relay/controller/audio.go","relay/controller/error.go","relay/controller/helper.go","relay/controller/image.go","relay/controller/proxy.go","relay/controller/text.go","relay/controller/validator/validation.go","relay/meta/relay_meta.go","relay/model/constant.go","relay/model/general.go","relay/model/image.go","relay/model/message.go","relay/model/misc.go","relay/model/tool.go","relay/relaymode/define.go","relay/relaymode/helper.go","router/api.go","router/dashboard.go","router/main.go","router/relay.go","router/web.go","web/README.md","web/THEMES","web/air/.gitignore","web/air/README.md","web/air/package.json","web/air/public/favicon.ico","web/air/public/index.html","web/air/public/logo.png","web/air/public/robots.txt","web/air/src/App.js","web/air/src/components/ChannelsTable.js","web/air/src/components/Footer.js","web/air/src/components/GitHubOAuth.js","web/air/src/components/HeaderBar.js","web/air/src/components/Loading.js","web/air/src/components/LoginForm.js","web/air/src/components/LogsTable.js","web/air/src/components/MjLogsTable.js","web/air/src/components/OperationSetting.js","web/air/src/components/OtherSetting.js","web/air/src/components/PasswordResetConfirm.js","web/air/src/components/PasswordResetForm.js","web/air/src/components/PersonalSetting.js","web/air/src/components/PrivateRoute.js","web/air/src/components/RedemptionsTable.js","web/air/src/components/RegisterForm.js","web/air/src/components/SiderBar.js","web/air/src/components/SystemSetting.js","web/air/src/components/TokensTable.js","web/air/src/components/UsersTable.js","web/air/src/components/WeChatIcon.js","web/air/src/components/utils.js","web/air/src/constants/channel.constants.js","web/air/src/constants/common.constant.js","web/air/src/constants/index.js","web/air/src/constants/toast.constants.js","web/air/src/constants/user.constants.js","web/air/src/context/Status/index.js","web/air/src/context/Status/reducer.js","web/air/src/context/User/index.js","web/air/src/context/User/reducer.js","web/air/src/helpers/api.js","web/air/src/helpers/auth-header.js","web/air/src/helpers/history.js","web/air/src/helpers/index.js","web/air/src/helpers/render.js","web/air/src/helpers/utils.js","web/air/src/index.css","web/air/src/index.js","web/air/src/pages/About/index.js","web/air/src/pages/Channel/EditChannel.js","web/air/src/pages/Channel/index.js","web/air/src/pages/Chat/index.js","web/air/src/pages/Detail/index.js","web/air/src/pages/Home/index.js","web/air/src/pages/Log/index.js","web/air/src/pages/Midjourney/index.js","web/air/src/pages/NotFound/index.js","web/air/src/pages/Redemption/EditRedemption.js","web/air/src/pages/Redemption/index.js","web/air/src/pages/Setting/index.js","web/air/src/pages/Token/EditToken.js","web/air/src/pages/Token/index.js","web/air/src/pages/TopUp/index.js","web/air/src/pages/User/AddUser.js","web/air/src/pages/User/EditUser.js","web/air/src/pages/User/index.js","web/air/vercel.json","web/berry/.gitignore","web/berry/.prettierrc","web/berry/README.md","web/berry/jsconfig.json","web/berry/package.json","web/berry/public/favicon.ico","web/berry/public/index.html","web/berry/src/App.js","web/berry/src/assets/fonts/roboto-500.woff2","web/berry/src/assets/fonts/roboto-700.woff2","web/berry/src/assets/fonts/roboto-regular.woff2","web/berry/src/assets/images/404.svg","web/berry/src/assets/images/auth/auth-blue-card.svg","web/berry/src/assets/images/auth/auth-pattern-dark.svg","web/berry/src/assets/images/auth/auth-pattern.svg","web/berry/src/assets/images/auth/auth-purple-card.svg","web/berry/src/assets/images/auth/auth-signup-blue-card.svg","web/berry/src/assets/images/auth/auth-signup-white-card.svg","web/berry/src/assets/images/icons/earning.svg","web/berry/src/assets/images/icons/github.svg","web/berry/src/assets/images/icons/lark.svg","web/berry/src/assets/images/icons/oidc.svg","web/berry/src/assets/images/icons/shape-avatar.svg","web/berry/src/assets/images/icons/social-google.svg","web/berry/src/assets/images/icons/wechat.svg","web/berry/src/assets/images/invite/cover.jpg","web/berry/src/assets/images/invite/cwok_casual_19.webp","web/berry/src/assets/images/logo-2.svg","web/berry/src/assets/images/logo-white.svg","web/berry/src/assets/images/logo.svg","web/berry/src/assets/images/users/user-round.svg","web/berry/src/assets/scss/_themes-vars.module.scss","web/berry/src/assets/scss/fonts.scss","web/berry/src/assets/scss/style.scss","web/berry/src/config.js","web/berry/src/constants/ChannelConstants.js","web/berry/src/constants/CommonConstants.js","web/berry/src/constants/SnackbarConstants.js","web/berry/src/constants/index.js","web/berry/src/contexts/StatusContext.js","web/berry/src/contexts/UserContext.js","web/berry/src/hooks/useAuth.js","web/berry/src/hooks/useLogin.js","web/berry/src/hooks/useRegister.js","web/berry/src/hooks/useScriptRef.js","web/berry/src/index.js","web/berry/src/layout/MainLayout/Header/ProfileSection/index.js","web/berry/src/layout/MainLayout/Header/index.js","web/berry/src/layout/MainLayout/LogoSection/index.js","web/berry/src/layout/MainLayout/Sidebar/MenuCard/index.js","web/berry/src/layout/MainLayout/Sidebar/MenuList/NavCollapse/index.js","web/berry/src/layout/MainLayout/Sidebar/MenuList/NavGroup/index.js","web/berry/src/layout/MainLayout/Sidebar/MenuList/NavItem/index.js","web/berry/src/layout/MainLayout/Sidebar/MenuList/index.js","web/berry/src/layout/MainLayout/Sidebar/index.js","web/berry/src/layout/MainLayout/index.js","web/berry/src/layout/MinimalLayout/Header/index.js","web/berry/src/layout/MinimalLayout/index.js","web/berry/src/layout/NavMotion.js","web/berry/src/layout/NavigationScroll.js","web/berry/src/menu-items/index.js","web/berry/src/menu-items/panel.js","web/berry/src/routes/MainRoutes.js","web/berry/src/routes/OtherRoutes.js","web/berry/src/routes/index.js","web/berry/src/serviceWorker.js","web/berry/src/store/accountReducer.js","web/berry/src/store/actions.js","web/berry/src/store/constant.js"],"storefront":"/r/songquanpeng","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/songquanpeng/one-api/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}