{
  "aboutHtml": "<p>Voxtral TTS là mô hình chuyển văn bản thành giọng nói 4B của Mistral AI để tạo âm thanh lời nói từ văn bản và một tham chiếu giọng. Trang mô hình của nhà sản xuất xác định phiên bản 2603 là voxtral-mini-tts-2603, trong khi thẻ trọng số được phát hành có tên Voxtral 4B TTS 2603. Mục này nói về bản phát hành tạo giọng nói đó, tách biệt với Voxtral Small dành cho hiểu âm thanh, chép lời và các mô hình đầu vào thời gian thực về sau.</p><p>Lời nói giàu biểu cảm và thích nghi giọng</p><p>Mô hình được thiết kế để nắm bắt khoảng dừng, nhịp, ngữ điệu, giọng vùng miền và cách thể hiện cảm xúc của giọng tham chiếu. Giọng đóng vai trò chỉ dẫn về cách văn bản cần được đọc; phần tổng quan của nhà sản xuất không yêu cầu thẻ ngữ điệu hoặc cảm xúc riêng, hay bản chép lời của bản ghi tham chiếu. Văn bản nguồn quyết định nội dung nói, còn tham chiếu âm thanh hướng dẫn cách thể hiện.</p><p>Phần tổng quan mô tả việc thích nghi giọng từ chỉ hai đến ba giây âm thanh. Phần mô tả kiến trúc đề cập lời nhắc giọng dài năm đến hai mươi lăm giây. Những phát biểu này có phạm vi khác nhau: ví dụ thích nghi ngắn không phải yêu cầu dùng tham chiếu ngắn nhất có thể. Chọn lời nói rõ ràng đại diện cho phong cách và giọng vùng miền mong muốn ở kết quả hoàn thiện.</p><p>Thẻ phát hành gồm hai mươi giọng cài sẵn và khả năng thích nghi với giọng mới. Quy trình giọng nói của nhà sản xuất có thể dùng hồ sơ giọng đã lưu hoặc đoạn tham chiếu dùng một lần. Lưu hồ sơ cho phép tái sử dụng cùng tham chiếu giọng giữa các yêu cầu tạo lời nói riêng, còn đoạn dùng một lần cung cấp tham chiếu cho tác vụ hiện tại. Hồ sơ và bản ghi được tạo là những sản phẩm khác nhau.</p><p>Ngôn ngữ và cách thể hiện xuyên ngôn ngữ</p><p>Bản phát hành hỗ trợ tiếng Anh, Pháp, Tây Ban Nha, Đức, Ý, Bồ Đào Nha, Hà Lan, Ả Rập và Hindi, với biến thể phương ngữ, chuyển giọng xuyên ngôn ngữ và trộn ngôn ngữ được nhà sản xuất mô tả. Để có kết quả tốt nhất, hướng dẫn giọng nói khuyến nghị ngôn ngữ tham chiếu trùng với ngôn ngữ văn bản. Chuyển xuyên ngôn ngữ có thể giữ giọng vùng miền của tham chiếu trong khi đọc văn bản đã chuẩn bị bằng một ngôn ngữ được hỗ trợ khác.</p><p>Tác vụ thuyết minh thực tế có thể dùng cùng phong cách giọng cho phần giải thích bằng các ngôn ngữ được hỗ trợ khác nhau, với từng văn bản được chuẩn bị cho người nghe dự kiến. Phản hồi trợ lý giọng nói có thể dùng kịch bản hội thoại ngắn thay vì đọc thành tiếng tài liệu chưa biên tập. Mô hình chuyển văn bản thành giọng nói thể hiện những từ đã chuẩn bị; mọi bước dịch hoặc viết câu trả lời tạo ra những từ đó là bước riêng.</p><p>Chuẩn bị văn bản</p><p>Hướng dẫn giọng nói của nhà sản xuất khuyến nghị văn bản có thể đọc thành lời. Viết số và ký hiệu theo dạng cần được đọc để mô hình không phải chọn giữa nhiều cách đọc. Một số có thể là số lượng, thời gian hoặc mã định danh; xác định lời đọc dự kiến trước khi tổng hợp. Viết đầy đủ chữ viết tắt khi cách phát âm quan trọng, dùng các chữ cái tách rời khi đó là cách đọc mong muốn.</p><p>Tránh định dạng phong phú, emoji và ký tự đặc biệt không được thể hiện thành nội dung lời nói. Chuẩn bị câu đầy đủ với dấu câu và từ ngữ cần thiết cho cách thể hiện. Hướng dẫn khuyến nghị lời nhắc dưới 300 từ để đạt kết quả tốt nhất. Đây là khuyến nghị chất lượng thay vì giới hạn cứng về độ dài đầu vào được công bố.</p><p>Với giải thích quy trình, viết hành động và điều kiện thành câu mà người nghe có thể làm theo. Với thông báo, đặt thông tin quan trọng trước chi tiết tùy chọn. Với phản hồi bằng giọng nói, giữ câu trả lời thực tế và bỏ định dạng chỉ phục vụ hiển thị hoặc ký hiệu nguồn không nên được đọc. Những chuẩn bị này giúp bản thân kịch bản phù hợp với âm thanh trước khi tham chiếu quyết định phong cách.</p><p>Truyền trực tuyến, đầu ra và thời lượng</p><p>Nhà sản xuất mô tả cách cung cấp cơ bản và truyền trực tuyến, cùng khả năng tạo trực tiếp âm thanh dài đến hai phút. Thẻ trọng số được phát hành còn liệt kê suy luận theo lô để chuẩn bị nhiều tác vụ lời nói. Các lần tạo dài hơn của dịch vụ dùng cơ chế xen kẽ thay vì coi một khối tạo trực tiếp là không giới hạn. Với thuyết minh dài hơn, chuẩn bị các mục có ý nghĩa trọn vẹn và giữ nhất quán việc chuẩn bị giọng và văn bản với quy trình cung cấp xử lý phần tiếp nối.</p><p>Thẻ phát hành quy định âm thanh 24 kHz và nêu các định dạng đầu ra WAV, PCM, FLAC, MP3, AAC và Opus. Hướng dẫn dịch vụ giọng nói đề cập MP3 cho đầu ra nén, WAV cho PCM không nén, FLAC cho nén không mất dữ liệu và PCM hoặc Opus cho truyền trực tuyến. Chọn định dạng được quy trình kết nối hỗ trợ và phù hợp với trình phát hoặc bước xử lý của quy trình đó. Chọn định dạng và hành vi truyền trực tuyến tách biệt với bản thân khả năng thích nghi giọng.</p><p>Kiến trúc mô hình và giới hạn thực tế</p><p>Thông báo mô tả kiến trúc tự hồi quy kết hợp flow-matching với lõi bộ giải mã Transformer 3.4B, một Transformer âm học 390 triệu tham số và một bộ mã hóa âm thanh nơ-ron 300 triệu tham số. Bộ giải mã dự đoán nội dung ngữ nghĩa, thành phần âm học tạo biểu diễn lời nói, còn bộ mã hóa xử lý âm thanh. Những thành phần này giải thích nhãn mô hình xấp xỉ 4B; chúng không phải ngôn ngữ đầu vào bổ sung hay một mô hình tạo câu trả lời khác.</p><p>Đầu ra thực tế là bản ghi tổng hợp hoặc luồng âm thanh gắn với kịch bản đã chuẩn bị và giọng đã chọn. Giữ các liên kết này khi tạo nhiều mục để ứng dụng có thể lưu, phát hoặc ghép đúng nội dung. Mô hình tạo âm thanh thay vì bản chép lời, vector tìm kiếm ngữ nghĩa hoặc câu trả lời thực tế mới được soạn.</p><p>Giữ đúng phiên bản giọng nói 2603, ngôn ngữ được hỗ trợ và phong cách tham chiếu. Các nguồn đã đọc cung cấp phát biểu về hai phút tạo trực tiếp và khuyến nghị chuẩn bị dưới 300 từ, nhưng không xác lập giới hạn cứng riêng về số ký tự văn bản hoặc tổng thời lượng bản ghi đã ghép. Dùng yêu cầu văn bản, giọng và cách cung cấp thực tế để xác định sản phẩm âm thanh hoàn thiện.</p>",
  "aboutText": "Voxtral TTS là mô hình chuyển văn bản thành giọng nói 4B của Mistral AI để tạo âm thanh lời nói từ văn bản và một tham chiếu giọng. Trang mô hình của nhà sản xuất xác định phiên bản 2603 là voxtral-mini-tts-2603, trong khi thẻ trọng số được phát hành có tên Voxtral 4B TTS 2603. Mục này nói về bản phát hành tạo giọng nói đó, tách biệt với Voxtral Small dành cho hiểu âm thanh, chép lời và các mô hình đầu vào thời gian thực về sau.\n\nLời nói giàu biểu cảm và thích nghi giọng\n\nMô hình được thiết kế để nắm bắt khoảng dừng, nhịp, ngữ điệu, giọng vùng miền và cách thể hiện cảm xúc của giọng tham chiếu. Giọng đóng vai trò chỉ dẫn về cách văn bản cần được đọc; phần tổng quan của nhà sản xuất không yêu cầu thẻ ngữ điệu hoặc cảm xúc riêng, hay bản chép lời của bản ghi tham chiếu. Văn bản nguồn quyết định nội dung nói, còn tham chiếu âm thanh hướng dẫn cách thể hiện.\n\nPhần tổng quan mô tả việc thích nghi giọng từ chỉ hai đến ba giây âm thanh. Phần mô tả kiến trúc đề cập lời nhắc giọng dài năm đến hai mươi lăm giây. Những phát biểu này có phạm vi khác nhau: ví dụ thích nghi ngắn không phải yêu cầu dùng tham chiếu ngắn nhất có thể. Chọn lời nói rõ ràng đại diện cho phong cách và giọng vùng miền mong muốn ở kết quả hoàn thiện.\n\nThẻ phát hành gồm hai mươi giọng cài sẵn và khả năng thích nghi với giọng mới. Quy trình giọng nói của nhà sản xuất có thể dùng hồ sơ giọng đã lưu hoặc đoạn tham chiếu dùng một lần. Lưu hồ sơ cho phép tái sử dụng cùng tham chiếu giọng giữa các yêu cầu tạo lời nói riêng, còn đoạn dùng một lần cung cấp tham chiếu cho tác vụ hiện tại. Hồ sơ và bản ghi được tạo là những sản phẩm khác nhau.\n\nNgôn ngữ và cách thể hiện xuyên ngôn ngữ\n\nBản phát hành hỗ trợ tiếng Anh, Pháp, Tây Ban Nha, Đức, Ý, Bồ Đào Nha, Hà Lan, Ả Rập và Hindi, với biến thể phương ngữ, chuyển giọng xuyên ngôn ngữ và trộn ngôn ngữ được nhà sản xuất mô tả. Để có kết quả tốt nhất, hướng dẫn giọng nói khuyến nghị ngôn ngữ tham chiếu trùng với ngôn ngữ văn bản. Chuyển xuyên ngôn ngữ có thể giữ giọng vùng miền của tham chiếu trong khi đọc văn bản đã chuẩn bị bằng một ngôn ngữ được hỗ trợ khác.\n\nTác vụ thuyết minh thực tế có thể dùng cùng phong cách giọng cho phần giải thích bằng các ngôn ngữ được hỗ trợ khác nhau, với từng văn bản được chuẩn bị cho người nghe dự kiến. Phản hồi trợ lý giọng nói có thể dùng kịch bản hội thoại ngắn thay vì đọc thành tiếng tài liệu chưa biên tập. Mô hình chuyển văn bản thành giọng nói thể hiện những từ đã chuẩn bị; mọi bước dịch hoặc viết câu trả lời tạo ra những từ đó là bước riêng.\n\nChuẩn bị văn bản\n\nHướng dẫn giọng nói của nhà sản xuất khuyến nghị văn bản có thể đọc thành lời. Viết số và ký hiệu theo dạng cần được đọc để mô hình không phải chọn giữa nhiều cách đọc. Một số có thể là số lượng, thời gian hoặc mã định danh; xác định lời đọc dự kiến trước khi tổng hợp. Viết đầy đủ chữ viết tắt khi cách phát âm quan trọng, dùng các chữ cái tách rời khi đó là cách đọc mong muốn.\n\nTránh định dạng phong phú, emoji và ký tự đặc biệt không được thể hiện thành nội dung lời nói. Chuẩn bị câu đầy đủ với dấu câu và từ ngữ cần thiết cho cách thể hiện. Hướng dẫn khuyến nghị lời nhắc dưới 300 từ để đạt kết quả tốt nhất. Đây là khuyến nghị chất lượng thay vì giới hạn cứng về độ dài đầu vào được công bố.\n\nVới giải thích quy trình, viết hành động và điều kiện thành câu mà người nghe có thể làm theo. Với thông báo, đặt thông tin quan trọng trước chi tiết tùy chọn. Với phản hồi bằng giọng nói, giữ câu trả lời thực tế và bỏ định dạng chỉ phục vụ hiển thị hoặc ký hiệu nguồn không nên được đọc. Những chuẩn bị này giúp bản thân kịch bản phù hợp với âm thanh trước khi tham chiếu quyết định phong cách.\n\nTruyền trực tuyến, đầu ra và thời lượng\n\nNhà sản xuất mô tả cách cung cấp cơ bản và truyền trực tuyến, cùng khả năng tạo trực tiếp âm thanh dài đến hai phút. Thẻ trọng số được phát hành còn liệt kê suy luận theo lô để chuẩn bị nhiều tác vụ lời nói. Các lần tạo dài hơn của dịch vụ dùng cơ chế xen kẽ thay vì coi một khối tạo trực tiếp là không giới hạn. Với thuyết minh dài hơn, chuẩn bị các mục có ý nghĩa trọn vẹn và giữ nhất quán việc chuẩn bị giọng và văn bản với quy trình cung cấp xử lý phần tiếp nối.\n\nThẻ phát hành quy định âm thanh 24 kHz và nêu các định dạng đầu ra WAV, PCM, FLAC, MP3, AAC và Opus. Hướng dẫn dịch vụ giọng nói đề cập MP3 cho đầu ra nén, WAV cho PCM không nén, FLAC cho nén không mất dữ liệu và PCM hoặc Opus cho truyền trực tuyến. Chọn định dạng được quy trình kết nối hỗ trợ và phù hợp với trình phát hoặc bước xử lý của quy trình đó. Chọn định dạng và hành vi truyền trực tuyến tách biệt với bản thân khả năng thích nghi giọng.\n\nKiến trúc mô hình và giới hạn thực tế\n\nThông báo mô tả kiến trúc tự hồi quy kết hợp flow-matching với lõi bộ giải mã Transformer 3.4B, một Transformer âm học 390 triệu tham số và một bộ mã hóa âm thanh nơ-ron 300 triệu tham số. Bộ giải mã dự đoán nội dung ngữ nghĩa, thành phần âm học tạo biểu diễn lời nói, còn bộ mã hóa xử lý âm thanh. Những thành phần này giải thích nhãn mô hình xấp xỉ 4B; chúng không phải ngôn ngữ đầu vào bổ sung hay một mô hình tạo câu trả lời khác.\n\nĐầu ra thực tế là bản ghi tổng hợp hoặc luồng âm thanh gắn với kịch bản đã chuẩn bị và giọng đã chọn. Giữ các liên kết này khi tạo nhiều mục để ứng dụng có thể lưu, phát hoặc ghép đúng nội dung. Mô hình tạo âm thanh thay vì bản chép lời, vector tìm kiếm ngữ nghĩa hoặc câu trả lời thực tế mới được soạn.\n\nGiữ đúng phiên bản giọng nói 2603, ngôn ngữ được hỗ trợ và phong cách tham chiếu. Các nguồn đã đọc cung cấp phát biểu về hai phút tạo trực tiếp và khuyến nghị chuẩn bị dưới 300 từ, nhưng không xác lập giới hạn cứng riêng về số ký tự văn bản hoặc tổng thời lượng bản ghi đã ghép. Dùng yêu cầu văn bản, giọng và cách cung cấp thực tế để xác định sản phẩm âm thanh hoàn thiện.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f91f0c2d3a6412d6cbd2d0b1d8c16e9c70aa7df7c1792de481eaa04fb181b5dc",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "vi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Mistral: Voxtral Mini TTS</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>Mistral /</span><code>mistralai/voxtral-mini-tts-2603</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|mistralai%2Fvoxtral-mini-tts-2603\">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\">Voxtral TTS là mô hình tạo giọng nói 4B của Mistral AI với khả năng thích nghi giọng dựa trên tham chiếu ở chín ngôn ngữ. Mô hình chuyển văn bản đã chuẩn bị thành âm thanh giàu biểu cảm, hỗ trợ lời nhắc giọng tái sử dụng hoặc dùng một lần và truyền trực tuyến, đồng thời tạo đầu ra 24 kHz ở các định dạng âm thanh được mô tả.</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>Voxtral TTS là mô hình chuyển văn bản thành giọng nói 4B của Mistral AI để tạo âm thanh lời nói từ văn bản và một tham chiếu giọng. Trang mô hình của nhà sản xuất xác định phiên bản 2603 là voxtral-mini-tts-2603, trong khi thẻ trọng số được phát hành có tên Voxtral 4B TTS 2603. Mục này nói về bản phát hành tạo giọng nói đó, tách biệt với Voxtral Small dành cho hiểu âm thanh, chép lời và các mô hình đầu vào thời gian thực về sau.</p><p>Lời nói giàu biểu cảm và thích nghi giọng</p><p>Mô hình được thiết kế để nắm bắt khoảng dừng, nhịp, ngữ điệu, giọng vùng miền và cách thể hiện cảm xúc của giọng tham chiếu. Giọng đóng vai trò chỉ dẫn về cách văn bản cần được đọc; phần tổng quan của nhà sản xuất không yêu cầu thẻ ngữ điệu hoặc cảm xúc riêng, hay bản chép lời của bản ghi tham chiếu. Văn bản nguồn quyết định nội dung nói, còn tham chiếu âm thanh hướng dẫn cách thể hiện.</p><p>Phần tổng quan mô tả việc thích nghi giọng từ chỉ hai đến ba giây âm thanh. Phần mô tả kiến trúc đề cập lời nhắc giọng dài năm đến hai mươi lăm giây. Những phát biểu này có phạm vi khác nhau: ví dụ thích nghi ngắn không phải yêu cầu dùng tham chiếu ngắn nhất có thể. Chọn lời nói rõ ràng đại diện cho phong cách và giọng vùng miền mong muốn ở kết quả hoàn thiện.</p><p>Thẻ phát hành gồm hai mươi giọng cài sẵn và khả năng thích nghi với giọng mới. Quy trình giọng nói của nhà sản xuất có thể dùng hồ sơ giọng đã lưu hoặc đoạn tham chiếu dùng một lần. Lưu hồ sơ cho phép tái sử dụng cùng tham chiếu giọng giữa các yêu cầu tạo lời nói riêng, còn đoạn dùng một lần cung cấp tham chiếu cho tác vụ hiện tại. Hồ sơ và bản ghi được tạo là những sản phẩm khác nhau.</p><p>Ngôn ngữ và cách thể hiện xuyên ngôn ngữ</p><p>Bản phát hành hỗ trợ tiếng Anh, Pháp, Tây Ban Nha, Đức, Ý, Bồ Đào Nha, Hà Lan, Ả Rập và Hindi, với biến thể phương ngữ, chuyển giọng xuyên ngôn ngữ và trộn ngôn ngữ được nhà sản xuất mô tả. Để có kết quả tốt nhất, hướng dẫn giọng nói khuyến nghị ngôn ngữ tham chiếu trùng với ngôn ngữ văn bản. Chuyển xuyên ngôn ngữ có thể giữ giọng vùng miền của tham chiếu trong khi đọc văn bản đã chuẩn bị bằng một ngôn ngữ được hỗ trợ khác.</p><p>Tác vụ thuyết minh thực tế có thể dùng cùng phong cách giọng cho phần giải thích bằng các ngôn ngữ được hỗ trợ khác nhau, với từng văn bản được chuẩn bị cho người nghe dự kiến. Phản hồi trợ lý giọng nói có thể dùng kịch bản hội thoại ngắn thay vì đọc thành tiếng tài liệu chưa biên tập. Mô hình chuyển văn bản thành giọng nói thể hiện những từ đã chuẩn bị; mọi bước dịch hoặc viết câu trả lời tạo ra những từ đó là bước riêng.</p><p>Chuẩn bị văn bản</p><p>Hướng dẫn giọng nói của nhà sản xuất khuyến nghị văn bản có thể đọc thành lời. Viết số và ký hiệu theo dạng cần được đọc để mô hình không phải chọn giữa nhiều cách đọc. Một số có thể là số lượng, thời gian hoặc mã định danh; xác định lời đọc dự kiến trước khi tổng hợp. Viết đầy đủ chữ viết tắt khi cách phát âm quan trọng, dùng các chữ cái tách rời khi đó là cách đọc mong muốn.</p><p>Tránh định dạng phong phú, emoji và ký tự đặc biệt không được thể hiện thành nội dung lời nói. Chuẩn bị câu đầy đủ với dấu câu và từ ngữ cần thiết cho cách thể hiện. Hướng dẫn khuyến nghị lời nhắc dưới 300 từ để đạt kết quả tốt nhất. Đây là khuyến nghị chất lượng thay vì giới hạn cứng về độ dài đầu vào được công bố.</p><p>Với giải thích quy trình, viết hành động và điều kiện thành câu mà người nghe có thể làm theo. Với thông báo, đặt thông tin quan trọng trước chi tiết tùy chọn. Với phản hồi bằng giọng nói, giữ câu trả lời thực tế và bỏ định dạng chỉ phục vụ hiển thị hoặc ký hiệu nguồn không nên được đọc. Những chuẩn bị này giúp bản thân kịch bản phù hợp với âm thanh trước khi tham chiếu quyết định phong cách.</p><p>Truyền trực tuyến, đầu ra và thời lượng</p><p>Nhà sản xuất mô tả cách cung cấp cơ bản và truyền trực tuyến, cùng khả năng tạo trực tiếp âm thanh dài đến hai phút. Thẻ trọng số được phát hành còn liệt kê suy luận theo lô để chuẩn bị nhiều tác vụ lời nói. Các lần tạo dài hơn của dịch vụ dùng cơ chế xen kẽ thay vì coi một khối tạo trực tiếp là không giới hạn. Với thuyết minh dài hơn, chuẩn bị các mục có ý nghĩa trọn vẹn và giữ nhất quán việc chuẩn bị giọng và văn bản với quy trình cung cấp xử lý phần tiếp nối.</p><p>Thẻ phát hành quy định âm thanh 24 kHz và nêu các định dạng đầu ra WAV, PCM, FLAC, MP3, AAC và Opus. Hướng dẫn dịch vụ giọng nói đề cập MP3 cho đầu ra nén, WAV cho PCM không nén, FLAC cho nén không mất dữ liệu và PCM hoặc Opus cho truyền trực tuyến. Chọn định dạng được quy trình kết nối hỗ trợ và phù hợp với trình phát hoặc bước xử lý của quy trình đó. Chọn định dạng và hành vi truyền trực tuyến tách biệt với bản thân khả năng thích nghi giọng.</p><p>Kiến trúc mô hình và giới hạn thực tế</p><p>Thông báo mô tả kiến trúc tự hồi quy kết hợp flow-matching với lõi bộ giải mã Transformer 3.4B, một Transformer âm học 390 triệu tham số và một bộ mã hóa âm thanh nơ-ron 300 triệu tham số. Bộ giải mã dự đoán nội dung ngữ nghĩa, thành phần âm học tạo biểu diễn lời nói, còn bộ mã hóa xử lý âm thanh. Những thành phần này giải thích nhãn mô hình xấp xỉ 4B; chúng không phải ngôn ngữ đầu vào bổ sung hay một mô hình tạo câu trả lời khác.</p><p>Đầu ra thực tế là bản ghi tổng hợp hoặc luồng âm thanh gắn với kịch bản đã chuẩn bị và giọng đã chọn. Giữ các liên kết này khi tạo nhiều mục để ứng dụng có thể lưu, phát hoặc ghép đúng nội dung. Mô hình tạo âm thanh thay vì bản chép lời, vector tìm kiếm ngữ nghĩa hoặc câu trả lời thực tế mới được soạn.</p><p>Giữ đúng phiên bản giọng nói 2603, ngôn ngữ được hỗ trợ và phong cách tham chiếu. Các nguồn đã đọc cung cấp phát biểu về hai phút tạo trực tiếp và khuyến nghị chuẩn bị dưới 300 từ, nhưng không xác lập giới hạn cứng riêng về số ký tự văn bản hoặc tổng thời lượng bản ghi đã ghép. Dùng yêu cầu văn bản, giọng và cách cung cấp thực tế để xác định sản phẩm âm thanh hoàn thiện.</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 · Tổng hợp giọng nói</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Đầu vào</dt><dd><code>text</code></dd></div><div><dt>Đầu ra</dt><dd><code>audio</code></dd></div><div><dt>Định dạng đầu ra</dt><dd>mp3</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Trường</th><th>Loại</th><th>Yêu cầu</th><th>Giá trị &amp; giới hạn</th><th>Mặc định</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>mistralai/voxtral-mini-tts-2603</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>Độ dài tối thiểu: 1</div><div>Đơn vị: ký tự Unicode</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>en_paul_sad, en_paul_neutral, en_paul_happy, en_paul_frustrated, en_paul_excited, en_paul_confident, en_paul_cheerful, en_paul_angry, gb_oliver_neutral, gb_oliver_sad, gb_oliver_excited, gb_oliver_curious, gb_oliver_confident, gb_oliver_cheerful, gb_oliver_angry, gb_jane_sarcasm, gb_jane_confused, gb_jane_shameful, gb_jane_sad, gb_jane_neutral, gb_jane_jealousy, gb_jane_frustrated, gb_jane_curious, gb_jane_confident, fr_marie_sad, fr_marie_neutral, fr_marie_happy, fr_marie_excited, fr_marie_curious, fr_marie_angry</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>mp3</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Tổ hợp tư liệu đầu vào</summary><p class=\"note-s\"><b>text_to_speech</b> · Bắt buộc: input</p></details><details class=\"note-s\" data-method-contract><summary>Tham số phương thức và vòng đời</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Tham số</th><th>Hợp đồng</th></tr></thead><tbody><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>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, response_format</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>voice_ids</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>en_paul_sad, en_paul_neutral, en_paul_happy, en_paul_frustrated, en_paul_excited, en_paul_confident, en_paul_cheerful, en_paul_angry, gb_oliver_neutral, gb_oliver_sad, gb_oliver_excited, gb_oliver_curious, gb_oliver_confident, gb_oliver_cheerful, gb_oliver_angry, gb_jane_sarcasm, gb_jane_confused, gb_jane_shameful, gb_jane_sad, gb_jane_neutral, gb_jane_jealousy, gb_jane_frustrated, gb_jane_curious, gb_jane_confident, fr_marie_sad, fr_marie_neutral, fr_marie_happy, fr_marie_excited, fr_marie_curious, fr_marie_angry</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>response_format</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>mp3</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>max_input_characters</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>null</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>other_options</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>false</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>input</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>văn bản UTF-8 nguyên dạng; đếm ký tự Unicode mà không chuẩn hóa</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><p class=\"note-s\">Chọn giọng nói chính xác từ hồ sơ mô hình này.</p><p class=\"note-s\">Ký tự đầu vào và giây âm thanh là các đơn vị đo tính phí khác nhau.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí Ailoot</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Lượng tính 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=\"Lượng tính phí\"><span class=\"card-cell-label\">Lượng tính phí</span>—</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>Ultra</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Lượng tính phí\"><span class=\"card-cell-label\">Lượng tính phí</span>Mỗi điểm mã Unicode được tính là một ký tự, bao gồm ký tự Hán (Han).</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi 1K ký tự đầu vào</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Ký tự đầu vào</span> <b>$0.032</b> <span class=\"price-unit\">mỗi 1K ký tự đầu vào</span></div></td></tr></tbody></table></div></div><div data-declared-reference-pricing><h4>Chi tiết giá cước tham chiếu</h4><p class=\"note-s\">Biểu tham chiếu cấp mô hình không thay đổi việc chọn phương thức, báo giá hoặc khoản phí. Khoản phí đang áp dụng dùng mức phí phương thức Ailoot đã chọn.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Mistral: Voxtral Mini TTS</summary><h4>Giá theo cấu hình</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Điều kiện 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>Mistral: Voxtral Mini TTS · Cấu hình mặc định</th><td data-cell-label=\"Điều kiện tính phí\"><span class=\"card-cell-label\">Điều kiện tính phí</span>Cấu hình mặc định</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Ký tự đầu vào</span> <b>0,000032 US$</b> <span class=\"price-unit\">mỗi ký tự đầu vào</span></div></td></tr></tbody></table></div></details></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 · Tổng hợp giọng nói</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Các phiên bản mã\"><button class=\"cg-tab\" id=\"model-code-1943-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1943-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</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-1943-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1943-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;mistralai/voxtral-mini-tts-2603&quot;, &quot;input&quot;: &quot;Good afternoon! This is a short voice take.&quot;}&#39;)\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nallowed=json.loads(&#39;[&quot;en_paul_sad&quot;, &quot;en_paul_neutral&quot;, &quot;en_paul_happy&quot;, &quot;en_paul_frustrated&quot;, &quot;en_paul_excited&quot;, &quot;en_paul_confident&quot;, &quot;en_paul_cheerful&quot;, &quot;en_paul_angry&quot;, &quot;gb_oliver_neutral&quot;, &quot;gb_oliver_sad&quot;, &quot;gb_oliver_excited&quot;, &quot;gb_oliver_curious&quot;, &quot;gb_oliver_confident&quot;, &quot;gb_oliver_cheerful&quot;, &quot;gb_oliver_angry&quot;, &quot;gb_jane_sarcasm&quot;, &quot;gb_jane_confused&quot;, &quot;gb_jane_shameful&quot;, &quot;gb_jane_sad&quot;, &quot;gb_jane_neutral&quot;, &quot;gb_jane_jealousy&quot;, &quot;gb_jane_frustrated&quot;, &quot;gb_jane_curious&quot;, &quot;gb_jane_confident&quot;, &quot;fr_marie_sad&quot;, &quot;fr_marie_neutral&quot;, &quot;fr_marie_happy&quot;, &quot;fr_marie_excited&quot;, &quot;fr_marie_curious&quot;, &quot;fr_marie_angry&quot;]&#39;)\nif voice not in allowed: raise SystemExit(&quot;Choose an accepted voice ID from this exact model profile&quot;)\np[&quot;voice&quot;]=voice\np[&quot;response_format&quot;]=&quot;mp3&quot;\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Nhận và lưu kết quả</h3><h4>Ailoot Ultra · Tổng hợp giọng nói</h4><p class=\"note-s\">mp3</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><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-1944-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-0\" aria-selected=\"true\" tabindex=\"0\">Thư viện phương tiện</button><button class=\"cg-tab\" id=\"model-code-1944-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Trạng thái tác vụ</button><button class=\"cg-tab\" id=\"model-code-1944-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Chi tiết tài nguyê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-1944-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-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 media-assets.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1944-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_MEDIA_TASK_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/tasks/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-task.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-task.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1944-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_ASSET_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/assets/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-asset.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-asset.json&quot;).read_text())))\nPY_RESULT\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ộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Nếu cần kiểm tra phản hồi gốc</h5><p class=\"note-s\">Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh.</p></div><details class=\"card-about\" data-output-fields><summary>Trường phản hồi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Trường</th><th>Loại</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>bytes</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Lỗi và bước tiếp theo</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Phản hồi</th><th>Điều kiện</th><th>Bước tiếp theo</th></tr></thead><tbody><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span><code>server_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Bí danh</h3><h4>Bí danh mô hình</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=mistralai%2Fvoxtral-mini-tts-2603&amp;route=Ultra&amp;caller=mistralai%2Fvoxtral-mini-tts-2603&amp;fmt=speech\"><code>mistralai/voxtral-mini-tts-2603</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=mistralai%2Fvoxtral-mini-tts-2603&amp;route=Ultra&amp;caller=mistralai%2Fvoxtral-mini-tts-2603&amp;fmt=speech\"><code>mistralai/voxtral-mini-tts-2603</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "mistralai/voxtral-mini-tts-2603",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|mistralai%2Fvoxtral-mini-tts-2603",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ",
                "http_status": 400,
                "recovery": "Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra",
                "http_status": null,
                "recovery": "Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mistralai/voxtral-mini-tts-2603"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "ký tự Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "en_paul_sad",
                  "en_paul_neutral",
                  "en_paul_happy",
                  "en_paul_frustrated",
                  "en_paul_excited",
                  "en_paul_confident",
                  "en_paul_cheerful",
                  "en_paul_angry",
                  "gb_oliver_neutral",
                  "gb_oliver_sad",
                  "gb_oliver_excited",
                  "gb_oliver_curious",
                  "gb_oliver_confident",
                  "gb_oliver_cheerful",
                  "gb_oliver_angry",
                  "gb_jane_sarcasm",
                  "gb_jane_confused",
                  "gb_jane_shameful",
                  "gb_jane_sad",
                  "gb_jane_neutral",
                  "gb_jane_jealousy",
                  "gb_jane_frustrated",
                  "gb_jane_curious",
                  "gb_jane_confident",
                  "fr_marie_sad",
                  "fr_marie_neutral",
                  "fr_marie_happy",
                  "fr_marie_excited",
                  "fr_marie_curious",
                  "fr_marie_angry"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Chọn giọng nói chính xác từ hồ sơ mô hình này.",
            "Ký tự đầu vào và giây âm thanh là các đơn vị đo tính phí khác nhau."
          ],
          "input": {
            "content_type": "application/json",
            "input": "văn bản UTF-8 nguyên dạng; đếm ký tự Unicode mà không chuẩn hóa",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "en_paul_sad",
              "en_paul_neutral",
              "en_paul_happy",
              "en_paul_frustrated",
              "en_paul_excited",
              "en_paul_confident",
              "en_paul_cheerful",
              "en_paul_angry",
              "gb_oliver_neutral",
              "gb_oliver_sad",
              "gb_oliver_excited",
              "gb_oliver_curious",
              "gb_oliver_confident",
              "gb_oliver_cheerful",
              "gb_oliver_angry",
              "gb_jane_sarcasm",
              "gb_jane_confused",
              "gb_jane_shameful",
              "gb_jane_sad",
              "gb_jane_neutral",
              "gb_jane_jealousy",
              "gb_jane_frustrated",
              "gb_jane_curious",
              "gb_jane_confident",
              "fr_marie_sad",
              "fr_marie_neutral",
              "fr_marie_happy",
              "fr_marie_excited",
              "fr_marie_curious",
              "fr_marie_angry"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "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": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "20ebfeb88167b8c33fea",
            "label": "Mistral: Voxtral Mini TTS",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Cấu hình mặc định"
                },
                "label": "Mistral: Voxtral Mini TTS · Cấu hình mặc định",
                "units": [
                  {
                    "amount": "0.000032",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "3ceae9e888e4cc9cd6e6009e",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"mistralai/voxtral-mini-tts-2603\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"en_paul_sad\", \"en_paul_neutral\", \"en_paul_happy\", \"en_paul_frustrated\", \"en_paul_excited\", \"en_paul_confident\", \"en_paul_cheerful\", \"en_paul_angry\", \"gb_oliver_neutral\", \"gb_oliver_sad\", \"gb_oliver_excited\", \"gb_oliver_curious\", \"gb_oliver_confident\", \"gb_oliver_cheerful\", \"gb_oliver_angry\", \"gb_jane_sarcasm\", \"gb_jane_confused\", \"gb_jane_shameful\", \"gb_jane_sad\", \"gb_jane_neutral\", \"gb_jane_jealousy\", \"gb_jane_frustrated\", \"gb_jane_curious\", \"gb_jane_confident\", \"fr_marie_sad\", \"fr_marie_neutral\", \"fr_marie_happy\", \"fr_marie_excited\", \"fr_marie_curious\", \"fr_marie_angry\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "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 media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3.2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "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.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    }
  ],
  "model_id": "mistralai/voxtral-mini-tts-2603",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "7cd1ffc9996e0460208f03c6998c4d33810ae88ae385aa535e3cf2f9775261d4",
    "input_html_sha256": "c2d638a77e788f50093a435017cca1a945e01a99a5f72c212abb5c4f741aac1f",
    "private_audit_sha256": "26713e8593e14dc7ba6487e771bab4ac7915dfafac9fd0b9b8dd4a3e09aedc1f",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/mistralai-voxtral-mini-tts-2603/",
    "description": "Voxtral TTS là mô hình tạo giọng nói 4B của Mistral AI với khả năng thích nghi giọng dựa trên tham chiếu ở chín ngôn ngữ. Mô hình chuyển văn bản đã chuẩn bị thành âm thanh giàu biểu cảm, hỗ trợ lời nhắc giọng tái sử dụng hoặc dùng một lần và truyền trực tuyến, đồng thời tạo đầu ra 24 kHz ở các định dạng âm thanh được mô tả.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/mistralai-voxtral-mini-tts-2603/index.md",
    "title": "Mistral: Voxtral Mini TTS — Ailoot",
    "url": "https://ailoot.ai/models/vi/mistralai-voxtral-mini-tts-2603/"
  },
  "rawModel": {
    "about": "Voxtral TTS là mô hình chuyển văn bản thành giọng nói 4B của Mistral AI để tạo âm thanh lời nói từ văn bản và một tham chiếu giọng. Trang mô hình của nhà sản xuất xác định phiên bản 2603 là voxtral-mini-tts-2603, trong khi thẻ trọng số được phát hành có tên Voxtral 4B TTS 2603. Mục này nói về bản phát hành tạo giọng nói đó, tách biệt với Voxtral Small dành cho hiểu âm thanh, chép lời và các mô hình đầu vào thời gian thực về sau.\n\nLời nói giàu biểu cảm và thích nghi giọng\n\nMô hình được thiết kế để nắm bắt khoảng dừng, nhịp, ngữ điệu, giọng vùng miền và cách thể hiện cảm xúc của giọng tham chiếu. Giọng đóng vai trò chỉ dẫn về cách văn bản cần được đọc; phần tổng quan của nhà sản xuất không yêu cầu thẻ ngữ điệu hoặc cảm xúc riêng, hay bản chép lời của bản ghi tham chiếu. Văn bản nguồn quyết định nội dung nói, còn tham chiếu âm thanh hướng dẫn cách thể hiện.\n\nPhần tổng quan mô tả việc thích nghi giọng từ chỉ hai đến ba giây âm thanh. Phần mô tả kiến trúc đề cập lời nhắc giọng dài năm đến hai mươi lăm giây. Những phát biểu này có phạm vi khác nhau: ví dụ thích nghi ngắn không phải yêu cầu dùng tham chiếu ngắn nhất có thể. Chọn lời nói rõ ràng đại diện cho phong cách và giọng vùng miền mong muốn ở kết quả hoàn thiện.\n\nThẻ phát hành gồm hai mươi giọng cài sẵn và khả năng thích nghi với giọng mới. Quy trình giọng nói của nhà sản xuất có thể dùng hồ sơ giọng đã lưu hoặc đoạn tham chiếu dùng một lần. Lưu hồ sơ cho phép tái sử dụng cùng tham chiếu giọng giữa các yêu cầu tạo lời nói riêng, còn đoạn dùng một lần cung cấp tham chiếu cho tác vụ hiện tại. Hồ sơ và bản ghi được tạo là những sản phẩm khác nhau.\n\nNgôn ngữ và cách thể hiện xuyên ngôn ngữ\n\nBản phát hành hỗ trợ tiếng Anh, Pháp, Tây Ban Nha, Đức, Ý, Bồ Đào Nha, Hà Lan, Ả Rập và Hindi, với biến thể phương ngữ, chuyển giọng xuyên ngôn ngữ và trộn ngôn ngữ được nhà sản xuất mô tả. Để có kết quả tốt nhất, hướng dẫn giọng nói khuyến nghị ngôn ngữ tham chiếu trùng với ngôn ngữ văn bản. Chuyển xuyên ngôn ngữ có thể giữ giọng vùng miền của tham chiếu trong khi đọc văn bản đã chuẩn bị bằng một ngôn ngữ được hỗ trợ khác.\n\nTác vụ thuyết minh thực tế có thể dùng cùng phong cách giọng cho phần giải thích bằng các ngôn ngữ được hỗ trợ khác nhau, với từng văn bản được chuẩn bị cho người nghe dự kiến. Phản hồi trợ lý giọng nói có thể dùng kịch bản hội thoại ngắn thay vì đọc thành tiếng tài liệu chưa biên tập. Mô hình chuyển văn bản thành giọng nói thể hiện những từ đã chuẩn bị; mọi bước dịch hoặc viết câu trả lời tạo ra những từ đó là bước riêng.\n\nChuẩn bị văn bản\n\nHướng dẫn giọng nói của nhà sản xuất khuyến nghị văn bản có thể đọc thành lời. Viết số và ký hiệu theo dạng cần được đọc để mô hình không phải chọn giữa nhiều cách đọc. Một số có thể là số lượng, thời gian hoặc mã định danh; xác định lời đọc dự kiến trước khi tổng hợp. Viết đầy đủ chữ viết tắt khi cách phát âm quan trọng, dùng các chữ cái tách rời khi đó là cách đọc mong muốn.\n\nTránh định dạng phong phú, emoji và ký tự đặc biệt không được thể hiện thành nội dung lời nói. Chuẩn bị câu đầy đủ với dấu câu và từ ngữ cần thiết cho cách thể hiện. Hướng dẫn khuyến nghị lời nhắc dưới 300 từ để đạt kết quả tốt nhất. Đây là khuyến nghị chất lượng thay vì giới hạn cứng về độ dài đầu vào được công bố.\n\nVới giải thích quy trình, viết hành động và điều kiện thành câu mà người nghe có thể làm theo. Với thông báo, đặt thông tin quan trọng trước chi tiết tùy chọn. Với phản hồi bằng giọng nói, giữ câu trả lời thực tế và bỏ định dạng chỉ phục vụ hiển thị hoặc ký hiệu nguồn không nên được đọc. Những chuẩn bị này giúp bản thân kịch bản phù hợp với âm thanh trước khi tham chiếu quyết định phong cách.\n\nTruyền trực tuyến, đầu ra và thời lượng\n\nNhà sản xuất mô tả cách cung cấp cơ bản và truyền trực tuyến, cùng khả năng tạo trực tiếp âm thanh dài đến hai phút. Thẻ trọng số được phát hành còn liệt kê suy luận theo lô để chuẩn bị nhiều tác vụ lời nói. Các lần tạo dài hơn của dịch vụ dùng cơ chế xen kẽ thay vì coi một khối tạo trực tiếp là không giới hạn. Với thuyết minh dài hơn, chuẩn bị các mục có ý nghĩa trọn vẹn và giữ nhất quán việc chuẩn bị giọng và văn bản với quy trình cung cấp xử lý phần tiếp nối.\n\nThẻ phát hành quy định âm thanh 24 kHz và nêu các định dạng đầu ra WAV, PCM, FLAC, MP3, AAC và Opus. Hướng dẫn dịch vụ giọng nói đề cập MP3 cho đầu ra nén, WAV cho PCM không nén, FLAC cho nén không mất dữ liệu và PCM hoặc Opus cho truyền trực tuyến. Chọn định dạng được quy trình kết nối hỗ trợ và phù hợp với trình phát hoặc bước xử lý của quy trình đó. Chọn định dạng và hành vi truyền trực tuyến tách biệt với bản thân khả năng thích nghi giọng.\n\nKiến trúc mô hình và giới hạn thực tế\n\nThông báo mô tả kiến trúc tự hồi quy kết hợp flow-matching với lõi bộ giải mã Transformer 3.4B, một Transformer âm học 390 triệu tham số và một bộ mã hóa âm thanh nơ-ron 300 triệu tham số. Bộ giải mã dự đoán nội dung ngữ nghĩa, thành phần âm học tạo biểu diễn lời nói, còn bộ mã hóa xử lý âm thanh. Những thành phần này giải thích nhãn mô hình xấp xỉ 4B; chúng không phải ngôn ngữ đầu vào bổ sung hay một mô hình tạo câu trả lời khác.\n\nĐầu ra thực tế là bản ghi tổng hợp hoặc luồng âm thanh gắn với kịch bản đã chuẩn bị và giọng đã chọn. Giữ các liên kết này khi tạo nhiều mục để ứng dụng có thể lưu, phát hoặc ghép đúng nội dung. Mô hình tạo âm thanh thay vì bản chép lời, vector tìm kiếm ngữ nghĩa hoặc câu trả lời thực tế mới được soạn.\n\nGiữ đúng phiên bản giọng nói 2603, ngôn ngữ được hỗ trợ và phong cách tham chiếu. Các nguồn đã đọc cung cấp phát biểu về hai phút tạo trực tiếp và khuyến nghị chuẩn bị dưới 300 từ, nhưng không xác lập giới hạn cứng riêng về số ký tự văn bản hoặc tổng thời lượng bản ghi đã ghép. Dùng yêu cầu văn bản, giọng và cách cung cấp thực tế để xác định sản phẩm âm thanh hoàn thiện.",
    "alias_of": null,
    "aliases": [],
    "author": "Mistral",
    "available": null,
    "canonical_model": "mistralai/voxtral-mini-tts-2603",
    "capabilities": {
      "context_length": 4096,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ],
        "summary": "Giá theo cấu hình được trình bày đầy đủ trong phần chi tiết."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "mistralai/voxtral-mini-tts-2603",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Trường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ",
                "http_status": 400,
                "recovery": "Sửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Phản hồi trả về cho biết thao tác hoặc kết quả cần được kiểm tra",
                "http_status": null,
                "recovery": "Giữ lại ID thao tác/tác vụ gốc đã trả về, các header của yêu cầu và toàn bộ phản hồi; tiếp tục truy xuất thao tác gốc đó bằng các phương thức được hỗ trợ. Không gửi lại yêu cầu tạo.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại operation_id/X-Client-Request-ID gốc để đối soát mà không gửi lại yêu cầu; không có tuyến truy vấn trạng thái riêng cho âm thanh."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ kết quả nhị phân và các header. Nếu phản hồi ở dạng JSON hoặc chứa nhiều đầu ra, giữ lại mọi phần tử dữ liệu và tải từng tài nguyên từ URL có chữ ký thực tế.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mistralai/voxtral-mini-tts-2603"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "ký tự Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "en_paul_sad",
                  "en_paul_neutral",
                  "en_paul_happy",
                  "en_paul_frustrated",
                  "en_paul_excited",
                  "en_paul_confident",
                  "en_paul_cheerful",
                  "en_paul_angry",
                  "gb_oliver_neutral",
                  "gb_oliver_sad",
                  "gb_oliver_excited",
                  "gb_oliver_curious",
                  "gb_oliver_confident",
                  "gb_oliver_cheerful",
                  "gb_oliver_angry",
                  "gb_jane_sarcasm",
                  "gb_jane_confused",
                  "gb_jane_shameful",
                  "gb_jane_sad",
                  "gb_jane_neutral",
                  "gb_jane_jealousy",
                  "gb_jane_frustrated",
                  "gb_jane_curious",
                  "gb_jane_confident",
                  "fr_marie_sad",
                  "fr_marie_neutral",
                  "fr_marie_happy",
                  "fr_marie_excited",
                  "fr_marie_curious",
                  "fr_marie_angry"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Chọn giọng nói chính xác từ hồ sơ mô hình này.",
            "Ký tự đầu vào và giây âm thanh là các đơn vị đo tính phí khác nhau."
          ],
          "input": {
            "content_type": "application/json",
            "input": "văn bản UTF-8 nguyên dạng; đếm ký tự Unicode mà không chuẩn hóa",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "en_paul_sad",
              "en_paul_neutral",
              "en_paul_happy",
              "en_paul_frustrated",
              "en_paul_excited",
              "en_paul_confident",
              "en_paul_cheerful",
              "en_paul_angry",
              "gb_oliver_neutral",
              "gb_oliver_sad",
              "gb_oliver_excited",
              "gb_oliver_curious",
              "gb_oliver_confident",
              "gb_oliver_cheerful",
              "gb_oliver_angry",
              "gb_jane_sarcasm",
              "gb_jane_confused",
              "gb_jane_shameful",
              "gb_jane_sad",
              "gb_jane_neutral",
              "gb_jane_jealousy",
              "gb_jane_frustrated",
              "gb_jane_curious",
              "gb_jane_confident",
              "fr_marie_sad",
              "fr_marie_neutral",
              "fr_marie_happy",
              "fr_marie_excited",
              "fr_marie_curious",
              "fr_marie_angry"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "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": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "20ebfeb88167b8c33fea",
            "label": "Mistral: Voxtral Mini TTS",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Cấu hình mặc định"
                },
                "label": "Mistral: Voxtral Mini TTS · Cấu hình mặc định",
                "units": [
                  {
                    "amount": "0.000032",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "3ceae9e888e4cc9cd6e6009e",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"mistralai/voxtral-mini-tts-2603\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"en_paul_sad\", \"en_paul_neutral\", \"en_paul_happy\", \"en_paul_frustrated\", \"en_paul_excited\", \"en_paul_confident\", \"en_paul_cheerful\", \"en_paul_angry\", \"gb_oliver_neutral\", \"gb_oliver_sad\", \"gb_oliver_excited\", \"gb_oliver_curious\", \"gb_oliver_confident\", \"gb_oliver_cheerful\", \"gb_oliver_angry\", \"gb_jane_sarcasm\", \"gb_jane_confused\", \"gb_jane_shameful\", \"gb_jane_sad\", \"gb_jane_neutral\", \"gb_jane_jealousy\", \"gb_jane_frustrated\", \"gb_jane_curious\", \"gb_jane_confident\", \"fr_marie_sad\", \"fr_marie_neutral\", \"fr_marie_happy\", \"fr_marie_excited\", \"fr_marie_curious\", \"fr_marie_angry\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "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 media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3.2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "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.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "mistralai/voxtral-mini-tts-2603",
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra"
      }
    ],
    "name": "Mistral: Voxtral Mini TTS",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "hosted_reference"
        },
        "dimensions": {
          "variant": null
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000032",
            "amount_unit": "usd_per_input_character",
            "conditions": {
              "variant": null
            },
            "key": "pricing.prompt",
            "label": "prompt",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_character"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_not_separately_charged_output",
            "conditions": {
              "variant": null
            },
            "key": "pricing.completion",
            "label": "completion",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "not_separately_charged_output"
          }
        ]
      }
    ],
    "public_id": "mistralai/voxtral-mini-tts-2603",
    "short": "Voxtral TTS là mô hình tạo giọng nói 4B của Mistral AI với khả năng thích nghi giọng dựa trên tham chiếu ở chín ngôn ngữ. Mô hình chuyển văn bản đã chuẩn bị thành âm thanh giàu biểu cảm, hỗ trợ lời nhắc giọng tái sử dụng hoặc dùng một lần và truyền trực tuyến, đồng thời tạo đầu ra 24 kHz ở các định dạng âm thanh được mô tả."
  },
  "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": "Voxtral TTS là mô hình tạo giọng nói 4B của Mistral AI với khả năng thích nghi giọng dựa trên tham chiếu ở chín ngôn ngữ. Mô hình chuyển văn bản đã chuẩn bị thành âm thanh giàu biểu cảm, hỗ trợ lời nhắc giọng tái sử dụng hoặc dùng một lần và truyền trực tuyến, đồng thời tạo đầu ra 24 kHz ở các định dạng âm thanh được mô tả.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "2997efe66ebdc5a298a81ac004672d1fdd8ba7a4108ed281608d7229a880a6e7",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "147bca1239b0ce549f64ee081443506b89bcd5e7745ae00219b9d8c3e031f92e"
}
