From 3a347922c828358c80c364f79b4111cc00893853 Mon Sep 17 00:00:00 2001
From: Cole McIntosh <82463175+colesmcintosh@users.noreply.github.com>
Date: Mon, 28 Jul 2025 22:39:02 -0600
Subject: [PATCH] docs: add Qwen Code CLI tutorial (#12915)
- Add new tutorial for integrating Qwen Code CLI with LiteLLM Proxy
- Update sidebar to include Qwen Code CLI in both AI Tools and main Tutorials sections
- Document environment variables for OpenAI-compatible configuration
- Include examples for routing to various providers (Anthropic, OpenAI, Bedrock)
---
.../docs/tutorials/litellm_qwen_code_cli.md | 178 ++++++++++++++++++
docs/my-website/sidebars.js | 3 +
2 files changed, 181 insertions(+)
create mode 100644 docs/my-website/docs/tutorials/litellm_qwen_code_cli.md
diff --git a/docs/my-website/docs/tutorials/litellm_qwen_code_cli.md b/docs/my-website/docs/tutorials/litellm_qwen_code_cli.md
new file mode 100644
index 00000000000..06b46a6f895
--- /dev/null
+++ b/docs/my-website/docs/tutorials/litellm_qwen_code_cli.md
@@ -0,0 +1,178 @@
+# Qwen Code CLI
+
+This tutorial shows you how to integrate the Qwen Code CLI with LiteLLM Proxy, allowing you to route requests through LiteLLM's unified interface.
+
+
+:::info
+
+This integration is supported from LiteLLM v1.73.3-nightly and above.
+
+:::
+
+
+
+
+
+## Benefits of using qwen-code with LiteLLM
+
+When you use qwen-code with LiteLLM you get the following benefits:
+
+**Developer Benefits:**
+- Universal Model Access: Use any LiteLLM supported model (Anthropic, OpenAI, Vertex AI, Bedrock, etc.) through the qwen-code interface.
+- Higher Rate Limits & Reliability: Load balance across multiple models and providers to avoid hitting individual provider limits, with fallbacks to ensure you get responses even if one provider fails.
+
+**Proxy Admin Benefits:**
+- Centralized Management: Control access to all models through a single LiteLLM proxy instance without giving your developers API Keys to each provider.
+- Budget Controls: Set spending limits and track costs across all qwen-code usage.
+
+
+
+## Prerequisites
+
+Before you begin, ensure you have:
+- Node.js and npm installed on your system
+- A running LiteLLM Proxy instance
+- A valid LiteLLM Proxy API key
+- Git installed for cloning the repository
+
+## Quick Start Guide
+
+### Step 1: Install Qwen Code CLI
+
+Clone the Qwen Code CLI repository and navigate to the project directory:
+
+```bash
+npm install -g @qwen-code/qwen-code
+```
+
+### Step 2: Configure Qwen Code CLI for LiteLLM Proxy
+
+Configure the Qwen Code CLI to point to your LiteLLM Proxy instance by setting the required environment variables:
+
+```bash
+export OPENAI_BASE_URL="http://localhost:4000"
+export OPENAI_API_KEY=sk-1234567890
+export OPENAI_MODEL="your-configured-model"
+```
+
+**Note:** Replace the values with your actual LiteLLM Proxy configuration:
+- `OPENAI_BASE_URL`: The URL where your LiteLLM Proxy is running
+- `OPENAI_API_KEY`: Your LiteLLM Proxy API key
+- `OPENAI_MODEL`: The model you want to use (configured in your LiteLLM proxy)
+
+### Step 3: Build and Start Qwen Code CLI
+
+Build the project and start the CLI:
+
+```bash
+qwen
+```
+
+### Step 4: Test the Integration
+
+Once the CLI is running, you can send test requests. These requests will be automatically routed through LiteLLM Proxy to the configured Qwen model.
+
+The CLI will now use LiteLLM Proxy as the backend, giving you access to LiteLLM's features like:
+- Request/response logging
+- Rate limiting
+- Cost tracking
+- Model routing and fallbacks
+
+
+## Advanced
+
+### Use Anthropic, OpenAI, Bedrock, etc. models on qwen-code
+
+In order to use non-qwen models on qwen-code, you need to set a `model_group_alias` in the LiteLLM Proxy config. This tells LiteLLM that requests with model = `qwen-code` should be routed to your desired model from any provider.
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+
+Route `qwen-code` requests to Claude Sonnet:
+
+```yaml showLineNumbers title="proxy_config.yaml"
+model_list:
+ - model_name: claude-sonnet-4-20250514
+ litellm_params:
+ model: anthropic/claude-3-5-sonnet-20241022
+ api_key: os.environ/ANTHROPIC_API_KEY
+
+router_settings:
+ model_group_alias: {"qwen-code": "claude-sonnet-4-20250514"}
+```
+
+
+
+
+Route `qwen-code` requests to GPT-4o:
+
+```yaml showLineNumbers title="proxy_config.yaml"
+model_list:
+ - model_name: gpt-4o-model
+ litellm_params:
+ model: gpt-4o
+ api_key: os.environ/OPENAI_API_KEY
+
+router_settings:
+ model_group_alias: {"qwen-code": "gpt-4o-model"}
+```
+
+
+
+
+Route `qwen-code` requests to Claude on Bedrock:
+
+```yaml showLineNumbers title="proxy_config.yaml"
+model_list:
+ - model_name: bedrock-claude
+ litellm_params:
+ model: bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0
+ aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
+ aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
+ aws_region_name: us-east-1
+
+router_settings:
+ model_group_alias: {"qwen-code": "bedrock-claude"}
+```
+
+
+
+
+All deployments with model_name=`anthropic-claude` will be load balanced. In this example we load balance between Anthropic and Bedrock.
+
+```yaml showLineNumbers title="proxy_config.yaml"
+model_list:
+ - model_name: anthropic-claude
+ litellm_params:
+ model: anthropic/claude-3-5-sonnet-20241022
+ api_key: os.environ/ANTHROPIC_API_KEY
+ - model_name: anthropic-claude
+ litellm_params:
+ model: bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0
+ aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
+ aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
+ aws_region_name: us-east-1
+
+router_settings:
+ model_group_alias: {"qwen-code": "anthropic-claude"}
+```
+
+
+
+
+With this configuration, when you use `qwen-code` in the CLI, LiteLLM will automatically route your requests to the configured provider(s) with load balancing and fallbacks.
+
+
+
+
+
+## Troubleshooting
+
+If you encounter issues:
+
+1. **Connection errors**: Verify that your LiteLLM Proxy is running and accessible at the configured `OPENAI_BASE_URL`
+2. **Authentication errors**: Ensure your `OPENAI_API_KEY` is valid and has the necessary permissions
+3. **Build failures**: Make sure all dependencies are installed with `npm install`
diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js
index 4c9e6d7927b..21dad11d4e3 100644
--- a/docs/my-website/sidebars.js
+++ b/docs/my-website/sidebars.js
@@ -75,6 +75,7 @@ const sidebars = {
"tutorials/openweb_ui",
"tutorials/openai_codex",
"tutorials/litellm_gemini_cli",
+ "tutorials/litellm_qwen_code_cli",
"tutorials/github_copilot_integration",
"tutorials/claude_responses_api",
]
@@ -547,6 +548,8 @@ const sidebars = {
items: [
"tutorials/openweb_ui",
"tutorials/openai_codex",
+ "tutorials/litellm_gemini_cli",
+ "tutorials/litellm_qwen_code_cli",
"tutorials/anthropic_file_usage",
"tutorials/default_team_self_serve",
"tutorials/msft_sso",