feat(provider): add Chuizi.AI as OpenAI-compatible provider

Add Chuizi.AI (https://chuizi.ai) as a provider. Chuizi.AI is a unified
AI gateway providing access to 100+ models across 16 providers through
a single OpenAI-compatible endpoint.

Changes:
- Add CHUIZI to LlmProviders enum
- Add to openai_compatible_endpoints, openai_compatible_providers,
  and openai_text_completion_compatible_providers lists
- Add endpoint detection for api.chuizi.ai/v1
- Add provider documentation page

Usage: model="chuizi/anthropic/claude-sonnet-4-6"
Auth: CHUIZI_API_KEY env var
This commit is contained in:
Honam 2026-04-02 05:19:22 -07:00
parent d251238bd7
commit 86bb05a400
4 changed files with 113 additions and 0 deletions

View file

@ -0,0 +1,106 @@
# Chuizi.AI
## Overview
| Property | Details |
|-------|-------|
| Description | Chuizi.AI is a unified AI gateway providing access to 100+ models across 16 providers through a single OpenAI-compatible endpoint. |
| Provider Route on LiteLLM | `chuizi/` |
| Link to Provider Doc | [Chuizi.AI Docs ↗](https://chuizi.ai/docs) |
| Base URL | `https://api.chuizi.ai/v1` |
| Supported Operations | [`/chat/completions`](#sample-usage), [`/completions`](#sample-usage), [`/embeddings`](#sample-usage) |
<br />
## Required Variables
```python showLineNumbers title="Environment Variables"
os.environ["CHUIZI_API_KEY"] = "" # your Chuizi.AI API key
```
Get your API key from [app.chuizi.ai](https://app.chuizi.ai/login).
## Usage - LiteLLM Python SDK
### Non-streaming
```python showLineNumbers title="Chuizi.AI Non-streaming"
import os
import litellm
from litellm import completion
os.environ["CHUIZI_API_KEY"] = "" # your Chuizi.AI API key
messages = [{"content": "What is the capital of France?", "role": "user"}]
# Claude via Chuizi.AI
response = completion(
model="chuizi/anthropic/claude-sonnet-4-6",
messages=messages
)
print(response)
```
### Streaming
```python showLineNumbers title="Chuizi.AI Streaming"
import os
import litellm
from litellm import completion
os.environ["CHUIZI_API_KEY"] = ""
messages = [{"content": "Write a haiku about AI", "role": "user"}]
response = completion(
model="chuizi/openai/gpt-4.1",
messages=messages,
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content or "", end="")
```
## Usage - LiteLLM Proxy
### Config
```yaml showLineNumbers title="config.yaml"
model_list:
- model_name: claude-sonnet
litellm_params:
model: chuizi/anthropic/claude-sonnet-4-6
api_key: os.environ/CHUIZI_API_KEY
- model_name: gpt-4.1
litellm_params:
model: chuizi/openai/gpt-4.1
api_key: os.environ/CHUIZI_API_KEY
- model_name: deepseek-chat
litellm_params:
model: chuizi/deepseek/deepseek-chat
api_key: os.environ/CHUIZI_API_KEY
```
### Start Proxy
```bash
litellm --config /path/to/config.yaml
```
## Available Models
Models use `provider/model` naming. Some popular models:
| Model | LiteLLM Route |
|-------|--------------|
| Claude Sonnet 4.6 | `chuizi/anthropic/claude-sonnet-4-6` |
| Claude Opus 4.6 | `chuizi/anthropic/claude-opus-4-6` |
| Claude Haiku 4.5 | `chuizi/anthropic/claude-haiku-4-5` |
| GPT-4.1 | `chuizi/openai/gpt-4.1` |
| o4-mini | `chuizi/openai/o4-mini` |
| Gemini 2.5 Pro | `chuizi/google/gemini-2.5-pro` |
| DeepSeek V3.2 | `chuizi/deepseek/deepseek-chat` |
| DeepSeek R1 | `chuizi/deepseek/deepseek-r1` |
See the full model list at [chuizi.ai/models](https://chuizi.ai/models).

View file

@ -721,6 +721,7 @@ openai_compatible_endpoints: List = [
"https://nano-gpt.com/api/v1",
"https://api.poe.com/v1",
"https://llm.chutes.ai/v1/",
"https://api.chuizi.ai/v1",
"https://api.v0.dev/v1",
"https://api.morphllm.com/v1",
"https://api.lambda.ai/v1",
@ -770,6 +771,7 @@ openai_compatible_providers: List = [
"nano-gpt", # Nano-GPT - JSON-configured provider
"poe", # Poe - JSON-configured provider
"chutes", # Chutes - JSON-configured provider
"chuizi", # Chuizi.AI - unified AI gateway
"featherless_ai",
"nscale",
"nebius",
@ -805,6 +807,7 @@ openai_text_completion_compatible_providers: List = (
"nano-gpt",
"poe",
"chutes",
"chuizi",
"v0",
"lambda_ai",
"hyperbolic",

View file

@ -309,6 +309,9 @@ def get_llm_provider( # noqa: PLR0915
elif endpoint == "https://llm.chutes.ai/v1/":
custom_llm_provider = "chutes"
dynamic_api_key = get_secret_str("CHUTES_API_KEY")
elif endpoint == "https://api.chuizi.ai/v1":
custom_llm_provider = "chuizi"
dynamic_api_key = get_secret_str("CHUIZI_API_KEY")
elif endpoint == "https://api.v0.dev/v1":
custom_llm_provider = "v0"
dynamic_api_key = get_secret_str("V0_API_KEY")

View file

@ -3291,6 +3291,7 @@ class LlmProviders(str, Enum):
NANOGPT = "nano-gpt"
POE = "poe"
CHUTES = "chutes"
CHUIZI = "chuizi"
XIAOMI_MIMO = "xiaomi_mimo"
LITELLM_AGENT = "litellm_agent"
CURSOR = "cursor"