Instructions to use skillsafe-ai/opus-mt-en-de with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers.js
How to use skillsafe-ai/opus-mt-en-de with Transformers.js:
// npm i @huggingface/transformers import { pipeline } from '@huggingface/transformers'; // Allocate pipeline const pipe = await pipeline('translation', 'skillsafe-ai/opus-mt-en-de');
opus-mt-en-de machine translation (MarianMT)
Browser-ready import artifacts for translation, produced by SkillSafe's
reproducible converter (models/ in skillsafe.ai)
from a pinned upstream source. Every byte here is derivable from that source plus
the recipe below; nothing was edited by hand.
Provenance
| Upstream | https://huggingface.co/Xenova/opus-mt-en-de/tree/1ca130c44c4c5441ef16d48aae521a424ab644f7 |
| Upstream SHA-256 / commit | 1ca130c44c4c5441ef16d48aae521a424ab644f7 |
| Recipe | recipes/opus-mt-en-de.yaml — sha256 486261838054ee6df3a38303ce6511c24438cd5ff35c13d1621e3e76d3b8c549 |
| Toolchain | Python 3.12.13, torch 2.10.0, onnx 1.23.0, onnxruntime 1.30.0 on Darwin 25.6.0 arm64 |
| Converted | 2026-09-22T21:53:38+00:00 |
Files
| file | class | size | SHA-256 |
|---|---|---|---|
config.json |
bundle | 0.00 MB | 517955ebf66cd6523f9982851dd41771b74fb2d9c00b4933ba2922ac7a63336f |
generation_config.json |
bundle | 0.00 MB | cd16a899388283889c6e87b903c689ce73430aaa18335415f9d9ea770606538e |
onnx/decoder_model_merged.onnx |
registry (fp32) | 211.41 MB | bea9bca485118db5f5300bd1c77e8e07c9163215b9b5e1cf36d1e81b39cb57cb |
onnx/decoder_model_merged_quantized.onnx |
registry (q8) | 54.03 MB | 8b46a825964cdd182fe47cc780f0fb87d357eae1f47cf20aa63c1c09be5b510c |
onnx/encoder_model.onnx |
registry (fp32, q8) | 186.74 MB | 21bd75239e95412a523b993467781d902d4b14e86e49422ffabfe48e15ed3ca1 |
tokenizer.json |
bundle | 5.24 MB | 8e0fcf45621ea87fa680c7f9969c37a7f819c1f4c7658a2e6e0879b866a14b17 |
tokenizer_config.json |
bundle | 0.00 MB | 4500a1295197174119cf17f9b2e6eab2d5c3a9c64009fb1e37ebd2868bf1161c |
vocab.json |
bundle | 1.33 MB | d5acea957b265a78554999144459c5e391e0df525864edc8287bc090290baa44 |
registry files are parameter files served from models.skillsafe.ai once vetted;
bundle files ship inside an app; registry-shared is a runtime library reused by
every model of the same architecture.
Verification
Imported as published upstream (no conversion). Each file is pinned by SHA-256 to its source; every ONNX file passed onnx.checker and a CPU smoke run under onnxruntime with zero-filled inputs at the declared shapes:
| file | inputs | outputs | ms |
|---|---|---|---|
onnx/decoder_model_merged.onnx |
encoder_attention_mask[1, 8], input_ids[1, 4], encoder_hidden_states[1, 8, 512], past_key_values.0.decoder.key[1, 8, 1, 64], past_key_values.0.decoder.value[1, 8, 1, 64], past_key_values.0.encoder.key[1, 8, 8, 64], past_key_values.0.encoder.value[1, 8, 8, 64], past_key_values.1.decoder.key[1, 8, 1, 64], past_key_values.1.decoder.value[1, 8, 1, 64], past_key_values.1.encoder.key[1, 8, 8, 64], past_key_values.1.encoder.value[1, 8, 8, 64], past_key_values.2.decoder.key[1, 8, 1, 64], past_key_values.2.decoder.value[1, 8, 1, 64], past_key_values.2.encoder.key[1, 8, 8, 64], past_key_values.2.encoder.value[1, 8, 8, 64], past_key_values.3.decoder.key[1, 8, 1, 64], past_key_values.3.decoder.value[1, 8, 1, 64], past_key_values.3.encoder.key[1, 8, 8, 64], past_key_values.3.encoder.value[1, 8, 8, 64], past_key_values.4.decoder.key[1, 8, 1, 64], past_key_values.4.decoder.value[1, 8, 1, 64], past_key_values.4.encoder.key[1, 8, 8, 64], past_key_values.4.encoder.value[1, 8, 8, 64], past_key_values.5.decoder.key[1, 8, 1, 64], past_key_values.5.decoder.value[1, 8, 1, 64], past_key_values.5.encoder.key[1, 8, 8, 64], past_key_values.5.encoder.value[1, 8, 8, 64], use_cache_branch[1] | logits[1, 4, 58101], present.0.decoder.key[1, 8, 4, 64], present.0.decoder.value[1, 8, 4, 64], present.0.encoder.key[1, 8, 8, 64], present.0.encoder.value[1, 8, 8, 64], present.1.decoder.key[1, 8, 4, 64], present.1.decoder.value[1, 8, 4, 64], present.1.encoder.key[1, 8, 8, 64], present.1.encoder.value[1, 8, 8, 64], present.2.decoder.key[1, 8, 4, 64], present.2.decoder.value[1, 8, 4, 64], present.2.encoder.key[1, 8, 8, 64], present.2.encoder.value[1, 8, 8, 64], present.3.decoder.key[1, 8, 4, 64], present.3.decoder.value[1, 8, 4, 64], present.3.encoder.key[1, 8, 8, 64], present.3.encoder.value[1, 8, 8, 64], present.4.decoder.key[1, 8, 4, 64], present.4.decoder.value[1, 8, 4, 64], present.4.encoder.key[1, 8, 8, 64], present.4.encoder.value[1, 8, 8, 64], present.5.decoder.key[1, 8, 4, 64], present.5.decoder.value[1, 8, 4, 64], present.5.encoder.key[1, 8, 8, 64], present.5.encoder.value[1, 8, 8, 64] | 5.5 |
onnx/decoder_model_merged_quantized.onnx |
encoder_attention_mask[1, 8], input_ids[1, 4], encoder_hidden_states[1, 8, 512], past_key_values.0.decoder.key[1, 8, 1, 64], past_key_values.0.decoder.value[1, 8, 1, 64], past_key_values.0.encoder.key[1, 8, 8, 64], past_key_values.0.encoder.value[1, 8, 8, 64], past_key_values.1.decoder.key[1, 8, 1, 64], past_key_values.1.decoder.value[1, 8, 1, 64], past_key_values.1.encoder.key[1, 8, 8, 64], past_key_values.1.encoder.value[1, 8, 8, 64], past_key_values.2.decoder.key[1, 8, 1, 64], past_key_values.2.decoder.value[1, 8, 1, 64], past_key_values.2.encoder.key[1, 8, 8, 64], past_key_values.2.encoder.value[1, 8, 8, 64], past_key_values.3.decoder.key[1, 8, 1, 64], past_key_values.3.decoder.value[1, 8, 1, 64], past_key_values.3.encoder.key[1, 8, 8, 64], past_key_values.3.encoder.value[1, 8, 8, 64], past_key_values.4.decoder.key[1, 8, 1, 64], past_key_values.4.decoder.value[1, 8, 1, 64], past_key_values.4.encoder.key[1, 8, 8, 64], past_key_values.4.encoder.value[1, 8, 8, 64], past_key_values.5.decoder.key[1, 8, 1, 64], past_key_values.5.decoder.value[1, 8, 1, 64], past_key_values.5.encoder.key[1, 8, 8, 64], past_key_values.5.encoder.value[1, 8, 8, 64], use_cache_branch[1] | logits[1, 4, 58101], present.0.decoder.key[1, 8, 4, 64], present.0.decoder.value[1, 8, 4, 64], present.0.encoder.key[1, 8, 8, 64], present.0.encoder.value[1, 8, 8, 64], present.1.decoder.key[1, 8, 4, 64], present.1.decoder.value[1, 8, 4, 64], present.1.encoder.key[1, 8, 8, 64], present.1.encoder.value[1, 8, 8, 64], present.2.decoder.key[1, 8, 4, 64], present.2.decoder.value[1, 8, 4, 64], present.2.encoder.key[1, 8, 8, 64], present.2.encoder.value[1, 8, 8, 64], present.3.decoder.key[1, 8, 4, 64], present.3.decoder.value[1, 8, 4, 64], present.3.encoder.key[1, 8, 8, 64], present.3.encoder.value[1, 8, 8, 64], present.4.decoder.key[1, 8, 4, 64], present.4.decoder.value[1, 8, 4, 64], present.4.encoder.key[1, 8, 8, 64], present.4.encoder.value[1, 8, 8, 64], present.5.decoder.key[1, 8, 4, 64], present.5.decoder.value[1, 8, 4, 64], present.5.encoder.key[1, 8, 8, 64], present.5.encoder.value[1, 8, 8, 64] | 6.0 |
onnx/encoder_model.onnx |
input_ids[1, 8], attention_mask[1, 8] | last_hidden_state[1, 8, 512] | 1.4 |
Use in the browser
import * as ort from "onnxruntime-web";
const session = await ort.InferenceSession.create("https://huggingface.co/skillsafe-ai/opus-mt-en-de/resolve/main/onnx/decoder_model_merged.onnx", { executionProviders: ["webgpu", "wasm"] });
Contract (onnx/decoder_model_merged.onnx): input encoder_attention_mask int64 ['batch_size', 'encoder_sequence_length'], input_ids int64 ['batch_size', 'decoder_sequence_length'], encoder_hidden_states float32 ['batch_size', 'encoder_sequence_length', 512], past_key_values.0.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.0.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.0.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.0.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.1.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.1.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.1.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.1.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.2.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.2.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.2.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.2.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.3.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.3.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.3.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.3.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.4.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.4.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.4.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.4.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.5.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.5.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.5.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.5.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], use_cache_branch bool [1] → output logits float32 ['batch_size', 'decoder_sequence_length', 58101], present.0.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.0.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.0.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.0.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.1.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.1.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.1.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.1.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.2.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.2.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.2.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.2.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.3.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.3.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.3.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.3.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.4.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.4.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.4.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.4.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.5.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.5.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.5.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.5.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64]. Opset 11.
Licence and attribution
opus-mt-en-de: Helsinki-NLP (Jörg Tiedemann, University of Helsinki), CC-BY-4.0, trained on OPUS data (https://huggingface.co/Helsinki-NLP/opus-mt-en-de); ONNX export by Xenova (https://huggingface.co/Xenova/opus-mt-en-de).
Licence: CC-BY-4.0 — notice: https://huggingface.co/Helsinki-NLP/opus-mt-en-de/blob/main/README.md. The conversion recipe and this model card are part of the SkillSafe repository and carry its licence; the weights remain under the upstream licence above.
The full manifest.json in this repo records the recipe, sources, toolchain
(including the uv.lock hash) and per-file verification numbers.
- Downloads last month
- 12