From f1f24f542a6b6198925bef07f664025cb744db53 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Sun, 5 Oct 2025 20:45:37 +0800 Subject: [PATCH] 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. --- MANAGEMENT_API.md | 11 ++++++++++ MANAGEMENT_API_CN.md | 11 ++++++++++ README.md | 51 ++++++++++++++++++++++++++++++++++++++------ README_CN.md | 49 ++++++++++++++++++++++++++++++++++++------ 4 files changed, 109 insertions(+), 13 deletions(-) diff --git a/MANAGEMENT_API.md b/MANAGEMENT_API.md index 5a062049..898cb12e 100644 --- a/MANAGEMENT_API.md +++ b/MANAGEMENT_API.md @@ -663,6 +663,17 @@ These endpoints initiate provider login flows and return a URL to open in a brow { "status": "ok", "url": "https://..." } ``` +- GET `/iflow-auth-url` — Start iFlow login + - Request: + ```bash + curl -H 'Authorization: Bearer ' \ + http://localhost:8317/v0/management/iflow-auth-url + ``` + - Response: + ```json + { "status": "ok", "url": "https://..." } + ``` + - GET `/get-auth-status?state=` — Poll OAuth flow status - Request: ```bash diff --git a/MANAGEMENT_API_CN.md b/MANAGEMENT_API_CN.md index bb0d8ee0..7ae97f8f 100644 --- a/MANAGEMENT_API_CN.md +++ b/MANAGEMENT_API_CN.md @@ -663,6 +663,17 @@ { "status": "ok", "url": "https://..." } ``` +- GET `/iflow-auth-url` — 开始 iFlow 登录 + - 请求: + ```bash + curl -H 'Authorization: Bearer ' \ + http://localhost:8317/v0/management/iflow-auth-url + ``` + - 响应: + ```json + { "status": "ok", "url": "https://..." } + ``` + - GET `/get-auth-status?state=` — 轮询 OAuth 流程状态 - 请求: ```bash diff --git a/README.md b/README.md index 32448f0b..397cc504 100644 --- a/README.md +++ b/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. -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 @@ -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 - Claude Code support via OAuth login - Qwen Code support via OAuth login +- iFlow support via OAuth login - Gemini Web support via cookie-based login - Streaming and non-streaming responses - Function calling/tools support - Multimodal input support (text and images) -- Multiple accounts with round-robin load balancing (Gemini, OpenAI, Claude and Qwen) -- Simple CLI authentication flows (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, Qwen and iFlow) - Generative Language API Key support - Gemini CLI multi-account load balancing - Claude Code multi-account load balancing - Qwen Code multi-account load balancing +- iFlow multi-account load balancing - OpenAI Codex multi-account load balancing - 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 @@ -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 Anthropic account for Claude Code access (optional) - A Qwen Chat account for Qwen Code access (optional) +- An iFlow account for iFlow access (optional) ### Building from Source @@ -76,7 +79,7 @@ Set `remote-management.disable-control-panel` to `true` if you prefer to host th ### 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): ```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. +- 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 @@ -156,7 +165,7 @@ Request body example: ``` 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) @@ -259,6 +268,16 @@ console.log(await claudeResponse.json()); - claude-3-5-haiku-20241022 - qwen3-coder-plus - 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 ## Configuration @@ -532,6 +551,14 @@ export ANTHROPIC_MODEL=qwen3-coder-plus 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 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 ``` +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: ```bash @@ -645,10 +678,14 @@ docker run --rm -p 8317:8317 -v /path/to/your/config.yaml:/CLIProxyAPI/config.ya ```bash docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --claude-login ``` - - **Qwen**: + - **Qwen**: ```bash 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: ```bash diff --git a/README_CN.md b/README_CN.md index d440f831..9f21980c 100644 --- a/README_CN.md +++ b/README_CN.md @@ -28,7 +28,7 @@ 您可以使用本地或多账户的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 登录) - 新增 Claude Code 支持(OAuth 登录) - 新增 Qwen Code 支持(OAuth 登录) +- 新增 iFlow 支持(OAuth 登录) - 新增 Gemini Web 支持(通过 Cookie 登录) - 支持流式与非流式响应 - 函数调用/工具支持 - 多模态输入(文本、图片) -- 多账户支持与轮询负载均衡(Gemini、OpenAI、Claude 与 Qwen) -- 简单的 CLI 身份验证流程(Gemini、OpenAI、Claude 与 Qwen) +- 多账户支持与轮询负载均衡(Gemini、OpenAI、Claude、Qwen 与 iFlow) +- 简单的 CLI 身份验证流程(Gemini、OpenAI、Claude、Qwen 与 iFlow) - 支持 Gemini AIStudio API 密钥 - 支持 Gemini CLI 多账户轮询 - 支持 Claude Code 多账户轮询 - 支持 Qwen Code 多账户轮询 +- 支持 iFlow 多账户轮询 - 支持 OpenAI Codex 多账户轮询 - 通过配置接入上游 OpenAI 兼容提供商(例如 OpenRouter) -- 可复用的 Go SDK(见 `docs/sdk-usage.md`) +- 可复用的 Go SDK(见 `docs/sdk-usage_CN.md`) ## 安装 @@ -59,6 +61,7 @@ - 有权访问 OpenAI Codex/GPT 的 OpenAI 账户(可选) - 有权访问 Claude Code 的 Anthropic 账户(可选) - 有权访问 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): ```bash @@ -128,6 +131,12 @@ CLIProxyAPI 的基于 Web 的管理中心。 ``` 选项:加上 `--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 兼容) @@ -271,6 +280,16 @@ console.log(await claudeResponse.json()); - claude-3-5-haiku-20241022 - qwen3-coder-plus - 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 版本 ## 配置 @@ -540,6 +559,14 @@ export ANTHROPIC_MODEL=qwen3-coder-plus 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 多账户负载均衡 启动 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 ``` +运行以下命令进行登录(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 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. 查看服务器日志: ```bash