Mistral merilis Medium 3.5 pada 29 April 2026. ID model API-nya adalah mistral-medium-3.5, endpoint-nya https://api.mistral.ai/v1/chat/completions, dan format request-nya dekat dengan standar OpenAI. Artinya, migrasi dari penyedia lain sering kali cukup dengan mengganti base_url dan model. Fitur utamanya: konteks 256K, native vision, function calling, dukungan 24 bahasa, dan skor 77,6% pada SWE-Bench Verified.
Panduan ini fokus pada implementasi: autentikasi, parameter penting, contoh Python dan Node.js, input visi, tool calling, JSON mode, streaming, penanganan error, dan workflow Apidog untuk menguji prompt sambil memantau biaya. Untuk model pembanding, lihat cara menggunakan API DeepSeek V4 dan cara menggunakan API GPT-5.5.
TL;DR
- Endpoint:
POST https://api.mistral.ai/v1/chat/completions. - Autentikasi: bearer token di header
Authorization. - Model:
mistral-medium-3.5. - Konteks: 256K token.
- Harga: $1,5 per juta token input dan $7,5 per juta token output.
- Mendukung reasoning, vision, native function calling, JSON terstruktur, dan 24 bahasa.
- Bobot terbuka tersedia di Hugging Face sebagai
mistralai/Mistral-Medium-3.5-128Bdi bawah Lisensi MIT yang Dimodifikasi dengan pengecualian pendapatan besar. - SWE-Bench Verified: 77,6%.
- τ³-Telecom: 91,4.
- Gunakan Apidog untuk A/B testing Medium 3.5, menyimpan API key sebagai secret, dan melihat estimasi biaya per request.
Apa yang Berubah di Medium 3.5
Medium 3 sebelumnya adalah model text-only dengan konteks 128K. Medium 3.5 berbeda: model ini menggabungkan instruction following, reasoning, coding, vision, dan function calling dalam satu model.
Perubahan penting:
Konteks naik ke 256K token
Cukup untuk basis kode berukuran sedang, dokumen panjang, atau transkrip multi-jam.Native vision
Anda bisa mengirim gambar dan teks dalam satu request tanpa pipeline OCR terpisah.Native function calling
Model dapat memilih tool dari arraytoolsdan mengembalikan argumen fungsi.Skor benchmark kuat untuk coding dan agentic workflow
SWE-Bench Verified 77,6% dan τ³-Telecom 91,4 membuatnya relevan untuk workflow agent, code review, dan tool-use multi-turn.
Dari sisi biaya, Medium 3.5 lebih mahal dibanding Medium 3. Medium 3 berada di $0,40 per juta token input dan $2,00 per juta token output. Medium 3.5 naik menjadi $1,5 input dan $7,5 output. Jadi, gunakan Medium 3.5 untuk request yang membutuhkan reasoning, vision, konteks panjang, atau tool calling yang lebih kuat.
Prasyarat
Siapkan hal berikut sebelum request pertama:
- Akun Mistral di console.mistral.ai dengan metode pembayaran aktif.
- API key yang dicakupkan ke proyek.
- SDK:
- Python:
mistralai - JavaScript/Node.js:
@mistralai/mistralai - Alternatif: SDK OpenAI dengan
base_urlMistral.
- Python:
- API client untuk menyimpan request, environment, dan secret.
curlcukup untuk percobaan pertama; untuk iterasi, gunakan Apidog.
Ekspor API key:
export MISTRAL_API_KEY="..."
Endpoint dan Autentikasi
Endpoint utama:
POST https://api.mistral.ai/v1/chat/completions
Header wajib:
Authorization: Bearer $MISTRAL_API_KEY
Content-Type: application/json
Request minimal:
curl https://api.mistral.ai/v1/chat/completions \
-H "Authorization: Bearer $MISTRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "mistral-medium-3.5",
"messages": [
{
"role": "user",
"content": "Explain dense merged checkpoints in two sentences."
}
]
}'
Response sukses berisi:
choicesusage.prompt_tokensusage.completion_tokensusage.total_tokens-
iduntuk tracking
Format error mengikuti pola OpenAI: ada objek error dengan code dan message.
Parameter Request
| Parameter | Tipe | Nilai | Catatan |
|---|---|---|---|
model |
string | mistral-medium-3.5 |
Wajib |
messages |
array | role/content | Wajib |
temperature |
float |
0 sampai 1.5
|
Rekomendasi umum: 0.7; kode: 0.3
|
top_p |
float |
0 sampai 1
|
Default 1.0
|
max_tokens |
int | 1 sampai batas konteks | Batasi output |
stream |
bool |
true / false
|
Aktifkan SSE streaming |
tools |
array | spesifikasi tool | Native function calling |
tool_choice |
string/object |
auto, any, none, atau tool spesifik |
any berarti paksa tool call |
response_format |
object | JSON mode atau JSON schema | Output terstruktur |
random_seed |
int | integer | Untuk reproduktibilitas |
safe_prompt |
bool |
true / false
|
Menambahkan safety preamble Mistral |
presence_penalty |
float |
-2 sampai 2
|
Penalti topik berulang |
frequency_penalty |
float |
-2 sampai 2
|
Penalti token berulang |
Dua perbedaan penting dari OpenAI:
OpenAI: tool_choice="required"
Mistral: tool_choice="any"
OpenAI: seed
Mistral: random_seed
Contoh Python dengan SDK Mistral
Install SDK:
pip install mistralai
Contoh request:
import os
from mistralai import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[
{"role": "system", "content": "Reply in code only."},
{"role": "user", "content": "Write a Rust function that debounces events."},
],
temperature=0.3,
max_tokens=2048,
)
print("Konten:", response.choices[0].message.content)
print("Total token:", response.usage.total_tokens)
estimated_cost = (
response.usage.prompt_tokens * 1.5 / 1_000_000
+ response.usage.completion_tokens * 7.5 / 1_000_000
)
print("Estimasi biaya USD:", estimated_cost)
Contoh Python dengan SDK OpenAI
Jika aplikasi Anda sudah menggunakan SDK OpenAI, ganti base_url dan model.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MISTRAL_API_KEY"],
base_url="https://api.mistral.ai/v1",
)
response = client.chat.completions.create(
model="mistral-medium-3.5",
messages=[
{"role": "user", "content": "Hello, Mistral."}
],
)
print(response.choices[0].message.content)
Gunakan SDK OpenAI jika Anda ingin abstraksi multi-provider. Gunakan SDK mistralai jika Anda ingin mengikuti fitur Mistral secara lebih langsung.
Contoh Node.js dengan SDK Mistral
Install:
npm install @mistralai/mistralai
Contoh:
import { Mistral } from "@mistralai/mistralai";
const client = new Mistral({
apiKey: process.env.MISTRAL_API_KEY,
});
const response = await client.chat.complete({
model: "mistral-medium-3.5",
messages: [
{
role: "user",
content: "Explain dense merged checkpoints in plain English.",
},
],
temperature: 0.7,
});
console.log(response.choices[0].message.content);
console.log("Penggunaan:", response.usage);
Contoh Node.js dengan SDK OpenAI
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.MISTRAL_API_KEY,
baseURL: "https://api.mistral.ai/v1",
});
const response = await client.chat.completions.create({
model: "mistral-medium-3.5",
messages: [
{
role: "user",
content: "Hello, Mistral.",
},
],
});
console.log(response.choices[0].message.content);
Streaming Response
Aktifkan streaming dengan stream: true.
Contoh Python:
stream = client.chat.stream(
model="mistral-medium-3.5",
messages=[
{
"role": "user",
"content": "Stream a 300-word essay on merged checkpoints.",
}
],
)
for chunk in stream:
delta = chunk.data.choices[0].delta.content or ""
print(delta, end="", flush=True)
Format streaming mengikuti pola SSE. Konten bertahap muncul di:
choices[].delta.content
Untuk pengujian interaktif, Anda juga bisa menjalankan request streaming di response viewer Apidog.
Function Calling / Tool Calling
Medium 3.5 mendukung native function calling. Definisikan tool di array tools, lalu biarkan model memilih kapan memanggilnya.
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Return the current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"unit": {"type": "string", "enum": ["c", "f"]},
},
"required": ["city"],
},
},
}
]
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[
{
"role": "user",
"content": "Weather in Lagos in Celsius?",
}
],
tools=tools,
tool_choice="auto",
)
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name)
print(tool_call.function.arguments)
Loop implementasinya:
- Kirim user message + daftar
tools. - Model mengembalikan
tool_calls. - Jalankan fungsi lokal berdasarkan
tool_call.function.name. - Tambahkan hasilnya sebagai message dengan
role: "tool". - Panggil API lagi untuk final answer.
Pola ini mirip dengan tool-use loop OpenAI.
JSON Mode dan Output Terstruktur
Untuk output yang harus mengikuti schema, gunakan response_format.
schema = {
"type": "json_schema",
"json_schema": {
"name": "release_note",
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"date": {"type": "string"},
"bullets": {
"type": "array",
"items": {"type": "string"},
},
},
"required": ["title", "date", "bullets"],
"additionalProperties": False,
},
"strict": True,
},
}
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[
{
"role": "system",
"content": "Reply with a single JSON object matching the schema.",
},
{
"role": "user",
"content": "Summarize today's Mistral Medium 3.5 release.",
},
],
response_format=schema,
)
print(response.choices[0].message.content)
Jika Anda hanya butuh JSON valid tanpa schema ketat:
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[
{"role": "user", "content": "Return three API testing tips as JSON."}
],
response_format={"type": "json_object"},
)
Untuk produksi, tetap validasi response di sisi aplikasi jika schema Anda menjadi kontrak data.
Input Visi
Medium 3.5 menerima teks dan gambar dalam satu message.
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is in this image and what is it doing wrong?",
},
{
"type": "image_url",
"image_url": "https://example.com/diagram.png",
},
],
}
],
)
print(response.choices[0].message.content)
Token gambar dihitung sebagai token input. Biaya tetap menggunakan tarif input $1,5 per juta token. Jumlah token aktual bergantung pada resolusi dan dilaporkan di usage.prompt_tokens.
Untuk workload vision bervolume tinggi:
- crop area yang relevan;
- turunkan resolusi jika masih cukup untuk menjawab;
- log token per gambar;
- batasi jumlah gambar per request.
Membuat Koleksi di Apidog
Workflow praktis untuk iterasi prompt:
- Unduh Apidog dan buat project.
- Buat environment, misalnya
Mistral. - Simpan secret:
MISTRAL_API_KEY=...
- Buat variable:
BASE_URL=https://api.mistral.ai/v1
- Buat request:
POST {{BASE_URL}}/chat/completions
- Tambahkan header:
Authorization: Bearer {{MISTRAL_API_KEY}}
Content-Type: application/json
- Simpan body request:
{
"model": "mistral-medium-3.5",
"messages": [
{
"role": "user",
"content": "Explain native function calling in one paragraph."
}
],
"temperature": 0.3,
"max_tokens": 1000
}
- Jalankan request dan cek blok
usage.
Untuk estimasi biaya per panggilan:
const usage = JSON.parse(responseBody).usage;
const cost =
usage.prompt_tokens * 1.5 / 1_000_000 +
usage.completion_tokens * 7.5 / 1_000_000;
console.log(`Estimated cost: $${cost}`);
Jika tim Anda sudah punya koleksi API DeepSeek V4, duplikasi request, ganti BASE_URL menjadi https://api.mistral.ai/v1, lalu ubah model menjadi mistral-medium-3.5. Pola yang sama bisa dipakai untuk membandingkan dengan GPT-5.5.
Penanganan Error
| Kode | Arti | Perbaikan |
|---|---|---|
400 |
Bad request | Validasi JSON, terutama messages dan tools
|
401 |
API key tidak valid | Buat ulang key di console.mistral.ai |
402 |
Payment required | Tambahkan saldo atau metode pembayaran |
403 |
Model tidak diizinkan | Cek scope project dan ejaan model |
422 |
Parameter invalid | Cek max_tokens, tool_choice, atau schema |
429 |
Rate limit | Retry dengan exponential backoff + jitter |
500 |
Server error | Retry sekali, lalu cek status |
503 |
Overload | Tunggu atau fallback ke model lain |
Contoh retry helper sederhana:
import time
import random
def retryable_status(status_code):
return status_code == 429 or 500 <= status_code < 600
def sleep_with_backoff(attempt):
base = min(2 ** attempt, 30)
jitter = random.uniform(0, 1)
time.sleep(base + jitter)
Prinsipnya:
- retry untuk
429dan5xx; - jangan retry otomatis untuk
4xxselain skenario yang memang Anda tangani; - log
request_id, status code, dan body error; - validasi schema
toolssebelum request dikirim.
Pola Kontrol Biaya
Medium 3.5 lebih mahal dari Medium 3, jadi kontrol biaya perlu masuk ke desain aplikasi.
1. Default ke model lebih murah, eskalasi bila perlu
Gunakan Medium 3 untuk request biasa. Eskalasikan ke Medium 3.5 jika:
- validator gagal;
- confidence rendah;
- butuh vision;
- butuh konteks panjang;
- butuh tool calling yang lebih kompleks.
2. Batasi max_tokens
Output adalah sisi yang lebih mahal.
{
"max_tokens": 1500
}
Jangan biarkan output terbuka tanpa batas kecuali memang diperlukan.
3. Ringkas system prompt
System prompt dikirim di setiap request. Jika Anda memangkas 2.000 token menjadi 500 token, biaya input untuk bagian itu turun 75%.
4. Log usage
Simpan minimal:
prompt_tokens
completion_tokens
total_tokens
estimated_cost_usd
model
endpoint
5. Selektif memakai vision
Untuk gambar:
- crop area penting;
- kompres jika memungkinkan;
- hindari mengirim banyak frame yang mirip;
- ukur token per gambar sejak awal.
Perbandingan dengan Tingkatan Mistral Lain
Lineup Mistral per akhir April 2026:
| Model | Konteks | Input $/Juta | Output $/Juta | Visi | Cocok untuk |
|---|---|---|---|---|---|
mistral-small |
32K | $0.10 | $0.30 | Tidak | Klasifikasi volume tinggi, chat ringan |
mistral-medium-3 |
128K | $0.40 | $2.00 | Tidak | Throughput massal, chat panjang |
mistral-medium-3.5 |
256K | $1.5 | $7.5 | Ya | Reasoning, kode, vision, agent |
mistral-large |
128K | $2.00 | $6.00 | Terbatas | Reasoning teks tingkat frontier |
Medium 3.5 adalah pilihan ketika Anda membutuhkan kombinasi konteks panjang, vision, reasoning, coding, dan tool use. Pilih model berdasarkan workload, bukan hanya nama tier.
Migrasi dari Penyedia Lain
Migrasi biasanya cukup mengganti base URL dan model.
Dari OpenAI:
- base_url="https://api.openai.com/v1"
- model="gpt-5.5"
+ base_url="https://api.mistral.ai/v1"
+ model="mistral-medium-3.5"
Dari DeepSeek:
- base_url="https://api.deepseek.com/v1"
- model="deepseek-v4-pro"
+ base_url="https://api.mistral.ai/v1"
+ model="mistral-medium-3.5"
Perhatikan dua perbedaan ini:
- tool_choice="required"
+ tool_choice="any"
- seed=123
+ random_seed=123
Sebelum production cutover:
- jalankan test suite;
- mirror traffic dalam mode shadow;
- simpan response dari provider lama dan Mistral;
- bandingkan kualitas, latency, dan biaya;
- baru alihkan traffic bertahap.
Kasus Penggunaan Dunia Nyata
Code review assistant
Konteks 256K membantu model membaca diff besar plus file sekitar. Skor SWE-Bench Verified 77,6% relevan untuk tugas patching dan reasoning kode.
QA dokumen panjang
Kontrak, RFP, policy document, dan transkrip panjang bisa dikirim dalam satu request jika masih masuk konteks 256K.
Ekstraksi data multimodal
Untuk receipt, screenshot, diagram, atau form, Anda bisa mengirim gambar dan meminta output JSON terstruktur dalam satu panggilan.
Agent dengan tool calling
Native function calling cocok untuk workflow multi-step seperti:
- cek database;
- panggil API internal;
- validasi hasil;
- minta klarifikasi;
- buat jawaban akhir.
FAQ
Apa ID model untuk Mistral Medium 3.5?
Untuk hosted API:
mistral-medium-3.5
Untuk Hugging Face checkpoint:
mistralai/Mistral-Medium-3.5-128B
Apakah Medium 3.5 kompatibel dengan OpenAI?
Dekat, tetapi tidak identik. Endpoint, header, dan sebagian besar parameter kompatibel dengan pola OpenAI. SDK OpenAI bisa digunakan dengan mengganti base_url.
Perbedaan utama:
-
tool_choice="any"menggantikanrequired; -
random_seedmenggantikanseed.
Bisakah Medium 3.5 dijalankan lokal?
Ya. Bobot tersedia di bawah Lisensi MIT yang Dimodifikasi dengan pengecualian pendapatan besar. Karena model memiliki 128B parameter, Anda membutuhkan memori GPU besar. Build GGUF terkuantisasi dari unsloth/Mistral-Medium-3.5-128B-GGUF dapat digunakan untuk setup tertentu. Pola dari cara menjalankan DeepSeek V4 secara lokal bisa dijadikan referensi.
Apakah streaming mendukung tool calling?
Ya. Streaming mengembalikan fragmen argumen tool call secara bertahap di:
delta.tool_calls
Fragmen tersebut perlu Anda akumulasi sampai menjadi JSON lengkap.
Bagaimana menghitung token input sebelum request?
Gunakan tokenizer dari paket Python mistral-common untuk hitungan yang sesuai dengan API.
Berapa konteks yang sebaiknya dipakai di produksi?
Batasnya 256K, tetapi biaya naik linear. Sebagian besar workload produksi sebaiknya tetap di bawah 32K kecuali konteks panjang benar-benar dibutuhkan.
Apakah ada tier gratis?
Mistral tidak mengiklankan tier gratis permanen, tetapi akun baru biasanya mendapat kredit percobaan kecil. Untuk eksperimen gratis pada model sebanding, lihat cara menggunakan API DeepSeek V4 secara gratis.


Top comments (0)