This page documents three advanced provider implementations: Yupp, Qwen, and LMArena. These providers demonstrate sophisticated authentication patterns including account rotation (Yupp), OAuth2 device flow with shared token management (Qwen/QwenCode), and browser automation (LMArena). For general provider architecture, see Provider Base Classes. For authentication strategies overview, see Authentication Overview.
These three providers represent distinct approaches to provider implementation:
The key distinction between Qwen and QwenCode is authentication: Qwen uses generated cookies while QwenCode implements full OAuth2 with refresh tokens.
Sources: g4f/Provider/Yupp.py1-55 g4f/Provider/Qwen.py1-40 g4f/Provider/qwen/QwenCode.py1-27 g4f/Provider/needs_auth/LMArena.py1-41
Yupp Implementation Hierarchy:
The Yupp provider extends AsyncGeneratorProvider and ProviderModelMixin, using cloudscraper for Cloudflare bypass and maintaining global state for account rotation and image caching. g4f/Provider/Yupp.py34-45
Sources: g4f/Provider/Yupp.py34-45 g4f/Provider/Yupp.py50-54 g4f/Provider/Yupp.py58-83
Account rotation is managed by get_best_yupp_account() which implements:
error_count incremented on failures. g4f/Provider/Yupp.py98-100MAX_ERROR_COUNT (default: 3) are excluded until ERROR_COOLDOWN (default: 300s) elapses. g4f/Provider/Yupp.py105-118(last_used, error_count) to distribute load. g4f/Provider/Yupp.py130-133Sources: g4f/Provider/Yupp.py104-133 g4f/Provider/Yupp.py86-101
| Aspect | Qwen | QwenCode |
|---|---|---|
| Authentication | Cookie generation via generate_cookies() | OAuth2 device authorization flow |
| Base Class | AsyncGeneratorProvider | OpenaiTemplate |
| Token Management | Per-request cookies | Shared SharedTokenManager with file locking |
| API Endpoint | chat.qwen.ai | qwen.ai (OpenAI-compatible) |
Sources: g4f/Provider/Qwen.py212-227 g4f/Provider/qwen/QwenCode.py18-27 g4f/Provider/qwen/cookie_generator.py1-18
The Qwen provider implements Alibaba Cloud OSS v4 signature for file uploads in get_oss_headers:
x-oss-content-sha256, x-oss-date, and x-oss-security-token. g4f/Provider/Qwen.py55-87date_key → region_key → service_key → signing_key. g4f/Provider/Qwen.py103-106Sources: g4f/Provider/Qwen.py55-114
Entity mapping for Qwen Token Management:
Singleton Pattern g4f/Provider/qwen/sharedTokenManager.py57-61:
threading.Lock to ensure single instance across threads.Token Validation g4f/Provider/qwen/qwenOAuth2.py25-26:
Uses a 30-second buffer (TOKEN_REFRESH_BUFFER_MS) to prevent race conditions during request execution.
Sources: g4f/Provider/qwen/sharedTokenManager.py43-61 g4f/Provider/qwen/sharedTokenManager.py115-133
PKCE Parameters g4f/Provider/qwen/qwenOAuth2.py28-42:
Sources: g4f/Provider/qwen/qwenOAuth2.py97-125 g4f/Provider/qwen/oauthFlow.py16-95
LMArena requires browser automation to handle anti-bot systems:
zendriver (nodriver) to extract valid session arguments including cookies and headers via get_args_from_nodriver. g4f/Provider/needs_auth/LMArena.py26-34click_trunstile via coordinate-based mouse interaction in the browser tab. g4f/Provider/needs_auth/LMArena.py98-113Model Loading: Models are loaded from a cache file in the cookies directory (.models/arena.ai.json) or fetched dynamically from the Arena direct mode URL. g4f/Provider/needs_auth/LMArena.py169-184
Sources: g4f/Provider/needs_auth/LMArena.py98-113 g4f/Provider/needs_auth/LMArena.py169-205
| Feature | Yupp | Qwen | QwenCode | LMArena |
|---|---|---|---|---|
| Base Class | AsyncGeneratorProvider | AsyncGeneratorProvider | OpenaiTemplate | AsyncGeneratorProvider |
| Auth Type | Account Rotation | Cookie Generation | OAuth2 Device Flow | Browser Automation |
| Token Storage | Memory List | Memory Cache | oauth_creds.json | .models Cache |
| File Upload | Threaded API Calls | OSS HMAC-SHA256 | N/A | S3 Signed URL Proxy |
Sources: g4f/Provider/Yupp.py34-50 g4f/Provider/Qwen.py212-227 g4f/Provider/qwen/QwenCode.py18-27 g4f/Provider/needs_auth/LMArena.py116-139
Refresh this wiki
This wiki was recently refreshed. Please wait 5 days to refresh again.