Novedades de 0.11.0¶
Publicada el 2026-10-13: SDK Python rayito 0.11.0, SDK TypeScript
rayito 0.11.0 y rayd 0.11.0.
0.11.0 trae tres cosas:
- Las imágenes del agente arrancan antes.
AgentTemplateya no calienta el kernel derun_codey mete los binarios del agente en el snapshot de memoria.create()vuelve en unos 6 s en lugar de unos 19 s. Es un cambio de comportamiento para quien usarun_codecon numpy o pandas en la imagen del agente: cómo volver a lo de antes. - Claves de artefacto por ejecución al publicar imágenes
(
rayito image publish --artifact-run-id), para que dos ejecuciones en paralelo no compartan ni se borren el zip. - El
SandboxPoolde TypeScript ya no deja salir a Node mientrastake()oclose()esperan.
No hay cambios que rompan la API. Para aprovechar el punto 1 hay que reconstruir la imagen del agente: ver Cómo actualizar desde 0.10.x.
De un vistazo¶
| Cambio | Python | TypeScript | Necesita imagen nueva |
|---|---|---|---|
AgentTemplate sin calentar el kernel de run_code por defecto |
kernel_warmup=False; CLI --kernel-warmup/--no-kernel-warmup |
kernelWarmup: false |
sí, la del agente |
| Binarios de OpenCode y ripgrep dentro del snapshot de memoria | AgentTemplate(prefetch=True) (por defecto) |
prefetch: true (por defecto) |
sí, la del agente |
| Claves de artefacto por ejecución | rayito image publish --artifact-run-id |
— (la CLI es de Python) | no |
take() y close() del pool retienen el proceso |
— | SandboxPool |
no |
rayito doctor conoce la serie 0.11 |
CLI | — | — |
El agente arranca antes¶
Cada Sandbox.create() de una imagen del agente restaura un snapshot de
memoria. Hasta 0.10, ese snapshot llevaba el kernel de run_code con
numpy, pandas, matplotlib, scipy y scikit-learn ya importados, aunque un
agente casi nunca los usa, y los binarios de OpenCode y ripgrep había que
leerlos del disco en el primer turno. AgentTemplate de 0.11.0 cambia las
dos cosas:
- El kernel de
run_codeno se calienta (kernel_warmup=False/kernelWarmup: false). La imagen escribe el marcadorslimdel sidecar, así que el kernel arranca vacío. - Los binarios del agente van en el snapshot. El demonio de prefetch
los lee una vez durante el build, antes del snapshot, y la plantilla
espera a que termine (
ready_cmd).
No cambias nada en tu código: basta con reconstruir la imagen.
Medido en AWS real (2026-10-13, us-east-1, Claude Haiku 4.5)
En la aceptación de 0.11.0, con una imagen de AgentTemplate recién
construida, el egress cerrado y el modelo por bedrock_gateway, seis
arranques de OpenCode (tres desde Python y tres desde TypeScript):
create() en 5,9 s de mediana (de 3,2 a 8,9 s) y el primer token
en 12,8 s de mediana desde el inicio de create() (de 9,7 a 37,0 s).
Coincide con la medida del cambio (AWS_API_NOTES.md Q155 y Q156:
6,4 s frente a 19,1 s con la imagen de 0.10, y un snapshot de memoria
62 MB más pequeño). El primer token varía mucho de una ejecución a otra,
así que la mejora robusta es la de create().
Si usas run_code con el stack científico¶
Este es el cambio de comportamiento. En una imagen del agente construida
con 0.11.0, la primera celda de run_code que importe numpy, pandas,
matplotlib, scipy o scikit-learn paga esa importación; las siguientes no.
Las imágenes que ya tenías no cambian.
Si tu agente o tu código usan esas librerías nada más arrancar, vuelve al comportamiento de 0.10 al construir la imagen:
Con kernel_warmup=True, create() vuelve a tardar lo de 0.10 y el
snapshot de memoria vuelve a su tamaño anterior. Detalle en
Templates de agente.
Claves de artefacto por ejecución¶
rayito image publish sube el zip de la imagen a una clave por contenido
(rayito/images/rayd-<sha>.zip). Si dos ejecuciones publicaban el mismo
commit a la vez (dos e2e en paralelo, o una aceptación), compartían ese
objeto, y la limpieza de una podía borrar el de la otra. Con
--artifact-run-id, el zip va a una clave propia de la ejecución:
rayito --json image publish --artifact rayito-image.zip --base-image-version 1 \
--bucket amzn-s3-demo-bucket --image-name rayito-e2e-base --artifact-run-id e2e-42
# sube a rayito/images/runs/e2e-42/rayd-<sha>.zip
El resumen --json añade artifactUploaded: true si esta invocación
subió el objeto. Al limpiar, borra sólo rayito/images/runs/<id>/ o, sin
id, sólo los artefactos con artifactUploaded: true. Desde el repositorio,
make image-publish* pasa el flag si exportas RAYITO_E2E_RUN_ID o
ARTIFACT_RUN_ID. Sin el flag nada cambia. Detalle en
CLI.
El pool de TypeScript ya no deja salir a Node¶
En TypeScript, todos los temporizadores del SandboxPool y de sus
calentamientos iban sin referencia, para que un pool ocioso no mantenga
vivo el proceso. El efecto secundario: un script cuyo único trabajo
pendiente era await pool.take({ waitMs }) (con el pool vacío) o
await pool.close() (con un relleno en marcha) salía con la promesa sin
resolver (unsettled top-level await, código 13) y dejaba vivos los
MicroVM que se estaban calentando.
Desde 0.11.0, take() y close() retienen el proceso mientras corren. Un
pool ocioso sigue sin mantenerlo vivo. No tienes que cambiar tu código:
import { SandboxPool } from "rayito";
const pool = await new SandboxPool({ size: 1, template: "rayito-base" }).start();
const sbx = await pool.take({ waitMs: 60_000 }); // espera a la primera plaza sin que Node salga
console.log((await sbx.runCode("1 + 1")).text);
await sbx.kill();
await pool.close(); // termina las plazas aparcadas antes de salir
El SDK de Python no tenía el problema.
Otros cambios¶
rayito doctorconoce la serie 0.11: exige elrayddel tagrayd-v0.11.0para el SDK 0.11 (Compatibilidad).rayd0.11.0 no cambia: versión en paso con los SDK.
Cómo actualizar desde 0.10.x¶
-
Actualiza el SDK.
-
Republica tu imagen sobre
rayd0.11.0 (Imágenes).rayito doctorexige elrayddel tagrayd-v0.11.0para el SDK 0.11 y da FAIL en la comprobacióncompatibilitycon una imagen 0.10. - Si usas el agente, reconstruye su imagen con
AgentTemplateorayito agent template buildpara que arranque antes. Si tu código usa el stack científico enrun_code, pasakernel_warmup=True(arriba).
No hay cambios incompatibles en la API pública de 0.10.x.