Тихое усечение перевода при сбое разбора потока JSON (без выброса ошибки)

Добавлю еще один пример — мы наблюдаем то, что выглядит как тот же самый базовый механизм, но проявляющийся по-разному.

Наблюдается на: Discourse core + discourse-ai, LLM: GPT-5.1 через OpenAI (пользовательское API-соединение, не встроенная модель).

Подтверждение воспроизводимости

Один и тот же исходный пост (на русском, ~2000 символов, заголовки/жирный текст/маркированные списки/ссылки), переведенный на несколько языков через встроенный AI-переводчик:

  • Польский (pl): структура встроенного изображения в Markdown потеряна — из ![alt text|690x460](upload://...) превратился в некорректную ссылку без префикса ! и разделителя |, где альтернативный текст и размеры слились в обычный текст. Отображается как кликабельная ссылка вместо встроенного изображения.
  • Украинский (uk): буквенные последовательности \n\n отображаются как обычный текст по всему посту вместо разрывов абзацев. Markdown-разметка изображения в этом же переводе осталась целой — так что проблема не связана с одним фиксированным симптомом, она варьируется от запуска к запуску.

В отличие от описанного выше усечения, в нашем случае нет отсутствующего контента — полный текст присутствует, но с поврежденными escape-последовательностями / синтаксисом Markdown, а не с укороченным выводом. Другой провайдер (OpenAI против Google), другой симптом (повреждение против усечения), та же предполагаемая причина: StructuredOutput#read_buffered_property откатывается к BestEffortJsonParser#extract_key, который не раскодировывает JSON-строковые последовательности (\n остается буквальным) и, похоже, также неправильно обрабатывает специальные символы рядом с Markdown-синтаксисом, когда откат происходит во время парсинга.

Ни в логах Sidekiq, ни в логах Rails с нашей стороны ошибок нет — то же самое поведение тихого сбоя.

1 лайк