docs: rewrite README for BoosAPI rebranding
- Replace all Metapi references with BoosAPI - Remove external service links (GitHub, Docker Hub, Render, Zeabur) - Simplify structure for self-hosted deployment - Update both Chinese and English versions Signed-off-by: Boos4721 <boos4721@icloud.com>
This commit is contained in:
@@ -1,43 +1,19 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src="docs/logos/logo-full.png" alt="Metapi" width="280">
|
# BoosAPI
|
||||||
|
|
||||||
**中转站的中转站 — 将分散的 AI 中转站聚合为一个统一网关**
|
**AI 聚合网关 — 将分散的中转站整合为一个统一入口**
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
把你在各处注册的 New API / One API / OneHub / DoneHub / Veloera / AnyRouter / Sub2API 等站点,
|
把你各处注册的 New API / One API / OneHub / DoneHub / Veloera / AnyRouter / Sub2API 等站点,
|
||||||
<br>
|
<br>
|
||||||
汇聚成 <strong>一个 API Key、一个入口</strong>,自动发现模型、智能路由、成本最优。
|
汇聚成 <strong>一个 API Key、一个入口</strong>,自动发现模型、智能路由、成本最优。
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/cita-777/metapi/releases">
|
<img alt="Node.js" src="https://img.shields.io/badge/Node.js-22.15%2B-339933?logo=node.js&style=flat">
|
||||||
<img alt="GitHub Release" src="https://img.shields.io/github/v/release/cita-777/metapi?label=Release&logo=github&style=flat">
|
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&style=flat">
|
||||||
</a><!--
|
|
||||||
--><a href="https://github.com/cita-777/metapi/stargazers">
|
|
||||||
<img alt="GitHub Stars" src="https://img.shields.io/github/stars/cita-777/metapi?style=flat&logo=github&label=Stars">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://deepwiki.com/cita-777/metapi">
|
|
||||||
<img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://hub.docker.com/r/1467078763/metapi">
|
|
||||||
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/1467078763/metapi?style=flat&logo=docker&label=Docker%20Pulls">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://hub.docker.com/r/1467078763/metapi">
|
|
||||||
<img alt="Docker Image" src="https://img.shields.io/badge/docker-1467078763%2Fmetapi-blue?logo=docker&style=flat">
|
|
||||||
</a><!--
|
|
||||||
--><a href="LICENSE">
|
|
||||||
<img alt="License" src="https://img.shields.io/badge/license-MIT-brightgreen?style=flat">
|
<img alt="License" src="https://img.shields.io/badge/license-MIT-brightgreen?style=flat">
|
||||||
</a><!--
|
|
||||||
--><img alt="Node.js" src="https://img.shields.io/badge/Node.js-22.15%2B-339933?logo=node.js&style=flat"><!--
|
|
||||||
--><img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&style=flat"><!--
|
|
||||||
--><a href="https://zeabur.com/templates/DOX5PR">
|
|
||||||
<img alt="Deploy on Zeabur" src="https://zeabur.com/button.svg" height="28">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://render.com/deploy?repo=https://github.com/cita-777/metapi">
|
|
||||||
<img alt="Deploy to Render" src="https://render.com/images/deploy-to-render-button.svg" height="28">
|
|
||||||
</a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -45,130 +21,31 @@
|
|||||||
<a href="README_EN.md">English</a>
|
<a href="README_EN.md">English</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://metapi.cita777.me"><strong>📚 在线文档</strong></a> ·
|
|
||||||
<a href="https://metapi.cita777.me/getting-started">快速上手</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/deployment">部署指南</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/configuration">配置说明</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/client-integration">客户端接入</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/faq">常见问题</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🌐 在线体验
|
|
||||||
|
|
||||||
> 无需部署,直接体验 Metapi 的完整功能:
|
|
||||||
|
|
||||||
| | |
|
|
||||||
| ---------------------- | ---------------------------------------------------------- |
|
|
||||||
| 🔗**体验地址** | [metapi-t9od.onrender.com](https://metapi-t9od.onrender.com/) |
|
|
||||||
| 🔑**管理员令牌** | `123456` |
|
|
||||||
|
|
||||||
> **⚠️ 安全提示**:体验站为公共环境,**请勿填入你的 API Key、账号密码或站点信息**。数据随时可能被清空。
|
|
||||||
|
|
||||||
> **ℹ️ 说明**:体验站使用 Render 免费方案 + OpenRouter 免费模型(仅 `:free` 后缀的模型可用)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📖 介绍
|
## 📖 介绍
|
||||||
|
|
||||||
现在 AI 生态里有越来越多基于 New API / One API 系列的聚合中转站,要管理多个站点的余额、模型列表和 API 密钥,往往既分散又费时。
|
现在 AI 生态里出现了越来越多基于 New API / One API 系列的聚合中转站,要管理多个站点的余额、模型列表和 API 密钥,往往既分散又费时。
|
||||||
|
|
||||||
**Metapi** 作为这些中转站之上的**元聚合层(Meta-Aggregation Layer)**,把多个站点统一到 **一个入口(可按项目配置多个下游 API Key)**——下游所有工具(Cursor、Claude Code、Codex、Open WebUI 等)即可无感接入全部模型。当前支持的上游范围已经不止传统聚合面板,还包括:
|
**BoosAPI** 作为中转站之上的**元聚合层**,把多个站点统一到 **一个入口**——下游所有工具即可无感接入全部模型。
|
||||||
|
|
||||||
- 聚合面板: [New API](https://github.com/QuantumNous/new-api)、[One API](https://github.com/songquanpeng/one-api)、[OneHub](https://github.com/MartialBE/one-hub)、[DoneHub](https://github.com/deanxv/done-hub)、[Veloera](https://github.com/Veloera/Veloera)、[AnyRouter](https://anyrouter.top)、[Sub2API](https://github.com/Wei-Shaw/sub2api)
|
支持的上游范围:
|
||||||
- 通用兼容接口:OpenAI / Claude / Gemini compatible endpoints,以及 `cliproxyapi` / CPA
|
|
||||||
- 官方预设:阿里云 / 智谱 / 豆包 Coding Plan,DeepSeek,Moonshot(Kimi),MiniMax,ModelScope
|
|
||||||
- OAuth 连接:Codex、Claude、Gemini CLI、Antigravity
|
|
||||||
|
|
||||||
详细接法见 [上游接入](./docs/upstream-integration.md) 与 [OAuth 管理](./docs/oauth.md)。
|
- **聚合面板**:New API、One API、OneHub、DoneHub、Veloera、AnyRouter、Sub2API
|
||||||
|
- **通用兼容接口**:OpenAI / Claude / Gemini compatible,cliproxyapi / CPA
|
||||||
|
- **官方预设**:阿里云、智谱、豆包 Coding Plan、DeepSeek、Moonshot、MiniMax、ModelScope
|
||||||
|
- **OAuth 连接**:Codex、Claude、Gemini CLI、Antigravity
|
||||||
|
|
||||||
| 痛点 | Metapi 怎么解决 |
|
| 痛点 | BoosAPI 怎么解决 |
|
||||||
| ------------------------------------- | ---------------------------------------------------------------------- |
|
|------|-----------------|
|
||||||
| 🔑 每个站点一个 Key,下游工具配置一堆 | **统一代理入口 + 可选多下游 Key 策略**,模型自动聚合到 `/v1/*` |
|
| 🔑 每个站点一个 Key,下游配置一堆 | **统一代理入口 + 多下游 Key 策略**,模型自动聚合 |
|
||||||
| 💸 不知道哪个站点用某个模型最便宜 | **智能路由** 自动按成本、余额、使用率选最优通道 |
|
| 💸 不知道哪个站点最便宜 | **智能路由** 按成本、余额、使用率选最优通道 |
|
||||||
| 🔄 某个站点挂了,手动切换好麻烦 | **自动故障转移**,一个通道失败自动冷却并切到下一个 |
|
| 🔄 站点挂了手动切换 | **自动故障转移**,失败通道自动冷却并切换 |
|
||||||
| 📊 余额分散在各处,不知道还剩多少 | **集中看板** 一目了然,余额不足自动告警 |
|
| 📊 余额分散各处 | **集中看板** 一目了然,余额不足自动告警 |
|
||||||
| ✅ 每天得去各站签到领额度 | **自动签到** 定时执行,奖励自动追踪 |
|
| ✅ 每天签到领额度 | **自动签到** 定时执行,奖励自动追踪 |
|
||||||
| 🤷 不知道哪个站有什么模型 | **自动模型发现**,上游新增模型零配置出现在你的模型列表里 |
|
| 🤷 不知道各站有什么模型 | **自动模型发现**,上游新增模型零配置 |
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🖼️ 界面预览
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/dashboard.png" alt="dashboard" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>仪表盘</b> — 余额分布、消费趋势、系统概览</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/model-marketplace.png" alt="model-marketplace" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>模型广场</b> — 跨站模型覆盖、定价对比、实测指标</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/routes.png" alt="routes" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>智能路由</b> — 多通道概率分配、成本优先选路</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/accounts.png" alt="accounts" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>账号管理</b> — 多站点多账号、健康状态追踪</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/sites.png" alt="sites" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>站点管理</b> — 上游站点配置与状态一览</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/tokens.png" alt="tokens" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>令牌管理</b> — API Token 生命周期管理</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/playground.png" alt="playground" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>模型操练场</b> — 在线交互式模型测试</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/checkin.png" alt="checkin" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>签到记录</b> — 自动签到状态与奖励追踪</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/proxy-logs.png" alt="proxy-logs" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>使用日志</b> — 代理请求日志与成本明细</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/monitor.png" alt="monitor" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>可用性监控</b> — 通道健康度实时监测</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/settings.png" alt="settings" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>系统设置</b> — 全局参数与安全配置</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/notification-settings.png" alt="notification-settings" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>通知设置</b> — 多渠道告警与推送配置</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏛️ 架构概览
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/metapi-architecture.png" alt="Metapi: Federated AI Model Aggregation Gateway Architecture" style="max-width: 100%; height: auto;" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -176,134 +53,68 @@
|
|||||||
|
|
||||||
### 🌐 统一代理网关
|
### 🌐 统一代理网关
|
||||||
|
|
||||||
- 兼容 **OpenAI** 与 **Claude** 下游格式,对接所有主流客户端
|
- 兼容 **OpenAI** 与 **Claude** 下游格式
|
||||||
- 支持 Responses / Chat Completions / Messages / Completions(Legacy)/ Embeddings / Images / Models,以及标准 `/v1/files` 文件接口
|
- 支持 Responses / Chat Completions / Messages / Completions / Embeddings / Images / Models / Files
|
||||||
- 完整的 SSE 流式传输支持,自动格式转换(OpenAI ⇄ Claude)
|
- SSE 流式传输,自动格式转换
|
||||||
|
|
||||||
### 🧠 智能路由引擎
|
### 🧠 智能路由引擎
|
||||||
|
|
||||||
- 自动发现所有上游站点的可用模型,**零配置**生成路由表
|
- 自动发现所有上游站点的可用模型,**零配置**生成路由表
|
||||||
- 四级成本信号:**实测成本 → 账号配置成本 → 目录参考价 → 默认兜底**
|
- 四级成本信号:实测成本 → 配置成本 → 目录参考价 → 默认兜底
|
||||||
- 多通道概率分摊,基于成本(40%)、余额(30%)、使用率(30%)加权分配
|
- 多通道概率分摊(成本 40% / 余额 30% / 使用率 30%)
|
||||||
- 失败通道自动冷却与避让(默认 10 分钟冷却期)
|
- 失败自动冷却(默认 10 分钟),自动切换通道
|
||||||
- 请求失败自动重试,自动切换其他可用通道
|
|
||||||
- 路由决策可视化解释,每次选择透明可审计
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/routes.png" alt="smart-routing-detail" width="700"/>
|
|
||||||
<p><sub>智能路由配置界面 — 支持精确匹配、通配符、概率分配等多种路由策略</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### 📡 多平台聚合管理
|
### 📡 多平台聚合管理
|
||||||
|
|
||||||
| 平台 | 适配器 | 说明 |
|
| 平台 | 适配器 |
|
||||||
| ------------------- | ------------- | -------------------- |
|
|------|--------|
|
||||||
| **New API** | `new-api` | 新一代大模型网关 |
|
| New API | `new-api` |
|
||||||
| **One API** | `one-api` | 经典 OpenAI 接口聚合 |
|
| One API | `one-api` |
|
||||||
| **OneHub** | `onehub` | One API 增强分支 |
|
| OneHub | `onehub` |
|
||||||
| **DoneHub** | `done-hub` | OneHub 增强分支 |
|
| DoneHub | `done-hub` |
|
||||||
| **Veloera** | `veloera` | API 网关平台 |
|
| Veloera | `veloera` |
|
||||||
| **AnyRouter** | `anyrouter` | 通用路由平台 |
|
| AnyRouter | `anyrouter` |
|
||||||
| **Sub2API** | `sub2api` | 订阅制中转平台 |
|
| Sub2API | `sub2api` |
|
||||||
|
|
||||||
各平台适配器覆盖模型枚举、余额查询、Token 管理、代理接入等通用能力;登录、签到、用户信息等能力按平台而异。
|
|
||||||
|
|
||||||
### 👥 账号与 Token 管理
|
### 👥 账号与 Token 管理
|
||||||
|
|
||||||
- **多站点多账号**:每个站点可添加多个账号,每个账号可持有多个 API Token
|
- 多站点多账号,四级健康状态追踪(healthy / unhealthy / degraded / disabled)
|
||||||
- **健康状态追踪**:`healthy` / `unhealthy` / `degraded` / `disabled` 四级状态机
|
- 凭证加密存储,自动续签,站点联动禁用
|
||||||
- **凭证加密存储**:所有敏感凭证均加密保存在本地数据库中
|
|
||||||
- **自动续签**:Token 过期时自动重新登录获取新凭证
|
|
||||||
- **站点联动**:禁用站点自动级联禁用所有关联账号
|
|
||||||
|
|
||||||
### 🏪 模型广场
|
|
||||||
|
|
||||||
- 跨站点模型覆盖总览:哪些模型可用、多少账号覆盖、各站定价对比
|
|
||||||
- 延迟、成功率等实测指标展示
|
|
||||||
- 上游模型目录缓存与品牌分类(OpenAI、Anthropic、Google、DeepSeek 等)
|
|
||||||
- 交互式模型测试器,在线验证模型可用性
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/model-marketplace.png" alt="model-marketplace-detail" width="700"/>
|
|
||||||
<p><sub>模型广场 — 一站式浏览所有可用模型的覆盖率、定价和性能指标</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### ✅ 自动签到
|
### ✅ 自动签到
|
||||||
|
|
||||||
- Cron 定时执行(默认每日 08:00)
|
- Cron 定时执行(默认每日 08:00)
|
||||||
- 智能解析奖励金额,签到失败自动通知
|
- 智能解析奖励,签到失败自动通知
|
||||||
- 按账号启用/禁用控制
|
- 完整签到日志与并发锁防重
|
||||||
- 完整签到日志与历史查询
|
|
||||||
- 并发锁防止重复签到
|
|
||||||
|
|
||||||
### 💰 余额管理
|
### 💰 余额管理
|
||||||
|
|
||||||
- 定时余额刷新(默认每小时),批量更新所有活跃账号
|
- 定时刷新(默认每小时),收入与消费趋势分析
|
||||||
- 收入追踪:每日/累计收入与消费趋势分析
|
- 余额兜底估算,凭证过期自动重新登录
|
||||||
- 余额兜底估算:API 不可用时通过代理日志推算余额变动
|
|
||||||
- 凭证过期自动重新登录
|
|
||||||
|
|
||||||
### 🔔 告警通知
|
### 🔔 告警通知
|
||||||
|
|
||||||
支持五种通知渠道:
|
五种渠道:Webhook / Bark / Server酱 / Telegram Bot / SMTP 邮件
|
||||||
|
|
||||||
| 渠道 | 说明 |
|
告警场景:余额不足、站点异常、签到失败、代理异常、Token 过期、每日摘要
|
||||||
| ---------------------- | ----------------- |
|
|
||||||
| **Webhook** | 自定义 HTTP 推送 |
|
|
||||||
| **Bark** | iOS 推送通知 |
|
|
||||||
| **Server酱** | 微信通知 |
|
|
||||||
| **Telegram Bot** | Telegram 消息通知 |
|
|
||||||
| **SMTP 邮件** | 标准邮件通知 |
|
|
||||||
|
|
||||||
告警场景:余额不足预警、站点/账号异常、签到失败、代理请求失败、Token 过期提醒、每日摘要报告。告警冷却机制(默认 300 秒)防止重复通知。
|
|
||||||
|
|
||||||
### 📊 数据看板
|
|
||||||
|
|
||||||
- 站点余额饼图、每日消费趋势图
|
|
||||||
- 全局搜索(站点、账号、模型)
|
|
||||||
- 系统事件日志、代理请求日志(模型、状态、延迟、Token 用量、成本估算)
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/dashboard.png" alt="dashboard-detail" width="700"/>
|
|
||||||
<p><sub>数据看板 — 余额分布、消费趋势、系统健康状态一目了然</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### 🎮 模型操练场
|
### 🎮 模型操练场
|
||||||
|
|
||||||
- 交互式聊天测试,即时验证模型可用性与响应质量
|
- 交互式聊天测试,流式/非流式双模式
|
||||||
- 选择任意路由模型,对比不同通道输出
|
- 对比不同通道输出
|
||||||
- 流式 / 非流式双模式测试
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/playground.png" alt="playground-detail" width="700"/>
|
|
||||||
<p><sub>模型操练场 — 在线交互测试,验证模型可用性与响应质量</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### 📦 轻量部署
|
|
||||||
|
|
||||||
- **单 Docker 容器**,默认本地数据目录部署,支持外接 MySQL / PostgreSQL 运行时数据库
|
|
||||||
- Docker 镜像支持 `amd64`、`arm64` 和 `armv7l`(`linux/arm/v7`)服务端部署
|
|
||||||
- 数据完整导入导出,迁移无忧
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 快速开始
|
## 🚀 快速开始
|
||||||
|
|
||||||
<a href="https://zeabur.com/templates/DOX5PR">
|
|
||||||
<img alt="Deploy on Zeabur" src="https://zeabur.com/button.svg" height="28">
|
|
||||||
</a>
|
|
||||||
<a href="https://render.com/deploy?repo=https://github.com/cita-777/metapi">
|
|
||||||
<img alt="Deploy to Render" src="https://render.com/images/deploy-to-render-button.svg" height="28">
|
|
||||||
</a>
|
|
||||||
|
|
||||||
### Docker Compose(推荐)
|
### Docker Compose(推荐)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir metapi && cd metapi
|
mkdir boosapi && cd boosapi
|
||||||
|
|
||||||
cat > docker-compose.yml << 'EOF'
|
cat > docker-compose.yml << 'EOF'
|
||||||
services:
|
services:
|
||||||
metapi:
|
boosapi:
|
||||||
image: 1467078763/metapi:latest
|
image: 1467078763/metapi:latest
|
||||||
ports:
|
ports:
|
||||||
- "4000:4000"
|
- "4000:4000"
|
||||||
@@ -320,167 +131,54 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# 设置 Token 并启动
|
# AUTH_TOKEN = 管理后台登录令牌
|
||||||
# AUTH_TOKEN = 管理后台登录令牌(登录时输入此值)
|
|
||||||
export AUTH_TOKEN=your-admin-token
|
|
||||||
# PROXY_TOKEN = 下游客户端调用 /v1/* 的 Token
|
# PROXY_TOKEN = 下游客户端调用 /v1/* 的 Token
|
||||||
|
export AUTH_TOKEN=your-admin-token
|
||||||
export PROXY_TOKEN=your-proxy-sk-token
|
export PROXY_TOKEN=your-proxy-sk-token
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><strong>一行 Docker 命令</strong></summary>
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker run -d --name metapi \
|
|
||||||
-p 4000:4000 \
|
|
||||||
-e AUTH_TOKEN=your-admin-token \
|
|
||||||
-e PROXY_TOKEN=your-proxy-sk-token \
|
|
||||||
-e TZ=Asia/Shanghai \
|
|
||||||
-v ./data:/app/data \
|
|
||||||
--restart unless-stopped \
|
|
||||||
1467078763/metapi:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
启动后访问 `http://localhost:4000`,用 `AUTH_TOKEN` 登录即可。
|
启动后访问 `http://localhost:4000`,用 `AUTH_TOKEN` 登录即可。
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Docker 镜像支持 `amd64`、`arm64` 和 `armv7l`(`linux/arm/v7`)服务端部署。
|
|
||||||
> 当前 `armv7l` 支持范围仅限服务端 / Docker 运行,不包含桌面安装包。
|
|
||||||
|
|
||||||
<!-- markdownlint-disable-next-line MD028 -->
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> 请务必修改 `AUTH_TOKEN` 和 `PROXY_TOKEN`,不要使用默认值。数据存储在 `./data` 目录,升级不会丢失。
|
> 请务必修改 `AUTH_TOKEN` 和 `PROXY_TOKEN`,不要使用默认值。
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> 初始管理员令牌即启动时配置的 `AUTH_TOKEN`。
|
|
||||||
> 若在 Compose 外运行且未显式设置 `AUTH_TOKEN`,默认为 `change-me-admin-token`(仅用于本地调试)。
|
|
||||||
> 桌面安装包首次启动也属于这类场景:如果你没有额外注入 `AUTH_TOKEN`,默认管理员令牌同样是 `change-me-admin-token`。
|
|
||||||
> 如果在「设置」面板中修改了管理员令牌,后续登录请使用新令牌。
|
|
||||||
|
|
||||||
Docker Compose、桌面安装包、反向代理、升级与数据库选项等详见 [部署指南](https://metapi.cita777.me/deployment)。
|
|
||||||
|
|
||||||
📖 **[环境变量与配置](https://metapi.cita777.me/configuration)** · **[客户端接入指南](https://metapi.cita777.me/client-integration)** · **[常见问题](https://metapi.cita777.me/faq)**
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🏗️ 技术栈
|
## 🏗️ 技术栈
|
||||||
|
|
||||||
| 层 | 技术 |
|
| 层 | 技术 |
|
||||||
| -------------------- | ----------------------------------------------------------------- |
|
|----|------|
|
||||||
| **后端框架** | [Fastify](https://fastify.dev) — 高性能 Node.js 后端框架 |
|
| 后端框架 | Fastify |
|
||||||
| **前端框架** | [React 18](https://react.dev) + [Vite](https://vitejs.dev) |
|
| 前端框架 | React 18 + Vite |
|
||||||
| **语言** | [TypeScript](https://www.typescriptlang.org) — 端到端类型安全 |
|
| 语言 | TypeScript |
|
||||||
| **样式** | [Tailwind CSS v4](https://tailwindcss.com) — 原子化样式框架 |
|
| 样式 | Tailwind CSS v4 |
|
||||||
| **数据库** | SQLite / MySQL / PostgreSQL +[Drizzle ORM](https://orm.drizzle.team) |
|
| 数据库 | SQLite / MySQL / PostgreSQL + Drizzle ORM |
|
||||||
| **数据可视化** | [VChart](https://visactor.io/vchart) (@visactor/react-vchart) |
|
| 数据可视化 | VChart |
|
||||||
| **定时任务** | [node-cron](https://github.com/node-cron/node-cron) |
|
| 定时任务 | node-cron |
|
||||||
| **容器化** | Docker (Debian slim) + Docker Compose |
|
| 容器化 | Docker + Docker Compose |
|
||||||
| **测试** | [Vitest](https://vitest.dev) |
|
| 测试 | Vitest |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🛠️ 本地开发
|
## 🛠️ 本地开发
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 安装依赖
|
|
||||||
npm install
|
npm install
|
||||||
|
|
||||||
# 数据库迁移
|
|
||||||
npm run db:migrate
|
npm run db:migrate
|
||||||
|
npm run dev # 前后端热更新
|
||||||
# 启动开发环境(前后端热更新)
|
|
||||||
npm run dev
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run build # 构建前端 + 后端
|
npm run build # 构建前端 + 后端
|
||||||
npm run build:web # 仅构建前端(Vite)
|
npm run build:web # 仅构建前端
|
||||||
npm run build:server # 仅构建后端(TypeScript)
|
npm run build:server # 仅构建后端
|
||||||
npm run dist:desktop:mac:intel # 构建 mac Intel (x64) 桌面安装包
|
npm test # 运行全部测试
|
||||||
npm test # 运行全部测试
|
npm run db:generate # 生成迁移文件
|
||||||
npm run test:watch # 监听模式
|
|
||||||
npm run db:generate # 生成 Drizzle 迁移文件
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔗 相关项目
|
|
||||||
|
|
||||||
### 上游兼容平台
|
|
||||||
|
|
||||||
| 项目 | 说明 |
|
|
||||||
| ----------------------------------------------- | --------------------------------------- |
|
|
||||||
| [New API](https://github.com/QuantumNous/new-api) | 新一代大模型网关,Metapi 的主要上游之一 |
|
|
||||||
| [One API](https://github.com/songquanpeng/one-api) | 经典 OpenAI 接口聚合管理 |
|
|
||||||
| [OneHub](https://github.com/MartialBE/one-hub) | One API 增强分支 |
|
|
||||||
| [DoneHub](https://github.com/deanxv/done-hub) | OneHub 增强分支 |
|
|
||||||
| [Veloera](https://github.com/Veloera/Veloera) | API 网关平台 |
|
|
||||||
|
|
||||||
### 参考和使用的项目
|
|
||||||
|
|
||||||
| 项目 | 说明 |
|
|
||||||
| ---------------------------------------------------- | --------------------------------------------------------- |
|
|
||||||
| [All API Hub](https://github.com/qixing-jk/all-api-hub) | 浏览器扩展版 — 一站式管理中转站账号,Metapi 最初灵感来源 |
|
|
||||||
| [LLM Metadata](https://github.com/nicepkg/llm-metadata) | LLM 模型元数据库,用于模型描述参考 |
|
|
||||||
| [New API](https://github.com/QuantumNous/new-api) | 平台适配器参考实现 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔒 数据与隐私
|
|
||||||
|
|
||||||
Metapi 完全自托管,所有数据(账号、令牌、路由、日志)均存储在你自己的部署环境中,不会向任何第三方发送数据。代理请求仅在你的服务器与上游站点之间直连传输。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🤝 贡献
|
|
||||||
|
|
||||||
欢迎各种形式的贡献!
|
|
||||||
|
|
||||||
- 🐛 报告 Bug — [提交 Issue](https://github.com/cita-777/metapi/issues)
|
|
||||||
- 💡 功能建议 — [发起讨论](https://github.com/cita-777/metapi/issues)
|
|
||||||
- 🔧 代码贡献 — [提交 Pull Request](https://github.com/cita-777/metapi/pulls)
|
|
||||||
- 📝 贡献指南 — [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
||||||
- 📜 行为准则 — [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🛡️ 安全
|
|
||||||
|
|
||||||
如发现安全问题,请参考 [SECURITY.md](SECURITY.md) 使用非公开方式报告。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📜 License
|
## 📜 License
|
||||||
|
|
||||||
[MIT](LICENSE)
|
[MIT](LICENSE)
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🙏 致谢
|
|
||||||
|
|
||||||
感谢所有为 Metapi 提交代码、反馈问题、提供思路和实测数据的朋友。这个项目的很多能力,都是在社区的真实使用和反复打磨中慢慢长出来的。
|
|
||||||
|
|
||||||
特别感谢所有贡献者:
|
|
||||||
|
|
||||||
<a href="https://github.com/cita-777/metapi/graphs/contributors">
|
|
||||||
<img src="https://contrib.rocks/image?repo=cita-777/metapi" alt="Contributors" />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⭐ Star History
|
|
||||||
|
|
||||||
[](https://www.star-history.com/#cita-777/metapi&type=date&legend=top-left)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
|
|
||||||
**⭐ 如果 Metapi 对你有帮助,给个 Star 就是最大的支持!**
|
|
||||||
|
|
||||||
`<sub>`Built with ❤️ by the AI community`</sub>`
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|||||||
+87
-526
@@ -1,48 +1,19 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src="docs/logos/logo-full.png" alt="Metapi" width="280">
|
# BoosAPI
|
||||||
|
|
||||||
**A relay for relays — aggregate scattered AI relay stations into one unified gateway**
|
**AI Aggregation Gateway — Unify scattered relay stations into one entry point**
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Bring together all your New API / One API / OneHub / DoneHub / Veloera / AnyRouter / Sub2API sites
|
Aggregate your New API / One API / OneHub / DoneHub / Veloera / AnyRouter / Sub2API stations
|
||||||
<br>
|
<br>
|
||||||
into <strong>one API Key, one endpoint</strong>, with automatic model discovery, smart routing, and cost optimization.
|
into <strong>one API Key, one endpoint</strong> — with auto model discovery, smart routing, and cost optimization.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://linux.do/t/topic/1671489" alt="LINUX DO">
|
<img alt="Node.js" src="https://img.shields.io/badge/Node.js-22.15%2B-339933?logo=node.js&style=flat">
|
||||||
<img src="https://shorturl.at/ggSqS" alt="LINUX DO">
|
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&style=flat">
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://github.com/cita-777/metapi/releases">
|
|
||||||
<img alt="GitHub Release" src="https://img.shields.io/github/v/release/cita-777/metapi?label=Release&logo=github&style=flat">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://github.com/cita-777/metapi/stargazers">
|
|
||||||
<img alt="GitHub Stars" src="https://img.shields.io/github/stars/cita-777/metapi?style=flat&logo=github&label=Stars">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://deepwiki.com/cita-777/metapi">
|
|
||||||
<img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://hub.docker.com/r/1467078763/metapi">
|
|
||||||
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/1467078763/metapi?style=flat&logo=docker&label=Docker%20Pulls">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://hub.docker.com/r/1467078763/metapi">
|
|
||||||
<img alt="Docker Image" src="https://img.shields.io/badge/docker-1467078763%2Fmetapi-blue?logo=docker&style=flat">
|
|
||||||
</a><!--
|
|
||||||
--><a href="LICENSE">
|
|
||||||
<img alt="License" src="https://img.shields.io/badge/license-MIT-brightgreen?style=flat">
|
<img alt="License" src="https://img.shields.io/badge/license-MIT-brightgreen?style=flat">
|
||||||
</a><!--
|
|
||||||
--><img alt="Node.js" src="https://img.shields.io/badge/Node.js-22.15%2B-339933?logo=node.js&style=flat"><!--
|
|
||||||
--><img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&style=flat"><!--
|
|
||||||
--><a href="https://zeabur.com/templates/DOX5PR">
|
|
||||||
<img alt="Deploy on Zeabur" src="https://zeabur.com/button.svg" height="28">
|
|
||||||
</a><!--
|
|
||||||
--><a href="https://render.com/deploy?repo=https://github.com/cita-777/metapi">
|
|
||||||
<img alt="Deploy to Render" src="https://render.com/images/deploy-to-render-button.svg" height="28">
|
|
||||||
</a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -50,267 +21,89 @@ into <strong>one API Key, one endpoint</strong>, with automatic model discovery,
|
|||||||
<a href="README_EN.md"><strong>English</strong></a>
|
<a href="README_EN.md"><strong>English</strong></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://metapi.cita777.me"><strong>Docs</strong></a> ·
|
|
||||||
<a href="https://metapi.cita777.me/getting-started">Quick Start</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/deployment">Deployment</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/configuration">Configuration</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/client-integration">Client Integration</a> ·
|
|
||||||
<a href="https://metapi.cita777.me/faq">FAQ</a> ·
|
|
||||||
<a href="CONTRIBUTING.md">Contributing</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🌐 Live Demo
|
## 📖 Introduction
|
||||||
|
|
||||||
> Try Metapi without deploying — full-featured demo instance:
|
With the growing ecosystem of AI relay stations (New API / One API based), managing balances, models, and API keys across multiple stations is tedious and time-consuming.
|
||||||
|
|
||||||
| | |
|
**BoosAPI** acts as a **meta-aggregation layer** above these stations, unifying them under **a single entry point** — all downstream tools connect seamlessly without configuration changes.
|
||||||
|---|---|
|
|
||||||
| 🔗 **Demo URL** | [metapi-t9od.onrender.com](https://metapi-t9od.onrender.com/) |
|
|
||||||
| 🔑 **Admin Token** | `123456` |
|
|
||||||
|
|
||||||
> **⚠️ Security Notice**: This is a public demo. **Do NOT enter any real API keys, credentials, or site information.** Data may be reset at any time.
|
### Supported Upstreams
|
||||||
|
|
||||||
> **ℹ️ Note**: Demo runs on Render free tier + OpenRouter free models (only `:free` suffixed models available). First visit may take 30-60s to wake up.
|
- **Panels**: New API, One API, OneHub, DoneHub, Veloera, AnyRouter, Sub2API
|
||||||
|
- **Generic**: OpenAI / Claude / Gemini compatible, cliproxyapi / CPA
|
||||||
|
- **Official**: Aliyun, Zhipu, Doubao Coding Plan, DeepSeek, Moonshot, MiniMax, ModelScope
|
||||||
|
- **OAuth**: Codex, Claude, Gemini CLI, Antigravity
|
||||||
|
|
||||||
|
| Pain Point | BoosAPI Solution |
|
||||||
|
|------------|-----------------|
|
||||||
|
| 🔑 One key per station, messy configs | **Unified proxy entry + multi-key strategy** |
|
||||||
|
| 💸 Which station is cheapest? | **Smart routing** by cost, balance, usage |
|
||||||
|
| 🔄 Manual failover | **Auto failover** with cooldown and retry |
|
||||||
|
| 📊 Scattered balances | **Central dashboard** with alerts |
|
||||||
|
| ✅ Daily check-ins | **Auto check-in** with reward tracking |
|
||||||
|
| 🤷 What models are available? | **Auto model discovery**, zero config |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## About
|
## ✨ Features
|
||||||
|
|
||||||
The AI ecosystem is seeing a growing number of aggregation relay stations based on New API / One API and similar projects. Managing balances, model lists, and API keys across multiple sites is scattered and time-consuming.
|
### 🌐 Unified Proxy Gateway
|
||||||
|
|
||||||
**Metapi** acts as the **Meta-Aggregation Layer** on top of these relay stations, unifying multiple sites into **one endpoint (with configurable per-project downstream API Keys)** — all downstream tools (Cursor, Claude Code, Codex, Open WebUI, etc.) can seamlessly access all models. Currently supported upstream platforms:
|
- Compatible with **OpenAI** and **Claude** downstream formats
|
||||||
|
- Responses / Chat Completions / Messages / Completions / Embeddings / Images / Models / Files
|
||||||
|
- SSE streaming with automatic format conversion
|
||||||
|
|
||||||
- [New API](https://github.com/QuantumNous/new-api)
|
### 🧠 Smart Routing Engine
|
||||||
- [One API](https://github.com/songquanpeng/one-api)
|
|
||||||
- [OneHub](https://github.com/MartialBE/one-hub)
|
|
||||||
- [DoneHub](https://github.com/deanxv/done-hub)
|
|
||||||
- [Veloera](https://github.com/Veloera/Veloera)
|
|
||||||
- [AnyRouter](https://anyrouter.top) — Universal routing platform
|
|
||||||
- [Sub2API](https://github.com/Wei-Shaw/sub2api) — Subscription-based relay
|
|
||||||
|
|
||||||
| Pain Point | How Metapi Solves It |
|
- Auto-discovers models from all upstream stations
|
||||||
| --- | --- |
|
- Four-tier cost signals: measured → configured → catalog → fallback
|
||||||
| One key per site, tedious client config | **Unified proxy endpoint + optional per-project downstream keys** — all site models auto-aggregated under `/v1/*` |
|
- Multi-channel weighted distribution (cost 40%, balance 30%, usage 30%)
|
||||||
| No idea which site offers the cheapest model | **Smart routing** auto-selects the optimal channel by cost, balance, and usage |
|
- Auto cooldown on failure (default 10 min), seamless channel switching
|
||||||
| Site goes down, manual switching is a hassle | **Auto-failover** — failed channels cool down and traffic shifts automatically |
|
|
||||||
| Balances scattered everywhere | **Centralized dashboard** — at-a-glance overview with low-balance alerts |
|
### 📡 Multi-Platform Management
|
||||||
| Daily check-ins across sites | **Auto check-in** — scheduled execution with reward tracking |
|
|
||||||
| Don't know which site has which models | **Auto model discovery** — new upstream models appear with zero config |
|
| Platform | Adapter |
|
||||||
|
|----------|---------|
|
||||||
|
| New API | `new-api` |
|
||||||
|
| One API | `one-api` |
|
||||||
|
| OneHub | `onehub` |
|
||||||
|
| DoneHub | `done-hub` |
|
||||||
|
| Veloera | `veloera` |
|
||||||
|
| AnyRouter | `anyrouter` |
|
||||||
|
| Sub2API | `sub2api` |
|
||||||
|
|
||||||
|
### 👥 Account & Token Management
|
||||||
|
|
||||||
|
- Multi-station, multi-account with health tracking (healthy / unhealthy / degraded / disabled)
|
||||||
|
- Encrypted credential storage, auto-renewal, cascading disable
|
||||||
|
|
||||||
|
### 💰 Balance Management
|
||||||
|
|
||||||
|
- Scheduled refresh (default hourly), income/expense trends
|
||||||
|
- Fallback estimation when API is unavailable
|
||||||
|
|
||||||
|
### 🔔 Alerts & Notifications
|
||||||
|
|
||||||
|
Five channels: Webhook / Bark / ServerChan / Telegram Bot / SMTP
|
||||||
|
|
||||||
|
Scenarios: low balance, station failure, check-in failure, proxy errors, token expiry, daily digest
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Screenshots
|
## 🚀 Quick Start
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/dashboard.png" alt="dashboard" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Dashboard</b> — Balance distribution, spending trends, system overview</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/model-marketplace.png" alt="model-marketplace" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Model Marketplace</b> — Cross-site model coverage, pricing comparison, measured metrics</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/routes.png" alt="routes" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Smart Routing</b> — Multi-channel probability distribution, cost-priority routing</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/accounts.png" alt="accounts" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Account Management</b> — Multi-site multi-account, health state tracking</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/sites.png" alt="sites" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Site Management</b> — Upstream site configuration and status overview</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/tokens.png" alt="tokens" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Token Management</b> — API Token lifecycle management</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/playground.png" alt="playground" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Model Playground</b> — Interactive online model testing</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/checkin.png" alt="checkin" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Check-in Log</b> — Auto check-in status and reward tracking</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/proxy-logs.png" alt="proxy-logs" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Usage Logs</b> — Proxy request logs and cost breakdown</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/monitor.png" alt="monitor" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Availability Monitor</b> — Channel health real-time monitoring</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/settings.png" alt="settings" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>System Settings</b> — Global parameters and security configuration</div>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<img src="docs/screenshots/notification-settings.png" alt="notification-settings" style="width:100%;height:auto;"/>
|
|
||||||
<div><b>Notification Settings</b> — Multi-channel alert and push configuration</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Architecture Overview
|
|
||||||
|
|
||||||
**Downstream Clients** (Cursor · Claude Code · Codex · Open WebUI · Cherry Studio, etc.)
|
|
||||||
 ↓  `Authorization: Bearer <PROXY_TOKEN>`
|
|
||||||
**Metapi Gateway**
|
|
||||||
 • Unified `/v1` proxy for core OpenAI / Claude-compatible endpoints (Responses, Chat Completions, Messages, Completions, Embeddings, Images, Models)
|
|
||||||
 • Smart Routing Engine — weighted selection by cost, balance, and availability; auto-cooldown & retry on failure
|
|
||||||
 • Model Discovery — auto-aggregates all upstream models with zero config
|
|
||||||
 • Format Conversion — transparent bidirectional OpenAI ⇄ Claude conversion
|
|
||||||
 • Auto Check-in · Balance Management · Alerts & Notifications · Data Dashboard
|
|
||||||
 ↓
|
|
||||||
**Upstream Platforms** (New API · One API · OneHub · DoneHub · Veloera · AnyRouter · Sub2API …)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
### Unified Proxy Gateway
|
|
||||||
|
|
||||||
- Compatible with **OpenAI** and **Claude** downstream formats, works with all mainstream clients
|
|
||||||
- Supports Responses / Chat Completions / Messages / Completions (Legacy) / Embeddings / Images / Models, plus standard `/v1/files`
|
|
||||||
- Full SSE streaming support with automatic format conversion (OpenAI <-> Claude)
|
|
||||||
|
|
||||||
### Smart Routing Engine
|
|
||||||
|
|
||||||
- Auto-discovers all available models from upstream sites — **zero-config** route table generation
|
|
||||||
- Four-tier cost signal: **measured cost -> account-configured cost -> catalog reference price -> default fallback**
|
|
||||||
- Multi-channel probabilistic distribution weighted by cost (40%), balance (30%), and usage (30%)
|
|
||||||
- Failed channels auto-cool down (default 10-minute cooldown)
|
|
||||||
- Auto-retry on failure with automatic channel switching
|
|
||||||
- Routing decisions are visually explainable — every choice is transparent and auditable
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/routes.png" alt="smart-routing-detail" width="700"/>
|
|
||||||
<p><sub>Smart Routing UI — supports exact match, wildcards, probability distribution, and more routing strategies</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Multi-Platform Aggregation
|
|
||||||
|
|
||||||
| Platform | Adapter | Description |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| **New API** | `new-api` | Next-gen LLM gateway |
|
|
||||||
| **One API** | `one-api` | Classic OpenAI API aggregation |
|
|
||||||
| **OneHub** | `onehub` | Enhanced One API fork |
|
|
||||||
| **DoneHub** | `done-hub` | Enhanced OneHub fork |
|
|
||||||
| **Veloera** | `veloera` | API gateway platform |
|
|
||||||
| **AnyRouter** | `anyrouter` | Universal routing platform |
|
|
||||||
| **Sub2API** | `sub2api` | Subscription-based relay |
|
|
||||||
|
|
||||||
Adapters cover shared capabilities such as model discovery, balance access, token management, and proxy integration; login, check-in, and user-info flows vary by platform.
|
|
||||||
|
|
||||||
### Account & Token Management
|
|
||||||
|
|
||||||
- **Multi-site, multi-account**: Each site supports multiple accounts, each account can hold multiple API tokens
|
|
||||||
- **Health tracking**: `healthy` / `unhealthy` / `degraded` / `disabled` four-state machine
|
|
||||||
- **Encrypted credential storage**: All sensitive credentials are encrypted in the local database
|
|
||||||
- **Auto-renewal**: Tokens are automatically re-authenticated when expired
|
|
||||||
- **Cascading control**: Disabling a site automatically disables all associated accounts
|
|
||||||
|
|
||||||
### Model Marketplace
|
|
||||||
|
|
||||||
- Cross-site model coverage overview: which models are available, how many accounts cover them, pricing comparison
|
|
||||||
- Latency, success rate, and other measured metrics
|
|
||||||
- Upstream model catalog caching with brand classification (OpenAI, Anthropic, Google, DeepSeek, etc.)
|
|
||||||
- Interactive model tester for online verification
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/model-marketplace.png" alt="model-marketplace-detail" width="700"/>
|
|
||||||
<p><sub>Model Marketplace — browse all available models' coverage, pricing, and performance metrics in one place</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Auto Check-in
|
|
||||||
|
|
||||||
- Cron-scheduled automatic check-in (default: daily at 08:00)
|
|
||||||
- Smart reward parsing with failure notifications
|
|
||||||
- Per-account execution with enable/disable control
|
|
||||||
- Full check-in logging with history queries
|
|
||||||
- Concurrency locking to prevent duplicate check-ins
|
|
||||||
|
|
||||||
### Balance Management
|
|
||||||
|
|
||||||
- Scheduled balance refresh (default: every hour), batch updates for all active accounts
|
|
||||||
- Income tracking: daily/cumulative income with spending trend analysis
|
|
||||||
- Balance fallback estimation: infer balance changes from proxy logs when API is unavailable
|
|
||||||
- Auto re-login on credential expiry
|
|
||||||
|
|
||||||
### Alerts & Notifications
|
|
||||||
|
|
||||||
Five notification channels supported:
|
|
||||||
|
|
||||||
| Channel | Description |
|
|
||||||
| --- | --- |
|
|
||||||
| **Webhook** | Custom HTTP push |
|
|
||||||
| **Bark** | iOS push notifications |
|
|
||||||
| **ServerChan** | WeChat notifications |
|
|
||||||
| **Telegram Bot** | Telegram message notifications |
|
|
||||||
| **SMTP Email** | Standard email notifications |
|
|
||||||
|
|
||||||
Alert scenarios: low balance warning, site/account anomalies, check-in failures, proxy request failures, token expiry reminders, daily summary reports. Alert cooldown mechanism (default: 300 seconds) prevents duplicate notifications.
|
|
||||||
|
|
||||||
### Data Dashboard
|
|
||||||
|
|
||||||
- Site balance pie chart, daily spending trend graphs
|
|
||||||
- Global search (sites, accounts, models)
|
|
||||||
- System event logs, proxy request logs (model, status, latency, token usage, cost estimation)
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/dashboard.png" alt="dashboard-detail" width="700"/>
|
|
||||||
<p><sub>Data Dashboard — balance distribution, spending trends, system health at a glance</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Model Playground
|
|
||||||
|
|
||||||
- Interactive chat testing to instantly verify model availability and response quality
|
|
||||||
- Select any routed model to compare outputs across different channels
|
|
||||||
- Streaming / non-streaming dual mode testing
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="docs/screenshots/playground.png" alt="playground-detail" width="700"/>
|
|
||||||
<p><sub>Model Playground — interactive online testing, verify model availability and response quality</sub></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Lightweight Deployment
|
|
||||||
|
|
||||||
- **Single Docker container** with a default local data directory, plus optional external MySQL / PostgreSQL runtime DB
|
|
||||||
- Docker images support `amd64`, `arm64`, and `armv7l` (`linux/arm/v7`) server deployments
|
|
||||||
- Full data import/export for worry-free migration
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
### Docker Compose (Recommended)
|
### Docker Compose (Recommended)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir metapi && cd metapi
|
mkdir boosapi && cd boosapi
|
||||||
|
|
||||||
cat > docker-compose.yml << 'EOF'
|
cat > docker-compose.yml << 'EOF'
|
||||||
services:
|
services:
|
||||||
metapi:
|
boosapi:
|
||||||
image: 1467078763/metapi:latest
|
image: 1467078763/metapi:latest
|
||||||
ports:
|
ports:
|
||||||
- "4000:4000"
|
- "4000:4000"
|
||||||
@@ -327,277 +120,45 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Set tokens and start
|
|
||||||
# AUTH_TOKEN = Admin panel login token (enter this value when logging in)
|
|
||||||
export AUTH_TOKEN=your-admin-token
|
export AUTH_TOKEN=your-admin-token
|
||||||
# PROXY_TOKEN = Token for downstream clients to call /v1/*
|
|
||||||
export PROXY_TOKEN=your-proxy-sk-token
|
export PROXY_TOKEN=your-proxy-sk-token
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
Open `http://localhost:4000` and log in with `AUTH_TOKEN`.
|
||||||
<summary><strong>One-line Docker command</strong></summary>
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Tech Stack
|
||||||
|
|
||||||
|
| Layer | Tech |
|
||||||
|
|-------|------|
|
||||||
|
| Backend | Fastify |
|
||||||
|
| Frontend | React 18 + Vite |
|
||||||
|
| Language | TypeScript |
|
||||||
|
| Styling | Tailwind CSS v4 |
|
||||||
|
| Database | SQLite / MySQL / PostgreSQL + Drizzle ORM |
|
||||||
|
| Visualization | VChart |
|
||||||
|
| Container | Docker + Docker Compose |
|
||||||
|
| Test | Vitest |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Local Development
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -d --name metapi \
|
|
||||||
-p 4000:4000 \
|
|
||||||
-e AUTH_TOKEN=your-admin-token \
|
|
||||||
-e PROXY_TOKEN=your-proxy-sk-token \
|
|
||||||
-e TZ=Asia/Shanghai \
|
|
||||||
-v ./data:/app/data \
|
|
||||||
--restart unless-stopped \
|
|
||||||
1467078763/metapi:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
After starting, visit `http://localhost:4000` and log in with your `AUTH_TOKEN`!
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Docker images support `amd64`, `arm64`, and `armv7l` (`linux/arm/v7`) server deployments.
|
|
||||||
> Current `armv7l` support is limited to server / Docker usage and does not include Electron desktop packaging support.
|
|
||||||
|
|
||||||
<!-- markdownlint-disable-next-line MD028 -->
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Make sure to change `AUTH_TOKEN` and `PROXY_TOKEN` — do not use default values. Data is stored in the `./data` directory and persists across upgrades.
|
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> The initial admin token is the `AUTH_TOKEN` configured at startup.
|
|
||||||
> If running outside Compose without explicitly setting `AUTH_TOKEN`, the default is `change-me-admin-token` (for local debugging only).
|
|
||||||
> The desktop installer falls into this category on first launch too: if you do not inject `AUTH_TOKEN`, the default admin token is also `change-me-admin-token`.
|
|
||||||
> If you change the admin token in the Settings panel, use the new token for subsequent logins.
|
|
||||||
|
|
||||||
For Docker Compose, desktop installers, reverse proxy, upgrades, and database options, see [Deployment Guide](docs/deployment.md).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
> Docs site (VitePress) local preview:
|
|
||||||
>
|
|
||||||
> ```bash
|
|
||||||
> npm run docs:dev
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> Docs site build:
|
|
||||||
>
|
|
||||||
> ```bash
|
|
||||||
> npm run docs:build
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> GitHub Actions auto publish: each push to `main` runs `.github/workflows/docs-pages.yml` and deploys to GitHub Pages.
|
|
||||||
> First-time setup in repository settings:
|
|
||||||
> `Settings -> Pages -> Build and deployment -> Source: GitHub Actions`
|
|
||||||
|
|
||||||
| Category | Link | Description |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| Docs Home | [docs/index.md](docs/index.md) | Publishable docs portal with nav/sidebar/search |
|
|
||||||
| Docs Maintenance | [docs/README.md](docs/README.md) | Maintenance and contributor-oriented docs entry |
|
|
||||||
| Quick Start | [docs/getting-started.md](docs/getting-started.md) | Get running in 10 minutes |
|
|
||||||
| Deployment | [docs/deployment.md](docs/deployment.md) | Docker Compose, reverse proxy, upgrades |
|
|
||||||
| Configuration | [docs/configuration.md](docs/configuration.md) | All environment variables and routing params |
|
|
||||||
| Client Integration | [docs/client-integration.md](docs/client-integration.md) | Open WebUI / Cherry Studio / Cursor, etc. |
|
|
||||||
| Operations | [docs/operations.md](docs/operations.md) | Backup, logging, health checks |
|
|
||||||
| FAQ | [docs/faq.md](docs/faq.md) | Common errors and fixes |
|
|
||||||
| FAQ/Tutorial Contribution | [docs/community/faq-tutorial-guidelines.md](docs/community/faq-tutorial-guidelines.md) | Templates and workflow for community knowledge |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Environment Variables
|
|
||||||
|
|
||||||
### Basic Configuration
|
|
||||||
|
|
||||||
| Variable | Description | Default |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `AUTH_TOKEN` | Admin panel login token (**must change**) | `change-me-admin-token` |
|
|
||||||
| `PROXY_TOKEN` | Proxy API Bearer Token (**must change**) | `change-me-proxy-sk-token` |
|
|
||||||
| `PORT` | Service listening port | `4000` |
|
|
||||||
| `DATA_DIR` | Data directory for local runtime data | `./data` |
|
|
||||||
| `TZ` | Timezone | `Asia/Shanghai` |
|
|
||||||
| `ACCOUNT_CREDENTIAL_SECRET` | Account credential encryption key | Defaults to `AUTH_TOKEN` |
|
|
||||||
|
|
||||||
### Scheduled Tasks
|
|
||||||
|
|
||||||
| Variable | Description | Default |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `CHECKIN_CRON` | Auto check-in cron expression | `0 8 * * *` |
|
|
||||||
| `BALANCE_REFRESH_CRON` | Balance refresh cron expression | `0 * * * *` |
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><strong>Smart Routing, Notification & Security Configuration</strong></summary>
|
|
||||||
|
|
||||||
See [docs/configuration.md](docs/configuration.md) for full details on smart routing parameters, notification channels (Webhook / Bark / ServerChan / Telegram / SMTP), and security settings (IP allowlist).
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
Full configuration reference: [docs/configuration.md](docs/configuration.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Proxy API Endpoints
|
|
||||||
|
|
||||||
Metapi exposes standard OpenAI / Claude compatible endpoints:
|
|
||||||
|
|
||||||
| Endpoint | Method | Description |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `/v1/responses` | POST | OpenAI Responses |
|
|
||||||
| `/v1/chat/completions` | POST | OpenAI Chat Completions |
|
|
||||||
| `/v1/messages` | POST | Claude Messages |
|
|
||||||
| `/v1/completions` | POST | OpenAI Completions (Legacy) |
|
|
||||||
| `/v1/embeddings` | POST | Embeddings |
|
|
||||||
| `/v1/images/generations` | POST | Image Generation |
|
|
||||||
| `/v1/files` | POST / GET | OpenAI Files upload and list |
|
|
||||||
| `/v1/files/:fileId` | GET / DELETE | OpenAI Files retrieve metadata and delete |
|
|
||||||
| `/v1/files/:fileId/content` | GET | OpenAI Files raw content |
|
|
||||||
| `/v1/models` | GET | List all available models |
|
|
||||||
|
|
||||||
Include `Authorization: Bearer <PROXY_TOKEN>` in request headers.
|
|
||||||
|
|
||||||
The global `PROXY_TOKEN` works by default.
|
|
||||||
From `System Settings -> Downstream API Key Strategy` you can create multiple project-level downstream keys with individual configuration:
|
|
||||||
|
|
||||||
- Expiration time (expiresAt)
|
|
||||||
- Cost and request limits (MaxCost / MaxRequests)
|
|
||||||
- Model allowlist (SupportedModels, supports exact/glob/re:regex)
|
|
||||||
- Route allowlist (AllowedRouteIds)
|
|
||||||
- Site weight multipliers (SiteWeightMultipliers, control per-project upstream preference ratios)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Client Integration
|
|
||||||
|
|
||||||
Compatible with all OpenAI API-compatible clients:
|
|
||||||
|
|
||||||
| Setting | Value |
|
|
||||||
| --- | --- |
|
|
||||||
| **Base URL** | `https://your-domain.com` (clients usually append `/v1` automatically) |
|
|
||||||
| **API Key** | Your configured `PROXY_TOKEN` |
|
|
||||||
| **Model List** | Auto-fetched from `GET /v1/models` |
|
|
||||||
|
|
||||||
Standard OpenAI `/v1/files` workflows are also supported for clients that use the official file API.
|
|
||||||
|
|
||||||
For detailed per-client setup, examples, and troubleshooting, see [docs/client-integration.md](docs/client-integration.md).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Tech Stack
|
|
||||||
|
|
||||||
| Layer | Technology |
|
|
||||||
| --- | --- |
|
|
||||||
| **Backend** | [Fastify](https://fastify.dev) — High-performance Node.js framework |
|
|
||||||
| **Frontend** | [React 18](https://react.dev) + [Vite](https://vitejs.dev) |
|
|
||||||
| **Language** | [TypeScript](https://www.typescriptlang.org) — End-to-end type safety |
|
|
||||||
| **Styling** | [Tailwind CSS v4](https://tailwindcss.com) — Utility-first CSS framework |
|
|
||||||
| **Database** | SQLite / MySQL / PostgreSQL + [Drizzle ORM](https://orm.drizzle.team) |
|
|
||||||
| **Charts** | [VChart](https://visactor.io/vchart) (@visactor/react-vchart) |
|
|
||||||
| **Scheduling** | [node-cron](https://github.com/node-cron/node-cron) |
|
|
||||||
| **Containerization** | Docker (Debian slim) + Docker Compose |
|
|
||||||
| **Testing** | [Vitest](https://vitest.dev) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Local Development
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Install dependencies
|
|
||||||
npm install
|
npm install
|
||||||
|
|
||||||
# Run database migrations
|
|
||||||
npm run db:migrate
|
npm run db:migrate
|
||||||
|
|
||||||
# Start dev environment (frontend + backend hot reload)
|
|
||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run build # Build frontend + backend
|
npm run build # Build web + server
|
||||||
npm run build:web # Build frontend only (Vite)
|
npm test # Run tests
|
||||||
npm run build:server # Build backend only (TypeScript)
|
|
||||||
npm run dist:desktop:mac:intel # Build mac Intel (x64) desktop installer
|
|
||||||
npm test # Run all tests
|
|
||||||
npm run test:watch # Watch mode
|
|
||||||
npm run db:generate # Generate Drizzle migration files
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Related Projects
|
## 📜 License
|
||||||
|
|
||||||
### Compatible Upstream Platforms
|
|
||||||
|
|
||||||
| Project | Description |
|
|
||||||
| --- | --- |
|
|
||||||
| [New API](https://github.com/QuantumNous/new-api) | Next-gen LLM gateway, one of Metapi's primary upstreams |
|
|
||||||
| [One API](https://github.com/songquanpeng/one-api) | Classic OpenAI API aggregation |
|
|
||||||
| [OneHub](https://github.com/MartialBE/one-hub) | Enhanced One API fork |
|
|
||||||
| [DoneHub](https://github.com/deanxv/done-hub) | Enhanced OneHub fork |
|
|
||||||
| [Veloera](https://github.com/Veloera/Veloera) | API gateway platform |
|
|
||||||
|
|
||||||
### Referenced & Used Projects
|
|
||||||
|
|
||||||
| Project | Description |
|
|
||||||
| --- | --- |
|
|
||||||
| [All API Hub](https://github.com/qixing-jk/all-api-hub) | Browser extension — all-in-one relay account manager, Metapi's original inspiration |
|
|
||||||
| [LLM Metadata](https://github.com/nicepkg/llm-metadata) | LLM model metadata library, used for model description reference |
|
|
||||||
| [New API](https://github.com/QuantumNous/new-api) | Platform adapter reference implementation |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Data & Privacy
|
|
||||||
|
|
||||||
Metapi is fully self-hosted. All data (accounts, tokens, routes, logs) stays in your own deployment environment. No data is sent to any third party. Proxy requests are transmitted directly between your server and upstream sites only.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
All forms of contribution are welcome!
|
|
||||||
|
|
||||||
- Report bugs — [Submit an Issue](https://github.com/cita-777/metapi/issues)
|
|
||||||
- Feature suggestions — [Start a Discussion](https://github.com/cita-777/metapi/issues)
|
|
||||||
- Code contributions — [Submit a Pull Request](https://github.com/cita-777/metapi/pulls)
|
|
||||||
- Contributing guide — [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
||||||
- Code of conduct — [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Security
|
|
||||||
|
|
||||||
If you discover a security issue, please refer to [SECURITY.md](SECURITY.md) and report it privately.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[MIT](LICENSE)
|
[MIT](LICENSE)
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Thanks
|
|
||||||
|
|
||||||
Thanks to everyone who has contributed code, bug reports, ideas, and real-world feedback to Metapi. A lot of the product polish in this project came directly from community usage and iteration.
|
|
||||||
|
|
||||||
Special thanks to all contributors:
|
|
||||||
|
|
||||||
<!-- metapi-contributors:start -->
|
|
||||||
<p align="left">
|
|
||||||
<a href="https://github.com/cita-777"><img src="https://avatars.githubusercontent.com/u/177306803?v=4&s=48" width="48" height="48" alt="cita-777" title="cita-777"/></a> <a href="https://github.com/Hureru"><img src="https://avatars.githubusercontent.com/u/121702350?v=4&s=48" width="48" height="48" alt="Hureru" title="Hureru"/></a> <a href="https://github.com/bnvnvnv"><img src="https://avatars.githubusercontent.com/u/4243616?v=4&s=48" width="48" height="48" alt="bnvnvnv" title="bnvnvnv"/></a> <a href="https://github.com/ksmaze"><img src="https://avatars.githubusercontent.com/u/480916?v=4&s=48" width="48" height="48" alt="ksmaze" title="ksmaze"/></a> <a href="https://github.com/DeliciousBuding"><img src="https://avatars.githubusercontent.com/u/101502465?v=4&s=48" width="48" height="48" alt="DeliciousBuding" title="DeliciousBuding"/></a> <a href="https://github.com/Shinku-Chen"><img src="https://avatars.githubusercontent.com/u/17696928?v=4&s=48" width="48" height="48" alt="Shinku-Chen" title="Shinku-Chen"/></a> <a href="https://github.com/weijiafu14"><img src="https://avatars.githubusercontent.com/u/17469139?v=4&s=48" width="48" height="48" alt="weijiafu14" title="weijiafu14"/></a> <a href="https://github.com/ShicYang"><img src="https://avatars.githubusercontent.com/u/61652316?v=4&s=48" width="48" height="48" alt="ShicYang" title="ShicYang"/></a> <a href="https://github.com/Babylonehy"><img src="https://avatars.githubusercontent.com/u/30937892?v=4&s=48" width="48" height="48" alt="Babylonehy" title="Babylonehy"/></a> <a href="https://github.com/zmoon460"><img src="https://avatars.githubusercontent.com/u/42328751?v=4&s=48" width="48" height="48" alt="zmoon460" title="zmoon460"/></a>
|
|
||||||
<a href="https://github.com/Brucents"><img src="https://avatars.githubusercontent.com/u/81791987?v=4&s=48" width="48" height="48" alt="Brucents" title="Brucents"/></a> <a href="https://github.com/ImgBotApp"><img src="https://avatars.githubusercontent.com/u/31427850?v=4&s=48" width="48" height="48" alt="ImgBotApp" title="ImgBotApp"/></a> <a href="https://github.com/Zhou-Ruichen"><img src="https://avatars.githubusercontent.com/u/191002401?v=4&s=48" width="48" height="48" alt="Zhou-Ruichen" title="Zhou-Ruichen"/></a> <a href="https://github.com/nodca"><img src="https://avatars.githubusercontent.com/u/96775880?v=4&s=48" width="48" height="48" alt="nodca" title="nodca"/></a> <a href="https://github.com/puyujian"><img src="https://avatars.githubusercontent.com/u/46592377?v=4&s=48" width="48" height="48" alt="puyujian" title="puyujian"/></a> <a href="https://github.com/rcocco"><img src="https://avatars.githubusercontent.com/u/46603462?v=4&s=48" width="48" height="48" alt="rcocco" title="rcocco"/></a> <a href="https://github.com/xuyufengfei"><img src="https://avatars.githubusercontent.com/u/188047874?v=4&s=48" width="48" height="48" alt="xuyufengfei" title="xuyufengfei"/></a>
|
|
||||||
</p>
|
|
||||||
<!-- metapi-contributors:end -->
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Star History
|
|
||||||
|
|
||||||
[](https://www.star-history.com/#cita-777/metapi&type=date&legend=top-left)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
|
|
||||||
**If Metapi helps you, a Star is the best support!**
|
|
||||||
|
|
||||||
<sub>Built with love by the AI community</sub>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user