4. Proveedores

Ejecuta un modelo local con Ollama

Descarga un modelo adecuado para tu equipo, conecta el servidor local y conserva las mismas acciones del proyecto.

30 min aprox.7 pasosPráctica + comprobación
Qué aprenderás
  • Distinguir el servidor Ollama, el modelo descargado y el adaptador de TypeScript.
  • Elegir un modelo según memoria, espacio y tiempo de respuesta.
  • Conectar un modelo local sin una API key conservando la exportación model.
  • Diagnosticar un servidor detenido, una etiqueta ausente o recursos insuficientes.
Índice de esta lección

Paso 1

Elige un modelo que tu equipo pueda ejecutar

Con Ollama puedes ejecutar esta práctica en tu propio equipo. El modelo usa tus recursos de cómputo; la descarga inicial requiere conexión y espacio disponible. Para el curso basta con un proveedor que funcione.

En esta clase usamos gpt-oss:20b. La B del catálogo significa miles de millones de parámetros: 20b y 120b son variantes distintas. Actualmente gpt-oss sin etiqueta resuelve a latest, que coincide con 20b; no son dos modelos diferentes que necesites descargar para comparar.

El catálogo muestra aproximadamente 14 GB para 20b y 65 GB para 120b. Eso es tamaño de descarga, no una garantía de memoria suficiente. Ollama describe 20b en sistemas desde 16 GB de memoria y 120b en una GPU de 80 GB; el contexto, la plataforma y otros procesos afectan los recursos necesarios.

No asumas que 16 GB de RAM y cualquier tarjeta dedicada bastan para 120b. Si 20b no cabe o tarda demasiado, elige un modelo de texto más pequeño del catálogo. Para futuros ejercicios de herramientas revisaremos también sus capacidades.

Selección de modelo
Paso 1 · text
Modelo del ejemplo → gpt-oss:20bEtiqueta actual equivalente → gpt-oss:latestComprueba → descarga, memoria y capacidadesMide → carga inicial y respuesta posterior

Qué deberías observar

Distingues tamaño del archivo y memoria de ejecución antes de iniciar una descarga.

Paso 2

Instala Ollama y mantén activo el servidor

Descarga Ollama desde https://ollama.com/download y sigue la instalación de tu sistema. En macOS o Windows abre la aplicación; en un entorno que todavía no tenga el servicio activo puedes iniciar el servidor con ollama serve.

La aplicación o el servicio atiende las peticiones locales en el puerto 11434. Es un proceso distinto al programa TypeScript. Si ya está ejecutándose, no necesitas lanzar otro servidor; un mensaje de puerto ocupado puede indicar que ya hay uno activo.

La API local no requiere una clave. Eso no se aplica a las variantes de nube de Ollama: para esta clase elige la etiqueta local gpt-oss:20b y evita confundirla con :20b-cloud. Mantén el servidor disponible mientras uses la práctica.

Terminal de configuración
Paso 2 · bash
ollama --version # Solo si Ollama no está ya ejecutándose:ollama serve

Qué deberías observar

La terminal reconoce Ollama y el servidor local está disponible para recibir peticiones.

Paso 3

Descarga la etiqueta que usarás en el selector

En otra terminal, con el servidor activo, ejecuta ollama pull gpt-oss:20b. pull descarga o actualiza el modelo; no abre una conversación. Espera a que termine antes de continuar y comprueba la lista de modelos con ollama ls.

Instalar el paquete npm no descarga los pesos del modelo. Del mismo modo, tener Ollama instalado no demuestra que la etiqueta elegida esté disponible. El nombre del selector debe corresponder al modelo del servidor al que te conectas.

Volver a ejecutar pull comprueba la versión disponible. No significa que siempre se vuelvan a descargar todos los gigabytes: Ollama puede reutilizar capas que ya tiene. Si cambiarás de modelo, descarga su etiqueta y comprueba su presencia primero.

Terminal, con Ollama activo
Paso 3 · bash
ollama pull gpt-oss:20bollama ls

Qué deberías observar

El listado confirma que gpt-oss:20b está disponible en la instalación local.

Paso 4

Prueba el modelo antes de conectar TypeScript

Ejecuta un saludo desde la terminal para comprobar que Ollama puede cargar el modelo y generar texto. Esta prueba realiza inferencia local; descargar los archivos por sí solo no demuestra que tu equipo pueda ejecutarlos.

Compara la primera ejecución con otra posterior. La primera puede incluir el tiempo de carga en memoria. Un ping o un saludo mide una respuesta sencilla y no demuestra todavía calidad para resolver un patrón agéntico.

ollama ps muestra los modelos cargados y si utilizan CPU, GPU o una combinación. Si falta memoria o la respuesta resulta demasiado lenta, revisa los recursos y elige un modelo más pequeño. No compares etiquetas equivalentes como si fueran modelos diferentes.

Terminal de prueba local
Paso 4 · bash
ollama run gpt-oss:20b 'Responde solamente con: OK, todo listo!'ollama ps

Qué deberías observar

Recibes texto y puedes observar qué recursos utiliza el modelo cargado.

Paso 5

Añade el adaptador comunitario y conserva el entorno

La base ya declara ollama-ai-provider-v2. Si reconstruiste el proyecto mínimo con Groq, instala la versión del material en tu carpeta de práctica. Este adaptador es comunitario y su versión 4 es compatible con AI SDK 7.

Son tres piezas distintas: Ollama ejecuta el servidor, pull obtiene el modelo y el paquete npm conecta generateText con la API local. Instalar solo una de ellas no completa la configuración.

No necesitas una API key para esta llamada local. Aun así, los scripts del proyecto usan --env-file=.env: el archivo .env debe existir, aunque no contenga credenciales. Si no lo tienes, créalo vacío en la carpeta de práctica; si ya existe, consérvalo. No hace falta añadir una variable de clave para Ollama.

Terminal, dentro de tu práctica
Paso 5 · bash
npm install ollama-ai-provider-v2@4.0.1

Qué deberías observar

El adaptador está instalado y los scripts pueden cargar un archivo .env existente sin exigir una clave de Ollama.

Paso 6

Conecta el modelo compartido al servidor local

Reemplaza selected-model.ts por este ejemplo y conserva una única exportación model. createOllama permite mostrar explícitamente la dirección del servidor. La dirección termina en /api porque este adaptador utiliza la API nativa de Ollama.

La importación ollama del mismo paquete también funciona con la dirección local predeterminada en esta versión. Aquí hacemos visible esa configuración para que puedas reconocer qué servidor recibe la petición.

Selecciona gpt-oss:20b, la misma etiqueta que descargaste. El autocompletado no consulta tu instalación ni confirma que el modelo exista. Las acciones siguen importando model; cambiar de proveedor no requiere duplicarlas.

src/helpers/selected-model.ts
Paso 6 · typescript
import { createOllama } from 'ollama-ai-provider-v2'; const ollama = createOllama({  baseURL: 'http://127.0.0.1:11434/api',}); export const model = ollama('gpt-oss:20b');

Qué deberías observar

La acción compartida queda conectada al modelo de tu servidor local.

Paso 7

Ejecuta la práctica y clasifica los fallos

En main.ts utiliza getMessageFromModelFailSafe de la lección de errores. Ejecuta npm run build y luego npm run dev desde tu práctica. build verifica los tipos; dev llama al servidor local y consume los recursos de tu equipo.

Si aparece un fallo antes de llamar al modelo, revisa las dependencias y que exista .env. Si la conexión es rechazada, comprueba que Ollama esté activo en la dirección configurada. Si el servidor no encuentra el modelo, compara la etiqueta del selector con ollama ls y completa pull.

Para errores al cargar el modelo, revisa la memoria disponible y los registros de Ollama. FailSafe ofrece una orientación general; el diagnóstico local puede necesitar comprobar también el servidor. No esperes una API key como solución a un proceso detenido o un modelo ausente.

Con una respuesta satisfactoria ya tienes la conexión preparada. Puedes continuar con Groq, Anthropic, OpenAI, Google u Ollama: los patrones describen estrategias, pero cada ejercicio seguirá necesitando capacidades concretas del modelo, como herramientas o salida estructurada.

src/main.ts
Paso 7 · typescript
import { getMessageFromModelFailSafe } from './actions/get-message-model.js'; await getMessageFromModelFailSafe();

Qué deberías observar

Obtienes una respuesta o puedes clasificar el fallo entre proyecto, servidor, modelo y recursos.

Ahora te toca

Prueba la idea por tu cuenta

Dibuja el recorrido main.ts → acción → model → servidor Ollama → modelo local. Prepara el selector y clasifica estos casos: .env ausente, conexión rechazada y modelo no encontrado. Si tu equipo tiene recursos, ejecuta la prueba local; también puedes completar el mapa y el diagnóstico sin descargar pesos.

Necesito una pista

La instalación del adaptador, el proceso del servidor y los pesos son piezas independientes. No cambies una API key para resolver un fallo local.

Comparar con una solución

main.ts invoca la acción, esta importa model y el adaptador llama a la API de Ollama en 127.0.0.1:11434. Ollama carga gpt-oss:20b. Un .env ausente impide el arranque con los scripts actuales; conexión rechazada exige revisar servidor/dirección; modelo no encontrado exige comprobar la etiqueta y descargarla en ese servidor.

Antes de seguir

Comprueba lo que aprendiste

No es una nota. Es una pausa para comprobar que la idea quedó clara.

1. ¿Qué necesitas para ejecutar este ejemplo local de Ollama?
2. ¿Qué diferencia hay entre pull y run?
3. ¿Qué demuestra que el editor sugiera gpt-oss:20b?
4. ¿Cómo interpretas los 14 GB que muestra el catálogo para 20b?
5. ¿Por qué existe .env si la API local no pide una clave?

¿Terminaste la práctica?

Haz el ejercicio y comprueba tus respuestas antes de marcar la lección como completada.

Apuntes y código de esta lección