{
  "aboutHtml": "<p>S2.1 Pro là mô hình chuyển văn bản thành giọng nói đời sau thuộc thế hệ S2 của Fish Audio, dành cho thuyết minh giàu biểu cảm và ứng dụng giọng nói hội thoại. Nó cải thiện chất lượng giọng nói, độ trễ và thông lượng so với S2 Pro, đồng thời giữ điều khiển cách thể hiện bằng ngôn ngữ tự nhiên và hội thoại nhiều người nói tích hợp sẵn. S2.1 Pro và S2.1 Pro Free chia sẻ mô hình giọng nói nền.</p><p>Với lời giải thích có thuyết minh, cung cấp lời văn hoàn chỉnh, giọng mong muốn và những thời điểm cần đổi nhịp hoặc nhấn mạnh. Với ứng dụng hội thoại, tổng hợp câu trả lời do ứng dụng chọn và tách nội dung thông tin khỏi chỉ dẫn thể hiện. Với cuộc trao đổi có kịch bản, xác định người nói và giọng của họ trước khi viết từng lượt. Kết quả hữu ích là đoạn âm thanh hoàn chỉnh hoặc luồng có thể phát, với lời nói, cách thể hiện và vai trò người nói khớp yêu cầu.</p><p>Viết những lời thực sự cần được đọc thành tiếng, rồi đặt chỉ dẫn ngay trước đoạn cần thay đổi cách thể hiện. Chỉ dẫn trong ngoặc vuông có thể diễn tả tiếng thì thầm, khoảng dừng, phản ứng, sự nhấn mạnh hoặc một phong cách nói tự do. Đặt thay đổi giữa câu đúng tại vị trí cần đổi cách thể hiện, và luôn có lời thoại thực tế theo sau chỉ dẫn mô tả. Một yêu cầu thuyết minh hữu ích tách nội dung thông tin khỏi sự ấm áp, tốc độ hoặc mức nhấn mạnh mong muốn dành cho người nghe.</p><p>Với một người nói, chọn mã giọng đã lưu hoặc cung cấp bản ghi âm tham chiếu kèm bản chép lời. Hướng dẫn giọng nói của nhà sản xuất khuyến nghị mẫu sạch dài 10–30 giây để điều kiện hóa giọng tức thời. Chọn mẫu có sắc thái và chất lượng thu âm phù hợp với kịch bản, đồng thời giữ nguyên mẫu đó ở những đoạn liên quan. Mẫu giọng xác định âm sắc của người nói; văn bản và chỉ dẫn nội tuyến xác định nội dung cùng cách thể hiện.</p><p>Tổng hợp nhiều người nói tích hợp sẵn sử dụng các dấu như &lt;|speaker:0|&gt; và &lt;|speaker:1|&gt; cùng mảng mã giọng có thứ tự hoặc các nhóm tham chiếu riêng. Giữ nhãn số của người nói khớp với thứ tự đó. Trong một cuộc trao đổi hướng dẫn, viết lời của từng người và đặt chỉ dẫn thể hiện sau dấu người nói tại vị trí thích hợp. Cách này tạo hội thoại trong một yêu cầu; quy trình khác với việc tạo các đoạn đơn giọng riêng bằng S1 rồi ghép lại.</p><p>Quy trình của nhà sản xuất cung cấp đầu ra MP3, WAV, PCM thô và Opus, mặc định là MP3. MP3 hỗ trợ 64, 128 và 192 kbps; WAV và PCM sử dụng định dạng mẫu mono 16 bit được tài liệu quy định, còn Opus dùng 48 kHz. Chọn định dạng phù hợp với tệp thuyết minh cần lưu, phát trực tuyến hoặc quy trình xử lý âm thanh phía sau. Giữ toàn bộ kịch bản và lựa chọn giọng cùng âm thanh để lần chỉnh sửa sau có thể sửa một câu mà vẫn giữ cách thể hiện mong muốn.</p><p>Có thể điều chỉnh tốc độ từ 0,5 đến 2,0 cùng các tùy chọn âm lượng. Chuẩn hóa văn bản khai triển số tiếng Anh và tiếng Trung để đọc tự nhiên. Chuẩn hóa độ lớn đầu ra mặc định là true và áp dụng cho họ S2; chính trường này không có tác dụng với S1. repetition_penalty của S1 không làm thay đổi âm thanh S2.1 Pro, vì vậy không nên coi thiết lập cũ là một điều khiển hữu hiệu cho mô hình này. Kiểm tra trực tiếp âm và từ bị lặp, thay vì dựa vào tham số được mang sang để xác nhận kết quả.</p><p>Kịch bản dài hơn được xử lý theo từng đoạn. Độ dài đoạn được tài liệu quy định nằm trong khoảng 100–300, còn max_new_tokens là ngân sách token âm thanh cho mỗi đoạn, không phải cam kết tổng thời lượng. Điều kiện hóa từ đoạn trước có thể chuyển tiếp ngữ cảnh giọng. Quy trình cung cấp kết quả của nhà sản xuất mô tả âm thanh hoàn chỉnh, các đoạn âm thanh tăng dần và truyền văn bản trực tiếp khi kịch bản đến từng phần. Chọn cách tiếp nhận phù hợp với ứng dụng và giữ đủ ngữ cảnh kịch bản cho phát âm cùng sắc thái của đoạn kế tiếp.</p><p>Để có sản phẩm cuối hữu ích, nghe kiểm tra từ bị bỏ hoặc lặp, cách đọc số, chuyển người nói, khoảng dừng và cường độ của chỉ dẫn. Các mẫu giọng khác nhau có thể thể hiện cùng một chỉ dẫn với mức độ khác nhau, nên bắt đầu bằng một câu có chỉ dẫn đơn giản trước khi thêm các thẻ cạnh tranh. Khi làm nội dung đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích thay vì yêu cầu mô hình giọng nói tự sáng tác hoặc dịch nội dung. Một lần sửa có trọng tâm thay đổi câu, chỉ dẫn hoặc mẫu tham chiếu gây sai lệch, đồng thời giữ những phần thể hiện đã phù hợp với yêu cầu.</p>",
  "aboutText": "S2.1 Pro là mô hình chuyển văn bản thành giọng nói đời sau thuộc thế hệ S2 của Fish Audio, dành cho thuyết minh giàu biểu cảm và ứng dụng giọng nói hội thoại. Nó cải thiện chất lượng giọng nói, độ trễ và thông lượng so với S2 Pro, đồng thời giữ điều khiển cách thể hiện bằng ngôn ngữ tự nhiên và hội thoại nhiều người nói tích hợp sẵn. S2.1 Pro và S2.1 Pro Free chia sẻ mô hình giọng nói nền.\n\nVới lời giải thích có thuyết minh, cung cấp lời văn hoàn chỉnh, giọng mong muốn và những thời điểm cần đổi nhịp hoặc nhấn mạnh. Với ứng dụng hội thoại, tổng hợp câu trả lời do ứng dụng chọn và tách nội dung thông tin khỏi chỉ dẫn thể hiện. Với cuộc trao đổi có kịch bản, xác định người nói và giọng của họ trước khi viết từng lượt. Kết quả hữu ích là đoạn âm thanh hoàn chỉnh hoặc luồng có thể phát, với lời nói, cách thể hiện và vai trò người nói khớp yêu cầu.\n\nViết những lời thực sự cần được đọc thành tiếng, rồi đặt chỉ dẫn ngay trước đoạn cần thay đổi cách thể hiện. Chỉ dẫn trong ngoặc vuông có thể diễn tả tiếng thì thầm, khoảng dừng, phản ứng, sự nhấn mạnh hoặc một phong cách nói tự do. Đặt thay đổi giữa câu đúng tại vị trí cần đổi cách thể hiện, và luôn có lời thoại thực tế theo sau chỉ dẫn mô tả. Một yêu cầu thuyết minh hữu ích tách nội dung thông tin khỏi sự ấm áp, tốc độ hoặc mức nhấn mạnh mong muốn dành cho người nghe.\n\nVới một người nói, chọn mã giọng đã lưu hoặc cung cấp bản ghi âm tham chiếu kèm bản chép lời. Hướng dẫn giọng nói của nhà sản xuất khuyến nghị mẫu sạch dài 10–30 giây để điều kiện hóa giọng tức thời. Chọn mẫu có sắc thái và chất lượng thu âm phù hợp với kịch bản, đồng thời giữ nguyên mẫu đó ở những đoạn liên quan. Mẫu giọng xác định âm sắc của người nói; văn bản và chỉ dẫn nội tuyến xác định nội dung cùng cách thể hiện.\n\nTổng hợp nhiều người nói tích hợp sẵn sử dụng các dấu như <|speaker:0|> và <|speaker:1|> cùng mảng mã giọng có thứ tự hoặc các nhóm tham chiếu riêng. Giữ nhãn số của người nói khớp với thứ tự đó. Trong một cuộc trao đổi hướng dẫn, viết lời của từng người và đặt chỉ dẫn thể hiện sau dấu người nói tại vị trí thích hợp. Cách này tạo hội thoại trong một yêu cầu; quy trình khác với việc tạo các đoạn đơn giọng riêng bằng S1 rồi ghép lại.\n\nQuy trình của nhà sản xuất cung cấp đầu ra MP3, WAV, PCM thô và Opus, mặc định là MP3. MP3 hỗ trợ 64, 128 và 192 kbps; WAV và PCM sử dụng định dạng mẫu mono 16 bit được tài liệu quy định, còn Opus dùng 48 kHz. Chọn định dạng phù hợp với tệp thuyết minh cần lưu, phát trực tuyến hoặc quy trình xử lý âm thanh phía sau. Giữ toàn bộ kịch bản và lựa chọn giọng cùng âm thanh để lần chỉnh sửa sau có thể sửa một câu mà vẫn giữ cách thể hiện mong muốn.\n\nCó thể điều chỉnh tốc độ từ 0,5 đến 2,0 cùng các tùy chọn âm lượng. Chuẩn hóa văn bản khai triển số tiếng Anh và tiếng Trung để đọc tự nhiên. Chuẩn hóa độ lớn đầu ra mặc định là true và áp dụng cho họ S2; chính trường này không có tác dụng với S1. repetition_penalty của S1 không làm thay đổi âm thanh S2.1 Pro, vì vậy không nên coi thiết lập cũ là một điều khiển hữu hiệu cho mô hình này. Kiểm tra trực tiếp âm và từ bị lặp, thay vì dựa vào tham số được mang sang để xác nhận kết quả.\n\nKịch bản dài hơn được xử lý theo từng đoạn. Độ dài đoạn được tài liệu quy định nằm trong khoảng 100–300, còn max_new_tokens là ngân sách token âm thanh cho mỗi đoạn, không phải cam kết tổng thời lượng. Điều kiện hóa từ đoạn trước có thể chuyển tiếp ngữ cảnh giọng. Quy trình cung cấp kết quả của nhà sản xuất mô tả âm thanh hoàn chỉnh, các đoạn âm thanh tăng dần và truyền văn bản trực tiếp khi kịch bản đến từng phần. Chọn cách tiếp nhận phù hợp với ứng dụng và giữ đủ ngữ cảnh kịch bản cho phát âm cùng sắc thái của đoạn kế tiếp.\n\nĐể có sản phẩm cuối hữu ích, nghe kiểm tra từ bị bỏ hoặc lặp, cách đọc số, chuyển người nói, khoảng dừng và cường độ của chỉ dẫn. Các mẫu giọng khác nhau có thể thể hiện cùng một chỉ dẫn với mức độ khác nhau, nên bắt đầu bằng một câu có chỉ dẫn đơn giản trước khi thêm các thẻ cạnh tranh. Khi làm nội dung đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích thay vì yêu cầu mô hình giọng nói tự sáng tác hoặc dịch nội dung. Một lần sửa có trọng tâm thay đổi câu, chỉ dẫn hoặc mẫu tham chiếu gây sai lệch, đồng thời giữ những phần thể hiện đã phù hợp với yêu cầu.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "098710e927c9758c90e4ab8a6ee2f776637982be856105705385acecb028daea",
    "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\">•</span><h2 id=\"sheet-title\">Fish Audio: S2.1 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/s2.1-pro</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=\"Ultra|speech|/v1/audio/speech|fish-audio%2Fs2.1-pro\">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\">Fish Audio S2.1 Pro tạo giọng nói đa ngôn ngữ giàu biểu cảm và hội thoại nhiều người nói tích hợp sẵn, cải thiện chất lượng, độ trễ và thông lượng so với S2 Pro. Chỉ dẫn cách thể hiện ngay trong kịch bản và dùng mẫu giọng tham chiếu để tạo thuyết minh hoặc âm thanh hội thoại.</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>Âm thanh</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\"><p>S2.1 Pro là mô hình chuyển văn bản thành giọng nói đời sau thuộc thế hệ S2 của Fish Audio, dành cho thuyết minh giàu biểu cảm và ứng dụng giọng nói hội thoại. Nó cải thiện chất lượng giọng nói, độ trễ và thông lượng so với S2 Pro, đồng thời giữ điều khiển cách thể hiện bằng ngôn ngữ tự nhiên và hội thoại nhiều người nói tích hợp sẵn. S2.1 Pro và S2.1 Pro Free chia sẻ mô hình giọng nói nền.</p><p>Với lời giải thích có thuyết minh, cung cấp lời văn hoàn chỉnh, giọng mong muốn và những thời điểm cần đổi nhịp hoặc nhấn mạnh. Với ứng dụng hội thoại, tổng hợp câu trả lời do ứng dụng chọn và tách nội dung thông tin khỏi chỉ dẫn thể hiện. Với cuộc trao đổi có kịch bản, xác định người nói và giọng của họ trước khi viết từng lượt. Kết quả hữu ích là đoạn âm thanh hoàn chỉnh hoặc luồng có thể phát, với lời nói, cách thể hiện và vai trò người nói khớp yêu cầu.</p><p>Viết những lời thực sự cần được đọc thành tiếng, rồi đặt chỉ dẫn ngay trước đoạn cần thay đổi cách thể hiện. Chỉ dẫn trong ngoặc vuông có thể diễn tả tiếng thì thầm, khoảng dừng, phản ứng, sự nhấn mạnh hoặc một phong cách nói tự do. Đặt thay đổi giữa câu đúng tại vị trí cần đổi cách thể hiện, và luôn có lời thoại thực tế theo sau chỉ dẫn mô tả. Một yêu cầu thuyết minh hữu ích tách nội dung thông tin khỏi sự ấm áp, tốc độ hoặc mức nhấn mạnh mong muốn dành cho người nghe.</p><p>Với một người nói, chọn mã giọng đã lưu hoặc cung cấp bản ghi âm tham chiếu kèm bản chép lời. Hướng dẫn giọng nói của nhà sản xuất khuyến nghị mẫu sạch dài 10–30 giây để điều kiện hóa giọng tức thời. Chọn mẫu có sắc thái và chất lượng thu âm phù hợp với kịch bản, đồng thời giữ nguyên mẫu đó ở những đoạn liên quan. Mẫu giọng xác định âm sắc của người nói; văn bản và chỉ dẫn nội tuyến xác định nội dung cùng cách thể hiện.</p><p>Tổng hợp nhiều người nói tích hợp sẵn sử dụng các dấu như &lt;|speaker:0|&gt; và &lt;|speaker:1|&gt; cùng mảng mã giọng có thứ tự hoặc các nhóm tham chiếu riêng. Giữ nhãn số của người nói khớp với thứ tự đó. Trong một cuộc trao đổi hướng dẫn, viết lời của từng người và đặt chỉ dẫn thể hiện sau dấu người nói tại vị trí thích hợp. Cách này tạo hội thoại trong một yêu cầu; quy trình khác với việc tạo các đoạn đơn giọng riêng bằng S1 rồi ghép lại.</p><p>Quy trình của nhà sản xuất cung cấp đầu ra MP3, WAV, PCM thô và Opus, mặc định là MP3. MP3 hỗ trợ 64, 128 và 192 kbps; WAV và PCM sử dụng định dạng mẫu mono 16 bit được tài liệu quy định, còn Opus dùng 48 kHz. Chọn định dạng phù hợp với tệp thuyết minh cần lưu, phát trực tuyến hoặc quy trình xử lý âm thanh phía sau. Giữ toàn bộ kịch bản và lựa chọn giọng cùng âm thanh để lần chỉnh sửa sau có thể sửa một câu mà vẫn giữ cách thể hiện mong muốn.</p><p>Có thể điều chỉnh tốc độ từ 0,5 đến 2,0 cùng các tùy chọn âm lượng. Chuẩn hóa văn bản khai triển số tiếng Anh và tiếng Trung để đọc tự nhiên. Chuẩn hóa độ lớn đầu ra mặc định là true và áp dụng cho họ S2; chính trường này không có tác dụng với S1. repetition_penalty của S1 không làm thay đổi âm thanh S2.1 Pro, vì vậy không nên coi thiết lập cũ là một điều khiển hữu hiệu cho mô hình này. Kiểm tra trực tiếp âm và từ bị lặp, thay vì dựa vào tham số được mang sang để xác nhận kết quả.</p><p>Kịch bản dài hơn được xử lý theo từng đoạn. Độ dài đoạn được tài liệu quy định nằm trong khoảng 100–300, còn max_new_tokens là ngân sách token âm thanh cho mỗi đoạn, không phải cam kết tổng thời lượng. Điều kiện hóa từ đoạn trước có thể chuyển tiếp ngữ cảnh giọng. Quy trình cung cấp kết quả của nhà sản xuất mô tả âm thanh hoàn chỉnh, các đoạn âm thanh tăng dần và truyền văn bản trực tiếp khi kịch bản đến từng phần. Chọn cách tiếp nhận phù hợp với ứng dụng và giữ đủ ngữ cảnh kịch bản cho phát âm cùng sắc thái của đoạn kế tiếp.</p><p>Để có sản phẩm cuối hữu ích, nghe kiểm tra từ bị bỏ hoặc lặp, cách đọc số, chuyển người nói, khoảng dừng và cường độ của chỉ dẫn. Các mẫu giọng khác nhau có thể thể hiện cùng một chỉ dẫn với mức độ khác nhau, nên bắt đầu bằng một câu có chỉ dẫn đơn giản trước khi thêm các thẻ cạnh tranh. Khi làm nội dung đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích thay vì yêu cầu mô hình giọng nói tự sáng tác hoặc dịch nội dung. Một lần sửa có trọng tâm thay đổi câu, chỉ dẫn hoặc mẫu tham chiếu gây sai lệch, đồng thời giữ những phần thể hiện đã phù hợp với yêu cầu.</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 Ultra · 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>audio</code></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><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>fish-audio/s2.1-pro</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><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></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><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>b347db033a6549378b48d00acb0d06cd</div><div>Độ dài tối thiểu: 1</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</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_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, pcm</div></td><td data-cell-label=\"Mặc định\" data-default=\"known\"><span class=\"card-cell-label\">Mặc định</span>pcm</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>object</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></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=\"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>content_type</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>application/json</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>model, input, voice</td></tr><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></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></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí Ailoot</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Đơn vị tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Token đầu vào</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu ra · Token đầu ra</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Đọc bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm, 1 giờ</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Byte UTF-8 đầu vào</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi byte UTF-8 đầu vào</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Byte UTF-8 đầu vào</span> <b>$0.00003</b> <span class=\"price-unit\">mỗi byte UTF-8 đầu vào</span></div></td></tr></tbody></table></div></div><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 Ultra · 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-1357-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1357-panel-0\" aria-selected=\"true\" tabindex=\"0\">Sử dụng đầu vào thực tế và giữ lại kết quả đầy đủ</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-1357-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1357-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_TEXT:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_TEXT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;fish-audio/s2.1-pro&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;b347db033a6549378b48d00acb0d06cd&#39;, &#39;response_format&#39;: &#39;mp3&#39;}\nrequest[&#39;input&#39;]=os.environ[&#39;AILOOT_INPUT_TEXT&#39;]\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\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 Ultra · Giọng nói</h4><p class=\"note-s\">Toàn bộ âm thanh nhị phân hoặc phản hồi audio_url gốc, tiêu đề và mọi tài sản thuộc quyền sở hữu.</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><details class=\"card-about\"><summary>Lượt đọc nội dung khác</summary><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-1358-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1358-panel-0\" aria-selected=\"true\" tabindex=\"0\">Đọc tài nguyên hiện có thuộc về bạn</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-1358-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1358-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n</code></pre></div></div></div></details><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ộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.</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 X-Client-Request-ID đã trả về để đối soát. Chỉ truy xuất theo các giá trị task_id/asset_id thực tế đã trả về hoặc từ thư viện nội dung đa phương tiện thuộc quyền sở hữu của bạn; tuyệt đối không tạo URL tác vụ từ ID thao tác và không gửi lại yêu cầu tạo.</p></div></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=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Fs2.1-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro&amp;fmt=speech\"><code>fish-audio/s2.1-pro</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=fish-audio%2Fs2.1-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro&amp;fmt=speech\"><code>fish-audio/s2.1-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s2.1-pro",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs2.1-pro",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "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": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại X-Client-Request-ID đã trả về để đối soát. Chỉ truy xuất theo các giá trị task_id/asset_id thực tế đã trả về hoặc từ thư viện nội dung đa phương tiện thuộc quyền sở hữu của bạn; tuyệt đối không tạo URL tác vụ từ ID thao tác và không gửi lại yêu cầu tạo."
            },
            "outputs": {
              "all_results": "Giữ lại toàn bộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Toàn bộ âm thanh nhị phân hoặc phản hồi audio_url gốc, tiêu đề và mọi tài sản thuộc quyền sở hữu."
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2.1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2.1-pro"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2.1-pro",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "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": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2.1-pro', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Giọng nói",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s2.1-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "ca42514b1812ba4108162460c750b1a339e3743495ee5a136fa423706e9b2212",
    "input_html_sha256": "70ed31e9d108b373f2045eff3da6de3fbcc5bcdff0b91c29ac42e4f607576dc9",
    "private_audit_sha256": "c2ff90ac1204007a964e5688305e195c5f0ff7cf0a759817e4fd4a1351ee292d",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/fish-audio-s2-1-pro/",
    "description": "Fish Audio S2.1 Pro tạo giọng nói đa ngôn ngữ giàu biểu cảm và hội thoại nhiều người nói tích hợp sẵn, cải thiện chất lượng, độ trễ và thông lượng so với S2 Pro. Chỉ dẫn cách thể hiện ngay trong kịch bản và dùng mẫu giọng tham chiếu để tạo thuyết minh hoặc âm thanh hội thoại.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/fish-audio-s2-1-pro/index.md",
    "title": "Fish Audio: S2.1 Pro — Ailoot",
    "url": "https://ailoot.ai/models/vi/fish-audio-s2-1-pro/"
  },
  "rawModel": {
    "about": "S2.1 Pro là mô hình chuyển văn bản thành giọng nói đời sau thuộc thế hệ S2 của Fish Audio, dành cho thuyết minh giàu biểu cảm và ứng dụng giọng nói hội thoại. Nó cải thiện chất lượng giọng nói, độ trễ và thông lượng so với S2 Pro, đồng thời giữ điều khiển cách thể hiện bằng ngôn ngữ tự nhiên và hội thoại nhiều người nói tích hợp sẵn. S2.1 Pro và S2.1 Pro Free chia sẻ mô hình giọng nói nền.\n\nVới lời giải thích có thuyết minh, cung cấp lời văn hoàn chỉnh, giọng mong muốn và những thời điểm cần đổi nhịp hoặc nhấn mạnh. Với ứng dụng hội thoại, tổng hợp câu trả lời do ứng dụng chọn và tách nội dung thông tin khỏi chỉ dẫn thể hiện. Với cuộc trao đổi có kịch bản, xác định người nói và giọng của họ trước khi viết từng lượt. Kết quả hữu ích là đoạn âm thanh hoàn chỉnh hoặc luồng có thể phát, với lời nói, cách thể hiện và vai trò người nói khớp yêu cầu.\n\nViết những lời thực sự cần được đọc thành tiếng, rồi đặt chỉ dẫn ngay trước đoạn cần thay đổi cách thể hiện. Chỉ dẫn trong ngoặc vuông có thể diễn tả tiếng thì thầm, khoảng dừng, phản ứng, sự nhấn mạnh hoặc một phong cách nói tự do. Đặt thay đổi giữa câu đúng tại vị trí cần đổi cách thể hiện, và luôn có lời thoại thực tế theo sau chỉ dẫn mô tả. Một yêu cầu thuyết minh hữu ích tách nội dung thông tin khỏi sự ấm áp, tốc độ hoặc mức nhấn mạnh mong muốn dành cho người nghe.\n\nVới một người nói, chọn mã giọng đã lưu hoặc cung cấp bản ghi âm tham chiếu kèm bản chép lời. Hướng dẫn giọng nói của nhà sản xuất khuyến nghị mẫu sạch dài 10–30 giây để điều kiện hóa giọng tức thời. Chọn mẫu có sắc thái và chất lượng thu âm phù hợp với kịch bản, đồng thời giữ nguyên mẫu đó ở những đoạn liên quan. Mẫu giọng xác định âm sắc của người nói; văn bản và chỉ dẫn nội tuyến xác định nội dung cùng cách thể hiện.\n\nTổng hợp nhiều người nói tích hợp sẵn sử dụng các dấu như <|speaker:0|> và <|speaker:1|> cùng mảng mã giọng có thứ tự hoặc các nhóm tham chiếu riêng. Giữ nhãn số của người nói khớp với thứ tự đó. Trong một cuộc trao đổi hướng dẫn, viết lời của từng người và đặt chỉ dẫn thể hiện sau dấu người nói tại vị trí thích hợp. Cách này tạo hội thoại trong một yêu cầu; quy trình khác với việc tạo các đoạn đơn giọng riêng bằng S1 rồi ghép lại.\n\nQuy trình của nhà sản xuất cung cấp đầu ra MP3, WAV, PCM thô và Opus, mặc định là MP3. MP3 hỗ trợ 64, 128 và 192 kbps; WAV và PCM sử dụng định dạng mẫu mono 16 bit được tài liệu quy định, còn Opus dùng 48 kHz. Chọn định dạng phù hợp với tệp thuyết minh cần lưu, phát trực tuyến hoặc quy trình xử lý âm thanh phía sau. Giữ toàn bộ kịch bản và lựa chọn giọng cùng âm thanh để lần chỉnh sửa sau có thể sửa một câu mà vẫn giữ cách thể hiện mong muốn.\n\nCó thể điều chỉnh tốc độ từ 0,5 đến 2,0 cùng các tùy chọn âm lượng. Chuẩn hóa văn bản khai triển số tiếng Anh và tiếng Trung để đọc tự nhiên. Chuẩn hóa độ lớn đầu ra mặc định là true và áp dụng cho họ S2; chính trường này không có tác dụng với S1. repetition_penalty của S1 không làm thay đổi âm thanh S2.1 Pro, vì vậy không nên coi thiết lập cũ là một điều khiển hữu hiệu cho mô hình này. Kiểm tra trực tiếp âm và từ bị lặp, thay vì dựa vào tham số được mang sang để xác nhận kết quả.\n\nKịch bản dài hơn được xử lý theo từng đoạn. Độ dài đoạn được tài liệu quy định nằm trong khoảng 100–300, còn max_new_tokens là ngân sách token âm thanh cho mỗi đoạn, không phải cam kết tổng thời lượng. Điều kiện hóa từ đoạn trước có thể chuyển tiếp ngữ cảnh giọng. Quy trình cung cấp kết quả của nhà sản xuất mô tả âm thanh hoàn chỉnh, các đoạn âm thanh tăng dần và truyền văn bản trực tiếp khi kịch bản đến từng phần. Chọn cách tiếp nhận phù hợp với ứng dụng và giữ đủ ngữ cảnh kịch bản cho phát âm cùng sắc thái của đoạn kế tiếp.\n\nĐể có sản phẩm cuối hữu ích, nghe kiểm tra từ bị bỏ hoặc lặp, cách đọc số, chuyển người nói, khoảng dừng và cường độ của chỉ dẫn. Các mẫu giọng khác nhau có thể thể hiện cùng một chỉ dẫn với mức độ khác nhau, nên bắt đầu bằng một câu có chỉ dẫn đơn giản trước khi thêm các thẻ cạnh tranh. Khi làm nội dung đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích thay vì yêu cầu mô hình giọng nói tự sáng tác hoặc dịch nội dung. Một lần sửa có trọng tâm thay đổi câu, chỉ dẫn hoặc mẫu tham chiếu gây sai lệch, đồng thời giữ những phần thể hiện đã phù hợp với yêu cầu.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ],
        "summary": "Giá theo cấu hình được trình bày đầy đủ trong phần chi tiết."
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "fish-audio/s2.1-pro",
    "input": [
      "text"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "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": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại X-Client-Request-ID đã trả về để đối soát. Chỉ truy xuất theo các giá trị task_id/asset_id thực tế đã trả về hoặc từ thư viện nội dung đa phương tiện thuộc quyền sở hữu của bạn; tuyệt đối không tạo URL tác vụ từ ID thao tác và không gửi lại yêu cầu tạo."
            },
            "outputs": {
              "all_results": "Giữ lại toàn bộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Toàn bộ âm thanh nhị phân hoặc phản hồi audio_url gốc, tiêu đề và mọi tài sản thuộc quyền sở hữu."
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2.1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2.1-pro"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2.1-pro",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "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": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2.1-pro', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Giọng nói",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s2.1-pro",
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S2.1 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Fish Audio S2.1 Pro tạo giọng nói đa ngôn ngữ giàu biểu cảm và hội thoại nhiều người nói tích hợp sẵn, cải thiện chất lượng, độ trễ và thông lượng so với S2 Pro. Chỉ dẫn cách thể hiện ngay trong kịch bản và dùng mẫu giọng tham chiếu để tạo thuyết minh hoặc âm thanh hội thoại."
  },
  "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": "Fish Audio S2.1 Pro tạo giọng nói đa ngôn ngữ giàu biểu cảm và hội thoại nhiều người nói tích hợp sẵn, cải thiện chất lượng, độ trễ và thông lượng so với S2 Pro. Chỉ dẫn cách thể hiện ngay trong kịch bản và dùng mẫu giọng tham chiếu để tạo thuyết minh hoặc âm thanh hội thoại.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "e617f6616935faa1ec9288c916ac0c962ce305f17074f74ab64a90cf52051c66",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "ffda1b7f8dd6f285f91d54be63af3a89a0aab10fe015d71a92676cfff3088584"
}
