Laya β€” Minimal Snapshot (English Checkpoint)

This repository is a minimalist snapshot of the convaiinnovations/laya model hub. It keeps only the English base checkpoint (laya, ModernBERT-large backbone, 421M params) together with the files needed to run and fine-tune it.

Upstream:

What was removed

  • multilingual/ and typed-decisions/ checkpoints (~1.4 GB of weights)
  • Benchmark images and eval results (assets/, eval/)
  • Legacy research scripts (rl_agent_api.py, email_utils.py)

The English weights themselves are byte-identical to the upstream snapshot β€” this repo does not modify, retrain, or re-quantize the original model in any way. It is simply a trimmed copy, ideal for pulling the model onto a device with limited disk space (~810 MB total, fully standalone and offline-capable).

The multilingual and typed-decisions checkpoints remain available from the upstream hub if you ever need them.

Layout

config.json                  model marker (architectures: LayaTypedDecisions)
model.safetensors            full weights: encoder + decision heads (~804 MB)
rl_agent_config.json         hyperparameters and calibration temperatures
encoder/config.json          ModernBERT-large architecture config
tokenizer/                   tokenizer.json + tokenizer_config.json
rl_common.py                 training reference (RLCD: model build, rewards, metrics)
test.py                      standalone smoke test

Quickstart

pip install laya

The checkpoint is fully self-contained: the model.safetensors already embeds the ModernBERT-large encoder, so nothing is downloaded from the Hugging Face hub at load time.

import os
os.environ["HF_HUB_OFFLINE"] = "1"  # run fully offline

import laya

agent = laya.load(".")  # loads this directory

Concrete example (test.py)

Non-autoregressive typed decisions over a state, all questions answered in a single forward pass:

import os
os.environ["HF_HUB_OFFLINE"] = "1"
import laya
import time

# Load the local checkpoint
agent = laya.load(".")

# State to evaluate
article = ("By 2031, artificial intelligences no longer merely answer: they anticipate, "
           "negotiate and sometimes push back. In newsrooms, hospitals and courtrooms, "
           "autonomous agents propose decisions, draft summaries and flag their own "
           "uncertainty. Some observers speak of a 'second cognitive wave': systems capable "
           "of doubting, asking for clarification and refusing a poorly specified task. "
           "Others worry about a silent dependency, where humans approve without truly "
           "understanding. One thing is certain: the question is no longer whether AIs "
           "think, but how we will coexist with them.")

# Typed questions (choice / score / noul)
payload = {
    "tone": {
        "type": "choice",
        "instructions": "What is the dominant tone of `body`?",
        "criteria": {
            "neutral": "factual account, no judgment",
            "alarmist": "emphasis on risks and dangers",
            "enthusiastic": "emphasis on promises and benefits"
        }
    },
    "domain_coverage": {
        "type": "score",
        "instructions": "How many distinct application domains are covered in `body`?",
        "criteria": ["none", "one", "two", "three or more"]
    },
    "mentions_doubt": {
        "type": "noul",
        "instructions": "Does the text mention AIs' ability to doubt or flag their own uncertainty?"
    }
}

# One single forward pass for all questions
timer = time.perf_counter()
result = agent.predict({"body": article}, payload)

for name in payload:
    qtype = payload[name]["type"]
    print(payload[name]["instructions"])
    print("->", result["answers"][name][qtype], "\n")

print(f"Duration: {((time.perf_counter() - timer) * 1000):.2f} ms")

Expected output:

What is the dominant tone of `body`?
-> neutral

How many distinct application domains are covered in `body`?
-> 3

Does the text mention AIs' ability to doubt or flag their own uncertainty?
-> 0.98...

Fine-tuning (French)

This snapshot is prepared for fine-tuning on French data:

  • rl_common.py keeps the upstream RLCD training code (model construction, strictly-proper scoring rewards, metrics) as a reference.
  • Default config: max_len=512, head_max_len=192 β€” raise agent.cfg["max_len"] if your French documents are long (ModernBERT handles up to 8,192 tokens with RoPE).
  • Tip: refit the calibration temperatures in rl_agent_config.json on your own French eval set before trusting the probabilities (see the upstream fine-tuning notebook).

License

Apache-2.0 β€” unchanged from the upstream convaiinnovations/laya checkpoint. All credit for the model, training recipe (RLCD), and original documentation goes to Convai Innovations and the upstream authors.

Downloads last month
25
Safetensors
Model size
0.4B params
Tensor type
F32
Β·
F16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support