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?' }));Para profundizar: la referencia de Ollama (en inglés) →
¿Esto en producción, con tus datos? Hablemos 15 minutos →