Si utilizas OpenCode junto con llama.cpp mediante la API compatible con OpenAI, es posible que te encuentres con un problema curioso: aunque tu modelo soporte visión y puedas enviar imágenes desde otras aplicaciones (Open WebUI, Hermes, etc.), OpenCode lo detecta únicamente como un modelo de texto.
En este artículo veremos por qué ocurre y cómo solucionarlo.
El problema
Supongamos que arrancamos nuestro servidor de llama-server con soporte multimodal:
llama-server.exe ^
--model "C:\AI\models\Qwen3.6-35B-A3B.gguf" ^
--mmproj "C:\AI\models\mmproj-Qwen3.6-35B-A3B-F16.gguf" ^
--ctx-size 131072 ^
--host 0.0.0.0 ^
--port 13306 ^
--alias SinCracK-AI
El modelo funciona perfectamente con imágenes desde otros clientes.
Sin embargo, OpenCode muestra algo parecido a esto:
Entradas: texto
Contexto: 0
Razonamiento: Sin razonamiento
Y además no permite adjuntar imágenes.
Compror el modelo soporta visión
Antes de modificar OpenCode conviene asegurarse de que el servidor anuncia correctamente las capacidades del modelo.
Podemos consultar:
curl http://IP_DEL_SERVIDOR:13306/v1/models
Deberíamos obtener algo similar a:
{
"models": [
{
"name": "SinCracK-AI",
"capabilities": [
"completion",
"multimodal"
]
}
]
}
También es recomendable comprobar el endpoint /props:
curl http://IP_DEL_SERVIDOR:13306/props
Entre la información aparecerá algo como:
"modalities": {
"vision": true,
"video": true,
"audio": false
}
Si aparecen estos datos, el problema no está en llama.cpp.
¿Por qué OpenCode lo detecta solo como texto?
Actualmente OpenCode no siempre deduce automáticamente las capacidades de un proveedor OpenAI compatible personalizado.
Cuando utilizamos un alias propio como:
SinCracK-AI
OpenCode únicamente conoce el nombre del modelo, pero no sabe qué capacidades tiene, por lo que asume que es un modelo de texto.
La solución consiste en indicarle manualmente las modalidades soportadas.
Configuración de OpenCode
Dentro del archivo config.json añadimos la definición del modelo.
Ejemplo completo:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"sincracai": {
"name": "SinCracK-AI",
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "http://laip:puerto/v1"
},
"models": {
"SinCracK-AI": {
"name": "SinCracK-AI",
"modalities": {
"input": [
"text",
"image"
],
"output": [
"text"
]
},
"limit": {
"context": 131072,
"output": 16384
}
}
}
}
}
}
Los campos importantes son:
"modalities": {
"input": [
"text",
"image"
],
"output": [
"text"
]
}
y
"limit": {
"context": 131072,
"output": 16384
}
Con ello OpenCode conoce tanto el contexto disponible como los tipos de entrada admitidos.
Reiniciar OpenCode
Una vez guardado el archivo es recomendable cerrar completamente OpenCode y volver a abrirlo para que vuelva a cargar la configuración del proveedor.
Resultado
Después del cambio, la información del modelo pasa a mostrarse correctamente:
Antes:
Entradas: texto
Contexto: 0
Después:
Entradas: texto, imagen
Contexto: 131.072
Ahora ya es posible arrastrar imágenes directamente sobre el chat y OpenCode las enviará al servidor llama.cpp.
¿Y el razonamiento?
Es posible que OpenCode siga mostrando:
Razonamiento: Sin razonamiento
Esto no significa que el modelo sea incapaz de razonar.
Simplemente indica que el servidor está configurado para no exponer el canal de razonamiento.
Por ejemplo:
--reasoning-format none
hace que llama.cpp devuelva únicamente la respuesta final.
Si prefieres exponer el razonamiento del modelo puedes utilizar:
--reasoning-format auto
junto con:
--chat-template-kwargs "{\"preserve_thinking\":true}"
aunque esto incrementará el número de tokens generados y la latencia.
Conclusión
Si utilizas modelos multimodales en llama.cpp mediante un proveedor OpenAI compatible, es posible que OpenCode no detecte automáticamente que el modelo acepta imágenes.
Afortunadamente la solución es muy sencilla: declarar explícitamente las modalidades y los límites del modelo dentro de la configuración de OpenCode.
Con ese pequeño cambio podrás aprovechar todas las capacidades multimodales de modelos como Qwen 3.6, Qwen VL, Gemma Vision o cualquier otro compatible con llama.cpp, manteniendo la comodidad y rapidez de OpenCode como cliente.
