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

AWS Bedrock

Конвертация AWS Bedrock API в Meridian — семейства моделей, маппинг параметров, обработка сообщений, reasoning/thinking, преобразование инструментов и AWS-аутентификация.

Обзор

AWS Bedrock поддерживает несколько семейств моделей (Claude, Nova, Mistral, Llama, Cohere, Titan) со значительными структурными отличиями от формата OpenAI. Meridian выполняет обширные преобразования:

  • Определение семейства моделей — автоматическая маршрутизация по идентификатору модели для применения параметров, специфичных для семейства;
  • Переименование параметров — например, max_completion_tokensmaxTokens, stopstopSequences;
  • Преобразование reasoning — параметры reasoning маппятся в специфичные для модели структуры thinking/reasoning (Anthropic, Nova);
  • Реструктуризация tools — определения функций конвертируются в формат Bedrock ToolConfig;
  • Конвертация сообщений — извлечение system-сообщений, группировка tool-сообщений, адаптация формата изображений (только base64);
  • AWS-аутентификация — автоматическая подпись запросов SigV4 с поддержкой credential chain;
  • Structured outputresponse_format конвертируется в специальные определения tools;
  • Service tier и guardrails — поддержка специфичных для Bedrock конфигураций производительности и безопасности.

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

СемействоChatResponsesTextEmbeddingsImage GenImage EditImage Variation
Claude (Anthropic)
Nova (Amazon)
Mistral
Llama
Cohere
Titan
Stability AI

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

ОперацияNon-StreamingStreamingEndpoint
Chat Completionsconverse
Responses APIconverse
Text Completionsinvoke
Embeddingsinvoke
FilesS3 (через SDK)
Batchbatch
List ModelslistFoundationModels
Image Generationinvoke
Image Editinvoke
Image Variationinvoke
Count Tokenscount-tokens
Speech (TTS)
Transcriptions (STT)

Неподдерживаемые операции (❌): Speech (TTS) и Transcriptions (STT) не поддерживаются upstream-API AWS Bedrock. Возвращают UnsupportedOperationError.

Ограничения: изображения только в формате base64 / data URI (удалённые URL не поддерживаются). Стриминг для text completion не поддерживается.

Beta-заголовки

Для моделей Claude на Bedrock Meridian валидирует заголовки anthropic-beta и удаляет неподдерживаемые из запроса.

Поддерживаются: computer-use-*, structured-outputs-*, compact-*, context-management-*, interleaved-thinking-*, context-1m-*.

Не поддерживаются: advanced-tool-use-*, mcp-client-*, prompt-caching-scope-*, files-api-*, skills-*, fast-mode-*, redact-thinking-*.

Дефолты можно переопределить на уровне провайдера через вкладку Beta Headers в настройках провайдера или через beta_header_overrides в настройке провайдера. Полная матрица поддержки — на странице Anthropic.


1. Chat Completions

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

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

ПараметрПреобразованиеПримечания
max_completion_tokensinferenceConfig.maxTokensОбязательное поле в Bedrock
temperature, top_pПрямой проброс в inferenceConfig
stopinferenceConfig.stopSequencesМассив строк
response_format→ tool для structured output (см. Structured Output)Создаёт tool bf_so_*
toolsСхема реструктурируется (см. Tool Conversion)
tool_choiceТип маппится (см. Tool Conversion)
reasoningКонфиг thinking зависит от модели (см. Reasoning / Thinking)
usermetadata.userID (если задан)Метаданные Bedrock
service_tierserviceModelTier (если задан)Выбор тарифа производительности
top_kЧерез extra_params (зависит от модели)Bedrock-специфичный sampling

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

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

Extra-параметры

Передаются прямо в теле запроса для специфичных для Bedrock полей:

curl -X POST http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
    "messages": [{"role": "user", "content": "Hello"}],
    "guardrailConfig": {
      "guardrailIdentifier": "guardrail-id",
      "guardrailVersion": "1",
      "trace": "enabled"
    },
    "performanceConfig": {
      "latency": "optimized"
    }
  }'

Доступные extra-параметры:

  • guardrailConfig — конфигурация Bedrock guardrail с полями guardrailIdentifier, guardrailVersion, trace;
  • performanceConfig — оптимизация производительности с latency ("optimized" или "standard");
  • additionalModelRequestFieldPaths — проброс полей модели, отсутствующих в стандартной схеме;
  • promptVariables — переменные для prompt-шаблонов (при использовании prompt caching);
  • requestMetadata — произвольные метаданные для трекинга запроса.

Cache Control

Prompt caching поддерживается через директивы cache control:

curl -X POST http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Этот контекст будет закэширован",
            "cache_control": {"type": "ephemeral"}
          }
        ]
      }
    ],
    "system": [
      {
        "type": "text",
        "text": "Ты — полезный ассистент",
        "cache_control": {"type": "ephemeral"}
      }
    ]
  }'

Reasoning / Thinking

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

Поддержка reasoning/thinking зависит от семейства модели.

Модели Anthropic Claude

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

  • reasoning.effortthinkingConfig.type = "enabled" (всегда включено при наличии reasoning);
  • reasoning.max_tokensthinkingConfig.budgetTokens (бюджет токенов на thinking).

Критичные ограничения:

  • Минимальный бюджет: 1024 токена; запросы с меньшим значением завершаются с ошибкой;
  • Динамический бюджет: -1 автоматически конвертируется в 1024.
// Запрос
{"reasoning": {"effort": "high", "max_tokens": 2048}}

// Преобразование Bedrock
{"thinkingConfig": {"type": "enabled", "budgetTokens": 2048}}

Модели Amazon Nova

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

  • reasoning.effortreasoningConfig.thinkingLevel ("low"low, "high"high);
  • reasoning.max_tokens → максимум reasoning-токенов (влияет на inference-конфигурацию).
// Запрос
{"reasoning": {"effort": "high", "max_tokens": 10000}}

// Преобразование Bedrock
{"reasoningConfig": {"type": "enabled", "thinkingLevel": "high"}}

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

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

  • Извлечение system-сообщения: system-сообщения удаляются из массива messages и помещаются в отдельное поле system;
  • Группировка tool-сообщений: подряд идущие tool-сообщения сливаются в одно user-сообщение с tool-результатами в content;
  • Формат изображений: только base64 / data URI; удалённые URL не поддерживаются Bedrock Converse API;
  • Документы: путь конвертации Bedrock сейчас поддерживает форматы PDF, CSV, DOC, DOCX, XLS, XLSX, HTML, TXT, MD.

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

Формат запроса Chat Completions OpenAI-совместим для стандартных блоков (type: "text", type: "image_url", type: "file"). Meridian внутренне конвертирует их в Bedrock Converse-блоки. Bedrock-специфичные расширения (например, отдельный cachePoint) также принимаются при использовании провайдера Bedrock.

Тип блокаФорма запроса (OpenAI-совместимая)Обработка BedrockПоддержка
Text{"type":"text","text":"..."}Конвертируется в Bedrock text
Image{"type":"image_url","image_url":{"url":"data:image/png;base64,..."}}Конвертируется в Bedrock image.source.bytes✅ (только base64 / data URI)
File{"type":"file","file":{...}}Конвертируется в Bedrock document
Input audio{"type":"input_audio",...}Возвращает audio input not supported in Bedrock Converse API
Standalone cache point{"cachePoint":{"type":"default"}} (без поля type снаружи)Конвертируется в маркер Bedrock cachePoint✅ (расширение Bedrock)

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

  • Форма запроса (клиент → Meridian): type: "image_url" с image_url.url, содержащим data URI / base64 изображения;
  • Внутренняя форма Bedrock (Meridian → Bedrock): конвертируется в image: { format, source: { bytes } };
  • URL-изображения: ❌ не поддерживаются — запросы завершатся ошибкой;
  • Документы: конвертируются в document-блоки с MIME-типами.

Пример с image-блоком (image_url)

curl -X POST http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "Что на этом изображении?"},
          {
            "type": "image_url",
            "image_url": {
              "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
            }
          }
        ]
      }
    ]
  }'

Пример с file-блоком (file → Bedrock document)

curl -X POST http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "Суммируй документ."},
          {
            "type": "file",
            "file": {
              "file_data": "JVBERi0xLjQKJcfs...",
              "filename": "report.pdf",
              "file_type": "application/pdf"
            }
          }
        ]
      }
    ]
  }'

file_data — сырой base64-контент (без префикса data: URI, в отличие от image_url). Форматы, поддерживаемые путём конвертации документов Bedrock в Meridian: pdf, txt, md, html, csv, doc, docx, xls, xlsq.

Пример с отдельным cache point (расширение Bedrock)

{
  "role": "system",
  "content": [
    {"type": "text", "text": "Длинный контекст для кэширования"},
    {"cachePoint": {"type": "default"}}
  ]
}

Отдельный блок cachePoint — расширение Bedrock (не OpenAI-стандарт); используйте только с провайдером Bedrock.

Замечания о неподдерживаемых блоках

  • Блоки input_audio не поддерживаются Bedrock Converse и возвращают ошибку;
  • Для документов используйте file.file_data; file_url и file_id не являются документированным путём для chat-content в Bedrock.

Места применения cache control

Cache-директивы поддерживаются на:

  • блоках content системного сообщения (всё system-сообщение);
  • блоках content user-сообщения (конкретные части);
  • определениях tools в tool configuration.

Tool Conversion

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

  • function.namename (сохраняется);
  • function.parametersinputSchema (формат Schema);
  • function.strict → отбрасывается (Bedrock не поддерживает).

Маппинг tool_choice

OpenAIBedrock
"auto"auto (по умолчанию)
"none"Пропускается (явно не поддерживается)
"required"any
Конкретный tool{type: "tool", name: "X"}

Обработка tool calls

  • Meridian → Bedrock: аргументы tool call конвертируются из JSON-объекта в поле input;
  • Bedrock → Meridian: результаты toolUse с toolUseId конвертируются обратно в формат Meridian;
  • Tool results: подряд идущие tool-сообщения сливаются в одно user-сообщение.

Structured Output

Structured output использует специальный tool-based подход:

// Запрос со structured output
{
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "response",
      "schema": {
        "type": "object",
        "properties": {
          "name": {"type": "string"},
          "age": {"type": "number"}
        }
      }
    }
  }
}

// Преобразование Bedrock (внутреннее)
{
  "tools": [{
    "name": "bf_so_response",
    "description": "Structured output tool",
    "inputSchema": {
      "type": "object",
      "properties": {...}
    }
  }],
  "toolChoice": {"type": "tool", "name": "bf_so_response"}
}

При обработке ответа input tool use извлекается и возвращается как contentStr.

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

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

  • stopReasonfinish_reason: endTurn/stopSequencestop, maxTokenslength, toolUsetool_calls;
  • usage.inputTokens + usage.cacheReadInputTokens + usage.cacheWriteInputTokensprompt_tokens (все кеш-счётчики свёрнуты в общий итог);
  • Разбивка cache-токенов в prompt_tokens_details:
    • usage.cacheReadInputTokensprompt_tokens_details.cached_read_tokens;
    • usage.cacheWriteInputTokensprompt_tokens_details.cached_write_tokens;
  • usage.outputTokenscompletion_tokens;
  • Блоки reasoning/thinkingreasoning_details с index, type, text и signature;
  • input tool call (объект) → arguments (JSON-строка).

Ответ structured output

При обнаружении structured output:

  • Tool call с именем bf_so_* рассматривается как structured output;
  • Объект input извлекается и возвращается как contentStr;
  • Удаляется из массива toolCalls.

Стриминг

Стриминг Chat Completions

Последовательность событий из Bedrock Converse Stream API:

  1. Начальная role: contentBlockIndex и информация о role;
  2. Начала content-блоков: блоки toolUse с toolUseId, name;
  3. Дельты content-блоков:
    • Text delta: инкрементальный текст;
    • Tool use delta: накопленные аргументы tool call (JSON);
    • Reasoning delta: reasoning-текст и опционально signature;
  4. Завершение сообщения: stopReason и финальные счётчики токенов;
  5. Метрики usage: счётчики токенов, кэш, метрики производительности.

Конвертация stream-событий:

  • Каждое stream-событие Bedrock → одна или несколько чанков Meridian;
  • Аргументы tool накапливаются по дельтам и эмитятся на завершении блока;
  • Reasoning-контент эмитится с signature, если есть.

Стриминг Text Completion

Не поддерживается — AWS Bedrock не поддерживает стриминг для text completion API.

Стриминг Responses API

Стриминг responses использует lifecycle-события, совместимые с OpenAI:

  • response.created;
  • response.in_progress;
  • content_part.start;
  • content_part.delta;
  • content_part.done;
  • function_call_arguments.delta;
  • function_call_arguments.done;
  • output_item.done.

Особенности:

  • Аргументы tool накапливаются по дельтам;
  • Индексы content-блоков мапятся на output-индексы;
  • Синтетические события эмитятся для text/reasoning контента.

2. Responses API

Responses API использует тот же эндпоинт converse, но конвертирует между форматом OpenAI Responses и форматом Bedrock Messages.

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

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

ПараметрПреобразование
max_output_tokensПереименование в maxTokens (через inferenceConfig)
temperature, top_pПрямой проброс
instructionsСтановится system-сообщением
toolsСхема реструктурируется (см. Chat Completions)
tool_choiceТип маппится (см. Chat Completions)
reasoningМаппится в thinking/reasoning config (см. Reasoning / Thinking)
textКонвертируется в output_format (Bedrock-специфичный)
includeЧерез extra_params (Bedrock-специфичный)
stopЧерез extra_params, переименование в stopSequences
truncationАвтоматически "auto" для computer-tools

Extra-параметры

curl -X POST http://localhost:8080/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
    "input": "Hello, how are you?",
    "stop": ["###"]
  }'

Input и Instructions

  • Input: строка оборачивается как user-сообщение, массив конвертируется в сообщения;
  • Instructions: становится system-сообщением (та же логика извлечения, что и в Chat Completions);
  • Cache control: поддерживается на instructions (system) и input-сообщениях.

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

  • stopReasonstatus: endTurn/stopSequencecompleted, maxTokensincomplete;
  • usage.inputTokens агрегируется в input_tokens (та же семантика, что и в Chat: inputTokens + cacheReadInputTokens + cacheWriteInputTokens сворачиваются в input_tokens); usage.outputTokensoutput_tokens;
  • Cache-токены: cacheReadInputTokensinput_tokens_details.cached_read_tokens, cacheWriteInputTokensinput_tokens_details.cached_write_tokens;
  • Output items: textmessage, toolUsefunction_call, thinkingreasoning.

Стриминг

Последовательность событий: response.createdresponse.in_progresscontent_part.startcontent_part.deltacontent_part.doneoutput_item.done.


3. Text Completions (Legacy)

Legacy API через эндпоинт invoke. Стриминг не поддерживается. Поддерживаются только модели Claude (Anthropic) и Mistral.

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

  • Модели Claude: используется формат Anthropic /v1/complete с обёрткой prompt:

    • prompt автоматически оборачивается в \n\nHuman: {prompt}\n\nAssistant:;
    • max_tokensmax_tokens_to_sample;
    • temperature, top_p — прямой проброс;
    • top_k, stop — через extra_params.
  • Модели Mistral: стандартный формат:

    • max_tokensmax_tokens;
    • temperature, top_p — прямой проброс;
    • stopstop.

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

  • Claude: completionchoices[0].text;
  • Mistral: outputs[].textchoices[] (поддерживает несколько);
  • stopReasonfinish_reason.

4. Embeddings

Поддерживаемые embedding-модели: Titan, Cohere.

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

ПараметрПреобразованиеПримечания
inputПрямой пробросТекст или массив текстов
dimensions⚠️ Не поддерживаетсяУ Titan фиксированные размерности на модель
encoding_formatЧерез extra_params"base64" или "float"

Особенности Titan:

  • Нет настройки размерности;
  • Фиксированный размер вывода на версию модели.

Особенности Cohere:

  • Переиспользует конвертацию формата Cohere;
  • Маппинг параметров аналогичен стандартному Cohere.

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

  • Titan: embedding → один embedding-вектор;
  • Cohere: переиспользует формат Cohere с массивом embeddings;
  • usage.inputTokensusage.prompt_tokens.

5. Image Generation

Поддерживаемые модели генерации изображений: Titan Image Generator v1, Titan Image Generator v2, Nova Canvas v1.

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

Параметр (Meridian)Преобразование (Bedrock)
prompttextToImageParams.text
nimageGenerationConfig.numberOfImages
negativePrompttextToImageParams.negativeText
seedimageGenerationConfig.seed
qualityimageGenerationConfig.quality (см. Маппинг quality)
styletextToImageParams.style
sizeimageGenerationConfig.width и imageGenerationConfig.height

Маппинг quality

Параметр quality автоматически маппится в ожидаемый Bedrock формат:

Входное значениеЗначение BedrockПримечания
"low""standard"Автомаппинг
"medium""standard"Автомаппинг
"high""premium"Автомаппинг
"default""standard"Пробрасывается (case-insensitive)
"premium""premium"Пробрасывается (case-insensitive)

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

Параметр (Bedrock)Преобразование (Meridian)
imagesdata.b64_json

Пример запроса

curl -X POST http://localhost:8080/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bedrock/amazon.nova-canvas-v1:0",
    "prompt": "Футуристичный городской пейзаж с летающей машиной",
    "size": "1024x1024",
    "seed": 123,
    "negative_prompt": "велосипеды",
    "n": 2
  }'

Модели Stability AI

Поддерживаемые модели генерации: stability.stable-image-core-v1:1, stability.stable-image-ultra-v1:1.

Эти модели используют плоское JSON-тело (не вложенную Bedrock-структуру taskType). Meridian определяет их автоматически — любой ID, содержащий "stability.", конвертируется через ToStabilityAIImageGenerationRequest.

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

ПараметрТипОбязательныйПримечания
promptstringОписание изображения
negative_promptstringЧто исключить
seedintSeed для воспроизводимости
aspect_ratiostringНапример "16:9", "1:1", "21:9"
output_formatstring"png", "jpeg", "webp"
curl -X POST http://localhost:8080/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bedrock/us.stability.stable-image-ultra-v1:1",
    "prompt": "Величественный горный хребет в час заката",
    "negative_prompt": "размыто, низкое качество",
    "aspect_ratio": "16:9",
    "output_format": "png",
    "seed": 42
  }'

6. Image Edit

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

Поддерживаемые модели редактирования изображений: Titan Image Generator v1, Titan Image Generator v2, Nova Canvas v1.

Bedrock поддерживает три типа задач редактирования: INPAINTING, OUTPAINTING и BACKGROUND_REMOVAL. Поле type обязательно.

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

ПараметрТипОбязательныйПримечания
modelstringИдентификатор модели (Titan или Nova Canvas)
typestringТип редактирования: "inpainting", "outpainting", "background_removal"
promptstringОписание правки (обязательно для inpainting/outpainting)
image[]binaryИзображение(я) для редактирования (используется только первое)
maskbinaryМаска (для inpainting/outpainting)
nintКол-во изображений (1–10, только inpainting/outpainting)
sizestringРазмер "WxH" (только inpainting/outpainting)
qualitystringКачество (см. Маппинг quality)
cfgScalefloatCFG scale (через ExtraParams)
negative_textstringNegative prompt (через ExtraParams)
mask_promptstringMask prompt (через ExtraParams)
return_maskboolВернуть маску в ответе (через ExtraParams)
outpainting_modestringРежим outpainting: "DEFAULT" или "PRECISE"

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

  • Маппинг task type: Params.TypetaskType (inpainting/outpainting/background_removalINPAINTING/OUTPAINTING/BACKGROUND_REMOVAL); другие значения возвращают ошибку "unsupported type for Bedrock";
  • Конвертация изображения: первое изображение конвертируется в base64;
  • Task-specific параметры:
    • INPAINTING: inPaintingParams.text/image/maskImage/negativeText/maskPrompt/returnMask;
    • OUTPAINTING: outPaintingParams.* + outPaintingMode (валидируется к "DEFAULT" или "PRECISE");
    • BACKGROUND_REMOVAL: backgroundRemovalParams.image (других параметров нет);
  • Image Generation Config (только INPAINTING и OUTPAINTING): n, size, quality, cfgScale.

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

  • Использует ту же структуру, что и Image Generation;
  • Включает images[] (base64) и опционально maskImage (если return_mask: true);
  • При ошибке — поле error.

Эндпоинт: invoke (тот же, что и для image generation). Стриминг не поддерживается.

Модели Stability AI

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

Stability AI edit-модели определяются автоматически по ID (содержит "stability."). Тип задачи выводится из имени модели по умолчанию, но можно задать type явно — удобно при использовании deployment-алиасов.

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

Model IDЗадачаИзображенияPrompt
stability.stable-image-inpaint-v1:0inpaint1 + mask
stability.stable-outpaint-v1:0outpaint1 (опционально mask)
stability.stable-image-search-recolor-v1:0recolor1
stability.stable-image-search-replace-v1:0search-replace1
stability.stable-image-erase-object-v1:0erase-object1 + mask
stability.stable-image-remove-background-v1:0remove-bg1
stability.stable-image-control-sketch-v1:0control-sketch1
stability.stable-image-control-structure-v1:0control-structure1
stability.stable-image-style-guide-v1:0style-guide1
stability.stable-style-transfer-v1:0style-transfer2
stability.stable-creative-upscale-v1:0upscale-creative1
stability.stable-conservative-upscale-v1:0upscale-conservative1
stability.stable-fast-upscale-v1:0upscale-fast1

Общие параметры

ПараметрТипОбязательныйПримечания
modelstringStability AI model ID
image[]binaryВходные изображения; style-transfer требует ровно 2
promptstringзависитОбязателен для всех, кроме remove-bg, upscale-fast, erase-object
negative_promptstringНе применяется для: remove-bg, upscale-fast, erase-object
seedintНе применяется для: remove-bg, upscale-fast
maskbinaryзависитОбязательно для: inpaint, erase-object; игнорируется для остальных

Task-specific extra-параметры

Передаются как top-level поля формы:

ПараметрТипЗадачи
output_formatstringВсе — "png", "jpeg", "webp"
style_presetstringinpaint, outpaint, recolor, search-replace, control-sketch, control-structure, style-guide, upscale-creative
grow_maskintinpaint, recolor, search-replace, erase-object
left, right, up, downintoutpaint — расширение в каждую сторону, пиксели
creativityfloatupscale-creative, upscale-conservative, outpaint
select_promptstringrecolor — область для перекраски
search_promptstringsearch-replace — что найти и заменить
control_strengthfloatcontrol-sketch, control-structure — 0.0–1.0
aspect_ratiostringstyle-guide — соотношение сторон
fidelityfloatstyle-guide — 0.0–1.0
style_strengthfloatstyle-transfer — 0.0–1.0
composition_fidelityfloatstyle-transfer — 0.0–1.0
change_strengthfloatstyle-transfer — 0.0–1.0

Style-transfer: порядок изображений важен. Первое (image[0]) становится init_image (контент для трансформации), второе (image[1]) — style_image (артистический образец). Оба должны быть непустыми.

Значения type для явного выбора задачи

typeStability AI task
inpainting или inpaintinpaint
outpainting или outpaintoutpaint
background_removal, remove_background, remove_bgremove-bg
erase_objecterase-object
upscale_fastupscale-fast
upscale_creativeupscale-creative
upscale_conservativeupscale-conservative
recolorrecolor
search_replacesearch-replace
control_sketchcontrol-sketch
control_structurecontrol-structure
style_guidestyle-guide
style_transferstyle-transfer

Примеры запросов

curl -X POST http://localhost:8080/v1/images/edits \
  -F "model=bedrock/us.stability.stable-image-inpaint-v1:0" \
  -F "image[]=@photo.png;type=image/png" \
  -F "mask=@mask.png;type=image/png" \
  -F "prompt=Красивый сад на месте маски" \
  -F "negative_prompt=уродливо, размыто" \
  -F "output_format=png"
curl -X POST http://localhost:8080/v1/images/edits \
  -F "model=bedrock/us.stability.stable-style-transfer-v1:0" \
  -F "image[]=@content.png;type=image/png" \
  -F "image[]=@style.png;type=image/png" \
  -F "prompt=Применить артистический стиль к контенту" \
  -F "style_strength=0.8" \
  -F "composition_fidelity=0.5" \
  -F "change_strength=0.4" \
  -F "output_format=png"
curl -X POST http://localhost:8080/v1/images/edits \
  -F "model=bedrock/us.stability.stable-outpaint-v1:0" \
  -F "image[]=@photo.png;type=image/png" \
  -F "prompt=Естественно расширить сцену" \
  -F "left=200" \
  -F "right=200" \
  -F "output_format=png"
curl -X POST http://localhost:8080/v1/images/edits \
  -F "model=bedrock/us.stability.stable-image-remove-background-v1:0" \
  -F "image[]=@photo.png;type=image/png" \
  -F "output_format=png"

Prompt не требуется. Установите type=erase_object, чтобы пропустить валидацию на стороне шлюза.

curl -X POST http://localhost:8080/v1/images/edits \
  -F "model=bedrock/us.stability.stable-image-erase-object-v1:0" \
  -F "image[]=@photo.png;type=image/png" \
  -F "mask=@mask.png;type=image/png" \
  -F "type=erase_object" \
  -F "output_format=png"

Prompt не требуется. Установите type=upscale_fast, чтобы пропустить валидацию на стороне шлюза.

curl -X POST http://localhost:8080/v1/images/edits \
  -F "model=bedrock/us.stability.stable-fast-upscale-v1:0" \
  -F "image[]=@photo.png;type=image/png" \
  -F "type=upscale_fast" \
  -F "output_format=png"

Эндпоинт: invoke. Стриминг не поддерживается.


7. Image Variation

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

Поддерживаемые модели вариаций: Titan Image Generator v1, Titan Image Generator v2, Nova Canvas v1.

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

ПараметрТипОбязательныйПримечания
modelstringИдентификатор Titan/Nova Canvas
imagebinaryИсточник вариаций (множественные — через image[])
nintКол-во изображений (1–10)
sizestringРазмер "WxH"
qualitystringСм. Маппинг quality
cfgScalefloatЧерез ExtraParams
promptstringЧерез ExtraParams
negativeTextstringЧерез ExtraParams
similarityStrengthfloatЧерез ExtraParams, диапазон 0.2–1.0

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

  • Task type: taskType = "IMAGE_VARIATION";
  • Изображения: все конвертируются в base64 и складываются в imageVariationParams.images[];
  • Параметры variations: prompt, negativeText, similarityStrength (валидируется 0.2–1.0) — в imageVariationParams;
  • Image Generation Config: n, size, quality, cfgScale.

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

  • Та же структура, что и Image Generation;
  • images[]: массив base64-вариаций;
  • error: сообщение об ошибке (если есть).

Эндпоинт: invoke. Стриминг не поддерживается.


8. Batch API

Форматы запроса: массив requests (CustomID + Params) или input_file_id.

Пагинация: курсорная — afterId, beforeId, limit.

Эндпоинты:

  • POST /batch — создать batch;
  • GET /batch — список batch'ей;
  • GET /batch/{batch_id} — получить batch;
  • POST /batch/{batch_id}/cancel — отмена.

Ответ: JSONL-формат с {recordId, modelOutput: {...}} или {recordId, error: {...}}.

Маппинг статусов:

BedrockMeridian
Submitted, ValidatingValidating
InProgressInProgress
CompletedCompleted
Failed, PartiallyCompletedFailed
StoppingCancelling
StoppedCancelled
ExpiredExpired

Метки времени RFC3339Nano конвертируются в Unix timestamp; поддерживается multi-key retry.


9. Files API

S3-бэкенд для файловых операций. Файлы хранятся в S3-бакетах, интегрированных с Bedrock.

Загрузка: multipart/form-data с обязательным file и опциональным filename.

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

  • id (file ID);
  • filename;
  • size_bytes (размер S3-объекта);
  • created_at (Unix timestamp из S3 LastModified);
  • mime_type (выводится из контента или задаётся явно).

Эндпоинты:

  • POST /v1/files — загрузка;
  • GET /v1/files — список (курсорная пагинация);
  • GET /v1/files/{file_id} — метаданные;
  • DELETE /v1/files/{file_id} — удаление;
  • GET /v1/files/{file_id}/content — скачивание.

Назначение файла — всегда "batch", статус — всегда "processed".


10. List Models

Запрос: GET /v1/models (без тела).

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

  • id (имя модели с префиксом deployment, если применимо);
  • display_namename;
  • created_at (Unix timestamp).

Пагинация: токен-based — NextPageToken, FirstID, LastID.

Фильтрация:

  • По региону;
  • По маппингу deployment'ов из конфигурации;
  • По allowlist моделей (allowed_models).

Multi-key поддержка: результаты агрегируются по всем ключам, фильтруются allowedModels, если задано.


11. AWS-аутентификация и конфигурация

Meridian подписывает каждый запрос к Bedrock через AWS Signature Version 4 (SigV4). Credentials резолвятся в следующем порядке приоритета; STS AssumeRole может быть наложен поверх любого варианта.

Методы аутентификации

1. Явные credentials

Передаются access_key и secret_key в bedrock_key_config. Опционально session_token для готовых временных credentials.

{
  "bedrock_key_config": {
    "access_key": "your-aws-access-key",
    "secret_key": "your-aws-secret-key",
    "session_token": "optional-session-token",
    "region": "us-east-1"
  }
}

2. Default Credential Chain (IAM Role / Instance Profile)

access_key и secret_key остаются пустыми (или опускаются). Meridian вызывает LoadDefaultConfig AWS, который резолвит credentials в следующем порядке:

  • Переменные окружения (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN);
  • EKS IRSA (AWS_WEB_IDENTITY_TOKEN_FILE + AWS_ROLE_ARN);
  • ECS task role;
  • EC2 instance profile (IMDS);
  • Default profile из ~/.aws/credentials.
{
  "bedrock_key_config": {
    "region": "us-east-1"
  }
}

3. STS AssumeRole

role_arn задаёт IAM-роль для assume перед подписью запросов. AssumeRole требует валидной source identity — работает, когда credentials доступны либо из явных access_key/secret_key, либо из default credential chain. Если credentials недоступны ни оттуда, ни оттуда — AssumeRole упадёт.

{
  "bedrock_key_config": {
    "role_arn": "arn:aws:iam::123456789012:role/BedrockRole",
    "external_id": "optional-external-id",
    "session_name": "my-session",
    "region": "us-east-1"
  }
}
ПолеОбязательноеПо умолчаниюПримечания
role_arnДа (для STS)IAM role ARN для assume
external_idНетЕсли trust policy роли требует
session_nameНетmeridian-sessionИдентификатор сессии в CloudTrail

Setup и конфигурация

Как использовать ARN и Application Inference Profiles

При использовании AWS Bedrock inference profiles или application inference profiles конфигурацию надо разделять корректно, чтобы избежать UnknownOperationException:

ПолеНазначение
arnПрефикс ARN (всё до финального /resource-id). Нужен для формирования URL при использовании inference profile.
deploymentsМаппинг логических имён моделей в model ID или resource ID inference profile, но не в полный ARN.

Не размещайте полный ARN в deployments. Resource ID (например, abc12xyz) идёт в deployments; префикс ARN — в отдельное поле arn. Полный ARN в deployments приводит к малформатным URL и UnknownOperationException.

Application inference profiles — в deployments используется resource ID (короткий буквенно-цифровой суффикс):

{
  "bedrock_key_config": {
    "access_key": "your-aws-access-key",
    "secret_key": "your-aws-secret-key",
    "session_token": "optional-session-token",
    "region": "eu-west-1",
    "arn": "arn:aws:bedrock:eu-west-1:123456789012:application-inference-profile",
    "deployments": {
      "claude-opus-4-6": "ghi56rst",
      "claude-sonnet-4-5": "jkl78mno"
    }
  }
}

Cross-region inference profiles — в deployments используется идентификатор модели (например, us.anthropic.claude-3-5-sonnet-v1:0):

{
  "bedrock_key_config": {
    "access_key": "your-aws-access-key",
    "secret_key": "your-aws-secret-key",
    "session_token": "optional-session-token",
    "region": "us-east-1",
    "arn": "arn:aws:bedrock:us-east-1:123456789012:inference-profile",
    "deployments": {
      "claude-sonnet": "us.anthropic.claude-3-5-sonnet-v1:0"
    }
  }
}

Подробная инструкция по настройке аутентификации AWS Bedrock (credentials, IAM-роли, регионы, deployments) — на странице Настройка провайдеров.

Эндпоинты

  • Runtime API: bedrock-runtime.{region}.amazonaws.com/model/{path};
  • Control Plane: bedrock.{region}.amazonaws.com (list models);
  • Batch API: через bedrock-runtime.

12. Обработка ошибок

Маппинг HTTP-статусов:

СтатусТип ошибки MeridianПримечания
400invalid_request_errorНекорректные параметры
401authentication_errorНевалидные/просроченные credentials
403permission_denied_errorНет доступа к модели/ресурсу
404not_found_errorМодель или ресурс не найдены
429rate_limit_errorПревышен лимит
500api_errorСерверная ошибка
529overloaded_errorПерегрузка сервиса

Особые случаи:

  • Отмена контекста → RequestCancelled;
  • Тайм-аут запроса → ErrProviderRequestTimedOut;
  • Ошибки в стриме → отправляются через канал с маркером конца стрима;
  • Десериализация ответа → ErrProviderResponseUnmarshal.

Нюансы

Содержание

ОбзорПоддерживаемые семейства моделейПоддерживаемые операцииBeta-заголовки1. Chat CompletionsПараметры запросаМаппинг параметровИгнорируемые параметрыExtra-параметрыCache ControlReasoning / ThinkingМодели Anthropic ClaudeМодели Amazon NovaКонвертация сообщенийКритичные нюансыПоддерживаемые блоки контентаКонвертация изображенияПример с image-блоком (image_url)Пример с file-блоком (file → Bedrock document)Пример с отдельным cache point (расширение Bedrock)Замечания о неподдерживаемых блокахМеста применения cache controlTool ConversionМаппинг tool_choiceОбработка tool callsStructured OutputКонвертация ответаМаппинг полейОтвет structured outputСтримингСтриминг Chat CompletionsСтриминг Text CompletionСтриминг Responses API2. Responses APIПараметры запросаМаппинг параметровExtra-параметрыInput и InstructionsКонвертация ответаСтриминг3. Text Completions (Legacy)4. EmbeddingsПараметры запросаКонвертация ответа5. Image GenerationКонвертация запросаМаппинг qualityКонвертация ответаПример запросаМодели Stability AI6. Image EditМодели Stability AIПоддерживаемые моделиОбщие параметрыTask-specific extra-параметрыЗначения type для явного выбора задачиПримеры запросов7. Image Variation8. Batch API9. Files API10. List Models11. AWS-аутентификация и конфигурацияМетоды аутентификации1. Явные credentials2. Default Credential Chain (IAM Role / Instance Profile)3. STS AssumeRoleSetup и конфигурацияКак использовать ARN и Application Inference ProfilesЭндпоинты12. Обработка ошибокНюансы