DEV Community

Cover image for I Stopped Guessing Which LLM to Use — It's One Command and My Own Numbers Now
张洲诚(Zack.ZHANG)
张洲诚(Zack.ZHANG)

Posted on

I Stopped Guessing Which LLM to Use — It's One Command and My Own Numbers Now

The freelance gig that stalled on question one

Last month I took on a freelance build: a customer-support bot for a DTC store. Three hard constraints — it must understand photos customers upload, sustain ~50k calls a day, and the budget was thin.

The code wasn't the hard part. Question one was: which model.

I opened the model catalog and stared. The Qwen family alone spans flash/plus/max tiers with dated snapshots; below that, a dozen third-party models. Every one has a spec page and a price sheet. None has a row that says "support bot, image input, cost-sensitive."

Benchmarks didn't help — they measure someone else's scenario (long-context recall, competition math). Free-tier roundups are static snapshots that rot in a quarter, and they tell you who has quota, never what your project should run on. Asking a general-purpose LLM was the worst option: it confidently recommended a model I'd never seen in the catalog. I checked. It doesn't exist. Training memory is the wrong tool for a question whose answer is live data.

Context worth naming: OmniRoute, a free MIT-licensed AI gateway, crossed 47k GitHub stars this month — one endpoint, 330+ providers. People clearly want model selection to stop being their job. But a gateway solves "route me to whatever's cheap and alive," not "which model fits this scenario."

The one command

What closed the ticket was a subcommand in Model Studio's CLI, bl. (My previous post was about an agent reading provider docs locally — that solved lookup; this one hands the decision to the terminal. They stand alone.)

npm install -g bailian-cli
bl auth login
Enter fullscreen mode Exit fullscreen mode

Node.js 18+. API key at login — get one in the console; the CLI install guide covers prerequisites.

Then I wrote the client's constraints as one sentence:

bl advisor recommend --message "E-commerce support bot that reads product screenshots uploaded by customers, ~50k calls/day, cost is the priority"
Enter fullscreen mode Exit fullscreen mode

Ten seconds: intent analysis plus three ranked picks. The top one (trimmed from real output):

{
  "model": "qwen3.7-flash-2026-07-15",
  "category": "Cost-optimized",
  "contextWindow": 1000000,
  "reason": "The model is specifically designed for cost-optimized, high-concurrency scenarios ... ideal for handling 50,000 daily API calls under a low budget.",
  "docUrl": "https://help.aliyun.com/document_detail/3016807.html"
}
Enter fullscreen mode Exit fullscreen mode

Every pick carries a docUrl to the official spec-and-pricing page. Treat the ranking as the starting point, then verify against the doc.

How it thinks: three stages

--dry-run runs the first two stages only — intent analysis and candidate recall — skipping the final LLM ranking (and its cost):

{
  "intent": {
    "scenarioHints": ["high-concurrency", "consumer-facing", "low-latency", "cost-sensitive", "image-input", "text-output"],
    "inputModality": ["Image"],
    "budget": "low",
    "qualityPreference": "cost-optimized"
  },
  "candidateCount": 50,
  "candidates": [{ "model": "qwen3.5-27b", "score": 0.509 }, "...50 total"]
}
Enter fullscreen mode Exit fullscreen mode

Plain language becomes structured constraints: "understands screenshots" → inputModality: Image; "~50k calls/day" → high-concurrency. Candidate recall reads live catalog data — that's the honest difference from asking a chatbot, which will invent a plausible-sounding model that doesn't exist.

Change the scenario, change the answer

My partner's contract-review tooling (legal-tech, precision-first, a few dozen contracts a day) got a completely different result from the same command: budget: medium, qualityPreference: flagship, and a top pick of farui-plus — a legal-domain model I'd never heard of, because leaderboard authors don't test vertical-domain legal models.

That's the dividing line: a leaderboard gives every scenario the same answer; scenario-based selection gives each scenario its own.

Your account's real numbers

One prerequisite that will bite you: the usage/quota commands authenticate against the console, not your API key. Key-only auth gets you exactly this (my real output):

{
  "error": {
    "code": 3,
    "message": "No console access token found.",
    "hint": "Run `bl auth login --console` or set DASHSCOPE_ACCESS_TOKEN."
  }
}
Enter fullscreen mode Exit fullscreen mode

Fix: bl auth login --console (coexists with your key). Then:

bl usage free --expiring 30          # quota expiring within 30 days
bl usage stats --days 30 --workspace-id <id>   # real usage distribution
bl quota check --model qwen3.7-flash-2026-07-15  # RPM/TPM headroom
Enter fullscreen mode Exit fullscreen mode

usage stats requires --workspace-idbl workspace list finds it, or pin it with bl config set workspace_id <id>.

Free-tier traps (checked against the docs)

  • Quota expires: 30–90 days depending on model, from activation. Doesn't pause, doesn't renew, doesn't roll over. Hence --expiring 30 in your calendar
  • Per-model quota: typically 1M tokens each, not mergeable. A dated snapshot and the undated latest are separate models with separate quotas
  • No failover on exhaustion: calls just start billing (on completed accounts). Pin --model in scripts at your own risk — or use the kill switch: bl usage freetier --model <m> --on returns AllocationQuota.FreeTierOnly instead of charging

What it is not

It recommends within Model Studio's catalog — not a cross-vendor comparison. It produces a ranked starting point, not a verdict. Gateways (OmniRoute et al.) solve routing and availability; this solves scenario fit. Stack them if you like — someone still has to fill the gateway's fallback list.

The takeaway

Catalogs and prices shift monthly, so model selection is a recurring decision, not a one-time one. Making it a repeatable command beats being told the right answer once. Entry point: the Model Studio console.


All commands verified against bailian-cli 1.4.2; outputs shown are real runs. Free-tier terms checked against official docs at publication time.

Top comments (0)