{
  "aboutHtml": "<p>Transcribe 1 là mô hình chuyển giọng nói thành văn bản thông dụng của Fish Audio dành cho bản ghi ngắn. Mô hình nhận tệp âm thanh và trả các từ nhận diện được dưới dạng văn bản, cùng thời lượng bản ghi, các đoạn có thời gian tùy chọn và thông tin ngôn ngữ khi xác định được. Mô hình hữu ích cho ghi chú giọng nói ngắn, chỉ dẫn bằng lời, trích đoạn bản ghi hoặc clip âm thanh cần được biểu diễn thành văn bản dễ đọc.</p><p>Một quy trình ghi chú giọng nói minh họa giữ bản ghi cùng toàn bộ bản chép lời và mã định danh clip gốc. Bước ứng dụng sau có thể tìm kiếm văn bản, sắp xếp ghi chú hoặc tạo bản tóm tắt trong khi giữ nguồn lời nói. Với lệnh, bản chép cung cấp các từ nhận diện cho ứng dụng; mọi hành động là bước diễn giải và thực hiện riêng. Với trích đoạn phỏng vấn, ghi vị trí clip trong toàn bộ âm thanh để có thể kiểm tra trích dẫn đúng chỗ.</p><p>Nhà sản xuất chấp nhận WAV, MP3, AAC gồm M4A/MP4, FLAC và Ogg chứa Opus hoặc Vorbis. Với mô hình này, bản ghi WebM từ trình duyệt cần chuyển sang Ogg/Opus, MP3 hoặc WAV; tài liệu Pro mô tả hỗ trợ trực tiếp thêm các định dạng chứa khác. Gửi một tệp âm thanh mỗi yêu cầu. Ngân sách yêu cầu được ghi cho mô hình cơ sở tối đa 50 MiB, còn tệp MP3 và Opus phải nhỏ hơn 25 MiB. Kích thước tệp và độ dài bản ghi là hai yếu tố khác nhau: tệp nén có thể nằm trong giới hạn tải lên nhưng vẫn mất quá nhiều thời gian xử lý.</p><p>Transcribe 1 được thiết kế cho bản ghi ngắn. Nhà sản xuất khuyến nghị Pro cho âm thanh dài hơn vài phút; yêu cầu dài trên mô hình cơ sở có thể thất bại nếu vượt giới hạn thời gian xử lý. Khi chia nguồn dài thành clip ngắn để chép lời, giữ độ lệch thời điểm bắt đầu của từng clip và xác nhận bản chép trả về bao phủ toàn bộ clip trước khi ghép kết quả. Cộng độ lệch gốc vào thời gian cục bộ của đoạn để điều hướng vẫn gắn với toàn bộ bản ghi. Không nên hiểu hướng dẫn mô hình cơ sở thành ngân sách 60 phút riêng của Pro.</p><p>Phản hồi của nhà sản xuất gồm text, duration và segments. Thời lượng tính bằng giây, và toàn bộ bản chép dễ đọc nên được giữ làm lời văn chính của clip. Dấu thời gian là tùy chọn: ignore_timestamps mặc định là true trong API của nhà sản xuất, còn false yêu cầu các đoạn theo từ với văn bản, thời điểm bắt đầu và kết thúc tính bằng giây. Yêu cầu căn chỉnh làm tăng thời gian xử lý. Mảng segments rỗng có thể do bỏ qua thời gian, không có lời nói hoặc căn chỉnh tạm thời không khả dụng; vì vậy không nên tự động hiểu là toàn bộ bản chép rỗng.</p><p>Các đoạn thường là từ, hoặc một đến vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản của chúng không có dấu câu và có thể chuẩn hóa một giá trị khác với toàn bộ bản chép; đó không phải bản sao từng ký tự của phản hồi dễ đọc. Một đoạn có thể có cùng thời điểm bắt đầu và kết thúc. Dùng các đoạn để tìm vị trí trong bản ghi hoặc chuẩn bị hiển thị theo thời gian; dùng toàn văn khi lời văn và dấu câu quan trọng. Giữ hai cách biểu diễn này riêng trong sản phẩm đầu ra.</p><p>Ngôn ngữ được nhận diện tự động, dù có cung cấp gợi ý ngôn ngữ tùy chọn hay không. Nhà sản xuất quy định mã ISO 639-1 viết thường cho gợi ý và trả mã ngôn ngữ phục vụ logic ứng dụng cùng tên ngôn ngữ để hiển thị khi biết. Phản hồi báo một ngôn ngữ thay vì tất cả ngôn ngữ trong bản ghi có sự chuyển đổi giữa các ngôn ngữ. Giữ lời văn nguồn và siêu dữ liệu ngôn ngữ có sẵn cùng kết quả, thay vì coi yêu cầu chép lời là thao tác dịch.</p><p>Trong quy trình phụ đề, nhóm các đoạn có thời gian liên tiếp thành dòng phụ đề dễ đọc thay vì hiện từng từ. Đầu ra hữu ích là tệp SRT hoặc WebVTT liên kết với clip gốc, có ranh giới phù hợp khoảng nghỉ và lượng chữ vừa phải trên màn hình. Kiểm tra thời gian bị thiếu và bảo đảm thời điểm kết thúc mỗi dòng sau thời điểm bắt đầu. Nhóm phụ đề và định dạng tệp là các bước ứng dụng xây dựng từ dữ liệu căn chỉnh trả về; lựa chọn hiển thị cần phù hợp trình phát và khán giả.</p><p>Các điều khiển được mô tả cho Transcribe 1 là âm thanh, gợi ý ngôn ngữ và lựa chọn dấu thời gian. Dấu người nói, lượt nói có cấu trúc, điều khiển sự kiện cảm xúc và gợi ý số người nói của Pro là tính năng riêng; chúng không thuộc hợp đồng phản hồi được ghi cho mô hình cơ sở này. Chọn sản phẩm cần nhận trước khi xử lý: văn bản dễ đọc cho ghi chú, hoặc văn bản kèm căn chỉnh để điều hướng phát lại và phụ đề. Giữ mã clip, bản chép và thời gian có sẵn giúp kết quả hữu ích cho bước ứng dụng tiếp theo.</p>",
  "aboutText": "Transcribe 1 là mô hình chuyển giọng nói thành văn bản thông dụng của Fish Audio dành cho bản ghi ngắn. Mô hình nhận tệp âm thanh và trả các từ nhận diện được dưới dạng văn bản, cùng thời lượng bản ghi, các đoạn có thời gian tùy chọn và thông tin ngôn ngữ khi xác định được. Mô hình hữu ích cho ghi chú giọng nói ngắn, chỉ dẫn bằng lời, trích đoạn bản ghi hoặc clip âm thanh cần được biểu diễn thành văn bản dễ đọc.\n\nMột quy trình ghi chú giọng nói minh họa giữ bản ghi cùng toàn bộ bản chép lời và mã định danh clip gốc. Bước ứng dụng sau có thể tìm kiếm văn bản, sắp xếp ghi chú hoặc tạo bản tóm tắt trong khi giữ nguồn lời nói. Với lệnh, bản chép cung cấp các từ nhận diện cho ứng dụng; mọi hành động là bước diễn giải và thực hiện riêng. Với trích đoạn phỏng vấn, ghi vị trí clip trong toàn bộ âm thanh để có thể kiểm tra trích dẫn đúng chỗ.\n\nNhà sản xuất chấp nhận WAV, MP3, AAC gồm M4A/MP4, FLAC và Ogg chứa Opus hoặc Vorbis. Với mô hình này, bản ghi WebM từ trình duyệt cần chuyển sang Ogg/Opus, MP3 hoặc WAV; tài liệu Pro mô tả hỗ trợ trực tiếp thêm các định dạng chứa khác. Gửi một tệp âm thanh mỗi yêu cầu. Ngân sách yêu cầu được ghi cho mô hình cơ sở tối đa 50 MiB, còn tệp MP3 và Opus phải nhỏ hơn 25 MiB. Kích thước tệp và độ dài bản ghi là hai yếu tố khác nhau: tệp nén có thể nằm trong giới hạn tải lên nhưng vẫn mất quá nhiều thời gian xử lý.\n\nTranscribe 1 được thiết kế cho bản ghi ngắn. Nhà sản xuất khuyến nghị Pro cho âm thanh dài hơn vài phút; yêu cầu dài trên mô hình cơ sở có thể thất bại nếu vượt giới hạn thời gian xử lý. Khi chia nguồn dài thành clip ngắn để chép lời, giữ độ lệch thời điểm bắt đầu của từng clip và xác nhận bản chép trả về bao phủ toàn bộ clip trước khi ghép kết quả. Cộng độ lệch gốc vào thời gian cục bộ của đoạn để điều hướng vẫn gắn với toàn bộ bản ghi. Không nên hiểu hướng dẫn mô hình cơ sở thành ngân sách 60 phút riêng của Pro.\n\nPhản hồi của nhà sản xuất gồm text, duration và segments. Thời lượng tính bằng giây, và toàn bộ bản chép dễ đọc nên được giữ làm lời văn chính của clip. Dấu thời gian là tùy chọn: ignore_timestamps mặc định là true trong API của nhà sản xuất, còn false yêu cầu các đoạn theo từ với văn bản, thời điểm bắt đầu và kết thúc tính bằng giây. Yêu cầu căn chỉnh làm tăng thời gian xử lý. Mảng segments rỗng có thể do bỏ qua thời gian, không có lời nói hoặc căn chỉnh tạm thời không khả dụng; vì vậy không nên tự động hiểu là toàn bộ bản chép rỗng.\n\nCác đoạn thường là từ, hoặc một đến vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản của chúng không có dấu câu và có thể chuẩn hóa một giá trị khác với toàn bộ bản chép; đó không phải bản sao từng ký tự của phản hồi dễ đọc. Một đoạn có thể có cùng thời điểm bắt đầu và kết thúc. Dùng các đoạn để tìm vị trí trong bản ghi hoặc chuẩn bị hiển thị theo thời gian; dùng toàn văn khi lời văn và dấu câu quan trọng. Giữ hai cách biểu diễn này riêng trong sản phẩm đầu ra.\n\nNgôn ngữ được nhận diện tự động, dù có cung cấp gợi ý ngôn ngữ tùy chọn hay không. Nhà sản xuất quy định mã ISO 639-1 viết thường cho gợi ý và trả mã ngôn ngữ phục vụ logic ứng dụng cùng tên ngôn ngữ để hiển thị khi biết. Phản hồi báo một ngôn ngữ thay vì tất cả ngôn ngữ trong bản ghi có sự chuyển đổi giữa các ngôn ngữ. Giữ lời văn nguồn và siêu dữ liệu ngôn ngữ có sẵn cùng kết quả, thay vì coi yêu cầu chép lời là thao tác dịch.\n\nTrong quy trình phụ đề, nhóm các đoạn có thời gian liên tiếp thành dòng phụ đề dễ đọc thay vì hiện từng từ. Đầu ra hữu ích là tệp SRT hoặc WebVTT liên kết với clip gốc, có ranh giới phù hợp khoảng nghỉ và lượng chữ vừa phải trên màn hình. Kiểm tra thời gian bị thiếu và bảo đảm thời điểm kết thúc mỗi dòng sau thời điểm bắt đầu. Nhóm phụ đề và định dạng tệp là các bước ứng dụng xây dựng từ dữ liệu căn chỉnh trả về; lựa chọn hiển thị cần phù hợp trình phát và khán giả.\n\nCác điều khiển được mô tả cho Transcribe 1 là âm thanh, gợi ý ngôn ngữ và lựa chọn dấu thời gian. Dấu người nói, lượt nói có cấu trúc, điều khiển sự kiện cảm xúc và gợi ý số người nói của Pro là tính năng riêng; chúng không thuộc hợp đồng phản hồi được ghi cho mô hình cơ sở này. Chọn sản phẩm cần nhận trước khi xử lý: văn bản dễ đọc cho ghi chú, hoặc văn bản kèm căn chỉnh để điều hướng phát lại và phụ đề. Giữ mã clip, bản chép và thời gian có sẵn giúp kết quả hữu ích cho bước ứng dụng tiếp theo.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "e7553d6f0ba97076c59762eb11c9377a0d5ff24b97b5ce0d508ee55fcdbb2131",
    "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</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</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\">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 chuyển bản ghi âm ngắn thành văn bản, tự nhận diện ngôn ngữ và có tùy chọn dấu thời gian theo từ. Dùng bản chép lời cho ghi chú giọng nói, đoạn âm thanh có thể tìm kiếm hoặc chuẩn bị phụ đề, đồng thời tách các đoạn có thời gian khỏi toàn văn dễ đọc.</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 là mô hình chuyển giọng nói thành văn bản thông dụng của Fish Audio dành cho bản ghi ngắn. Mô hình nhận tệp âm thanh và trả các từ nhận diện được dưới dạng văn bản, cùng thời lượng bản ghi, các đoạn có thời gian tùy chọn và thông tin ngôn ngữ khi xác định được. Mô hình hữu ích cho ghi chú giọng nói ngắn, chỉ dẫn bằng lời, trích đoạn bản ghi hoặc clip âm thanh cần được biểu diễn thành văn bản dễ đọc.</p><p>Một quy trình ghi chú giọng nói minh họa giữ bản ghi cùng toàn bộ bản chép lời và mã định danh clip gốc. Bước ứng dụng sau có thể tìm kiếm văn bản, sắp xếp ghi chú hoặc tạo bản tóm tắt trong khi giữ nguồn lời nói. Với lệnh, bản chép cung cấp các từ nhận diện cho ứng dụng; mọi hành động là bước diễn giải và thực hiện riêng. Với trích đoạn phỏng vấn, ghi vị trí clip trong toàn bộ âm thanh để có thể kiểm tra trích dẫn đúng chỗ.</p><p>Nhà sản xuất chấp nhận WAV, MP3, AAC gồm M4A/MP4, FLAC và Ogg chứa Opus hoặc Vorbis. Với mô hình này, bản ghi WebM từ trình duyệt cần chuyển sang Ogg/Opus, MP3 hoặc WAV; tài liệu Pro mô tả hỗ trợ trực tiếp thêm các định dạng chứa khác. Gửi một tệp âm thanh mỗi yêu cầu. Ngân sách yêu cầu được ghi cho mô hình cơ sở tối đa 50 MiB, còn tệp MP3 và Opus phải nhỏ hơn 25 MiB. Kích thước tệp và độ dài bản ghi là hai yếu tố khác nhau: tệp nén có thể nằm trong giới hạn tải lên nhưng vẫn mất quá nhiều thời gian xử lý.</p><p>Transcribe 1 được thiết kế cho bản ghi ngắn. Nhà sản xuất khuyến nghị Pro cho âm thanh dài hơn vài phút; yêu cầu dài trên mô hình cơ sở có thể thất bại nếu vượt giới hạn thời gian xử lý. Khi chia nguồn dài thành clip ngắn để chép lời, giữ độ lệch thời điểm bắt đầu của từng clip và xác nhận bản chép trả về bao phủ toàn bộ clip trước khi ghép kết quả. Cộng độ lệch gốc vào thời gian cục bộ của đoạn để điều hướng vẫn gắn với toàn bộ bản ghi. Không nên hiểu hướng dẫn mô hình cơ sở thành ngân sách 60 phút riêng của Pro.</p><p>Phản hồi của nhà sản xuất gồm text, duration và segments. Thời lượng tính bằng giây, và toàn bộ bản chép dễ đọc nên được giữ làm lời văn chính của clip. Dấu thời gian là tùy chọn: ignore_timestamps mặc định là true trong API của nhà sản xuất, còn false yêu cầu các đoạn theo từ với văn bản, thời điểm bắt đầu và kết thúc tính bằng giây. Yêu cầu căn chỉnh làm tăng thời gian xử lý. Mảng segments rỗng có thể do bỏ qua thời gian, không có lời nói hoặc căn chỉnh tạm thời không khả dụng; vì vậy không nên tự động hiểu là toàn bộ bản chép rỗng.</p><p>Các đoạn thường là từ, hoặc một đến vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản của chúng không có dấu câu và có thể chuẩn hóa một giá trị khác với toàn bộ bản chép; đó không phải bản sao từng ký tự của phản hồi dễ đọc. Một đoạn có thể có cùng thời điểm bắt đầu và kết thúc. Dùng các đoạn để tìm vị trí trong bản ghi hoặc chuẩn bị hiển thị theo thời gian; dùng toàn văn khi lời văn và dấu câu quan trọng. Giữ hai cách biểu diễn này riêng trong sản phẩm đầu ra.</p><p>Ngôn ngữ được nhận diện tự động, dù có cung cấp gợi ý ngôn ngữ tùy chọn hay không. Nhà sản xuất quy định mã ISO 639-1 viết thường cho gợi ý và trả mã ngôn ngữ phục vụ logic ứng dụng cùng tên ngôn ngữ để hiển thị khi biết. Phản hồi báo một ngôn ngữ thay vì tất cả ngôn ngữ trong bản ghi có sự chuyển đổi giữa các ngôn ngữ. Giữ lời văn nguồn và siêu dữ liệu ngôn ngữ có sẵn cùng kết quả, thay vì coi yêu cầu chép lời là thao tác dịch.</p><p>Trong quy trình phụ đề, nhóm các đoạn có thời gian liên tiếp thành dòng phụ đề dễ đọc thay vì hiện từng từ. Đầu ra hữu ích là tệp SRT hoặc WebVTT liên kết với clip gốc, có ranh giới phù hợp khoảng nghỉ và lượng chữ vừa phải trên màn hình. Kiểm tra thời gian bị thiếu và bảo đảm thời điểm kết thúc mỗi dòng sau thời điểm bắt đầu. Nhóm phụ đề và định dạng tệp là các bước ứng dụng xây dựng từ dữ liệu căn chỉnh trả về; lựa chọn hiển thị cần phù hợp trình phát và khán giả.</p><p>Các điều khiển được mô tả cho Transcribe 1 là âm thanh, gợi ý ngôn ngữ và lựa chọn dấu thời gian. Dấu người nói, lượt nói có cấu trúc, điều khiển sự kiện cảm xúc và gợi ý số người nói của Pro là tính năng riêng; chúng không thuộc hợp đồng phản hồi được ghi cho mô hình cơ sở này. Chọn sản phẩm cần nhận trước khi xử lý: văn bản dễ đọc cho ghi chú, hoặc văn bản kèm căn chỉnh để điều hướng phát lại và phụ đề. Giữ mã clip, bản chép và thời gian có sẵn giúp kết quả hữu ích cho bước ứng dụng tiếp theo.</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 · Phiên âm</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></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Trường</th><th>Loại</th><th>Yêu cầu</th><th>Giá trị &amp; giới hạn</th><th>Mặc định</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span><code>string</code></td><td data-cell-label=\"Yêu cầu\"><span class=\"card-cell-label\">Yêu cầu</span>Bắt buộc</td><td data-cell-label=\"Giá trị &amp; giới hạn\"><span class=\"card-cell-label\">Giá trị &amp; giới hạn</span><div>fish-audio/transcribe-1</div></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">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></td><td data-cell-label=\"Mặc định\" data-default=\"unspecified\"><span class=\"card-cell-label\">Mặc định</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Tham số phương thức và vòng đời</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Tham số</th><th>Hợp đồng</th></tr></thead><tbody><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>content_type</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>application/json</td></tr><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>required</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>model, input_audio</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><tr><th data-cell-label=\"Tham số\" scope=\"row\"><span class=\"card-cell-label\">Tham số</span><code>material_conditions</code></th><td data-cell-label=\"Hợp đồng\"><span class=\"card-cell-label\">Hợp đồng</span>Ví dụ đọc tệp PCM WAV thực tế, không rỗng của bạn, mã hóa toàn bộ byte của tệp thành base64 và gửi input_audio.format với giá trị wav.</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> · task_id chính xác từ bản ghi đa phương tiện hiện có thuộc quyền sở hữu</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Bảng giá</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.</p><dl data-price-conditions><dt>Chế độ nhanh</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ nhanh</span></dd><dt>Chế độ Flex</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi chọn chế độ flex</span></dd><dt>Mức độ suy luận tối đa</dt><dd>Chưa chỉ định <span class=\"note-s\">Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa</span></dd></dl></div><div data-declared-tariff-pricing><h4>Mức phí Ailoot</h4><h4>Giá theo cấu hình</h4><p class=\"note-s\">Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Cấu hình</th><th>Biểu mức phí</th><th>Đơn vị tính phí</th><th>Phí</th></tr></thead><tbody><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>Giá cơ sở cho token</th><td data-cell-label=\"Biểu mức phí\"><span class=\"card-cell-label\">Biểu mức phí</span>Mức phí cơ bản</td><td data-cell-label=\"Đơn vị tính phí\"><span class=\"card-cell-label\">Đơn vị tính phí</span>—</td><td data-cell-label=\"Phí\"><span class=\"card-cell-label\">Phí</span><div><span>Đầu vào · Token đầu vào</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu ra · Token đầu ra</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Đọc bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Đầu vào · Ghi bộ nhớ đệm, 1 giờ</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Cấu hình\" scope=\"row\"><span class=\"card-cell-label\">Cấu hình</span>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></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Ví dụ yêu cầu</h3><h4>Ailoot Ultra · Phiên âm</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-1361-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1361-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · tệp WAV thực tế và kết quả gốc đầy đủ</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Sao chép mã\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1361-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1361-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 the path to your actual PCM WAV recording}&quot;\nexport AILOOT_AUDIO_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ[&#39;AILOOT_AUDIO_FILE&#39;]).read_bytes()\nif not (audio[:4] == b&#39;RIFF&#39; and audio[8:12] == b&#39;WAVE&#39;):\n    raise SystemExit(&#39;Supply your actual PCM WAV audio file&#39;)\nwith wave.open(io.BytesIO(audio), &#39;rb&#39;) as recording:\n    if recording.getcomptype() != &#39;NONE&#39; or recording.getnframes() &lt;= 0:\n        raise SystemExit(&#39;Supply a nonempty PCM WAV recording&#39;)\nrequest = {&#39;model&#39;: &#39;fish-audio/transcribe-1&#39;, &#39;input_audio&#39;: {&#39;data&#39;: base64.b64encode(audio).decode(&#39;ascii&#39;), &#39;format&#39;: &#39;wav&#39;}}\nPath(&#39;request.json&#39;).write_text(json.dumps(request, ensure_ascii=False), encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/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 response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\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 · Phiên âm</h4><p class=\"note-s\">Toàn bộ nội dung phản hồi gốc, trạng thái và các tiêu đề được chuyển tiếp. Trình xử lý này không bổ sung cấu trúc JSON chung, trường văn bản hoặc cấu trúc bao tác vụ.</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ộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Nếu cần kiểm tra phản hồi gốc</h5><p class=\"note-s\">Giữ lại X-Client-Request-ID thực tế và toàn bộ phản hồi. Đọc các tài sản gốc thuộc quyền sở hữu và URL nội dung đã ký chính xác của chúng; tuyệt đối không gửi lại yêu cầu tạo chưa rõ kết quả.</p></div><details class=\"card-about\" data-output-fields><summary>Trường phản hồi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Trường</th><th>Loại</th></tr></thead><tbody><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">text (when present)</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span></td></tr><tr><th data-cell-label=\"Trường\" scope=\"row\"><span class=\"card-cell-label\">Trường</span><code class=\"card-field-name\">usage (when present)</code></th><td data-cell-label=\"Loại\" data-field-type><span class=\"card-cell-label\">Loại</span></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>Nội dung JSON hoặc ID mô hình chuẩn được chỉ định rõ 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>Giữ lại phản hồi và sửa trường yêu cầu được chỉ ra.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Khóa API Ailoot 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>Dùng khóa API Ailoot được cấp phép của bạn.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>403 · <code>permission_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Nhóm của khóa không được phép sử dụng phương thức này.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại chi tiết lỗi được trả về.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Phương thức đã chọn chưa có tuyến được phép sử dụng.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại chi tiết lỗi được trả về.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Biểu giá đã chấp nhận không thể xác định số lượng đầu vào hoặc giới hạn cần thiết.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại phản hồi; dùng biểu diễn đầu vào mà biểu giá đã chấp nhận yêu cầu.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>503 · <code></code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Kho lưu trữ, tuyến, giá phương thức hoặc khoản tiền giữ trước cần thiết không khả dụng.</td><td data-cell-label=\"Bước tiếp theo\"><span class=\"card-cell-label\">Bước tiếp theo</span>Giữ lại toàn bộ phản hồi ban đầu. Khoản giữ trước chưa rõ trạng thái không cho phép gửi lại.</td></tr><tr><th data-cell-label=\"Phản hồi\" scope=\"row\"><span class=\"card-cell-label\">Phản hồi</span>502 · <code>server_error</code></th><td data-cell-label=\"Điều kiện\"><span class=\"card-cell-label\">Điều kiện</span>Kết quả, mức sử dụng hoặc quyết toán ban đầu 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 yêu cầu thực tế và phản hồi ban đầu. Đọc bản ghi hiện có thuộc quyền sở hữu; 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&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1</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&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/transcribe-1",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "Nội dung JSON hoặc ID mô hình chuẩn được chỉ định rõ không hợp lệ.",
                "http_status": 400,
                "recovery": "Giữ lại phản hồi và sửa trường yêu cầu được chỉ ra.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Khóa API Ailoot không hợp lệ.",
                "http_status": 401,
                "recovery": "Dùng khóa API Ailoot được cấp phép của bạn.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Nhóm của khóa không được phép sử dụng phương thức này.",
                "http_status": 403,
                "recovery": "Giữ lại chi tiết lỗi được trả về.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "Phương thức đã chọn chưa có tuyến được phép sử dụng.",
                "http_status": 404,
                "recovery": "Giữ lại chi tiết lỗi được trả về.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Biểu giá đã chấp nhận không thể xác định số lượng đầu vào hoặc giới hạn cần thiết.",
                "http_status": 422,
                "recovery": "Giữ lại phản hồi; dùng biểu diễn đầu vào mà biểu giá đã chấp nhận yêu cầu.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Kho lưu trữ, tuyến, giá phương thức hoặc khoản tiền giữ trước cần thiết không khả dụng.",
                "http_status": 503,
                "recovery": "Giữ lại toàn bộ phản hồi ban đầu. Khoản giữ trước chưa rõ trạng thái không cho phép gửi lại.",
                "type": null
              },
              {
                "code": null,
                "condition": "Kết quả, mức sử dụng hoặc quyết toán ban đầu cần được kiểm tra.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Giữ lại ID yêu cầu thực tế và phản hồi ban đầu. Đọc bản ghi hiện có thuộc quyền sở hữu; không gửi lại yêu cầu tạo.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại X-Client-Request-ID thực tế và toàn bộ phản hồi. Đọc các tài sản gốc thuộc quyền sở hữu và URL nội dung đã ký chính xác của chúng; tuyệt đối không gửi lại yêu cầu tạo chưa rõ kết quả."
            },
            "outputs": {
              "all_results": "Giữ lại toàn bộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Toàn bộ nội dung phản hồi gốc, trạng thái và các tiêu đề được chuyển tiếp. Trình xử lý này không bổ sung cấu trúc JSON chung, trường văn bản hoặc cấu trúc bao tác vụ."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Ví dụ đọc tệp PCM WAV thực tế, không rỗng của bạn, mã hóa toàn bộ byte của tệp thành base64 và gửi input_audio.format với giá trị wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id chính xác từ bản ghi đa phương tiện hiện có thuộc quyền sở hữu",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "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 the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Phiên âm",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "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",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.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",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "e52b0d27389cff1932b178761144350ca988ba8100a3332403874664752ea95b",
    "input_html_sha256": "310d974b2dd0cefdbfa9d3d1adc196b7e424233e04f722d07a11bbf553022ec1",
    "private_audit_sha256": "bd0f75b3dc038d51f1847f245e77c814e47846de25955e7a7de27030954bee40",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/vi/fish-audio-transcribe-1/",
    "description": "Transcribe 1 chuyển bản ghi âm ngắn thành văn bản, tự nhận diện ngôn ngữ và có tùy chọn dấu thời gian theo từ. Dùng bản chép lời cho ghi chú giọng nói, đoạn âm thanh có thể tìm kiếm hoặc chuẩn bị phụ đề, đồng thời tách các đoạn có thời gian khỏi toàn văn dễ đọc.",
    "locale": "vi",
    "md_url": "https://ailoot.ai/models/vi/fish-audio-transcribe-1/index.md",
    "title": "Fish Audio: Transcribe 1 — Ailoot",
    "url": "https://ailoot.ai/models/vi/fish-audio-transcribe-1/"
  },
  "rawModel": {
    "about": "Transcribe 1 là mô hình chuyển giọng nói thành văn bản thông dụng của Fish Audio dành cho bản ghi ngắn. Mô hình nhận tệp âm thanh và trả các từ nhận diện được dưới dạng văn bản, cùng thời lượng bản ghi, các đoạn có thời gian tùy chọn và thông tin ngôn ngữ khi xác định được. Mô hình hữu ích cho ghi chú giọng nói ngắn, chỉ dẫn bằng lời, trích đoạn bản ghi hoặc clip âm thanh cần được biểu diễn thành văn bản dễ đọc.\n\nMột quy trình ghi chú giọng nói minh họa giữ bản ghi cùng toàn bộ bản chép lời và mã định danh clip gốc. Bước ứng dụng sau có thể tìm kiếm văn bản, sắp xếp ghi chú hoặc tạo bản tóm tắt trong khi giữ nguồn lời nói. Với lệnh, bản chép cung cấp các từ nhận diện cho ứng dụng; mọi hành động là bước diễn giải và thực hiện riêng. Với trích đoạn phỏng vấn, ghi vị trí clip trong toàn bộ âm thanh để có thể kiểm tra trích dẫn đúng chỗ.\n\nNhà sản xuất chấp nhận WAV, MP3, AAC gồm M4A/MP4, FLAC và Ogg chứa Opus hoặc Vorbis. Với mô hình này, bản ghi WebM từ trình duyệt cần chuyển sang Ogg/Opus, MP3 hoặc WAV; tài liệu Pro mô tả hỗ trợ trực tiếp thêm các định dạng chứa khác. Gửi một tệp âm thanh mỗi yêu cầu. Ngân sách yêu cầu được ghi cho mô hình cơ sở tối đa 50 MiB, còn tệp MP3 và Opus phải nhỏ hơn 25 MiB. Kích thước tệp và độ dài bản ghi là hai yếu tố khác nhau: tệp nén có thể nằm trong giới hạn tải lên nhưng vẫn mất quá nhiều thời gian xử lý.\n\nTranscribe 1 được thiết kế cho bản ghi ngắn. Nhà sản xuất khuyến nghị Pro cho âm thanh dài hơn vài phút; yêu cầu dài trên mô hình cơ sở có thể thất bại nếu vượt giới hạn thời gian xử lý. Khi chia nguồn dài thành clip ngắn để chép lời, giữ độ lệch thời điểm bắt đầu của từng clip và xác nhận bản chép trả về bao phủ toàn bộ clip trước khi ghép kết quả. Cộng độ lệch gốc vào thời gian cục bộ của đoạn để điều hướng vẫn gắn với toàn bộ bản ghi. Không nên hiểu hướng dẫn mô hình cơ sở thành ngân sách 60 phút riêng của Pro.\n\nPhản hồi của nhà sản xuất gồm text, duration và segments. Thời lượng tính bằng giây, và toàn bộ bản chép dễ đọc nên được giữ làm lời văn chính của clip. Dấu thời gian là tùy chọn: ignore_timestamps mặc định là true trong API của nhà sản xuất, còn false yêu cầu các đoạn theo từ với văn bản, thời điểm bắt đầu và kết thúc tính bằng giây. Yêu cầu căn chỉnh làm tăng thời gian xử lý. Mảng segments rỗng có thể do bỏ qua thời gian, không có lời nói hoặc căn chỉnh tạm thời không khả dụng; vì vậy không nên tự động hiểu là toàn bộ bản chép rỗng.\n\nCác đoạn thường là từ, hoặc một đến vài ký tự trong tiếng Trung và tiếng Nhật. Văn bản của chúng không có dấu câu và có thể chuẩn hóa một giá trị khác với toàn bộ bản chép; đó không phải bản sao từng ký tự của phản hồi dễ đọc. Một đoạn có thể có cùng thời điểm bắt đầu và kết thúc. Dùng các đoạn để tìm vị trí trong bản ghi hoặc chuẩn bị hiển thị theo thời gian; dùng toàn văn khi lời văn và dấu câu quan trọng. Giữ hai cách biểu diễn này riêng trong sản phẩm đầu ra.\n\nNgôn ngữ được nhận diện tự động, dù có cung cấp gợi ý ngôn ngữ tùy chọn hay không. Nhà sản xuất quy định mã ISO 639-1 viết thường cho gợi ý và trả mã ngôn ngữ phục vụ logic ứng dụng cùng tên ngôn ngữ để hiển thị khi biết. Phản hồi báo một ngôn ngữ thay vì tất cả ngôn ngữ trong bản ghi có sự chuyển đổi giữa các ngôn ngữ. Giữ lời văn nguồn và siêu dữ liệu ngôn ngữ có sẵn cùng kết quả, thay vì coi yêu cầu chép lời là thao tác dịch.\n\nTrong quy trình phụ đề, nhóm các đoạn có thời gian liên tiếp thành dòng phụ đề dễ đọc thay vì hiện từng từ. Đầu ra hữu ích là tệp SRT hoặc WebVTT liên kết với clip gốc, có ranh giới phù hợp khoảng nghỉ và lượng chữ vừa phải trên màn hình. Kiểm tra thời gian bị thiếu và bảo đảm thời điểm kết thúc mỗi dòng sau thời điểm bắt đầu. Nhóm phụ đề và định dạng tệp là các bước ứng dụng xây dựng từ dữ liệu căn chỉnh trả về; lựa chọn hiển thị cần phù hợp trình phát và khán giả.\n\nCác điều khiển được mô tả cho Transcribe 1 là âm thanh, gợi ý ngôn ngữ và lựa chọn dấu thời gian. Dấu người nói, lượt nói có cấu trúc, điều khiển sự kiện cảm xúc và gợi ý số người nói của Pro là tính năng riêng; chúng không thuộc hợp đồng phản hồi được ghi cho mô hình cơ sở này. Chọn sản phẩm cần nhận trước khi xử lý: văn bản dễ đọc cho ghi chú, hoặc văn bản kèm căn chỉnh để điều hướng phát lại và phụ đề. Giữ mã clip, bản chép và thời gian có sẵn giúp kết quả hữu ích cho bước ứng dụng tiếp theo.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "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,
    "formats": [
      "transcriptions"
    ],
    "id": "fish-audio/transcribe-1",
    "input": [
      "audio"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "Nội dung JSON hoặc ID mô hình chuẩn được chỉ định rõ không hợp lệ.",
                "http_status": 400,
                "recovery": "Giữ lại phản hồi và sửa trường yêu cầu được chỉ ra.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Khóa API Ailoot không hợp lệ.",
                "http_status": 401,
                "recovery": "Dùng khóa API Ailoot được cấp phép của bạn.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Nhóm của khóa không được phép sử dụng phương thức này.",
                "http_status": 403,
                "recovery": "Giữ lại chi tiết lỗi được trả về.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "Phương thức đã chọn chưa có tuyến được phép sử dụng.",
                "http_status": 404,
                "recovery": "Giữ lại chi tiết lỗi được trả về.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Biểu giá đã chấp nhận không thể xác định số lượng đầu vào hoặc giới hạn cần thiết.",
                "http_status": 422,
                "recovery": "Giữ lại phản hồi; dùng biểu diễn đầu vào mà biểu giá đã chấp nhận yêu cầu.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Kho lưu trữ, tuyến, giá phương thức hoặc khoản tiền giữ trước cần thiết không khả dụng.",
                "http_status": 503,
                "recovery": "Giữ lại toàn bộ phản hồi ban đầu. Khoản giữ trước chưa rõ trạng thái không cho phép gửi lại.",
                "type": null
              },
              {
                "code": null,
                "condition": "Kết quả, mức sử dụng hoặc quyết toán ban đầu cần được kiểm tra.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Giữ lại ID yêu cầu thực tế và phản hồi ban đầu. Đọc bản ghi hiện có thuộc quyền sở hữu; không gửi lại yêu cầu tạo.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Giữ lại X-Client-Request-ID thực tế và toàn bộ phản hồi. Đọc các tài sản gốc thuộc quyền sở hữu và URL nội dung đã ký chính xác của chúng; tuyệt đối không gửi lại yêu cầu tạo chưa rõ kết quả."
            },
            "outputs": {
              "all_results": "Giữ lại toàn bộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Toàn bộ nội dung phản hồi gốc, trạng thái và các tiêu đề được chuyển tiếp. Trình xử lý này không bổ sung cấu trúc JSON chung, trường văn bản hoặc cấu trúc bao tác vụ."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Ví dụ đọc tệp PCM WAV thực tế, không rỗng của bạn, mã hóa toàn bộ byte của tệp thành base64 và gửi input_audio.format với giá trị wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id chính xác từ bản ghi đa phương tiện hiện có thuộc quyền sở hữu",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "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 the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Phiên âm",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "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",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.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",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: Transcribe 1",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Transcribe 1 chuyển bản ghi âm ngắn thành văn bản, tự nhận diện ngôn ngữ và có tùy chọn dấu thời gian theo từ. Dùng bản chép lời cho ghi chú giọng nói, đoạn âm thanh có thể tìm kiếm hoặc chuẩn bị phụ đề, đồng thời tách các đoạn có thời gian khỏi toàn văn dễ đọc."
  },
  "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 chuyển bản ghi âm ngắn thành văn bản, tự nhận diện ngôn ngữ và có tùy chọn dấu thời gian theo từ. Dùng bản chép lời cho ghi chú giọng nói, đoạn âm thanh có thể tìm kiếm hoặc chuẩn bị phụ đề, đồng thời tách các đoạn có thời gian khỏi toàn văn dễ đọc.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "33c9028bf2ca5f854d90dde332658fe44524608a21e2c23b6a6bd9247de15936",
    "renderer_sha256": "64a62299639eb843877e9ec5c95e32bf22bac3acfe230f6f502c5c3aa186f9c1"
  },
  "sourceRevision": "19163010fd50c0837bc58526330ead93916f39bcfec93d1d58c9185e160fca3e"
}
