Skip to main content

Overview

Replicate is architecturally different from other providers in Bifrost. It uses a prediction-based API where every request creates a “prediction” that runs asynchronously. Each model on Replicate defines its own input schema, making it highly flexible but requiring model-specific parameter knowledge.

Key Architectural Differences

  1. Prediction-Based System: All operations create predictions via /v1/predictions or deployment endpoints
  2. Model-Specific Inputs: Each model has its own parameter schema (use extra_params for model-specific fields)
  3. Async/Sync Modes: Predictions can run synchronously (with Prefer: wait header) or asynchronously (with polling)
  4. Flexible Output: Output can be strings, arrays, URLs, or data URIs depending on the model

Supported Operations

List Models returns account-specific deployments only, not all public models on Replicate.

Setup & Configuration

Configure Replicate as a provider.
Replicate provider dashboard
  1. Navigate to Models > Model Providers. Look for Replicate under Configured Providers. If it is missing, click on Add New Provider and select Replicate.
  2. Click Add Key or edit an existing key.
  3. Set a name for your key.
  4. Paste your API key directly or use an environment variable (for example, env.REPLICATE_API_TOKEN).
  5. Leave Use Deployments Endpoint disabled for public model/version requests, or enable it for deployment routes.
  6. Set Allowed Models to All Models (default) or the specific model allowlist you want this key to serve.
  7. Save the provider configuration.
Set replicate_key_config.use_deployments_endpoint to true when requests should target /v1/deployments/{owner}/{deployment}/predictions. Use key aliases to map a Bifrost model name to the Replicate deployment path.

Model Identification

Replicate models can be specified in three ways:

1. Version ID

2. Model Name

Format: owner/model-name

3. Deployment

Configure deployed models in the Replicate key configuration. Deployments map custom model identifiers to actual deployment paths. Configuration Example:
Usage:

Prediction Modes

Sync Mode

Bifrost uses sync mode with the Prefer: wait header if it is present in the request headers. The request blocks until the prediction completes or times out (default 60 seconds). How it works:
  1. Creates prediction with Prefer: wait=60 header
  2. Replicate holds connection open for up to 60 seconds
  3. If prediction completes within timeout, returns result immediately
  4. If timeout expires, falls back to polling mode

Async Mode (Polling)

It is the default mode of Replicate predictions. Bifrost automatically polls the prediction URL every 2 seconds until completion. Status Flow: startingprocessingsucceeded/failed/canceled

1. Chat Completions

Message Conversion

System Messages: Extracted from messages array and concatenated into system_prompt field. User/Assistant Messages: Preserved as conversation context. Text content from content blocks is concatenated with newlines. Image Content: Non-base64 image URLs from message content blocks are extracted and passed as image_input array.

System Prompt Filtering

Important: Not all Replicate models support the system_prompt field. For unsupported models, the system prompt is automatically prepended to the conversation prompt. Models without system_prompt support:
  • meta/meta-llama-3-8b
  • meta/llama-2-70b
  • openai/gpt-oss-20b
  • openai/o1-mini
  • xai/grok-4
  • All deepseek-ai/deepseek* models (e.g., deepseek-r1, deepseek-v3)

Model-Specific Parameters

Use extra_params to pass model-specific parameters. These are flattened into the input object:
Model Schema Discovery: Each Replicate model has unique parameters. Check the model’s documentation on replicate.com or use the OpenAPI schema from the model version to discover available parameters.

Response Conversion

Field Mapping

  • Output:
    • String → choices[0].message.content
    • Array of strings → joined and mapped to choices[0].message.content
    • Object with text field → text value mapped to choices[0].message.content
  • Status: succeededfinish_reason: "stop", failedfinish_reason: "error"
  • Metrics: input_token_countprompt_tokens, output_token_countcompletion_tokens

Example Response

Streaming

Replicate streaming uses Server-Sent Events (SSE) with the following event types: Streaming Flow:
  1. Bifrost sets stream: true in prediction input
  2. Replicate returns urls.stream in initial response
  3. Bifrost connects to stream URL and processes SSE events
  4. output events → content deltas
  5. done event → final chunk with finish_reason
Done Event Reasons:
  • Empty or no reason = success (finish_reason: "stop")
  • "canceled" = prediction was canceled
  • "error" = prediction failed

2. Responses API

The Responses API is converted internally to Chat Completions or native Replicate format depending on the model:
Conversion Logic:
  1. For OpenAI models with gpt-5-structured: Uses native Responses format with input_item_list, tools, and json_schema support
  2. For all other models: Converted to Chat Completions format using message conversion logic
Same parameter mapping and system prompt handling as Chat Completions.

Response Format

Responses follow standard Responses API format with status mapping:

3. Text Completions (Legacy)

Conversion

  • Prompt array: Joined with newlines into single prompt field
  • top_k: Pass via extra_params (model-specific)

Example

Response

Same conversion as chat completions: output string/array → choices[0].text, with usage metrics from prediction metrics.

4. Image Generation

Parameter Mapping

Input Image Field Mapping

Important: Different Replicate models expect input images in different fields. Bifrost automatically maps input_images to the correct field based on the model. Field Mapping by Model:
For models that expect a single image field (image_prompt, input_image, image), only the first image from the input_images array is used.

Example

Response Conversion

Replicate output can be:
  • Single URL: String → data[0].url
  • Multiple URLs: Array → data[i].url for each image
  • Data URIs: Base64-encoded images in data URI format

Streaming

Image generation streaming provides progressive image updates as data URIs: SSE Events:
  • output: Data URI chunk (partial image)
  • done: Final completion with reason
  • error: Error details
Flow:
  1. Each output event contains a complete data URI (e.g., data:image/webp;base64,...)
  2. Progressive refinement shows generation progress
  3. done event signals completion with final image
  4. Each chunk includes Index, ChunkIndex, and B64JSON fields

5. Image Edit

Image edit runs as a prediction like image generation. You send one or more input images plus a prompt; the model returns edited image(s). The same input image field mapping as Image Generation applies (see Field Mapping by Model below). Endpoint: /v1/images/edits (Bifrost) → Replicate /v1/predictions or deployment predictions.

Parameter Mapping

Field Mapping by Model

Input images are mapped to the same fields as in Image Generation:
For single-image fields (image_prompt, input_image, image), only the first image from input.images is used.

Example

Response

Same as Image Generation: single URL → data[0].url, array of URLs → data[i].url, or data URIs. Response shape is BifrostImageGenerationResponse with data[].url or data[].b64_json.

Streaming

Image edit streaming is supported. Events use the same prediction log stream as image generation:
  • Partial chunks: type: "image_edit.partial_image" with b64_json (or data URI) until completion.
  • Completed: type: "image_edit.completed" with final image and usage.
Use Prefer: wait for sync behavior or rely on polling (async) like other Replicate predictions.

6. Files API

Replicate’s Files API supports uploading, listing, and managing files for use in predictions.

Upload

Request: Multipart form-data Example:
Response:

List Files

Query Parameters: Example:
Pagination: Uses cursor-based pagination with next URL in response. Bifrost serializes this into the after cursor.

Retrieve / Delete

Operations:
  • GET /v1/files/{file_id} - Retrieve file metadata
  • DELETE /v1/files/{file_id} - Delete file

File Content Download

Replicate requires signed download URLs with owner, expiry, and signature parameters.
Required Parameters in ExtraParams: Signature Format: HMAC-SHA256 of "{owner} {file_id} {expiry}" using Files API signing secret Example:

7. List Models

Endpoint: /v1/models
List Models returns account-specific deployments only, not all public models on Replicate.
Deployments are private or organization models with dedicated infrastructure. The response includes:
Usage:
  1. List your deployments via this endpoint
  2. Use deployment name as model identifier: replicate/my-org/my-deployment
  3. Predictions route to deployment-specific endpoint: /v1/deployments/my-org/my-deployment/predictions

Extra Parameters

Model-Specific Parameters

The most important feature for Replicate integration is extra_params. Parameters not in Bifrost’s standard schema are flattened directly into the prediction input object.

How It Works

Discovering Model Parameters

Each Replicate model has unique parameters. To find available parameters:
  1. Model Page: Visit the model on replicate.com
  2. OpenAPI Schema: Available at /v1/models/{owner}/{name}/versions/{version_id} (includes openapi_schema)
  3. Cog Definition: Check the model’s source code (if public)

Caveats

Severity: Medium Behavior: Not all models support system_prompt field. For unsupported models, system prompt is prepended to conversation prompt. Impact: Prompt structure differs between models Models Affected: meta/meta-llama-3-8b, meta/llama-2-70b, openai/gpt-oss-20b, openai/o1-mini, xai/grok-4, and all deepseek-ai/deepseek* models Code: chat.go:300-318
Severity: Medium Behavior: Different models expect input images in different fields (image_prompt, input_image, image, input_images) Impact: Bifrost automatically maps to correct field based on model Models Affected: Flux family models (see Input Image Field Mapping table) Code: images.go:192-209
Severity: Low Behavior: Only non-base64 image URLs from message content blocks are extracted to image_input Impact: Base64-encoded images in messages are ignored Code: chat.go:58-63
Severity: Medium Behavior: Each model has unique input schema; standard parameters may not work for all models Impact: Requires checking model documentation for available parameters Mitigation: Use extra_params for model-specific fields

Video Generation

Generate (POST /v1/videos)

Request Parameters Extra Params: Pass model-specific fields directly in the JSON body (unrecognized fields become extra_params and are flattened into the prediction input). webhook and webhook_events_filter are extracted automatically. Response: BifrostVideoGenerationResponse - id, status, model, videos[] Job Statuses: queued (starting) → in_progress (processing) → completed / failed

Retrieve / Download

Video Delete, List, and Remix are not supported by Replicate.