skillsafe-ai/opus-mt-en-es
opus-mt-en-es 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
Files
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:
Use in the browser
import * as ort from "onnxruntime-web";
const session = await ort.InferenceSession.create("https://huggingface.co/skillsafe-ai/opus-mt-en-es/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', 65001], 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-es: Helsinki-NLP (Jörg Tiedemann, University of Helsinki), Apache-2.0, trained on OPUS data (https://huggingface.co/Helsinki-NLP/opus-mt-en-es); ONNX export by Xenova (https://huggingface.co/Xenova/opus-mt-en-es).
Licence: Apache-2.0 — notice: https://huggingface.co/Helsinki-NLP/opus-mt-en-es/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.
