{
  "aboutHtml": "<p>Google Gemini 3.1 Flash TTS Preview là phiên bản chuyển văn bản thành giọng nói thuộc dòng Gemini 3.1 Flash Audio. Mô hình nhận văn bản và tạo âm thanh lời nói với biểu cảm được điều khiển bằng câu lệnh. Google mô tả thế hệ này là bước cải thiện về độ tự nhiên của giọng nói, khả năng điều khiển và hiệu năng đa ngôn ngữ, với hội thoại nhiều người nói được hỗ trợ ngay từ thiết kế và hơn 70 ngôn ngữ. Ứng dụng thực tế có thể là một bài học thuyết minh ngắn, cuộc trao đổi giữa các nhân vật hoặc một đoạn đọc mà cách thể hiện cũng quan trọng như câu chữ.</p><p>Chuẩn bị kịch bản hoàn chỉnh và bản yêu cầu diễn xuất. Thế hệ này sử dụng chỉ dẫn bằng ngôn ngữ tự nhiên ngay trong đầu vào văn bản để định hướng phong cách giọng, nhịp độ và cách đọc. Bản phát hành của Google giới thiệu chỉ dẫn bối cảnh để xác lập tình huống, Audio Profiles của người nói để định nghĩa nhân vật và Director’s Notes để hướng dẫn nhịp độ, sắc thái và giọng địa phương. Khi chuẩn bị câu lệnh, trình bày các phần này sao cho dễ nhận biết, để có thể xem xét riêng câu chữ cần đọc và chỉ dẫn diễn xuất. Một bản yêu cầu gọn gàng dễ chỉnh sửa hơn nhiều mô tả cạnh tranh nhau về cùng một giọng nói.</p><p>Ví dụ, một bản yêu cầu diễn tập tự soạn có thể mô tả người dẫn chuyện điềm tĩnh giới thiệu hiện vật bảo tàng, ngắt nhịp có chừng mực và chuyển sang giọng ấm áp hơn ở câu cuối. Kịch bản đi kèm cần có tên thật của hiện vật và câu chữ chính xác cần đọc. Với hội thoại, hãy tạo hồ sơ riêng biệt cho từng nhân vật và trình tự lượt nói rõ ràng. Dùng bối cảnh để giải thích liệu một người đang trấn an người kia, đặt câu hỏi thực sự hay đáp lại với vẻ ngạc nhiên có kiềm chế. Sản phẩm cần đánh giá là phần thể hiện kịch bản bằng âm thanh có thể nghe được.</p><p>Các thẻ âm thanh nội tuyến bổ sung khả năng điều khiển cục bộ trong văn bản, cho phép biểu cảm của người nói thay đổi ngay trong một câu thay vì hoàn toàn phụ thuộc vào chỉ dẫn mở đầu. Google mô tả các thẻ này là công cụ điều khiển phong cách giọng, nhịp độ và cách đọc. Dùng thẻ ở nơi phần thể hiện cần một chuyển đổi cụ thể và giữ câu chữ còn lại tự nhiên khi đọc thành tiếng. Điểm phân biệt hữu ích trong phiên bản này là giữa bản yêu cầu tổng thể về nhân vật hoặc bối cảnh và thay đổi cục bộ trong cách thể hiện. Một đoạn trung tính ngắn có thể xác lập giọng cơ sở trước khi kịch bản bổ sung chỉ dẫn giàu cảm xúc hơn.</p><p>Với công việc đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích cuối cùng và nêu giọng địa phương cùng phong cách nói mong muốn trong bản yêu cầu. Thông báo của Google ghi nhận khả năng hỗ trợ hơn 70 ngôn ngữ. Khi chuẩn bị biên tập trên thực tế, hãy dùng một cách viết nhất quán cho các tên lặp lại, viết đầy đủ các chữ viết tắt dễ gây nhầm lẫn nếu cần một cách đọc xác định và kiểm tra các con số trong bản âm thanh. Chỉ ghi nhãn ngôn ngữ chưa đủ để quyết định cách phát âm tên thương hiệu hoặc từ vay mượn. Đối chiếu những đoạn có các từ này với cách đọc dự kiến trước khi chấp nhận một bản thuyết minh dài.</p><p>Trang mô hình Gemini API dành riêng cho mô hình preview này liệt kê giới hạn đầu vào là 8,192 token và giới hạn đầu ra là 16,384 token. Thẻ mô hình TTS gốc của DeepMind liệt kê riêng đầu vào văn bản tối đa 16K token và đầu ra âm thanh 32K token; các thông số trên thẻ mô hình này khác với giới hạn phục vụ của Gemini API. Khi chuẩn bị đầu vào, tính cả chỉ dẫn diễn xuất lẫn kịch bản. Hạn mức đầu ra được biểu thị bằng token âm thanh nên không bảo đảm một thời lượng bản ghi cụ thể. Chia bài học hoặc câu chuyện dài thành các phần mạch lạc, giữ nguyên bản yêu cầu nhân vật và nghe các điểm nối. Với hội thoại theo kịch bản, kiểm tra người nói và thứ tự lượt nói bên cạnh câu chữ cùng cách thể hiện cảm xúc.</p><p>Tài liệu chuyển đổi của Google xác định đầu ra mặc định của 3.1 là PCM thô không có phần đầu, với kiểu audio/l16. Khi chuẩn bị bản ghi có thể chỉnh sửa, các byte âm thanh cần thông tin phát lại hoặc vùng chứa phù hợp; chỉ thêm tên tệp WAV không tạo ra phần đầu WAV. Kiểm tra định dạng thực tế được trả về trước khi nhập kết quả. Google cũng nêu rằng âm thanh do Gemini 3.1 Flash TTS tạo ra mang dấu thủy vân SynthID không thể cảm nhận. Dấu thủy vân phục vụ nhận diện âm thanh được tạo và không thay thế bản chép lời, nhãn người nói hay việc nghe kiểm tra.</p><p>Cách chuẩn bị của 3.1 khác đáng kể so với 3.8. Gemini 3.8 chuyển các chỉ dẫn kéo dài và danh tính người nói sang siêu dữ liệu giọng nói có cấu trúc, sử dụng thẻ sự kiện tại một thời điểm đặt trong dấu ngoặc góc và đổi mặc định của yêu cầu đã hoàn thành sang WAV. Giữ câu lệnh 3.1 theo đúng dạng 3.1 thay vì trộn cấu trúc yêu cầu mới hơn vào đó. Bảng mô hình được hỗ trợ của Google liệt kê khả năng tổng hợp giọng nói một người và nhiều người cho 3.1, còn các điều khiển tạo giọng theo thiết kế và sao chép giọng thuộc các mục 3.8. Phiên bản Flash Live riêng biệt xử lý đầu vào âm thanh tương tác; phiên bản TTS này phục vụ sản xuất âm thanh từ văn bản đã chuẩn bị.</p><p>Đối chiếu bản ghi với kịch bản để kiểm tra từ bị bỏ sót hoặc lặp lại, tên riêng, thời điểm chuyển lượt và các thay đổi cảm xúc dự kiến. Nếu một câu cần nhấn khác đi, sửa chỉ dẫn cục bộ đó và kiểm tra phần chuyển tiếp bị ảnh hưởng. Quy trình này khiến bản yêu cầu diễn xuất trở nên hữu ích: nó ghi lại đặc điểm cần giữ ổn định của người nói và điểm cần thay đổi trong đoạn đó, trong khi kịch bản lưu giữ nội dung khán giả cần nghe.</p>",
  "aboutText": "Google Gemini 3.1 Flash TTS Preview là phiên bản chuyển văn bản thành giọng nói thuộc dòng Gemini 3.1 Flash Audio. Mô hình nhận văn bản và tạo âm thanh lời nói với biểu cảm được điều khiển bằng câu lệnh. Google mô tả thế hệ này là bước cải thiện về độ tự nhiên của giọng nói, khả năng điều khiển và hiệu năng đa ngôn ngữ, với hội thoại nhiều người nói được hỗ trợ ngay từ thiết kế và hơn 70 ngôn ngữ. Ứng dụng thực tế có thể là một bài học thuyết minh ngắn, cuộc trao đổi giữa các nhân vật hoặc một đoạn đọc mà cách thể hiện cũng quan trọng như câu chữ.\n\nChuẩn bị kịch bản hoàn chỉnh và bản yêu cầu diễn xuất. Thế hệ này sử dụng chỉ dẫn bằng ngôn ngữ tự nhiên ngay trong đầu vào văn bản để định hướng phong cách giọng, nhịp độ và cách đọc. Bản phát hành của Google giới thiệu chỉ dẫn bối cảnh để xác lập tình huống, Audio Profiles của người nói để định nghĩa nhân vật và Director’s Notes để hướng dẫn nhịp độ, sắc thái và giọng địa phương. Khi chuẩn bị câu lệnh, trình bày các phần này sao cho dễ nhận biết, để có thể xem xét riêng câu chữ cần đọc và chỉ dẫn diễn xuất. Một bản yêu cầu gọn gàng dễ chỉnh sửa hơn nhiều mô tả cạnh tranh nhau về cùng một giọng nói.\n\nVí dụ, một bản yêu cầu diễn tập tự soạn có thể mô tả người dẫn chuyện điềm tĩnh giới thiệu hiện vật bảo tàng, ngắt nhịp có chừng mực và chuyển sang giọng ấm áp hơn ở câu cuối. Kịch bản đi kèm cần có tên thật của hiện vật và câu chữ chính xác cần đọc. Với hội thoại, hãy tạo hồ sơ riêng biệt cho từng nhân vật và trình tự lượt nói rõ ràng. Dùng bối cảnh để giải thích liệu một người đang trấn an người kia, đặt câu hỏi thực sự hay đáp lại với vẻ ngạc nhiên có kiềm chế. Sản phẩm cần đánh giá là phần thể hiện kịch bản bằng âm thanh có thể nghe được.\n\nCác thẻ âm thanh nội tuyến bổ sung khả năng điều khiển cục bộ trong văn bản, cho phép biểu cảm của người nói thay đổi ngay trong một câu thay vì hoàn toàn phụ thuộc vào chỉ dẫn mở đầu. Google mô tả các thẻ này là công cụ điều khiển phong cách giọng, nhịp độ và cách đọc. Dùng thẻ ở nơi phần thể hiện cần một chuyển đổi cụ thể và giữ câu chữ còn lại tự nhiên khi đọc thành tiếng. Điểm phân biệt hữu ích trong phiên bản này là giữa bản yêu cầu tổng thể về nhân vật hoặc bối cảnh và thay đổi cục bộ trong cách thể hiện. Một đoạn trung tính ngắn có thể xác lập giọng cơ sở trước khi kịch bản bổ sung chỉ dẫn giàu cảm xúc hơn.\n\nVới công việc đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích cuối cùng và nêu giọng địa phương cùng phong cách nói mong muốn trong bản yêu cầu. Thông báo của Google ghi nhận khả năng hỗ trợ hơn 70 ngôn ngữ. Khi chuẩn bị biên tập trên thực tế, hãy dùng một cách viết nhất quán cho các tên lặp lại, viết đầy đủ các chữ viết tắt dễ gây nhầm lẫn nếu cần một cách đọc xác định và kiểm tra các con số trong bản âm thanh. Chỉ ghi nhãn ngôn ngữ chưa đủ để quyết định cách phát âm tên thương hiệu hoặc từ vay mượn. Đối chiếu những đoạn có các từ này với cách đọc dự kiến trước khi chấp nhận một bản thuyết minh dài.\n\nTrang mô hình Gemini API dành riêng cho mô hình preview này liệt kê giới hạn đầu vào là 8,192 token và giới hạn đầu ra là 16,384 token. Thẻ mô hình TTS gốc của DeepMind liệt kê riêng đầu vào văn bản tối đa 16K token và đầu ra âm thanh 32K token; các thông số trên thẻ mô hình này khác với giới hạn phục vụ của Gemini API. Khi chuẩn bị đầu vào, tính cả chỉ dẫn diễn xuất lẫn kịch bản. Hạn mức đầu ra được biểu thị bằng token âm thanh nên không bảo đảm một thời lượng bản ghi cụ thể. Chia bài học hoặc câu chuyện dài thành các phần mạch lạc, giữ nguyên bản yêu cầu nhân vật và nghe các điểm nối. Với hội thoại theo kịch bản, kiểm tra người nói và thứ tự lượt nói bên cạnh câu chữ cùng cách thể hiện cảm xúc.\n\nTài liệu chuyển đổi của Google xác định đầu ra mặc định của 3.1 là PCM thô không có phần đầu, với kiểu audio/l16. Khi chuẩn bị bản ghi có thể chỉnh sửa, các byte âm thanh cần thông tin phát lại hoặc vùng chứa phù hợp; chỉ thêm tên tệp WAV không tạo ra phần đầu WAV. Kiểm tra định dạng thực tế được trả về trước khi nhập kết quả. Google cũng nêu rằng âm thanh do Gemini 3.1 Flash TTS tạo ra mang dấu thủy vân SynthID không thể cảm nhận. Dấu thủy vân phục vụ nhận diện âm thanh được tạo và không thay thế bản chép lời, nhãn người nói hay việc nghe kiểm tra.\n\nCách chuẩn bị của 3.1 khác đáng kể so với 3.8. Gemini 3.8 chuyển các chỉ dẫn kéo dài và danh tính người nói sang siêu dữ liệu giọng nói có cấu trúc, sử dụng thẻ sự kiện tại một thời điểm đặt trong dấu ngoặc góc và đổi mặc định của yêu cầu đã hoàn thành sang WAV. Giữ câu lệnh 3.1 theo đúng dạng 3.1 thay vì trộn cấu trúc yêu cầu mới hơn vào đó. Bảng mô hình được hỗ trợ của Google liệt kê khả năng tổng hợp giọng nói một người và nhiều người cho 3.1, còn các điều khiển tạo giọng theo thiết kế và sao chép giọng thuộc các mục 3.8. Phiên bản Flash Live riêng biệt xử lý đầu vào âm thanh tương tác; phiên bản TTS này phục vụ sản xuất âm thanh từ văn bản đã chuẩn bị.\n\nĐối chiếu bản ghi với kịch bản để kiểm tra từ bị bỏ sót hoặc lặp lại, tên riêng, thời điểm chuyển lượt và các thay đổi cảm xúc dự kiến. Nếu một câu cần nhấn khác đi, sửa chỉ dẫn cục bộ đó và kiểm tra phần chuyển tiếp bị ảnh hưởng. Quy trình này khiến bản yêu cầu diễn xuất trở nên hữu ích: nó ghi lại đặc điểm cần giữ ổn định của người nói và điểm cần thay đổi trong đoạn đó, trong khi kịch bản lưu giữ nội dung khán giả cần nghe.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "a8c899b4d20eb7a273801013afe1b6198a331bd90bcf15cf1c76cf8ba781e7dc",
    "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\">G</span><h2 id=\"sheet-title\">Google: Gemini 3.1 Flash TTS Preview</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-3.1-flash-tts-preview</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|google%2Fgemini-3.1-flash-tts-preview\">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\">Google Gemini 3.1 Flash TTS Preview chuyển kịch bản viết thành âm thanh lời nói giàu biểu cảm. Chỉ dẫn bằng ngôn ngữ tự nhiên, Audio Profiles của người nói, Director’s Notes và các thẻ âm thanh nội tuyến định hình nhịp độ, sắc thái và giọng địa phương. Mô hình hỗ trợ hội thoại nhiều người nói ngay từ thiết kế và hơn 70 ngôn ngữ, sử dụng định dạng câu lệnh và âm thanh của phiên bản 3.1.</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>Google Gemini 3.1 Flash TTS Preview là phiên bản chuyển văn bản thành giọng nói thuộc dòng Gemini 3.1 Flash Audio. Mô hình nhận văn bản và tạo âm thanh lời nói với biểu cảm được điều khiển bằng câu lệnh. Google mô tả thế hệ này là bước cải thiện về độ tự nhiên của giọng nói, khả năng điều khiển và hiệu năng đa ngôn ngữ, với hội thoại nhiều người nói được hỗ trợ ngay từ thiết kế và hơn 70 ngôn ngữ. Ứng dụng thực tế có thể là một bài học thuyết minh ngắn, cuộc trao đổi giữa các nhân vật hoặc một đoạn đọc mà cách thể hiện cũng quan trọng như câu chữ.</p><p>Chuẩn bị kịch bản hoàn chỉnh và bản yêu cầu diễn xuất. Thế hệ này sử dụng chỉ dẫn bằng ngôn ngữ tự nhiên ngay trong đầu vào văn bản để định hướng phong cách giọng, nhịp độ và cách đọc. Bản phát hành của Google giới thiệu chỉ dẫn bối cảnh để xác lập tình huống, Audio Profiles của người nói để định nghĩa nhân vật và Director’s Notes để hướng dẫn nhịp độ, sắc thái và giọng địa phương. Khi chuẩn bị câu lệnh, trình bày các phần này sao cho dễ nhận biết, để có thể xem xét riêng câu chữ cần đọc và chỉ dẫn diễn xuất. Một bản yêu cầu gọn gàng dễ chỉnh sửa hơn nhiều mô tả cạnh tranh nhau về cùng một giọng nói.</p><p>Ví dụ, một bản yêu cầu diễn tập tự soạn có thể mô tả người dẫn chuyện điềm tĩnh giới thiệu hiện vật bảo tàng, ngắt nhịp có chừng mực và chuyển sang giọng ấm áp hơn ở câu cuối. Kịch bản đi kèm cần có tên thật của hiện vật và câu chữ chính xác cần đọc. Với hội thoại, hãy tạo hồ sơ riêng biệt cho từng nhân vật và trình tự lượt nói rõ ràng. Dùng bối cảnh để giải thích liệu một người đang trấn an người kia, đặt câu hỏi thực sự hay đáp lại với vẻ ngạc nhiên có kiềm chế. Sản phẩm cần đánh giá là phần thể hiện kịch bản bằng âm thanh có thể nghe được.</p><p>Các thẻ âm thanh nội tuyến bổ sung khả năng điều khiển cục bộ trong văn bản, cho phép biểu cảm của người nói thay đổi ngay trong một câu thay vì hoàn toàn phụ thuộc vào chỉ dẫn mở đầu. Google mô tả các thẻ này là công cụ điều khiển phong cách giọng, nhịp độ và cách đọc. Dùng thẻ ở nơi phần thể hiện cần một chuyển đổi cụ thể và giữ câu chữ còn lại tự nhiên khi đọc thành tiếng. Điểm phân biệt hữu ích trong phiên bản này là giữa bản yêu cầu tổng thể về nhân vật hoặc bối cảnh và thay đổi cục bộ trong cách thể hiện. Một đoạn trung tính ngắn có thể xác lập giọng cơ sở trước khi kịch bản bổ sung chỉ dẫn giàu cảm xúc hơn.</p><p>Với công việc đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích cuối cùng và nêu giọng địa phương cùng phong cách nói mong muốn trong bản yêu cầu. Thông báo của Google ghi nhận khả năng hỗ trợ hơn 70 ngôn ngữ. Khi chuẩn bị biên tập trên thực tế, hãy dùng một cách viết nhất quán cho các tên lặp lại, viết đầy đủ các chữ viết tắt dễ gây nhầm lẫn nếu cần một cách đọc xác định và kiểm tra các con số trong bản âm thanh. Chỉ ghi nhãn ngôn ngữ chưa đủ để quyết định cách phát âm tên thương hiệu hoặc từ vay mượn. Đối chiếu những đoạn có các từ này với cách đọc dự kiến trước khi chấp nhận một bản thuyết minh dài.</p><p>Trang mô hình Gemini API dành riêng cho mô hình preview này liệt kê giới hạn đầu vào là 8,192 token và giới hạn đầu ra là 16,384 token. Thẻ mô hình TTS gốc của DeepMind liệt kê riêng đầu vào văn bản tối đa 16K token và đầu ra âm thanh 32K token; các thông số trên thẻ mô hình này khác với giới hạn phục vụ của Gemini API. Khi chuẩn bị đầu vào, tính cả chỉ dẫn diễn xuất lẫn kịch bản. Hạn mức đầu ra được biểu thị bằng token âm thanh nên không bảo đảm một thời lượng bản ghi cụ thể. Chia bài học hoặc câu chuyện dài thành các phần mạch lạc, giữ nguyên bản yêu cầu nhân vật và nghe các điểm nối. Với hội thoại theo kịch bản, kiểm tra người nói và thứ tự lượt nói bên cạnh câu chữ cùng cách thể hiện cảm xúc.</p><p>Tài liệu chuyển đổi của Google xác định đầu ra mặc định của 3.1 là PCM thô không có phần đầu, với kiểu audio/l16. Khi chuẩn bị bản ghi có thể chỉnh sửa, các byte âm thanh cần thông tin phát lại hoặc vùng chứa phù hợp; chỉ thêm tên tệp WAV không tạo ra phần đầu WAV. Kiểm tra định dạng thực tế được trả về trước khi nhập kết quả. Google cũng nêu rằng âm thanh do Gemini 3.1 Flash TTS tạo ra mang dấu thủy vân SynthID không thể cảm nhận. Dấu thủy vân phục vụ nhận diện âm thanh được tạo và không thay thế bản chép lời, nhãn người nói hay việc nghe kiểm tra.</p><p>Cách chuẩn bị của 3.1 khác đáng kể so với 3.8. Gemini 3.8 chuyển các chỉ dẫn kéo dài và danh tính người nói sang siêu dữ liệu giọng nói có cấu trúc, sử dụng thẻ sự kiện tại một thời điểm đặt trong dấu ngoặc góc và đổi mặc định của yêu cầu đã hoàn thành sang WAV. Giữ câu lệnh 3.1 theo đúng dạng 3.1 thay vì trộn cấu trúc yêu cầu mới hơn vào đó. Bảng mô hình được hỗ trợ của Google liệt kê khả năng tổng hợp giọng nói một người và nhiều người cho 3.1, còn các điều khiển tạo giọng theo thiết kế và sao chép giọng thuộc các mục 3.8. Phiên bản Flash Live riêng biệt xử lý đầu vào âm thanh tương tác; phiên bản TTS này phục vụ sản xuất âm thanh từ văn bản đã chuẩn bị.</p><p>Đối chiếu bản ghi với kịch bản để kiểm tra từ bị bỏ sót hoặc lặp lại, tên riêng, thời điểm chuyển lượt và các thay đổi cảm xúc dự kiến. Nếu một câu cần nhấn khác đi, sửa chỉ dẫn cục bộ đó và kiểm tra phần chuyển tiếp bị ảnh hưởng. Quy trình này khiến bản yêu cầu diễn xuất trở nên hữu ích: nó ghi lại đặc điểm cần giữ ổn định của người nói và điểm cần thay đổi trong đoạn đó, trong khi kịch bản lưu giữ nội dung khán giả cần nghe.</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>google/gemini-3.1-flash-tts-preview</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>Zephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat</div><div>Độ dài tối thiểu: 1</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>mp3, pcm</div></td><td data-cell-label=\"Mặc định\" data-default=\"known\"><span class=\"card-cell-label\">Mặc định</span>pcm</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>object</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Tham số phương thức và vòng đời</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Tham số</th><th>Hợp đồng</th></tr></thead><tbody><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>content_type</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>application/json</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>required</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>model, input, voice</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_types</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>text</td></tr></tbody></table></div><p>Vòng đời: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí Ailoot</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Đơn vị tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Token đầu vào</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu ra · Token đầu ra</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Đọc bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm, 1 giờ</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>token đầ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>/ 1K token</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào</span> <b>$0.002</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>token đầu ra</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>/ 1K token</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu ra</span> <b>$0.04</b> <span class=\"price-unit\">/ 1K token</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-1460-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1460-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-1460-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1460-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;google/gemini-3.1-flash-tts-preview&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;Orus&#39;, &#39;response_format&#39;: &#39;pcm&#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-1461-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1461-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-1461-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1461-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=google%2Fgemini-3.1-flash-tts-preview&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-flash-tts-preview&amp;fmt=speech\"><code>google/gemini-3.1-flash-tts-preview</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=google%2Fgemini-3.1-flash-tts-preview&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-flash-tts-preview&amp;fmt=speech\"><code>google/gemini-3.1-flash-tts-preview</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-3.1-flash-tts-preview",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|google%2Fgemini-3.1-flash-tts-preview",
      "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": [
                  "google/gemini-3.1-flash-tts-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "Zephyr",
                  "Puck",
                  "Charon",
                  "Kore",
                  "Fenrir",
                  "Leda",
                  "Orus",
                  "Aoede",
                  "Callirrhoe",
                  "Autonoe",
                  "Enceladus",
                  "Iapetus",
                  "Umbriel",
                  "Algieba",
                  "Despina",
                  "Erinome",
                  "Algenib",
                  "Rasalgethi",
                  "Laomedeia",
                  "Achernar",
                  "Alnilam",
                  "Schedar",
                  "Gacrux",
                  "Pulcherrima",
                  "Achird",
                  "Zubenelgenubi",
                  "Vindemiatrix",
                  "Sadachbia",
                  "Sadaltager",
                  "Sulafat"
                ],
                "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": [
                    "google/gemini-3.1-flash-tts-preview"
                  ],
                  "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": [
                    "Zephyr",
                    "Puck",
                    "Charon",
                    "Kore",
                    "Fenrir",
                    "Leda",
                    "Orus",
                    "Aoede",
                    "Callirrhoe",
                    "Autonoe",
                    "Enceladus",
                    "Iapetus",
                    "Umbriel",
                    "Algieba",
                    "Despina",
                    "Erinome",
                    "Algenib",
                    "Rasalgethi",
                    "Laomedeia",
                    "Achernar",
                    "Alnilam",
                    "Schedar",
                    "Gacrux",
                    "Pulcherrima",
                    "Achird",
                    "Zubenelgenubi",
                    "Vindemiatrix",
                    "Sadachbia",
                    "Sadaltager",
                    "Sulafat"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "google/gemini-3.1-flash-tts-preview",
                "response_format": "pcm",
                "voice": "Orus"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "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': 'google/gemini-3.1-flash-tts-preview', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'Orus', 'response_format': 'pcm'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Giọng nói",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "input_token": 2e-06,
            "output_token": 4e-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": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "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.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000002",
            "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": "0.04000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.00004",
            "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"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemini-3.1-flash-tts-preview",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "0a013871891c7f0558a9693e8bb6f6617fb074851bfba13aff8221efa7d506af",
    "input_html_sha256": "7c3938687d9ebe742ecb34f6d29ca41f3089ec055faa2be193e2497f02a2d363",
    "private_audit_sha256": "d48aa0779ff058b69624ee13b559a3983786029ab9340ea2f98b8d6f117a8a9e",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/google-gemini-3-1-flash-tts-preview/",
    "description": "Google Gemini 3.1 Flash TTS Preview chuyển kịch bản viết thành âm thanh lời nói giàu biểu cảm. Chỉ dẫn bằng ngôn ngữ tự nhiên, Audio Profiles của người nói, Director’s Notes và các thẻ âm thanh nội tuyến định hình nhịp độ, sắc thái và giọng địa phương. Mô hình hỗ trợ hội thoại nhiều người nói ngay từ thiết kế và hơn 70 ngôn ngữ, sử dụng định dạng câu lệnh và âm thanh của phiên bản 3.1.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/google-gemini-3-1-flash-tts-preview/index.md",
    "title": "Google: Gemini 3.1 Flash TTS Preview — Ailoot",
    "url": "https://ailoot.ai/models/vi/google-gemini-3-1-flash-tts-preview/"
  },
  "rawModel": {
    "about": "Google Gemini 3.1 Flash TTS Preview là phiên bản chuyển văn bản thành giọng nói thuộc dòng Gemini 3.1 Flash Audio. Mô hình nhận văn bản và tạo âm thanh lời nói với biểu cảm được điều khiển bằng câu lệnh. Google mô tả thế hệ này là bước cải thiện về độ tự nhiên của giọng nói, khả năng điều khiển và hiệu năng đa ngôn ngữ, với hội thoại nhiều người nói được hỗ trợ ngay từ thiết kế và hơn 70 ngôn ngữ. Ứng dụng thực tế có thể là một bài học thuyết minh ngắn, cuộc trao đổi giữa các nhân vật hoặc một đoạn đọc mà cách thể hiện cũng quan trọng như câu chữ.\n\nChuẩn bị kịch bản hoàn chỉnh và bản yêu cầu diễn xuất. Thế hệ này sử dụng chỉ dẫn bằng ngôn ngữ tự nhiên ngay trong đầu vào văn bản để định hướng phong cách giọng, nhịp độ và cách đọc. Bản phát hành của Google giới thiệu chỉ dẫn bối cảnh để xác lập tình huống, Audio Profiles của người nói để định nghĩa nhân vật và Director’s Notes để hướng dẫn nhịp độ, sắc thái và giọng địa phương. Khi chuẩn bị câu lệnh, trình bày các phần này sao cho dễ nhận biết, để có thể xem xét riêng câu chữ cần đọc và chỉ dẫn diễn xuất. Một bản yêu cầu gọn gàng dễ chỉnh sửa hơn nhiều mô tả cạnh tranh nhau về cùng một giọng nói.\n\nVí dụ, một bản yêu cầu diễn tập tự soạn có thể mô tả người dẫn chuyện điềm tĩnh giới thiệu hiện vật bảo tàng, ngắt nhịp có chừng mực và chuyển sang giọng ấm áp hơn ở câu cuối. Kịch bản đi kèm cần có tên thật của hiện vật và câu chữ chính xác cần đọc. Với hội thoại, hãy tạo hồ sơ riêng biệt cho từng nhân vật và trình tự lượt nói rõ ràng. Dùng bối cảnh để giải thích liệu một người đang trấn an người kia, đặt câu hỏi thực sự hay đáp lại với vẻ ngạc nhiên có kiềm chế. Sản phẩm cần đánh giá là phần thể hiện kịch bản bằng âm thanh có thể nghe được.\n\nCác thẻ âm thanh nội tuyến bổ sung khả năng điều khiển cục bộ trong văn bản, cho phép biểu cảm của người nói thay đổi ngay trong một câu thay vì hoàn toàn phụ thuộc vào chỉ dẫn mở đầu. Google mô tả các thẻ này là công cụ điều khiển phong cách giọng, nhịp độ và cách đọc. Dùng thẻ ở nơi phần thể hiện cần một chuyển đổi cụ thể và giữ câu chữ còn lại tự nhiên khi đọc thành tiếng. Điểm phân biệt hữu ích trong phiên bản này là giữa bản yêu cầu tổng thể về nhân vật hoặc bối cảnh và thay đổi cục bộ trong cách thể hiện. Một đoạn trung tính ngắn có thể xác lập giọng cơ sở trước khi kịch bản bổ sung chỉ dẫn giàu cảm xúc hơn.\n\nVới công việc đa ngôn ngữ, cung cấp kịch bản bằng ngôn ngữ đích cuối cùng và nêu giọng địa phương cùng phong cách nói mong muốn trong bản yêu cầu. Thông báo của Google ghi nhận khả năng hỗ trợ hơn 70 ngôn ngữ. Khi chuẩn bị biên tập trên thực tế, hãy dùng một cách viết nhất quán cho các tên lặp lại, viết đầy đủ các chữ viết tắt dễ gây nhầm lẫn nếu cần một cách đọc xác định và kiểm tra các con số trong bản âm thanh. Chỉ ghi nhãn ngôn ngữ chưa đủ để quyết định cách phát âm tên thương hiệu hoặc từ vay mượn. Đối chiếu những đoạn có các từ này với cách đọc dự kiến trước khi chấp nhận một bản thuyết minh dài.\n\nTrang mô hình Gemini API dành riêng cho mô hình preview này liệt kê giới hạn đầu vào là 8,192 token và giới hạn đầu ra là 16,384 token. Thẻ mô hình TTS gốc của DeepMind liệt kê riêng đầu vào văn bản tối đa 16K token và đầu ra âm thanh 32K token; các thông số trên thẻ mô hình này khác với giới hạn phục vụ của Gemini API. Khi chuẩn bị đầu vào, tính cả chỉ dẫn diễn xuất lẫn kịch bản. Hạn mức đầu ra được biểu thị bằng token âm thanh nên không bảo đảm một thời lượng bản ghi cụ thể. Chia bài học hoặc câu chuyện dài thành các phần mạch lạc, giữ nguyên bản yêu cầu nhân vật và nghe các điểm nối. Với hội thoại theo kịch bản, kiểm tra người nói và thứ tự lượt nói bên cạnh câu chữ cùng cách thể hiện cảm xúc.\n\nTài liệu chuyển đổi của Google xác định đầu ra mặc định của 3.1 là PCM thô không có phần đầu, với kiểu audio/l16. Khi chuẩn bị bản ghi có thể chỉnh sửa, các byte âm thanh cần thông tin phát lại hoặc vùng chứa phù hợp; chỉ thêm tên tệp WAV không tạo ra phần đầu WAV. Kiểm tra định dạng thực tế được trả về trước khi nhập kết quả. Google cũng nêu rằng âm thanh do Gemini 3.1 Flash TTS tạo ra mang dấu thủy vân SynthID không thể cảm nhận. Dấu thủy vân phục vụ nhận diện âm thanh được tạo và không thay thế bản chép lời, nhãn người nói hay việc nghe kiểm tra.\n\nCách chuẩn bị của 3.1 khác đáng kể so với 3.8. Gemini 3.8 chuyển các chỉ dẫn kéo dài và danh tính người nói sang siêu dữ liệu giọng nói có cấu trúc, sử dụng thẻ sự kiện tại một thời điểm đặt trong dấu ngoặc góc và đổi mặc định của yêu cầu đã hoàn thành sang WAV. Giữ câu lệnh 3.1 theo đúng dạng 3.1 thay vì trộn cấu trúc yêu cầu mới hơn vào đó. Bảng mô hình được hỗ trợ của Google liệt kê khả năng tổng hợp giọng nói một người và nhiều người cho 3.1, còn các điều khiển tạo giọng theo thiết kế và sao chép giọng thuộc các mục 3.8. Phiên bản Flash Live riêng biệt xử lý đầu vào âm thanh tương tác; phiên bản TTS này phục vụ sản xuất âm thanh từ văn bản đã chuẩn bị.\n\nĐối chiếu bản ghi với kịch bản để kiểm tra từ bị bỏ sót hoặc lặp lại, tên riêng, thời điểm chuyển lượt và các thay đổi cảm xúc dự kiến. Nếu một câu cần nhấn khác đi, sửa chỉ dẫn cục bộ đó và kiểm tra phần chuyển tiếp bị ảnh hưởng. Quy trình này khiến bản yêu cầu diễn xuất trở nên hữu ích: nó ghi lại đặc điểm cần giữ ổn định của người nói và điểm cần thay đổi trong đoạn đó, trong khi kịch bản lưu giữ nội dung khán giả cần nghe.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "capabilities": {
      "context_length": 32768,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000002",
            "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": "0.04000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.00004",
            "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"
          }
        ],
        "summary": "Giá theo cấu hình được trình bày đầy đủ trong phần chi tiết."
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "google/gemini-3.1-flash-tts-preview",
    "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": [
                  "google/gemini-3.1-flash-tts-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "Zephyr",
                  "Puck",
                  "Charon",
                  "Kore",
                  "Fenrir",
                  "Leda",
                  "Orus",
                  "Aoede",
                  "Callirrhoe",
                  "Autonoe",
                  "Enceladus",
                  "Iapetus",
                  "Umbriel",
                  "Algieba",
                  "Despina",
                  "Erinome",
                  "Algenib",
                  "Rasalgethi",
                  "Laomedeia",
                  "Achernar",
                  "Alnilam",
                  "Schedar",
                  "Gacrux",
                  "Pulcherrima",
                  "Achird",
                  "Zubenelgenubi",
                  "Vindemiatrix",
                  "Sadachbia",
                  "Sadaltager",
                  "Sulafat"
                ],
                "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": [
                    "google/gemini-3.1-flash-tts-preview"
                  ],
                  "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": [
                    "Zephyr",
                    "Puck",
                    "Charon",
                    "Kore",
                    "Fenrir",
                    "Leda",
                    "Orus",
                    "Aoede",
                    "Callirrhoe",
                    "Autonoe",
                    "Enceladus",
                    "Iapetus",
                    "Umbriel",
                    "Algieba",
                    "Despina",
                    "Erinome",
                    "Algenib",
                    "Rasalgethi",
                    "Laomedeia",
                    "Achernar",
                    "Alnilam",
                    "Schedar",
                    "Gacrux",
                    "Pulcherrima",
                    "Achird",
                    "Zubenelgenubi",
                    "Vindemiatrix",
                    "Sadachbia",
                    "Sadaltager",
                    "Sulafat"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "google/gemini-3.1-flash-tts-preview",
                "response_format": "pcm",
                "voice": "Orus"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "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': 'google/gemini-3.1-flash-tts-preview', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'Orus', 'response_format': 'pcm'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Giọng nói",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "input_token": 2e-06,
            "output_token": 4e-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": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "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.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000002",
            "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": "0.04000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.00004",
            "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"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemini-3.1-flash-tts-preview",
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemini 3.1 Flash TTS Preview",
    "price": {
      "in": null,
      "in_label": null,
      "out": 0.04,
      "out_label": "/ 1K tokens",
      "sort_in": null,
      "sort_out": 0.04,
      "varies": true
    },
    "short": "Google Gemini 3.1 Flash TTS Preview chuyển kịch bản viết thành âm thanh lời nói giàu biểu cảm. Chỉ dẫn bằng ngôn ngữ tự nhiên, Audio Profiles của người nói, Director’s Notes và các thẻ âm thanh nội tuyến định hình nhịp độ, sắc thái và giọng địa phương. Mô hình hỗ trợ hội thoại nhiều người nói ngay từ thiết kế và hơn 70 ngôn ngữ, sử dụng định dạng câu lệnh và âm thanh của phiên bản 3.1."
  },
  "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": "Google Gemini 3.1 Flash TTS Preview chuyển kịch bản viết thành âm thanh lời nói giàu biểu cảm. Chỉ dẫn bằng ngôn ngữ tự nhiên, Audio Profiles của người nói, Director’s Notes và các thẻ âm thanh nội tuyến định hình nhịp độ, sắc thái và giọng địa phương. Mô hình hỗ trợ hội thoại nhiều người nói ngay từ thiết kế và hơn 70 ngôn ngữ, sử dụng định dạng câu lệnh và âm thanh của phiên bản 3.1.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "b34e18adaf381b92c9c8fbb72a40f29d5171b47d1982921da8524891bef8eabc",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "c5bea224ba2e4d23fc2d4d4182a96eda5d43f8ae0b5b687699dc059103d1915d"
}
