feat(core): discover Unsloth Studio models (local runtime — like Ollama, LM Studio, vLLM)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 61/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- backend
Línea de trabajo
Lee packages/core/src/plugin/provider/local.ts y packages/core/src/plugin/provider/vllm.ts para seguir el patrón de detección local; revisa packages/core/src/plugin/provider.ts para la registración. Implementa la detección del endpoint /v1/models autenticado de Unsloth y comprueba después que los modelos devueltos aparezcan y se mantengan sincronizados. El issue ofrece un servidor en vivo para la verificación, pero no indica un archivo de prueba.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 221k
- Forks
- 29.6k
- Merge medio
- 4 h 55 min
- PR fusionados (30 d)
- 500
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de anomalyco/opencode
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
anomalyco/opencode#59886 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
anomalyco/opencode#59826 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
anomalyco/opencode#59677 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
desktop: directory picker submits home directory instead of typed path when adding a projectAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
anomalyco/opencode#59589 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
anomalyco/opencode#59302 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de anomalyco/opencode
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
gnosis/gnosis_vpn#661 ·
Los mantenedores suelen responder en 1 día
-
content-freshness: staleOwnedContent doc comments still say 'complete receipt' (follow-up to #7912)Abiertotriage:bug-verified
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
Los mantenedores suelen responder en 1 día
-
fix: reject sourceStorage/packagedStorage bucket that differs from the stack default (fail loud)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Eyevinn/open-videocore#1300 ·
Los mantenedores suelen responder en 1 día
-
nextjs-tracking
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
cloudflare/vinext#4390 ·
Los mantenedores suelen responder en 1 día
-
kind/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
kubernetes-sigs/headlamp#8175 ·
Los mantenedores suelen responder en 2 días