feat(core): discover Unsloth Studio models (local runtime — like Ollama, LM Studio, vLLM)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 61/100
- issue の種類
- 機能追加
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- typescript
- 領域
- backend
調査の方向性
packages/core/src/plugin/provider/local.ts と packages/core/src/plugin/provider/vllm.ts を読んでローカル検出のパターンを確認し、登録について packages/core/src/plugin/provider.ts を調べてください。Unsloth の認証付き /v1/models エンドポイントの検出を実装し、返されたモデルが表示され、同期された状態を保つことを確認してください。Issue では検証用のライブサーバーが提供されていますが、テストファイルは指定されていません。
索引モデルが issue の本文から書いたものです。
説明
Summary
Unsloth Studio is a local model runtime that exposes an OpenAI-compatible API on localhost (default port 8888, backed by llama-server). Its model inventory is per-machine and changes at runtime — it's whatever the user has downloaded/loaded in the app. That puts it in the same class as Ollama, LM Studio and vLLM, which opencode serves with in-repo runtime discovery plugins built on createLocalProviderPlugin (packages/core/src/plugin/provider/local.ts).
Request: add packages/core/src/plugin/provider/unsloth.ts following the same pattern, so discovered Unsloth models appear (and stay in sync) without hand-encoding every model in opencode.json.
Why the models.dev routing doesn't cover this
I understand new providers are normally added to models.dev rather than this repo. But a static catalog structurally cannot represent a runtime-local inventory:
vllmandollama(local) have no models.dev entry at all — they exist purely as discovery plugins (#43022, #43021).lmstudiohas a catalog entry, but with 3 placeholder models; the real functionality comes from its discovery plugin (#42607).- Catalog entries work for vendor-defined model sets (that's why
ollama-cloudis cataloged). Unsloth Studio's model set is machine-defined, like the three runtimes above.
The precedent is well established: three separate discovery feature PRs plus a dedicated refactor to share the machinery (#53438).
Relation to #46975
#46975 asked for a "native provider" (the /connect flow entry) and was closed pointing at models.dev — a fair answer to that ask. This request is different: runtime model discovery, which no catalog entry can provide. Nobody has asked for that part yet, hence this issue.
API surface (verified live against a running Unsloth Studio)
GET /v1/models requires Authorization: Bearer sk-unsloth-… and returns an OpenAI-style list with a few extra fields:
{
"object": "list",
"data": [
{
"id": "unsloth/LFM2.5-24B-A2B-GGUF",
"object": "model",
"created": 1793091398,
"owned_by": "unsloth-studio",
"loaded": false,
"quant": "UD-IQ3_XXS",
"display_name": "LFM2.5-24B-A2B-GGUF",
"status": { "value": "unloaded" }
}
]
}
owned_byis always"unsloth-studio", so filtering like vLLM's plugin does is trivial.display_name+quantmap naturally to the model display name (e.g.LFM2.5-24B-A2B (UD-IQ3_XXS)).loadeddistinguishes in-memory vs. downloaded models (could be surfaced or used for ordering).GET /v1/models/{id}returns the same shape — no context-length metadata, so discovery can't populatelimit.context(same gap tracked in #40908; tool/vision capabilities are also not reported, so conservative defaults like vLLM's plugin would apply, overridable via config).- Unlike Ollama/LM Studio, auth is mandatory — but
createLocalProviderPluginalready foldsapiKeyfrom config settings ({env:}/{file:}substitution included), which is exactly whatunsloth start opencodealready writes today. Default origin would behttp://127.0.0.1:8888(Unsloth's own opencode integration docs standardize on 8888; the API docs say "typically 8000 or 8888"). - The default
stripPathSuffix: /\/v1$/already handles the documented base URL formhttp://localhost:8888/v1.
Concrete pain today
Custom-provider users must hand-maintain every model in opencode.json. Right now my local Unsloth server lists 9 models while my config encodes 8 — I downloaded ggml-org/Kev-9B-GGUF after writing the config, and it silently doesn't exist for opencode until I edit JSON by hand. With discovery it would just appear, same as it does for Ollama.
Worth noting Unsloth actively maintains an opencode integration (unsloth start opencode, dedicated docs page) — they're an invested partner here, and I'd be glad to loop them in.
Happy to contribute
I have a live server to test against and would send a PR following the vllm.ts template (one ~40-line plugin file + registration in packages/core/src/plugin/provider.ts), reusing the existing factory so no new framework code paths are added. Related open work in this area: #54011. If maintainers would rather see this land via a models.dev entry plus custom-provider config, I'd still argue the discovery plugin is the piece that makes local Unsloth usable without manual JSON — but happy to follow whatever direction you prefer.
- 主要言語
- TypeScript
- スター
- 221k
- フォーク
- 29.6k
- 平均マージ
- 5時間 32分
- マージ済み PR(30日)
- 492
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
anomalyco/opencode のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
anomalyco/opencode#60174 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
anomalyco/opencode#60143 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
anomalyco/opencode#60121 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
anomalyco/opencode#59973 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
triaging
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
anomalyco/opencode#59942 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
anomalyco/opencode の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
lichess-org/lila#22324 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
[Feature Request] [Web] Expose kvCacheQuantizationBits in the onnxruntime-web WebGPU EP optionsオープンep:WebGPU platform:web quantization
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
microsoft/onnxruntime#33752 ·
メンテナーはふだん 2 日以内に返信
-
[Skill Bug]: entra-agent-id: inaccurate blueprint permission inheritance and parent token sub claimオープンbug entra-agent-id
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
microsoft/GitHub-Copilot-for-Azure#3467 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
fix(worker): keep normal prepare waiting states failure-free対応中かも @LichKing-2234 が今日担当しました。 オープンagent:codex priority:P1
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
AgoraIO-Extensions/agent-infra#3745 ·
メンテナーはふだん 1 日以内に返信
-
The five-line work window can drop its oldest line: the per-line byte share ignores the JSON framing対応中かも @Eapp1e が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
makecindy/cindy#7973 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信