Back to Models
Sakana AI
fugu-ultra-v2

Fugu Ultra v2

Fugu Ultra v2 is the higher-performance model in Sakana AI's Fugu family. Rather than a single monolithic model, Fugu is a learned multi-agent orchestration system: a language model trained to...

9/11/2026
1,000,000 tokens
Input: $5.50/M
Output: $33.00/M

Specifications

Modalities

Input
text
image
file
Output
text

Supported Parameters

include_reasoning
reasoning
reasoning_effort
structured_outputs
tool_choice
tools
web_search_options

Max Output Tokens

128,000

Reasoning Configuration

Default
Thinking on (effort: xhigh)
Selectable effort levels
max
xhigh
high
Turning thinking off
Not possible (always thinks)

How to control thinking, and what it costs

Data policy

Prompt retention
May be retained
Training
Not used for training

Whether a provider trains on prompts is a declared value from our terms with them. Retention is determined from the upstream listing for every host this model can reach. Neither is guessed.

Measured performance

Time to first response (p50)4.4s
Throughput (p50)22222 tokens/s

    Measured through FastMetal's own gateway over the last 30 days (656 first-response samples).

    Throughput is sampled once a day: the median of 25 observations over the last 30 days.

    Time to first response is measured to the first streamed chunk; throughput counts all output tokens, including reasoning tokens. These are observations, not a performance guarantee.

    Code Examples

    curl https://api.fastmetal.ai/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -d '{
        "model": "fugu-ultra-v2",
        "messages": [{"role": "user", "content": "Hello!"}]
      }'

    How Fugu Ultra v2 actually answers

    Real responses to our standard prompts, recorded on FastMetal.

    Count the number of 'r's in 'strawberry'

    Count the number of 'r's in 'strawberry'. Explain your reasoning step by step.

    **Answer: 3** **Step-by-step reasoning:** 1. **Write out the word letter by letter**, assigning each a position: | Position | Letter | Is it 'r'? | |---|---|---| | 1 | s | no | | 2 | t | no | | 3 | **r** | ✅ yes | | 4 | a | no | | 5 | w | no | | 6 | b | no | | 7 | e | no | | 8 | **r** | ✅ yes | | 9 | **r** | ✅ yes | | 10 | y | no | 2. **Tally the matches:** positions 3, 8, and 9 are 'r'. 3. **Sanity check by chunks:** "straw" contains one 'r' (str**a**w → the r in "str"), and "berry" contains two 'r's (be**rr**y). 1 + 2 = 3. 4. **Verify length:** the letters counted total 10, which matches the length of "strawberry" — so no letter was skipped or double-counted. **Conclusion:** There a…
    10.2s response435 output tokens

    Debug This Error

    I'm getting the following error in my Node.js application: TypeError: Cannot read properties of undefined (reading 'map') at UserList (/app/components/UserList.js:12:25) at renderWithHooks (/app/node_modules/rea…

    ## What the error means `TypeError: Cannot read properties of undefined (reading 'map')` means that when `UserList` rendered, `users` was `undefined`, and JavaScript can't read the `.map` property off `undefined`. The important detail: **the bug isn't really in `UserList`** — that's just where it surfaces. Destructuring `function UserList({ users })` does *not* throw when the prop is missing; it silently gives you `undefined`. The crash is deferred to the first property access, which is `.map` on line 12. So the real question is: why is `props.users` not an array? ## Why `users` is undefined **1. Async data hasn't arrived yet — by far the most common cause.** ```jsx const [users, setUs…
    70.8s response5286 output tokens

    Code Review

    Please review the following Python function and suggest improvements for readability, performance, and best practices: def get_data(url, retries=3): import requests import time for i in range(retries):…

    # Final Code Review: `get_data` The function is compact and its intent is clear, but as written it will **fail silently in production**. Two defects dominate everything else: 1. The bare `except:` swallows every error — including `KeyboardInterrupt` and genuine logic bugs. 2. A total failure and a legitimately empty dataset both return `[]`, so callers cannot tell "the service is down" from "there are no active records." Together these mean an outage looks exactly like a successful empty response. Everything else below is meaningful improvement; those two are the difference between code that fails loudly and code that fails invisibly. --- ## 1. Correctness and error handling ### 1.1 `e…
    281.1s response23317 output tokens

    Compare these answers side by side with other models →

    Frequently asked questions

    How much does the Fugu Ultra v2 API cost?
    On FastMetal, Fugu Ultra v2 is billed per token: $5.50 per 1M input tokens and $33.00 per 1M output tokens on a US-dollar account, before tax. Usage is drawn from a prepaid balance; there is no subscription or monthly fee.
    Can I call Fugu Ultra v2 with the OpenAI SDK?
    Yes. Point base_url at https://api.fastmetal.ai/v1 and pass "fugu-ultra-v2" as the model; existing OpenAI-style code works unchanged, including streaming, tool calls and structured output.
    What is the context window of Fugu Ultra v2?
    1,000,000 tokens, shared between the prompt and the response.
    What do I need to try Fugu Ultra v2?
    Create an account and add credit; the model is then available both in the browser chat and over the API. There is no contract or minimum spend.

    Try Fugu Ultra v2 right now

    Fugu Ultra v2 is available on FastMetal through one API key. Start in the browser, or call it from the OpenAI SDK.