Por qué el modelo corre en otra máquina
En la máquina que sirve este sitio no corre ningún modelo de lenguaje. Los resúmenes se calculan en un segundo dispositivo que recoge encargos, hace el trabajo y trae las frases de vuelta.
El motivo es aritmética. Un modelo de 3B ocupa más de un gigabyte de memoria y necesita segundos por respuesta. La consulta de base de datos más pesada de toda esta aplicación tarda 581 milisegundos. Poner ambas cosas en la misma placa significa que las imágenes de contador de 379.000 contadores esperan detrás de un generador de texto — y son ellas el producto de verdad.
Lo que cuesta y lo que compra
Cuesta una segunda máquina y una cola. Los encargos se entregan como mucho de veinte en veinte; la cola tiene tope, y cuando está llena no se crea nada nuevo — las frases ya escritas siguen visibles. Un resumen de hace una semana está bien. Un resumen que falta está bien. Una página de estadísticas lenta porque en la misma placa hay otra cosa pensando, no.
Lo que compra es que el camino del recuento nunca comparta máquina con algo impredecible. Dibujar una imagen de contador es una cantidad de trabajo pequeña y acotada. Generar texto no lo es: el rango medido para una frase aquí va de 5,4 a 54,3 segundos, un factor diez entre el caso rápido y el lento, y nada de eso puede verlo la Pi de antemano.
Lo que sale de casa
Esta es la parte que había que decidir antes de construir nada, porque es la parte que después ya no se arregla.
La segunda máquina recibe solo cifras que ya son públicas en la propia página de estadísticas del contador, y solo de contadores cuya página de estadísticas es pública — ni privada ni protegida con contraseña. El worker no se entera de nada que un visitante de esa página no pudiera leer abriéndola.
Eso no es un efecto secundario afortunado de cómo salió el código. La consulta de candidatos filtra por ello, y sin ese filtro la función entera sería la entrega de datos ajenos a un segundo dispositivo. No existe una versión de «lo trataremos con cuidado» tan buena como no enviarlo.
La forma general
De aquí han salido dos reglas que valen más que la función misma.
El trabajo no acotado no va en el camino acotado. Todo aquello cuyo tiempo de ejecución no puedes predecir dentro de un orden de magnitud no va en la máquina que tiene que responder en milisegundos. No «normalmente va bien» — el caso lento es el que importa, y siempre llega.
Decide qué puede salir antes de decidir qué construyes. Si la respuesta hubiera sido «el worker necesita también los contadores privados», la reacción correcta no habría sido asegurar la transferencia. Habría sido que la función no cubre contadores privados — que es exactamente lo que hace.