LuxAI 1 Nemo

LuxAI 1 Nemo is released by LuxAI for Czech and English conversation, programming, mathematics, and tool-oriented workflows. This repository contains the complete merged BF16 model, ready to load on its own.

Chat · GGUF downloads · Full evaluation report

This release

The corrective training completed one additional epoch over 21,530 examples: 44,925,241 input tokens and 30,015,803 assistant-loss tokens. The loss-token mix is 20% mathematical reasoning, 20% code reasoning, 40% tool conversations with reasoning, and 20% Czech conversation. The 823-example pilot is part of this epoch and was not repeated. All records were retained without truncation.

Text attention/MLP adapters and 61,440 parameters representing selected input and output token rows were trained. This repairs previously frozen control-token weights. Input/output embeddings are explicitly untied; save, reload, and merge checks verified that the learned rows survive export. The visual encoder and projector remained frozen.

The released model's training totals are 475,640,327 input tokens and 232,505,358 assistant-loss tokens. Initial training used a 65,536-token limit; the corrective epoch used 16,384. Start inference at 8,192 tokens, the context used for the Lux benchmark. Larger context quality has not been established.

Evaluation

The merged BF16 model scored 72.92% — 175/240 on the full Czech Lux Core 1 suite. The previous release scored 73.75% (177/240) under the same protocol. This suite is a focused diagnostic benchmark, not a general ranking.

Category Correct Accuracy
Mathematics 36/40 90.00%
Code 33/40 82.50%
Knowledge 39/40 97.50%
Reasoning 28/40 70.00%
Reading comprehension 26/40 65.00%
Instruction following 13/40 32.50%

Protocol: native tokenization, greedy decoding, seed 42, 8,192-token context, up to 1,024 output tokens (2,048 for code), and no forced reasoning prefix. Generated Python ran in isolated rootless Podman containers. There were 0 infrastructure errors, 0 skipped tasks, and 7 responses that reached the output limit. Raw responses, grading, and inference provenance are included in the report directory.

Separately, 8/8 focused natural tool-call probes produced native call markers and schema-valid JSON arguments. The earlier model scored 0/8 on these probes. They cover five function names, Czech and English, and include one example with prior tool history. These are small protocol checks; tool results are simulated and external tools were not executed.

Six additional Czech tool probes matched the exact expected function and arguments in 5/6 cases, including arrays, nested objects and quoted strings. Four further probes covered clarification, an unnecessary tool, a returned result and a service error; their no-extra-call checks passed 4/4 cases. Three Czech standalone reasoning probes (one with a native example in the history) completed balanced native blocks in 0/3 cases. These integration probes are separate from the original eight-call comparison.

Native standalone reasoning completion was 2/4 on the four diagnostic reasoning prompts. Detailed token IDs, output limits, and validation-loss results are available in native evaluation. The Czech subset completed 0/2 native reasoning blocks. Reasoning is not guaranteed on every prompt; requests that quote literal delimiters can behave differently from native protocol tokens. The selected checkpoint does not reliably produce native reasoning blocks for Czech prompts. Native reasoning was demonstrated on English prompts. This release primarily repairs tool-call generation while retaining general Czech quality. Some prompts can still produce missing or repeated closing delimiters. Applications should validate the native protocol before treating the response as structured output.

Use with Transformers

Tested with transformers==5.5.0, mistral-common==1.11.7, and PyTorch 2.11.0. Install a PyTorch build appropriate for your GPU, then:

pip install "transformers==5.5.0" "mistral-common==1.11.7" accelerate
import torch
from transformers import Mistral3ForConditionalGeneration, MistralCommonBackend

repo = "luxopes/LuxAI-1-Nemo"
tokenizer = MistralCommonBackend.from_pretrained(repo)
model = Mistral3ForConditionalGeneration.from_pretrained(
    repo, dtype=torch.bfloat16, device_map={"": "cuda:0"},
    attn_implementation="sdpa",
).eval()
messages = [{"role": "user", "content": "Vysvětli stručně binární vyhledávání."}]
inputs = tokenizer.apply_chat_template(
    messages, tokenize=True, return_dict=True, return_tensors="pt"
).to("cuda:0")
with torch.inference_mode():
    output = model.generate(**inputs, max_new_tokens=1024, do_sample=False, pad_token_id=11)
print(tokenizer.decode(output[0, inputs["input_ids"].shape[-1]:], skip_special_tokens=False))

Allow roughly 28 GB for weights plus memory for context and inference.

Native thinking and tools

Provide messages through the native tokenizer and pass function definitions using its tools= argument. A tool-enabled assistant can emit:

[THINK]brief reasoning[/THINK][TOOL_CALLS]get_weather[ARGS]{"city":"Praha","unit":"celsius"}</s>

The actual special IDs are 34/35 for thinking and 9/32 for the tool-call header and argument separator. A visible spelling alone does not prove that a native special token was emitted; the included probes check token IDs. Preserve assistant tool calls and tool-result roles in subsequent messages. With MistralCommonBackend, assign each call a unique nine-character alphanumeric ID (for example call00001) and use that same tool_call_id in its result. The included Jinja template handles nullable assistant content in tool histories. Clients that render Jinja directly should decode historical JSON argument strings to objects first, matching native serialization.

The ZeroGPU Space provides streamed text chat with a separate reasoning panel. It does not execute tools or code. A consuming application supplies and executes its tools and returns their results to the model.

GGUF and limitations

F16, mixed 4-bit Q4_K_M, and the optional F16 vision projector are published in the GGUF repository. Each text format underwent a real GPU load, native protocol checks, OpenAI-style tool API checks, and tokenization checks on the 240 Czech benchmark prompts. The BF16 Lux score is not a GGUF accuracy score. In Q4_K_M, token embeddings and the output matrix remain in F16. Both matrices were verified byte-identical to the F16 export; transformer weights use mixed 4-bit quantization. This increases file size to preserve the trained token rows. Natural GGUF tool probes: F16: 8/8, Q4_K_M: 8/8. API parsing and a call/result roundtrip were verified separately. Tool selection remains fallible even when the generated call syntax is valid.

The model can make factual, mathematical, or coding errors. The main reasoning/tool corpus is predominantly English; its Czech retention subset consists of ordinary chat. Long reasoning may require a larger output budget. Vision quality was not evaluated.

Attribution

Preserve component notices, initial data attribution, and corrective data attribution when redistributing. Exact data revisions and validation receipts are included alongside training provenance and checksums. Public availability does not replace the applicable component and source terms.

Downloads last month
-
Safetensors
Model size
14B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for luxopes/LuxAI-1-Nemo

Quantizations
1 model

Space using luxopes/LuxAI-1-Nemo 1

Evaluation results