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 →