Ingeniería LLM · Fácil · 10 min

Una petición de chat compatible con OpenAI

Ollama, vLLM y LiteLLM aceptan el mismo formato que la API de OpenAI. Construye la URL y el cuerpo correctos y valida la entrada antes de enviar nada.

Escribe buildChatRequest(opts) que devuelva { url, body } para un servidor local compatible con OpenAI. opts trae model, system (opcional), user, temperature (por defecto 0.7), maxTokens (por defecto 512), stream (por defecto false) y baseUrl (por defecto http://localhost:11434).

La URL es baseUrl sin barra final más /v1/chat/completions. El cuerpo usa los nombres de la API: model, messages (primero { role: 'system', content } si hay system, luego { role: 'user', content }), temperature, max_tokens y stream.

Lanza un error si model o user están vacíos, si temperature no está entre 0 y 2, o si maxTokens no es un entero positivo.

Retos 0/4

  • Usa la URL /v1/chat/completions, también con barra final en baseUrl
  • Pone el mensaje de sistema antes del de usuario
  • Usa max_tokens y stream, con los valores por defecto
  • Rechaza modelo vacío, temperatura fuera de rango y maxTokens no válido

function buildChatRequest({ model, system, user, temperature = 0.7, maxTokens = 512, stream = false, baseUrl = 'http://localhost:11434' } = {}) {
  // 1. valida model, user, temperature (de 0 a 2) y maxTokens (entero positivo)
  // 2. url: baseUrl sin barra final + '/v1/chat/completions'
  // 3. cuerpo: model, messages, temperature, max_tokens y stream
  return {
    url: baseUrl + '/api/chat',
    body: { model, messages: [{ role: 'user', content: user }], temperature, maxTokens }
  };
}

console.log(buildChatRequest({ model: 'qwen2.5:7b', system: 'Responde en una frase.', user: '¿Qué es un GGUF?' }));
La consola aparece aquí (console.log).

Para profundizar: la referencia de Ollama (en inglés) →

¿Esto en producción, con tus datos? Hablemos 15 minutos →