Skip to main content
TokenCost logoTokenCost
ComparisonAugust 25, 2026ยท11 min read

Localizing a million characters into four languages costs $0.48 on Tencent's new translation card and $80.00 on Google's. Switch on the glossary feature Tencent advertises and 3.02x of that advantage becomes 1.07x.

Tencent's Hy-MT2 translation models went up for rent last week, three months after the weights went public. Nobody has priced them against the character-metered incumbents they are aimed at, mostly because doing it honestly means counting tokens rather than guessing at them. So we ran 3,000 segments of the WMT22 test sets through Hy-MT2's own tokenizer, through OpenAI's, and through the arithmetic on Google's pricing page. The headline gap is real. It is also not the number you should be budgeting from.

Close-up of a dark split-flap airport departure board listing destinations in white lettering

Photo by Benjamin Wong on Unsplash

The measurement, in enough detail to repeat it

Every dollar figure below comes out of these five inputs. No estimated token counts, no assumed characters-per-token constant, no vendor calculator.

  • Text. The first 500 segments of each WMT22 general test set in six directions, 3,000 segments in all, pulled from the public haoranxu/WMT22-Test mirror.
  • Tokens. Counted with Hy-MT2-30B-A3B's own tokenizer.json off Hugging Face, and separately with OpenAI's o200k_base.
  • Characters. Python string length on the same strings, which is what Google meters.
  • Rates. OpenRouter's model endpoints for the three Hy-MT2 cards, read on August 25, and Google's own Cloud Translation pricing page.
  • Quality. XCOMET-XXL on FLORES-200, from the Hy-MT2 paper, not from us.

One thing we did not measure is translation quality. We are pricing a job, not judging one, and where quality enters the argument it enters through Tencent's published scores with their provenance attached.

Three models, two prices, and one of them is dead on arrival

Hy-MT2 shipped as open weights under Apache 2.0 in May, in three sizes covering 33 languages plus five Chinese dialect and minority-language pairs. Pinning the day is oddly fiddly: the checkpoint OpenRouter serves is stamped 20260521 and the paper went up on May 21, but the Hugging Face repository was created on May 11, so the widely repeated May 21 is the paper's date and the checkpoint's, not the upload's. What changed last week is that Tencent started selling inference: the 7B listing appeared on OpenRouter on August 19 at 14:13 UTC, and the flagship and the 1.8B twenty seconds apart the next day. Here is the whole card.

ModelShapeInput /1MOutput /1MXCOMETCache rate
Hy-MT2-1.8B1.8B dense$0.044$0.17779.77none
Hy-MT2-7B7B dense$0.074$0.29586.89none
Hy-MT2-30B-A3B30B MoE, 3B active$0.074$0.29587.47none

Read the middle row again. The 7B and the 30B-A3B carry the same two numbers, and the 30B-A3B scores higher on Tencent's own benchmark. That makes the 7B strictly dominated. Not a worse deal, not a reasonable trade at a lower price: the same price for less. I have been staring at rate cards every day for months and I cannot remember the last time a lab shipped a model with no rational buyer, in public, next to the thing that beats it.

There is a decent engineering reason for the price. The flagship activates 3B parameters per token out of 30B total, so serving it costs roughly what serving a 7B dense model costs, and Tencent appears to have priced from that rather than from parameter count. The reason does not rescue the 7B. If both cost the same to run and one is better, the listing is a courtesy to people who already wrote the model name into their config.

The 1.8B is a real choice, though a narrower one than its size suggests. It is 17 times smaller and 1.68 times cheaper on input, 1.67 times on output, and it scores 79.77 against 87.47 on FLORES-200. Tencent reports those three scores as 89.9%, 97.9% and 98.6% of Gemini 3.1 ProT, which is a useful sanity check: back out the reference model from each percentage and you get 88.73, 88.75 and 88.71. The paper's arithmetic is internally consistent, which is not something you can say about every benchmark table.

What a language pair does to your token bill

Translation is the rare workload where output volume is set by the job rather than by the model's mood, and where it lands in the same range as input. That should make budgeting easy. It does not, because the ratio between the two swings hard depending on where you are translating to.

DirectionSrc charsTgt charsSrc tokensTgt tokensOut / in
en to zh45,88914,8459,9978,4740.8477
en to de49,89358,60010,79417,8081.6498
en to ru45,96050,47210,18419,9691.9608
en to cs49,18848,51210,69721,2541.9869
zh to en18,34371,68810,84614,8561.3697
de to en49,36448,12815,14810,5150.6942

500 segments per direction, tokenized with Hy-MT2's tokenizer. Characters are Python string lengths on the same strings.

German to English emits 0.6942 output tokens per input token. English to Czech emits 1.9869. That is a 2.86x spread on identical source volume, and it matters more than it looks because output costs 3.99 times input on this card. Run the split and output is 73.46% of the German to English bill and 88.79% of the English to Czech one. Your target language, not your source volume, is what sets the invoice.

One million characters, four target languages, seven cards

Here is the job: take a million characters of English, which works out to about 175,000 words at this corpus's 5.71 characters per word, and localize it into Chinese, German, Russian and Czech. Token counts come from the measurements above, scaled to a million source characters. The Google rows are that vendor's three published cards for the same work.

Cardto zhto deto ruto csAll fourMultiple
Hy-MT2-1.8B$0.0423$0.0727$0.0867$0.0860$0.28770.60x
Hy-MT2-30B-A3B$0.0706$0.1213$0.1446$0.1436$0.48001.00x
GPT-5.6 Luna, batch$0.1619$0.1833$0.1927$0.2193$0.75731.58x
GPT-5.6 Luna, standard$0.3239$0.3667$0.3853$0.4387$1.51453.16x
Google Translation LLM$13.2350$21.7451$20.9817$19.8626$75.8244157.96x
Google NMT$20.0000$20.0000$20.0000$20.0000$80.0000166.66x
Google Adaptive$33.0875$54.3628$52.4543$49.6564$189.5610394.89x

Forty-eight cents against eighty dollars. That is the number that will get quoted, and on the bare job it is correct. It is also the least interesting row in the table, because a 166x gap is not a pricing decision, it is two different eras of software billed by two different units. Google's NMT card predates transformers being cheap. Nobody at Google is defending $20.00 per million characters as competitive with a 3B-active MoE running at fp8.

The interesting rows are the OpenAI ones. GPT-5.6 Luna, a general-purpose model with no translation training to speak of, prices this run at $1.5145, and its batch lane at $0.7573. That puts a generalist within 1.58x of a purpose-built translation flagship, which is a much narrower gap than the specialist framing implies. And Luna is doing it with a tokenizer that is worse at three of these four target languages, which brings us to the part of this that almost nobody prices.

The same sentence, two tokenizers, up to 52% apart

Hy-MT2 tokens divided by o200k_base tokens on identical text. The centre line is parity. Left of it, Hy-MT2 needs fewer tokens for the same words and its rate card stretches further than the number on it suggests. Right of it, the card is quietly worse than it looks.

Chinese, as source
-24.8%
Chinese, as target
-21.3%
English, as source
+2.5%
English, as target
+1.9%
German, as source
+30.0%
Czech, as target
+31.0%
German, as target
+32.0%
Russian, as target
+52.4%

Hy-MT2's vocabulary was built by a Chinese lab for Chinese traffic and it shows. It reads Chinese in three quarters of the tokens o200k_base needs, and writes Russian in half again as many.

Why nobody can compare token cards across labs

A price per million tokens is a price per million of a unit each vendor defines for itself. Two labs can publish $0.30 and bill you 52% apart for translating the same paragraph into Russian, and both invoices are correct. Every comparison table on the internet, including the one we maintain, sorts on a number that is only commensurable when the tokenizers match. Ours records which tokenizer each model uses for exactly this reason, and it is still a comparison you have to read with care.

Character metering does not have this problem. A character is a character, and Google will charge you the same for a million of them no matter whose model is behind the endpoint. That is the one structural argument still standing for the old billing unit, and it is worth something on a spreadsheet even when the price attached to it is 166 times higher. It is not worth the $79.52 it costs you on the run above.

Google's own two cards make the case against character metering better than we could, though. NMT bills source characters only. Translation LLM bills both sides. Because Chinese packs far more meaning per character than English does, the two products disagree about which is cheaper depending purely on which way you are pointing.

DirectionNMTTranslation LLMLLM / NMT
en to zh$20.00$13.240.662
de to en$20.00$19.750.987
en to cs$20.00$19.860.993
en to ru$20.00$20.981.049
en to de$20.00$21.751.087
zh to en$20.00$49.082.454

English into Chinese, the LLM card saves you a third. Chinese into English, it costs you two and a half times as much. A 3.7x swing between the endpoints of one vendor's catalogue, from nothing but the direction of the arrow. If you are running a bidirectional product on Google and you picked one model for both legs, you picked wrong for one of them.

The feature Tencent leads with is the one its card cannot afford

Read Tencent's model card and the pitch is not raw quality. It is control: terminology guidance, style, personalization preferences, delimiter preservation, structured data. Those are the things that separate a translation product from a translation demo, and every one of them works the same way. You prepend a standing block of instructions to the request.

Now look back at the rate card. There is no cached-input price on any of the three models. Not a small one, not a bad one. There is no column. Every token of that glossary is billed at full input rate on every request, forever.

Segments in these test sets average 21.6 Hy-MT2 tokens. A modest 400-token glossary and style prefix is therefore about nineteen times the size of the sentence you are trying to translate. Here is what that does to the English to German leg.

CardBareWith glossaryIncrease
Hy-MT2-30B-A3B$0.1213$0.4179+244.5%
GPT-5.6 Luna, cached prefix$0.3667$0.4468+21.9%
GPT-5.6 Luna, uncached$0.3667$1.1684+218.7%

Per million English source characters, English to German. Luna's cached input is $0.02 per million, a tenth of its $0.20 standard rate.

Bare, Hy-MT2 is 3.02 times cheaper than Luna on this pair. Turn on the glossary and let Luna cache its prefix, and Hy-MT2 is 1.07 times cheaper. The entire advantage of a specialist model, running on a card built for it, evaporates against a general-purpose model whose only edge is a billing feature. That is the finding I did not expect when I started counting, and it is the one I would actually change a build decision over.

Two honest caveats. Batching many segments into one request amortizes the prefix, and you should absolutely do that. And Tencent may add a cache rate next week, at which point this paragraph is worth nothing. But the batching argument runs into a second limit, and the shape of that limit is odd enough to be worth its own section.

The 8,192-token context window is not the binding constraint

All three Hy-MT2 endpoints publish an 8,192-token context and a 4,096-token completion cap. Everyone reads the first number and plans around it. It is the wrong one to plan around, because translation output is the same order of magnitude as translation input, and the output cap is half the size.

DirectionSrc tok/segTgt tok/segFits by inputFits by outputBinds on
en to zh20.016.9410242output
en to de21.635.6379115output
en to ru20.439.9402103output
en to cs21.442.538396output
zh to en21.729.7378138output
de to en30.321.0270195output

In every direction we measured, the completion cap runs out first, and for English into Czech it runs out at 96 segments against the 383 the context window would hold. So you fill a quarter of the prompt, pay for the glossary again, and start a new request. The cheapest card in the comparison is also the one that forces you to buy its input side most often.

One more thing you will feel before you feel the bill. OpenRouter clocks the flagship endpoint at 23 output tokens per second. For a model whose entire pitch is being fast and small, that is slow, and on a 200,000-segment localization run it is the difference between an afternoon and a long weekend.

What I would actually do with this

If you are still paying $20.00 per million characters for bulk machine translation with no terminology requirements, the case for moving is not close and has not been close for a while. Hy-MT2 just makes the gap embarrassing rather than merely large.

If you have a glossary, run the arithmetic before you migrate. The headline gap is measured on a job nobody with real localization requirements actually runs, and a cached prefix on a generalist beats an uncached prefix on a specialist at this segment length. Whichever way it lands, the weights are Apache 2.0 and there is exactly one seller of inference right now, which is Tencent itself. That is the same single-seller shape GLM-5.3 has, and the same shape that made third-party GLM-5.2 endpoints 4.17x cheaper than the first-party card once other people started serving them.

And if you take one thing from the token counts: stop comparing rate cards across labs without checking whose tokenizer you are buying. We priced six language directions on two vocabularies today and the same text moved 52% in one of them. That is larger than most of the price cuts we have written up this month.

Sources