{
  "aboutHtml": "<h4>Giọng cho đọc nội dung và văn bản dài</h4><p>Speech 02 HD tạo lời nói chú trọng chất lượng, nhịp điệu và độ ổn định của giọng. Nhà sản xuất nhấn mạnh đọc nội dung và sách nói, nơi giọng cần giữ đặc trưng và duy trì đều qua văn bản dài. Đây là mô hình tổng hợp: nhận văn bản và chuyển thành âm thanh lời nói.</p><h4>Kết hợp văn bản và âm sắc</h4><p>Dòng Speech 02 dựa trên kiến trúc Transformer tự hồi quy và bộ mã hóa người nói có thể học. Trích xuất âm sắc và tạo lời nói được huấn luyện cùng nhau để phối hợp đặc điểm giọng với nội dung. Khả năng của dòng mô hình gồm sử dụng giọng nhân bản đã chuẩn bị và kết hợp ngôn ngữ, giọng vùng miền, cách phát âm.</p><h4>Cảm xúc và đọc đa ngôn ngữ</h4><p>Sắc thái cảm xúc có thể được xác định từ ý nghĩa văn bản hoặc đặt thủ công. Các trạng thái gồm vui, buồn, giận dữ, sợ hãi, ghê tởm, ngạc nhiên và bình tĩnh. Mô hình xử lý tiếng Nga, Anh và các ngôn ngữ khác; nhà sản xuất mô tả nhiều giọng tiếng Anh, tiếng Trung và Quảng Đông, Nhật, Hàn, các ngôn ngữ châu Âu và những ngôn ngữ khác.</p><p>Mô tả hiện tại của Speech 02 loại trừ riêng tiếng Ba Tư, Filipino và Tamil. Không nên tự động áp dụng danh sách ngôn ngữ chung của các thế hệ Speech mới hơn cho phiên bản này.</p><h4>Cài đặt giọng</h4><p>Tổng hợp cung cấp chọn giọng, thay đổi tốc độ <strong>0,5–2</strong>, âm lượng lớn hơn 0 và tối đa <strong>10</strong>, cao độ từ <strong>−12 đến 12</strong>. Trong từ điển phát âm, có thể thay cách viết bằng cách đọc mong muốn; mô hình hỗ trợ ký hiệu phiên âm và các cách phát âm tiếng Nhật. Điều này giúp điều khiển cách đọc tên và từ có nhiều cách hiểu.</p><h4>Khoảng dừng và âm thanh hoàn chỉnh</h4><p>Nhà sản xuất cho phép đặt khoảng dừng giữa các đoạn lời với thời lượng <strong>0,01–99,99 giây</strong>. Thời lượng khoảng dừng có độ chính xác đến hai chữ số sau dấu phẩy; dấu được đặt giữa các đoạn lời và không đặt liên tiếp. Văn bản của một yêu cầu đồng bộ phải ít hơn <strong>10 000 ký tự</strong>. Có thể nhận toàn bộ âm thanh hoặc nhận dần; với văn bản dài hơn 3000 ký tự, đầu ra truyền luồng được khuyến nghị.</p><p>Các định dạng của mô hình gồm MP3, WAV, FLAC và PCM; cài đặt tổng hợp chung còn mô tả Opus và các biến thể G.711 μ-law. Có thể dùng mono hoặc stereo. Thẻ này cung cấp đọc văn bản thành tiếng, còn việc chuẩn bị giọng riêng và cài đặt mở rộng chỉ áp dụng trong phạm vi phương thức truy cập được hỗ trợ qua Ailoot.</p><p>Cài đặt âm thanh bổ sung gồm các tần số lấy mẫu <strong>8, 16, 22,05, 24, 32 và 44,1 kHz</strong>. MP3 có các mức bitrate <strong>32, 64, 128 hoặc 256 kbit/s</strong>. Có thể thay đổi màu giọng và áp dụng một hiệu ứng: tiếng vang không gian rộng, tiếng vang hội trường, âm thanh điện thoại hoặc giọng robot. Hiệu ứng thay đổi giọng được hỗ trợ cho MP3, WAV và FLAC khi nhận toàn bộ âm thanh, còn với đầu ra truyền luồng chỉ hỗ trợ MP3. Các định dạng G.711 μ-law sử dụng tần số 8 kHz. Những khả năng này thuộc cài đặt tổng hợp của MiniMax.</p><p>Nhà sản xuất cung cấp đồng bộ lời nói với văn bản: dấu thời gian theo câu, theo từ hoặc theo từ khi xuất dần. Kết quả này giúp kết hợp lời đọc với việc hiển thị văn bản. Khả năng bổ sung này cần hỗ trợ định dạng câu trả lời tương ứng.</p>",
  "aboutText": "### Giọng cho đọc nội dung và văn bản dài\n\nSpeech 02 HD tạo lời nói chú trọng chất lượng, nhịp điệu và độ ổn định của giọng. Nhà sản xuất nhấn mạnh đọc nội dung và sách nói, nơi giọng cần giữ đặc trưng và duy trì đều qua văn bản dài. Đây là mô hình tổng hợp: nhận văn bản và chuyển thành âm thanh lời nói.\n\n### Kết hợp văn bản và âm sắc\n\nDòng Speech 02 dựa trên kiến trúc Transformer tự hồi quy và bộ mã hóa người nói có thể học. Trích xuất âm sắc và tạo lời nói được huấn luyện cùng nhau để phối hợp đặc điểm giọng với nội dung. Khả năng của dòng mô hình gồm sử dụng giọng nhân bản đã chuẩn bị và kết hợp ngôn ngữ, giọng vùng miền, cách phát âm.\n\n### Cảm xúc và đọc đa ngôn ngữ\n\nSắc thái cảm xúc có thể được xác định từ ý nghĩa văn bản hoặc đặt thủ công. Các trạng thái gồm vui, buồn, giận dữ, sợ hãi, ghê tởm, ngạc nhiên và bình tĩnh. Mô hình xử lý tiếng Nga, Anh và các ngôn ngữ khác; nhà sản xuất mô tả nhiều giọng tiếng Anh, tiếng Trung và Quảng Đông, Nhật, Hàn, các ngôn ngữ châu Âu và những ngôn ngữ khác.\n\nMô tả hiện tại của Speech 02 loại trừ riêng tiếng Ba Tư, Filipino và Tamil. Không nên tự động áp dụng danh sách ngôn ngữ chung của các thế hệ Speech mới hơn cho phiên bản này.\n\n### Cài đặt giọng\n\nTổng hợp cung cấp chọn giọng, thay đổi tốc độ **0,5–2**, âm lượng lớn hơn 0 và tối đa **10**, cao độ từ **−12 đến 12**. Trong từ điển phát âm, có thể thay cách viết bằng cách đọc mong muốn; mô hình hỗ trợ ký hiệu phiên âm và các cách phát âm tiếng Nhật. Điều này giúp điều khiển cách đọc tên và từ có nhiều cách hiểu.\n\n### Khoảng dừng và âm thanh hoàn chỉnh\n\nNhà sản xuất cho phép đặt khoảng dừng giữa các đoạn lời với thời lượng **0,01–99,99 giây**. Thời lượng khoảng dừng có độ chính xác đến hai chữ số sau dấu phẩy; dấu được đặt giữa các đoạn lời và không đặt liên tiếp. Văn bản của một yêu cầu đồng bộ phải ít hơn **10 000 ký tự**. Có thể nhận toàn bộ âm thanh hoặc nhận dần; với văn bản dài hơn 3000 ký tự, đầu ra truyền luồng được khuyến nghị.\n\nCác định dạng của mô hình gồm MP3, WAV, FLAC và PCM; cài đặt tổng hợp chung còn mô tả Opus và các biến thể G.711 μ-law. Có thể dùng mono hoặc stereo. Thẻ này cung cấp đọc văn bản thành tiếng, còn việc chuẩn bị giọng riêng và cài đặt mở rộng chỉ áp dụng trong phạm vi phương thức truy cập được hỗ trợ qua Ailoot.\n\nCài đặt âm thanh bổ sung gồm các tần số lấy mẫu **8, 16, 22,05, 24, 32 và 44,1 kHz**. MP3 có các mức bitrate **32, 64, 128 hoặc 256 kbit/s**. Có thể thay đổi màu giọng và áp dụng một hiệu ứng: tiếng vang không gian rộng, tiếng vang hội trường, âm thanh điện thoại hoặc giọng robot. Hiệu ứng thay đổi giọng được hỗ trợ cho MP3, WAV và FLAC khi nhận toàn bộ âm thanh, còn với đầu ra truyền luồng chỉ hỗ trợ MP3. Các định dạng G.711 μ-law sử dụng tần số 8 kHz. Những khả năng này thuộc cài đặt tổng hợp của MiniMax.\n\nNhà sản xuất cung cấp đồng bộ lời nói với văn bản: dấu thời gian theo câu, theo từ hoặc theo từ khi xuất dần. Kết quả này giúp kết hợp lời đọc với việc hiển thị văn bản. Khả năng bổ sung này cần hỗ trợ định dạng câu trả lời tương ứng.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "21eb1c36c09af7a5c924924eb73ea919bfea4caf16a6ee311b6015c7ab6e00a4",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "vi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">MM</span><h2 id=\"sheet-title\">speech-02-hd</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>MiniMax /</span><code>speech-02-hd</code><button type=\"button\" id=\"copy-id\">Sao chép ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Các phần của thẻ mô hình\"><button type=\"button\" data-card-jump=\"overview\">Bắt đầu</button><button type=\"button\" data-card-jump=\"methods\">Đầu vào &amp; phương thức</button><button type=\"button\" data-card-jump=\"pricing\">Bảng giá</button><button type=\"button\" data-card-jump=\"examples\">Ví dụ</button><button type=\"button\" data-card-jump=\"results\">Kết quả</button><button type=\"button\" data-card-jump=\"aliases\">Bí danh</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Phương thức API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|speech|/v1/audio/speech|speech-02-hd\">Tổng hợp giọng nói</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Bắt đầu</h3><p class=\"mdesc-full\">Speech-02 HD là mô hình tổng hợp giọng nói chú trọng chất lượng âm thanh và độ giống giọng.</p><dl class=\"card-io\" data-card-io><div><dt>Đầu vào được chấp nhận</dt><dd>Văn bản</dd></div><div><dt>Kết quả</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Về mô hình</summary><p class=\"note-s\" data-model-method-boundary>Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.</p><div class=\"mabout\" id=\"m-about\"><h4>Giọng cho đọc nội dung và văn bản dài</h4><p>Speech 02 HD tạo lời nói chú trọng chất lượng, nhịp điệu và độ ổn định của giọng. Nhà sản xuất nhấn mạnh đọc nội dung và sách nói, nơi giọng cần giữ đặc trưng và duy trì đều qua văn bản dài. Đây là mô hình tổng hợp: nhận văn bản và chuyển thành âm thanh lời nói.</p><h4>Kết hợp văn bản và âm sắc</h4><p>Dòng Speech 02 dựa trên kiến trúc Transformer tự hồi quy và bộ mã hóa người nói có thể học. Trích xuất âm sắc và tạo lời nói được huấn luyện cùng nhau để phối hợp đặc điểm giọng với nội dung. Khả năng của dòng mô hình gồm sử dụng giọng nhân bản đã chuẩn bị và kết hợp ngôn ngữ, giọng vùng miền, cách phát âm.</p><h4>Cảm xúc và đọc đa ngôn ngữ</h4><p>Sắc thái cảm xúc có thể được xác định từ ý nghĩa văn bản hoặc đặt thủ công. Các trạng thái gồm vui, buồn, giận dữ, sợ hãi, ghê tởm, ngạc nhiên và bình tĩnh. Mô hình xử lý tiếng Nga, Anh và các ngôn ngữ khác; nhà sản xuất mô tả nhiều giọng tiếng Anh, tiếng Trung và Quảng Đông, Nhật, Hàn, các ngôn ngữ châu Âu và những ngôn ngữ khác.</p><p>Mô tả hiện tại của Speech 02 loại trừ riêng tiếng Ba Tư, Filipino và Tamil. Không nên tự động áp dụng danh sách ngôn ngữ chung của các thế hệ Speech mới hơn cho phiên bản này.</p><h4>Cài đặt giọng</h4><p>Tổng hợp cung cấp chọn giọng, thay đổi tốc độ <strong>0,5–2</strong>, âm lượng lớn hơn 0 và tối đa <strong>10</strong>, cao độ từ <strong>−12 đến 12</strong>. Trong từ điển phát âm, có thể thay cách viết bằng cách đọc mong muốn; mô hình hỗ trợ ký hiệu phiên âm và các cách phát âm tiếng Nhật. Điều này giúp điều khiển cách đọc tên và từ có nhiều cách hiểu.</p><h4>Khoảng dừng và âm thanh hoàn chỉnh</h4><p>Nhà sản xuất cho phép đặt khoảng dừng giữa các đoạn lời với thời lượng <strong>0,01–99,99 giây</strong>. Thời lượng khoảng dừng có độ chính xác đến hai chữ số sau dấu phẩy; dấu được đặt giữa các đoạn lời và không đặt liên tiếp. Văn bản của một yêu cầu đồng bộ phải ít hơn <strong>10 000 ký tự</strong>. Có thể nhận toàn bộ âm thanh hoặc nhận dần; với văn bản dài hơn 3000 ký tự, đầu ra truyền luồng được khuyến nghị.</p><p>Các định dạng của mô hình gồm MP3, WAV, FLAC và PCM; cài đặt tổng hợp chung còn mô tả Opus và các biến thể G.711 μ-law. Có thể dùng mono hoặc stereo. Thẻ này cung cấp đọc văn bản thành tiếng, còn việc chuẩn bị giọng riêng và cài đặt mở rộng chỉ áp dụng trong phạm vi phương thức truy cập được hỗ trợ qua Ailoot.</p><p>Cài đặt âm thanh bổ sung gồm các tần số lấy mẫu <strong>8, 16, 22,05, 24, 32 và 44,1 kHz</strong>. MP3 có các mức bitrate <strong>32, 64, 128 hoặc 256 kbit/s</strong>. Có thể thay đổi màu giọng và áp dụng một hiệu ứng: tiếng vang không gian rộng, tiếng vang hội trường, âm thanh điện thoại hoặc giọng robot. Hiệu ứng thay đổi giọng được hỗ trợ cho MP3, WAV và FLAC khi nhận toàn bộ âm thanh, còn với đầu ra truyền luồng chỉ hỗ trợ MP3. Các định dạng G.711 μ-law sử dụng tần số 8 kHz. Những khả năng này thuộc cài đặt tổng hợp của MiniMax.</p><p>Nhà sản xuất cung cấp đồng bộ lời nói với văn bản: dấu thời gian theo câu, theo từ hoặc theo từ khi xuất dần. Kết quả này giúp kết hợp lời đọc với việc hiển thị văn bản. Khả năng bổ sung này cần hỗ trợ định dạng câu trả lời tương ứng.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Có trên Ailoot · đầu vào &amp; phương thức</h3><details class=\"card-method\" open><summary><b>Ailoot · Tổng hợp giọng nói</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Đầu vào</dt><dd><code>text</code></dd></div><div><dt>Đầu ra</dt><dd><code>speech</code></dd></div><div><dt>Định dạng đầu ra</dt><dd>mp3</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Trường</th><th>Loại</th><th>Yêu cầu</th><th>Giá trị &amp; giới hạn</th><th>Mặc định</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>speech-02-hd</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Độ dài tối thiểu: 1</div><div>Độ dài tối đa (không gồm ngưỡng): 10.000</div><div>Đơn vị: ký tự Unicode</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Mẫu: ^[A-Za-z0-9_-]{1,128}$</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>mp3</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Tổ hợp tư liệu đầu vào</summary><p class=\"note-s\"><b>text_to_speech</b> · Bắt buộc: input</p></details><details class=\"note-s\" data-method-contract><summary>Tham số phương thức và vòng đời</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Tham số</th><th>Hợp đồng</th></tr></thead><tbody><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_types</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>text</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>required</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>null</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>optional_controls</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>null</td></tr></tbody></table></div><p>Vòng đời: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><h4>Mức phí phương thức Ailoot</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Tổng hợp giọng nói</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Đầu vào</dt><dd>100,00 US$ <em>mỗi 1 triệu ký tự</em></dd></div></dl></section><p class=\"note-s\">Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. <a href=\"/docs/vi/billing/reserve/\">Cách hoạt động của cơ chế tạm giữ và quyết toán →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Ví dụ yêu cầu</h3><h4>Ailoot · Tổng hợp giọng nói</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-467-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-467-panel-0\" aria-selected=\"true\" tabindex=\"0\">Ví dụ giọng nói</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-467-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-467-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\n: &quot;${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;speech-02-hd&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nimport re\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nif not re.fullmatch(r&quot;[A-Za-z0-9_-]{1,128}&quot;,voice):raise SystemExit(&quot;Set an actual accepted voice ID&quot;)\np[&quot;voice&quot;]=voice\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Nhận và lưu kết quả</h3><h4>Ailoot · Tổng hợp giọng nói</h4><p class=\"note-s\">mp3</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Lưu tất cả kết quả đã hoàn tất</h5><p class=\"note-s\">Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.</p><p class=\"note-s\">Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Nếu cần kiểm tra phản hồi gốc</h5><p class=\"note-s\">Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh.</p></div><details class=\"card-about\" data-output-fields><summary>Trường phản hồi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Trường</th><th>Loại</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>bytes</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Lỗi và bước tiếp theo</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Phản hồi</th><th>Điều kiện</th><th>Bước tiếp theo</th></tr></thead><tbody><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span><code>server_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Bí danh</h3><h4>Bí danh mô hình</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=speech-02-hd&amp;route=Core&amp;caller=speech-02-hd&amp;fmt=speech\"><code>speech-02-hd</code></a></span></p><h4>Bí danh đường dẫn phương thức</h4><p class=\"note-s\">Dùng các đường dẫn phương thức hiển thị ở trên.</p><h4>ID gọi liên quan</h4><p class=\"note-s\"><a href=\"#m=speech-02-hd&amp;route=Core&amp;caller=speech-02-hd&amp;fmt=speech\"><code>speech-02-hd</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "speech-02-hd",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "speech-02-hd",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|speech-02-hd",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ",
                "http_status": 400,
                "recovery": "Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra",
                "http_status": null,
                "recovery": "Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-02-hd"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "ký tự Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-02-hd\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Tổng hợp giọng nói",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 100,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-02-hd",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 100
          }
        ]
      }
    }
  ],
  "model_id": "speech-02-hd",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "5d9d4afd1aff7c8aabd26093c89f0fbda7b82213d763f271be22ed2a4f9b0d49",
    "input_html_sha256": "ba121a48085dcf6b00c847516b2acb5ad409469b0603d5aa7fa901516baf520a",
    "private_audit_sha256": "992436f5d21644cdce537016e1bd141cc462d5d328ff7399a0d36263f81a5313",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/speech-02-hd/",
    "description": "Speech-02 HD là mô hình tổng hợp giọng nói chú trọng chất lượng âm thanh và độ giống giọng.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/speech-02-hd/index.md",
    "title": "speech-02-hd — Ailoot",
    "url": "https://ailoot.ai/models/vi/speech-02-hd/"
  },
  "rawModel": {
    "about": "### Giọng cho đọc nội dung và văn bản dài\n\nSpeech 02 HD tạo lời nói chú trọng chất lượng, nhịp điệu và độ ổn định của giọng. Nhà sản xuất nhấn mạnh đọc nội dung và sách nói, nơi giọng cần giữ đặc trưng và duy trì đều qua văn bản dài. Đây là mô hình tổng hợp: nhận văn bản và chuyển thành âm thanh lời nói.\n\n### Kết hợp văn bản và âm sắc\n\nDòng Speech 02 dựa trên kiến trúc Transformer tự hồi quy và bộ mã hóa người nói có thể học. Trích xuất âm sắc và tạo lời nói được huấn luyện cùng nhau để phối hợp đặc điểm giọng với nội dung. Khả năng của dòng mô hình gồm sử dụng giọng nhân bản đã chuẩn bị và kết hợp ngôn ngữ, giọng vùng miền, cách phát âm.\n\n### Cảm xúc và đọc đa ngôn ngữ\n\nSắc thái cảm xúc có thể được xác định từ ý nghĩa văn bản hoặc đặt thủ công. Các trạng thái gồm vui, buồn, giận dữ, sợ hãi, ghê tởm, ngạc nhiên và bình tĩnh. Mô hình xử lý tiếng Nga, Anh và các ngôn ngữ khác; nhà sản xuất mô tả nhiều giọng tiếng Anh, tiếng Trung và Quảng Đông, Nhật, Hàn, các ngôn ngữ châu Âu và những ngôn ngữ khác.\n\nMô tả hiện tại của Speech 02 loại trừ riêng tiếng Ba Tư, Filipino và Tamil. Không nên tự động áp dụng danh sách ngôn ngữ chung của các thế hệ Speech mới hơn cho phiên bản này.\n\n### Cài đặt giọng\n\nTổng hợp cung cấp chọn giọng, thay đổi tốc độ **0,5–2**, âm lượng lớn hơn 0 và tối đa **10**, cao độ từ **−12 đến 12**. Trong từ điển phát âm, có thể thay cách viết bằng cách đọc mong muốn; mô hình hỗ trợ ký hiệu phiên âm và các cách phát âm tiếng Nhật. Điều này giúp điều khiển cách đọc tên và từ có nhiều cách hiểu.\n\n### Khoảng dừng và âm thanh hoàn chỉnh\n\nNhà sản xuất cho phép đặt khoảng dừng giữa các đoạn lời với thời lượng **0,01–99,99 giây**. Thời lượng khoảng dừng có độ chính xác đến hai chữ số sau dấu phẩy; dấu được đặt giữa các đoạn lời và không đặt liên tiếp. Văn bản của một yêu cầu đồng bộ phải ít hơn **10 000 ký tự**. Có thể nhận toàn bộ âm thanh hoặc nhận dần; với văn bản dài hơn 3000 ký tự, đầu ra truyền luồng được khuyến nghị.\n\nCác định dạng của mô hình gồm MP3, WAV, FLAC và PCM; cài đặt tổng hợp chung còn mô tả Opus và các biến thể G.711 μ-law. Có thể dùng mono hoặc stereo. Thẻ này cung cấp đọc văn bản thành tiếng, còn việc chuẩn bị giọng riêng và cài đặt mở rộng chỉ áp dụng trong phạm vi phương thức truy cập được hỗ trợ qua Ailoot.\n\nCài đặt âm thanh bổ sung gồm các tần số lấy mẫu **8, 16, 22,05, 24, 32 và 44,1 kHz**. MP3 có các mức bitrate **32, 64, 128 hoặc 256 kbit/s**. Có thể thay đổi màu giọng và áp dụng một hiệu ứng: tiếng vang không gian rộng, tiếng vang hội trường, âm thanh điện thoại hoặc giọng robot. Hiệu ứng thay đổi giọng được hỗ trợ cho MP3, WAV và FLAC khi nhận toàn bộ âm thanh, còn với đầu ra truyền luồng chỉ hỗ trợ MP3. Các định dạng G.711 μ-law sử dụng tần số 8 kHz. Những khả năng này thuộc cài đặt tổng hợp của MiniMax.\n\nNhà sản xuất cung cấp đồng bộ lời nói với văn bản: dấu thời gian theo câu, theo từ hoặc theo từ khi xuất dần. Kết quả này giúp kết hợp lời đọc với việc hiển thị văn bản. Khả năng bổ sung này cần hỗ trợ định dạng câu trả lời tương ứng.",
    "alias_of": null,
    "aliases": [],
    "author": "MiniMax",
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "speech-02-hd",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ",
                "http_status": 400,
                "recovery": "Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra",
                "http_status": null,
                "recovery": "Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-02-hd"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "ký tự Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-02-hd\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Tổng hợp giọng nói",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 100,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-02-hd",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 100
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "speech-02-hd",
        "request_model_id": "speech-02-hd",
        "route_label": "Core"
      }
    ],
    "name": "speech-02-hd",
    "price": {
      "in": 100,
      "in_label": "per 1 million characters",
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Speech-02 HD là mô hình tổng hợp giọng nói chú trọng chất lượng âm thanh và độ giống giọng."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Speech-02 HD là mô hình tổng hợp giọng nói chú trọng chất lượng âm thanh và độ giống giọng.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "c469fe0b7fc964743864015d49d155a726c856ac60edeee85c5041f8ae73b11d",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "54b31e7ebcf14a54644618f6b181022e605d42b6df87649784c0d175e944a434"
}
