CoolFace
Modelpublic

skillsafe-ai/opus-mt-en-es

sourceHugging Faceapache-2.0updated 4d agoView on Hugging Face
0likes22downloads
Model Card

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

Upstreamhttps://huggingface.co/Xenova/opus-mt-en-es/tree/4b002a4c7edd54a7ced58877258b87f7efd3f892
Upstream SHA-256 / commit4b002a4c7edd54a7ced58877258b87f7efd3f892
Reciperecipes/opus-mt-en-es.yaml — sha256 8bf5510f443362266cfbb3e7e8c4dd605978a041b30e20f95904f688ae94db7d
ToolchainPython 3.12.13, torch 2.10.0, onnx 1.23.0, onnxruntime 1.30.0 on Darwin 25.6.0 arm64
Converted2026-09-22T21:48:11+00:00

Files

fileclasssizeSHA-256
config.jsonbundle0.00 MB499eae1f97eeba63172fc884f92fd727ae803b7ceb79c0f653aa4b011152af2f
generation_config.jsonbundle0.00 MBb743baabb7da4c1a2f19fe558bd6b4c0c7c3b0762fcb5ca7a48fe5a2c2219803
onnx/decoder_model_merged.onnxregistry (fp32)224.91 MB543a46ff7d2e45897770f24df97d21a8b0a50cf312f5ee3754df587c1883e957
onnx/decoder_model_merged_quantized.onnxregistry (q8)57.42 MB58ee5ddd6e22d1693d8722b90c1486afb93700a4376cf28fd74175052ad530ae
onnx/encoder_model.onnxregistry (fp32, q8)200.21 MBff549b1d64e45c444c938b878f7ad97d0b9aa64f51b30de049583d03ed284afc
tokenizer.jsonbundle5.97 MB285eb29e7155ee48851a77960797813f86a125f70d2c1a124f613f1fbd2b19c3
tokenizer_config.jsonbundle0.00 MBdfb00189b823fb0f15464e9c4e68dd8594f5e5ef5f8dc497468a37741e73aa1f
vocab.jsonbundle1.64 MBb074b4cca0036ade5a39ea97faabd534e1015482c480fc2cb02c6481983eb163

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:

fileinputsoutputsms
onnx/decoder_model_merged.onnxencoderattentionmask[1, 8], inputids[1, 4], encoderhiddenstates[1, 8, 512], pastkeyvalues.0.decoder.key[1, 8, 1, 64], pastkeyvalues.0.decoder.value[1, 8, 1, 64], pastkeyvalues.0.encoder.key[1, 8, 8, 64], pastkeyvalues.0.encoder.value[1, 8, 8, 64], pastkeyvalues.1.decoder.key[1, 8, 1, 64], pastkeyvalues.1.decoder.value[1, 8, 1, 64], pastkeyvalues.1.encoder.key[1, 8, 8, 64], pastkeyvalues.1.encoder.value[1, 8, 8, 64], pastkeyvalues.2.decoder.key[1, 8, 1, 64], pastkeyvalues.2.decoder.value[1, 8, 1, 64], pastkeyvalues.2.encoder.key[1, 8, 8, 64], pastkeyvalues.2.encoder.value[1, 8, 8, 64], pastkeyvalues.3.decoder.key[1, 8, 1, 64], pastkeyvalues.3.decoder.value[1, 8, 1, 64], pastkeyvalues.3.encoder.key[1, 8, 8, 64], pastkeyvalues.3.encoder.value[1, 8, 8, 64], pastkeyvalues.4.decoder.key[1, 8, 1, 64], pastkeyvalues.4.decoder.value[1, 8, 1, 64], pastkeyvalues.4.encoder.key[1, 8, 8, 64], pastkeyvalues.4.encoder.value[1, 8, 8, 64], pastkeyvalues.5.decoder.key[1, 8, 1, 64], pastkeyvalues.5.decoder.value[1, 8, 1, 64], pastkeyvalues.5.encoder.key[1, 8, 8, 64], pastkeyvalues.5.encoder.value[1, 8, 8, 64], usecache_branch[1]logits[1, 4, 65001], 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.1
onnx/decoder_model_merged_quantized.onnxencoderattentionmask[1, 8], inputids[1, 4], encoderhiddenstates[1, 8, 512], pastkeyvalues.0.decoder.key[1, 8, 1, 64], pastkeyvalues.0.decoder.value[1, 8, 1, 64], pastkeyvalues.0.encoder.key[1, 8, 8, 64], pastkeyvalues.0.encoder.value[1, 8, 8, 64], pastkeyvalues.1.decoder.key[1, 8, 1, 64], pastkeyvalues.1.decoder.value[1, 8, 1, 64], pastkeyvalues.1.encoder.key[1, 8, 8, 64], pastkeyvalues.1.encoder.value[1, 8, 8, 64], pastkeyvalues.2.decoder.key[1, 8, 1, 64], pastkeyvalues.2.decoder.value[1, 8, 1, 64], pastkeyvalues.2.encoder.key[1, 8, 8, 64], pastkeyvalues.2.encoder.value[1, 8, 8, 64], pastkeyvalues.3.decoder.key[1, 8, 1, 64], pastkeyvalues.3.decoder.value[1, 8, 1, 64], pastkeyvalues.3.encoder.key[1, 8, 8, 64], pastkeyvalues.3.encoder.value[1, 8, 8, 64], pastkeyvalues.4.decoder.key[1, 8, 1, 64], pastkeyvalues.4.decoder.value[1, 8, 1, 64], pastkeyvalues.4.encoder.key[1, 8, 8, 64], pastkeyvalues.4.encoder.value[1, 8, 8, 64], pastkeyvalues.5.decoder.key[1, 8, 1, 64], pastkeyvalues.5.decoder.value[1, 8, 1, 64], pastkeyvalues.5.encoder.key[1, 8, 8, 64], pastkeyvalues.5.encoder.value[1, 8, 8, 64], usecache_branch[1]logits[1, 4, 65001], 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.8
onnx/encoder_model.onnxinputids[1, 8], attentionmask[1, 8]lasthiddenstate[1, 8, 512]1.4

Use in the browser

js
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.