All Products
Search
Document Center

Alibaba Cloud Model Studio:Qwen-Omni

Last Updated:Sep 02, 2026

Model Qwen-Omni menerima input multimodal dan menghasilkan respons berupa teks atau ucapan. Model ini menghasilkan suara yang menyerupai manusia serta mendukung output ucapan dalam berbagai bahasa dan dialek. Kasus penggunaan mencakup moderasi konten, pembuatan teks, pengenalan visual, dan interaksi audio-video.

Wilayah yang didukung:Singapura, Beijing. Gunakan Kunci API untuk wilayah Anda.

Mulai

Prasyarat
  • Dapatkan Kunci API dan atur kunci API sebagai Variabel lingkungan.
  • Model Qwen-Omni hanya mendukung pemanggilan yang kompatibel dengan OpenAI. Anda harus menginstal SDK terbaru. Versi minimum yang diperlukan adalah 1.52.0 untuk OpenAI Python SDK dan 4.68.0 untuk Node.js SDK.

Contoh berikut mengirimkan prompt teks ke API Qwen-Omni dan mengembalikan respons streaming yang mencakup teks dan audio.

import os
import base64
import soundfile as sf
import numpy as np
from openai import OpenAI

# 1. Inisialisasi client
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # Pastikan variabel lingkungan telah diatur
    # Wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# 2. Kirim permintaan
try:
    completion = client.chat.completions.create(
        model="qwen3.5-omni-plus",
        messages=[{"role": "user", "content": "Who are you?"}],
        modalities=["text", "audio"],  # Tentukan output teks dan audio
        audio={"voice": "Tina", "format": "wav"},
        stream=True,  # Harus diatur ke True
        stream_options={"include_usage": True},
    )

    # 3. Proses respons streaming dan dekode audio
    print("Model response:")
    audio_base64_string = ""
    for chunk in completion:
        # Proses bagian teks
        if chunk.choices and chunk.choices[0].delta.content:
            print(chunk.choices[0].delta.content, end="")

        # Kumpulkan bagian audio
        if chunk.choices and hasattr(chunk.choices[0].delta, "audio") and chunk.choices[0].delta.audio:
            audio_base64_string += chunk.choices[0].delta.audio.get("data", "")

    # 4. Simpan file audio
    if audio_base64_string:
        wav_bytes = base64.b64decode(audio_base64_string)
        audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
        sf.write("audio_assistant.wav", audio_np, samplerate=24000)
        print("\nAudio file saved to: audio_assistant.wav")

except Exception as e:
    print(f"Request failed: {e}")
// Sebelum menjalankan kode ini:
// Untuk Windows/Mac/Linux:
// 1. Pastikan versi Node.js >= 14 telah diinstal.
// 2. Jalankan perintah berikut untuk menginstal dependensi yang diperlukan:
//    npm install openai wav

import OpenAI from "openai";
import { createWriteStream } from 'node:fs';
import { Writer } from 'wav';

// Definisikan fungsi untuk mengonversi string Base64 dan menyimpannya sebagai file audio WAV standar
async function convertAudio(audioString, audioPath) {
    try {
        // Dekode string Base64 menjadi Buffer
        const wavBuffer = Buffer.from(audioString, 'base64');
        // Buat aliran penulisan file WAV
        const writer = new Writer({
            sampleRate: 24000,  // Laju sampel
            channels: 1,        // Mono
            bitDepth: 16        // Kedalaman 16-bit
        });
        // Buat aliran output file dan buat koneksi pipe
        const outputStream = createWriteStream(audioPath);
        writer.pipe(outputStream);

        // Tulis data PCM dan akhiri penulisan
        writer.write(wavBuffer);
        writer.end();

        // Gunakan Promise untuk menunggu penulisan file selesai
        await new Promise((resolve, reject) => {
            outputStream.on('finish', resolve);
            outputStream.on('error', reject);
        });

        // Tambahkan waktu tunggu ekstra untuk memastikan integritas audio
        await new Promise(resolve => setTimeout(resolve, 800));

        console.log(`\nAudio file saved to: ${audioPath}`);
    } catch (error) {
        console.error('Error during processing:', error);
    }
}

//  1. Inisialisasi client
const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
// 2. Kirim permintaan
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus",
    messages: [
        {
            "role": "user",
            "content": "Who are you?"
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

let audioString = "";
console.log("Model response:")

// 3. Proses respons streaming dan dekode audio
for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        // Proses konten teks
        if (chunk.choices[0].delta.content) {
            process.stdout.write(chunk.choices[0].delta.content);
        }
        // Proses konten audio
        if (chunk.choices[0].delta.audio) {
            if (chunk.choices[0].delta.audio["data"]) {
                audioString += chunk.choices[0].delta.audio["data"];
            }
        }
    }
}
// 4. Simpan file audio
convertAudio(audioString, "audio_assistant.wav");
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3.5-omni-plus",
    "messages": [
        {
            "role": "user",
            "content": "Who are you?"
        }
    ],
    "stream":true,
    "stream_options":{
        "include_usage":true
    },
    "modalities":["text","audio"],
    "audio":{"voice":"Tina","format":"wav"}
}'

Respons

Setelah menjalankan kode Python atau Node.js, respons teks akan muncul di konsol dan file audio bernama audio_assistant.wav akan disimpan di direktori yang sama dengan file kode Anda.

Model response:
I am a large language model developed by Alibaba Cloud. My name is Qwen. How can I help you?

Menjalankan kode HTTP akan mengembalikan teks dan data audio yang dikodekan Base64 secara langsung di bidang audio.

data: {"choices":[{"delta":{"content":"I"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757647879,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-a68eca3b-c67e-4666-a72f-73c0b4919860"}
data: {"choices":[{"delta":{"content":"am"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757647879,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-a68eca3b-c67e-4666-a72f-73c0b4919860"}
......
data: {"choices":[{"delta":{"audio":{"data":"/v8AAAAAAAAAAAAAAA...","expires_at":1757647879,"id":"audio_a68eca3b-c67e-4666-a72f-73c0b4919860"}},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757647879,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-a68eca3b-c67e-4666-a72f-73c0b4919860"}
data: {"choices":[{"finish_reason":"stop","delta":{"content":""},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1764763585,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-e8c82e9e-073e-4289-a786-a20eb444ac9c"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":207,"completion_tokens":103,"total_tokens":310,"completion_tokens_details":{"audio_tokens":83,"text_tokens":20},"prompt_tokens_details":{"text_tokens":207}},"created":1757940330,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-9cdd5a26-f9e9-4eff-9dcc-93a878165afc"}

Pemilihan model

  • Seri Qwen3.5-Omni: Paling cocok untuk analisis video panjang, ringkasan rapat, pembuatan keterangan, moderasi konten, dan interaksi audio-video.

    • Batas input: Hingga 3 jam audio atau 1 jam video
    • Kontrol audio: Mendukung penyesuaian volume, laju bicara, dan emosi melalui instruksi
    • Kemampuan visual: Setara dengan Qwen3.5. Memahami gambar, ucapan, efek suara, dan input multimodal lainnya
    • Input multimodal gabungan: Mendukung kombinasi apa pun antara teks dengan gambar, audio, dan video dalam satu permintaan
    • Input multimodal gabungan hanya didukung oleh seri Qwen3.5-Omni. Anda dapat menyertakan data dalam berbagai modalitas—seperti kombinasi gambar, audio, dan teks atau video, gambar, dan teks—dalam satu permintaan yang sama.
  • Seri Qwen3-Omni-Flash: Paling cocok untuk analisis video pendek dan skenario yang sensitif terhadap biaya.

    • Batas input: Input audio dan video hingga 150 detik
    • Mode berpikir: Satu-satunya model seri Qwen-Omni yang mendukung mode berpikir
    • Modalitas input: Hanya mendukung kombinasi teks dengan satu modalitas lain (gambar, audio, atau video).
  • Seri Qwen-Omni-Turbo

    Seri ini tidak lagi diperbarui dan memiliki fitur terbatas. Kami merekomendasikan migrasi ke seri Qwen3.5-Omni atau Qwen3-Omni-Flash.

SeriDeskripsi audio-videoBerpikir mendalamPencarian webBahasa input audioBahasa output audioSuara yang didukung

Qwen3.5-Omni

Model omni-modal generasi terbaru

Kuat

Tidak didukung

Didukung

113

74 bahasa dan 39 dialek

Bahasa: Chinese, English, German, French, Italian, Czech, Indonesian, Thai, Korean, Polish, Japanese, Vietnamese, Finnish, Portuguese, Spanish, Dutch, Russian, Malay, Catalan, Swedish, Turkish, Ukrainian, Romanian, Slovak, Danish, Icelandic, Norwegian (Bokmål), Macedonian, Greek, Hungarian, Galician, Filipino, Croatian, Bosnian, Slovenian, Bulgarian, Kazakh, Belarusian, Latvian, Estonian, Azerbaijani, Uyghur, Swahili, Hindi, Esperanto, Kyrgyz, Tajik, Cebuano, Afrikaans, Arabic, Lithuanian, Javanese, Bengali, Persian, Hebrew, Punjabi, Gujarati, Mongolian, Asturian, Kannada, Marathi, Interlingua, Malayalam, Maltese, Norwegian Nynorsk, Telugu, Urdu, Georgian, Basque, Tamil, Odia, Serbian, Maori

Dialek:
Northeastern Mandarin, dialek Guizhou, bahasa Kanton, dialek Henan, bahasa Kanton Hong Kong, bahasa Shanghainese, dialek Shaanxi, dialek Tianjin, bahasa Hokkien Taiwan, dialek Yunnan, dialek Anhui, dialek Fujian, dialek Gansu, dialek Guangdong, dialek Hubei, dialek Hunan, dialek Jiangxi, dialek Shandong, dialek Shanxi, dialek Sichuan, dialek Guangxi, dialek Hainan, dialek Chongqing, dialek Changsha, dialek Hangzhou, dialek Hefei, dialek Yinchuan, dialek Zhengzhou, dialek Shenyang, dialek Wenzhou, dialek Wuhan, dialek Kunming, dialek Taiyuan, dialek Nanchang, dialek Jinan, dialek Lanzhou, dialek Nanjing, bahasa Hakka, Southern Min

36

29 bahasa dan 7 dialek

Bahasa:Chinese, English, German, Italian, Portuguese, Spanish, Japanese, Korean, French, Russian, Thai, Indonesian, Arabic, Vietnamese, Turkish, Finnish, Polish, Hindi, Dutch, Czech, Urdu, Tagalog, Swedish, Danish, Hebrew, Icelandic, Malay, Norwegian, Persian

Dialek:Sichuan dialect, Beijing dialect, Tianjin dialect, Nanjing dialect, Shaanxi dialect, Cantonese, Southern Min

55

Qwen3-Omni-Flash

Model berpikir hibrida

Lebih lemah

Didukung

Tidak didukung

19

11 bahasa dan 8 dialek

Bahasa:

Chinese, English, German, French, Italian, Thai, Korean, Japanese, Russian, Spanish, Portuguese

Dialek:

Sichuan dialect, Shanghainese, Cantonese, Southern Min, Shaanxi dialect, Nanjing dialect, Tianjin dialect, Beijing dialect

19

11 bahasa dan 8 dialek

Bahasa:

Chinese, English, German, French, Italian, Thai, Korean, Japanese, Russian, Spanish, Portuguese

Dialek:

Sichuanese, Shanghainese, Cantonese, Hokkien, Shaanxi dialect, Nanjing dialect, Tianjin dialect, Beijing dialect

17 hingga 49

Bervariasi berdasarkan versi

Qwen-Omni-Turbo

Tidak lagi diperbarui

Tidak ada

Tidak didukung

Tidak didukung

Chinese, English

Chinese, English

4

Untuk nama model, ukuran jendela konteks, harga, dan versi snapshot, periksa di Konsol Studio Model. Untuk batasan laju, lihat Pembatasan laju.

Kinerja model

Analisis konten audio dan video

Buat deskripsi lengkap dengan cap waktu untuk video ini.

00:00.000 – 00:02.500

Jalan kota yang basah oleh hujan memenuhi bingkai layar lebar. Fotografi eksposur panjang menciptakan garis-garis lampu mobil merah dan biru di atas trotoar basah. Seorang pria sendirian mengenakan mantel panjang gelap dan kemeja terang dengan dasi berjalan menuju kamera di sepanjang trotoar kanan. Tetesan hujan menempel di bahunya dan rambutnya. Setiap langkah menghasilkan suara "plop" yang diredam di atas beton basah. Dengungan elektronik rendah yang mengancam menyertai suara sekitar, sementara hujan yang stabil berderak di sekelilingnya. Grafiti berwarna-warni menutupi dinding bata di sampingnya, dan papan reklame neon bersinar di kejauhan—satu dengan jelas menampilkan tulisan miring oranye-merah bertuliskan "Nice", sedangkan papan vertikal lainnya menunjukkan huruf "AT" di bagian bawahnya.

......

00:12.300 – 00:14.533

Kamera dimiringkan ke bawah. Di dalam sorotan senter, selembar kertas tunggal yang menguning dan tua tergeletak di genangan dangkal, ujung-ujungnya hangus dan sudut-sudutnya melengkung. Paragraf-paragraf bertinta menutupi sebagian besar permukaannya, tetapi kelembapan dan bekas hangus membuat teksnya tidak terbaca. Pria itu berlutut, menjulurkan jari-jari yang mengenakan sarung tangan ke arah dokumen tersebut. Riak-riak menyebar ke luar saat tangannya mendekat. Suara sirene mencapai puncaknya lalu mulai sedikit mereda, sementara dengungan sekitar tetap stabil. Adegan membeku tepat sebelum kertas yang bergetar disentuh, mengakhiri klip.

Hanya sebagian cap waktu yang ditampilkan.

Pemahaman multidialek

Jelaskan karakteristik vokal, keadaan emosional, dan lirik lengkap untuk penyanyi dalam berbagai dialek Tiongkok.

Audio ini menampilkan pertunjukan rap oleh penyanyi dari berbagai wilayah Tiongkok, menampilkan keberagaman dialek yang kaya. Berikut adalah deskripsi detail tentang ciri vokal, keadaan emosional, dan lirik masing-masing penyanyi:

Dialek Hangzhou (Wu)Ciri vokal:

Suara penyanyi pria ini lembut dan halus, dengan kehalusan dan kehangatan khas dialek Wu. Intonasinya naik dan turun dengan lembut, dan ritmenya ringan dan cepat, menciptakan efek bercerita yang santai.

Keadaan emosional:

Santai, nyaman, dan penuh kehidupan sehari-hari. Ia menggambarkan gaya hidup Hangzhou yang lambat dan perubahan perkotaan, mengekspresikan kasih sayang terhadap kampung halamannya dan refleksi terhadap perkembangan modern. Secara keseluruhan, ia merasa nyaman dan akrab.

Lirik:

> Dialek Hangzhou, dengarkan baik-baik! Budaya kami termasuk pelafalan lokal erhua.

> Seperti bunga yang mekar di Danau Barat, tidak perlu survei budaya—kami memahaminya paling baik.

> Tidak seorang pun dari kalian memahami. 'San bu da men', 'ge'r', 'lao'r', 'fen'r', 'ya'r'... bagaimana orang luar bisa membedakan semua ini?

> Ayo pergi! Transportasi cepat—kereta bawah tanah ada di mana-mana. Kita akan memeriksanya.

> Menyambut Asia Tenggara dan Thailand, menonton acara "Thirteen Ta". Bangga dengan kota kami, langsung dalam kepribadian.

> Jadi kamu hanya datang untuk pengalaman "menyeberangi jembatan", dan karena rasanya berbeda, kamu tidak kembali?

Hanya sebagian hasil yang ditampilkan.

Pembuatan keterangan lirik

Transkripsikan lirik lagu dan berikan cap waktu untuk setiap baris dalam format ini:[00:00:15,020 --> 00:00:28,085] : When you walk through a storm, hold your head up high.[00:00:28,085 --> 00:00:40,200] And don't be afraid of the dark. ......

[00:00:12,680 --> 00:00:16,960] Benang kucing bergoyang melewati cahaya bulan di pepohonan.

[00:00:18,400 --> 00:00:22,800] Radiator mendengung lagu-lagu populer tahun 1998.

[00:00:24.160 → 00:00:28.080] Waktu memisahkan gelombang panas seperti kabut.

[00:00:28,920 --> 00:00:33,000] Neon dari layar bersinar di pangkal hidungku.

......

[00:03:16,720 --> 00:03:21,680] Kami bersarang di cincin paling lembut dari batang pohon.

[00:03:22,400 --> 00:03:27,000] Pernapasan mengubah kehangatan sisa menjadi madu-gula.

[00:03:28,160 --> 00:03:33,200] Sofa tenggelam ke bentuk awan-lembut.

[00:03:34,000 --> 00:03:38,800] Setiap pori menyerap sinar matahari.

[00:04:09,000 --> 00:04:10,020] (Akhir)

Hanya sebagian hasil yang ditampilkan.

Pemrograman audio-video

Penggunaan

Keluaran streaming

Semua permintaan ke Qwen-Omni harus mengatur stream=True.

Konfigurasi model

Konfigurasikan parameter, prompt, dan durasi media untuk menyeimbangkan biaya, kecepatan, dan kualitas.

Pemahaman audio-video

Kasus penggunaanDurasi video yang direkomendasikanPrompt yang direkomendasikanmax_pixels maksimum yang direkomendasikan

Tinjauan cepat, biaya rendah

≤60 menit

Prompt sederhana dalam 50 kata

230.400

Ekstraksi konten (segmentasi video panjang)

≤60 menit

921.600~2.073.600

Analisis standar (penandaan video pendek)

≤4 menit

Gunakan prompt terstruktur di bawah ini

Prompt yang direkomendasikan

Provide a detailed description of the video.
It should explicitly include three sections:
1. A structured chronological storyline of **every noticeable audio and visual detail**
2. A structured list of all visible text. For each text element, include start timestamp, end timestamp, the exact text content, and the appearance characteristics. If no text appears, explicitly state so.
3. A structured speech-to-text transcription, include speaker (corresponding to the character or voice‑over in Section 1, including their accent and tone), exact spoken content, start timestamp, end timestamp, and speaking state (prosody, emotion, and style). If no speech appears, explicitly state so.
Aside from these three required sections, you are free to organize any additional content in any way you find helpful. This additional content can include global information about the entire video or localized information about specific moments. You may choose the topic of this extra content freely.
Output Format:
```
## Storyline
<xx:xx.xxx> - <xx:xx.xxx>
<an unstructured long paragraph in natural language describing what happened during this period, blending both audio and video details.>
<xx:xx.xxx> - <xx:xx.xxx>
<an unstructured long paragraph in natural language describing what happened during this period, blending both audio and video details.>
<xx:xx.xxx> - <xx:xx.xxx>
<an unstructured long paragraph in natural language describing what happened during this period, blending both audio and video details.>
...
## Visible Text
<xx:xx.xxx> - <xx:xx.xxx>
“<element>”: <appearance>
“<element>”: <appearance>
<xx:xx.xxx> - <xx:xx.xxx>
“<element>”: <appearance>
“<element>”: <appearance>
“<element>”: <appearance>
<xx:xx.xxx> - <xx:xx.xxx>
“<element>”: <appearance>
...
## Speakers and Transcript
Speaker profiles:
<speaker> - <profile>
<speaker> - <profile>
<speaker> - <profile>
...
<xx:xx.xxx> - <xx:xx.xxx>
Speaker: <speaker>
State: <description>
Content: “<content>”
<xx:xx.xxx> - <xx:xx.xxx>
Speaker: <speaker>
State: <description>
Content: “<content>”
<xx:xx.xxx> - <xx:xx.xxx>
Speaker: <speaker>
State: <description>
Content: “<content>”
...
## <another section>
<paragraphs>
## <another section>
<paragraphs>
...
```

921.600~2.073.600

Analisis detail halus (beberapa pembicara/scene kompleks)

≤2 menit

2.073.600

CatatanAnda dapat melakukan segmentasi video panjang terlebih dahulu untuk mendapatkan deskripsi detail halus.

Pemahaman audio

Anda dapat menyeimbangkan biaya dan kualitas dengan mengontrol durasi audio dan kompleksitas prompt.

Kasus penggunaanDurasi audio yang direkomendasikanPrompt yang direkomendasikan

Tinjauan cepat, biaya rendah

≤60 menit

Prompt sederhana dalam 50 kata

Ekstraksi konten (segmentasi audio panjang)

≤60 menit

Analisis standar (penandaan audio)

≤2 menit

Gunakan prompt terstruktur

Prompt terstruktur

Provide a detailed description of the audio.

It should explicitly include two sections:

1. A structured chronological storyline of **every noticeable audio detail**
2. A structured speech-to-text transcription, include speaker (Corresponding to the character or voice‑over in Section 1, including their accent and tone), exact spoken content, start timestamp, end timestamp, and speaking state (prosody, emotion, and style). If no speech appears, explicitly state so.

Aside from these two required components, you are free to organize any additional content in any way you find helpful. This additional content can include global information about the entire audio or localized information about specific moments. You may choose the topic of this extra content freely.

Output Format:

```
## Storyline

<xx:xx.xxx> - <xx:xx.xxx>
<an unstructured long paragraph in natural language describing what happened during this period, blending both audio details.>

<xx:xx.xxx> - <xx:xx.xxx>
<an unstructured long paragraph in natural language describing what happened during this period, blending both audio details.>

<xx:xx.xxx> - <xx:xx.xxx>
<an unstructured long paragraph in natural language describing what happened during this period, blending both audio details.>

...

...

## Speakers and Transcript

Speaker profiles:
<speaker> - <profile>
<speaker> - <profile>
<speaker> - <profile>
...

<xx:xx.xxx> - <xx:xx.xxx>
Speaker: <speaker>
State: <description>
Content: “<content>”

<xx:xx.xxx> - <xx:xx.xxx>
Speaker: <speaker>
State: <description>
Content: “<content>”

<xx:xx.xxx> - <xx:xx.xxx>
Speaker: <speaker>
State: <description>
Content: “<content>”

...

## <another section>

<paragraphs>

## <another section>

<paragraphs>

...
```

Analisis detail halus (beberapa pembicara/scene kompleks)

≤1 menit

CatatanAnda dapat melakukan segmentasi audio panjang terlebih dahulu untuk mendapatkan deskripsi detail halus.

Input multimodal gabungan

CatatanInput multimodal gabungan hanya didukung oleh seri Qwen3.5-Omni. Anda dapat memberikan data dalam beberapa modalitas, seperti kombinasi apa pun antara gambar, audio, dan teks, atau video, gambar, dan teks, dalam satu permintaan yang sama.

Contoh berikut menunjukkan cara memberikan gambar dan audio dalam satu permintaan untuk analisis multimodal.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
                    },
                },
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
                        "format": "wav"
                    },
                },
                {"type": "text", "text": "Describe the image content and tell me what the audio is about."},
            ],
        },
    ],
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus",
    messages: [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": { "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg" },
                },
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
                        "format": "wav"
                    },
                },
                { "type": "text", "text": "Describe the image content and tell me what the audio is about." }
            ]
        }
    ],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3.5-omni-plus",
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
                    }
                },
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
                        "format": "wav"
                    }
                },
                {
                    "type": "text",
                    "text": "Describe the image content and tell me what the audio is about."
                }
            ]
        }
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    },
    "modalities": ["text", "audio"],
    "audio": {"voice": "Tina", "format": "wav"}
}'

Input modalitas tunggal

Setiap permintaan berisi teks dan satu modalitas lain (video, audio, atau gambar). Semua model Qwen-Omni mendukung ini.

Input video dan teks

Berikan video sebagai daftar gambar atau file video (dengan dukungan audio).

File video (mendukung audio dalam video)

  • Jumlah file:

    • Seri Qwen3.5-Omni: Hingga 512 file menggunakan URL publik dan hingga 250 file menggunakan encoding Base64.
    • Seri Qwen3-Omni-Flash dan Qwen-Omni-Turbo: Hanya satu file yang diizinkan.
  • Ukuran file:

    • Menggunakan URL publik:

      • Seri Qwen3.5-Omni: Hingga 2 GB
      • Qwen3-Omni-Flash: Hingga 256 MB
      • Qwen-Omni-Turbo: Hingga 150 MB
    • Menggunakan encoding Base64: String Base64 yang dikodekan harus lebih kecil dari 10 MB

  • Batas durasi:

    • Seri Qwen3.5-Omni: 1 jam
    • Qwen3-Omni-Flash: 150 detik
    • Qwen-Omni-Turbo: 40 detik
  • Format file: MP4, AVI, MKV, MOV, FLV, dan WMV.

  • Informasi visual dan audio dalam file video ditagih secara terpisah.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "video_url",
                    "video_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
                    },
                },
                {"type": "text", "text": "What is the video about?"},
            ],
        },
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "video_url",
                "video_url": { "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4" },
            },
            { "type": "text", "text": "What is the video about?" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3.5-omni-plus",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "video_url",
          "video_url": {
            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
          }
        },
        {
          "type": "text",
          "text": "What is the video about"
        }
      ]
    }
  ],
    "stream":true,
    "stream_options": {
        "include_usage": true
    },
    "modalities":["text","audio"],
    "audio":{"voice":"Tina","format":"wav"}
}'

Format daftar gambar

Jumlah gambar
  • Seri Qwen3.5-Omni: Minimal 2 gambar dan maksimal 2048 gambar
  • Qwen3-Omni-Flash: Minimal 2 gambar dan maksimal 128 gambar
  • Qwen-Omni-Turbo: Minimal 4 gambar dan maksimal 80 gambar

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "video",
                    "video": [
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg",
                    ],
                },
                {"type": "text", "text": "Describe the process shown in this video"},
            ],
        }
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [{
        role: "user",
        content: [
            {
                type: "video",
                video: [
                    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
                ]
            },
            {
                type: "text",
                text: "Describe the process shown in this video"
            }
        ]
    }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3.5-omni-plus",
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "video",
                    "video": [
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
                    ]
                },
                {
                    "type": "text",
                    "text": "Describe the process shown in this video"
                }
            ]
        }
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    },
    "modalities": ["text", "audio"],
    "audio": {
        "voice": "Tina",
        "format": "wav"
    }
}'

Input audio dan teks

  • Jumlah file:

    • Seri Qwen3.5-Omni: Hingga 2048 file menggunakan URL publik dan hingga 250 file menggunakan encoding Base64.
    • Seri Qwen3-Omni-Flash dan Qwen-Omni-Turbo: Hanya satu file yang diizinkan.
  • Ukuran file:

    • Menggunakan URL publik:

      • Seri Qwen3.5-Omni: Hingga 2 GB
      • Qwen3-Omni-Flash: Hingga 100 MB
      • Qwen-Omni-Turbo: Hingga 10 MB
    • Menggunakan encoding Base64: String Base64 yang dikodekan harus lebih kecil dari 10 MB

  • Batas durasi:

    • Seri Qwen3.5-Omni: Hingga 3 jam
    • Qwen3-Omni-Flash: Hingga 20 menit
    • Qwen-Omni-Turbo: Hingga 3 menit
  • Format file: AMR, WAV, 3GP, 3GPP, AAC, dan MP3.

Contoh ini menggunakan URL audio publik. Untuk menggunakan file lokal, lihat Kirim file lokal dengan encoding Base64. Hanya keluaran streaming yang didukung untuk pemanggilan ini.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus",# Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
                        "format": "wav",
                    },
                },
                {"type": "text", "text": "What is this audio about"},
            ],
        },
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "input_audio",
                "input_audio": { "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav", "format": "wav" },
            },
            { "type": "text", "text": "What is this audio about" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3.5-omni-plus",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "input_audio",
          "input_audio": {
            "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
            "format": "wav"
          }
        },
        {
          "type": "text",
          "text": "What is this audio about"
        }
      ]
    }
  ],
    "stream":true,
    "stream_options":{
        "include_usage":true
    },
    "modalities":["text","audio"],
    "audio":{"voice":"Tina","format":"wav"}
}'

Input gambar dan teks

Model Qwen-Omni mendukung beberapa gambar per permintaan. Persyaratan gambar:

  • Jumlah gambar:

    • Menggunakan URL publik: Hingga 2048 gambar
    • Menggunakan encoding Base64: Hingga 250 gambar
  • Ukuran gambar:

    • Menggunakan URL publik:

      • Seri Qwen3.5-Omni: Setiap file gambar tidak boleh melebihi 20 MB
      • Seri Qwen3-Omni-Flash dan Qwen-Omni-Turbo: Setiap file gambar tidak boleh melebihi 10 MB
    • Menggunakan encoding Base64: String Base64 yang dikodekan harus lebih kecil dari 10 MB.

  • Lebar dan tinggi harus melebihi 10 piksel. Rasio aspek tidak boleh melebihi 200:1 atau 1:200.

  • Jenis gambar yang didukung: Lihat Pemahaman gambar dan video.

Contoh ini menggunakan URL gambar publik. Untuk menggunakan file lokal, lihat File lokal yang dikodekan Base64. Keluaran streaming wajib digunakan.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
                    },
                },
                {"type": "text", "text": "What scene is depicted in the image?"},
            ],
        },
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={
        "include_usage": True
    }
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "image_url",
                "image_url": { "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg" },
            },
            { "type": "text", "text": "What scene is depicted in the image?" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3.5-omni-plus",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
          }
        },
        {
          "type": "text",
          "text": "What scene is depicted in the image?"
        }
      ]
    }
  ],
    "stream":true,
    "stream_options":{
        "include_usage":true
    },
    "modalities":["text","audio"],
    "audio":{"voice":"Tina","format":"wav"}
}'

Pencarian web

Seri Qwen3.5-Omni mendukung pencarian web untuk mengambil informasi real-time dan melakukan penalaran.

  • Pencarian web hanya didukung dalam seri Qwen3.5-Omni. Parameter search_strategy hanya menerima agent.
  • Untuk penagihan, lihat kebijakan agent di Penagihan.

Untuk mengaktifkan pencarian web, atur enable_search dan search_strategy ke agent:

Kompatibel dengan OpenAI

# Prasyarat:
# pip install openai

import os
from openai import OpenAI

# Inisialisasi client
client = OpenAI(
    # Kunci API berbeda antara wilayah Singapura dan Beijing. Dapatkan Kunci API:https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# Kirim permintaan (dengan pencarian web diaktifkan)
try:
    completion = client.chat.completions.create(
        model="qwen3.5-omni-plus",
        messages=[{
            "role": "user",
            "content": "What is today's date and day of the week, and what important holidays are there today?"
        }],
        stream=True,
        stream_options={"include_usage": True},
        # Aktifkan pencarian web
        extra_body={
            "enable_search": True
        }
    )

    print("Model response (with real-time information):")
    for chunk in completion:
        if chunk.choices and chunk.choices[0].delta.content:
            print(chunk.choices[0].delta.content, end="")
    print()

except Exception as e:
    print(f"Request failed:{e}")
// Prasyarat:
// npm install openai

import OpenAI from "openai";

// Inisialisasi client
const openai = new OpenAI({
    // Kunci API berbeda antara wilayah Singapura dan Beijing. Dapatkan Kunci API:https://www.alibabacloud.com/help/en/model-studio/get-api-key
    apiKey: process.env.DASHSCOPE_API_KEY,
    // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});

// Kirim permintaan (dengan pencarian web diaktifkan)
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus",
    messages: [{
        "role": "user",
        "content": "What is today's date and day of the week, and what important holidays are there today?"
    }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    // Aktifkan pencarian web
    extra_body: {
        enable_search: true
    }
});

console.log("Model response (with real-time information):");

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        if (chunk.choices[0].delta.content) {
            process.stdout.write(chunk.choices[0].delta.content);
        }
    }
}
console.log();
# ======= Penting =======
# Kunci API berbeda antara wilayah Singapura dan Beijing. Dapatkan Kunci API:https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum menjalankan ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3.5-omni-plus",
    "messages": [
        {
            "role": "user",
            "content": "What is today's date and day of the week, and what important holidays are there today?"
        }
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    },
    "enable_search": true
}'

Aktifkan/nonaktifkan mode berpikir

Dalam seri Qwen-Omni, hanya model Qwen3-Omni-Flash yang merupakan model berpikir hibrida. Anda dapat menggunakan parameter enable_thinking untuk mengaktifkan atau menonaktifkan mode berpikir:

  • true
  • false (default)

Dalam mode berpikir, output audio tidak didukung.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash",
    messages=[{"role": "user", "content": "Who are you?"}],

    # Aktifkan atau nonaktifkan mode berpikir. Output audio tidak didukung dalam mode berpikir. Qwen-Omni-Turbo tidak mendukung enable_thinking.
    extra_body={'enable_thinking': True},

    # Atur modalitas output. Dua opsi yang didukung dalam mode non-thinking: ["text","audio"] dan ["text"]. Hanya ["text"] yang didukung dalam mode berpikir.
    modalities=["text"],

    # Atur suara. Parameter audio tidak didukung dalam mode berpikir.
    # audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash",
    messages: [
        { role: "user", content: "Who are you?" }
    ],

    // stream harus diatur ke True, jika tidak akan terjadi error.
    stream: true,
    stream_options: {
        include_usage: true
    },
    // Aktifkan atau nonaktifkan mode berpikir. Output audio tidak didukung dalam mode berpikir. Qwen-Omni-Turbo tidak mendukung enable_thinking.
    extra_body:{'enable_thinking': true},
    //  Atur modalitas output. Dua opsi yang didukung dalam mode non-thinking: ["text","audio"] dan ["text"]. Hanya ["text"] yang didukung dalam mode berpikir.
    modalities: ["text"],
    // Atur suara. Parameter audio tidak didukung dalam mode berpikir.
    //audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-omni-flash",
    "messages": [
        {
            "role": "user",
            "content": "Who are you?"
        }
    ],
    "stream":true,
    "stream_options":{
        "include_usage":true
    },
    "modalities":["text"],
    "enable_thinking": true
}'

Respons

data: {"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":""},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"finish_reason":null,"logprobs":null,"delta":{"content":null,"reasoning_content":"Hmm"},"index":0}],"object":"chat.completion.chunk","usage":null,"reated":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"delta":{"content":null,"reasoning_content":","},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"reated":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
......
data: {"choices":[{"delta":{"content":"Tell me"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"tem_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"delta":{"content":"!"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"systm_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":11,"completion_tokens":363,"total_tokens":374,"completion_tokens_details":{"reasoning_tokens":195,"text_tokens":168},"prompt_tokens_details":{"text_tokens":11}},"created":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}

Percakapan multi-putaran

Saat menggunakan model Qwen-Omni untuk percakapan multi-putaran, perhatikan hal berikut:

  • Pesan Asisten

    Pesan asisten dalam array pesan hanya dapat berisi data teks.

  • Pesan Pengguna

    Pesan pengguna dapat berisi teks dan satu modalitas lain. Dalam percakapan multi-putaran, Anda dapat memasukkan modalitas berbeda dalam pesan pengguna yang berbeda.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3",
                        "format": "mp3",
                    },
                },
                {"type": "text", "text": "What is this audio about"},
            ],
        },
        {
            "role": "assistant",
            "content": [{"type": "text", "text": "This audio says: Welcome to Alibaba Cloud"}],
        },
        {
            "role": "user",
            "content": [{"type": "text", "text": "Tell me about this company."}],
        },
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text"],
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3",
                        "format": "mp3",
                    },
                },
                { "type": "text", "text": "What is this audio about" },
            ],
        },
        {
            "role": "assistant",
            "content": [{ "type": "text", "text": "This audio says: Welcome to Alibaba Cloud" }],
        },
        {
            "role": "user",
            "content": [{ "type": "text", "text": "Tell me about this company." }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text"]
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "qwen3.5-omni-plus",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "input_audio",
          "input_audio": {
            "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
          }
        },
        {
          "type": "text",
          "text": "What is this audio about"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "This audio says: Welcome to Alibaba Cloud"
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Tell me about this company."
        }
      ]
    }
  ],
  "stream": true,
  "stream_options": {
    "include_usage": true
  },
  "modalities": ["text"]
}'

Mengurai data audio yang dikodekan Base64

Model Qwen-Omni menghasilkan audio sebagai data streaming yang dikodekan Base64. Selama generasi, pertahankan variabel string dan tambahkan data Base64 dari setiap potongan yang dikembalikan. Setelah generasi selesai, dekode Base64 dari string lengkap untuk mendapatkan file audio. Atau, dekode dan putar setiap potongan secara real time.

# Instruksi instalasi untuk pyaudio:
# APPLE Mac OS X
#   brew install portaudio
#   pip install pyaudio
# Debian/Ubuntu
#   sudo apt-get install python-pyaudio python3-pyaudio
#   atau
#   pip install pyaudio
# CentOS
#   sudo yum install -y portaudio portaudio-devel && pip install pyaudio
# Microsoft Windows
#   python -m pip install pyaudio

import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[{"role": "user", "content": "Who are you?"}],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

# Metode 1: Dekode setelah generasi selesai
audio_string = ""
for chunk in completion:
    if chunk.choices:
        if hasattr(chunk.choices[0].delta, "audio"):
            try:
                audio_string += chunk.choices[0].delta.audio["data"]
            except Exception as e:
                print(chunk.choices[0].delta.content)
    else:
        print(chunk.usage)

wav_bytes = base64.b64decode(audio_string)
audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
sf.write("audio_assistant_py.wav", audio_np, samplerate=24000)

# Metode 2: Dekode saat generasi berlangsung (komentari kode Metode 1 untuk menggunakan Metode 2)
# # Inisialisasi PyAudio
# import pyaudio
# import time
# p = pyaudio.PyAudio()
# # Buat aliran audio
# stream = p.open(format=pyaudio.paInt16,
#                 channels=1,
#                 rate=24000,
#                 output=True)

# for chunk in completion:
#     if chunk.choices:
#         if hasattr(chunk.choices[0].delta, "audio"):
#             try:
#                 audio_string = chunk.choices[0].delta.audio["data"]
#                 wav_bytes = base64.b64decode(audio_string)
#                 audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
#                 # Putar data audio secara langsung
#                 stream.write(audio_np.tobytes())
#             except Exception as e:
#                 print(chunk.choices[0].delta.content)

# time.sleep(0.8)
# # Bersihkan sumber daya
# stream.stop_stream()
# stream.close()
# p.terminate()
// Sebelum menjalankan:
// Untuk Windows/Mac/Linux:
// 1. Pastikan versi Node.js >= 14 telah diinstal.
// 2. Jalankan perintah berikut untuk menginstal dependensi yang diperlukan:
//    npm install openai wav
//
// Untuk menggunakan fitur pemutaran real time (Metode 2), Anda juga perlu:
// Windows:
//    npm install speaker
// Mac:
//    brew install portaudio
//    npm install speaker
// Linux (Ubuntu/Debian):
//    sudo apt-get install libasound2-dev
//    npm install speaker

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": "Who are you?"
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

// Metode 1: Dekode setelah generasi selesai
// Memerlukan instalasi: npm install wav
import { createWriteStream } from 'node:fs';  // node:fs adalah modul bawaan Node.js, tidak perlu instalasi
import { Writer } from 'wav';

async function convertAudio(audioString, audioPath) {
    try {
        // Dekode string Base64 menjadi Buffer
        const wavBuffer = Buffer.from(audioString, 'base64');
        // Buat aliran penulisan file WAV
        const writer = new Writer({
            sampleRate: 24000,  // Laju sampel
            channels: 1,        // Mono
            bitDepth: 16        // Kedalaman 16-bit
        });
        // Buat aliran output file dan buat koneksi pipe
        const outputStream = createWriteStream(audioPath);
        writer.pipe(outputStream);

        // Tulis data PCM dan akhiri penulisan
        writer.write(wavBuffer);
        writer.end();

        // Gunakan Promise untuk menunggu penulisan file selesai
        await new Promise((resolve, reject) => {
            outputStream.on('finish', resolve);
            outputStream.on('error', reject);
        });

        // Tambahkan waktu tunggu ekstra untuk memastikan integritas audio
        await new Promise(resolve => setTimeout(resolve, 800));

        console.log(`Audio file successfully saved as ${audioPath}`);
    } catch (error) {
        console.error('An error occurred during processing:', error);
    }
}

let audioString = "";
for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        if (chunk.choices[0].delta.audio) {
            if (chunk.choices[0].delta.audio["data"]) {
                audioString += chunk.choices[0].delta.audio["data"];
            }
        }
    } else {
        console.log(chunk.usage);
    }
}
// Eksekusi konversi
convertAudio(audioString, "audio_assistant_mjs.wav");

// Metode 2: Hasilkan dan putar secara real time
// Instal komponen yang diperlukan sesuai instruksi sistem Anda di atas.
// import Speaker from 'speaker'; // Impor library pemutaran audio

// // Buat instance speaker (konfigurasi sesuai parameter file WAV)
// const speaker = new Speaker({
//     sampleRate: 24000,  // Laju sampel
//     channels: 1,        // Jumlah saluran suara
//     bitDepth: 16,       // Kedalaman bit
//     signed: true        // PCM bertanda
// });
// for await (const chunk of completion) {
//     if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
//         if (chunk.choices[0].delta.audio) {
//             if (chunk.choices[0].delta.audio["data"]) {
//                 const pcmBuffer = Buffer.from(chunk.choices[0].delta.audio.data, 'base64');
//                 // Tulis langsung ke speaker untuk pemutaran
//                 speaker.write(pcmBuffer);
//             }
//         }
//     } else {
//         console.log(chunk.usage);
//     }
// }
// speaker.on('finish', () => console.log('Playback complete'));
// speaker.end(); // Panggil berdasarkan akhir sebenarnya dari aliran API

Input file lokal terenkode Base64

Saat menggunakan encoding Base64 untuk mengirim file, string Base64 yang dikodekan harus lebih kecil dari 10 MB.

Gambar

Contoh ini menggunakan file yang disimpan lokal eagle.png.

import os
from openai import OpenAI
import base64

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# Format encoding Base64
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

base64_image = encode_image("eagle.png")

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                },
                {"type": "text", "text": "What scene is depicted in the image?"},
            ],
        },
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
};
const base64Image = encodeImage("eagle.png")

const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus",// Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "image_url",
                "image_url": { "url": `data:image/png;base64,${base64Image}` },
            },
            { "type": "text", "text": "What scene is depicted in the image?" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}

Audio

Contoh ini menggunakan file yang disimpan lokal welcome.mp3.

import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf
import requests

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

def encode_audio(audio_path):
    with open(audio_path, "rb") as audio_file:
        return base64.b64encode(audio_file.read()).decode("utf-8")

base64_audio = encode_audio("welcome.mp3")

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": f"data:;base64,{base64_audio}",
                        "format": "mp3",
                    },
                },
                {"type": "text", "text": "What is this audio about"},
            ],
        },
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeAudio = (audioPath) => {
    const audioFile = readFileSync(audioPath);
    return audioFile.toString('base64');
};
const base64Audio = encodeAudio("welcome.mp3")

const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "input_audio",
                "input_audio": { "data": `data:;base64,${base64Audio}`, "format": "mp3" },
            },
            { "type": "text", "text": "What is this audio about" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}

Video

File video

Contoh ini menggunakan file yang disimpan lokal spring_mountain.mp4.

import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# Format encoding Base64
def encode_video(video_path):
    with open(video_path, "rb") as video_file:
        return base64.b64encode(video_file.read()).decode("utf-8")

base64_video = encode_video("spring_mountain.mp4")

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "video_url",
                    "video_url": {"url": f"data:;base64,{base64_video}"},
                },
                {"type": "text", "text": "What is she singing?"},
            ],
        },
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeVideo = (videoPath) => {
    const videoFile = readFileSync(videoPath);
    return videoFile.toString('base64');
};
const base64Video = encodeVideo("spring_mountain.mp4")

const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "video_url",
                "video_url": { "url": `data:;base64,${base64Video}` },
            },
            { "type": "text", "text": "What is she singing?" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}

Daftar gambar

Sebagai contoh, pertimbangkan file yang disimpan lokal football1.jpg, football2.jpg, football3.jpg, dan football4.jpg.

import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
)

# Format encoding Base64
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

base64_image_1 = encode_image("football1.jpg")
base64_image_2 = encode_image("football2.jpg")
base64_image_3 = encode_image("football3.jpg")
base64_image_4 = encode_image("football4.jpg")

completion = client.chat.completions.create(
    model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "video",
                    "video": [
                        f"data:image/jpeg;base64,{base64_image_1}",
                        f"data:image/jpeg;base64,{base64_image_2}",
                        f"data:image/jpeg;base64,{base64_image_3}",
                        f"data:image/jpeg;base64,{base64_image_4}",
                    ],
                },
                {"type": "text", "text": "Describe the process shown in this video"},
            ],
        }
    ],
    # Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
    modalities=["text", "audio"],
    audio={"voice": "Tina", "format": "wav"},
    # stream harus diatur ke True, jika tidak akan terjadi error.
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        print(chunk.choices[0].delta)
    else:
        print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
const base64Image1 = encodeImage("football1.jpg")
const base64Image2 = encodeImage("football2.jpg")
const base64Image3 = encodeImage("football3.jpg")
const base64Image4 = encodeImage("football4.jpg")

const completion = await openai.chat.completions.create({
    model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
    messages: [{
        role: "user",
        content: [
            {
                type: "video",
                video: [
                    `data:image/jpeg;base64,${base64Image1}`,
                    `data:image/jpeg;base64,${base64Image2}`,
                    `data:image/jpeg;base64,${base64Image3}`,
                    `data:image/jpeg;base64,${base64Image4}`
                ]
            },
            {
                type: "text",
                text: "Describe the process shown in this video"
            }
        ]
    }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Tina", format: "wav" }
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta);
    } else {
        console.log(chunk.usage);
    }
}

Referensi API

Untuk parameter input dan output, lihat Kompatibel dengan OpenAI - Chat.

Penagihan dan batasan laju

Aturan penagihan

Qwen-Omni ditagih berdasarkan token yang dikonsumsi di berbagai modalitas (audio, gambar, dan video). Periksa detail penagihan di konsol.

Aturan konversi token untuk audio, gambar, dan video

Audio

  • Seri Qwen3.5-Omni:

    • Rumus audio input: Total token = Durasi audio (detik) × 7
    • Rumus audio output: Total token = Durasi audio (detik) × 12,5
  • Qwen3-Omni-Flash: Untuk audio input dan output, Total token = Durasi audio (detik) × 12,5

  • Qwen-Omni-Turbo: Untuk audio input dan output, Total token = Durasi audio (detik) × 25

Jika durasi audio kurang dari 1 detik, dihitung sebagai 1 detik.

Gambar

  • Seri Qwen3.5-Omni dan Qwen3-Omni-Flash 1 token per 32×32 piksel
  • Model Qwen-Omni-Turbo: 1 token per 28×28 piksel

Untuk seri Qwen3.5-Omni, setiap gambar memerlukan minimal 24 token; untuk model lain, minimal 4 token. Maksimum default adalah 1280 token. Seri Qwen3.5-Omni mendukung parameter vl_high_resolution_images untuk meningkatkan maksimum menjadi 16384 token (Qwen-Omni-Turbo dan Qwen3-Omni-Flash tidak mendukung parameter ini). Gunakan kode berikut untuk memperkirakan jumlah token untuk satu gambar:

import math
from PIL import Image  # pip install Pillow

# ============ Konfigurasi model (modifikasi sesuai kebutuhan) ============

# Faktor gambar: 32 untuk seri Qwen3.5-Omni dan Qwen3-Omni-Flash; 28 untuk Qwen-Omni-Turbo
IMAGE_FACTOR = 32

# Token minimum: 24 untuk seri Qwen3.5-Omni; 4 untuk Qwen-Omni-Turbo dan Qwen3-Omni-Flash
MIN_TOKENS = 24

# Mode resolusi tinggi (hanya untuk seri Qwen3.5-Omni; tidak didukung oleh Qwen-Omni-Turbo atau Qwen3-Omni-Flash)
# True  → token maksimum = 16384
# False → token maksimum = 1280 (default)
VL_HIGH_RESOLUTION_IMAGES = False

# ============ Rentang piksel (dihitung otomatis dari atas) ============

MIN_PIXELS = MIN_TOKENS * IMAGE_FACTOR * IMAGE_FACTOR
MAX_PIXELS = (16384 if VL_HIGH_RESOLUTION_IMAGES else 1280) * IMAGE_FACTOR * IMAGE_FACTOR

def smart_resize(height, width, factor=IMAGE_FACTOR,
                 min_pixels=MIN_PIXELS, max_pixels=MAX_PIXELS):
    """Sejajarkan dimensi gambar ke kelipatan faktor dan skala ke [min_pixels, max_pixels]."""
    h_bar = max(factor, round(height / factor) * factor)
    w_bar = max(factor, round(width / factor) * factor)

    if h_bar * w_bar > max_pixels:
        beta = math.sqrt((height * width) / max_pixels)
        h_bar = math.floor(height / beta / factor) * factor
        w_bar = math.floor(width / beta / factor) * factor
    elif h_bar * w_bar < min_pixels:
        beta = math.sqrt(min_pixels / (height * width))
        h_bar = math.ceil(height * beta / factor) * factor
        w_bar = math.ceil(width * beta / factor) * factor

    return h_bar, w_bar

if __name__ == "__main__":
    image = Image.open("xxx/test.jpg")
    print(f"Ukuran asli: {image.width}x{image.height}")

    resized_h, resized_w = smart_resize(image.height, image.width)
    token = int(resized_h * resized_w / (IMAGE_FACTOR * IMAGE_FACTOR)) + 2
    print(f"Diubah ukuran: {resized_w}x{resized_h}, token: {token}")

Video

Token untuk file video dibagi menjadi video_tokens dan audio_tokens.

  • video_tokens

    Perhitungannya kompleks. Lihat kode berikut:

# pip install opencv-python
import math
import cv2

# ============ Konfigurasi model (modifikasi sesuai kebutuhan) ============

# Faktor gambar: 32 untuk seri Qwen3.5-Omni dan Qwen3-Omni-Flash; 28 untuk Qwen-Omni-Turbo
IMAGE_FACTOR = 32

FRAME_FACTOR = 2
FPS = 2
MAX_RATIO = 200

# Piksel minimum per frame video
VIDEO_MIN_PIXELS = 64 * IMAGE_FACTOR * IMAGE_FACTOR

# Piksel maksimum per frame video
# Seri Qwen3.5-Omni: 640 * 32 * 32
# Qwen3-Omni-Flash: 768 * 32 * 32
# Qwen-Omni-Turbo: 768 * 28 * 28
VIDEO_MAX_PIXELS = 640 * IMAGE_FACTOR * IMAGE_FACTOR

# Frame minimum yang diekstraksi: 2 untuk seri Qwen3.5-Omni dan Qwen3-Omni-Flash; 4 untuk Qwen-Omni-Turbo
FPS_MIN_FRAMES = 2

# Frame maksimum yang diekstraksi: 2048 untuk seri Qwen3.5-Omni; 128 untuk Qwen3-Omni-Flash; 80 untuk Qwen-Omni-Turbo
FPS_MAX_FRAMES = 2048

# Total piksel maksimum untuk input video
# Seri Qwen3.5-Omni: 180224 * 32 * 32
# Qwen3-Omni-Flash: 16384 * 32 * 32
# Qwen-Omni-Turbo: 16384 * 28 * 28
VIDEO_TOTAL_PIXELS = 180224 * IMAGE_FACTOR * IMAGE_FACTOR

# ============ Fungsi inti ============

def get_video_info(video_path):
    """Baca info dasar video: tinggi, lebar, total frame, fps."""
    cap = cv2.VideoCapture(video_path)
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    cap.release()
    return height, width, total_frames, fps

def smart_nframes(total_frames, video_fps):
    """Hitung jumlah frame yang akan diekstraksi berdasarkan durasi video dan fps."""
    min_frames = math.ceil(FPS_MIN_FRAMES / FRAME_FACTOR) * FRAME_FACTOR
    max_frames = min(FPS_MAX_FRAMES, total_frames) // FRAME_FACTOR * FRAME_FACTOR

    duration = total_frames / video_fps if video_fps else 0
    if duration - int(duration) > (1 / FPS):
        total_frames = math.ceil(duration * video_fps)
    else:
        total_frames = math.ceil(int(duration) * video_fps)

    nframes = total_frames / video_fps * FPS
    nframes = int(min(max(nframes, min_frames), max_frames, total_frames))
    if not (FRAME_FACTOR <= nframes <= total_frames):
        raise ValueError(f"nframes should in [{FRAME_FACTOR}, {total_frames}], got {nframes}")
    return nframes

def smart_resize(height, width, nframes, factor=IMAGE_FACTOR):
    """Skala frame video ke rentang piksel yang wajar, sejajarkan ke kelipatan faktor."""
    max_pixels = max(
        min(VIDEO_MAX_PIXELS, VIDEO_TOTAL_PIXELS / nframes * FRAME_FACTOR),
        int(VIDEO_MIN_PIXELS * 1.05)
    )
    if max(height, width) / min(height, width) > MAX_RATIO:
        raise ValueError(f"aspect ratio exceeds {MAX_RATIO}")

    h_bar = max(factor, round(height / factor) * factor)
    w_bar = max(factor, round(width / factor) * factor)

    if h_bar * w_bar > max_pixels:
        beta = math.sqrt((height * width) / max_pixels)
        h_bar = math.floor(height / beta / factor) * factor
        w_bar = math.floor(width / beta / factor) * factor
    elif h_bar * w_bar < VIDEO_MIN_PIXELS:
        beta = math.sqrt(VIDEO_MIN_PIXELS / (height * width))
        h_bar = math.ceil(height * beta / factor) * factor
        w_bar = math.ceil(width * beta / factor) * factor

    return h_bar, w_bar

# ============ Hitung token ============

if __name__ == "__main__":
    video_path = "spring_mountain.mp4"

    height, width, total_frames, video_fps = get_video_info(video_path)
    print(f"Info video: {width}x{height}, {total_frames} frame, {video_fps:.1f} fps")

    nframes = smart_nframes(total_frames, video_fps)
    resized_h, resized_w = smart_resize(height, width, nframes)

    video_tokens = int(
        math.ceil(nframes / FPS) * resized_h / IMAGE_FACTOR * resized_w / IMAGE_FACTOR
    ) + 2
    print(f"Frame yang diekstraksi: {nframes}, diubah ukuran: {resized_w}x{resized_h}, video_tokens: {video_tokens}")
  • audio_tokens

    • Seri Qwen3.5-Omni:

      • Audio input: Total token = Durasi audio (detik) × 7
      • Audio output: Total token = Durasi audio (detik) × 12,5
    • Qwen3-Omni-Flash: Untuk audio input dan output, Total token = Durasi audio (detik) × 12,5

    • Qwen-Omni-Turbo: Untuk audio input dan output, Total token = Durasi audio (detik) × 25

    Audio dengan durasi kurang dari 1 detik dihitung sebagai 1 detik.

Kuota gratis

Untuk mengklaim, menanyakan, atau menggunakan kuota gratis Anda, lihat Kuota gratis untuk pengguna baru.

Batasan laju

Untuk aturan pembatasan laju dan FAQ, lihat Pembatasan laju.

Kode error

Jika pemanggilan model gagal dan mengembalikan pesan error, lihat Kode error untuk resolusi.

Daftar suara

Untuk daftar suara model Qwen-Omni, lihat Daftar suara.