Поддерживаемые провайдеры

Google Gemini

Конвертация Google Gemini API в Meridian — преобразование запросов и ответов, обработка сообщений, инструменты и поведение streaming.

Обзор

API Google Gemini структурно отличается от OpenAI. Meridian выполняет обширное преобразование:

  • Переименование ролей"assistant""model", system-сообщения интегрируются в основной поток.
  • Группировка сообщений — подряд идущие tool-ответы сливаются в одно user-сообщение.
  • Переименование параметров — например, max_completion_tokensmaxOutputTokens, stopstopSequences.
  • Обработка function calls — сохранение tool call ID и поддержка thought signature.
  • Модальность контента — поддержка текста, изображений, видео, выполнения кода и thought-контента.
  • Thinking / Reasoning — конфигурация thinking маппится в структуру reasoning Meridian.

Поддерживаемые операции

ОперацияNon-StreamingStreamingEndpoint
Chat Completions/v1beta/models/{model}:generateContent
Responses API/v1beta/models/{model}:generateContent
Speech (TTS)/v1beta/models/{model}:generateContent
Transcriptions (STT)/v1beta/models/{model}:generateContent
Image Generation/v1beta/models/{model}:generateContent или /v1beta/models/{model}:predict (Imagen)
Image Edit/v1beta/models/{model}:generateContent или /v1beta/models/{model}:predict (Imagen)
Video Generation/v1beta/models/{model}:predictLongRunning
Image VariationНе поддерживается
Embeddings/v1beta/models/{model}:embedContent
Files/upload/storage/v1beta/files
Batch/v1beta/batchJobs
List Models/v1beta/models

Аутентификация

Gemini поддерживает аутентификацию по API-ключу в дополнение к OAuth2 Bearer token. Реализация выбирает подходящий метод в зависимости от типа эндпоинта.

Аутентификация по API-ключу

API-ключ передаётся одним из двух способов:

  1. Через заголовок (стандартные эндпоинты Gemini):

    • Формат: заголовок x-goog-api-key: YOUR_API_KEY.
    • Используется для стандартных эндпоинтов Gemini (например, /v1beta/models/{model}:generateContent).
  2. Через query-параметр (Imagen и кастомные эндпоинты):

    • Формат: ?key=YOUR_API_KEY в URL запроса.
    • Используется для моделей Imagen и кастомных эндпоинтов.
    • Пример: https://generativelanguage.googleapis.com/v1beta/models/imagen-4.0-generate-001:predict?key=YOUR_API_KEY.

Meridian автоматически выбирает подходящий метод аутентификации по типу эндпоинта.


1. Chat Completions

Параметры запроса

Маппинг параметров

ПараметрПреобразование
max_completion_tokensПереименование в maxOutputTokens
temperature, top_pПрямой проброс
stopПереименование в stopSequences
response_formatКонвертируется в responseMimeType и responseJsonSchema
toolsРеструктуризация схемы (см. Tool Conversion)
tool_choiceМаппится в functionCallingConfig (см. Tool Conversion)
reasoningМаппится в thinkingConfig (см. Reasoning / Thinking)
top_kЧерез extra_params (специфика Gemini)
presence_penalty, frequency_penaltyЧерез extra_params
seedЧерез extra_params

Игнорируемые параметры

Следующие параметры тихо игнорируются: logit_bias, logprobs, top_logprobs, parallel_tool_calls, service_tier.

Extra-параметры

Используйте extra_params или передавайте напрямую в теле запроса для специфичных для Gemini полей:

curl -X POST http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini/gemini-2.0-flash",
    "messages": [{"role": "user", "content": "Hello"}],
    "top_k": 40,
    "stop_sequences": ["###"]
  }'

Reasoning / Thinking

Документация: см. Reasoning.

Маппинг параметров

  • reasoning.effortthinkingConfig.thinkingLevel ("low"LOW, "high"HIGH).
  • reasoning.max_tokensthinkingConfig.thinkingBudget (бюджет токенов на thinking).
  • Наличие параметра reasoning включает thinkingConfig.includeThoughts = true.

Поддерживаемые уровни thinking

  • "low" / "minimal"LOW.
  • "medium" / "high"HIGH.
  • null или не задано → определяется по max_tokens: -1 (динамический), 0 (отключено) или конкретный бюджет.

Пример

// Запрос
{"reasoning": {"effort": "high", "max_tokens": 10000}}

// Преобразование Gemini
{"thinkingConfig": {"includeThoughts": true, "thinkingLevel": "HIGH", "thinkingBudget": 10000}}

Конвертация сообщений

Критичные нюансы

  • Переименование ролей: "assistant""model", "system" → часть потока user/model.
  • Подряд идущие tool-ответы: tool-сообщения сливаются в одно user-сообщение с function response parts.
  • Уплощение контента: multi-part контент в одном сообщении сохраняется как массив parts.

Конвертация изображений

  • URL-изображения: {type: "image_url", image_url: {url: "..."}}{type: "image", source: {type: "url", url: "..."}}.
  • Base64-изображения: data URL → {type: "image", source: {type: "base64", media_type: "image/png", ...}}.
  • Видео-контент: сохраняется с метаданными (fps, start/end offset).

Tool Conversion

Определения tools реструктурируются:

  • function.namefunctionDeclarations.name (сохраняется).
  • function.parametersfunctionDeclarations.parameters (формат Schema).
  • function.descriptionfunctionDeclarations.description.
  • function.strict → отбрасывается (Gemini не поддерживает).

Маппинг tool_choice

OpenAIGemini
"auto"AUTO (по умолчанию)
"none"NONE
"required"ANY
Конкретный toolANY с allowedFunctionNames

Конвертация ответа

Маппинг полей

  • finishReasonfinish_reason:
    • STOPstop;
    • MAX_TOKENSlength;
    • SAFETY, RECITATION, LANGUAGE, BLOCKLIST, PROHIBITED_CONTENT, SPII, IMAGE_SAFETYcontent_filter;
    • MALFORMED_FUNCTION_CALL, UNEXPECTED_TOOL_CALLtool_calls.
  • candidates[0].content.parts[0].textchoices[0].message.content (если единственный text-блок).
  • candidates[0].content.parts[].functionCallchoices[0].message.tool_calls.
  • promptTokenCountusage.prompt_tokens.
  • candidatesTokenCountusage.completion_tokens.
  • totalTokenCountusage.total_tokens.
  • cachedContentTokenCountusage.prompt_tokens_details.cached_tokens.
  • thoughtsTokenCountusage.completion_tokens_details.reasoning_tokens.
  • Thought-контент (text parts с thought: true) → поле reasoning в stream-дельтах.
  • Function call args (map) → JSON-строка arguments.

Streaming

Структура событий:

  • Streaming-ответы содержат дельты в delta.content (текст), delta.reasoning (thoughts), delta.toolCalls (function calls).
  • Function-ответы появляются как text content в дельте.
  • finish_reason присутствует только в финальном чанке.
  • Usage-метаданные включаются только в финальный чанк.

2. Responses API

Responses API использует тот же базовый эндпоинт /generateContent, но конвертирует между форматом OpenAI Responses и форматом Gemini Messages.

Параметры запроса

Маппинг параметров

ПараметрПреобразование
max_output_tokensПереименование в maxOutputTokens
temperature, top_pПрямой проброс
instructionsКонвертируется в текст system instruction
input (строка или массив)Конвертируется в сообщения
toolsРеструктуризация схемы (см. Chat Completions)
tool_choiceМаппинг типов (см. Chat Completions)
reasoningМаппится в thinkingConfig (см. Reasoning / Thinking)
textМаппится в responseMimeType и responseJsonSchema
stopЧерез extra_params, переименование в stopSequences
top_kЧерез extra_params

Extra-параметры

Используйте extra_params или передавайте напрямую в теле запроса:

curl -X POST http://localhost:8080/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini/gemini-2.0-flash",
    "input": "Hello, how are you?",
    "instructions": "You are a helpful assistant.",
    "top_k": 40
  }'

Input и Instructions

  • Input: строка оборачивается как user-сообщение, массив конвертируется в сообщения.
  • Instructions: становится system instruction (одиночный text-блок).

Поддержка tools

Поддерживаемые типы: function, computer_use_preview, web_search, mcp.

Конвертации tools те же, что в Chat Completions, с дополнениями:

  • Computer-tools автоматически конфигурируются (если заданы в запросе Meridian).
  • Function-based tools всегда включены.

Конвертация ответа

  • finishReasonstatus: STOP/MAX_TOKENS/прочее → completed, SAFETYincomplete.
  • Конвертация output items:
    • Text parts → поле message;
    • Function calls → поле function_call;
    • Thought-контент → поле reasoning.
  • Usage-поля сохраняются, cache-токены маппятся в *_tokens_details.cached_tokens.

Streaming

Структура событий аналогична Chat Completions streaming:

  • content_part.added эмитится для text и reasoning parts.
  • Идентификаторы элементов формируются как msg_{responseID}_item_{outputIndex}.

3. Speech (Text-to-Speech)

Синтез речи использует базовый эндпоинт chat generation с audio response modality.

Параметры запроса

ПараметрПреобразование
inputТекст для синтеза → contents[0].parts[0].text
voiceИмя голоса → generationConfig.speechConfig.voiceConfig.prebuiltVoiceConfig.voiceName
response_formatПоддерживается только "wav" (по умолчанию); авто-конвертация из PCM

Конфигурация голоса

Single Voice:

{
  "generationConfig": {
    "responseModalities": ["AUDIO"],
    "speechConfig": {
      "voiceConfig": {
        "prebuiltVoiceConfig": {
          "voiceName": "Chant-Female"
        }
      }
    }
  }
}

Multi-Speaker:

{
  "generationConfig": {
    "responseModalities": ["AUDIO"],
    "speechConfig": {
      "multiSpeakerVoiceConfig": {
        "speakerVoiceConfigs": [
          {
            "speaker": "Character A",
            "voiceConfig": {
              "prebuiltVoiceConfig": {
                "voiceName": "Chant-Female"
              }
            }
          }
        ]
      }
    }
  }
}

Конвертация ответа

  • Аудио-данные извлекаются из candidates[0].content.parts[].inlineData.
  • Конвертация формата: Gemini возвращает PCM-аудио (s16le, 24 kHz, mono).
  • Авто-конвертация: PCM → WAV при response_format: "wav" (по умолчанию).
  • Сырое аудио возвращается, если response_format опущен или пуст.

Поддерживаемые голоса

Типовые голоса Gemini:

  • Chant-Female — женский голос;
  • Chant-Male — мужской голос;
  • остальные голоса зависят от возможностей модели.

Полный список поддерживаемых голосов смотрите в документации модели.


4. Transcriptions (Speech-to-Text)

Transcriptions реализованы как chat completions с audio content и текстовым промптом.

Параметры запроса

ПараметрПреобразование
fileБайты аудио → contents[].parts[].inlineData
promptИнструкции → contents[0].parts[0].text (по умолчанию "Generate a transcript of the speech.")
languageЧерез extra_params (если поддерживается моделью)

Обработка audio input

Аудио передаётся как inline data с авто-определением MIME-типа:

{
  "contents": [
    {
      "parts": [
        {
          "text": "<prompt text>"
        },
        {
          "inlineData": {
            "mimeType": "audio/wav",
            "data": "<base64-encoded-audio>"
          }
        }
      ]
    }
  ]
}

Extra-параметры

Можно настроить safety settings и кэширование:

curl -X POST http://localhost:8080/v1/audio/transcriptions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini/gemini-2.0-flash",
    "file": "<binary-audio-data>",
    "prompt": "Transcribe this audio in the original language."
  }'

Конвертация ответа

  • Транскрибированный текст извлекается из candidates[0].content.parts[].text.
  • task устанавливается в "transcribe".
  • Usage-метаданные маппятся:
    • promptTokenCountinput_tokens;
    • candidatesTokenCountoutput_tokens;
    • totalTokenCounttotal_tokens.

5. Embeddings

Поддерживаются как одиночный текст, так и batch-эмбеддинги через batch-запросы.

Параметры запроса:

  • inputrequests[0].content.parts[0].text (одиночный текст для массивов склеивается через пробел);
  • dimensionsoutputDimensionality;
  • task type и title передаются через extra_params.

Маппинг ответа:

  • embeddings[].values → массив embedding в Meridian;
  • metadata.billableCharacterCount → usage prompt tokens (fallback);
  • счётчики токенов извлекаются из usage metadata.

6. Batch API

Форматы запроса: массив inline-запросов или файловый вход.

Пагинация: токен-based — pageToken.

Эндпоинты:

  • POST /v1beta/batchJobs — создание;
  • GET /v1beta/batchJobs?pageSize={limit}&pageToken={token} — список;
  • GET /v1beta/batchJobs/{batch_id} — получение;
  • POST /v1beta/batchJobs/{batch_id}:cancel — отмена.

Структура ответа:

  • Маппинг статусов: BATCH_STATE_PENDING/BATCH_STATE_RUNNINGin_progress, BATCH_STATE_SUCCEEDEDcompleted, BATCH_STATE_FAILEDfailed, BATCH_STATE_CANCELLINGcancelling, BATCH_STATE_CANCELLEDcancelled, BATCH_STATE_EXPIREDexpired.
  • Inline-ответы: массив в dest.inlinedResponses.
  • File-ответы: JSONL-файл в dest.fileName.

Замечание: метки RFC3339 конвертируются в Unix timestamp.


7. Files API

Поддерживается загрузка файлов для batch-обработки и мультимодальных запросов.

Загрузка: multipart/form-data с полями file (binary) и filename (опционально).

Маппинг полей:

  • nameid;
  • displayNamefilename;
  • sizeBytessize_bytes;
  • mimeTypecontent_type;
  • createTime (RFC3339) → Unix timestamp.

Эндпоинты:

  • POST /upload/storage/v1beta/files — загрузка;
  • GET /v1beta/files?limit={limit}&pageToken={token} (cursor-пагинация);
  • GET /v1beta/files/{file_id} — метаданные;
  • DELETE /v1beta/files/{file_id} — удаление;
  • GET /v1beta/files/{file_id}/content — скачивание.

8. Image Generation

Gemini поддерживает два формата генерации изображений в зависимости от модели:

  1. Стандартный формат Gemini: использует эндпоинт /v1beta/models/{model}:generateContent.
  2. Формат Imagen: использует эндпоинт /v1beta/models/{model}:predict для моделей Imagen (определяется автоматически).

Маппинг параметров

ПараметрПреобразование
promptТекстовое описание изображения
nКоличество изображений (мапится в sampleCount для Imagen, candidateCount для Gemini)
sizeРазмер в формате WxH (например, "1024x1024"). Для Imagen конвертируется в imageSize + aspectRatio
output_formatФормат вывода: "png", "jpeg", "webp". Для Imagen конвертируется в MIME-тип
seedSeed для воспроизводимости (передаётся напрямую)
negative_promptNegative prompt (передаётся напрямую)

Extra-параметры

Используйте extra_params или передавайте напрямую в теле запроса для специфичных для Gemini полей:

ПараметрТипПримечания
personGenerationstringНастройка генерации людей (только Imagen)
languagestringКод языка (только Imagen)
enhancePromptboolФлаг улучшения промпта (только Imagen)
safetySettings / safety_settingsstring/arrayКонфигурация safety settings
cachedContent / cached_contentstringID кэшированного контента
labelsobjectMap кастомных меток
curl -X POST http://localhost:8080/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini/imagen-4.0-generate-001",
    "prompt": "A sunset over the mountains",
    "size": "1024x1024",
    "n": 2,
    "output_format": "png"
  }'

Конвертация запроса

Стандартный формат Gemini

  • Маппинг модели: bifrostReq.Modelreq.Model, bifrostReq.Input.Promptreq.Contents[0].Parts[0].Text.
  • Response modality: внутренне задаётся generationConfig.responseModalities = ["IMAGE"] для индикации генерации изображения.
  • Количество изображений: ngenerationConfig.candidateCount.
  • Extra-параметры: safetySettings, cachedContent и labels маппятся напрямую.

Формат Imagen

  • Prompt: bifrostReq.Promptreq.Instances[0].Prompt.
  • Количество изображений: nreq.Parameters.SampleCount.
  • Конвертация size: size (формат WxH) преобразуется в:
    • imageSize: "1k" (если размеры ≤ 1024), "2k" (если ≤ 2048). Размеры больше "2k" моделями Imagen не поддерживаются.
    • aspectRatio: "1:1", "3:4", "4:3", "9:16" или "16:9" (по соотношению width/height).
  • Output Format: output_format ("png", "jpeg") → parameters.outputOptions.mimeType ("image/png", "image/jpeg").
  • Seed и Negative Prompt: передаются напрямую в seed и parameters.negativePrompt.
  • Extra-параметры: personGeneration, language, enhancePrompt, safetySettings маппятся в parameters.

Конвертация ответа

Стандартный формат Gemini

  • Данные изображения: извлекаются InlineData из candidates[0].content.parts[] с MIME-типом image/*.
  • Output Format: MIME-тип (image/png, image/jpeg, image/webp) конвертируется в расширение файла (png, jpeg, webp).
  • Usage: usage токенов извлекается из usageMetadata.
  • Несколько изображений: каждая image-part становится записью ImageData в массиве ответа.

Формат Imagen

  • Данные изображения: каждый prediction в response.predictions[]ImageData с b64_json из bytesBase64Encoded.
  • Output Format: prediction.mimeType → расширение файла в поле outputFormat (Imagen не поддерживает webp).
  • Index: каждому prediction присваивается index (0, 1, 2, ...) в массиве ответа.

Конвертация size

Для формата Imagen size конвертируется между форматами:

Поддерживаемые размеры изображений: "1k" (≤1024), "2k" (≤2048).

Поддерживаемые aspect ratio: "1:1", "3:4", "4:3", "9:16", "16:9".

Выбор эндпоинта

Провайдер автоматически выбирает эндпоинт по имени модели:

  • Imagen-модели (определяются через schemas.IsImagenModel()): эндпоинт /v1beta/models/{model}:predict.
  • Другие модели: эндпоинт /v1beta/models/{model}:generateContent с image response modality.

Streaming

Streaming генерации изображений в Gemini не поддерживается.


9. Image Edit

Запросы используют multipart/form-data, не JSON.

Gemini поддерживает редактирование изображений через два разных API в зависимости от модели:

  1. Стандартный формат Gemini: эндпоинт /v1beta/models/{model}:generateContent (для моделей Gemini).
  2. Формат Imagen: эндпоинт /v1beta/models/{model}:predict (для моделей Imagen, определяется автоматически).

Параметры запроса:

ПараметрТипОбязательныйПримечания
modelstringИдентификатор модели (Gemini или Imagen)
promptstringТекстовое описание правки
image[]binaryФайл(ы) изображения для редактирования (несколько изображений поддерживаются)
maskbinaryФайл маски
typestringТип правки: "inpainting", "outpainting", "inpaint_removal", "bgswap" (только Imagen)
nintКоличество изображений (1–10)
output_formatstringФормат вывода: "png", "webp", "jpeg"
output_compressionintУровень сжатия (0–100%)
seedintSeed для воспроизводимости (через ExtraParams["seed"])
negative_promptstringNegative prompt (через ExtraParams["negativePrompt"])
guidanceScaleintGuidance scale (через ExtraParams["guidanceScale"], только Imagen)
baseStepsintBase steps (через ExtraParams["baseSteps"], только Imagen)
maskModestringMask mode (через ExtraParams["maskMode"], только Imagen): "MASK_MODE_USER_PROVIDED", "MASK_MODE_BACKGROUND", "MASK_MODE_FOREGROUND", "MASK_MODE_SEMANTIC"
dilationfloatРасширение маски (через ExtraParams["dilation"], только Imagen): диапазон [0, 1]
maskClassesint[]Mask classes (через ExtraParams["maskClasses"], только Imagen): для MASK_MODE_SEMANTIC

Конвертация запроса

Стандартный формат Gemini (не-Imagen модели)

  • Model и Prompt: bifrostReq.Modelreq.Model, bifrostReq.Input.Promptreq.Contents[0].Parts[0].Text.
  • Изображения: каждое изображение в bifrostReq.Input.Images конвертируется в Part с:
    • определением MIME-типа (image/jpeg, image/webp, image/png) с fallback на image/png;
    • base64-кодирование: image.ImagePart.InlineData.Data (base64-строка);
    • MIME-тип: Part.InlineData.MIMEType.
  • Response Modality: GenerationConfig.ResponseModalities задаётся как [ModalityImage] для индикации генерации изображения.
  • Extra-параметры: извлекаются из ExtraParams:
    • safetySettings / safety_settingsSafetySettings;
    • cachedContent / cached_contentCachedContent;
    • labelsLabels (map[string]string).

Формат Imagen (модели Imagen)

  • Reference Images: каждое изображение в bifrostReq.Input.Images конвертируется в ReferenceImage с:
    • ReferenceType: "REFERENCE_TYPE_RAW";
    • ReferenceID: последовательные ID начиная с 1;
    • ReferenceImage.BytesBase64Encoded: base64-кодированные данные изображения.
  • Конфигурация маски: если задан Params.Mask или maskMode:
    • дефолтный maskMode: "MASK_MODE_USER_PROVIDED", когда есть данные маски;
    • maskMode можно переопределить через ExtraParams["maskMode"];
    • dilation извлекается из ExtraParams["dilation"] (валидируется диапазоном [0, 1]);
    • maskClasses извлекается из ExtraParams["maskClasses"] (для MASK_MODE_SEMANTIC);
    • mask-изображение (если задано) кодируется в base64 и добавляется как ReferenceType: "REFERENCE_TYPE_MASK".
  • Маппинг Edit Mode: Params.Type маппится в EditMode:
    • "inpainting""EDIT_MODE_INPAINT_INSERTION";
    • "outpainting""EDIT_MODE_OUTPAINT";
    • "inpaint_removal""EDIT_MODE_INPAINT_REMOVAL";
    • "bgswap""EDIT_MODE_BGSWAP";
    • если Type не задан, editMode можно задать напрямую через ExtraParams["editMode"].
  • Параметры:
    • nParameters.SampleCount;
    • output_formatParameters.OutputOptions.MimeType (конвертация: "png""image/png" и т.д.);
    • output_compressionParameters.OutputOptions.CompressionQuality;
    • seed (через ExtraParams["seed"]) → Parameters.Seed;
    • negativePrompt (через ExtraParams["negativePrompt"]) → Parameters.NegativePrompt;
    • guidanceScale (через ExtraParams["guidanceScale"]) → Parameters.GuidanceScale;
    • baseSteps (через ExtraParams["baseSteps"]) → Parameters.BaseSteps;
    • дополнительные параметры Imagen: addWatermark, includeRaiReason, includeSafetyAttributes, personGeneration, safetySetting, language, storageUri.

Конвертация ответа

  • Стандартный формат Gemini: та же конвертация, что и у image generation (см. раздел Image Generation).
  • Формат Imagen: та же конвертация, что и у Imagen image generation (см. раздел Image Generation).

Выбор эндпоинта

Провайдер автоматически выбирает эндпоинт по имени модели:

  • Imagen-модели (определяются через schemas.IsImagenModel()): эндпоинт /v1beta/models/{model}:predict.
  • Другие модели: эндпоинт /v1beta/models/{model}:generateContent с image response modality.

Streaming

Streaming для image edit в Gemini не поддерживается.

Image Variation

Image variation в Gemini не поддерживается.


10. List Models

Запрос: GET /v1beta/models?pageSize={limit}&pageToken={token} (без тела).

Маппинг полей:

  • name (с удалением префикса "models/") → id (с добавлением префикса "gemini/");
  • displayNamename;
  • descriptiondescription;
  • inputTokenLimitmax_input_tokens;
  • outputTokenLimitmax_output_tokens;
  • Длина контекста = inputTokenLimit + outputTokenLimit.

Пагинация: токен-based — nextPageToken.


11. Video Generation

Generate (POST /v1/videos)

Запросы используют JSON body (application/json).

Параметры запроса:

ПараметрТипОбязательныйПримечания
modelstringМодель Veo (например, veo-3.1-generate-preview)
promptstringТекстовое описание видео
input_referencestringВходное изображение для image-to-video
secondsstringДлительность → durationSeconds
sizestringРазрешение → aspect ratio (1280x72016:9, 720x12809:16)
negative_promptstringЧто исключить из видео
seedintSeed для воспроизводимости
audioboolВключить генерацию аудио → generateAudio
video_uristringGCS video URI для расширения видео

Extra Params (любое нераспознанное JSON-поле пробрасывается как extra_params):

КлючПримечания
aspectRatioПрямая установка aspect ratio (например, "16:9", "9:16"). Приоритетнее size
resolutionНативная строка разрешения Gemini
sampleCountЧисло samples для генерации
personGenerationПолитика генерации людей
numberOfVideosКоличество видео
storageURIGCS-бакет для хранения вывода
compressionQualityКачество сжатия
enhancePromptАвто-улучшение промпта
resizeModeОбработка несовпадений размера
reference_imagesОбъекты reference-изображений для стиля/ассетов
lastFrameОбъект последнего кадра для интерполяции

Ответ: BifrostVideoGenerationResponseid, status, videos[].

Если Gemini фильтрует контент по safety, status = failed, content_filter описывает причину.

Статусы задачи: in_progresscompleted / failed.

Retrieve / Download

ОперацияEndpointПримечания
Get statusGET /v1/videos/{id}Опрос long-running operation
DownloadGET /v1/videos/{id}/contentСкачивание с GCS URI или декодирование base64-видео

Video Delete, List и Remix не поддерживаются.


Поддерживаемые типы контента

Meridian поддерживает следующие модальности контента через Gemini:

Тип контентаПоддержкаПримечания
ТекстПолная поддержка
Изображения (URL/Base64)Конвертируются в {type: "image", source: {...}}
ВидеоС метаданными fps, start/end offset
Аудио⚠️Только через файловые ссылки
PDFЧерез файловые ссылки
Code ExecutionАвто-выполнение с возвратом результатов
Thinking/ReasoningThought-блоки помечены thought: true
Function CallsС опциональными thought signatures

Нюансы

Содержание

ОбзорПоддерживаемые операцииАутентификацияАутентификация по API-ключу1. Chat CompletionsПараметры запросаМаппинг параметровИгнорируемые параметрыExtra-параметрыReasoning / ThinkingМаппинг параметровПоддерживаемые уровни thinkingПримерКонвертация сообщенийКритичные нюансыКонвертация изображенийTool ConversionМаппинг tool_choiceКонвертация ответаМаппинг полейStreaming2. Responses APIПараметры запросаМаппинг параметровExtra-параметрыInput и InstructionsПоддержка toolsКонвертация ответаStreaming3. Speech (Text-to-Speech)Параметры запросаКонфигурация голосаКонвертация ответаПоддерживаемые голоса4. Transcriptions (Speech-to-Text)Параметры запросаОбработка audio inputExtra-параметрыКонвертация ответа5. Embeddings6. Batch API7. Files API8. Image GenerationМаппинг параметровExtra-параметрыКонвертация запросаСтандартный формат GeminiФормат ImagenКонвертация ответаСтандартный формат GeminiФормат ImagenКонвертация sizeВыбор эндпоинтаStreaming9. Image EditСтандартный формат Gemini (не-Imagen модели)Формат Imagen (модели Imagen)10. List Models11. Video GenerationGenerate (POST /v1/videos)Retrieve / DownloadПоддерживаемые типы контентаНюансы