If you’ve ever stared at a long list of AI models and thought which one do I pick for this?, this guide is for you.

Trash Panda can choose a model for you while you chat—via a small Docker Desktop app called the router. You point your chat client at it once. You do not need to stop and run PowerShell every time.

The one-sentence idea (for most people)

Run the Trash Panda router container → point your chat app at http://localhost:8787/v1 → use model trashpanda/auto → just chat.

Behind the scenes the router:

  1. Classifies your message into a job (plan / build / research / chat / create)
  2. Looks up how much you’re willing to pay for that job (cloud $/M — coding can be higher than chat)
  3. Contests your installed local models vs affordable cloud models as equals (cloud wins only if better)
  4. Forwards the chat to Ollama, OpenRouter, or Hugging Face Inference

You stay in the chat window. Optional overrides: /TPCoding, /TPPlan, /TPChat, /TPResearch, /TPCreate (clear with /TPAuto).

Easiest path: Docker router (recommended)

What you need

  1. Docker Desktop
  2. Ollama on your PC (for local models) — optional if you only use cloud keys
  3. Optional keys in a .env file: OPENROUTER_API_KEY and/or HF_TOKEN

Start the router

From the Trash Panda router folder (on this project: trashpandatools/router/):

docker compose up -d --build
# Then open http://localhost:8787/admin — set VRAM, budget, keys (no .env required)

Full walkthrough: open trashpandatools/router/README.md (same folder as docker-compose.yml).

Point your chat app

SettingValue
Base URLhttp://localhost:8787/v1
API keyanything (e.g. sk-local)
Modeltrashpanda/auto

Also:

  • trashpanda/local — force Ollama
  • trashpanda/cloud — force OpenRouter / Hugging Face

That’s it. Chat normally. Check X-Trashpanda-Job / X-Trashpanda-Route if you want to see which job and backend won.

How the pieces fit

Your chat app
    → Trash Panda router (Docker, localhost:8787)
         → recommend API (trashpandatools.com)
         → then Ollama and/or OpenRouter and/or Hugging Face Inference

Hugging Face here means live Inference (chat), not “only download files.” Ollama may still pull weights that came from Hugging Face.

Prefer buttons instead?

Totally fine — no Docker required:

Those pages use the same ranking brain. They recommend; you still copy the pick into Cursor or Ollama yourself.

What this is not

MythReality
“Trash Panda hosts every model in the cloud for free.”No. Your Ollama / OpenRouter / HF account runs the model.
“I must use PowerShell every time.”No. PowerShell is only for debugging the recommend API.
“The router replaces Cursor.”No. Cursor (or Open WebUI, etc.) stays your chat UI — it just talks to the router.

Advanced: call the recommend API directly (debug)

Use this when you’re testing picks without chatting—or writing an agent that only needs advice.

Don’t use curl with hand-escaped quotes on PowerShell — Windows often mangles the JSON. Use:

$body = @{
  job      = "build"
  budget   = 40
  prefer   = @("cloud", "local")
  platform = "cursor"
  hardware = @{ host = "x86"; vramGb = 24 }
  limit    = 3
} | ConvertTo-Json -Depth 5

$r = Invoke-RestMethod `
  -Method POST `
  -Uri "https://trashpandatools.com/api/v1/recommend" `
  -ContentType "application/json" `
  -Body $body

"Cloud pick : $($r.primary.name)  [$($r.primary.source)]"
"Why        : $($r.primary.why)"
"Local pick : $($r.bySource.local.primary.name)"
"Pull       : $($r.bySource.local.primary.pullCommand)"

Useful fields: primary, name, source, pullCommand, bySource.local / bySource.cloud.

Request fields (same ones the router uses)

FieldMeaning
jobplan | build | research | chat | create
budget0–100 cloud cost ceiling
prefere.g. ["local","cloud"] — order matters
platforme.g. cursor, openrouter
hardware.hostx86 | spark | mac
hardware.vramGbMax local VRAM (0 = any)

Live endpoints:

  • POST https://trashpandatools.com/api/v1/recommend
  • GET https://trashpandatools.com/api/health
  • GET https://trashpandatools.com/api/v1/models

Common snags

“I got invalid_json in PowerShell.”
Use Invoke-RestMethod as above — or skip PowerShell and use the Docker router.

“Router says no cloud backend.”
Set OPENROUTER_API_KEY and/or HF_TOKEN in .env, or set PREFER=local and run Ollama.

“Ollama model not found.”
With OLLAMA_AUTO_PULL=true the router tries to pull. Or run the pullCommand from a recommend response yourself.

“Cursor didn’t change by itself.”
Point Cursor (or your client) at the router base URL with model trashpanda/auto. Changing only the Cursor dropdown without the router does not call Trash Panda.

Next step

  1. docker compose up -d --build in the router folder
  2. Point your chat app at http://localhost:8787/v1 · model trashpanda/auto
  3. Ask it to help with something real
  4. Peek at X-Trashpanda-Route if you’re curious what it chose

That’s the 101: chat through the router, let Trash Panda pick, keep working.