Рецепт · OpenClaw

Стоп на data: [DONE] в Gemini и Vertex — что изменилось в OpenClaw 2026.11.1

Gemini и Vertex останавливаются на data: [DONE], а при повторе первого ответа Gemini метаданные использования и пустые состояния завершения не считаются выводом.

· 2 мин чтения

Коротко

  • Управляемые транспорты Gemini и Vertex останавливают чтение на data: [DONE], освобождают тело ответа и игнорируют последующие кадры.
  • Для успешного результата всё равно требуется валидная причина завершения кандидата (finish reason).
  • Ошибки квоты в первом кадре участвуют в ротации API-ключей Gemini.
  • Пустая или неуказанная причина завершения, метаданные использования и идентификатор ответа не считаются сгенерированным выводом.

Сверено с документацией OpenClaw 2026.11.1, 6 ноября 2026.

Когда совместимый прокси присылает маркер data: [DONE], управляемый транспорт Gemini и Vertex прекращает чтение потока на этом маркере, а не на последнем кадре.

Стоп на data: [DONE]: как это устроено

Когда совместимый прокси присылает data: [DONE], управляемый транспорт прекращает чтение потока, освобождает тело ответа и игнорирует кадры после маркера.

Для повтора первого ответа Gemini оговорено: метаданные использования, идентификатор ответа, а также пустые или неуказанные состояния завершения не считаются сгенерированным выводом. Они не отключают действующий дедлайн повтора.

Квота в первом кадре и ротация ключей

Ошибки квоты, пришедшие в первом кадре, участвуют в ротации API-ключей. Это касается и Interactions: запросы к официальному эндпоинту AI Studio используют ту же ротацию ключей Gemini, что и GenerateContent, когда лимит срабатывает до начала стрима.

Граница по ключам: собственные эндпоинты, OAuth-учётные данные и явные заголовки авторизации дополнительные Gemini-ключи не получают. Interactions при этом уважает управляемые request.proxy, request.tls и настройки локального сервиса.

Что проверить в своём прокси перед Gemini

Отдельно проверьте, какой транспорт выбран для вашего baseUrl. При собственном URL прокси Flash-модели по умолчанию идут через google-generative-ai (GenerateContent), даже если модель взята из каталога, а не из настроенной строки модели. Interactions на таком маршруте включается явно: api: "google-interactions" на уровне провайдера или модели.

{
  models: {
    providers: {
      google: {
        baseUrl: "https://generativelanguage.googleapis.com/v1beta",
        api: "google-generative-ai",
        models: [
          {
            id: "gemini-3.8-flash",
            name: "Gemini Flash",
            api: "google-generative-ai",
            reasoning: true,
          },
        ],
      },
    },
  },
  agents: {
    defaults: { model: { primary: "google/gemini-3.8-flash" } },
  },
}
openclaw models list --provider google
openclaw models list --refresh --all --provider google-vertex

Где ломается и когда не применять

  • Изменение касается только управляемых транспортов Gemini и Vertex.
  • На собственных эндпоинтах, с OAuth и явными заголовками авторизации ротации дополнительных Gemini-ключей не будет.
  • Interactions работает без состояния: OpenClaw отправляет store: false, не сохраняет идентификатор взаимодействия и игнорирует настроенные дескрипторы cachedContent. Если нужны явные дескрипторы кэша, выбирайте google-generative-ai.
  • Vertex AI, Gemini CLI, генерация изображений, речь, Live, эмбеддинги, понимание медиа, веб-поиск и обработка PDF сохраняют прежние маршруты.