{
  "aboutHtml": "<p>Transcribe 1 Pro là mô hình chuyển giọng nói thành văn bản của Fish Audio cho đoạn ngắn, hội thoại nhiều người và bản ghi dài. Mô hình nhận âm thanh đã ghi và trả về bản chép lời, với thời gian tùy chọn và lượt nói có cấu trúc. Đặc điểm phân biệt là đánh dấu đổi người nói trong văn bản cùng dấu hiệu cảm xúc hoặc sự kiện giọng nói, giữ nhiều cấu trúc hội thoại của bản ghi hơn một chuỗi từ đơn thuần.</p><p>Với phỏng vấn, họp hoặc podcast, giữ toàn bộ hội thoại trong một tệp để người nói xuất hiện lại có thể giữ nhãn nhất quán trong phản hồi. Sản phẩm xem xét hữu ích là bản chép lời liên kết với bản ghi gốc, các lượt hiển thị riêng và mốc thời gian để kiểm tra trích dẫn. Tóm tắt hoặc danh sách việc cần làm là bước ứng dụng sau: giữ tách khỏi bản chép lời để nguồn lời nói vẫn có cho đối chiếu.</p><p>Nhà sản xuất nhận bản ghi đến 60 phút và mô tả xử lý tệp dài bằng âm thanh nén như MP3, Opus hoặc AAC. Định dạng hỗ trợ gồm WAV, MP3, AAC trong M4A hoặc MP4, FLAC, Ogg với Opus hoặc Vorbis, WebM/Matroska và MOV. Với tệp video, mô hình dùng đường âm thanh đầu tiên. AIFF, CAF, WMA, AMR, AC-3 và PCM thô không có header không được hỗ trợ. Mỗi yêu cầu cung cấp một tệp âm thanh; kết quả về sau khi toàn bộ bản ghi được chép lời, và bản ghi dài có thể mất vài phút. Đoạn ngắn hơn khoảng 0,08 giây bị từ chối.</p><p>Phản hồi của nhà sản xuất chứa toàn văn, thời lượng bản ghi tính bằng giây và mảng segments. Pro đánh dấu đổi người nói trực tiếp trong văn bản bằng nhãn như &lt;|speaker:0|&gt; và &lt;|speaker:1|&gt;; nhãn áp dụng cho văn bản tiếp theo đến dấu kế tiếp. Đây là định danh trong một phản hồi, không phải tên hoặc danh tính đã xác minh để ghép giữa các yêu cầu. Nếu bản chép lời không có dấu người nói, hướng dẫn coi đó là kết quả một người nói. Giữ mọi văn bản trước dấu đầu tiên cùng lượt đầu thay vì bỏ đi.</p><p>Mốc thời gian cấp từ là tùy chọn. Trong yêu cầu gửi nhà sản xuất, ignore_timestamps mặc định true; đặt false yêu cầu segments có text, start và end tính bằng giây. Segments thường là một từ, hoặc một hay vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản segments bỏ dấu câu, dấu người nói và dấu hiệu sự kiện, đồng thời có thể chuẩn hóa một giá trị được nói khác với toàn văn. Segment của từ có thể có cùng thời điểm bắt đầu và kết thúc. Mảng segments rỗng có thể nghĩa là không yêu cầu thời gian, không tìm thấy lời nói hoặc thời gian tạm thời chưa có. Dùng toàn văn cho cách diễn đạt dễ đọc và segments để căn chỉnh thay vì giả định hai chuỗi khớp từng ký tự.</p><p>Thiết lập diarize mặc định auto. Khi yêu cầu thời gian và diarize không phải false, Pro còn trả về speaker_turns. Mỗi lượt chứa nhãn người nói, văn bản và thời điểm bắt đầu/kết thúc, giữ dấu câu và các dấu hiệu được giữ lại nhưng không có dấu người nói nội tuyến. Nếu thời gian từ chưa có, thời gian lượt có thể gần đúng và bao trùm toàn bản ghi; các lượt liền kề không nhất thiết liên tục hoặc không chồng lấn. Tắt diarize bỏ danh sách lượt có cấu trúc nhưng vẫn giữ dấu người nói trong toàn văn. Số người nói đã biết, hoặc số tối thiểu và tối đa, có thể hướng dẫn phân lượt người nói cho bản ghi dài theo mức cố gắng tốt nhất. Không thể kết hợp số chính xác với các cận số lượng, và không thể dùng gợi ý số lượng khi tắt diarize.</p><p>Dấu hiệu cảm xúc và sự kiện giọng nói xuất hiện dưới dạng văn bản trong ngoặc vuông, ví dụ [laughter], cùng lời nói được nhận dạng. Đây là suy luận từ âm thanh, không phải từ người dùng cần thêm trước khi chép lời. Thiết lập tag_audio_events của Pro mặc định true; tắt sẽ bỏ những dấu hiệu đó khỏi bản chép lời và văn bản lượt mà không đổi thời gian. Không có trường cảm xúc riêng hoặc tập giá trị cảm xúc cố định. Giữ bản chép lời có chú thích khi cách một câu nói phát ra quan trọng, dùng bản không có dấu hiệu khi sản phẩm phía sau chỉ cần các từ được nói.</p><p>Ngôn ngữ được phát hiện tự động. Gợi ý ISO 639-1 viết thường tùy chọn không ép dịch hoặc thay đổi bản chép lời Pro. Nếu không xác định được ngôn ngữ, mã trả về có thể phản ánh gợi ý mà không xác minh với âm thanh. Nhà sản xuất báo cáo một ngôn ngữ, không phải danh sách mọi ngôn ngữ trong bản ghi trộn tiếng. Giữ cách diễn đạt gốc và siêu dữ liệu ngôn ngữ cùng nhau khi chuẩn bị kho lưu trữ có thể tìm kiếm, nhất là khi các phần hội thoại đổi ngôn ngữ.</p><p>Với phụ đề, nhóm các từ liên tiếp có thời gian thành cue SRT hoặc WebVTT dễ đọc thay vì một phụ đề cho mỗi từ. Tách cue quanh khoảng dừng, chọn độ dài và thời gian hiển thị phù hợp trình phát cùng đối tượng xem. Ranh giới lượt nói có thể giữ người nói khác nhau trong cue riêng. Kiểm tra kết quả thời gian rỗng và các cue mà thời điểm kết thúc phải sau thời điểm bắt đầu. Định dạng phụ đề, tên cho nhãn người nói vô danh và mọi tóm tắt sau là sản phẩm ứng dụng xây từ kết quả chép lời.</p><p>Với quy trình bản ghi thực tế, quyết định trước khi chép lời cần bản chép dễ đọc đơn thuần, lượt hội thoại có chú thích hay phụ đề có thời gian. Giữ định danh âm thanh cùng kết quả, toàn văn được trả về khi dấu câu và dấu hiệu quan trọng, dùng các trường thời gian có cấu trúc để điều hướng. Khả năng bản ghi dài và nhiều người nói của Pro khác với mô hình Transcribe 1 chung cho bản ghi ngắn; không nên coi giới hạn và điều khiển của chúng thay thế cho nhau.</p>",
  "aboutText": "Transcribe 1 Pro là mô hình chuyển giọng nói thành văn bản của Fish Audio cho đoạn ngắn, hội thoại nhiều người và bản ghi dài. Mô hình nhận âm thanh đã ghi và trả về bản chép lời, với thời gian tùy chọn và lượt nói có cấu trúc. Đặc điểm phân biệt là đánh dấu đổi người nói trong văn bản cùng dấu hiệu cảm xúc hoặc sự kiện giọng nói, giữ nhiều cấu trúc hội thoại của bản ghi hơn một chuỗi từ đơn thuần.\n\nVới phỏng vấn, họp hoặc podcast, giữ toàn bộ hội thoại trong một tệp để người nói xuất hiện lại có thể giữ nhãn nhất quán trong phản hồi. Sản phẩm xem xét hữu ích là bản chép lời liên kết với bản ghi gốc, các lượt hiển thị riêng và mốc thời gian để kiểm tra trích dẫn. Tóm tắt hoặc danh sách việc cần làm là bước ứng dụng sau: giữ tách khỏi bản chép lời để nguồn lời nói vẫn có cho đối chiếu.\n\nNhà sản xuất nhận bản ghi đến 60 phút và mô tả xử lý tệp dài bằng âm thanh nén như MP3, Opus hoặc AAC. Định dạng hỗ trợ gồm WAV, MP3, AAC trong M4A hoặc MP4, FLAC, Ogg với Opus hoặc Vorbis, WebM/Matroska và MOV. Với tệp video, mô hình dùng đường âm thanh đầu tiên. AIFF, CAF, WMA, AMR, AC-3 và PCM thô không có header không được hỗ trợ. Mỗi yêu cầu cung cấp một tệp âm thanh; kết quả về sau khi toàn bộ bản ghi được chép lời, và bản ghi dài có thể mất vài phút. Đoạn ngắn hơn khoảng 0,08 giây bị từ chối.\n\nPhản hồi của nhà sản xuất chứa toàn văn, thời lượng bản ghi tính bằng giây và mảng segments. Pro đánh dấu đổi người nói trực tiếp trong văn bản bằng nhãn như <|speaker:0|> và <|speaker:1|>; nhãn áp dụng cho văn bản tiếp theo đến dấu kế tiếp. Đây là định danh trong một phản hồi, không phải tên hoặc danh tính đã xác minh để ghép giữa các yêu cầu. Nếu bản chép lời không có dấu người nói, hướng dẫn coi đó là kết quả một người nói. Giữ mọi văn bản trước dấu đầu tiên cùng lượt đầu thay vì bỏ đi.\n\nMốc thời gian cấp từ là tùy chọn. Trong yêu cầu gửi nhà sản xuất, ignore_timestamps mặc định true; đặt false yêu cầu segments có text, start và end tính bằng giây. Segments thường là một từ, hoặc một hay vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản segments bỏ dấu câu, dấu người nói và dấu hiệu sự kiện, đồng thời có thể chuẩn hóa một giá trị được nói khác với toàn văn. Segment của từ có thể có cùng thời điểm bắt đầu và kết thúc. Mảng segments rỗng có thể nghĩa là không yêu cầu thời gian, không tìm thấy lời nói hoặc thời gian tạm thời chưa có. Dùng toàn văn cho cách diễn đạt dễ đọc và segments để căn chỉnh thay vì giả định hai chuỗi khớp từng ký tự.\n\nThiết lập diarize mặc định auto. Khi yêu cầu thời gian và diarize không phải false, Pro còn trả về speaker_turns. Mỗi lượt chứa nhãn người nói, văn bản và thời điểm bắt đầu/kết thúc, giữ dấu câu và các dấu hiệu được giữ lại nhưng không có dấu người nói nội tuyến. Nếu thời gian từ chưa có, thời gian lượt có thể gần đúng và bao trùm toàn bản ghi; các lượt liền kề không nhất thiết liên tục hoặc không chồng lấn. Tắt diarize bỏ danh sách lượt có cấu trúc nhưng vẫn giữ dấu người nói trong toàn văn. Số người nói đã biết, hoặc số tối thiểu và tối đa, có thể hướng dẫn phân lượt người nói cho bản ghi dài theo mức cố gắng tốt nhất. Không thể kết hợp số chính xác với các cận số lượng, và không thể dùng gợi ý số lượng khi tắt diarize.\n\nDấu hiệu cảm xúc và sự kiện giọng nói xuất hiện dưới dạng văn bản trong ngoặc vuông, ví dụ [laughter], cùng lời nói được nhận dạng. Đây là suy luận từ âm thanh, không phải từ người dùng cần thêm trước khi chép lời. Thiết lập tag_audio_events của Pro mặc định true; tắt sẽ bỏ những dấu hiệu đó khỏi bản chép lời và văn bản lượt mà không đổi thời gian. Không có trường cảm xúc riêng hoặc tập giá trị cảm xúc cố định. Giữ bản chép lời có chú thích khi cách một câu nói phát ra quan trọng, dùng bản không có dấu hiệu khi sản phẩm phía sau chỉ cần các từ được nói.\n\nNgôn ngữ được phát hiện tự động. Gợi ý ISO 639-1 viết thường tùy chọn không ép dịch hoặc thay đổi bản chép lời Pro. Nếu không xác định được ngôn ngữ, mã trả về có thể phản ánh gợi ý mà không xác minh với âm thanh. Nhà sản xuất báo cáo một ngôn ngữ, không phải danh sách mọi ngôn ngữ trong bản ghi trộn tiếng. Giữ cách diễn đạt gốc và siêu dữ liệu ngôn ngữ cùng nhau khi chuẩn bị kho lưu trữ có thể tìm kiếm, nhất là khi các phần hội thoại đổi ngôn ngữ.\n\nVới phụ đề, nhóm các từ liên tiếp có thời gian thành cue SRT hoặc WebVTT dễ đọc thay vì một phụ đề cho mỗi từ. Tách cue quanh khoảng dừng, chọn độ dài và thời gian hiển thị phù hợp trình phát cùng đối tượng xem. Ranh giới lượt nói có thể giữ người nói khác nhau trong cue riêng. Kiểm tra kết quả thời gian rỗng và các cue mà thời điểm kết thúc phải sau thời điểm bắt đầu. Định dạng phụ đề, tên cho nhãn người nói vô danh và mọi tóm tắt sau là sản phẩm ứng dụng xây từ kết quả chép lời.\n\nVới quy trình bản ghi thực tế, quyết định trước khi chép lời cần bản chép dễ đọc đơn thuần, lượt hội thoại có chú thích hay phụ đề có thời gian. Giữ định danh âm thanh cùng kết quả, toàn văn được trả về khi dấu câu và dấu hiệu quan trọng, dùng các trường thời gian có cấu trúc để điều hướng. Khả năng bản ghi dài và nhiều người nói của Pro khác với mô hình Transcribe 1 chung cho bản ghi ngắn; không nên coi giới hạn và điều khiển của chúng thay thế cho nhau.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "3fd5f7e2c2d34b57f6f5afdaf9fd18b2c51685421759e43c4e262744c359e41a",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "vi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: Transcribe 1 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Đóng\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/transcribe-1-pro</code><button type=\"button\" id=\"copy-id\">Sao chép ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Các phần của thẻ mô hình\"><button type=\"button\" data-card-jump=\"overview\">Bắt đầu</button><button type=\"button\" data-card-jump=\"methods\">Đầu vào &amp; phương thức</button><button type=\"button\" data-card-jump=\"pricing\">Bảng giá</button><button type=\"button\" data-card-jump=\"examples\">Ví dụ</button><button type=\"button\" data-card-jump=\"results\">Kết quả</button><button type=\"button\" data-card-jump=\"aliases\">Bí danh</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Phương thức API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1-pro\">Nhận dạng</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\">Transcribe 1 Pro chuyển bản ghi dài đến 60 phút thành văn bản có dấu người nói và tùy chọn thời gian ở cấp từ. Mô hình giữ các dấu hiệu cảm xúc và sự kiện giọng nói được suy ra, giúp xem xét, tìm kiếm hoặc chuẩn bị phụ đề cho phỏng vấn, họp và podcast dễ hơn.</p><dl class=\"card-io\" data-card-io><div><dt>Đầu vào được chấp nhận</dt><dd>Âm thanh</dd></div><div><dt>Kết quả</dt><dd>Văn bản</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>Transcribe 1 Pro là mô hình chuyển giọng nói thành văn bản của Fish Audio cho đoạn ngắn, hội thoại nhiều người và bản ghi dài. Mô hình nhận âm thanh đã ghi và trả về bản chép lời, với thời gian tùy chọn và lượt nói có cấu trúc. Đặc điểm phân biệt là đánh dấu đổi người nói trong văn bản cùng dấu hiệu cảm xúc hoặc sự kiện giọng nói, giữ nhiều cấu trúc hội thoại của bản ghi hơn một chuỗi từ đơn thuần.</p><p>Với phỏng vấn, họp hoặc podcast, giữ toàn bộ hội thoại trong một tệp để người nói xuất hiện lại có thể giữ nhãn nhất quán trong phản hồi. Sản phẩm xem xét hữu ích là bản chép lời liên kết với bản ghi gốc, các lượt hiển thị riêng và mốc thời gian để kiểm tra trích dẫn. Tóm tắt hoặc danh sách việc cần làm là bước ứng dụng sau: giữ tách khỏi bản chép lời để nguồn lời nói vẫn có cho đối chiếu.</p><p>Nhà sản xuất nhận bản ghi đến 60 phút và mô tả xử lý tệp dài bằng âm thanh nén như MP3, Opus hoặc AAC. Định dạng hỗ trợ gồm WAV, MP3, AAC trong M4A hoặc MP4, FLAC, Ogg với Opus hoặc Vorbis, WebM/Matroska và MOV. Với tệp video, mô hình dùng đường âm thanh đầu tiên. AIFF, CAF, WMA, AMR, AC-3 và PCM thô không có header không được hỗ trợ. Mỗi yêu cầu cung cấp một tệp âm thanh; kết quả về sau khi toàn bộ bản ghi được chép lời, và bản ghi dài có thể mất vài phút. Đoạn ngắn hơn khoảng 0,08 giây bị từ chối.</p><p>Phản hồi của nhà sản xuất chứa toàn văn, thời lượng bản ghi tính bằng giây và mảng segments. Pro đánh dấu đổi người nói trực tiếp trong văn bản bằng nhãn như &lt;|speaker:0|&gt; và &lt;|speaker:1|&gt;; nhãn áp dụng cho văn bản tiếp theo đến dấu kế tiếp. Đây là định danh trong một phản hồi, không phải tên hoặc danh tính đã xác minh để ghép giữa các yêu cầu. Nếu bản chép lời không có dấu người nói, hướng dẫn coi đó là kết quả một người nói. Giữ mọi văn bản trước dấu đầu tiên cùng lượt đầu thay vì bỏ đi.</p><p>Mốc thời gian cấp từ là tùy chọn. Trong yêu cầu gửi nhà sản xuất, ignore_timestamps mặc định true; đặt false yêu cầu segments có text, start và end tính bằng giây. Segments thường là một từ, hoặc một hay vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản segments bỏ dấu câu, dấu người nói và dấu hiệu sự kiện, đồng thời có thể chuẩn hóa một giá trị được nói khác với toàn văn. Segment của từ có thể có cùng thời điểm bắt đầu và kết thúc. Mảng segments rỗng có thể nghĩa là không yêu cầu thời gian, không tìm thấy lời nói hoặc thời gian tạm thời chưa có. Dùng toàn văn cho cách diễn đạt dễ đọc và segments để căn chỉnh thay vì giả định hai chuỗi khớp từng ký tự.</p><p>Thiết lập diarize mặc định auto. Khi yêu cầu thời gian và diarize không phải false, Pro còn trả về speaker_turns. Mỗi lượt chứa nhãn người nói, văn bản và thời điểm bắt đầu/kết thúc, giữ dấu câu và các dấu hiệu được giữ lại nhưng không có dấu người nói nội tuyến. Nếu thời gian từ chưa có, thời gian lượt có thể gần đúng và bao trùm toàn bản ghi; các lượt liền kề không nhất thiết liên tục hoặc không chồng lấn. Tắt diarize bỏ danh sách lượt có cấu trúc nhưng vẫn giữ dấu người nói trong toàn văn. Số người nói đã biết, hoặc số tối thiểu và tối đa, có thể hướng dẫn phân lượt người nói cho bản ghi dài theo mức cố gắng tốt nhất. Không thể kết hợp số chính xác với các cận số lượng, và không thể dùng gợi ý số lượng khi tắt diarize.</p><p>Dấu hiệu cảm xúc và sự kiện giọng nói xuất hiện dưới dạng văn bản trong ngoặc vuông, ví dụ [laughter], cùng lời nói được nhận dạng. Đây là suy luận từ âm thanh, không phải từ người dùng cần thêm trước khi chép lời. Thiết lập tag_audio_events của Pro mặc định true; tắt sẽ bỏ những dấu hiệu đó khỏi bản chép lời và văn bản lượt mà không đổi thời gian. Không có trường cảm xúc riêng hoặc tập giá trị cảm xúc cố định. Giữ bản chép lời có chú thích khi cách một câu nói phát ra quan trọng, dùng bản không có dấu hiệu khi sản phẩm phía sau chỉ cần các từ được nói.</p><p>Ngôn ngữ được phát hiện tự động. Gợi ý ISO 639-1 viết thường tùy chọn không ép dịch hoặc thay đổi bản chép lời Pro. Nếu không xác định được ngôn ngữ, mã trả về có thể phản ánh gợi ý mà không xác minh với âm thanh. Nhà sản xuất báo cáo một ngôn ngữ, không phải danh sách mọi ngôn ngữ trong bản ghi trộn tiếng. Giữ cách diễn đạt gốc và siêu dữ liệu ngôn ngữ cùng nhau khi chuẩn bị kho lưu trữ có thể tìm kiếm, nhất là khi các phần hội thoại đổi ngôn ngữ.</p><p>Với phụ đề, nhóm các từ liên tiếp có thời gian thành cue SRT hoặc WebVTT dễ đọc thay vì một phụ đề cho mỗi từ. Tách cue quanh khoảng dừng, chọn độ dài và thời gian hiển thị phù hợp trình phát cùng đối tượng xem. Ranh giới lượt nói có thể giữ người nói khác nhau trong cue riêng. Kiểm tra kết quả thời gian rỗng và các cue mà thời điểm kết thúc phải sau thời điểm bắt đầu. Định dạng phụ đề, tên cho nhãn người nói vô danh và mọi tóm tắt sau là sản phẩm ứng dụng xây từ kết quả chép lời.</p><p>Với quy trình bản ghi thực tế, quyết định trước khi chép lời cần bản chép dễ đọc đơn thuần, lượt hội thoại có chú thích hay phụ đề có thời gian. Giữ định danh âm thanh cùng kết quả, toàn văn được trả về khi dấu câu và dấu hiệu quan trọng, dùng các trường thời gian có cấu trúc để điều hướng. Khả năng bản ghi dài và nhiều người nói của Pro khác với mô hình Transcribe 1 chung cho bản ghi ngắn; không nên coi giới hạn và điều khiển của chúng thay thế cho nhau.</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 · Nhận dạng giọng nói</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Đầu vào</dt><dd><code>audio</code></dd></div><div><dt>Đầu ra</dt><dd><code>text</code></dd></div><div><dt>Định dạng đầu ra</dt><dd>json</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>fish-audio/transcribe-1-pro</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr 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_audio</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>object</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>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>Khóa chính xác: data, format</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_audio.data</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>base64_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>Số byte tối đa sau giải mã: 26.214.400</div><div>Base64 nghiêm ngặt: Có</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_audio.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>Điều kiện: Phải bằng định dạng thực tế được xác định khi kiểm tra tệp</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>Không bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>json</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>speech_to_text</b> · Bắt buộc: input_audio.data, input_audio.format</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_audio</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>additional_properties</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>parameters</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>{&quot;name&quot;:&quot;model&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;enum&quot;:[&quot;fish-audio/transcribe-1-pro&quot;]}, {&quot;name&quot;:&quot;input_audio&quot;,&quot;type&quot;:&quot;object&quot;,&quot;required&quot;:true,&quot;exact_keys&quot;:[&quot;data&quot;,&quot;format&quot;],&quot;data&quot;:&quot;base64 nghiêm ngặt của các byte âm thanh thực tế được hỗ trợ&quot;,&quot;format&quot;:&quot;định dạng tệp chính xác được kiểm tra; phải khớp với byte thực tế&quot;}, {&quot;name&quot;:&quot;response_format&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:false,&quot;enum&quot;:[&quot;json&quot;]}</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>max_audio_bytes</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>26214400</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>multipart_for_this_profile</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>material_types</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>audio</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\">Giữ lại toàn bộ phản hồi và các ID gốc được trả về.</p><p class=\"note-s\">Tuyệt đối không gửi lại yêu cầu tạo chưa rõ kết quả.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí Ailoot</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Đơn vị tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Token đầu vào</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu ra · Token đầu ra</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Đọc bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm, 1 giờ</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giây âm thanh đầu vào</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>—</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>mỗi giây âm thanh đầu vào</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Giây âm thanh đầu vào</span> <b>$0.0002</b> <span class=\"price-unit\">mỗi giây âm thanh đầu vào</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. <a href=\"/docs/vi/billing/reserve/\">Cách hoạt động của cơ chế tạm giữ và quyết toán →</a></p><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>Fish Audio: Transcribe 1 Pro</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>Fish Audio: Transcribe 1 Pro · 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 · Giây âm thanh đầu vào</span> <b>0,0002 US$</b> <span class=\"price-unit\">mỗi giây âm thanh đầu vào</span></div></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Ví dụ yêu cầu</h3><h4>Ailoot Ultra · Nhận dạng 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-1362-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1362-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · byte âm thanh thực tế và định dạng đã xác định qua kiểm tra</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-1362-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1362-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_AUDIO_FILE:?Set your actual audio file}&quot;\n: &quot;${AILOOT_AUDIO_FORMAT:?Set its actual probed file format}&quot;\nexport AILOOT_AUDIO_FILE AILOOT_AUDIO_FORMAT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;fish-audio/transcribe-1-pro&quot;, &quot;response_format&quot;: &quot;json&quot;}&#39;)\nimport base64\nf=Path(os.environ[&#39;AILOOT_AUDIO_FILE&#39;])\nraw=f.read_bytes()\nif not raw or len(raw)&gt;26214400:raise SystemExit(&#39;Use actual audio bytes within 25 MiB&#39;)\nfmt=os.environ[&#39;AILOOT_AUDIO_FORMAT&#39;].strip()\nif not fmt:raise SystemExit(&#39;Use the actual probed format; the server checks it against the bytes&#39;)\np[&#39;input_audio&#39;]={&#39;data&#39;:base64.b64encode(raw).decode(),&#39;format&#39;:fmt}\nPath(&#39;request.json&#39;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\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 result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\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 · Nhận dạng giọng nói</h4><p class=\"note-s\">json</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><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ộ JSON, tiêu đề phản hồi, văn bản và mọi trường mức sử dụng thực tế được trả về. Dùng mã định danh tác vụ/tài sản thực tế từ phản hồi hoặc thư viện thuộc quyền sở hữu; operation_id khác task_id.</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><th>Ý nghĩa</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\">text</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>string</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Văn bản đã phiên âm.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>object</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Mức sử dụng âm thanh.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">usage.seconds</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>number</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Thời lượng âm thanh tính bằng giây.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>number</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>Thời lượng âm thanh tính bằng giây.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>string</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>ID tác vụ bản phiên âm; được trả về cùng asset_url khi bản phiên âm không rỗng được lưu, công bố và gán URL nội dung đã ký.</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">asset_url</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span>string</td><td data-cell-label=\"Ý nghĩa\"><span class=\"card-cell-label\">Ý nghĩa</span>URL nội dung bản phiên âm đã ký; được trả về cùng task_id khi bản phiên âm không rỗng được lưu, công bố và gán URL nội dung đã ký.</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=fish-audio%2Ftranscribe-1-pro&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1-pro&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1-pro</code></a></span></p><h4>Bí danh đường dẫn phương thức</h4><p class=\"note-s\">Dùng các đường dẫn phương thức hiển thị ở trên.</p><h4>ID gọi liên quan</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Ftranscribe-1-pro&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1-pro&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/transcribe-1-pro",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "fish-audio/transcribe-1-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1-pro",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete JSON, response headers, text and every actual returned usage field. Use actual task/asset identities from the response or owned library; operation_id is not task_id.",
            "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."
            },
            "limits": {
              "decoded_audio_max_bytes": 26214400
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "speech_to_text",
                "required": [
                  "input_audio.data",
                  "input_audio.format"
                ]
              }
            ],
            "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": [
              "speech_to_text"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ JSON, tiêu đề phản hồi, văn bản và mọi trường mức sử dụng thực tế được trả về. Dùng mã định danh tác vụ/tài sản thực tế từ phản hồi hoặc thư viện thuộc quyền sở hữu; operation_id khác task_id.",
              "family": "transcription",
              "fields": [
                {
                  "description": "Văn bản đã phiên âm.",
                  "name": "text",
                  "required": true,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "Mức sử dụng âm thanh.",
                  "name": "usage",
                  "required": true,
                  "required_known": true,
                  "type": "object"
                },
                {
                  "description": "Thời lượng âm thanh tính bằng giây.",
                  "name": "usage.seconds",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "Thời lượng âm thanh tính bằng giây.",
                  "name": "duration",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "ID tác vụ bản phiên âm; được trả về cùng asset_url khi bản phiên âm không rỗng được lưu, công bố và gán URL nội dung đã ký.",
                  "name": "task_id",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "URL nội dung bản phiên âm đã ký; được trả về cùng task_id khi bản phiên âm không rỗng được lưu, công bố và gán URL nội dung đã ký.",
                  "name": "asset_url",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "data",
                  "format"
                ],
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "decoded_maximum_bytes": 26214400,
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.data",
                "required": true,
                "strict_base64": true,
                "type": "base64_string"
              },
              {
                "availability": "source_interface",
                "conditions": "Phải bằng định dạng thực tế được xác định khi kiểm tra tệp",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.format",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "json"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "multipart input on this exact profile",
              "fields outside model/input_audio/response_format",
              "non-json response format"
            ]
          },
          "hints": [
            "Giữ lại toàn bộ phản hồi và các ID gốc được trả về.",
            "Tuyệt đối không gửi lại yêu cầu tạo chưa rõ kết quả."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "audio"
            ],
            "max_audio_bytes": 26214400,
            "multipart_for_this_profile": false,
            "parameters": [
              {
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "data": "base64 nghiêm ngặt của các byte âm thanh thực tế được hỗ trợ",
                "exact_keys": [
                  "data",
                  "format"
                ],
                "format": "định dạng tệp chính xác được kiểm tra; phải khớp với byte thực tế",
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "enum": [
                  "json"
                ],
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "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": "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."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "method_aliases": [],
          "operation_modes": [
            "speech_to_text"
          ],
          "output": {
            "family": "text",
            "type": "JSON transcript with text and usage; actual owned transcript flow"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set your actual audio file}\"\n: \"${AILOOT_AUDIO_FORMAT:?Set its actual probed file format}\"\nexport AILOOT_AUDIO_FILE AILOOT_AUDIO_FORMAT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"fish-audio/transcribe-1-pro\", \"response_format\": \"json\"}')\nimport base64\nf=Path(os.environ['AILOOT_AUDIO_FILE'])\nraw=f.read_bytes()\nif not raw or len(raw)>26214400:raise SystemExit('Use actual audio bytes within 25 MiB')\nfmt=os.environ['AILOOT_AUDIO_FORMAT'].strip()\nif not fmt:raise SystemExit('Use the actual probed format; the server checks it against the bytes')\np['input_audio']={'data':base64.b64encode(raw).decode(),'format':fmt}\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/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · actual audio bytes and probed format",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "Keep the complete response and the original returned IDs.",
          "Never resubmit an unknown creation."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Распознавание речи",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "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_second": 0.0002
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1-pro",
        "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.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/transcribe-1-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "9dd3a396bba6d64b70c7e6837e5777f40761ea594ec92462f4763e80c4f345d5",
    "input_html_sha256": "30eaa4391e3f1bc91d2d3ade9638f6e01be4e05ed1a27e141963f380deab4c9c",
    "private_audit_sha256": "ef5f90748634dab10f20d7b243971029df99f35577e3d7406ad8b3c66133dc36",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/fish-audio-transcribe-1-pro/",
    "description": "Transcribe 1 Pro chuyển bản ghi dài đến 60 phút thành văn bản có dấu người nói và tùy chọn thời gian ở cấp từ. Mô hình giữ các dấu hiệu cảm xúc và sự kiện giọng nói được suy ra, giúp xem xét, tìm kiếm hoặc chuẩn bị phụ đề cho phỏng vấn, họp và podcast dễ hơn.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/fish-audio-transcribe-1-pro/index.md",
    "title": "Fish Audio: Transcribe 1 Pro — Ailoot",
    "url": "https://ailoot.ai/models/vi/fish-audio-transcribe-1-pro/"
  },
  "rawModel": {
    "about": "Transcribe 1 Pro là mô hình chuyển giọng nói thành văn bản của Fish Audio cho đoạn ngắn, hội thoại nhiều người và bản ghi dài. Mô hình nhận âm thanh đã ghi và trả về bản chép lời, với thời gian tùy chọn và lượt nói có cấu trúc. Đặc điểm phân biệt là đánh dấu đổi người nói trong văn bản cùng dấu hiệu cảm xúc hoặc sự kiện giọng nói, giữ nhiều cấu trúc hội thoại của bản ghi hơn một chuỗi từ đơn thuần.\n\nVới phỏng vấn, họp hoặc podcast, giữ toàn bộ hội thoại trong một tệp để người nói xuất hiện lại có thể giữ nhãn nhất quán trong phản hồi. Sản phẩm xem xét hữu ích là bản chép lời liên kết với bản ghi gốc, các lượt hiển thị riêng và mốc thời gian để kiểm tra trích dẫn. Tóm tắt hoặc danh sách việc cần làm là bước ứng dụng sau: giữ tách khỏi bản chép lời để nguồn lời nói vẫn có cho đối chiếu.\n\nNhà sản xuất nhận bản ghi đến 60 phút và mô tả xử lý tệp dài bằng âm thanh nén như MP3, Opus hoặc AAC. Định dạng hỗ trợ gồm WAV, MP3, AAC trong M4A hoặc MP4, FLAC, Ogg với Opus hoặc Vorbis, WebM/Matroska và MOV. Với tệp video, mô hình dùng đường âm thanh đầu tiên. AIFF, CAF, WMA, AMR, AC-3 và PCM thô không có header không được hỗ trợ. Mỗi yêu cầu cung cấp một tệp âm thanh; kết quả về sau khi toàn bộ bản ghi được chép lời, và bản ghi dài có thể mất vài phút. Đoạn ngắn hơn khoảng 0,08 giây bị từ chối.\n\nPhản hồi của nhà sản xuất chứa toàn văn, thời lượng bản ghi tính bằng giây và mảng segments. Pro đánh dấu đổi người nói trực tiếp trong văn bản bằng nhãn như <|speaker:0|> và <|speaker:1|>; nhãn áp dụng cho văn bản tiếp theo đến dấu kế tiếp. Đây là định danh trong một phản hồi, không phải tên hoặc danh tính đã xác minh để ghép giữa các yêu cầu. Nếu bản chép lời không có dấu người nói, hướng dẫn coi đó là kết quả một người nói. Giữ mọi văn bản trước dấu đầu tiên cùng lượt đầu thay vì bỏ đi.\n\nMốc thời gian cấp từ là tùy chọn. Trong yêu cầu gửi nhà sản xuất, ignore_timestamps mặc định true; đặt false yêu cầu segments có text, start và end tính bằng giây. Segments thường là một từ, hoặc một hay vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản segments bỏ dấu câu, dấu người nói và dấu hiệu sự kiện, đồng thời có thể chuẩn hóa một giá trị được nói khác với toàn văn. Segment của từ có thể có cùng thời điểm bắt đầu và kết thúc. Mảng segments rỗng có thể nghĩa là không yêu cầu thời gian, không tìm thấy lời nói hoặc thời gian tạm thời chưa có. Dùng toàn văn cho cách diễn đạt dễ đọc và segments để căn chỉnh thay vì giả định hai chuỗi khớp từng ký tự.\n\nThiết lập diarize mặc định auto. Khi yêu cầu thời gian và diarize không phải false, Pro còn trả về speaker_turns. Mỗi lượt chứa nhãn người nói, văn bản và thời điểm bắt đầu/kết thúc, giữ dấu câu và các dấu hiệu được giữ lại nhưng không có dấu người nói nội tuyến. Nếu thời gian từ chưa có, thời gian lượt có thể gần đúng và bao trùm toàn bản ghi; các lượt liền kề không nhất thiết liên tục hoặc không chồng lấn. Tắt diarize bỏ danh sách lượt có cấu trúc nhưng vẫn giữ dấu người nói trong toàn văn. Số người nói đã biết, hoặc số tối thiểu và tối đa, có thể hướng dẫn phân lượt người nói cho bản ghi dài theo mức cố gắng tốt nhất. Không thể kết hợp số chính xác với các cận số lượng, và không thể dùng gợi ý số lượng khi tắt diarize.\n\nDấu hiệu cảm xúc và sự kiện giọng nói xuất hiện dưới dạng văn bản trong ngoặc vuông, ví dụ [laughter], cùng lời nói được nhận dạng. Đây là suy luận từ âm thanh, không phải từ người dùng cần thêm trước khi chép lời. Thiết lập tag_audio_events của Pro mặc định true; tắt sẽ bỏ những dấu hiệu đó khỏi bản chép lời và văn bản lượt mà không đổi thời gian. Không có trường cảm xúc riêng hoặc tập giá trị cảm xúc cố định. Giữ bản chép lời có chú thích khi cách một câu nói phát ra quan trọng, dùng bản không có dấu hiệu khi sản phẩm phía sau chỉ cần các từ được nói.\n\nNgôn ngữ được phát hiện tự động. Gợi ý ISO 639-1 viết thường tùy chọn không ép dịch hoặc thay đổi bản chép lời Pro. Nếu không xác định được ngôn ngữ, mã trả về có thể phản ánh gợi ý mà không xác minh với âm thanh. Nhà sản xuất báo cáo một ngôn ngữ, không phải danh sách mọi ngôn ngữ trong bản ghi trộn tiếng. Giữ cách diễn đạt gốc và siêu dữ liệu ngôn ngữ cùng nhau khi chuẩn bị kho lưu trữ có thể tìm kiếm, nhất là khi các phần hội thoại đổi ngôn ngữ.\n\nVới phụ đề, nhóm các từ liên tiếp có thời gian thành cue SRT hoặc WebVTT dễ đọc thay vì một phụ đề cho mỗi từ. Tách cue quanh khoảng dừng, chọn độ dài và thời gian hiển thị phù hợp trình phát cùng đối tượng xem. Ranh giới lượt nói có thể giữ người nói khác nhau trong cue riêng. Kiểm tra kết quả thời gian rỗng và các cue mà thời điểm kết thúc phải sau thời điểm bắt đầu. Định dạng phụ đề, tên cho nhãn người nói vô danh và mọi tóm tắt sau là sản phẩm ứng dụng xây từ kết quả chép lời.\n\nVới quy trình bản ghi thực tế, quyết định trước khi chép lời cần bản chép dễ đọc đơn thuần, lượt hội thoại có chú thích hay phụ đề có thời gian. Giữ định danh âm thanh cùng kết quả, toàn văn được trả về khi dấu câu và dấu hiệu quan trọng, dùng các trường thời gian có cấu trúc để điều hướng. Khả năng bản ghi dài và nhiều người nói của Pro khác với mô hình Transcribe 1 chung cho bản ghi ngắn; không nên coi giới hạn và điều khiển của chúng thay thế cho nhau.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "available": null,
    "canonical_model": "fish-audio/transcribe-1-pro",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "audio"
      ],
      "manufacturer_output": [
        "transcription"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ],
        "summary": "Giá theo cấu hình được trình bày đầy đủ trong phần chi tiết."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "aeebfac63d7ddd8619fb",
        "label": "Fish Audio: Transcribe 1 Pro",
        "profiles": [
          {
            "basis": "",
            "dimensions": {
              "conditions": "Cấu hình mặc định"
            },
            "label": "Fish Audio: Transcribe 1 Pro · Cấu hình mặc định",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "key": "0949942d98ce2e4c35b418d6",
                "label": "Input audio seconds",
                "public_unit_label": "per input audio second",
                "quantity": "1",
                "rate_role": "declared_tariff_rate",
                "side": "in",
                "unit": "input_audio_second"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "transcriptions"
    ],
    "id": "fish-audio/transcribe-1-pro",
    "input": [
      "audio"
    ],
    "kind": "transcription",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete JSON, response headers, text and every actual returned usage field. Use actual task/asset identities from the response or owned library; operation_id is not task_id.",
            "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."
            },
            "limits": {
              "decoded_audio_max_bytes": 26214400
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "speech_to_text",
                "required": [
                  "input_audio.data",
                  "input_audio.format"
                ]
              }
            ],
            "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": [
              "speech_to_text"
            ],
            "outputs": {
              "all_results": "Giữ lại toàn bộ JSON, tiêu đề phản hồi, văn bản và mọi trường mức sử dụng thực tế được trả về. Dùng mã định danh tác vụ/tài sản thực tế từ phản hồi hoặc thư viện thuộc quyền sở hữu; operation_id khác task_id.",
              "family": "transcription",
              "fields": [
                {
                  "description": "Văn bản đã phiên âm.",
                  "name": "text",
                  "required": true,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "Mức sử dụng âm thanh.",
                  "name": "usage",
                  "required": true,
                  "required_known": true,
                  "type": "object"
                },
                {
                  "description": "Thời lượng âm thanh tính bằng giây.",
                  "name": "usage.seconds",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "Thời lượng âm thanh tính bằng giây.",
                  "name": "duration",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "ID tác vụ bản phiên âm; được trả về cùng asset_url khi bản phiên âm không rỗng được lưu, công bố và gán URL nội dung đã ký.",
                  "name": "task_id",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "URL nội dung bản phiên âm đã ký; được trả về cùng task_id khi bản phiên âm không rỗng được lưu, công bố và gán URL nội dung đã ký.",
                  "name": "asset_url",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "data",
                  "format"
                ],
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "decoded_maximum_bytes": 26214400,
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.data",
                "required": true,
                "strict_base64": true,
                "type": "base64_string"
              },
              {
                "availability": "source_interface",
                "conditions": "Phải bằng định dạng thực tế được xác định khi kiểm tra tệp",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.format",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "json"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "multipart input on this exact profile",
              "fields outside model/input_audio/response_format",
              "non-json response format"
            ]
          },
          "hints": [
            "Giữ lại toàn bộ phản hồi và các ID gốc được trả về.",
            "Tuyệt đối không gửi lại yêu cầu tạo chưa rõ kết quả."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "audio"
            ],
            "max_audio_bytes": 26214400,
            "multipart_for_this_profile": false,
            "parameters": [
              {
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "data": "base64 nghiêm ngặt của các byte âm thanh thực tế được hỗ trợ",
                "exact_keys": [
                  "data",
                  "format"
                ],
                "format": "định dạng tệp chính xác được kiểm tra; phải khớp với byte thực tế",
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "enum": [
                  "json"
                ],
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "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": "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."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "method_aliases": [],
          "operation_modes": [
            "speech_to_text"
          ],
          "output": {
            "family": "text",
            "type": "JSON transcript with text and usage; actual owned transcript flow"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set your actual audio file}\"\n: \"${AILOOT_AUDIO_FORMAT:?Set its actual probed file format}\"\nexport AILOOT_AUDIO_FILE AILOOT_AUDIO_FORMAT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"fish-audio/transcribe-1-pro\", \"response_format\": \"json\"}')\nimport base64\nf=Path(os.environ['AILOOT_AUDIO_FILE'])\nraw=f.read_bytes()\nif not raw or len(raw)>26214400:raise SystemExit('Use actual audio bytes within 25 MiB')\nfmt=os.environ['AILOOT_AUDIO_FORMAT'].strip()\nif not fmt:raise SystemExit('Use the actual probed format; the server checks it against the bytes')\np['input_audio']={'data':base64.b64encode(raw).decode(),'format':fmt}\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/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · actual audio bytes and probed format",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "Keep the complete response and the original returned IDs.",
          "Never resubmit an unknown creation."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Распознавание речи",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "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_second": 0.0002
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1-pro",
        "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.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/transcribe-1-pro",
        "request_model_id": "fish-audio/transcribe-1-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: Transcribe 1 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "dimensions": {
          "regime": "base"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_declared_unit",
            "conditions": {},
            "key": "prompt",
            "label": "prompt",
            "quantity": "1",
            "rate_role": "typed_active_maker_rate",
            "side": "in",
            "unit": "input_audio_second"
          }
        ]
      }
    ],
    "public_id": "fish-audio/transcribe-1-pro",
    "short": "Transcribe 1 Pro chuyển bản ghi dài đến 60 phút thành văn bản có dấu người nói và tùy chọn thời gian ở cấp từ. Mô hình giữ các dấu hiệu cảm xúc và sự kiện giọng nói được suy ra, giúp xem xét, tìm kiếm hoặc chuẩn bị phụ đề cho phỏng vấn, họp và podcast dễ hơn."
  },
  "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": "Transcribe 1 Pro chuyển bản ghi dài đến 60 phút thành văn bản có dấu người nói và tùy chọn thời gian ở cấp từ. Mô hình giữ các dấu hiệu cảm xúc và sự kiện giọng nói được suy ra, giúp xem xét, tìm kiếm hoặc chuẩn bị phụ đề cho phỏng vấn, họp và podcast dễ hơn.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "eb592ec1ca8e2c335601d39f6bbdd2809a4bcc29dd0029c759136f0d3c7c9644",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "fac5bd5f2507de8d0f61d9ed1626d288a779ea4448cac41b585bc578a92502ab"
}
