Fiabilidad · Media · 20 min

Limita las peticiones simultáneas

Lanzar 50 prompts a la vez contra un modelo local solo llena la cola. Procésalos de dos en dos y conserva el orden.

Escribe mapLimit(items, limit, fn). Llama a fn(item, index) para cada elemento, con como mucho limit llamadas en curso a la vez, y devuelve un array con los resultados en el mismo orden que items, aunque terminen desordenados.

Ya tienes fakeGenerate(prompt, ms), que simula una llamada al modelo: tarda ms milisegundos y devuelve el prompt en mayúsculas. Anota el máximo de llamadas simultáneas en window.__peak.

Retos 0/4

  • Conserva el orden aunque terminen desordenados
  • Nunca hay más de 2 llamadas a la vez con limit = 2
  • Si hay menos elementos que el límite, los lanza todos
  • Un array vacío devuelve []

async function mapLimit(items, limit, fn) {
  // arranca como mucho `limit` workers; cada uno toma el siguiente índice hasta que no quede ninguno
  return Promise.all(items.map((item, i) => fn(item, i)));
}

mapLimit(['hola', 'que', 'tal', 'modelo'], 2, (p) => fakeGenerate(p))
  .then((r) => console.log(r, 'peak:', window.__peak));
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 →