opus-mt-en-fr 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-fr/tree/28726206f80896b90035bd99cccd5cc1e151f916
Upstream SHA-256 / commit 28726206f80896b90035bd99cccd5cc1e151f916
Recipe recipes/opus-mt-en-fr.yaml — sha256 002d21bcda3c9020bb18761054afce8879529c9161981652f02a13a2343702ac
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:49:55+00:00

Files

file class size SHA-256
config.json bundle 0.00 MB b522b73fcc86f77981349c1df2a2e041eed0dbcbea4acf2635019cf21d51ffc0
generation_config.json bundle 0.00 MB f9a4824ec78c61b4a95afc43bbb6a9545a44ccf1c01d0963a286e799b9e7b256
onnx/decoder_model_merged.onnx registry (fp32) 214.18 MB d87fdd0e4f16e9ea2b58148624bf58ed64cec7c2c0e8d87bb82f4142b80bad57
onnx/decoder_model_merged_quantized.onnx registry (q8) 54.72 MB 333b244bce16023df04541c8cf9fd60aec9b0569da393c4b831d561897b0bda8
onnx/encoder_model.onnx registry (fp32, q8) 189.50 MB ffa8429c73bea51341e3ebb7af889a9b37294448c371f926dfb3a9a97895b0d9
tokenizer.json bundle 5.38 MB 8391785c1a2139e7af4678571ccd8dc654ecbb72e4be186940f65d7c604f0246
tokenizer_config.json bundle 0.00 MB eb8dfaa142fe03627c8d035415f56c46284b6ee4a16e54c6e8236928ac5a1170
vocab.json bundle 1.39 MB f2ba9c69ae20f96b8bd821239a9152be422394f980350b77907cffc183db5f2d

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, 59514], 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] 3.8
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, 59514], 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.9
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-fr/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', 59514], 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-fr: Helsinki-NLP (Jörg Tiedemann, University of Helsinki), Apache-2.0, trained on OPUS data (https://huggingface.co/Helsinki-NLP/opus-mt-en-fr); ONNX export by Xenova (https://huggingface.co/Xenova/opus-mt-en-fr).

Licence: Apache-2.0 — notice: https://huggingface.co/Helsinki-NLP/opus-mt-en-fr/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
21
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for skillsafe-ai/opus-mt-en-fr

Quantized
(1)
this model