unbiased ai

Vercel’s AI SDK, running on Pareto

The AI SDK already treats the model as a swappable part, so this is a short change. Create an OpenAI-compatible provider with Unbiased’s base URL, ask it for pareto, and your streamText calls and tools carry on as written, and Zod schemas need one extra line in the prompt. Pareto then selects frontier and open models for each request and blends their outputs into one answer.

Tested live with ai 7.0.14750M tokens a week

A demonstration of AI SDK on Pareto, recreated from a real run. Not a screenshot.

Set it up with one provider

The AI SDK reaches Unbiased through its official @ai-sdk/openai-compatible package. Create a provider with Unbiased’s base URL and your key, then pass unbiased('pareto') anywhere the SDK takes a model.

  1. Get an Unbiased API key

    Choose a plan, then create a key in the Unbiased platform. New accounts are reviewed and approved by a person before the key works. Put it in UNBIASED_API_KEY.

  2. Install the packages

    Run npm i ai @ai-sdk/openai-compatible zod. Zod is only needed for tool inputs and typed output.

  3. Create the provider

    Call createOpenAICompatible and set baseURL to https://api.unbiased.ai/v1. Keep /v1 on the URL; the provider adds /chat/completions after it.

  4. Ask for pareto

    Write the model ID by hand as pareto, with no provider prefix. Unbiased does not list models at /v1/models, so there is nothing for the SDK to fetch.

  5. For typed output, describe the schema in the prompt

    Use generateText with Output.object, leave supportsStructuredOutputs off, and put the JSON Schema in the system prompt. Zod still checks the result.

Tested on October 20, 2026AI SDK ai 7.0.147 with @ai-sdk/openai-compatible 3.0.74 on Pareto (pareto). A 51-line JavaScript program streamed an answer that called an order-lookup tool, then turned that answer into a support ticket that passed Zod validation. Run record.
provider.mjs
// npm i ai @ai-sdk/openai-compatible zod
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const unbiased = createOpenAICompatible({
  name: 'unbiased',
  baseURL: 'https://api.unbiased.ai/v1',
  apiKey: process.env.UNBIASED_API_KEY, // your-unbiased-api-key
});

export const model = unbiased('pareto');
Streaming with a tool
import { streamText, tool, stepCountIs } from 'ai';
import { z } from 'zod';
import { model } from './provider.mjs';

const result = streamText({
  model,
  tools: {
    lookupOrder: tool({
      description: 'Look up an order by id',
      inputSchema: z.object({ orderId: z.string() }),
      execute: async ({ orderId }) => ({
        orderId, status: 'delayed', carrier: 'UPS', eta: '2026-10-24',
      }),
    }),
  },
  stopWhen: stepCountIs(3),
  prompt: 'Where is order A-1042? Look it up and summarize in one sentence.',
});

for await (const text of result.textStream) process.stdout.write(text);
Zod-typed output
import { generateText, Output } from 'ai';
import { z } from 'zod';
import { model } from './provider.mjs';

const Ticket = z.object({
  orderId: z.string(),
  priority: z.enum(['low', 'normal', 'high']),
  category: z.enum(['shipping', 'billing', 'product', 'other']),
  summary: z.string(),
});

// Leave supportsStructuredOutputs off. Put the schema in the prompt.
const schema = JSON.stringify(z.toJSONSchema(Ticket));

const { output } = await generateText({
  model,
  output: Output.object({ schema: Ticket }),
  system: `Reply with JSON only, matching this JSON Schema: ${schema}`,
  prompt: 'Turn this into a support ticket: A-1042 is late, UPS says Oct 24.',
});
console.log(output);

Token counts on streams are off by default. Pass includeUsage: true to createOpenAICompatible if you want usage filled in.

AI SDK stays. The model changes.

One provider and one model ID change. Your application code reads the same as before, apart from one system prompt for typed output.

One model string, several models behind it

Pareto is Unbiased’s blended AI model. On each request it selects frontier and open models and blends their outputs into one answer, so AI SDK talks to one model string, pareto, and never has to pick.

“When the frontier improves, Pareto improves; when frontier prices fall, you should benefit.” From the pricing page.

How a Pareto answer gets made →
An illustration, not a wiring diagram. The blend includes frontier and open models, and its composition can change.

What an agent task costs on Pareto

Agents make many model calls per task, so the price of a finished task matters more than the price of a token. The model card publishes both for Pareto on two public agent benchmarks.

Terminal-Bench 4.0Tasks an agent completes in a terminal
$0.48/task
50.8% solved
DeepSWE v1.1Changes an agent makes in a real codebase
$0.24/task
69.9% solved

Pareto 26.10, preliminary October 1, 2026 runs that may change; denominators and the cost method still require confirmation. Cost is the reported mean USD per task at API rates, not an estimate for your workload. Model card and method.

Pay for AI SDK by the month

One API key works across AI SDK and any other tool you point at Pareto. Pick a monthly allowance, or pay per token on Team.

Personal

$10/month

  • 50M tokens a week
  • 20 requests per minute
  • For one person
Choose Personal

Personal Max

$100/month

  • 600M tokens a week
  • 60 requests per minute
  • For one person
Choose Personal Max

Team

Pay as you go

  • Prepaid credits at published rates
  • 300 requests per minute
  • No weekly token cap
Get started with Team

Subscriptions are for one person and are not unlimited. New API accounts are reviewed by a person before access turns on, and commercial or production use needs a separate written agreement. Rates and limits are on Pricing.

AI SDK on Pareto, questions answered

Which AI SDK provider should I use for Pareto?

Use @ai-sdk/openai-compatible, the AI SDK’s own package for OpenAI-compatible APIs, with baseURL set to https://api.unbiased.ai/v1. Requests go to /v1/chat/completions. We ran ai 7.0.147 with @ai-sdk/openai-compatible 3.0.74 against Pareto on October 20, 2026: a streamed answer called a tool, and a second call returned a ticket that passed Zod validation. Format compatibility is not a promise that every feature works, so tell us if one doesn’t.

Why do I get “Unsupported sampling parameter: response_format”?

You set supportsStructuredOutputs: true. The SDK then sends a json_schema response format, which Unbiased rejects with a 400. Leave the option off. The SDK falls back to JSON mode, which is accepted, but it does not pass your schema to the model, so describe it in the system prompt with z.toJSONSchema. In our test, skipping that step returned the wrong shape and threw NoObjectGeneratedError.

Should I use generateObject?

In AI SDK 7, generateObject and streamObject are marked deprecated in favour of generateText or streamText with an output setting. The examples here use Output.object, which is what we tested.

Why does the response say pareto-26.10?

That is the release of Pareto that answered. You still send plain pareto as the model ID, and it follows the current release.

Can I deploy this in a product?

A Personal plan covers your own projects. Commercial or production use needs a separate written agreement, so talk to us before you put Pareto behind a customer-facing app. For agent work in general, see Pareto for agent builders.

Is Pareto made by the AI SDK team?

No. Pareto is Unbiased’s model. AI SDK is made by Vercel, and Unbiased is not affiliated with or endorsed by them. You keep AI SDK and point it at the Unbiased API.

What happens when I hit the weekly allowance?

Requests over your plan’s limits return an HTTP 429 error. Personal includes 50M tokens a week and 20 requests per minute. Personal Max raises that to 600M a week and 60 requests per minute for $100/month. Team uses prepaid pay-as-you-go credits with no weekly token cap.

Do I choose between models?

No. You send every request to one model string, pareto. Pareto selects frontier and open models for each request and blends their outputs into one answer.

Is my code kept?

Personal and Personal Max are not our zero data retention tier: prompts and responses may be kept up to 30 days, as section 5(c) of the Terms explains. For work that must not be kept, ask about the Zero Data Retention API on the Private AI page.

Pareto works in other tools too

The same key and the same model string go into each of these. See them all.

Product names belong to their owners. Except where a guide says otherwise, Unbiased is not affiliated with or endorsed by the makers of the tools on this page.

Swap the model and keep the rest of your app

One provider, one key and the code you already wrote. Pareto starts at $10 a month for 50M tokens a week.