54 lines
3.8 KiB
Markdown
54 lines
3.8 KiB
Markdown
# llm-web-proxy-qwen-web
|
||
|
||
Подзадача [llm-web-proxy] (п.4). Родитель: `.tasks/llm-web-proxy.md`.
|
||
|
||
## Goal
|
||
|
||
Добавить комбо `qwen-web` в llm-web-proxy (lwp): web-чат chat.qwen.ai как провайдер
|
||
(executor + ключ + конфиг + тесты + live-smoke). Модель — Qwen, эмуляция тулов
|
||
(`emulated`, как у deepseek-web). Отдельное комбо, НЕ смешивать с deepseek-комбо.
|
||
|
||
## Почему (контекст)
|
||
|
||
- В спеке llm-web-proxy qwen-web заявлен как будущее комбо («позже: qwen-web, gemini-web, kimi-web, grok-web — отдельные комбо, свои executors»).
|
||
- Оригинальный блокер: **DNS EAI_AGAIN chat.qwen.ai** — сетевой глюк, не ключ
|
||
(.wiki/concepts/omniroute-combo-deepseek-web-tuning.md:43).
|
||
- **Проверено 2026-08-22: DNS резолвится** (nslookup chat.qwen.ai → 47.91.78.155 / 47.254.175.31, aliases) — блокер, похоже, снят.
|
||
- Ключ есть: wiki `omniroute-combo-deepseek-web-tuning.md:58` — «qwen-web (✅ ключ есть, DNS-глюк)». userToken chat.qwen.ai — в кредах omniroute (не в pass; источник — конфиг/креды omniroute, паттерн deepseek-аккаунтов megan/yulia/vitya).
|
||
- Эмуляция тулов у qwen-web: `"emulated"` (webTools.ts парсер зоопарка `<tool>`-форматов — уже в lwp, общий для deepseek-web и qwen-web).
|
||
- В lwp сейчас ТОЛЬКО deepseek: 4 комбо (flash/pro ± search), 3 аккаунта. qwen-executor'а в пакете нет (проверено 2026-08-22).
|
||
|
||
## Что брать из omniroute
|
||
|
||
- `open-sse/executors/qwen-web.ts` — из docker-образа `diegosouzapw/omniroute:latest` (`/app/`), паттерн вытаскивания deepseek-web.ts (уже отработан в llm-web-proxy).
|
||
- Парсеры тулов общие — `webTools.ts` уже есть, переиспользовать.
|
||
|
||
## Что писать в lwp
|
||
|
||
1. executor `qwen-web` (по паттерну deepseek-web, но НЕ копипастить логику тул-эмуляции — общий модуль).
|
||
2. Ключ userToken chat.qwen.ai → в lwp key-store (паттерн deepseek-аккаунтов).
|
||
3. Комбо `qwen-web` в конфиг (аккаунт, модель, timeout).
|
||
4. Тесты: TDD — round-robin, failover, `<tool>`-парсинг (зоопарк), smoke против live.
|
||
5. Live-smoke: `lwp test qwen-web` / curl `/v1/chat/completions` model=qwen-web.
|
||
|
||
## Ожидаемый результат
|
||
|
||
- `lwp combo list` показывает qwen-web.
|
||
- `lwp test qwen-web` — 200, стриминг, tool-calls работают.
|
||
- Лог lwp: req/upstream/session/stream события для qwen (raw-reply виден).
|
||
|
||
## Open questions
|
||
|
||
- [ ] Актуальный userToken chat.qwen.ai жив? (проверить при работе — EAI_AGAIN мог быть и от бана/истечения)
|
||
- [ ] Какая модель по умолчанию у qwen-web (qwen3-max? qwen3-flash?) — смотреть executor omniroute.
|
||
|
||
## Completed steps
|
||
|
||
- [x] 2026-08-22: DNS-блокер перепроверен — chat.qwen.ai резолвится (EAI_AGAIN ушёл).
|
||
- [x] 2026-08-22: подтверждено, что qwen-executor'а в lwp ещё нет (только deepseek).
|
||
|
||
## Notes
|
||
|
||
- Родитель llm-web-proxy — 🔴 active (claimed 2026-08-22, vitya). Эта подзадача ⚪ ready, берётся в работу после/параллельно с п.2 (mac/linux autostart).
|
||
- «Настоящий» web-чат Qwen без подписки — бесплатный, тул-эмуляция emulated (wiki:58).
|