Documentação

Agent

laya.Agent carrega um checkpoint e responde a perguntas tipadas sobre um estado. laya.load é um atalho para Agent(...), e laya.RLAgent é um alias de Agent. O ONNXAgent executa um modelo ONNX exportado na CPU; importa-o de laya.onnx_agent.

Os nomes, tipos, valores predefinidos e código mantêm-se em inglês; o resto é traduzido (as entradas ainda não traduzidas são mostradas no original em inglês).

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",
)

Classes base: HookRegistry

Runtime do modelo de decisão System One: decisões rápidas, não autorregressivas e calibradas.

dtype é o alvo do autocast, não a precisão de cada chamada. No MPS uma chamada só faz autocast a partir de mps_amp_min_rows linhas, pelo que dtype pode dizer float16 enquanto uma chamada corre em float32. dtype_for(rows) devolve a precisão de uma chamada com rows linhas.

Carrega um checkpoint da Laya.

backend seleciona "eager", "auto", "compile" ou "tilelang"; consulta laya.backends. Tem prioridade sobre fast e compile. Omite-o para manter essas flags legadas. Para ONNX usa load(backend="onnx") em vez disso.

revision fixa opcionalmente a transferência do Hub a um commit SHA/ramo/etiqueta explícito; quando omitido, usam-se o valor predefinido normal do huggingface_hub e a cache offline existente. expected_sha256 ({path relative to the checkpoint dir: hexdigest}) verifica a integridade dos artefactos antes de qualquer peso ser analisado ou executado; é opcional e aplica-se também a diretórios locais. Um artefacto em falta lança FileNotFoundError e uma divergência de digest lança ValueError; qualquer dos dois erros recusa o carregamento.

fast=True substitui o forward do encoder/cabeça pelo caminho rápido do TileLang (apenas CUDA, requer pip install laya[fast]); consulta Agent.accelerate.

compile=True executa o modelo sob torch.compile e ativa o reference_compile do encoder do ModernBERT. O torch.compile especializa-se por forma de entrada e a Laya vê uma nova em quase todos os pedidos, pelo que esses grafos costumam custar mais do que rendem; usa-o quando o tráfego for repetitivo. fast=True tem prioridade, porque o caminho do TileLang substitui o forward que seria compilado. Agentes compilados executam warmup() antes de devolver; compile_warmup=False adia esse trabalho para os pedidos ou uma chamada manual a warmup(). Agentes eager e fast não mudam. compile_cache=True adota um diretório persistente do Inductor da Laya (em todo o processo), respeitando qualquer TORCHINDUCTOR_CACHE_DIR existente; consulta as notas de engenharia da compilação. compile_mode="reduce-overhead" adota grafos CUDA. Pode reter mais memória de GPU e regista cada nova forma em separado. As saídas CUDA são copiadas antes do próximo replay; as passagens com grafos CUDA compilados são serializadas. O modo predefinido continua "default".

subfolder seleciona um checkpoint de um repositório que empacota vários, p. ex. Agent("convaiinnovations/laya", subfolder="multilingual"). Apenas essa subpasta é transferida, pelo que o empacotamento não custa a cada utilizador a família inteira.

calibration é um caminho JSON opcional com temperature e temperature_by_options. É aplicado depois da configuração do checkpoint, pelo que um mapa ajustado sobrepõe os escalares distribuídos sem reescrever model.safetensors.

hooks / on_predict_start / on_predict_end observam ou moldam cada previsão; consulta laya.hooks. hooks_raise=False avisa e continua quando um hook falha, hooks_concurrent=False serializa os hooks que não são seguros de executar em paralelo, e hooks_timeout limita cada chamada de hook em segundos (None significa sem limite).

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

O backend de inferência ativo, incluindo as flags legadas compile e fast.

backend_object

backend_object

O objeto Backend instalado, ou None para um runtime legado.

set_backend

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

Troca de backends; os backends indisponíveis avisam e usam eager, a menos que strict=True.

As opções vão para o construtor do backend, p. ex. warmup=False para compile ou use_graphs=False para tilelang. A troca aguarda a inferência em curso.

Parâmetros

namestr= "auto"
strictbool= False
options

accelerate

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

Substitui o forward do modelo pelo caminho rápido do TileLang (kernels fundidos de GEMM/GEGLU/LayerNorm/RoPE, flash attention de janela deslizante, pesos residentes de 16 bits, grafos CUDA por cubo de forma).

O caminho rápido corre no dtype de autocast do agent no momento da chamada (bf16 ou fp16), pelo que coincide com o forward padrão que substitui dentro do arredondamento (consulta benchmarks/parity_fast.py). Depois de alterar agent.dtype, chama deaccelerate() e depois accelerate() para o reconstruir. Devolve True se ficar ativado. Com strict=False, qualquer falha (sem CUDA, falta o tilelang) deixa o caminho padrão no lugar.

Parâmetros

use_graphsbool= True
strictbool= False

warmup

warmup(shapes=None) -> float

Executa agora o forward sobre uma entrada sintética de cada forma e devolve os segundos que demorou.

compile=True chama isto ao carregar, a menos que compile_warmup=False. Formas adicionais podem ainda ser aquecidas manualmente. fast=True constrói os seus kernels e grafos CUDA por cubo de forma no primeiro uso; chamar isto antes de servir tira esse custo dos primeiros pedidos. Com o forward padrão são umas poucas passagens normais. shapes é uma lista de (rows, tokens, markers); os tokens são limitados ao max_len do agent. Não se devolve nem se regista nada para nenhum chamador, e os hooks não correm.

Parâmetros

shapes= None

deaccelerate

deaccelerate()

Restaura o forward padrão.

dtype_for

dtype_for(rows: int) -> torch.dtype

Precisão em que corre uma passagem com rows linhas de pergunta.

dtype é o alvo do autocast, definido uma vez no momento do carregamento. Se uma passagem faz autocast é decidido por chamada: no MPS só a partir de mps_amp_min_rows linhas. Isto devolve dtype quando uma passagem com rows linhas faz autocast, e torch.float32 quando não. Uma chamada a predict corre uma linha por pergunta.

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]]

Avalia as mesmas perguntas sobre muitos estados, empacotando-os em passagens partilhadas.

Este é o caminho de elevado débito. system_one/predict tratam de um estado por passagem; numa GPU isso deixa inativa a maior parte da dimensão de lote. predict_batch reúne as linhas de pergunta de vários estados num único tensor, pelo que uma chamada que levaria N passagens sequenciais leva uma (ou ceil(len(states) / batch_size)), o que é várias vezes mais rápido por decisão na GPU.

Parâmetros

statesList[Union[str, dict, list]]

Uma lista de estados (cada um uma cadeia de texto, um dict JSON ou uma lista de turnos de conversa). As mesmas questions são avaliadas contra cada estado.

questionsDict[str, Dict[str, Any]]

Definições de perguntas, exatamente como as aceita system_one.

batch_sizeOptional[int]= None

Limite opcional de estados por passagem. None envia-os todos numa só passagem; define-o para limitar a memória de pico ao agrupar muitos estados ou estados longos.

langOptional[str]= None
hooksHookArg= None

Hooks por chamada, acrescentados depois dos que estejam instalados no Agent. Consulta laya.hooks.

on_predict_startPredictHookArg= None

Um hook de início por chamada. Pode reescrever o estado/as perguntas ou chamar ctx.skip(...) para curto-circuitar a inferência.

on_predict_endPredictHookArg= None

Um hook de fim por chamada. Pode reescrever os resultados.

hooks_raiseOptional[bool]= None

Sobrepõe o hooks_raise do Agent para esta chamada.

hooks_timeoutOptional[float]= None

Sobrepõe o hooks_timeout do Agent para esta chamada.

max_lenOptional[int]= None

Sobrepõe o max_len da configuração do agent para esta chamada. Um hook de início também pode definir ctx.max_len para moldar o orçamento de tokens.

head_max_lenOptional[int]= None

Sobrepõe o head_max_len da configuração do agent para esta chamada. Um hook de início também pode definir ctx.head_max_len.

sort_by_lengthbool= False

Agrupa estados codificados de tamanho semelhante em janelas de oito lotes para reduzir o padding. Requer um batch_size explícito maior do que um e menor do que o número de estados; caso contrário não tem efeito. Os resultados mantêm a ordem de entrada. Isto coloca em buffer até oito lotes de estados tokenizados em vez de um. Alterar as formas dos lotes pode alterar ligeiramente as previsões de vírgula flutuante.

min_confidenceOptional[float]= None

Retorna

Uma lista de dicts de resultado por estado, cada um idêntico em forma à saída de system_one e alinhado com 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]

Avalia perguntas sobre um estado mais longo do que a janela de contexto, analisando-o em janelas sobrepostas e agregando por pergunta.

system_one/predict truncam um estado que excede max_len para uma única janela (a primeira, ou para uma lista de conversa a última), descartando o resto em silêncio. predict_long tokeniza o estado uma vez, divide-o em janelas de tokens sobrepostas, pontua cada janela em passagens partilhadas (através de predict_batch), e combina as respostas por janela:

  • noul -> P(true) é o máximo sobre as janelas (a afirmação mantém-se se alguma janela a apoiar)
  • choice-> a resposta da única janela mais confiante, para que um sinal localizado não seja superado pelas muitas janelas neutras de que um documento longo é maioritariamente feito (a média afoga-o -- a maioria neutra domina)
  • score -> o nível da janela mais confiante, igualmente

A probabilidade/confiança devolvida é a da janela que decide, não um número calibrado para todo o documento: um máximo de noul sobre muitas janelas sobe com o número de janelas mesmo sem sinal, e choice pode cair numa janela confiantemente neutra quando nada no documento é decisivo. Por isso cada resposta transporta answer["window"] — o index da janela que decide, token_start/token_end dentro do estado tokenizado, e o count de janelas — para que quem a chama possa inspecionar o troço de onde veio a resposta em vez de confiar no número bruto. Esse troço é o que o modelo leu, não apenas o que foi pedido: a janela é limitada ao espaço que as perguntas deixam, pelo que o que é entregue ao predict_batch não é cortado outra vez.

Um estado que já cabe numa janela é passado diretamente a system_one (saída idêntica).

Os hooks envolvem a inferência que responde ao estado, que para um documento que precisa de várias janelas é o único predict_batch partilhado sobre elas: on_predict_start dispara uma vez, e ctx.states contém os textos de janela descodificados por ordem de análise -- não o state do chamador, que foi tokenizado para os produzir. Do que a cadeia deixa atrás seguem-se três desfechos:

  • ctx.skip([result]) responde ao documento: a carga volta sem atribuição de janela e com usage["windows"] a 0, porque nada foi pontuado
  • uma análise deixada tal como este método a construiu: cada janela é pontuada, cada resposta transporta answer["window"], e usage["windows"] é o número de janelas
  • uma análise reescrita (ctx.states substituído, de qualquer forma): as respostas são agregadas sobre os estados que foram pontuados, mas nenhuma resposta transporta answer["window"] -- os deslocamentos acima descrevem as janelas deste método, não o texto que o modelo leu

Parâmetros

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

tokens de estado por janela. Por predefinição é o orçamento de estado do checkpoint (max_len - head_max_len - 8), e de qualquer forma é limitado ao espaço que as perguntas deixam para o estado dentro de max_len -- o menor espaço de entre eles, porque uma só lista de janelas é pontuada para cada pergunta. Uma janela mais ampla é re-truncada a caminho do modelo, pelo que é limitada em vez disso, com um RuntimeWarning quando é quem chama que a pediu. As opções são o que torna o espaço pequeno: no checkpoint em inglês, uma pergunta com 2 opções deixa 483 tokens para o estado e uma com 100 opções deixa 100. Uma janela mais pequena isola melhor um sinal localizado (um troço decisivo curto é uma fração maior da sua janela, pelo que essa janela o classifica com clareza), a troco de mais janelas; o valor predefinido grande favorece o contexto e o débito. noul é robusto a isto, choice/score beneficiam de uma janela mais pequena quando o troço decisivo é uma parte pequena de um documento longo e de resto neutro.

strideOptional[int]= None

passo de tokens entre janelas. Por predefinição é metade da janela efetiva (50% de sobreposição), pelo que um troço perto de um limite ainda cai inteiro dentro de alguma janela. Um passo além da janela efetiva é recusado em vez de limitado: os tokens entre cada par de janelas não seriam lidos por janela nenhuma, que é a falha que este método existe para evitar.

aggregatestr= "auto"

"auto" (as regras por tipo acima) é o único modo por agora.

batch_sizeOptional[int]= None

limite de janelas por passagem, para limitar a memória em estados muito longos.

langOptional[str]= None

seleção de temperatura por idioma, como em system_one.

hooksHookArg= None

Hooks por chamada, acrescentados depois dos que estejam instalados no Agent. Consulta laya.hooks.

on_predict_startPredictHookArg= None

Um hook de início por chamada, como em system_one.

on_predict_endPredictHookArg= None

Um hook de fim por chamada, como em system_one.

hooks_raiseOptional[bool]= None

Sobrepõe o hooks_raise do Agent para esta chamada.

hooks_timeoutOptional[float]= None

Sobrepõe o hooks_timeout do Agent para esta chamada.

Exceções

ValueError: aggregate é tudo menos "auto"; as opções das perguntas preenchem toda a sequência, não deixando espaço para o estado; ou stride passa além da janela efetiva, pelo que os tokens entre duas janelas não seriam lidos por nada.

Devolve um único dict de resultado, com a mesma forma que system_one, com usage["windows"] acrescentado. A chave está sempre presente e conta as janelas que o modelo pontuou para produzir a resposta: 1 para um estado que cabia numa janela, N para um documento analisado em N janelas sobrepostas (ou o N para que um hook de início as reescreveu), e 0 quando um hook de início respondeu ao documento, ou não deixou estados para pontuar, antes de qualquer janela ser lida -- em qualquer dos caminhos, pelo que uma resposta em cache nunca é lida como uma janela que o modelo leu.

Ao longo de várias janelas, as chaves de truncamento são combinadas como qualquer outro campo de usage: truncated, state_tokens e state_tokens_dropped são somados (pelo que truncated é o número de janelas que foram cortadas, e as contagens de tokens incluem a sobreposição), e truncated_questions é a lista da última janela. As duas podem discordar: quando só uma janela anterior foi cortada, truncated é acima de 0 e truncated_questions está vazia. Uma janela é cortada quando é maior do que o espaço que a cabeça de uma pergunta deixa. Testa usage["truncated"] > 0 aqui, não 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]

Avalia perguntas tipadas através do estado numa única passagem paralela.

Parâmetros

stateUnion[str, dict, list]

Cadeia de texto, dict JSON ou lista de turnos de conversa.

questionsDict[str, Dict[str, Any]]

Dicionário que mapeia question_id -> definição de pergunta.

  • 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"}}

    Os criteria e labels de Noul são opcionais. Os labels só controlam o texto mostrado ao modelo; as suas chaves conservam a semântica false/true, e o valor devolvido de noul é sempre P(true). Por compatibilidade, os labels assumem false/true por predefinição.

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

Retorna

Dicionário com respostas, probabilidades, confiança calibrada e uso de tokens. Perguntas vazias devolvem respostas vazias e uso de tokens zero sem tokenização nem passagem do modelo.

Quando o orçamento da cabeça deixa duas opções com o mesmo troço de tokens, usage transporta uma entrada options por cada pergunta em que tal aconteceu -- total, distinct e tokens_per_option -- porque uma resposta escolhida entre 42 troços distinguíveis de 58 tem um teto que é do orçamento e não do modelo. As perguntas cujas opções sobrevivem todas estão ausentes, pelo que um pedido que não colapsa nada fica inalterado.

usage também indica se o estado cabia: truncated, state_tokens, state_tokens_dropped, e truncated_questions (as perguntas cuja cabeça deixou espaço a menos). Quem chama e se importa se a resposta viu todo o estado deve ler usage["truncated"] em vez de estimar a partir do comprimento do que enviou.

Para pontuar muitos estados de uma vez, consulta predict_batch, que partilha passagens entre eles.

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 um schema (JSON schema ou modelo pydantic) e devolve valores tipados.

Consulta laya.structured. Passa exatamente um de schema ou questions; os argumentos de palavra-chave adicionais são reencaminhados para 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 muitos estados contra um schema (JSON schema ou modelo pydantic) numa única chamada em lote.

A variante de elevado débito de :meth:decide: o schema é planeado uma vez e as suas perguntas correm sobre cada estado através de :meth:predict_batch (passagens partilhadas, resultados por ordem de entrada), e depois as respostas de cada estado são projetadas como decide o faz. Os argumentos de palavra-chave adicionais (batch_size=, lang=, hooks=, ...) são reencaminhados para 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 registos de CPU e guarda-as neste agent.

records são (qtype, logits, target, k). Constrói-os com laya.calibrate.records_from_labeled quando tiveres forwards etiquetados; este método não transfere pesos nem escreve model.safetensors. seed só afeta a partição reservada de ECE quando compute_ece é true. O cfg do checkpoint fica como foi carregado.

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 um mapa de binning por histograma sobre as temperaturas ajustadas deste agent e guarda-o.

records são as mesmas tuplas (qtype, logits, target[, k]) que fit_temperatures consome. As chaves do mapa são exatamente como as de temperature_by_options, compõe-se sobre as temperaturas atuais e é escrito por save_calibration como binning_map.

Parâmetros

records
min_bucket_nint= MIN_BINNING_BUCKET_N
MIN_BINNING_BUCKET_N

save_calibration

save_calibration(path: str) -> None

Escreve as temperaturas e o checkpoint para que foram ajustadas. Não escreve os pesos.

Parâmetros

pathstr

load_calibration

load_calibration(path: str) -> None

Lê para este agent um mapa JSON escrito por save_calibration.

Um ficheiro sem version é tratado como versão 1 e é carregado mesmo assim. Um ficheiro mais recente cujo checkpoint registado não corresponde a este agent avisa mas é carregado mesmo assim. Os valores que não são números, ou que ficam fora de [TEMP_MIN, TEMP_MAX], são limitados com clamp_temperature, tal como no carregamento de um 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

Carrega um agent da Laya.

subfolder escolhe um checkpoint de um repositório que empacota vários:

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 também aceita um nome de checkpoint ou alias -- os mesmos que o Router resolve, pelo que os dois pontos de entrada leem uma única tabela:

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

Qualquer outra coisa (um id de repositório do Hub, um diretório local) é passada ao Agent sem alteração.

backend seleciona "auto", "eager", "compile", "tilelang" ou "onnx". ONNX devolve o ONNXAgent existente, com onnx_path (predefinição "laya.onnx"). Os outros backends usam Agent; um backend explícito tem prioridade sobre as flags legadas.

revision/expected_sha256 fixam e verificam os artefactos transferidos; consulta Agent. hooks / on_predict_start / on_predict_end observam ou moldam cada previsão; consulta laya.hooks. calibration é o mesmo caminho JSON opcional aceite por 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,
)

Classes base: HookRegistry

Runtime do modelo de decisão System One via ONNX: decisões rápidas otimizadas para CPU.

Carrega um agent da Laya assente no ONNX Runtime.

Parâmetros

model_id_or_pathstr

ID do HuggingFace Hub ou caminho local para o checkpoint original do PyTorch (usado para carregar o tokenizer e a configuração).

onnx_pathstr= "laya.onnx"

Caminho para o ficheiro .onnx exportado.

tokenOptional[str]= None

Token do HuggingFace opcional para um checkpoint privado ou restrito; caso não seja dado, recorre a $HF_TOKEN, exatamente como o Agent faz. Apenas o tokenizer e a configuração são obtidos -- o grafo em si é o onnx_path local.

subfolderOptional[str]= None

Subpasta opcional se transferir de um repositório empacotado.

revisionOptional[str]= None

Revisão do Hub opcional (commit SHA/ramo/etiqueta). Quando omitida, usam-se o valor predefinido normal do huggingface_hub e a cache offline existente.

expected_sha256Optional[Dict[str, str]]= None

{path relative to the checkpoint dir: hexdigest} opcional, verificado antes de qualquer ficheiro de checkpoint ser analisado; é opcional e aplica-se também a diretórios locais. Um artefacto em falta lança FileNotFoundError e uma divergência de digest lança ValueError; qualquer dos erros recusa o carregamento.

hooksHookArg= None

Hooks de previsão opcionais; consulta laya.hooks.

on_predict_startPredictHookArg= None

Um hook de início opcional, executado antes da inferência.

on_predict_endPredictHookArg= None

Um hook de fim opcional, executado depois da inferência.

hooks_raisebool= True

Quando é False, um hook que falha avisa e a inferência continua.

hooks_concurrentbool= True

Quando é False, os hooks são serializados com um lock.

hooks_timeoutOptional[float]= None

Limita cada chamada de hook em segundos; None significa sem limite.

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

Sobreposições de temperatura por idioma opcionais, indexadas por código de idioma, cada uma {"temperature": [3 floats], "temperature_by_options": {}}. Aplicadas quando um lang= é passado a system_one/predict, espelhando o Agent do PyTorch; caso contrário, uma troca entre backends perde a calibração.

calibrationOptional[str]= None

load_calibration

load_calibration(path: str) -> None

Lê para este agent um 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]

Avalia perguntas tipadas através do estado numa única execução de sessão do ONNX Runtime.

lang seleciona uma sobreposição de temperatura por idioma (consulta lang_temperatures), correspondendo à assinatura de Agent.system_one do PyTorch, para que qualquer dos backends seja substituível pelo outro.

É definido em termos de predict_batch, exatamente como o Agent.system_one do PyTorch, para que os caminhos de um único estado e em lote não possam divergir.

Parâmetros

stateUnion[str, dict, list]

Cadeia de texto, dict JSON ou lista de turnos de conversa.

questionsDict[str, Dict[str, Any]]

Definições de perguntas, com as formas que o Agent.system_one aceita.

langOptional[str]= None

Sobreposição de temperatura por idioma (consulta lang_temperatures).

hooksHookArg= None

Hooks por chamada, acrescentados depois dos que estejam instalados no agent.

on_predict_startPredictHookArg= None

Um hook de início por chamada. Pode reescrever o estado/as perguntas ou chamar ctx.skip(...) para curto-circuitar a inferência.

on_predict_endPredictHookArg= None

Um hook de fim por chamada. Pode reescrever os resultados.

hooks_raiseOptional[bool]= None

Sobrepõe o hooks_raise do agent para esta chamada.

hooks_timeoutOptional[float]= None

Sobrepõe o hooks_timeout do agent para esta chamada.

max_lenOptional[int]= None

Sobrepõe o max_len da configuração para esta chamada.

head_max_lenOptional[int]= None

Sobrepõe o head_max_len da configuração para esta chamada.

min_confidenceOptional[float]= None

Limiar de abstenção opcional sobre answer_confidence (#361); uma resposta abaixo dele é devolvida assinalada com low_confidence: True.

Retorna

Dicionário com respostas, probabilidades, confiança calibrada e uso de tokens.

Para pontuar muitos estados de uma vez, consulta predict_batch, que partilha execuções de sessão entre eles.

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]]

Avalia as mesmas perguntas sobre muitos estados, partilhando execuções de sessão do ONNX Runtime.

O caminho de elevado débito, que replica laya.agent.Agent.predict_batch: system_one reúne as linhas de pergunta de um estado por execução de sessão, pelo que N estados custam N execuções. predict_batch reúne as linhas de vários estados numa execução -- ou ceil(len(states) / batch_size) delas -- que é onde o paralelismo próprio do ONNX Runtime compensa na CPU.

Parâmetros

statesList[Union[str, dict, list]]

Uma lista de estados (cada um uma cadeia de texto, um dict JSON ou uma lista de turnos de conversa). As mesmas questions são avaliadas contra cada estado.

questionsDict[str, Dict[str, Any]]

Definições de perguntas, exatamente como as aceita system_one.

batch_sizeOptional[int]= None

Limite opcional de estados por execução de sessão. None envia-os todos numa só execução; define-o para limitar a memória de pico ao agrupar muitos estados ou estados longos.

langOptional[str]= None

Sobreposição de temperatura por idioma aplicada a cada estado; consulta lang_temperatures.

hooksHookArg= None

Hooks por chamada, acrescentados depois dos que estejam instalados no agent.

on_predict_startPredictHookArg= None

Um hook de início por chamada. Pode reescrever os estados/as perguntas ou chamar ctx.skip(...) para curto-circuitar a inferência.

on_predict_endPredictHookArg= None

Um hook de fim por chamada. Pode reescrever os resultados.

hooks_raiseOptional[bool]= None

Sobrepõe o hooks_raise do agent para esta chamada.

hooks_timeoutOptional[float]= None

Sobrepõe o hooks_timeout do agent para esta chamada.

max_lenOptional[int]= None

Sobrepõe o max_len da configuração para esta chamada.

head_max_lenOptional[int]= None

Sobrepõe o head_max_len da configuração para esta chamada.

sort_by_lengthbool= False

Agrupa estados codificados de tamanho semelhante em janelas de oito lotes para reduzir o padding, exatamente como o Agent.predict_batch faz. Requer um batch_size explícito maior do que um e menor do que o número de estados; caso contrário não tem efeito. Os resultados mantêm a ordem de entrada. Alterar as formas dos lotes pode alterar ligeiramente as previsões de vírgula flutuante perto dos limiares de decisão.

min_confidenceOptional[float]= None

Limiar de abstenção opcional sobre answer_confidence (#361); as respostas abaixo dele são devolvidas assinaladas com low_confidence: True.

Retorna

Uma lista de dicts de resultado por estado, cada um idêntico em forma à saída de system_one e alinhado com 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]

Avalia perguntas sobre um estado mais longo do que a janela de contexto, analisando-o em janelas sobrepostas e agregando por pergunta.

O port para ONNX de laya.agent.Agent.predict_long, com as mesmas regras de agregação: system_one trunca um estado que excede max_len para uma única janela, descartando o resto em silêncio. predict_long tokeniza o estado uma vez, divide-o em janelas de tokens sobrepostas, pontua cada janela através de predict_batch -- para que as janelas partilhem execuções de sessão do ONNX Runtime em vez de custarem uma cada -- e combina as respostas por janela:

  • noul -> P(true) é o máximo sobre as janelas (a afirmação mantém-se se alguma janela a apoiar)
  • choice-> a resposta da única janela mais confiante, para que um sinal localizado não seja superado pelas muitas janelas neutras de que um documento longo é maioritariamente feito
  • score -> o nível da janela mais confiante, igualmente

A probabilidade/confiança devolvida é a da janela que decide, não um número calibrado para todo o documento, pelos mesmos motivos que o docstring do PyTorch indica. Cada resposta transporta answer["window"] -- o index da janela que decide, token_start/token_end dentro do estado tokenizado, e o count de janelas.

Um estado que já cabe numa janela é passado diretamente a system_one (saída idêntica).

Parâmetros

stateUnion[str, dict, list]

Cadeia de texto, dict JSON ou lista de turnos de conversa.

questionsDict[str, Dict[str, Any]]

Definições de perguntas, exatamente como as aceita system_one.

windowOptional[int]= None

Tokens de estado por janela. Por predefinição é o orçamento de estado por pergunta (max_len - head_max_len - 8). As janelas mais pequenas isolam melhor um sinal localizado a troco de mais janelas, como em Agent.predict_long.

strideOptional[int]= None

Passo de tokens entre janelas. Por predefinição é window // 2 (50% de sobreposição).

aggregatestr= "auto"

"auto" (as regras por tipo acima) é o único modo por agora.

batch_sizeOptional[int]= None

Limite de janelas por execução de sessão, para limitar a memória de pico em estados muito longos.

langOptional[str]= None

Seleção de temperatura por idioma, como em system_one.

hooksHookArg= None

Hooks por chamada, acrescentados depois dos que estejam instalados no agent. Seguem o contrato de Agent.predict_long: envolvem a inferência que responde ao estado; um hook de início que responde com ctx.skip(...) obtém usage["windows"] == 0 e nenhuma atribuição de janela, e uma análise reescrita é agregada sem answer["window"].

on_predict_startPredictHookArg= None

Um hook de início por chamada, como em system_one.

on_predict_endPredictHookArg= None

Um hook de fim por chamada, como em system_one.

hooks_raiseOptional[bool]= None

Sobrepõe o hooks_raise do agent para esta chamada.

hooks_timeoutOptional[float]= None

Sobrepõe o hooks_timeout do agent para esta chamada.

Devolve um único dict de resultado, com a mesma forma que system_one, com usage["windows"] acrescentado. Ao longo de várias janelas, as chaves de truncamento são somadas ou transportadas da mesma forma que em Agent.predict_long: truncated é uma contagem de janelas e truncated_questions é a lista da última janela, pelo que truncated pode ser acima de 0 enquanto a lista está vazia.

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 um schema (JSON schema ou modelo pydantic) e devolve valores tipados.

Consulta laya.structured. Passa exatamente um de schema ou questions; os argumentos de palavra-chave adicionais são reencaminhados para 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 muitos estados contra um schema atravé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

Exportação quantizada

scripts/export_onnx.py --quantize escreve uma cópia quantizada INT8 apenas de pesos ao lado da exportação fp32 (laya.onnx também produz laya.int8.onnx). A quantização dinâmica converte os pesos MatMul para int8 e calcula a escala de ativação por entrada em tempo de execução, pelo que não é preciso um conjunto de dados de calibração, e o ONNXAgent carrega o resultado apontando onnx_path para ele. Na CPU, é cerca de 2x mais rápida do que o modelo eager e ~1.8x mais rápida do que o grafo ONNX fp32, e 1.4-2.8x mais pequena consoante o checkpoint.

O INT8 troca precisão real, por isso é uma opção de tamanho/latência, não gratuita — não a uses onde a probabilidade ou a confiança calibrada importa. As escalas são por tensor por predefinição; --per-channel opta por pesos por canal, mas no caminho dinâmico isso colapsa o modelo de decisão (a concordância com o modelo eager caiu para ~32% no checkpoint inglês e ~40% no multilingue, contra ~67% / ~83% por tensor; vê o issue #790). Mesmo por tensor, o desvio é notório no checkpoint maior; um int8 seguro para a precisão precisaria de QAT ou de um tratamento de valores atípicos ao estilo SmoothQuant. O grafo int8 é só para CPU: o ONNX Runtime não tem kernel INT8 MatMul no CUDAExecutionProvider, e um fornecedor de GPU faz fallback silenciosamente por nó.

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