{
  "aboutHtml": "<p>S2.1 Pro Free là phiên bản hướng tới nhà phát triển của mô hình chuyển văn bản thành giọng nói S2.1 từ Fish Audio. Nó chia sẻ mô hình nền và các khả năng tổng hợp cốt lõi với S2.1 Pro: giọng nói đa ngôn ngữ giàu biểu cảm, chỉ dẫn 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. Vai trò của phiên bản này là kiểm thử, tạo nguyên mẫu, phát triển và các quy trình ứng dụng quy mô nhỏ hơn.</p><p>Với nguyên mẫu trợ lý giọng nói, bắt đầu bằng một câu trả lời mẫu hoàn chỉnh và đánh giá âm thanh trước khi thử văn bản đến dần. Với sản phẩm học tập, chuẩn bị lời giải thích ngắn có đúng thuật ngữ và cách đọc số người nghe cần. Với nguyên mẫu hội thoại, xác định người nói và mẫu giọng tham chiếu trước khi thêm chỉ dẫn thể hiện. Những bước này xây dựng sản phẩm âm thanh và luồng ứng dụng bao quanh nó, thay vì giao cho một yêu cầu tổng hợp trách nhiệm xử lý toàn bộ cuộc hội thoại.</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 Free là phiên bản hướng tới nhà phát triển của mô hình chuyển văn bản thành giọng nói S2.1 từ Fish Audio. Nó chia sẻ mô hình nền và các khả năng tổng hợp cốt lõi với S2.1 Pro: giọng nói đa ngôn ngữ giàu biểu cảm, chỉ dẫn 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. Vai trò của phiên bản này là kiểm thử, tạo nguyên mẫu, phát triển và các quy trình ứng dụng quy mô nhỏ hơn.\n\nVới nguyên mẫu trợ lý giọng nói, bắt đầu bằng một câu trả lời mẫu hoàn chỉnh và đánh giá âm thanh trước khi thử văn bản đến dần. Với sản phẩm học tập, chuẩn bị lời giải thích ngắn có đúng thuật ngữ và cách đọc số người nghe cần. Với nguyên mẫu hội thoại, xác định người nói và mẫu giọng tham chiếu trước khi thêm chỉ dẫn thể hiện. Những bước này xây dựng sản phẩm âm thanh và luồng ứng dụng bao quanh nó, thay vì giao cho một yêu cầu tổng hợp trách nhiệm xử lý toàn bộ cuộc hội thoại.\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": "d9f04d32a050316b384c03e46494f695e9052c516fdbfc105446961ca5a34661",
    "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 Free (free)</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-free:free</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-free%3Afree\">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\">S2.1 Pro Free là phiên bản phát triển của mô hình giọng nói S2.1 từ Fish Audio, dành cho thuyết minh, giọng nói có chỉ dẫn và hội thoại nhiều người nói. Phiên bản này chia sẻ khả năng tổng hợp của mô hình để kiểm thử và tạo nguyên mẫu.</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 Free là phiên bản hướng tới nhà phát triển của mô hình chuyển văn bản thành giọng nói S2.1 từ Fish Audio. Nó chia sẻ mô hình nền và các khả năng tổng hợp cốt lõi với S2.1 Pro: giọng nói đa ngôn ngữ giàu biểu cảm, chỉ dẫn 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. Vai trò của phiên bản này là kiểm thử, tạo nguyên mẫu, phát triển và các quy trình ứng dụng quy mô nhỏ hơn.</p><p>Với nguyên mẫu trợ lý giọng nói, bắt đầu bằng một câu trả lời mẫu hoàn chỉnh và đánh giá âm thanh trước khi thử văn bản đến dần. Với sản phẩm học tập, chuẩn bị lời giải thích ngắn có đúng thuật ngữ và cách đọc số người nghe cần. Với nguyên mẫu hội thoại, xác định người nói và mẫu giọng tham chiếu trước khi thêm chỉ dẫn thể hiện. Những bước này xây dựng sản phẩm âm thanh và luồng ứng dụng bao quanh nó, thay vì giao cho một yêu cầu tổng hợp trách nhiệm xử lý toàn bộ cuộc hội thoại.</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-free:free</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>Lượng dùng để 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=\"Lượng dùng để tính phí\"><span class=\"card-cell-label\">Lượng dùng để 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>Mỗi yêu cầu</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=\"Lượng dùng để tính phí\"><span class=\"card-cell-label\">Lượng dùng để tính phí</span>một yêu cầu</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào</span> <b>$0</b> <span class=\"price-unit\">mỗi yêu cầu</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-1359-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1359-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-1359-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1359-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-free:free&#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-1360-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1360-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-1360-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1360-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-free%3Afree&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro-free%3Afree&amp;fmt=speech\"><code>fish-audio/s2.1-pro-free:free</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-free%3Afree&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro-free%3Afree&amp;fmt=speech\"><code>fish-audio/s2.1-pro-free:free</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s2.1-pro-free:free",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs2.1-pro-free%3Afree",
      "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-free:free"
                ],
                "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-free:free"
                  ],
                  "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-free:free",
                "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": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "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-free:free', '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": 0
        },
        "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": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "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",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "per_request",
            "label": "per request",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "public_unit_label": "per request",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "per_request"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s2.1-pro-free:free",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "74536225e16c41041b323ae31cea12e665be2c005fba5af03ed9bb2c649bc260",
    "input_html_sha256": "967d1b5c02953c7d74aa7ce7dc8d34570320a17169173d55faf4703e7d9fef0b",
    "private_audit_sha256": "7dd883bc35dcaa2a6bd2f718c49eacea3751cc3be983cab72d6243b356db303e",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/fish-audio-s2-1-pro-free-u003a-free/",
    "description": "S2.1 Pro Free là phiên bản phát triển của mô hình giọng nói S2.1 từ Fish Audio, dành cho thuyết minh, giọng nói có chỉ dẫn và hội thoại nhiều người nói. Phiên bản này chia sẻ khả năng tổng hợp của mô hình để kiểm thử và tạo nguyên mẫu.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/fish-audio-s2-1-pro-free-u003a-free/index.md",
    "title": "Fish Audio: S2.1 Pro Free (free) — Ailoot",
    "url": "https://ailoot.ai/models/vi/fish-audio-s2-1-pro-free-u003a-free/"
  },
  "rawModel": {
    "about": "S2.1 Pro Free là phiên bản hướng tới nhà phát triển của mô hình chuyển văn bản thành giọng nói S2.1 từ Fish Audio. Nó chia sẻ mô hình nền và các khả năng tổng hợp cốt lõi với S2.1 Pro: giọng nói đa ngôn ngữ giàu biểu cảm, chỉ dẫn 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. Vai trò của phiên bản này là kiểm thử, tạo nguyên mẫu, phát triển và các quy trình ứng dụng quy mô nhỏ hơn.\n\nVới nguyên mẫu trợ lý giọng nói, bắt đầu bằng một câu trả lời mẫu hoàn chỉnh và đánh giá âm thanh trước khi thử văn bản đến dần. Với sản phẩm học tập, chuẩn bị lời giải thích ngắn có đúng thuật ngữ và cách đọc số người nghe cần. Với nguyên mẫu hội thoại, xác định người nói và mẫu giọng tham chiếu trước khi thêm chỉ dẫn thể hiện. Những bước này xây dựng sản phẩm âm thanh và luồng ứng dụng bao quanh nó, thay vì giao cho một yêu cầu tổng hợp trách nhiệm xử lý toàn bộ cuộc hội thoại.\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",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "per_request",
            "label": "per request",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "public_unit_label": "per request",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "per_request"
          }
        ],
        "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-free:free",
    "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-free:free"
                ],
                "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-free:free"
                  ],
                  "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-free:free",
                "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": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "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-free:free', '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": 0
        },
        "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": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "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",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "per_request",
            "label": "per request",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "public_unit_label": "per request",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "per_request"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s2.1-pro-free:free",
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S2.1 Pro Free (free)",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "S2.1 Pro Free là phiên bản phát triển của mô hình giọng nói S2.1 từ Fish Audio, dành cho thuyết minh, giọng nói có chỉ dẫn và hội thoại nhiều người nói. Phiên bản này chia sẻ khả năng tổng hợp của mô hình để kiểm thử và tạo nguyên mẫu."
  },
  "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": "S2.1 Pro Free là phiên bản phát triển của mô hình giọng nói S2.1 từ Fish Audio, dành cho thuyết minh, giọng nói có chỉ dẫn và hội thoại nhiều người nói. Phiên bản này chia sẻ khả năng tổng hợp của mô hình để kiểm thử và tạo nguyên mẫu.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "f89966354e58b11606b9020ad9dab2165cafa0bce5bbc2f596359d8a15f31247",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "f022be201fd8475269b18640a1fb76d4f39e074c6d0fd559f9be9c0f43e75ca4"
}
