Files
deepseek-api/test.mjs
T
Alex CubeandClaude Opus 5 6ccb5dd46b Одна модель вместо трёх: DeepSeek убрал выбор из веб-морды
DeepSeek больше не даёт выбирать модель: radiogroup Instant / Expert /
Vision (div[data-model-type][role="radio"]) со страницы исчез, оставшаяся
модель универсальна и разбирает в том числе картинки. Вместе с выбором
отпали и три роли — think, search, vision, — а с ними отдельный чат под
каждую: теперь чат один.

Заодно выяснилось, что тумблеры DeepThink и Search больше не пропадают
после первого сообщения — они видны и переключаются в любом чате, в том
числе начатом. На их исчезновении держалась вся прежняя схема с чатами
под роль, так что нужда в ней отпала и по этой причине тоже.

DeepThink выключается перед каждым вопросом: он только показывает
размышления модели и раздувает ответ. Search не трогаем намеренно — это
тумблер человека: как поставлен во вкладке, так мост и спрашивает.

Попутно два бага, которые вылезли на живом прогоне:

- data-virtual-list-item-key у вопросов теперь отрицательные (-4, 2, -11,
  8 для двух обменов подряд), и __firstMsg сортировкой по возрастанию
  отдавал последний вопрос вместо первого. Правка уходила в чужое
  сообщение. Берём порядок DOM — список рисуется сверху вниз.

- Вопрос с картинкой уходил новым сообщением в рабочий чат и ломал
  уговор «в чате ровно один обмен», на котором держится правка первого
  сообщения. После такого чат оставался из двух обменов, и наружу
  отдавался ответ на предыдущий вопрос. Теперь картинка всегда открывает
  новый чат, а старый удаляется как обычно.

Снаружи: /api/tags отдаёт одну модель deepseek:chat, имя присланной
клиентом модели не смотрится вовсе, ключ defaultRole из config.json убран,
chats.json стал {"id": "..."} вместо карты ролей. /api/probe показывает
положение тумблеров.

Проверено живым прогоном: обычный вопрос, вопрос с картинкой, снова
обычный — ответы верные, чат ротируется, сайдбар чистится.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ez8B2cR3mbm1fjmAMa8JXS
2026-09-11 10:26:03 +03:00

23 lines
1.3 KiB
JavaScript

// Проверка перевода формата Ollama в один вопрос для веб-чата.
// Браузер и сам DeepSeek тут не нужны: node test.mjs
import assert from 'node:assert/strict';
import { flatten, imageOf } from './server.mjs';
// У Ollama роли — отдельные сообщения, у веб-чата их нет: склеиваем по порядку,
// пустые выбрасываем. Потеря system означала бы потерю всей инструкции.
assert.equal(
flatten([{ role: 'system', content: 'Отвечай JSON' },
{ role: 'user', content: ' где кусачки? ' },
{ role: 'user', content: '' }]),
'Отвечай JSON\n\nгде кусачки?');
assert.equal(flatten([]), '');
assert.equal(flatten(undefined), '');
// Картинка приезжает в base64 внутри сообщения — так её кладёт Ollama.
const bytes = Buffer.from([0xff, 0xd8, 0xff]);
assert.deepEqual(imageOf([{ role: 'user', content: 'что это?',
images: [bytes.toString('base64')] }]), bytes);
assert.equal(imageOf([{ role: 'user', content: 'без картинки' }]), null);
console.log('OK: перевод формата работает');