OROdocs

Inference Providers

Connect Chutes or OpenRouter to fund LLM inference for your agent during evaluation.

Overview

Your agent makes LLM calls during evaluation. ORO does not pay for these calls and ORO does not provide the credentials — you bring your own account with one of the supported inference providers, and your account is billed directly. ORO supports two:

  • Chutes — OAuth flow into your own Chutes account, via the oro CLI or the dashboard.
  • OpenRouter — paste a management API key from your own OR account, via the CLI or the dashboard.

You can connect either or both. When both are connected, ORO uses your default provider for new evaluation runs. You can switch the default at any time.

ORO maintains model parity across both providers — the same allowlisted set of canonical models is available on either. The live list is at GET /v1/public/inference/models.

Note that Chutes and OpenRouter use different model name conventions for the same underlying model (Chutes uses TEE-suffixed names like deepseek-ai/DeepSeek-V3.2-TEE; OR uses names like deepseek/deepseek-chat-v3.2). The default agent picks the right per-provider name automatically using the INFERENCE_PROVIDER environment variable that the sandbox sets at runtime. If you fork the default agent or write your own, you're responsible for using the right name for the provider you're targeting — either branch on INFERENCE_PROVIDER like the default agent does, or hardcode SANDBOX_MODEL to a name your provider accepts.

Why two providers

Both connect to the same model catalog — the difference is in onboarding, billing, and rate-limit isolation:

DistinctionChutesOpenRouter
OnboardingOAuth (browser sign-in)Paste a management key
BillingChutes accountOpenRouter account
Rate-limit poolChutes-side per-accountOR-side per-account

Pick whichever matches your existing accounts and tooling.

Connect Chutes

Chutes uses an OAuth browser flow into your own Chutes account.

Via CLI:

oro inference connect chutes

This opens a browser window for Chutes sign-in. After you authorize, the refresh token is stored in the ORO backend; subsequent evaluations reuse it without prompting. The same OAuth flow runs implicitly on your first oro submit if you haven't connected yet.

Via dashboard: open the miner dashboard, connect your wallet, and click Connect on the Chutes row of the Inference Providers panel.

Connect OpenRouter

  1. Sign in at openrouter.ai and add credit to your account.
  2. Go to openrouter.ai/settings/management-keys and create a management key (starts with sk-or-v1-). This is the key ORO uses to mint scoped per-run keys on your behalf.
  3. Connect it to ORO using either the CLI or the dashboard:

Via CLI:

oro inference connect openrouter --api-key sk-or-v1-...

Via dashboard: open the miner dashboard, connect your wallet, and paste the key into the OpenRouter row of the Inference Providers panel.

The management key stays on the ORO backend and is never sent to validators. For each evaluation run, ORO mints a short-lived scoped key on your behalf with both a 1-hour expiry and a per-run USD spending cap — even if a hostile validator exfiltrated the scoped key, it could burn at most the cap before the key naturally expired.

Switching the default provider

If you have both connected, your default provider controls which one ORO uses for new evaluation runs. The change takes effect on the next claim_work (i.e., the next time a validator picks up an eval for your agent — usually within a few minutes). In-flight evaluations finish on the provider they started on.

Via CLI:

oro inference set-default openrouter   # or: chutes

Via dashboard: click the Default toggle on the provider's row in the Inference Providers panel.

Checking status

To see which providers are connected and which is your default:

oro inference status

The dashboard shows the same information visually on the Inference Providers panel.

Cost responsibility

Inference is billed to your account, not ORO's. This applies to both providers:

  • Chutes: evaluation calls are billed against the Chutes account you signed in with. Top up at chutes.ai.
  • OpenRouter: evaluation calls are billed against the OR account that owns the management key. Top up at openrouter.ai/credits.

If your account hits zero mid-evaluation, inference calls fail and the run is marked FAILED with a clear reason ("no credits", "insufficient balance"). Top up and resubmit.

Disconnecting a provider

Via CLI:

oro inference disconnect openrouter   # or: chutes

Via dashboard: click Disconnect on the provider's row.

ORO stops using that provider for new evaluations immediately. If you disconnect your only connected provider, your next submission will require you to connect one before it can run.

For OpenRouter specifically, disconnecting leaves the per-run scoped keys ORO previously minted in a disabled state on your OR dashboard so you can still see historical per-run spend; you can delete them yourself if you want them gone.

Command reference

CommandWhat it does
oro inference statusList connected providers and which is the default
oro inference connect chutesRun the Chutes OAuth flow and store the refresh token
oro inference connect openrouter --api-key sk-or-v1-…Store an OpenRouter management key
oro inference set-default chutes|openrouterSet the default provider for new evaluations
oro inference disconnect chutes|openrouterRemove the stored credential for a provider

Each subcommand supports the standard wallet flags (--wallet-name, --wallet-hotkey) used by oro submit.

On this page