mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 04:50:52 +08:00
feat(auth): add iFlow provider support with multi-account load balancing
- Integrated iFlow as a new authentication provider with OAuth. - Updated README and documentation for iFlow-specific configuration. - Enhanced CLI and Docker commands to support iFlow login and server setup. - Expanded model routing to include iFlow-supported models.
This commit is contained in:
@@ -663,6 +663,17 @@ These endpoints initiate provider login flows and return a URL to open in a brow
|
|||||||
{ "status": "ok", "url": "https://..." }
|
{ "status": "ok", "url": "https://..." }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- GET `/iflow-auth-url` — Start iFlow login
|
||||||
|
- Request:
|
||||||
|
```bash
|
||||||
|
curl -H 'Authorization: Bearer <MANAGEMENT_KEY>' \
|
||||||
|
http://localhost:8317/v0/management/iflow-auth-url
|
||||||
|
```
|
||||||
|
- Response:
|
||||||
|
```json
|
||||||
|
{ "status": "ok", "url": "https://..." }
|
||||||
|
```
|
||||||
|
|
||||||
- GET `/get-auth-status?state=<state>` — Poll OAuth flow status
|
- GET `/get-auth-status?state=<state>` — Poll OAuth flow status
|
||||||
- Request:
|
- Request:
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -663,6 +663,17 @@
|
|||||||
{ "status": "ok", "url": "https://..." }
|
{ "status": "ok", "url": "https://..." }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- GET `/iflow-auth-url` — 开始 iFlow 登录
|
||||||
|
- 请求:
|
||||||
|
```bash
|
||||||
|
curl -H 'Authorization: Bearer <MANAGEMENT_KEY>' \
|
||||||
|
http://localhost:8317/v0/management/iflow-auth-url
|
||||||
|
```
|
||||||
|
- 响应:
|
||||||
|
```json
|
||||||
|
{ "status": "ok", "url": "https://..." }
|
||||||
|
```
|
||||||
|
|
||||||
- GET `/get-auth-status?state=<state>` — 轮询 OAuth 流程状态
|
- GET `/get-auth-status?state=<state>` — 轮询 OAuth 流程状态
|
||||||
- 请求:
|
- 请求:
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
49
README.md
49
README.md
@@ -8,7 +8,7 @@ It now also supports OpenAI Codex (GPT models) and Claude Code via OAuth.
|
|||||||
|
|
||||||
So you can use local or multi-account CLI access with OpenAI(include Responses)/Gemini/Claude-compatible clients and SDKs.
|
So you can use local or multi-account CLI access with OpenAI(include Responses)/Gemini/Claude-compatible clients and SDKs.
|
||||||
|
|
||||||
The first Chinese provider has now been added: [Qwen Code](https://github.com/QwenLM/qwen-code).
|
Chinese providers have now been added: [Qwen Code](https://github.com/QwenLM/qwen-code), [iFlow](https://iflow.cn/).
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -16,19 +16,21 @@ The first Chinese provider has now been added: [Qwen Code](https://github.com/Qw
|
|||||||
- OpenAI Codex support (GPT models) via OAuth login
|
- OpenAI Codex support (GPT models) via OAuth login
|
||||||
- Claude Code support via OAuth login
|
- Claude Code support via OAuth login
|
||||||
- Qwen Code support via OAuth login
|
- Qwen Code support via OAuth login
|
||||||
|
- iFlow support via OAuth login
|
||||||
- Gemini Web support via cookie-based login
|
- Gemini Web support via cookie-based login
|
||||||
- Streaming and non-streaming responses
|
- Streaming and non-streaming responses
|
||||||
- Function calling/tools support
|
- Function calling/tools support
|
||||||
- Multimodal input support (text and images)
|
- Multimodal input support (text and images)
|
||||||
- Multiple accounts with round-robin load balancing (Gemini, OpenAI, Claude and Qwen)
|
- Multiple accounts with round-robin load balancing (Gemini, OpenAI, Claude, Qwen and iFlow)
|
||||||
- Simple CLI authentication flows (Gemini, OpenAI, Claude and Qwen)
|
- Simple CLI authentication flows (Gemini, OpenAI, Claude, Qwen and iFlow)
|
||||||
- Generative Language API Key support
|
- Generative Language API Key support
|
||||||
- Gemini CLI multi-account load balancing
|
- Gemini CLI multi-account load balancing
|
||||||
- Claude Code multi-account load balancing
|
- Claude Code multi-account load balancing
|
||||||
- Qwen Code multi-account load balancing
|
- Qwen Code multi-account load balancing
|
||||||
|
- iFlow multi-account load balancing
|
||||||
- OpenAI Codex multi-account load balancing
|
- OpenAI Codex multi-account load balancing
|
||||||
- OpenAI-compatible upstream providers via config (e.g., OpenRouter)
|
- OpenAI-compatible upstream providers via config (e.g., OpenRouter)
|
||||||
- Reusable Go SDK for embedding the proxy (see `docs/sdk-usage.md`, 中文: `docs/sdk-usage_CN.md`)
|
- Reusable Go SDK for embedding the proxy (see `docs/sdk-usage.md`)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -39,6 +41,7 @@ The first Chinese provider has now been added: [Qwen Code](https://github.com/Qw
|
|||||||
- An OpenAI account for Codex/GPT access (optional)
|
- An OpenAI account for Codex/GPT access (optional)
|
||||||
- An Anthropic account for Claude Code access (optional)
|
- An Anthropic account for Claude Code access (optional)
|
||||||
- A Qwen Chat account for Qwen Code access (optional)
|
- A Qwen Chat account for Qwen Code access (optional)
|
||||||
|
- An iFlow account for iFlow access (optional)
|
||||||
|
|
||||||
### Building from Source
|
### Building from Source
|
||||||
|
|
||||||
@@ -76,7 +79,7 @@ Set `remote-management.disable-control-panel` to `true` if you prefer to host th
|
|||||||
|
|
||||||
### Authentication
|
### Authentication
|
||||||
|
|
||||||
You can authenticate for Gemini, OpenAI, and/or Claude. All can coexist in the same `auth-dir` and will be load balanced.
|
You can authenticate for Gemini, OpenAI, Claude, Qwen, and/or iFlow. All can coexist in the same `auth-dir` and will be load balanced.
|
||||||
|
|
||||||
- Gemini (Google):
|
- Gemini (Google):
|
||||||
```bash
|
```bash
|
||||||
@@ -115,6 +118,12 @@ You can authenticate for Gemini, OpenAI, and/or Claude. All can coexist in the s
|
|||||||
```
|
```
|
||||||
Options: add `--no-browser` to print the login URL instead of opening a browser. Use the Qwen Chat's OAuth device flow.
|
Options: add `--no-browser` to print the login URL instead of opening a browser. Use the Qwen Chat's OAuth device flow.
|
||||||
|
|
||||||
|
- iFlow (iFlow via OAuth):
|
||||||
|
```bash
|
||||||
|
./cli-proxy-api --iflow-login
|
||||||
|
```
|
||||||
|
Options: add `--no-browser` to print the login URL instead of opening a browser. The local OAuth callback uses port `11451`.
|
||||||
|
|
||||||
|
|
||||||
### Starting the Server
|
### Starting the Server
|
||||||
|
|
||||||
@@ -156,7 +165,7 @@ Request body example:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
- Use a `gemini-*` model for Gemini (e.g., "gemini-2.5-pro"), a `gpt-*` model for OpenAI (e.g., "gpt-5"), a `claude-*` model for Claude (e.g., "claude-3-5-sonnet-20241022"), or a `qwen-*` model for Qwen (e.g., "qwen3-coder-plus"). The proxy will route to the correct provider automatically.
|
- Use a `gemini-*` model for Gemini (e.g., "gemini-2.5-pro"), a `gpt-*` model for OpenAI (e.g., "gpt-5"), a `claude-*` model for Claude (e.g., "claude-3-5-sonnet-20241022"), a `qwen-*` model for Qwen (e.g., "qwen3-coder-plus"), or an iFlow-supported model (e.g., "tstars2.0", "deepseek-v3.1", "kimi-k2", etc.). The proxy will route to the correct provider automatically.
|
||||||
|
|
||||||
#### Claude Messages (SSE-compatible)
|
#### Claude Messages (SSE-compatible)
|
||||||
|
|
||||||
@@ -259,6 +268,16 @@ console.log(await claudeResponse.json());
|
|||||||
- claude-3-5-haiku-20241022
|
- claude-3-5-haiku-20241022
|
||||||
- qwen3-coder-plus
|
- qwen3-coder-plus
|
||||||
- qwen3-coder-flash
|
- qwen3-coder-flash
|
||||||
|
- qwen3-max
|
||||||
|
- qwen3-vl-plus
|
||||||
|
- deepseek-v3.2
|
||||||
|
- deepseek-v3.1
|
||||||
|
- deepseek-r1
|
||||||
|
- deepseek-v3
|
||||||
|
- kimi-k2
|
||||||
|
- glm-4.5
|
||||||
|
- tstars2.0
|
||||||
|
- And other iFlow-supported models
|
||||||
- Gemini models auto-switch to preview variants when needed
|
- Gemini models auto-switch to preview variants when needed
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
@@ -532,6 +551,14 @@ export ANTHROPIC_MODEL=qwen3-coder-plus
|
|||||||
export ANTHROPIC_SMALL_FAST_MODEL=qwen3-coder-flash
|
export ANTHROPIC_SMALL_FAST_MODEL=qwen3-coder-flash
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Using iFlow models:
|
||||||
|
```bash
|
||||||
|
export ANTHROPIC_BASE_URL=http://127.0.0.1:8317
|
||||||
|
export ANTHROPIC_AUTH_TOKEN=sk-dummy
|
||||||
|
export ANTHROPIC_MODEL=qwen3-max
|
||||||
|
export ANTHROPIC_SMALL_FAST_MODEL=qwen3-235b-a22b-instruct
|
||||||
|
```
|
||||||
|
|
||||||
## Codex with multiple account load balancing
|
## Codex with multiple account load balancing
|
||||||
|
|
||||||
Start CLI Proxy API server, and then edit the `~/.codex/config.toml` and `~/.codex/auth.json` files.
|
Start CLI Proxy API server, and then edit the `~/.codex/config.toml` and `~/.codex/auth.json` files.
|
||||||
@@ -587,6 +614,12 @@ Run the following command to login (Qwen OAuth):
|
|||||||
docker run -it -rm -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --qwen-login
|
docker run -it -rm -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --qwen-login
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Run the following command to login (iFlow OAuth on port 11451):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --rm -p 11451:11451 -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --iflow-login
|
||||||
|
```
|
||||||
|
|
||||||
Run the following command to start the server:
|
Run the following command to start the server:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -649,6 +682,10 @@ docker run --rm -p 8317:8317 -v /path/to/your/config.yaml:/CLIProxyAPI/config.ya
|
|||||||
```bash
|
```bash
|
||||||
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --qwen-login
|
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --qwen-login
|
||||||
```
|
```
|
||||||
|
- **iFlow**:
|
||||||
|
```bash
|
||||||
|
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --iflow-login
|
||||||
|
```
|
||||||
|
|
||||||
5. To view the server logs:
|
5. To view the server logs:
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
49
README_CN.md
49
README_CN.md
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
您可以使用本地或多账户的CLI方式,通过任何与 OpenAI(包括Responses)/Gemini/Claude 兼容的客户端和SDK进行访问。
|
您可以使用本地或多账户的CLI方式,通过任何与 OpenAI(包括Responses)/Gemini/Claude 兼容的客户端和SDK进行访问。
|
||||||
|
|
||||||
现已新增首个中国提供商:[Qwen Code](https://github.com/QwenLM/qwen-code)。
|
现已新增国内提供商:[Qwen Code](https://github.com/QwenLM/qwen-code)、[iFlow](https://iflow.cn/)。
|
||||||
|
|
||||||
## 功能特性
|
## 功能特性
|
||||||
|
|
||||||
@@ -36,19 +36,21 @@
|
|||||||
- 新增 OpenAI Codex(GPT 系列)支持(OAuth 登录)
|
- 新增 OpenAI Codex(GPT 系列)支持(OAuth 登录)
|
||||||
- 新增 Claude Code 支持(OAuth 登录)
|
- 新增 Claude Code 支持(OAuth 登录)
|
||||||
- 新增 Qwen Code 支持(OAuth 登录)
|
- 新增 Qwen Code 支持(OAuth 登录)
|
||||||
|
- 新增 iFlow 支持(OAuth 登录)
|
||||||
- 新增 Gemini Web 支持(通过 Cookie 登录)
|
- 新增 Gemini Web 支持(通过 Cookie 登录)
|
||||||
- 支持流式与非流式响应
|
- 支持流式与非流式响应
|
||||||
- 函数调用/工具支持
|
- 函数调用/工具支持
|
||||||
- 多模态输入(文本、图片)
|
- 多模态输入(文本、图片)
|
||||||
- 多账户支持与轮询负载均衡(Gemini、OpenAI、Claude 与 Qwen)
|
- 多账户支持与轮询负载均衡(Gemini、OpenAI、Claude、Qwen 与 iFlow)
|
||||||
- 简单的 CLI 身份验证流程(Gemini、OpenAI、Claude 与 Qwen)
|
- 简单的 CLI 身份验证流程(Gemini、OpenAI、Claude、Qwen 与 iFlow)
|
||||||
- 支持 Gemini AIStudio API 密钥
|
- 支持 Gemini AIStudio API 密钥
|
||||||
- 支持 Gemini CLI 多账户轮询
|
- 支持 Gemini CLI 多账户轮询
|
||||||
- 支持 Claude Code 多账户轮询
|
- 支持 Claude Code 多账户轮询
|
||||||
- 支持 Qwen Code 多账户轮询
|
- 支持 Qwen Code 多账户轮询
|
||||||
|
- 支持 iFlow 多账户轮询
|
||||||
- 支持 OpenAI Codex 多账户轮询
|
- 支持 OpenAI Codex 多账户轮询
|
||||||
- 通过配置接入上游 OpenAI 兼容提供商(例如 OpenRouter)
|
- 通过配置接入上游 OpenAI 兼容提供商(例如 OpenRouter)
|
||||||
- 可复用的 Go SDK(见 `docs/sdk-usage.md`)
|
- 可复用的 Go SDK(见 `docs/sdk-usage_CN.md`)
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
@@ -59,6 +61,7 @@
|
|||||||
- 有权访问 OpenAI Codex/GPT 的 OpenAI 账户(可选)
|
- 有权访问 OpenAI Codex/GPT 的 OpenAI 账户(可选)
|
||||||
- 有权访问 Claude Code 的 Anthropic 账户(可选)
|
- 有权访问 Claude Code 的 Anthropic 账户(可选)
|
||||||
- 有权访问 Qwen Code 的 Qwen Chat 账户(可选)
|
- 有权访问 Qwen Code 的 Qwen Chat 账户(可选)
|
||||||
|
- 有权访问 iFlow 的 iFlow 账户(可选)
|
||||||
|
|
||||||
### 从源码构建
|
### 从源码构建
|
||||||
|
|
||||||
@@ -89,7 +92,7 @@ CLIProxyAPI 的基于 Web 的管理中心。
|
|||||||
|
|
||||||
### 身份验证
|
### 身份验证
|
||||||
|
|
||||||
您可以分别为 Gemini、OpenAI 和 Claude 进行身份验证,三者可同时存在于同一个 `auth-dir` 中并参与负载均衡。
|
您可以分别为 Gemini、OpenAI、Claude、Qwen 和 iFlow 进行身份验证,它们可同时存在于同一个 `auth-dir` 中并参与负载均衡。
|
||||||
|
|
||||||
- Gemini(Google):
|
- Gemini(Google):
|
||||||
```bash
|
```bash
|
||||||
@@ -128,6 +131,12 @@ CLIProxyAPI 的基于 Web 的管理中心。
|
|||||||
```
|
```
|
||||||
选项:加上 `--no-browser` 可打印登录地址而不自动打开浏览器。使用 Qwen Chat 的 OAuth 设备登录流程。
|
选项:加上 `--no-browser` 可打印登录地址而不自动打开浏览器。使用 Qwen Chat 的 OAuth 设备登录流程。
|
||||||
|
|
||||||
|
- iFlow(iFlow,OAuth):
|
||||||
|
```bash
|
||||||
|
./cli-proxy-api --iflow-login
|
||||||
|
```
|
||||||
|
选项:加上 `--no-browser` 可打印登录地址而不自动打开浏览器。本地 OAuth 回调端口为 `11451`。
|
||||||
|
|
||||||
### 启动服务器
|
### 启动服务器
|
||||||
|
|
||||||
身份验证完成后,启动服务器:
|
身份验证完成后,启动服务器:
|
||||||
@@ -168,7 +177,7 @@ POST http://localhost:8317/v1/chat/completions
|
|||||||
```
|
```
|
||||||
|
|
||||||
说明:
|
说明:
|
||||||
- 使用 "gemini-*" 模型(例如 "gemini-2.5-pro")来调用 Gemini,使用 "gpt-*" 模型(例如 "gpt-5")来调用 OpenAI,使用 "claude-*" 模型(例如 "claude-3-5-sonnet-20241022")来调用 Claude,或者使用 "qwen-*" 模型(例如 "qwen3-coder-plus")来调用 Qwen。代理服务会自动将请求路由到相应的提供商。
|
- 使用 "gemini-*" 模型(例如 "gemini-2.5-pro")来调用 Gemini,使用 "gpt-*" 模型(例如 "gpt-5")来调用 OpenAI,使用 "claude-*" 模型(例如 "claude-3-5-sonnet-20241022")来调用 Claude,使用 "qwen-*" 模型(例如 "qwen3-coder-plus")来调用 Qwen,或者使用 iFlow 支持的模型(例如 "tstars2.0"、"deepseek-v3.1"、"kimi-k2" 等)来调用 iFlow。代理服务会自动将请求路由到相应的提供商。
|
||||||
|
|
||||||
#### Claude 消息(SSE 兼容)
|
#### Claude 消息(SSE 兼容)
|
||||||
|
|
||||||
@@ -271,6 +280,16 @@ console.log(await claudeResponse.json());
|
|||||||
- claude-3-5-haiku-20241022
|
- claude-3-5-haiku-20241022
|
||||||
- qwen3-coder-plus
|
- qwen3-coder-plus
|
||||||
- qwen3-coder-flash
|
- qwen3-coder-flash
|
||||||
|
- qwen3-max
|
||||||
|
- qwen3-vl-plus
|
||||||
|
- deepseek-v3.2
|
||||||
|
- deepseek-v3.1
|
||||||
|
- deepseek-r1
|
||||||
|
- deepseek-v3
|
||||||
|
- kimi-k2
|
||||||
|
- glm-4.5
|
||||||
|
- tstars2.0
|
||||||
|
- 以及其他 iFlow 支持的模型
|
||||||
- Gemini 模型在需要时自动切换到对应的 preview 版本
|
- Gemini 模型在需要时自动切换到对应的 preview 版本
|
||||||
|
|
||||||
## 配置
|
## 配置
|
||||||
@@ -540,6 +559,14 @@ export ANTHROPIC_MODEL=qwen3-coder-plus
|
|||||||
export ANTHROPIC_SMALL_FAST_MODEL=qwen3-coder-flash
|
export ANTHROPIC_SMALL_FAST_MODEL=qwen3-coder-flash
|
||||||
```
|
```
|
||||||
|
|
||||||
|
使用 iFlow 模型:
|
||||||
|
```bash
|
||||||
|
export ANTHROPIC_BASE_URL=http://127.0.0.1:8317
|
||||||
|
export ANTHROPIC_AUTH_TOKEN=sk-dummy
|
||||||
|
export ANTHROPIC_MODEL=qwen3-max
|
||||||
|
export ANTHROPIC_SMALL_FAST_MODEL=qwen3-235b-a22b-instruct
|
||||||
|
```
|
||||||
|
|
||||||
## Codex 多账户负载均衡
|
## Codex 多账户负载均衡
|
||||||
|
|
||||||
启动 CLI Proxy API 服务器, 修改 `~/.codex/config.toml` 和 `~/.codex/auth.json` 文件。
|
启动 CLI Proxy API 服务器, 修改 `~/.codex/config.toml` 和 `~/.codex/auth.json` 文件。
|
||||||
@@ -595,6 +622,12 @@ docker run --rm -p 54545:54545 -v /path/to/your/config.yaml:/CLIProxyAPI/config.
|
|||||||
docker run -it -rm -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --qwen-login
|
docker run -it -rm -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --qwen-login
|
||||||
```
|
```
|
||||||
|
|
||||||
|
运行以下命令进行登录(iFlow OAuth,端口 11451):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --rm -p 11451:11451 -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --iflow-login
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
运行以下命令启动服务器:
|
运行以下命令启动服务器:
|
||||||
|
|
||||||
@@ -658,6 +691,10 @@ docker run --rm -p 8317:8317 -v /path/to/your/config.yaml:/CLIProxyAPI/config.ya
|
|||||||
```bash
|
```bash
|
||||||
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --qwen-login
|
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --qwen-login
|
||||||
```
|
```
|
||||||
|
- **iFlow**:
|
||||||
|
```bash
|
||||||
|
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --iflow-login
|
||||||
|
```
|
||||||
|
|
||||||
5. 查看服务器日志:
|
5. 查看服务器日志:
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Reference in New Issue
Block a user