npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

opencode-blablador

v0.1.3

Published

Blablador (Helmholtz / JSC) provider plugin for OpenCode: measured context windows, live catalog, and reasoning effort mapping

Readme

opencode-blablador

Blablador provider for OpenCode v2. It registers the Helmholtz / JSC Blablador gateway with the models, context ceilings, and reasoning levels the service actually supports.

  • All chat aliases, with a verified 21-model fallback catalog and live /v1/models discovery.
  • Measured context windows: 1,048,576 / 262,144 / 131,072 tokens instead of a blanket 98k cap.
  • 16,384-token output ceiling, matching the gateway limit that otherwise causes HTTP 400s.
  • Per-family reasoning variants that translate OpenCode's levels into each backend's reasoning_effort vocabulary.
  • Env or /connect authentication, with no plaintext token in the config file.
  • Uses OpenCode's native @opencode/ai/providers/openai-compatible driver for streaming and tools.

Requirements

  • OpenCode v2 with @opencode/plugin 2.1.4 or newer.
  • Node.js 22 or newer.

Install

opencode plugin add opencode-blablador

Or add it to opencode.jsonc:

{
  "plugins": ["opencode-blablador"]
}

Authenticate

Either store a token through OpenCode:

/connect -> Blablador -> API key

Or export it before starting OpenCode:

export BLABLADOR_API_TOKEN="your-jsc-blablador-token"

The provider is auto-activated: it appears once OpenCode can see an env or /connect connection. Discovery and requests use the stored /connect key when one exists and the env var otherwise; keys are trimmed, because a pasted token with surrounding whitespace is what the gateway 401s on. On first load the plugin queries /v1/models with that credential. If discovery fails or returns fewer than five chat models, the bundled catalog is used and a warning is logged. Switching the credential with /connect re-runs discovery without a restart.

Use

Select Blablador in the model picker. Rows read <deployment> (<alias>) so the aliases of one model sort together: alias-large and alias-qwen3.8-flash-next both serve nvidia/Qwen3.8-Flash-Next-NVFP4 and show up side by side. Models that reason expose variants such as low, medium, high, and xhigh. Picking no variant leaves the field unset, so the backend default applies.

The output cap is 16,384 tokens, including reasoning tokens.

Context ceilings

These numbers are the ceilings the gateway actually enforces.

| Context | Models | | --- | --- | | 1,048,576 | alias-huge, alias-kimi-k3-1m, alias-glm-5.3-flash, alias-deepseek-v41-flash-booster, alias-mimo-v2.6-flash, alias-mimo-v2.6-pro, alias-muse-spark, deepseek-v4.1-flash-at-hzdr | | 262,144 | alias-code, alias-large, alias-qwen3.8-27b, alias-qwen3.8-flash-next, alias-qwen38-27b, alias-qwen38-quick, alias-aleph-kolibri-1, alias-apertus, alias-apertus-70b, alias-ocr, Swift-Qwen3.8-27b | | 131,072 | alias-fast, alias-eve |

Reasoning levels

Blablador backends accept different reasoning_effort values. Sending a value a backend does not know returns HTTP 400, so the plugin maps OpenCode's levels per family:

| Family | Models | Backend vocabulary | | --- | --- | --- | | Qwen | alias-code, alias-large, alias-qwen*, Swift-Qwen3.8-27b | none, low, medium, xhigh | | gpt-oss | alias-fast | low, medium, high | | Kimi | alias-kimi-k3-1m | none, low, high, max | | DeepSeek | alias-deepseek-*, deepseek-v4.1-flash-at-hzdr | none, low, high, xhigh, max | | Muse | alias-muse-spark | low, medium, high, xhigh | | Mistral | alias-mistral-large | low, medium, high, xhigh, max | | Generic | unlisted aliases | none, minimal, low, medium, high, xhigh, max | | None | Apertus, Eve, OCR | the field is never sent |

The mapping preserves intent where definitions differ: high becomes xhigh on Qwen, while xhigh and max clamp to high on gpt-oss.

If JSC adds a family with its own vocabulary, add a pattern to FAMILY and an entry to EFFORT in blablador-core, the shared catalog this plugin depends on; until then it uses the generic map.

Live catalog

GET /v1/models carries no capability metadata and JSC says aliases come and go without notice. At startup the plugin:

  1. Keeps alias-* chat models plus the two verified unaliased chat models.
  2. Drops embeddings, rerankers, image/video/voice endpoints, and other non-chat models.
  3. Fills missing roots and context windows from the bundled catalog.
  4. Replaces the fallback list only if at least five chat models remain.

Discovery runs at startup, whenever the Blablador credential changes, and on a ten-minute timer; the provider is republished only when the alias list actually moved. The output cap shrinks below 16,384 for any model whose live window is smaller than the gateway ceiling, so the prompt always keeps room inside the window.

Limitations

  • The live catalog is refreshed every ten minutes, not on every model-picker open.
  • Vision support is a fixed allowlist because /v1/models does not report modalities.
  • Blablador returns no prompt-cache accounting, so the plugin does not configure caching.
  • Blablador is a shared research service; rate limits and alias availability are controlled by JSC.

Development

The catalog rules (fallback list, family/effort maps, live merge, token trimming) live in blablador-core; this package is the OpenCode adapter around them. It lives in a monorepo, so install from the repo root — the workspace links the core, no symlinks:

npm install       # at the monorepo root
npm run typecheck
npm test          # builds dist/ and runs the host tests (catalog rules are tested in the core)
npm run test:live # loads dist/ in an isolated real OpenCode and checks its catalog against /v1/models,
                  # runs one #high completion (the effort word end-to-end) and one red-PNG image via -f;
                  # needs BLABLADOR_API_TOKEN and the opencode binary, skips without them

To point a local OpenCode at the built plugin, "plugins": ["./dist"] in this repo's opencode.jsonc does it — a path plugin entry must be a directory (a .ts file path is ignored with a warning), and relative paths resolve against the config file's directory.

License

MIT