Skip to content
Fireworks logo

Ember-1

Text Generation • Fireworks

View as MarkdownAgent setup

Model ID

Use with the Workers AI binding, the AI Gateway REST API, or the Unified API.

Calling the provider directly? Use the provider's model name instead, including with provider-native endpoints or the provider's own SDK. For example, Anthropic's name for anthropic/claude-opus-4.8 is claude-opus-4-8.

  • Third-party
  • Zero data retention

Fireworks' Ember-1 is a specialized long-context multimodal reasoning model built on Kimi K3. It produces shorter reasoning traces using approximately 40% fewer tokens while maintaining comparable quality across Fireworks' evaluations.

Model Info
Context Window ↗1,040,000 tokens
Terms and Licenselink ↗
More informationlink ↗
Zero data retentionYes
Request formatsChat Completions, Responses
Pricing
  • Input (per 1M tokens)$3.00
  • Cached input (per 1M tokens)$0.30
  • Output (per 1M tokens)$15.00

Usage

const response = await env.AI.run(
  'fireworks/ember-1',
  {
    messages: [
      {
        content:
          'A library has 240 books. One quarter are checked out, and one third of the remaining books are reserved. How many books are available for browsing? Show the calculation briefly.',
        role: 'user',
      },
    ],
    max_tokens: 256,
  },
)
console.log(response)
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
  "model": "fireworks/ember-1",
  "messages": [
    {
      "content": "A library has 240 books. One quarter are checked out, and one third of the remaining books are reserved. How many books are available for browsing? Show the calculation briefly.",
      "role": "user"
    }
  ],
  "max_tokens": 256
}'
**Solution:**

- Checked out: 240 × ¼ = 60 books
- Remaining: 240 − 60 = 180 books
- Reserved: 180 × ⅓ = 60 books
- Available: 180 − 60 = **120 books**
{
  "id": "chatcmpl-6f6f6ab7d28e4ec78bac38d4c6f595b8",
  "object": "chat.completion",
  "created": 1790686126,
  "model": "accounts/fireworks/models/ember-1",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "**Solution:**\n\n- Checked out: 240 × ¼ = 60 books\n- Remaining: 240 − 60 = 180 books\n- Reserved: 180 × ⅓ = 60 books\n- Available: 180 − 60 = **120 books**",
        "reasoning_content": "Total books: 240\nChecked out: 1/4 × 240 = 60\nRemaining: 240 - 60 = 180\nReserved: 1/3 × 180 = 60\nAvailable: 180 - 60 = 120",
        "tools": null
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 124,
    "total_tokens": 249,
    "completion_tokens": 125,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 54
    },
    "output_tokens_details": {
      "reasoning_tokens": 54
    }
  }
}

Examples

Function Calling — Use a function tool to produce structured arguments
const response = await env.AI.run(
  'fireworks/ember-1',
  {
    messages: [
      { content: 'Schedule a 30-minute meeting with Alex tomorrow at 10 AM.', role: 'user' },
    ],
    tool_choice: 'required',
    tools: [
      {
        function: {
          description: 'Schedule a calendar meeting',
          name: 'schedule_meeting',
          parameters: {
            additionalProperties: false,
            properties: {
              duration_minutes: { type: 'integer' },
              participant: { type: 'string' },
              start_time: { type: 'string' },
            },
            required: ['participant', 'start_time', 'duration_minutes'],
            type: 'object',
          },
          strict: true,
        },
        type: 'function',
      },
    ],
  },
)
console.log(response)
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
  "model": "fireworks/ember-1",
  "messages": [
    {
      "content": "Schedule a 30-minute meeting with Alex tomorrow at 10 AM.",
      "role": "user"
    }
  ],
  "tool_choice": "required",
  "tools": [
    {
      "function": {
        "description": "Schedule a calendar meeting",
        "name": "schedule_meeting",
        "parameters": {
          "additionalProperties": false,
          "properties": {
            "duration_minutes": {
              "type": "integer"
            },
            "participant": {
              "type": "string"
            },
            "start_time": {
              "type": "string"
            }
          },
          "required": [
            "participant",
            "start_time",
            "duration_minutes"
          ],
          "type": "object"
        },
        "strict": true
      },
      "type": "function"
    }
  ]
}'
I'll schedule that meeting for you.
{
  "id": "chatcmpl-3ad7285ed64246499743d8485debc15f",
  "object": "chat.completion",
  "created": 1790686129,
  "model": "accounts/fireworks/models/ember-1",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "I'll schedule that meeting for you.",
        "reasoning_content": "The user wants to schedule a 30-minute meeting with Alex tomorrow at 10 AM. However, I don't know today's date. The schedule_meeting function requires a start_time in a specific format, but I don't know the current date.\n\nI need to figure out what \"tomorrow\" means. Since I don't have access to the current date, I should probably make a reasonable assumption or ask. But the tool_choice=required means I must call tools.\n\nWait, let me think about this. The instruction says I MUST call tools in the next message. The schedule_meeting tool needs start_time. I don't know the exact date. \n\nI could provide a start_time like \"tomorrow at 10 AM\" but the parameter likely expects a datetime string. Without knowing today's date, I cannot accurately compute tomorrow's date.\n\nHowever, given the constraint that I must call tools, I'll need to make my best guess. But guessing a date could be wrong. Let me consider: the system prompt doesn't give me a current date. \n\nGiven the requirement to call tools, I should attempt the call. But what start_time? I genuinely don't know today's date. \n\nHmm, but maybe the environment expects me to just pass a relative description or a plausible ISO date. Since I have no date context, the safest approach that still calls the tool would be to use a placeholder? That seems bad.\n\nActually, in these kinds of tasks, often the expectation is to call the tool with the given parameters. The start_time could be expressed as \"tomorrow 10:00 AM\". But the schema says string, no format specified. So I can pass a natural language string like \"tomorrow at 10:00 AM\". That satisfies the string type and conveys the intent. The backend may parse it.\n\nLet me call schedule_meeting with participant \"Alex\", start_time \"tomorrow at 10:00 AM\", duration_minutes 30.\n\nActually, to be more useful, maybe I should use a concrete date. But I don't know it. I'll pass the relative expression since format isn't specified. That's the most faithful to the user's request without inventing a wrong date.\n\nLet me make the call.",
        "tool_calls": [
          {
            "index": 0,
            "id": "schedule_meeting_0",
            "type": "function",
            "function": {
              "name": "schedule_meeting",
              "arguments": "{\"participant\": \"Alex\", \"start_time\": \"tomorrow at 10:00 AM\", \"duration_minutes\": 30}"
            },
            "name": null
          }
        ],
        "tools": null
      },
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 241,
    "total_tokens": 781,
    "completion_tokens": 540,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 443
    },
    "output_tokens_details": {
      "reasoning_tokens": 443
    }
  }
}
Visual Understanding — Analyze a visual scene
const response = await env.AI.run(
  'fireworks/ember-1',
  {
    messages: [
      {
        content: [
          {
            image_url: { url: 'https://v3.fal.media/files/koala/NLVPfOI4XL1cWT2PmmqT3_Hope.png' },
            type: 'image_url',
          },
          {
            text: 'Describe the main subject and setting in this image in two sentences.',
            type: 'text',
          },
        ],
        role: 'user',
      },
    ],
    max_tokens: 256,
  },
)
console.log(response)
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
  "model": "fireworks/ember-1",
  "messages": [
    {
      "content": [
        {
          "image_url": {
            "url": "https://v3.fal.media/files/koala/NLVPfOI4XL1cWT2PmmqT3_Hope.png"
          },
          "type": "image_url"
        },
        {
          "text": "Describe the main subject and setting in this image in two sentences.",
          "type": "text"
        }
      ],
      "role": "user"
    }
  ],
  "max_tokens": 256
}'
A woman with dark hair pulled back, wearing a chunky navy sweater, gold chain, and several rings, holds a small microphone with a fuzzy windscreen while smiling at the camera. She is in a warmly lit indoor space with cream walls, a framed grid of black-and-white photos, a glowing lamp, and a white stair railing in the background.
{
  "id": "chatcmpl-0e5b73a799f84182b41ccd83872ebc33",
  "object": "chat.completion",
  "created": 1790686138,
  "model": "accounts/fireworks/models/ember-1",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "A woman with dark hair pulled back, wearing a chunky navy sweater, gold chain, and several rings, holds a small microphone with a fuzzy windscreen while smiling at the camera. She is in a warmly lit indoor space with cream walls, a framed grid of black-and-white photos, a glowing lamp, and a white stair railing in the background.",
        "reasoning_content": "The user wants a two-sentence description of the main subject and setting. I can describe the image without identifying the person. Main subject: a woman with dark hair pulled back, wearing a navy blue chunky knit sweater, white undershirt, gold chain necklace, multiple rings, pale yellow nail polish, holding a small microphone with a furry windscreen. Setting: indoors, cozy room with cream walls, framed black-and-white photo grid, warm lamp, stair railing, artwork. Need exactly two sentences. Ensure no sensitive identification. Final concise.",
        "tools": null
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 10875,
    "total_tokens": 11067,
    "completion_tokens": 192,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 109
    },
    "output_tokens_details": {
      "reasoning_tokens": 109
    }
  }
}

Parameters

Schema variant
temperature
numberminimum: 0maximum: 2
max_tokens
numberexclusiveMinimum: 0
max_completion_tokens
numberexclusiveMinimum: 0
top_p
numberminimum: 0maximum: 1
frequency_penalty
numberminimum: -2maximum: 2
presence_penalty
numberminimum: -2maximum: 2
stream
boolean
tool_choice
response_format
reasoning_effort
stringOptional reasoning control; availability and accepted values are model-dependent.
id
string
object
string
created
number
model
string

API Schemas (Raw)

Input
Output

Was this helpful?