@vibe-bti/qwen-api
v1.1.3
Published
Express API wrapper for Qwen & DeepSeek chat web endpoint using Puppeteer session auth.
Readme
Qwen & DeepSeek API Proxy
Express API wrapper yang menyediakan endpoint kompatibel OpenAI dan Ollama untuk meneruskan pesan chat ke Qwen Chat dan DeepSeek Chat melalui sesi browser Puppeteer yang persisten.
Fitur
- Multi-Provider: Mendukung Qwen (
qwenClient) dan DeepSeek (deepseekClient). - Format Respon Fleksibel: Endpoint kompatibel OpenAI (
/v1/chat/completions) dan Ollama (/api/chat). - Streaming Support: Mendukung streaming SSE untuk OpenAI dan NDJSON untuk Ollama.
- Tool Calls Parsing: Deteksi dan parsing otomatis format
tool_calls851dari respon model menjadi format tool calls standar OpenAI. - Sesi Persisten: Menyimpan sesi login browser di
browser-session/agar tidak perlu login berulang kali. - Auto-Auth: Membuka browser non-headless secara otomatis jika sesi kadaluwarsa atau login diperlukan.
Setup
npm install
cp .env.example .env
npm startSaat autentikasi diperlukan, Chromium akan terbuka dengan headless: false. Selesaikan login manual di jendela browser tersebut. Sesi akan disimpan di browser-session/.
Untuk Google sign-in atau jika browser bawaan ditolak, gunakan Chrome sistem lokal melalui .env:
PUPPETEER_USE_SYSTEM_CHROME=true
PUPPETEER_EXECUTABLE_PATH=/path/to/chrome
PUPPETEER_CHANNEL=Konfigurasi Environment
| Variabel | Default | Deskripsi |
| :--- | :--- | :--- |
| PORT | 3000 | Port server API |
| PUPPETEER_HEADLESS | true | Jalankan browser tanpa GUI (set false untuk debug) |
| PUPPETEER_USE_SYSTEM_CHROME | true | Gunakan Chrome sistem alih-alih Chromium bundled |
| AUTH_CHECK_INTERVAL_MS | 5000 | Interval polling status autentikasi |
| DEEPSEEK_MODEL_TYPE | default | Tipe model default untuk DeepSeek |
| DEEPSEEK_SEARCH_ENABLED | true | Aktifkan pencarian web di DeepSeek |
| DEEPSEEK_THINKING_ENABLED | false | Aktifkan mode thinking di DeepSeek |
Endpoint
Health Check
GET /health
GET /readyMengembalikan status koneksi browser, kesiapan route, dan status autentikasi.
Chat Completions
Mendukung format request OpenAI dan prompt langsung:
http POST /v1/chat/completions POST /api/chat Content-Type: application/json
**OpenAI Format:**
```json
{
"model": "qwen3.7-plus",
"stream": true,
"messages": [
{ "role": "user", "content": "halo" }
]
}Simple Prompt:
{
"prompt": "halo",
"model": "qwen3.7-plus"
}Parameter opsional:
stream:trueuntuk streaming responseraw:trueuntuk mendapatkan respon mentah dari upstream tanpa konversi formatchat_id/parent_id: Untuk melanjutkan percakapan existingstream_options.include_usage: Sertakan estimasi token usage di akhir stream
Arsitektur Source
server.js- Entry point Express, routing, dan handler chat completionqwenClient.js- Client untuk Qwen Chat API via browser sessiondeepseekClient.js- Client untuk DeepSeek Chat API via browser sessionopenaiStream.js- Konversi stream upstream ke format SSE OpenAI + parsing tool callsollamaStream.js- Konversi stream upstream ke format NDJSON OllamaopenaiResponse.js- Konversi respon non-streaming ke format OpenAIprompt.js- Ekstraksi dan normalisasi prompt dari berbagai format inputconfig.js- Manajemen konfigurasi dari environment variableslogger.js- Utility logging berwarna untuk debugging request/response
