{
  "aboutHtml": "<p>Drama 3 là mô hình chuyển văn bản thành lời nói của Fish Audio cho kịch bản có diễn xuất. Mô hình tạo âm thanh lời nói từ các từ bạn cung cấp và cho người viết kịch bản kiểm soát cách thể hiện. Một dòng có thể mang chỉ đạo cảm xúc, thay đổi cục bộ trong cách diễn bằng giọng hoặc chỉ dẫn phát âm, nên đầu vào chứa cả nội dung được nói lẫn cách nội dung đó nên vang lên.</p><h4>Viết lời và chỉ đạo diễn xuất</h4><p>Chuẩn bị chính xác những từ người nghe nên nghe trước khi thêm chỉ dẫn diễn xuất. Giữ rõ tên, ngày tháng và hướng dẫn quan trọng trong kịch bản, đồng thời dùng dấu câu để thiết lập nhịp câu mong muốn. Sau đó đặt chỉ đạo bằng ngôn ngữ thông thường trong ngoặc vuông trước dòng mà nó áp dụng. Mô tả cảm xúc hoặc cách thể hiện mong muốn bằng từ ngữ cụ thể, như thông báo kiềm chế, cuộc trao đổi căng thẳng hoặc lời giải thích ấm áp.</p><p>Drama 3 cũng hỗ trợ điều khiển cục bộ trong một dòng. Chỉ dẫn nội dòng có thể đưa vào âm thanh và khoảng dừng, còn cặp thẻ cách thể hiện có thể tác động đến từ cụ thể. Giữ rõ phạm vi từng chỉ dẫn: chỉ đạo cho một cụm từ không nên vô tình trở thành chỉ đạo cho toàn cảnh. Đọc kịch bản một lần để kiểm tra ý nghĩa và một lần để kiểm tra diễn xuất trước khi tổng hợp.</p><h4>Cảnh, ngôn ngữ và phát âm</h4><p>Mô hình được công bố hỗ trợ nhiều người nói trong một yêu cầu. Tổ chức hội thoại thành lượt người nói rõ ràng và cho mỗi lượt một mục đích: câu hỏi, ngắt lời, giải thích hoặc phản hồi. Với bài học hoặc nội dung giải thích, cách này có thể tách người kể chuyện khỏi nhân vật được trích lời mà không viết lại tài liệu thành một đoạn độc thoại không phân biệt.</p><p>Drama 3 hỗ trợ hơn 80 ngôn ngữ và có thể chuyển ngôn ngữ trong một câu mà vẫn giữ giọng. Chuẩn bị đoạn đa ngôn ngữ bằng đúng ngôn ngữ sẽ được nói, thay vì giả định chỉ dẫn tiếng Anh cung cấp bản dịch. Quyết định cách tên nước ngoài và thuật ngữ vay mượn nên được phát âm, rồi dùng điều khiển âm vị của mô hình khi cần chỉ đạo phát âm chính xác.</p><h4>Sản phẩm âm thanh hữu ích</h4><p>Mô hình phù hợp với hội thoại nhân vật, bài học có lời dẫn, nội dung giải thích ngắn, thông báo sản phẩm và phản hồi giọng nói theo kịch bản. Giữ nội dung cùng lựa chọn diễn xuất: đoạn giáo dục cần thuật ngữ dễ hiểu và khoảng dừng có chủ đích; cảnh nhân vật cần lượt nói tách rõ và ý đồ kịch tính nhất quán. Đây là quyết định viết có thể xem xét trước khi tạo bất kỳ âm thanh nào.</p><p>Sau khi tổng hợp, so sánh lời nói với kịch bản hoàn chỉnh. Lắng nghe cụm từ bị bỏ sót, khoảng dừng sai chỗ, chuyển người nói không rõ và phát âm tên cần được giữ nguyên. Giữ kịch bản cùng chỉ dẫn cách thể hiện với âm thanh để sửa đổi có thể nhắm đúng dòng bị ảnh hưởng. Giữ nội dung nói cuối cùng cùng lựa chọn diễn xuất ở cấp dòng khi chuẩn bị bản sửa.</p><h4>Khả năng</h4><ul><li>Thể hiện lời nói từ một kịch bản hoàn chỉnh bằng chuyển văn bản thành giọng nói.</li><li>Chỉ dẫn bằng ngôn ngữ thông thường trong ngoặc vuông trước một câu thoại.</li><li>Âm thanh và khoảng dừng chèn trong văn bản, cùng các cặp thẻ thể hiện giọng nói áp dụng cho từng từ.</li><li>Cảnh có nhiều người nói và hơn 80 ngôn ngữ nói.</li><li>Điều khiển âm vị cho tên riêng và thuật ngữ chuyên môn.</li></ul><h4>Trường hợp sử dụng</h4><ul><li><strong>Đối thoại nhân vật</strong> — Kịch bản phân tách rõ các lượt lời và chỉ dẫn diễn đạt. Kết quả: Cảnh thoại có những thay đổi cách thể hiện có chủ đích.</li><li><strong>Giải thích bằng lời thuyết minh</strong> — Bài học hoàn chỉnh có đánh dấu thuật ngữ và khoảng dừng. Kết quả: Âm thanh lời nói có thể kiểm tra đối chiếu với văn bản bài học.</li><li><strong>Thông báo đa ngôn ngữ</strong> — Văn bản hoàn chỉnh bằng các ngôn ngữ mong muốn, giữ nguyên những lựa chọn phát âm. Kết quả: Đoạn lời nói với các bước chuyển ngôn ngữ được kiểm soát.</li><li><strong>Phản hồi giọng nói theo kịch bản</strong> — Phản hồi ngắn gọn với sắc thái giọng và những từ cần đọc được nêu rõ. Kết quả: Đoạn lời nói có thể tái sử dụng trong ứng dụng bao quanh.</li></ul><h4>Giới hạn</h4><ul><li><strong>Đầu vào và kết quả</strong> — Mô hình được công bố nhận văn bản và trả về âm thanh lời nói.</li><li><strong>Phạm vi điều khiển</strong> — Gắn chỉ dẫn với câu thoại hoặc cụm từ tương ứng và giữ đúng phạm vi áp dụng của các cặp thẻ thể hiện giọng nói.</li><li><strong>Đơn vị kiểm tra</strong> — Giữ nguyên kịch bản và dấu hiệu chỉ dẫn cùng âm thanh; kiểm tra phát âm và lượt lời ở cấp câu thoại.</li></ul>",
  "aboutText": "Drama 3 là mô hình chuyển văn bản thành lời nói của Fish Audio cho kịch bản có diễn xuất. Mô hình tạo âm thanh lời nói từ các từ bạn cung cấp và cho người viết kịch bản kiểm soát cách thể hiện. Một dòng có thể mang chỉ đạo cảm xúc, thay đổi cục bộ trong cách diễn bằng giọng hoặc chỉ dẫn phát âm, nên đầu vào chứa cả nội dung được nói lẫn cách nội dung đó nên vang lên.\n\n### Viết lời và chỉ đạo diễn xuất\n\nChuẩn bị chính xác những từ người nghe nên nghe trước khi thêm chỉ dẫn diễn xuất. Giữ rõ tên, ngày tháng và hướng dẫn quan trọng trong kịch bản, đồng thời dùng dấu câu để thiết lập nhịp câu mong muốn. Sau đó đặt chỉ đạo bằng ngôn ngữ thông thường trong ngoặc vuông trước dòng mà nó áp dụng. Mô tả cảm xúc hoặc cách thể hiện mong muốn bằng từ ngữ cụ thể, như thông báo kiềm chế, cuộc trao đổi căng thẳng hoặc lời giải thích ấm áp.\n\nDrama 3 cũng hỗ trợ điều khiển cục bộ trong một dòng. Chỉ dẫn nội dòng có thể đưa vào âm thanh và khoảng dừng, còn cặp thẻ cách thể hiện có thể tác động đến từ cụ thể. Giữ rõ phạm vi từng chỉ dẫn: chỉ đạo cho một cụm từ không nên vô tình trở thành chỉ đạo cho toàn cảnh. Đọc kịch bản một lần để kiểm tra ý nghĩa và một lần để kiểm tra diễn xuất trước khi tổng hợp.\n\n### Cảnh, ngôn ngữ và phát âm\n\nMô hình được công bố hỗ trợ nhiều người nói trong một yêu cầu. Tổ chức hội thoại thành lượt người nói rõ ràng và cho mỗi lượt một mục đích: câu hỏi, ngắt lời, giải thích hoặc phản hồi. Với bài học hoặc nội dung giải thích, cách này có thể tách người kể chuyện khỏi nhân vật được trích lời mà không viết lại tài liệu thành một đoạn độc thoại không phân biệt.\n\nDrama 3 hỗ trợ hơn 80 ngôn ngữ và có thể chuyển ngôn ngữ trong một câu mà vẫn giữ giọng. Chuẩn bị đoạn đa ngôn ngữ bằng đúng ngôn ngữ sẽ được nói, thay vì giả định chỉ dẫn tiếng Anh cung cấp bản dịch. Quyết định cách tên nước ngoài và thuật ngữ vay mượn nên được phát âm, rồi dùng điều khiển âm vị của mô hình khi cần chỉ đạo phát âm chính xác.\n\n### Sản phẩm âm thanh hữu ích\n\nMô hình phù hợp với hội thoại nhân vật, bài học có lời dẫn, nội dung giải thích ngắn, thông báo sản phẩm và phản hồi giọng nói theo kịch bản. Giữ nội dung cùng lựa chọn diễn xuất: đoạn giáo dục cần thuật ngữ dễ hiểu và khoảng dừng có chủ đích; cảnh nhân vật cần lượt nói tách rõ và ý đồ kịch tính nhất quán. Đây là quyết định viết có thể xem xét trước khi tạo bất kỳ âm thanh nào.\n\nSau khi tổng hợp, so sánh lời nói với kịch bản hoàn chỉnh. Lắng nghe cụm từ bị bỏ sót, khoảng dừng sai chỗ, chuyển người nói không rõ và phát âm tên cần được giữ nguyên. Giữ kịch bản cùng chỉ dẫn cách thể hiện với âm thanh để sửa đổi có thể nhắm đúng dòng bị ảnh hưởng. Giữ nội dung nói cuối cùng cùng lựa chọn diễn xuất ở cấp dòng khi chuẩn bị bản sửa.\n\n### Khả năng\n\n- Thể hiện lời nói từ một kịch bản hoàn chỉnh bằng chuyển văn bản thành giọng nói.\n- Chỉ dẫn bằng ngôn ngữ thông thường trong ngoặc vuông trước một câu thoại.\n- Âm thanh và khoảng dừng chèn trong văn bản, cùng các cặp thẻ thể hiện giọng nói áp dụng cho từng từ.\n- Cảnh có nhiều người nói và hơn 80 ngôn ngữ nói.\n- Điều khiển âm vị cho tên riêng và thuật ngữ chuyên môn.\n\n### Trường hợp sử dụng\n\n- **Đối thoại nhân vật** — Kịch bản phân tách rõ các lượt lời và chỉ dẫn diễn đạt. Kết quả: Cảnh thoại có những thay đổi cách thể hiện có chủ đích.\n- **Giải thích bằng lời thuyết minh** — Bài học hoàn chỉnh có đánh dấu thuật ngữ và khoảng dừng. Kết quả: Âm thanh lời nói có thể kiểm tra đối chiếu với văn bản bài học.\n- **Thông báo đa ngôn ngữ** — Văn bản hoàn chỉnh bằng các ngôn ngữ mong muốn, giữ nguyên những lựa chọn phát âm. Kết quả: Đoạn lời nói với các bước chuyển ngôn ngữ được kiểm soát.\n- **Phản hồi giọng nói theo kịch bản** — Phản hồi ngắn gọn với sắc thái giọng và những từ cần đọc được nêu rõ. Kết quả: Đoạn lời nói có thể tái sử dụng trong ứng dụng bao quanh.\n\n### Giới hạn\n\n- **Đầu vào và kết quả** — Mô hình được công bố nhận văn bản và trả về âm thanh lời nói.\n- **Phạm vi điều khiển** — Gắn chỉ dẫn với câu thoại hoặc cụm từ tương ứng và giữ đúng phạm vi áp dụng của các cặp thẻ thể hiện giọng nói.\n- **Đơn vị kiểm tra** — Giữ nguyên kịch bản và dấu hiệu chỉ dẫn cùng âm thanh; kiểm tra phát âm và lượt lời ở cấp câu thoại.\n",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "c22b0ab8831ec6c1134599dfa3f17ed2b1780ead8d561316e06fadf994d31006",
    "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: Drama 3</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/drama-3</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%2Fdrama-3\">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\">Drama 3 biến kịch bản viết thành lời nói có chỉ đạo diễn xuất. Định hình cảm xúc và cách thể hiện bằng chỉ dẫn ngôn ngữ thông thường, thêm khoảng dừng và âm thanh, hướng dẫn phát âm và xây dựng cảnh có nhiều người nói. Quy trình lời nói được công bố hỗ trợ hơn 80 ngôn ngữ, gồm chuyển ngôn ngữ ngay trong một câ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>Drama 3 là mô hình chuyển văn bản thành lời nói của Fish Audio cho kịch bản có diễn xuất. Mô hình tạo âm thanh lời nói từ các từ bạn cung cấp và cho người viết kịch bản kiểm soát cách thể hiện. Một dòng có thể mang chỉ đạo cảm xúc, thay đổi cục bộ trong cách diễn bằng giọng hoặc chỉ dẫn phát âm, nên đầu vào chứa cả nội dung được nói lẫn cách nội dung đó nên vang lên.</p><h4>Viết lời và chỉ đạo diễn xuất</h4><p>Chuẩn bị chính xác những từ người nghe nên nghe trước khi thêm chỉ dẫn diễn xuất. Giữ rõ tên, ngày tháng và hướng dẫn quan trọng trong kịch bản, đồng thời dùng dấu câu để thiết lập nhịp câu mong muốn. Sau đó đặt chỉ đạo bằng ngôn ngữ thông thường trong ngoặc vuông trước dòng mà nó áp dụng. Mô tả cảm xúc hoặc cách thể hiện mong muốn bằng từ ngữ cụ thể, như thông báo kiềm chế, cuộc trao đổi căng thẳng hoặc lời giải thích ấm áp.</p><p>Drama 3 cũng hỗ trợ điều khiển cục bộ trong một dòng. Chỉ dẫn nội dòng có thể đưa vào âm thanh và khoảng dừng, còn cặp thẻ cách thể hiện có thể tác động đến từ cụ thể. Giữ rõ phạm vi từng chỉ dẫn: chỉ đạo cho một cụm từ không nên vô tình trở thành chỉ đạo cho toàn cảnh. Đọc kịch bản một lần để kiểm tra ý nghĩa và một lần để kiểm tra diễn xuất trước khi tổng hợp.</p><h4>Cảnh, ngôn ngữ và phát âm</h4><p>Mô hình được công bố hỗ trợ nhiều người nói trong một yêu cầu. Tổ chức hội thoại thành lượt người nói rõ ràng và cho mỗi lượt một mục đích: câu hỏi, ngắt lời, giải thích hoặc phản hồi. Với bài học hoặc nội dung giải thích, cách này có thể tách người kể chuyện khỏi nhân vật được trích lời mà không viết lại tài liệu thành một đoạn độc thoại không phân biệt.</p><p>Drama 3 hỗ trợ hơn 80 ngôn ngữ và có thể chuyển ngôn ngữ trong một câu mà vẫn giữ giọng. Chuẩn bị đoạn đa ngôn ngữ bằng đúng ngôn ngữ sẽ được nói, thay vì giả định chỉ dẫn tiếng Anh cung cấp bản dịch. Quyết định cách tên nước ngoài và thuật ngữ vay mượn nên được phát âm, rồi dùng điều khiển âm vị của mô hình khi cần chỉ đạo phát âm chính xác.</p><h4>Sản phẩm âm thanh hữu ích</h4><p>Mô hình phù hợp với hội thoại nhân vật, bài học có lời dẫn, nội dung giải thích ngắn, thông báo sản phẩm và phản hồi giọng nói theo kịch bản. Giữ nội dung cùng lựa chọn diễn xuất: đoạn giáo dục cần thuật ngữ dễ hiểu và khoảng dừng có chủ đích; cảnh nhân vật cần lượt nói tách rõ và ý đồ kịch tính nhất quán. Đây là quyết định viết có thể xem xét trước khi tạo bất kỳ âm thanh nào.</p><p>Sau khi tổng hợp, so sánh lời nói với kịch bản hoàn chỉnh. Lắng nghe cụm từ bị bỏ sót, khoảng dừng sai chỗ, chuyển người nói không rõ và phát âm tên cần được giữ nguyên. Giữ kịch bản cùng chỉ dẫn cách thể hiện với âm thanh để sửa đổi có thể nhắm đúng dòng bị ảnh hưởng. Giữ nội dung nói cuối cùng cùng lựa chọn diễn xuất ở cấp dòng khi chuẩn bị bản sửa.</p><h4>Khả năng</h4><ul><li>Thể hiện lời nói từ một kịch bản hoàn chỉnh bằng chuyển văn bản thành giọng nói.</li><li>Chỉ dẫn bằng ngôn ngữ thông thường trong ngoặc vuông trước một câu thoại.</li><li>Âm thanh và khoảng dừng chèn trong văn bản, cùng các cặp thẻ thể hiện giọng nói áp dụng cho từng từ.</li><li>Cảnh có nhiều người nói và hơn 80 ngôn ngữ nói.</li><li>Điều khiển âm vị cho tên riêng và thuật ngữ chuyên môn.</li></ul><h4>Trường hợp sử dụng</h4><ul><li><strong>Đối thoại nhân vật</strong> — Kịch bản phân tách rõ các lượt lời và chỉ dẫn diễn đạt. Kết quả: Cảnh thoại có những thay đổi cách thể hiện có chủ đích.</li><li><strong>Giải thích bằng lời thuyết minh</strong> — Bài học hoàn chỉnh có đánh dấu thuật ngữ và khoảng dừng. Kết quả: Âm thanh lời nói có thể kiểm tra đối chiếu với văn bản bài học.</li><li><strong>Thông báo đa ngôn ngữ</strong> — Văn bản hoàn chỉnh bằng các ngôn ngữ mong muốn, giữ nguyên những lựa chọn phát âm. Kết quả: Đoạn lời nói với các bước chuyển ngôn ngữ được kiểm soát.</li><li><strong>Phản hồi giọng nói theo kịch bản</strong> — Phản hồi ngắn gọn với sắc thái giọng và những từ cần đọc được nêu rõ. Kết quả: Đoạn lời nói có thể tái sử dụng trong ứng dụng bao quanh.</li></ul><h4>Giới hạn</h4><ul><li><strong>Đầu vào và kết quả</strong> — Mô hình được công bố nhận văn bản và trả về âm thanh lời nói.</li><li><strong>Phạm vi điều khiển</strong> — Gắn chỉ dẫn với câu thoại hoặc cụm từ tương ứng và giữ đúng phạm vi áp dụng của các cặp thẻ thể hiện giọng nói.</li><li><strong>Đơn vị kiểm tra</strong> — Giữ nguyên kịch bản và dấu hiệu chỉ dẫn cùng âm thanh; kiểm tra phát âm và lượt lời ở cấp câu thoại.</li></ul></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/drama-3</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>Độ 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><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_conditions</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>Chọn ID giọng nói thực tế được hỗ trợ; không tự đặt giá trị mặc định hoặc mã giọng nói cụ thể cho mô hình này.</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.00002</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-1352-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1352-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-1352-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1352-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\n: &quot;${AILOOT_VOICE:?Set the actual documented input value}&quot;\nexport AILOOT_VOICE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;fish-audio/drama-3&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;${ACTUAL_SUPPORTED_VOICE}&#39;}\nrequest[&#39;input&#39;]=os.environ[&#39;AILOOT_INPUT_TEXT&#39;]\nrequest[&#39;voice&#39;]=os.environ[&#39;AILOOT_VOICE&#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-1353-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1353-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-1353-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1353-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%2Fdrama-3&amp;route=Ultra&amp;caller=fish-audio%2Fdrama-3&amp;fmt=speech\"><code>fish-audio/drama-3</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%2Fdrama-3&amp;route=Ultra&amp;caller=fish-audio%2Fdrama-3&amp;fmt=speech\"><code>fish-audio/drama-3</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/drama-3",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/drama-3",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fdrama-3",
      "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/drama-3"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "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/drama-3"
                  ],
                  "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": {
                  "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/drama-3",
                "voice": "${ACTUAL_SUPPORTED_VOICE}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Chọn ID giọng nói thực tế được hỗ trợ; không tự đặt giá trị mặc định hoặc mã giọng nói cụ thể cho mô hình này."
            ],
            "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.00002",
                "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.00002",
                "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\n: \"${AILOOT_VOICE:?Set the actual documented input value}\"\nexport AILOOT_VOICE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/drama-3', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': '${ACTUAL_SUPPORTED_VOICE}'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nrequest['voice']=os.environ['AILOOT_VOICE']\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": 2e-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.00002",
                "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.00002",
                "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/drama-3",
        "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.00002",
            "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.00002",
            "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/drama-3",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "74a250a711c527efe2b28fcf37a1e6ed0d9fd99ca1ea731453f1ee383bdf4887",
    "input_html_sha256": "d909532a6490d653da13a9d4b3fc8d1d3fb367e084da8a327ba24507b83a9f30",
    "private_audit_sha256": "d5c89425109b473781b99c83062e204d550a91049859c6afedee0808be1414cc",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/fish-audio-drama-3/",
    "description": "Drama 3 biến kịch bản viết thành lời nói có chỉ đạo diễn xuất. Định hình cảm xúc và cách thể hiện bằng chỉ dẫn ngôn ngữ thông thường, thêm khoảng dừng và âm thanh, hướng dẫn phát âm và xây dựng cảnh có nhiều người nói. Quy trình lời nói được công bố hỗ trợ hơn 80 ngôn ngữ, gồm chuyển ngôn ngữ ngay trong một câu.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/fish-audio-drama-3/index.md",
    "title": "Fish Audio: Drama 3 — Ailoot",
    "url": "https://ailoot.ai/models/vi/fish-audio-drama-3/"
  },
  "rawModel": {
    "about": "Drama 3 là mô hình chuyển văn bản thành lời nói của Fish Audio cho kịch bản có diễn xuất. Mô hình tạo âm thanh lời nói từ các từ bạn cung cấp và cho người viết kịch bản kiểm soát cách thể hiện. Một dòng có thể mang chỉ đạo cảm xúc, thay đổi cục bộ trong cách diễn bằng giọng hoặc chỉ dẫn phát âm, nên đầu vào chứa cả nội dung được nói lẫn cách nội dung đó nên vang lên.\n\n### Viết lời và chỉ đạo diễn xuất\n\nChuẩn bị chính xác những từ người nghe nên nghe trước khi thêm chỉ dẫn diễn xuất. Giữ rõ tên, ngày tháng và hướng dẫn quan trọng trong kịch bản, đồng thời dùng dấu câu để thiết lập nhịp câu mong muốn. Sau đó đặt chỉ đạo bằng ngôn ngữ thông thường trong ngoặc vuông trước dòng mà nó áp dụng. Mô tả cảm xúc hoặc cách thể hiện mong muốn bằng từ ngữ cụ thể, như thông báo kiềm chế, cuộc trao đổi căng thẳng hoặc lời giải thích ấm áp.\n\nDrama 3 cũng hỗ trợ điều khiển cục bộ trong một dòng. Chỉ dẫn nội dòng có thể đưa vào âm thanh và khoảng dừng, còn cặp thẻ cách thể hiện có thể tác động đến từ cụ thể. Giữ rõ phạm vi từng chỉ dẫn: chỉ đạo cho một cụm từ không nên vô tình trở thành chỉ đạo cho toàn cảnh. Đọc kịch bản một lần để kiểm tra ý nghĩa và một lần để kiểm tra diễn xuất trước khi tổng hợp.\n\n### Cảnh, ngôn ngữ và phát âm\n\nMô hình được công bố hỗ trợ nhiều người nói trong một yêu cầu. Tổ chức hội thoại thành lượt người nói rõ ràng và cho mỗi lượt một mục đích: câu hỏi, ngắt lời, giải thích hoặc phản hồi. Với bài học hoặc nội dung giải thích, cách này có thể tách người kể chuyện khỏi nhân vật được trích lời mà không viết lại tài liệu thành một đoạn độc thoại không phân biệt.\n\nDrama 3 hỗ trợ hơn 80 ngôn ngữ và có thể chuyển ngôn ngữ trong một câu mà vẫn giữ giọng. Chuẩn bị đoạn đa ngôn ngữ bằng đúng ngôn ngữ sẽ được nói, thay vì giả định chỉ dẫn tiếng Anh cung cấp bản dịch. Quyết định cách tên nước ngoài và thuật ngữ vay mượn nên được phát âm, rồi dùng điều khiển âm vị của mô hình khi cần chỉ đạo phát âm chính xác.\n\n### Sản phẩm âm thanh hữu ích\n\nMô hình phù hợp với hội thoại nhân vật, bài học có lời dẫn, nội dung giải thích ngắn, thông báo sản phẩm và phản hồi giọng nói theo kịch bản. Giữ nội dung cùng lựa chọn diễn xuất: đoạn giáo dục cần thuật ngữ dễ hiểu và khoảng dừng có chủ đích; cảnh nhân vật cần lượt nói tách rõ và ý đồ kịch tính nhất quán. Đây là quyết định viết có thể xem xét trước khi tạo bất kỳ âm thanh nào.\n\nSau khi tổng hợp, so sánh lời nói với kịch bản hoàn chỉnh. Lắng nghe cụm từ bị bỏ sót, khoảng dừng sai chỗ, chuyển người nói không rõ và phát âm tên cần được giữ nguyên. Giữ kịch bản cùng chỉ dẫn cách thể hiện với âm thanh để sửa đổi có thể nhắm đúng dòng bị ảnh hưởng. Giữ nội dung nói cuối cùng cùng lựa chọn diễn xuất ở cấp dòng khi chuẩn bị bản sửa.\n\n### Khả năng\n\n- Thể hiện lời nói từ một kịch bản hoàn chỉnh bằng chuyển văn bản thành giọng nói.\n- Chỉ dẫn bằng ngôn ngữ thông thường trong ngoặc vuông trước một câu thoại.\n- Âm thanh và khoảng dừng chèn trong văn bản, cùng các cặp thẻ thể hiện giọng nói áp dụng cho từng từ.\n- Cảnh có nhiều người nói và hơn 80 ngôn ngữ nói.\n- Điều khiển âm vị cho tên riêng và thuật ngữ chuyên môn.\n\n### Trường hợp sử dụng\n\n- **Đối thoại nhân vật** — Kịch bản phân tách rõ các lượt lời và chỉ dẫn diễn đạt. Kết quả: Cảnh thoại có những thay đổi cách thể hiện có chủ đích.\n- **Giải thích bằng lời thuyết minh** — Bài học hoàn chỉnh có đánh dấu thuật ngữ và khoảng dừng. Kết quả: Âm thanh lời nói có thể kiểm tra đối chiếu với văn bản bài học.\n- **Thông báo đa ngôn ngữ** — Văn bản hoàn chỉnh bằng các ngôn ngữ mong muốn, giữ nguyên những lựa chọn phát âm. Kết quả: Đoạn lời nói với các bước chuyển ngôn ngữ được kiểm soát.\n- **Phản hồi giọng nói theo kịch bản** — Phản hồi ngắn gọn với sắc thái giọng và những từ cần đọc được nêu rõ. Kết quả: Đoạn lời nói có thể tái sử dụng trong ứng dụng bao quanh.\n\n### Giới hạn\n\n- **Đầu vào và kết quả** — Mô hình được công bố nhận văn bản và trả về âm thanh lời nói.\n- **Phạm vi điều khiển** — Gắn chỉ dẫn với câu thoại hoặc cụm từ tương ứng và giữ đúng phạm vi áp dụng của các cặp thẻ thể hiện giọng nói.\n- **Đơn vị kiểm tra** — Giữ nguyên kịch bản và dấu hiệu chỉ dẫn cùng âm thanh; kiểm tra phát âm và lượt lời ở cấp câu thoại.\n",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00002",
            "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.00002",
            "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/drama-3",
    "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/drama-3"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "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/drama-3"
                  ],
                  "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": {
                  "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/drama-3",
                "voice": "${ACTUAL_SUPPORTED_VOICE}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Chọn ID giọng nói thực tế được hỗ trợ; không tự đặt giá trị mặc định hoặc mã giọng nói cụ thể cho mô hình này."
            ],
            "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.00002",
                "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.00002",
                "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\n: \"${AILOOT_VOICE:?Set the actual documented input value}\"\nexport AILOOT_VOICE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/drama-3', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': '${ACTUAL_SUPPORTED_VOICE}'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nrequest['voice']=os.environ['AILOOT_VOICE']\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": 2e-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.00002",
                "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.00002",
                "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/drama-3",
        "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.00002",
            "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.00002",
            "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/drama-3",
        "request_model_id": "fish-audio/drama-3",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: Drama 3",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Drama 3 biến kịch bản viết thành lời nói có chỉ đạo diễn xuất. Định hình cảm xúc và cách thể hiện bằng chỉ dẫn ngôn ngữ thông thường, thêm khoảng dừng và âm thanh, hướng dẫn phát âm và xây dựng cảnh có nhiều người nói. Quy trình lời nói được công bố hỗ trợ hơn 80 ngôn ngữ, gồm chuyển ngôn ngữ ngay trong một câ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": "Drama 3 biến kịch bản viết thành lời nói có chỉ đạo diễn xuất. Định hình cảm xúc và cách thể hiện bằng chỉ dẫn ngôn ngữ thông thường, thêm khoảng dừng và âm thanh, hướng dẫn phát âm và xây dựng cảnh có nhiều người nói. Quy trình lời nói được công bố hỗ trợ hơn 80 ngôn ngữ, gồm chuyển ngôn ngữ ngay trong một câu.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "4551ced9fdf3c3c771594175a39f1d41b8b6be99a70a021bc171e005f4033df3",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "b1bf837ecc61b7564ff4630439558f8c907a63b8df5eca57abee049e27998b05"
}
