Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

feat(core): discover Unsloth Studio models (local runtime — like Ollama, LM Studio, vLLM)

Abierto Apto para principiantes
#59,557 2 comentarios 0 reacciones 0 asignados Ver en GitHub

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:

  • vllm and ollama (local) have no models.dev entry at all — they exist purely as discovery plugins (#43022, #43021).
  • lmstudio has 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-cloud is 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_by is always "unsloth-studio", so filtering like vLLM's plugin does is trivial.
  • display_name + quant map naturally to the model display name (e.g. LFM2.5-24B-A2B (UD-IQ3_XXS)).
  • loaded distinguishes 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 populate limit.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 createLocalProviderPlugin already folds apiKey from config settings ({env:}/{file:} substitution included), which is exactly what unsloth start opencode already writes today. Default origin would be http://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 form http://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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de anomalyco/opencode

Todos los issues de anomalyco/opencode

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.