| <!doctype html> |
| <html lang="vi"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> |
| <meta name="color-scheme" content="dark" /> |
| <meta name="theme-color" content="#14161d" /> |
| <meta |
| name="description" |
| content="MoxhiMT — dịch tiếng Trung sang tiếng Việt cho truyện mạng. Mô hình 30M chạy hoàn toàn trong trình duyệt, văn bản không rời khỏi thiết bị." |
| /> |
| <title>MoxhiMT — Dịch Trung → Việt trên trình duyệt</title> |
| <link |
| rel="icon" |
| href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect x='4' y='4' width='56' height='56' rx='10' fill='%23cf4429'/%3E%3Ctext x='32' y='45' font-size='36' text-anchor='middle' fill='%23ece4d1' font-family='serif'%3E%E8%AF%91%3C/text%3E%3C/svg%3E" |
| /> |
| <script type="module" crossorigin src="./assets/index-Cqb5ar9J.js"></script> |
| <link rel="stylesheet" crossorigin href="./assets/index-CwFWchry.css"> |
| </head> |
| <body> |
| <div class="page"> |
| <header class="top"> |
| <div class="brand"> |
| <span class="seal" aria-hidden="true">译</span> |
| <div class="brand-text"> |
| <h1>MoxhiMT</h1> |
| <p class="tagline">Dịch truyện Trung → Việt, ngay trên máy bạn</p> |
| </div> |
| </div> |
| <div class="chips"> |
| <span id="modelChip" class="chip">Chưa tải mô hình</span> |
| <span id="envChip" class="chip chip-quiet" hidden></span> |
| </div> |
| </header> |
|
|
| <section id="resumePanel" class="card crash" hidden> |
| <div class="card-head"> |
| <h2>Phiên dịch bị gián đoạn</h2> |
| </div> |
| <p id="resumeSummary" class="crash-text"></p> |
| <div class="adv-actions crash-actions"> |
| <button id="resumeGoBtn" type="button" class="primary">Dịch tiếp</button> |
| <button id="resumeReportBtn" type="button" class="ghost">Chép báo cáo</button> |
| <button id="resumeDropBtn" type="button" class="ghost">Bỏ</button> |
| </div> |
| </section> |
|
|
| <section id="crashPanel" class="card crash" hidden> |
| <div class="card-head"> |
| <h2>Phiên trước bị dừng đột ngột</h2> |
| </div> |
| <p id="crashSummary" class="crash-text"></p> |
| <div class="adv-actions crash-actions"> |
| <button id="crashCopyBtn" type="button" class="ghost">Chép báo cáo</button> |
| <button id="crashDismissBtn" type="button" class="ghost">Ẩn</button> |
| </div> |
| </section> |
|
|
| <main class="spread"> |
| <section class="card" aria-labelledby="srcLabel"> |
| <div class="card-head"> |
| <h2 id="srcLabel">Văn bản tiếng Trung</h2> |
| <div class="card-tools"> |
| <button id="sampleBtn" type="button" class="ghost">Chép đoạn mẫu</button> |
| <button id="clearBtn" type="button" class="ghost">Xoá</button> |
| </div> |
| </div> |
| <textarea |
| id="src" |
| rows="9" |
| placeholder="Dán chương truyện hoặc đoạn văn tiếng Trung vào đây…" |
| spellcheck="false" |
| lang="zh" |
| ></textarea> |
| <div class="card-foot"> |
| <span id="srcCount" class="count">0 ký tự</span> |
| <div class="run"> |
| <button id="cancelBtn" type="button" class="ghost" hidden>Dừng</button> |
| <button id="translateBtn" type="button" class="primary">Dịch sang tiếng Việt</button> |
| </div> |
| </div> |
| <div id="progressRow" class="progress-row" hidden> |
| <div class="bar"><div id="barFill" class="bar-fill"></div></div> |
| <p id="progressLabel" class="progress-label">Đang chuẩn bị…</p> |
| </div> |
| </section> |
|
|
| <section class="card card-out" aria-labelledby="dstLabel"> |
| <div class="card-head"> |
| <h2 id="dstLabel">Bản dịch</h2> |
| <div class="card-tools"> |
| <button id="copyBtn" type="button" class="ghost" disabled>Chép bản dịch</button> |
| </div> |
| </div> |
| <div id="out" class="out" lang="vi"> |
| <p class="placeholder">Bản dịch sẽ hiện ở đây, từng đoạn một trong lúc dịch.</p> |
| </div> |
| <div id="metrics" class="metrics" hidden></div> |
| </section> |
| </main> |
|
|
| <details class="advanced"> |
| <summary>Nâng cao</summary> |
| <div class="adv-grid"> |
| <label |
| >Mô hình |
| <select id="modelSelect"> |
| <option value="DanVP/HachimiMT-30-zh-vi-onnx">HachimiMT-30 · 31M — nhẹ, nhanh</option> |
| <option value="DanVP/MoxhiMT-30-onnx">MoxhiMT-30 · 37M — encoder sâu hơn</option> |
| <option value="custom">Tuỳ chỉnh…</option> |
| </select> |
| </label> |
| <label id="modelIdRow" hidden |
| >Kho mô hình (tuỳ chỉnh) |
| <input id="modelId" spellcheck="false" autocomplete="off" placeholder="user/repo-onnx" /> |
| </label> |
| <label |
| >Batch (PC ≤8 · iOS ≤4) |
| <input id="batchSize" type="number" min="1" max="8" step="1" value="4" /> |
| </label> |
| <label |
| >Thiết bị |
| <select id="device"> |
| <option value="auto">Tự chọn (WASM)</option> |
| <option value="wasm">WASM — ổn định</option> |
| <option value="webgpu">WebGPU — thử nghiệm</option> |
| </select> |
| </label> |
| <label |
| >Độ chính xác |
| <select id="dtype"> |
| <option value="auto">Tự chọn (q8)</option> |
| <option value="q8">q8 — nhẹ nhất</option> |
| <option value="fp16">fp16</option> |
| <option value="fp32">fp32</option> |
| </select> |
| </label> |
| <label |
| >Token mỗi chunk |
| <input id="maxSrcTokens" type="number" min="48" max="220" step="8" value="192" /> |
| </label> |
| <label |
| >Nhịp nghỉ khi phục hồi (iOS) |
| <input id="recycleEvery" type="number" min="0" max="200" step="4" value="8" /> |
| </label> |
| </div> |
| <div class="adv-actions"> |
| <button id="preloadBtn" type="button" class="ghost">Tải trước mô hình</button> |
| <button id="purgeBtn" type="button" class="ghost">Xoá mô hình đã lưu</button> |
| <button id="reportBtn" type="button" class="ghost">Chép báo cáo phiên gần nhất</button> |
| </div> |
| <details class="logbox"> |
| <summary>Nhật ký</summary> |
| <pre id="log"></pre> |
| </details> |
| </details> |
|
|
| <footer class="note"> |
| <p> |
| Toàn bộ quá trình dịch diễn ra trên thiết bị của bạn — văn bản không được gửi đi đâu. |
| Mô hình <a id="modelLink" href="#" target="_blank" rel="noreferrer">HachimiMT-30</a> |
| (~55 MB) chỉ tải một lần rồi được lưu lại cho những lần sau. |
| <span id="verTag" class="ver"></span> |
| </p> |
| </footer> |
| </div> |
| </body> |
| </html> |
|
|