unbiased ai

OpenAI Agents SDK, with Pareto as the model

The Agents SDK gives you agents, tools, handoffs and a Runner that loops through them until the job is done. The model is one argument. Hand it a client that points at Unbiased and the name pareto, and every agent in the run asks Pareto, which selects frontier and open models for each request and blends their outputs into one answer.

Tested live with openai-agents 0.24.050M tokens a week

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

Set it up with one model object

The SDK uses OpenAI’s Responses API unless you tell it otherwise. For other providers, its Models page shows how to wrap an AsyncOpenAI client in OpenAIChatCompletionsModel and pass that model to each agent. That is the setup below, and the one we ran.

  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.

  2. Install the SDK

    Run pip install openai-agents. It brings the openai client with it.

  3. Build a client and a model

    Create AsyncOpenAI with base_url="https://api.unbiased.ai/v1" (keep the /v1) and your key. Wrap it in OpenAIChatCompletionsModel(model="pareto", openai_client=client). Type pareto yourself: Unbiased does not list models at /v1/models.

  4. Turn off trace uploads

    Tracing sends runs to OpenAI and needs an OpenAI key. Call set_tracing_disabled(True), or give it a real OpenAI key with set_tracing_export_api_key, or you will see 401 errors from the trace exporter.

  5. Give the model to every agent

    Pass model=model to each Agent, including the ones you hand off to, then start the run with Runner.run.

Tested on October 20, 2026OpenAI Agents SDK openai-agents 0.24.0 on Pareto (pareto). A triage agent handed a broken-order message to a refund agent, which called an issue_refund tool with the right order id and amount and reported the confirmation. Run record.
refund.py
# pip install openai-agents
import asyncio
from openai import AsyncOpenAI
from agents import Agent, Runner, OpenAIChatCompletionsModel, function_tool, set_tracing_disabled

# traces upload to OpenAI and need an OpenAI key
set_tracing_disabled(True)

client = AsyncOpenAI(base_url="https://api.unbiased.ai/v1", api_key="your-unbiased-api-key")
model = OpenAIChatCompletionsModel(model="pareto", openai_client=client)

@function_tool
def issue_refund(order_id: str, amount_usd: float) -> str:
    """Issue a refund for an order."""
    return f"Refunded ${amount_usd:.2f} on {order_id}. Confirmation R-7781."

refund_agent = Agent(
    name="Refund agent",
    model=model,
    instructions="You process refunds. Call issue_refund, then report the result.",
    tools=[issue_refund],
)
triage = Agent(
    name="Triage agent",
    model=model,
    instructions="Hand refund requests to the Refund agent.",
    handoffs=[refund_agent],
)

message = "Hi, order A-1042 arrived broken. Please refund my $34.50."

async def main():
    result = await Runner.run(triage, message)
    print(result.last_agent.name)
    print(result.final_output)

asyncio.run(main())
Or set it once for every agent
from agents import set_default_openai_client, set_default_openai_api, set_tracing_disabled

set_default_openai_client(client, use_for_tracing=False)
set_default_openai_api("chat_completions")
set_tracing_disabled(True)
# then a plain model name is enough
agent = Agent(name="Assistant", model="pareto")

We ran the first block. The second follows the SDK’s documented global settings and was not part of our run.

Your agents stay. The model argument changes.

Agents, tools and handoffs are your code, and they run the same. What changes is the client underneath and one string.

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 OpenAI Agents 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

An agent run is several model calls: a single handoff and tool call already takes three. 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 OpenAI Agents SDK by the month

One API key works across OpenAI Agents 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.

OpenAI Agents SDK on Pareto, questions answered

Can the OpenAI Agents SDK use a model that isn’t OpenAI’s?

Yes. The SDK’s Models page shows how: an AsyncOpenAI client with your own base_url, wrapped in OpenAIChatCompletionsModel. We ran openai-agents 0.24.0 against Pareto on October 20, 2026: a triage agent handed a broken-order message to a refund agent, which called issue_refund with the right order and amount. Format compatibility is not a promise that every SDK feature works, so tell us if one doesn’t.

Why Chat Completions and not the Responses API?

The SDK defaults to OpenAI’s Responses API. Unbiased serves /v1/responses too, but the setup we tested uses OpenAIChatCompletionsModel, which sends requests to /v1/chat/completions. That is the path this page documents.

Why do I see 401 errors about traces?

The SDK uploads traces to OpenAI by default, and that upload needs an OpenAI API key. Your Unbiased key is not one. Call set_tracing_disabled(True), or keep tracing and give the exporter a real OpenAI key with set_tracing_export_api_key. Your agents run either way.

Is Pareto made by the OpenAI Agents SDK team?

No. Pareto is Unbiased’s model. OpenAI Agents SDK is made by OpenAI, and Unbiased is not affiliated with or endorsed by them. You keep OpenAI Agents 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.

Hand Pareto the refund queue

One client, one model string and the agents you already wrote. Pareto starts at $10 a month for 50M tokens a week. Building agents for a living? See Pareto for agent builders.