Documentación

Agent

laya.Agent carga un checkpoint y responde preguntas tipadas sobre un estado. laya.load es un atajo para Agent(...), y laya.RLAgent es un alias de Agent. ONNXAgent ejecuta un modelo ONNX exportado en CPU; impórtalo desde laya.onnx_agent.

Los nombres, los tipos, los valores por defecto y el código se mantienen en inglés; el resto está traducido (las entradas aún sin traducir se muestran en el original).

Agent

Agent(
    model_id_or_path: str = "convaiinnovations/laya",
    device: Optional[str] = None,
    token: Optional[str] = None,
    subfolder: Optional[str] = None,
    fast: bool = False,
    compile: bool = False,
    revision: Optional[str] = None,
    expected_sha256: Optional[Dict[str, str]] = None,
    lang_temperatures: Optional[Dict[str, Dict[str, Any]]] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: bool = True,
    hooks_concurrent: bool = True,
    hooks_timeout: Optional[float] = None,
    calibration: Optional[str] = None,
    backend: Optional[str] = None,
    compile_warmup: bool = True,
    compile_cache: bool = False,
    compile_mode: str = "default",
)

Clases base: HookRegistry

Runtime del modelo de decisión System One: decisiones rápidas, no autorregresivas y calibradas.

dtype es el destino del autocast, no la precisión de cada llamada. En MPS una llamada solo hace autocast a partir de mps_amp_min_rows filas, así que dtype puede decir float16 mientras una llamada corre en float32. dtype_for(rows) devuelve la precisión de una llamada con rows filas.

Carga un checkpoint de Laya.

backend selecciona "eager", "auto", "compile" o "tilelang"; consulta laya.backends. Tiene prioridad sobre fast y compile. Omítelo para conservar esos flags heredados. Para ONNX usa load(backend="onnx") en su lugar.

revision fija opcionalmente la descarga del Hub a un commit SHA/rama/tag explícito; si se omite, se usan el valor predeterminado normal de huggingface_hub y la caché offline existente. expected_sha256 ({path relative to the checkpoint dir: hexdigest}) verifica la integridad de los artefactos antes de que se analice o ejecute cualquier peso; es opcional y también se aplica a directorios locales. Un artefacto faltante lanza FileNotFoundError y una discrepancia de digest lanza ValueError; cualquiera de los dos errores rechaza la carga.

fast=True sustituye el forward del encoder/cabeza por la ruta rápida de TileLang (solo CUDA, requiere pip install laya[fast]); consulta Agent.accelerate.

compile=True ejecuta el modelo bajo torch.compile y activa reference_compile del encoder de ModernBERT. torch.compile se especializa por forma de entrada y Laya ve una nueva en casi todas las peticiones, así que esos grafos suelen costar más de lo que rinden; úsalo cuando el tráfico sea repetitivo. fast=True tiene prioridad, porque la ruta de TileLang reemplaza el forward que se compilaría. Los agents compilados ejecutan warmup() antes de devolver; compile_warmup=False difiere ese trabajo a las peticiones o a una llamada manual a warmup(). Los agents eager y fast no cambian. compile_cache=True opta por un directorio Laya Inductor persistente (a nivel de proceso), respetando cualquier TORCHINDUCTOR_CACHE_DIR existente; consulta las notas de ingeniería de compilación. compile_mode="reduce-overhead" opta por grafos CUDA. Puede retener más memoria de GPU y registra cada forma nueva por separado. Las salidas CUDA se copian antes del siguiente replay; los forwards de grafos CUDA compilados se serializan. El modo predeterminado sigue siendo "default".

subfolder selecciona un checkpoint de un repositorio que empaqueta varios, p. ej. Agent("convaiinnovations/laya", subfolder="multilingual"). Solo se descarga ese subdirectorio, así que el empaquetado no le cuesta a cada usuario toda la familia.

calibration es una ruta JSON opcional con temperature y temperature_by_options. Se aplica después de la configuración del checkpoint, así que un mapa ajustado sobrescribe los escalares distribuidos sin reescribir model.safetensors.

hooks / on_predict_start / on_predict_end observan o moldean cada predicción; consulta laya.hooks. hooks_raise=False avisa y continúa cuando falla un hook, hooks_concurrent=False serializa los hooks que no son seguros de ejecutar en paralelo, y hooks_timeout limita cada llamada de hook en segundos (None significa sin límite).

Parámetros

model_id_or_pathstr= "convaiinnovations/laya"
deviceOptional[str]= None
tokenOptional[str]= None
subfolderOptional[str]= None
fastbool= False
compilebool= False
revisionOptional[str]= None
expected_sha256Optional[Dict[str, str]]= None
lang_temperaturesOptional[Dict[str, Dict[str, Any]]]= None
hooks= None
on_predict_start= None
on_predict_end= None
hooks_raisebool= True
hooks_concurrentbool= True
hooks_timeoutOptional[float]= None
calibrationOptional[str]= None
backendOptional[str]= None
compile_warmupbool= True
compile_cachebool= False
compile_modestr= "default"

backend

backend: str

El backend de inferencia activo, incluidas las flags heredadas compile y fast.

backend_object

backend_object

El objeto Backend instalado, o None para un runtime heredado.

set_backend

set_backend(name: str = "auto", strict: bool = False, options) -> str

Cambia de backend; los backends no disponibles avisan y usan eager a menos que strict=True.

Las opciones van al constructor del backend, p. ej. warmup=False para compile o use_graphs=False para tilelang. El cambio espera a la inferencia en curso.

Parámetros

namestr= "auto"
strictbool= False
options

accelerate

accelerate(use_graphs: bool = True, strict: bool = False)

Sustituye el forward del modelo por la ruta rápida de TileLang (kernels fusionados de GEMM/GEGLU/LayerNorm/RoPE, flash attention de ventana deslizante, pesos residentes de 16 bits, grafos CUDA por cubo de forma).

La ruta rápida se ejecuta en el dtype de autocast del agent en el momento de la llamada (bf16 o fp16), así que coincide con el forward estándar al que reemplaza dentro del redondeo (consulta benchmarks/parity_fast.py). Después de cambiar agent.dtype, llama a deaccelerate() y luego a accelerate() para reconstruirla. Devuelve True si queda habilitada. Con strict=False, cualquier fallo (sin CUDA, falta tilelang) deja la ruta estándar en su lugar.

Parámetros

use_graphsbool= True
strictbool= False

warmup

warmup(shapes=None) -> float

Ejecuta ahora el forward sobre una entrada sintética de cada forma y devuelve los segundos que tardó.

compile=True llama a esto al cargar a menos que compile_warmup=False. Las formas adicionales todavía pueden calentarse manualmente. fast=True construye sus kernels y grafos CUDA por cubo de forma en el primer uso; llamar a esto antes de servir saca ese costo de las primeras peticiones. Con el forward estándar son unas pocas pasadas hacia adelante normales. shapes es una lista de (rows, tokens, markers); los tokens se limitan al max_len del agent. No se devuelve ni se registra nada para ningún llamador, y los hooks no se ejecutan.

Parámetros

shapes= None

deaccelerate

deaccelerate()

Restaura el forward estándar.

dtype_for

dtype_for(rows: int) -> torch.dtype

Precisión en la que corre una pasada hacia adelante con rows filas de pregunta.

dtype es el destino del autocast, fijado una vez en el momento de la carga. Si una pasada hace autocast se decide por llamada: en MPS solo a partir de mps_amp_min_rows filas. Esto devuelve dtype cuando una pasada con rows filas hace autocast, y torch.float32 cuando no. Una llamada a predict corre una fila por pregunta.

Parámetros

rowsint

predict_batch

predict_batch(
    states: List[Union[str, dict, list]],
    questions: Dict[str, Dict[str, Any]],
    batch_size: Optional[int] = None,
    lang: Optional[str] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: Optional[bool] = None,
    hooks_timeout: Optional[float] = None,
    max_len: Optional[int] = None,
    head_max_len: Optional[int] = None,
    sort_by_length: bool = False,
    min_confidence: Optional[float] = None,
) -> List[Dict[str, Any]]

Evalúa las mismas preguntas sobre muchos estados, empaquetándolos en pasadas hacia adelante compartidas.

Esta es la ruta de rendimiento. system_one/predict manejan un estado por pasada hacia adelante; en una GPU eso deja inactiva la mayor parte de la dimensión de lote. predict_batch reúne las filas de pregunta de varios estados en un solo tensor, así que una llamada que tomaría N pasadas secuenciales hacia adelante toma una (o ceil(len(states) / batch_size)), lo que es varias veces más rápido por decisión en GPU.

Parámetros

statesList[Union[str, dict, list]]

Una lista de estados (cada uno una cadena de texto, un dict JSON o una lista de turnos de conversación). Las mismas questions se evalúan contra cada estado.

questionsDict[str, Dict[str, Any]]

Definiciones de preguntas, exactamente como las acepta system_one.

batch_sizeOptional[int]= None

Límite opcional de estados por pasada hacia adelante. None los envía todos en una pasada; establécelo para acotar la memoria máxima cuando agrupe muchos estados o estados largos.

langOptional[str]= None
hooksHookArg= None

Hooks por llamada, añadidos después de los que haya instalados en el Agent. Consulta laya.hooks.

on_predict_startPredictHookArg= None

Un hook de inicio por llamada. Puede reescribir el estado/las preguntas o llamar a ctx.skip(...) para cortocircuitar la inferencia.

on_predict_endPredictHookArg= None

Un hook de fin por llamada. Puede reescribir los resultados.

hooks_raiseOptional[bool]= None

Sobrescribe el hooks_raise del Agent para esta llamada.

hooks_timeoutOptional[float]= None

Sobrescribe el hooks_timeout del Agent para esta llamada.

max_lenOptional[int]= None

Sobrescribe el max_len de la configuración del agent para esta llamada. Un hook de inicio también puede fijar ctx.max_len para moldear el presupuesto de tokens.

head_max_lenOptional[int]= None

Sobrescribe el head_max_len de la configuración del agent para esta llamada. Un hook de inicio también puede fijar ctx.head_max_len.

sort_by_lengthbool= False

Agrupa estados codificados de tamaño similar en ventanas de ocho lotes para reducir el padding. Requiere un batch_size explícito mayor que uno y menor que el número de estados; de lo contrario no tiene efecto. Los resultados conservan el orden de entrada. Esto almacena en búfer hasta ocho lotes de estados tokenizados en lugar de uno. Cambiar las formas de los lotes puede alterar ligeramente las predicciones de punto flotante.

min_confidenceOptional[float]= None

Devuelve

Una lista de dicts de resultado por estado, cada uno idéntico en forma a la salida de system_one y alineado con states por índice.

predict_long

predict_long(
    state: Union[str, dict, list],
    questions: Dict[str, Dict[str, Any]],
    window: Optional[int] = None,
    stride: Optional[int] = None,
    aggregate: str = "auto",
    batch_size: Optional[int] = None,
    lang: Optional[str] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: Optional[bool] = None,
    hooks_timeout: Optional[float] = None,
) -> Dict[str, Any]

Evalúa preguntas sobre un estado más largo que la ventana de contexto, escaneándolo en ventanas superpuestas y agregando por pregunta.

system_one/predict truncan un estado que excede max_len a una sola ventana (la primera, o para una lista de conversación la última), descartando el resto en silencio. predict_long tokeniza el estado una vez, lo divide en ventanas de tokens superpuestas, puntúa cada ventana en pasadas hacia adelante compartidas (mediante predict_batch) y combina las respuestas por ventana:

  • noul -> P(true) es el máximo sobre las ventanas (la afirmación se sostiene si alguna ventana la respalda)
  • choice-> la respuesta de la única ventana más segura, para que una señal localizada no sea superada por las muchas ventanas neutras de las que en su mayoría se compone un documento largo (promediar la ahoga -- la mayoría neutra domina)
  • score -> el nivel de la ventana más segura, igualmente

La probabilidad/confianza devuelta es la de la ventana que decide, no un número calibrado para todo el documento: un máximo de noul sobre muchas ventanas deriva hacia arriba con el número de ventanas aun sin señal, y choice puede caer en una ventana seguramente neutra cuando nada en el documento es decisivo. Por eso cada respuesta lleva answer["window"] — el index de la ventana que decide, token_start/token_end dentro del estado tokenizado, y el count de ventanas — de modo que quien la llame pueda inspeccionar el tramo del que vino la respuesta en lugar de confiar en el número bruto. Ese tramo es el que leyó el modelo, no solo el solicitado: la ventana está limitada al espacio que dejan las preguntas, así que lo que se pasa a predict_batch no se vuelve a cortar.

Un estado que ya cabe en una ventana se pasa directamente a system_one (salida idéntica).

Los hooks envuelven la inferencia que responde al estado, que para un documento que necesita varias ventanas es el único predict_batch compartido sobre ellas: on_predict_start se dispara una vez, y ctx.states contiene los textos de ventana decodificados en orden de escaneo -- no el state del llamador, que fue tokenizado para producirlos. Del resultado que deja la cadena se siguen tres desenlaces:

  • ctx.skip([result]) responde al documento: la carga vuelve sin atribución de ventana y con usage["windows"] en 0, porque no se puntuó nada
  • un escaneo dejado tal como lo construyó este método: se puntúa cada ventana, cada respuesta lleva answer["window"], y usage["windows"] es el recuento de ventanas
  • un escaneo reescrito (ctx.states reemplazado, de cualquier forma): las respuestas se agregan sobre los estados que se puntuaron, pero ninguna respuesta lleva answer["window"] -- los desplazamientos anteriores describen las ventanas de este método, no el texto que leyó el modelo

Parámetros

stateUnion[str, dict, list]
questionsDict[str, Dict[str, Any]]
windowOptional[int]= None

tokens de estado por ventana. Por defecto es el presupuesto de estado del checkpoint (max_len - head_max_len - 8), y en cualquier caso está acotado al espacio que las preguntas dejan para el estado dentro de max_len -- el menor de esos espacios, porque se puntúa una misma lista de ventanas para cada pregunta. Una ventana más ancha se vuelve a truncar de camino al modelo, así que se recorta en su lugar, con un RuntimeWarning cuando es el llamador quien la pidió. Las opciones son lo que reduce el espacio: en el checkpoint en inglés una pregunta de 2 opciones deja 483 tokens para el estado y una de 100 opciones deja 100. Una ventana más pequeña aísla mejor una señal localizada (un tramo decisivo corto es una fracción mayor de su ventana, así que esa ventana lo clasifica con claridad), a costa de más ventanas; el valor predeterminado grande favorece el contexto y el rendimiento. noul es robusto ante esto, choice/score se benefician de una ventana más pequeña cuando el tramo decisivo es una parte pequeña de un documento largo y por lo demás neutro.

strideOptional[int]= None

paso de tokens entre ventanas. Por defecto es la mitad de la ventana efectiva (50% de superposición), así que un tramo cerca de un borde todavía cae entero dentro de alguna ventana. Un paso más allá de la ventana efectiva se rechaza en lugar de recortarse: los tokens entre cada par de ventanas no los leería ninguna ventana, que es el fallo que este método existe para evitar.

aggregatestr= "auto"

"auto" (las reglas por tipo anteriores) es el único modo por ahora.

batch_sizeOptional[int]= None

límite de ventanas por pasada hacia adelante, para acotar la memoria en estados muy largos.

langOptional[str]= None

selección de temperatura por idioma, como en system_one.

hooksHookArg= None

Hooks por llamada, añadidos después de los que haya instalados en el Agent. Consulta laya.hooks.

on_predict_startPredictHookArg= None

Un hook de inicio por llamada, como en system_one.

on_predict_endPredictHookArg= None

Un hook de fin por llamada, como en system_one.

hooks_raiseOptional[bool]= None

Sobrescribe el hooks_raise del Agent para esta llamada.

hooks_timeoutOptional[float]= None

Sobrescribe el hooks_timeout del Agent para esta llamada.

Excepciones

ValueError: aggregate es cualquier cosa menos "auto"; las opciones de las preguntas llenan toda la secuencia, sin dejar espacio para el estado; o stride avanza más allá de la ventana efectiva, así que los tokens entre dos ventanas no los leería nada.

Devuelve un único dict de resultado, con la misma forma que system_one, con usage["windows"] añadido. La clave siempre está presente y cuenta las ventanas que el modelo puntuó para producir la respuesta: 1 para un estado que cabía en una ventana, N para un documento escaneado en N ventanas superpuestas (o el N al que las reescribió un hook de inicio), y 0 cuando un hook de inicio respondió al documento, o no dejó estados que puntuar, antes de que se leyera ninguna ventana -- en cualquiera de las dos rutas, así que una respuesta en caché nunca se lee como una ventana que el modelo leyó.

A lo largo de varias ventanas, las claves de truncamiento se combinan como cualquier otro campo de usage: truncated, state_tokens y state_tokens_dropped se suman (así que truncated es el número de ventanas que se cortaron, y los recuentos de tokens incluyen la superposición), y truncated_questions es la lista de la última ventana. Las dos pueden discrepar: cuando solo se cortó una ventana anterior, truncated es mayor que 0 y truncated_questions está vacía. Una ventana se corta cuando es mayor que el espacio que deja la cabeza de una pregunta. Comprueba usage["truncated"] > 0 aquí, no is True.

system_one

system_one(
    state: Union[str, dict, list],
    questions: Dict[str, Dict[str, Any]],
    lang: Optional[str] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: Optional[bool] = None,
    hooks_timeout: Optional[float] = None,
    max_len: Optional[int] = None,
    head_max_len: Optional[int] = None,
    min_confidence: Optional[float] = None,
) -> Dict[str, Any]

Evalúa preguntas tipadas a través del estado en una sola pasada hacia adelante paralela.

Parámetros

stateUnion[str, dict, list]

Cadena de texto, dict JSON o lista de turnos de conversación.

questionsDict[str, Dict[str, Any]]

Diccionario que asigna question_id -> definición de pregunta.

  • choice: {"type": "choice", "instructions": "...", "criteria": {"optA": "...", ...}}

  • score: {"type": "score", "instructions": "...", "criteria": ["lvl0", "lvl1", ...]}

  • noul: {"type": "noul", "instructions": "...", "criteria": {"false": "...", "true": "..."}, "labels": {"false": "B", "true": "A"}}

    Los criteria y labels de Noul son opcionales. Los labels solo controlan el texto que se muestra al modelo; sus claves conservan la semántica false/true, y el valor devuelto de noul es siempre P(true). Por compatibilidad, los labels toman false/true por defecto.

langOptional[str]= None
hooks= None
on_predict_start= None
on_predict_end= None
hooks_raiseOptional[bool]= None
hooks_timeoutOptional[float]= None
max_lenOptional[int]= None
head_max_lenOptional[int]= None
min_confidenceOptional[float]= None

Devuelve

Diccionario con respuestas, probabilidades, confianza calibrada y uso de tokens. Las preguntas vacías devuelven respuestas vacías y uso de tokens cero sin tokenización ni pasada hacia adelante del modelo.

Cuando el presupuesto de la cabeza deja dos opciones con el mismo tramo de tokens, usage lleva una entrada options por cada pregunta a la que le ocurrió -- total, distinct y tokens_per_option -- porque una respuesta elegida entre 42 tramos distinguibles de 58 tiene un techo que es del presupuesto y no del modelo. Las preguntas cuyas opciones sobreviven todas están ausentes, así que una petición que no colapsa nada queda igual.

usage también informa si el estado cabía: truncated, state_tokens, state_tokens_dropped y truncated_questions (las preguntas cuya cabeza dejó demasiado poco espacio). Quien llame y le importe si la respuesta vio todo el estado debería leer usage["truncated"] en lugar de estimarlo a partir de la longitud de lo que envió.

Para puntuar muchos estados a la vez, consulta predict_batch, que comparte pasadas hacia adelante entre ellos.

decide

decide(
    state: Union[str, dict, list],
    schema: Any = None,
    questions: Optional[Dict[str, Any]] = None,
    return_details: bool = False,
    min_confidence: Optional[float] = None,
    predict_kwargs,
) -> Any

Responde a state contra un schema (JSON schema o modelo pydantic) y devuelve valores tipados.

Consulta laya.structured. Pasa exactamente uno de schema o questions; los argumentos de palabra clave adicionales se reenvían a predict / system_one.

Parámetros

stateUnion[str, dict, list]
schemaAny= None
questionsOptional[Dict[str, Any]]= None
return_detailsbool= False
min_confidenceOptional[float]= None
predict_kwargs

decide_batch

decide_batch(
    states: List[Union[str, dict, list]],
    schema: Any = None,
    questions: Optional[Dict[str, Any]] = None,
    return_details: bool = False,
    min_confidence: Optional[float] = None,
    predict_kwargs,
) -> List[Any]

Responde a muchos estados contra un schema (JSON schema o modelo pydantic) en una sola llamada por lotes.

La forma de rendimiento de :meth:decide: el schema se planifica una vez y sus preguntas corren sobre cada estado a través de :meth:predict_batch (pasadas hacia adelante compartidas, resultados en orden de entrada), y luego las respuestas de cada estado se proyectan como lo hace decide. Los argumentos de palabra clave adicionales (batch_size=, lang=, hooks=, ...) se reenvían a predict_batch. Consulta laya.structured.

Parámetros

statesList[Union[str, dict, list]]
schemaAny= None
questionsOptional[Dict[str, Any]]= None
return_detailsbool= False
min_confidenceOptional[float]= None
predict_kwargs

fit_temperatures

fit_temperatures(records, compute_ece: bool = False, seed: int = 0) -> Dict[str, Any]

Ajusta temperaturas por cubo a partir de registros de CPU y las guarda en este agent.

records son (qtype, logits, target, k). Constrúyelos con laya.calibrate.records_from_labeled cuando tengas forwards etiquetados; este método no descarga pesos ni escribe model.safetensors. seed solo afecta la partición reservada de ECE cuando compute_ece es true. El cfg del checkpoint se deja tal como se cargó.

Parámetros

records
compute_ecebool= False
seedint= 0

fit_binning

fit_binning(
    records,
    min_bucket_n: int = MIN_BINNING_BUCKET_N,
    MIN_BINNING_BUCKET_N,
) -> Dict[str, Any]

Ajusta un mapa de binning por histograma sobre las temperaturas ajustadas de este agent y lo guarda.

records son las mismas tuplas (qtype, logits, target[, k]) que consumía fit_temperatures. El mapa está indexado exactamente como temperature_by_options, se compone sobre las temperaturas actuales y save_calibration lo escribe como binning_map.

Parámetros

records
min_bucket_nint= MIN_BINNING_BUCKET_N
MIN_BINNING_BUCKET_N

save_calibration

save_calibration(path: str) -> None

Escribe las temperaturas y el checkpoint para el que se ajustaron. No escribe los pesos.

Parámetros

pathstr

load_calibration

load_calibration(path: str) -> None

Lee en este agent un mapa JSON escrito por save_calibration.

Un archivo sin version se trata como versión 1 y se carga igual. Un archivo más nuevo cuyo checkpoint registrado no coincide con este agent avisa y se carga igual. Los valores que no son números, o que quedan fuera de [TEMP_MIN, TEMP_MAX], se recortan con clamp_temperature igual que al cargar un checkpoint.

Parámetros

pathstr

load

load(
    model_id_or_path: str = "convaiinnovations/laya",
    device: Optional[str] = None,
    token: Optional[str] = None,
    subfolder: Optional[str] = None,
    fast: bool = False,
    compile: bool = False,
    revision: Optional[str] = None,
    expected_sha256: Optional[Dict[str, str]] = None,
    lang_temperatures: Optional[Dict[str, Dict[str, Any]]] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: bool = True,
    hooks_concurrent: bool = True,
    hooks_timeout: Optional[float] = None,
    calibration: Optional[str] = None,
    backend: Optional[str] = None,
    onnx_path: Optional[str] = None,
    compile_warmup: bool = True,
    compile_cache: bool = False,
    compile_mode: str = "default",
) -> Agent

Carga un agent de Laya.

subfolder elige un checkpoint de un repositorio que empaqueta varios:

laya.load("convaiinnovations/laya")                           # English (repo root)
laya.load("convaiinnovations/laya", subfolder="multilingual")
laya.load("convaiinnovations/laya", fast=True)                # TileLang GPU fast path
laya.load("convaiinnovations/laya", compile=True)              # torch.compile the model

model_id_or_path también acepta un nombre de checkpoint o alias -- los mismos que resuelve Router, así que ambos puntos de entrada leen una sola tabla:

laya.load("typed-decisions")
laya.load("ml")                                               # multilingual

Cualquier otra cosa (un id de repo del Hub, un directorio local) se pasa a Agent sin cambios.

backend selecciona "auto", "eager", "compile", "tilelang" u "onnx". ONNX devuelve el ONNXAgent existente, con onnx_path (predeterminado "laya.onnx"). Los demás backends usan Agent; un backend explícito tiene prioridad sobre los flags heredados.

revision/expected_sha256 fijan y verifican los artefactos descargados; consulta Agent. hooks / on_predict_start / on_predict_end observan o moldean cada predicción; consulta laya.hooks. calibration es la misma ruta JSON opcional que acepta Agent.

Parámetros

model_id_or_pathstr= "convaiinnovations/laya"
deviceOptional[str]= None
tokenOptional[str]= None
subfolderOptional[str]= None
fastbool= False
compilebool= False
revisionOptional[str]= None
expected_sha256Optional[Dict[str, str]]= None
lang_temperaturesOptional[Dict[str, Dict[str, Any]]]= None
hooks= None
on_predict_start= None
on_predict_end= None
hooks_raisebool= True
hooks_concurrentbool= True
hooks_timeoutOptional[float]= None
calibrationOptional[str]= None
backendOptional[str]= None
onnx_pathOptional[str]= None
compile_warmupbool= True
compile_cachebool= False
compile_modestr= "default"

ONNXAgent

ONNXAgent(
    model_id_or_path: str,
    onnx_path: str = "laya.onnx",
    token: Optional[str] = None,
    subfolder: Optional[str] = None,
    revision: Optional[str] = None,
    expected_sha256: Optional[Dict[str, str]] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: bool = True,
    hooks_concurrent: bool = True,
    hooks_timeout: Optional[float] = None,
    lang_temperatures: Optional[Dict[str, Dict[str, Any]]] = None,
    calibration: Optional[str] = None,
)

Clases base: HookRegistry

Runtime del modelo de decisión System One vía ONNX: decisiones rápidas optimizadas para CPU.

Carga un agent de Laya respaldado por ONNX Runtime.

Parámetros

model_id_or_pathstr

ID de HuggingFace Hub o ruta local al checkpoint original de PyTorch (se usa para cargar el tokenizer y la configuración).

onnx_pathstr= "laya.onnx"

Ruta al archivo .onnx exportado.

tokenOptional[str]= None

Token de HuggingFace opcional para un checkpoint privado o restringido; si no se da, recurre a $HF_TOKEN, exactamente como lo hace Agent. Solo se obtienen el tokenizer y la configuración -- el grafo en sí es el onnx_path local.

subfolderOptional[str]= None

Subdirectorio opcional si se descarga de un repositorio empaquetado.

revisionOptional[str]= None

Revisión del Hub opcional (commit SHA/rama/tag). Si se omite, se usan el valor predeterminado normal de huggingface_hub y la caché offline existente.

expected_sha256Optional[Dict[str, str]]= None

{path relative to the checkpoint dir: hexdigest} opcional, verificado antes de que se analice cualquier archivo de checkpoint; es opcional y se aplica también a directorios locales. Un artefacto faltante lanza FileNotFoundError y una discrepancia de digest lanza ValueError; cualquiera de los dos errores rechaza la carga.

hooksHookArg= None

Hooks de predicción opcionales; consulta laya.hooks.

on_predict_startPredictHookArg= None

Un hook de inicio opcional, que se ejecuta antes de la inferencia.

on_predict_endPredictHookArg= None

Un hook de fin opcional, que se ejecuta después de la inferencia.

hooks_raisebool= True

Cuando es False, un hook que falla avisa y la inferencia continúa.

hooks_concurrentbool= True

Cuando es False, los hooks se serializan con un lock.

hooks_timeoutOptional[float]= None

Limita cada llamada de hook en segundos; None significa sin límite.

lang_temperaturesOptional[Dict[str, Dict[str, Any]]]= None

Sobrescrituras de temperatura por idioma opcionales, indexadas por código de idioma, cada una {"temperature": [3 floats], "temperature_by_options": {}}. Se aplican cuando se pasa un lang= a system_one/predict, replicando el Agent de PyTorch; de lo contrario, un cambio entre backends pierde la calibración.

calibrationOptional[str]= None

load_calibration

load_calibration(path: str) -> None

Lee en este agent un mapa JSON escrito por save_calibration.

Parámetros

pathstr

system_one

system_one(
    state: Union[str, dict, list],
    questions: Dict[str, Dict[str, Any]],
    lang: Optional[str] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: Optional[bool] = None,
    hooks_timeout: Optional[float] = None,
    max_len: Optional[int] = None,
    head_max_len: Optional[int] = None,
    min_confidence: Optional[float] = None,
) -> Dict[str, Any]

Evalúa preguntas tipadas a través del estado en una sola ejecución de sesión de ONNX Runtime.

lang selecciona una sobrescritura de temperatura por idioma (consulta lang_temperatures), coincidiendo con la firma de Agent.system_one de PyTorch, de modo que cualquiera de los dos backends es intercambiable por el otro.

Se define en términos de predict_batch, exactamente como el Agent.system_one de PyTorch, para que las rutas de un solo estado y por lotes no puedan divergir.

Parámetros

stateUnion[str, dict, list]

Cadena de texto, dict JSON o lista de turnos de conversación.

questionsDict[str, Dict[str, Any]]

Definiciones de preguntas, con las formas que acepta Agent.system_one.

langOptional[str]= None

Sobrescritura de temperatura por idioma (consulta lang_temperatures).

hooksHookArg= None

Hooks por llamada, añadidos después de los que haya instalados en el agent.

on_predict_startPredictHookArg= None

Un hook de inicio por llamada. Puede reescribir el estado/las preguntas o llamar a ctx.skip(...) para cortocircuitar la inferencia.

on_predict_endPredictHookArg= None

Un hook de fin por llamada. Puede reescribir los resultados.

hooks_raiseOptional[bool]= None

Sobrescribe el hooks_raise del agent para esta llamada.

hooks_timeoutOptional[float]= None

Sobrescribe el hooks_timeout del agent para esta llamada.

max_lenOptional[int]= None

Sobrescribe el max_len de la configuración para esta llamada.

head_max_lenOptional[int]= None

Sobrescribe el head_max_len de la configuración para esta llamada.

min_confidenceOptional[float]= None

Umbral de abstención opcional sobre answer_confidence (#361); una respuesta por debajo de él se devuelve marcada con low_confidence: True.

Devuelve

Diccionario con respuestas, probabilidades, confianza calibrada y uso de tokens.

Para puntuar muchos estados a la vez, consulta predict_batch, que comparte ejecuciones de sesión entre ellos.

predict_batch

predict_batch(
    states: List[Union[str, dict, list]],
    questions: Dict[str, Dict[str, Any]],
    batch_size: Optional[int] = None,
    lang: Optional[str] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: Optional[bool] = None,
    hooks_timeout: Optional[float] = None,
    max_len: Optional[int] = None,
    head_max_len: Optional[int] = None,
    sort_by_length: bool = False,
    min_confidence: Optional[float] = None,
) -> List[Dict[str, Any]]

Evalúa las mismas preguntas sobre muchos estados, compartiendo ejecuciones de sesión de ONNX Runtime.

La ruta de rendimiento, que replica laya.agent.Agent.predict_batch: system_one reúne las filas de pregunta de un estado por ejecución de sesión, así que N estados cuestan N ejecuciones. predict_batch reúne las filas de varios estados en una ejecución -- o ceil(len(states) / batch_size) de ellas -- que es donde el paralelismo propio de ONNX Runtime rinde en CPU.

Parámetros

statesList[Union[str, dict, list]]

Una lista de estados (cada uno una cadena de texto, un dict JSON o una lista de turnos de conversación). Las mismas questions se evalúan contra cada estado.

questionsDict[str, Dict[str, Any]]

Definiciones de preguntas, exactamente como las acepta system_one.

batch_sizeOptional[int]= None

Límite opcional de estados por ejecución de sesión. None los envía todos en una ejecución; establécelo para acotar la memoria máxima cuando agrupe muchos estados o estados largos.

langOptional[str]= None

Sobrescritura de temperatura por idioma aplicada a cada estado; consulta lang_temperatures.

hooksHookArg= None

Hooks por llamada, añadidos después de los que haya instalados en el agent.

on_predict_startPredictHookArg= None

Un hook de inicio por llamada. Puede reescribir los estados/las preguntas o llamar a ctx.skip(...) para cortocircuitar la inferencia.

on_predict_endPredictHookArg= None

Un hook de fin por llamada. Puede reescribir los resultados.

hooks_raiseOptional[bool]= None

Sobrescribe el hooks_raise del agent para esta llamada.

hooks_timeoutOptional[float]= None

Sobrescribe el hooks_timeout del agent para esta llamada.

max_lenOptional[int]= None

Sobrescribe el max_len de la configuración para esta llamada.

head_max_lenOptional[int]= None

Sobrescribe el head_max_len de la configuración para esta llamada.

sort_by_lengthbool= False

Agrupa estados codificados de tamaño similar en ventanas de ocho lotes para reducir el padding, exactamente como lo hace Agent.predict_batch. Requiere un batch_size explícito mayor que uno y menor que el número de estados; de lo contrario no tiene efecto. Los resultados conservan el orden de entrada. Cambiar las formas de los lotes puede alterar ligeramente las predicciones de punto flotante cerca de los umbrales de decisión.

min_confidenceOptional[float]= None

Umbral de abstención opcional sobre answer_confidence (#361); las respuestas por debajo de él se devuelven marcadas con low_confidence: True.

Devuelve

Una lista de dicts de resultado por estado, cada uno idéntico en forma a la salida de system_one y alineado con states por índice.

predict_long

predict_long(
    state: Union[str, dict, list],
    questions: Dict[str, Dict[str, Any]],
    window: Optional[int] = None,
    stride: Optional[int] = None,
    aggregate: str = "auto",
    batch_size: Optional[int] = None,
    lang: Optional[str] = None,
    hooks=None,
    on_predict_start=None,
    on_predict_end=None,
    hooks_raise: Optional[bool] = None,
    hooks_timeout: Optional[float] = None,
) -> Dict[str, Any]

Evalúa preguntas sobre un estado más largo que la ventana de contexto, escaneándolo en ventanas superpuestas y agregando por pregunta.

El port a ONNX de laya.agent.Agent.predict_long, con las mismas reglas de agregación: system_one trunca un estado que excede max_len a una sola ventana, descartando el resto en silencio. predict_long tokeniza el estado una vez, lo divide en ventanas de tokens superpuestas, puntúa cada ventana a través de predict_batch -- así las ventanas comparten ejecuciones de sesión de ONNX Runtime en lugar de costar una cada una -- y combina las respuestas por ventana:

  • noul -> P(true) es el máximo sobre las ventanas (la afirmación se sostiene si alguna ventana la respalda)
  • choice-> la respuesta de la única ventana más segura, para que una señal localizada no sea superada por las muchas ventanas neutras de las que en su mayoría se compone un documento largo
  • score -> el nivel de la ventana más segura, igualmente

La probabilidad/confianza devuelta es la de la ventana que decide, no un número calibrado para todo el documento, por las mismas razones que da el docstring de PyTorch. Cada respuesta lleva answer["window"] -- el index de la ventana que decide, token_start/token_end dentro del estado tokenizado, y el count de ventanas.

Un estado que ya cabe en una ventana se pasa directamente a system_one (salida idéntica).

Parámetros

stateUnion[str, dict, list]

Cadena de texto, dict JSON o lista de turnos de conversación.

questionsDict[str, Dict[str, Any]]

Definiciones de preguntas, exactamente como las acepta system_one.

windowOptional[int]= None

Tokens de estado por ventana. Por defecto es el presupuesto de estado por pregunta (max_len - head_max_len - 8). Las ventanas más pequeñas aíslan mejor una señal localizada a costa de más ventanas, como en Agent.predict_long.

strideOptional[int]= None

Paso de tokens entre ventanas. Por defecto es window // 2 (50% de superposición).

aggregatestr= "auto"

"auto" (las reglas por tipo anteriores) es el único modo por ahora.

batch_sizeOptional[int]= None

Límite de ventanas por ejecución de sesión, para acotar la memoria máxima en estados muy largos.

langOptional[str]= None

Selección de temperatura por idioma, como en system_one.

hooksHookArg= None

Hooks por llamada, añadidos después de los que haya instalados en el agent. Siguen el contrato de Agent.predict_long: envuelven la inferencia que responde al estado; un hook de inicio que responde con ctx.skip(...) obtiene usage["windows"] == 0 y ninguna atribución de ventana, y un escaneo reescrito se agrega sin answer["window"].

on_predict_startPredictHookArg= None

Un hook de inicio por llamada, como en system_one.

on_predict_endPredictHookArg= None

Un hook de fin por llamada, como en system_one.

hooks_raiseOptional[bool]= None

Sobrescribe el hooks_raise del agent para esta llamada.

hooks_timeoutOptional[float]= None

Sobrescribe el hooks_timeout del agent para esta llamada.

Devuelve un único dict de resultado, con la misma forma que system_one, con usage["windows"] añadido. A lo largo de varias ventanas, las claves de truncamiento se suman o se arrastran igual que en Agent.predict_long: truncated es un recuento de ventanas y truncated_questions es la lista de la última ventana, así que truncated puede ser mayor que 0 mientras la lista está vacía.

decide

decide(
    state: Union[str, dict, list],
    schema: Any = None,
    questions: Optional[Dict[str, Dict[str, Any]]] = None,
    return_details: bool = False,
    min_confidence: Optional[float] = None,
    predict_kwargs,
) -> Any

Responde a state contra un schema (JSON schema o modelo pydantic) y devuelve valores tipados.

Consulta laya.structured. Pasa exactamente uno de schema o questions; los argumentos de palabra clave adicionales se reenvían a predict / system_one.

Parámetros

stateUnion[str, dict, list]
schemaAny= None
questionsOptional[Dict[str, Dict[str, Any]]]= None
return_detailsbool= False
min_confidenceOptional[float]= None
predict_kwargs

decide_batch

decide_batch(
    states: List[Union[str, dict, list]],
    schema: Any = None,
    questions: Optional[Dict[str, Dict[str, Any]]] = None,
    return_details: bool = False,
    min_confidence: Optional[float] = None,
    predict_kwargs,
) -> List[Any]

Responde a muchos estados contra un schema a través de predict_batch; consulta laya.structured.

Parámetros

statesList[Union[str, dict, list]]
schemaAny= None
questionsOptional[Dict[str, Dict[str, Any]]]= None
return_detailsbool= False
min_confidenceOptional[float]= None
predict_kwargs

Exportación cuantizada

scripts/export_onnx.py --quantize escribe una copia cuantizada INT8 de solo pesos junto a la exportación fp32 (laya.onnx también produce laya.int8.onnx). La cuantización dinámica convierte los pesos de MatMul a int8 y calcula la escala de activación por entrada en tiempo de ejecución, así que no se necesita ningún conjunto de datos de calibración, y ONNXAgent carga el resultado apuntando onnx_path a él. En CPU es unas 2x más rápida que el modelo eager y ~1.8x más rápida que el grafo ONNX fp32, y 1.4-2.8x más pequeña según el checkpoint.

INT8 sacrifica precisión real, así que es una opción de tamaño/latencia, no gratuita: no la uses donde importen la probabilidad o la confianza calibrada. Las escalas son por tensor de forma predeterminada; --per-channel opta por pesos por canal, pero en la ruta dinámica eso hace colapsar el modelo de decisión (la concordancia con el modelo eager cayó a ~32% en el checkpoint en inglés y ~40% en el multilingüe, frente a ~67% / ~83% por tensor; consulta el issue #790). Incluso por tensor, la deriva es notable en el checkpoint más grande; un int8 seguro para la precisión necesitaría QAT o un tratamiento de valores atípicos al estilo SmoothQuant. El grafo int8 es solo para CPU: ONNX Runtime no tiene kernel INT8 MatMul en el CUDAExecutionProvider, y un proveedor de GPU recurre silenciosamente a un fallback por nodo.

python scripts/export_onnx.py --model convaiinnovations/laya --output laya.onnx --quantize