From: convaiinnovations <huggingface.co/convaiinnovations>Newsgroups: alt.freeweights.visionSubject:

laya

Date: 2026-11-15Commit: 85cc74dSigned: 2DC28CC7B26A283B ✓

Text classification model with 421M parameters. Safetensors weights, 2.37 GB in all. Published by convaiinnovations under Apache-2.0.

421M params2.37GBlayasafetensorspermissive
FactsParams421MSize2.37 GBFormatssafetensorsTasktext classificationLicenseApache-2.0From sourcepermissive
$ fw get convaiinnovations/laya
# manifest sha256 763487d0885b… · 2.37 GB · 39 files
$ fw verify ./laya convaiinnovations/laya
From sourceHosted (signed)convaiinnovations/layaLast check: 2026-11-15 02:40 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Works with

Runs with

Ranked by fit to this model (safetensors), then by GitHub stars.

Overview

Size
2.37 GB
Weights
2.33 GB (safetensors)
Parameters
421M
Formats
safetensors
Task
text classification
License
Apache-2.0 (permissive)
Files
39, each with a sha256
Publisher
convaiinnovations
Added
2026-11-15
Section
alt.freeweights.vision
Lineage

Original release from the publisher.

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:40 UTCpassed

Model card

From the publisher at commit 85cc74d. Shown as plain text with links; images open at the publisher.

Laya#

Cite this work. M, N.; M, A. From Laya to Vega: Open Non-Autoregressive Decision Models with Calibrated Probabilities. Preprints 2026, 2026110781. https://doi.org/10.20944/preprints202611.0781.v1

BibTeX

@article{m2026laya_vega,
  title   = {From Laya to Vega: Open Non-Autoregressive Decision Models with Calibrated Probabilities},
  author  = {M, N. and M, A.},
  journal = {Preprints},
  year    = {2026},
  pages   = {2026110781},
  doi     = {10.20944/preprints202611.0781.v1},
  url     = {https://doi.org/10.20944/preprints202611.0781.v1}
}

Multilingual, non-autoregressive System 1 decision model. Give it a state (text, email, ticket, or JSON) and typed questions; it returns typed answers with mathematically calibrated probabilities in a single forward pass (~33 ms) across 100+ languages. Trained with reinforcement learning against strictly proper scoring rules (RLCD), so reporting honest probabilities is the only way to maximise reward. It never generates text, so there is nothing to parse and nothing to hallucinate.

Installation#

pip install laya

Python 3.10 or newer. Optional extras: laya[serve] (HTTP server), laya[mcp] (MCP server), laya[langchain] (LangChain and LangGraph), laya[onnx] (ONNX Runtime), laya[fast] (TileLang GPU fast path). Platform-by-platform setup is in the GitHub README.

Long documents. laya-multilingual reads up to 8,192 tokens with max_len=8192. Measured accuracy and time by document length (benchmark script):

Image: laya-multilingual long-document accuracy by document length

Quickstart#

Long documents: laya-multilingual reads up to 8,192 tokens. It ships with a 1,024-token limit that cuts long documents off, so pass max_len=8192 for them:

result = router.predict(long_document, questions, model="multilingual", max_len=8192)

In the table above, 16 to 18 of 20 requests were answered correctly with up to about 4,000 tokens of text before them; beyond that results vary (8 to 17 of 20), so check long-document accuracy on your own data. Short inputs give identical answers with max_len=8192, and speed follows the input's real length, not the limit: short inputs are unchanged, and a 4,000-token input takes about 1.7 s on an Apple GPU. Name the checkpoint with model="multilingual", since long mostly-English text would otherwise route to the English checkpoint.

from laya import Router

router = Router()  # downloads a checkpoint on first use; Router(preload=True) loads all three up front

state = "Hi, we were billed twice for March. Please refund the duplicate today or we will cancel our plan."
questions = {
    "department": {"type": "choice", "instructions": "Which department should handle this?",
                   "criteria": {"billing": "invoices, payments, refunds",
                                "technical": "bugs, outages, system errors",
                                "other": "everything else"}},
    "urgency": {"type": "score", "instructions": "How urgent is this?",
                "criteria": ["not urgent", "soon", "blocking"]},
    "churn_risk": {"type": "noul", "instructions": "Does the user threaten to cancel or leave?"},
}

result = router.predict(state, questions)
print(result["answers"]["department"]["choice"])  # billing
print(result["answers"]["churn_risk"]["noul"])    # probability the answer is yes
print(result["routing"]["model"])                 # english

The same call works in any of 100+ languages. The Router detects the script and language and sends non-English text to laya-multilingual:

for text in ["मुझसे मार्च में दो बार शुल्क लिया गया, कृपया डुप्लिकेट राशि वापस करें।",
             "La aplicación se cierra cada vez que abro la configuración."]:
    r = router.predict(text, {"department": questions["department"]})
    print(r["routing"]["model"], r["answers"]["department"]["choice"])
# multilingual billing
# multilingual technical

Fine-tune for better accuracy#

The shipped checkpoints work zero-shot, but fine-tuning on decisions from your own domain is where accuracy jumps. On the typed-decisions benchmark (2,000 decisions across four workflows), the fine-tuned laya-typed-decisions checkpoint scores 0.766 accuracy, against 0.362 for the base English checkpoint on the same decisions.

Fine-tuning notebook: runs the whole loop on Kaggle's free 2x T4 GPUs (build the dataset, train, fit calibration temperatures, evaluate, and push the result to the Hub). Details in the GitHub README.

Documentation#

nandhakishorm.github.io/laya: guides for prediction hooks, schema-driven decisions, Docker and LangChain and LangGraph, plus a full API reference.

What's new in laya 0.3.20#

The checkpoints themselves are unchanged. pip install -U laya for the latest runtime fixes:

  • Long documents with max_len=8192 on laya-multilingual: a measured table shows accuracy and time by document length.
  • Sturdier fast path. After a CUDA out-of-memory error the fallback to CPU switches the TileLang fast path off first, a single-option choice no longer crashes it, and concurrent calls can no longer overwrite each other's CUDA-graph buffers.
  • Server and runtime. laya-serve drains its inference pool on shutdown and returns 401 for a malformed bearer header, and ONNXAgent matches Agent on empty question sets and long conversation lists.

Image: Laya versus TypeSafe Jev: accuracy, every application workflow, all 51 languages, speed, calibration and routing cost

This repo holds all three checkpoints and is the hub for the family. The English checkpoint is at the repo root; the other two are bundled subfolders, and only the one you request is downloaded:

CheckpointBackbone EncoderParamsContextBest at
convaiinnovations/laya (this repo root)ModernBERT-large421M512English text, guardrails, email triage
convaiinnovations/laya-multilingualmmBERT-base322M1024 (up to 8k)100+ languages, ~2.2x faster
convaiinnovations/laya-typed-decisionsModernBERT-large421M1024the four typed-decisions workflows (0.766 acc)

Laya's built-in Router is the recommended way to use Laya in production. It evaluates any state in any language, automatically detects scripts and languages in sub-milliseconds, and dispatches to the optimal checkpoint in a single forward pass.

pip install laya
import laya
from laya import Router

# Preload checkpoints into memory for instant sub-35ms routing
router = Router(preload=True)

state = {
    "from": "user@acme.com",
    "subject": "Duplicate charge on invoice #4411",
    "body": "Hi, we were billed twice for March. Please refund the duplicate today or we will cancel our plan."
}

questions = {
    "department": {
        "type": "choice",
        "instructions": "Which department should handle this request?",
        "criteria": {
            "billing": "invoices, payments, refunds",
            "technical": "bugs, outages, system errors",
            "sales": "pricing, new contracts",
            "other": "everything else"
        }
    },
    "urgency": {
        "type": "score",
        "instructions": "How urgent is this request?",
        "criteria": ["not urgent", "soon", "critical deadline or blocking issue"]
    },
    "churn_risk": {
        "type": "noul",
        "instructions": "Does the user threaten to cancel or leave?"
    },
    "refund_requested": {
        "type": "noul",
        "instructions": "Does the user explicitly request a refund?"
    }
}

# 1. English state -> automatically routed to ModernBERT-large (39.5 ms)
res_en = router.predict(state, questions)
print("Department :", res_en["answers"]["department"]["choice"])  # -> billing (confidence: 0.94)
print("Routing    :", res_en["routing"]["model"])                 # -> english

# 2. Hindi state -> automatically routed to mmBERT-base (100+ languages, 32.8 ms)
res_hi = router.predict({"body": "मुझसे दो बार शुल्क लिया गया, कृपया पैसे वापस करें।"}, questions)
print("Department :", res_hi["answers"]["department"]["choice"])  # -> billing (confidence: 0.86)
print("Routing    :", res_hi["routing"]["model"])                 # -> multilingual

# 3. Explicit override when you already know the checkpoint
res_td = router.predict(state, questions, model="typed-decisions")

Every result carries full routing metadata explaining why the choice was made:

res_hi["routing"]
# {
#   'model': 'multilingual',
#   'repo': 'convaiinnovations/laya/multilingual',
#   'reason': 'non-Latin script (devanagari, 100% of letters); the English checkpoint cannot read it'
# }
Why Route: The Evidence#

On a shared benchmark (17,416 questions, one T4 GPU, identical questions per model):

Benchmark / TaskEnglish (laya)Multilingual (laya-multilingual)Router (Routed)
MASSIVE intent, English0.7830.6570.783
MASSIVE intent, 13 other languages0.3060.4510.451
XNLI, English0.8600.8430.860
XNLI, 14 other languages0.5210.7310.731
Languages usable (>3x random)23 / 5145 / 5145 / 51
Latency, 1 question (T4 GPU)39.5 ms32.8 ms32.8 ms
Latency, 10 questions batched158.6 ms72.3 ms72.3 ms

The English checkpoint collapses on non-Latin scripts (Khmer scores 0.000 accuracy at 0.952 confidence). Because the model stays confident while being wrong, confidence gating cannot save you. Router detects the script in <0.5 ms pure Python before the forward pass.

Supplying your own language detection#

If you already run a language-identification model, pass its answer instead of relying on the built-in heuristic. lang_guess takes a language code or a callable, is checked after an explicit lang= and before detection, and a callable that returns None falls through to detection:

router.predict(state, questions, lang_guess="ro")              # a code you already know
router = Router(preload=True, lang_guess=my_lid)               # or install one for every request
Production Preload & Memory#

A cold checkpoint build costs seconds; language detection costs microseconds. The lazy default keeps two checkpoints resident (english and multilingual, the only two automatic routing chooses between), so after each language's first load a switch costs detection only. A single-language deployment never builds the second. max_loaded=1 rebuilds on every switch (measured at a 7.4 s median reload on CPU and 10.3 s on T4).

For a server or a demo, preload:

# Every checkpoint resident in memory; language flips cost detection only (<1 ms)
router = Router(preload=True)
router = Router(preload=True, device="cuda")

# Or preload only the specific checkpoints you serve:
router.preload(["english", "multilingual"])

# If your app already built an agent, attach it to avoid duplicate VRAM:
router.attach("english", existing_agent)

# Manage resident memory (default keeps two hot: english + multilingual, LRU eviction)
router = Router(max_loaded=3)       # all three hot, e.g. with auto_task_detection
router = Router(max_loaded=1)       # memory-constrained host, reloads on every switch
router.unload()                     # free memory

with Router() as r:                 # releases the models when the block ends
    r.predict(state, questions)
Deployment ModePer-Request LatencyModel Reloads
Router() (lazy, max_loaded=2)detection only (<1 ms) after each language's first load1 the first time a language appears
Router(max_loaded=1)7 to 10 s on every language switch1 per switch
Router(preload=True)32.8 ms (GPU) / 193–464 ms (CPU)none

Single-Model Mode (Direct SDK)#

If you only need a single checkpoint for a dedicated pipeline:

import laya

# 1. Load from the repo root or subfolders (downloads only the requested weights)
agent = laya.load("convaiinnovations/laya")                           # English root (~808 MB)
agent_ml = laya.load("convaiinnovations/laya", subfolder="multilingual") # 100+ languages (~647 MB)
agent_td = laya.load("convaiinnovations/laya", subfolder="typed-decisions")

# 2. Run all questions in ONE single forward pass (~35 ms on GPU)
result = agent.predict(state, questions)
answers = result["answers"]

print("Department :", answers["department"]["choice"])   # -> billing (confidence: 0.94)
print("Urgency    :", answers["urgency"]["score"])        # -> 1.84 / 2.0
print("Churn Risk :", answers["churn_risk"]["noul"])       # -> 0.892 (89.2% probability)

If laya.load() hangs: transformers probes for TensorFlow at import, and when TF is installed its abseil runtime can deadlock model construction. Run with USE_TF=0.


Self-hosting: Jev-compatible HTTP server#

laya-serve exposes the Router on the same POST /v1/systemone request and response shape as TypeSafe Jev, so existing TypeSafe clients work by changing their base URL:

pip install "laya[serve]"
LAYA_DEVICE=cuda LAYA_PRELOAD=1 laya-serve        # 0.0.0.0:8000, preloads the checkpoints
curl -s localhost:8000/v1/systemone -H 'Content-Type: application/json' -d '{
  "state": {"document": "I was charged twice. Please fix this ASAP."},
  "questions": {"billing": {"type": "noul", "instructions": "Is this ticket about billing?"}}
}'

It accepts every question shape the Jev API does (for example criteria as a list), ignores unknown fields, and returns a 422 naming the problem for a malformed question. It binds 0.0.0.0 with no authentication unless LAYA_API_KEY is set, in which case it requires Authorization: Bearer <key>.


Architecture#

  • Backbone: ModernBERT-large (395M, bidirectional, fully fine-tuned) + a decision head trained from scratch: 2 transformer layers, an option-marker scorer, and an act/escalate head. 421M total. (Multilingual uses mmBERT-base, 22 layers, 256k vocab, 322M total).
  • Option markers: Every option is scored at its own [MASK] token, then softmaxed over that question's options. The answer space is defined at request time, so new schemas need no retraining.
  • Budget: 512 tokens per question for English (head_max_len = 192); 1024 tokens for multilingual (head_max_len = 256).
  • Batching: Every question in a call is answered in one single forward pass.

Training#

RLCD (Reinforcement Learning for Calibrated Decisions). The policy reports a distribution; exploration adds zero-mean Gaussian noise to the logits; the reward is a strictly proper scoring rule (log + spherical, plus ranked probability score for ordinal questions). Expected reward is maximised only by reporting honest probabilities. Updates are REINFORCE with a group-mean baseline (GRPO-style). Multi-turn conversations use TD(λ=1.0) over prefix slices.


Benchmarks#

Measured on a Tesla T4; every checkpoint answered byte-identical questions in the same run.

Speed#
questions per calllayalaya-multilingual
139.5 ms32.8 ms
584.5 ms40.1 ms
10158.6 ms (15.9 ms/q)72.3 ms (7.2 ms/q)
50771 ms337 ms (6.8 ms/q)

103–332 questions/sec batched on a single T4. For reference, TypeSafe Jev has been independently measured at 236–276 ms p50 (AbdelStark, nibzard), so Laya answers a single question roughly 6–8× faster.

Laya (with routing) vs TypeSafe Jev#

Every Laya figure is what Router().predict(...) returns — the checkpoint the router selects for that input. Jev figures are third-party published, never measured here (no TypeSafe API access); sample sizes and prompts differ.

Benchmark / MetricTypeSafe Jev 1.13.0Laya (routed)Comparison
typed-decisions, 2,000 decisions0.7270.766+0.039 (beats 0.735 teacher ceiling)
AG News, 4 labels0.9100.950+0.040
DAIR Emotion, 6 labels0.4800.595+0.115
Banking77 (72 vs 77 labels)0.8700.425Jev leads on >20 options
ECE (lower better)0.2460.0813× better (post-temperature)
p50 latency, 1 question236–276 ms32.8 ms7.8× faster
Languages usable (>3x random)no published benchmark45 of 51Global language coverage
Weightsclosed APIApache 2.0Open weights, on-premise capable
Cost$0.042 / 1M tokens$0 self-hosted100% free

On DAIR Emotion, Jev assigned zero probability to the true label on 16% of examples.

Where Jev leads#
  • High-cardinality label spaces (>20 options at default settings): On Banking77, Jev scores 0.870 (on 72 labels) while Laya scores 0.425 (on 77 labels at default 256-token head budget). Options share a fixed head_max_len budget (192 tokens on English, 256 on multilingual), so 77 options receive only ~3 to 4 tokens per label, causing text to become indistinguishable. Jev supports up to 255 options out-of-the-box. While laya-multilingual supports 1,024 context (and up to 8,192 in the encoder) and you can raise agent.cfg["head_max_len"] = 512 at runtime, Jev is currently better suited for 50+ options in a single prompt without tuning.
  • Soft distribution matching: On typed-decisions, while Laya achieves higher argmax accuracy (0.766 vs 0.727), Jev achieves higher soft accuracy (0.580 vs 0.471) against the teacher's full probability distributions.
  • Out-of-the-box raw calibration: Before temperature scaling, the base checkpoint has higher raw ECE (0.213 vs 0.144). Laya achieves its 0.081 ECE after domain temperature fitting.

Full report: BENCHMARKS.md.

typed-decisions, measured on all three checkpoints#

400 cases, 2,000 decisions, four workflows — measured here.

modelaccuracysoft accBrierECEscore MAE
laya-typed-decisions0.7660.4710.0620.2130.242
laya0.3620.3320.3160.1750.694
laya-multilingual0.3420.3260.4390.2850.687
Jev 1.13.0 (published)0.7270.5800.1480.1440.391
teacher self-agreement ceiling0.735
per-question majority class0.461

The fine-tuned checkpoint clears the teacher ceiling and wins all four workflows: invoice processing 0.804, security incidents 0.766, customer service 0.764, agent-trace observability 0.730. By primitive: noul 0.857, choice 0.733, score 0.723.

The base checkpoints sit below the majority-class baseline here — the capability on this benchmark comes from fine-tuning, which is what the fine-tuning notebook is for.


Honest Limits#

  • Base checkpoints are near chance on typed-decisions zero-shot — 0.362 here and 0.352 for multilingual, against a 0.318 random and 0.461 majority-class baseline. The 0.766 belongs to the checkpoint fine-tuned on that benchmark's own training split. Laya is a fast base to specialise, not a zero-shot decision engine.
  • High-cardinality choice questions and token budgets: Sequences split into an option prompt budget (head_max_len) and the remaining document/state budget (max_len - head_max_len):
    • laya (English) defaults to 512 context (head_max_len = 192, ~320 tokens for state).
    • laya-multilingual and laya-typed-decisions default to 1,024 context (head_max_len = 256, ~768 tokens for state; mmBERT-base encoder supports up to 8,192 with RoPE). At default settings, a 77-option question like Banking77 allocates only (256 - 16) // 77 ≈ 3–4 tokens per label, causing accuracy to fall off sharply (0.425 vs Jev's 0.870). If evaluating 50+ options in a single question:
    • Raise agent.cfg["head_max_len"] = 512 and agent.cfg["max_len"] = 1024 (or up to 2048 / 4096 / 8192) so every option has enough tokens to remain distinct.
    • Or split large option sets into a two-step coarse-to-fine hierarchical choice.
  • Ordinal score questions are the weakest primitive (SST-5 0.372).
  • noul can follow its option labels instead of the state, most strongly on this English checkpoint. noul renders its two options as false: / true:, and here that label pair can dominate the answer, returning a confident "no" for clearly positive input (#156). Check noul answers on your own data. If they look stuck, ask the same question as a two-option choice with neutral keys and your yes/no wording as the descriptions:
  {"type": "choice", "instructions": "Is this review positive?",
   "criteria": {"A": "yes, the review is positive", "B": "no, the review is negative"}}
  • action.act_probability carries no usable signal yet (#185). It reads 1.0 for almost every input, and its raw logits run against correctness (AUROC 0.30 on 396 labelled decisions). Gate on confidence instead, which reaches an AUROC of 0.77 on the same items.
  • Ships over-confident: Refitting one temperature per (question type, option count) moves mean ECE 0.466 → 0.081 (laya) and 0.314 → 0.106 (laya-multilingual). Do this on your own data before trusting the probabilities.
  • English only on root: Use laya-multilingual for anything outside English.

Apache 2.0 · Convai Innovations

Files

39 files · 2.37 GBWeights 2.33 GB (safetensors). Sizes and sha256 from the signed manifest.
Show all 39 files with their sha256
FileSizesha256
.gitattributes1.91 KB4df0e0949c31f080be9a0ccce253e9b176ddbdd953e97796607ff2a20bc5ec7c
README.md23.9 KB20f96041d6a50a69db0163aa481afb0906267a19620bdc669fa5f4a9abc86422
assets/laya_benchmark.png261 KBe01e49f0d842b4616e44c4c9a0feb92a9ae45efeb533f8f838888715dc89c2b9
assets/laya_benchmark_common.png278 KB183b0b17e8d90e091582e415d9f1da0ef34b40c3db6ccd2c8bbfd2b9232b95a6
assets/laya_vs_jev.png216 KB5c06517ea7f3e5f3f84873ddaa3cb470f101ad0276f921c58886f8fb12fbe0a8
assets/laya_vs_jev_full.png487 KBee47b751d524a0bb65159e026141b4ce70cc83d03b14df8ec68afbc7bcdb95b3
assets/logo-lockup-dark.png27.7 KBe683b423cf4f13961fced54a29fad6bb8bb733a0bfc28960c011f8b9f773ca7c
assets/logo-lockup-dark.svg1.59 KB40c23ec9db5837c09e5ef7d6dc46ffda8eda28f50d2040936e23e882b9c46b93
assets/logo-lockup.png26.8 KBe0235069e914c7889612fcba8b0a8c82133a6ee8a871c9076e867c22fa156f4d
assets/logo-lockup.svg1.59 KBa1f8e8b98fbcc7cd410e42ba997548c01fe780217d82678a38d24a39e6365821
assets/logo-mark-ink.png17.4 KBf542388fb4ddaf5f1afe44db8fead9303f75ba38913a0b94654976a89c6f6b35
assets/logo-mark-ink.svg1.32 KBc95f251f6e7fe888995763645d8ad351323f64fa0eff7d8d17f65aac90e0108c
assets/logo-mark-mono.svg1.38 KBc8d281d8a6c9ae3d0c2864e291ce9a463f50f8f52b5ef1b271d3c277b7a75c28
assets/logo-mark.png18.0 KBbb04c3ec2afbf455d81f73512e79fce1bc910444e3258335e66305d3ab969367
assets/logo-mark.svg1.32 KB377539eb0f4255bc27fb53afffaa1b9e1acffafa4f3699c6a673dafd8b7bd870
config.json160 B7add7c041b53f7091e65908553af79ab3f077946e5f2312d510ae13b17c7c134
email_utils.py3.94 KB1b1c0a6e23251ac8cae81e723bc98a31ca5483522c742937e263c2ecee42f343
encoder/config.json2.08 KBbf3ab80598fdccf414855a2ce80f22859e4492d06ca8a62ddd1cfb63972f8979
eval/benchmark_comparison.png467 KB78e4b926bfca3950ff5441d1030a1453515973fbe5d7dd70a1c764a81f0d3d38
eval/reliability_eval_in.png65.4 KB9dd0e76e2f4f03042f23d479f8f318b77abbcca6a3ba97923fb5cd20d3e2c15e
eval/reliability_eval_zs.png72.0 KB4e0c014b721b0d32aadeaf8a643ee41fd2a30bdfddda1b44124aa64d2fd08490
eval/results.json2.98 KB13b0c98eb9c0f65c7ff3452321dabdfa22d96655454dfb14116983ae7d681a60
eval/results.md1.61 KBd8477988dc14e30e2430eb5ddead07506fe2d2df25e75ee0b9379b20022cee28
model.safetensors843 MB891102d372688fc2a094dac56a384bc537b87c63f21f9f3dac0be2b7cbc8d86c
multilingual/encoder/config.json1.94 KB83f6916d13ef0f556ac461f28308dc2bffa7ebeadee8ec9e2db5812020ea5bb4
multilingual/model.safetensors644 MB9d628fd971b700382ac6f65920a86f149777b2e748e0c955fb3b19695aa8f204
multilingual/rl_agent_config.json472 B25061739243b617ad88d1219ba6f8a9c86c5881ca28df024fa2d9b3b2fcc30c6
multilingual/tokenizer/tokenizer.json34.4 MB609d8f4c067cd3950f88594c5a802616cea245823836ef5848ee4fc40aab5b6f
multilingual/tokenizer/tokenizer_config.json524 B6c6b2d8e3c84ce0e671c129cd6b374b235d6f9863042a5836358d00a89bbb5a1
rl_agent_api.py4.73 KBbe3b46819c9999c3ef88e0f2ecf6d3ab1cdfed1d9a8b466fc89811e34d44031b
rl_agent_config.json745 Bae287b56bbcf5f8c4f4541ae9dfd00c914c4c48b940b8398c3058af37ba92bbd
rl_common.py19.1 KB8d83611d480c971d640a7b7d3aa2f2219c5e8455e9cc2329fd073681bd8be23e
tokenizer/tokenizer.json3.58 MB6c8aaa9a542084f2457eab775d4eeb51f92a70c0fd9de28d5edb0ddec3c08d30
tokenizer/tokenizer_config.json308 B50044de60daaa73df97d262e15a40d4faf0160e7d742df64b377877a1320dd12
typed-decisions/encoder/config.json2.08 KB5268d24ad3b77c8151de5dcb0762ba4391619aad9ab0bda33e36fb083cfeae6d
typed-decisions/model.safetensors843 MB4fa56de72383a9d3efa9cfa78955733c81b9fc8067a587ca4beb82c78107a24e
typed-decisions/rl_agent_config.json847 Bebf0cd524d92342a6be5e48e9fca3d7c2babfb5a56ccd79d2171ef5d8c7f7be8
typed-decisions/tokenizer/tokenizer.json3.58 MB6c8aaa9a542084f2457eab775d4eeb51f92a70c0fd9de28d5edb0ddec3c08d30
typed-decisions/tokenizer/tokenizer_config.json337 B08d4cf3ac4dca381759441b85b91a6d40e688471dcd33d15d6649eb0a9a854d1
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
85cc74ddae pinned now2026-11-15 02:40 UTC39 files · 2.37 GB

Use it

$ fw get convaiinnovations/laya
# manifest sha256 763487d0885b… · 2.37 GB · 39 files
$ fw verify ./laya convaiinnovations/laya
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/convaiinnovations/laya.json --dir ./laya $ python3 fw.py verify ./laya ./convaiinnovations__laya.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download convaiinnovations/laya --revision 85cc74ddae6109077ebe2853a9b3077fb6606a78 --local-dir ./laya

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
20f96041d6a50a69db0163aa481afb0906267a19620bdc669fa5f4a9abc86422
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: convaiinnovations <huggingface.co/convaiinnovations>Newsgroups: alt.freeweights.visionSubject: layaDate: 2026-11-15Commit: 85cc74dSigned: 2DC28CC7B26A283B ✓
Upstream
convaiinnovations/laya
Pinned commit
85cc74ddae6109077ebe2853a9b3077fb6606a78
Manifest
laya.json · .minisig
Manifest sha256
763487d0885bd9d7902c6211dae4ca3d1cd2625e43a0e55151f34503feb071c8
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:40 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/convaiinnovations/laya.json $ curl -O https://freeweights.allternit.com/manifests/convaiinnovations/laya.json.minisig $ minisign -Vm laya.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

2 models in the catalog name this one as their parent.

Quantizations
2
Quantizations 2
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download convaiinnovations/laya
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. laya.json. Provenance. Takedown history: none.

Variants

2 quantized or adapter builds of laya. Each has its own license check and page.

From: dima806 <huggingface.co/dima806>Subject: ai_vs_real_image_detection
From: legekka <huggingface.co/legekka>Subject: AI-Anime-Image-Detector-ViT
From: onnx-community <huggingface.co/onnx-community>Subject: AI-Anime-Image-Detector-ViT-ONNX
From: AICodexLab <huggingface.co/AICodexLab>Subject: answerdotai-ModernBERT-base-ai-detector
From: onnx-community <huggingface.co/onnx-community>Subject: answerdotai-ModernBERT-base-ai-detector-ONNX
From: onnx-community <huggingface.co/onnx-community>Subject: bart-large-cnn-ONNX