Error 401: apa yang harus dilakukan saat gemini-3.1-pro-preview-customtools gagal

Kode 401 berarti autentikasi gagal: permintaan tidak membawa API Key, atau kuncinya tidak valid, sudah dihapus, atau kedaluwarsa.

401 Unauthorized berarti permintaan tidak membawa kredensial yang valid. Gateway tidak dapat mengenali pemanggil, jadi permintaan tidak pernah sampai ke model upstream. Memeriksa header Authorization dan status key adalah satu-satunya jalan.

gemini-3.1-pro-preview-customtools disediakan oleh Google. Semua di halaman ini — penyebab, solusi, dan data terukur — disusun dari perilaku runtime nyata model ini di lapisan gateway.

Di gateway ini, pemicu yang paling umum adalah: Header Authorization tidak ada. Tindakan pertama yang disarankan: Kirim header sebagai Authorization: Bearer diikuti kunci Anda.

Penyebab umum

  • Header Authorization tidak ada
  • Kunci salah ketik atau ada spasi berlebih
  • Kunci dihapus atau dinonaktifkan di halaman Token
  • Kunci dari platform lain terpakai secara tidak sengaja

Cara mengatasi

  • Kirim header sebagai Authorization: Bearer diikuti kunci Anda
  • Buat kunci baru di halaman Token
  • Pastikan Anda tidak memakai kunci dari layanan lain
  • Verifikasi kunci dengan permintaan curl minimal

Contoh percobaan ulang dengan exponential backoff

Kode di bawah mencoba ulang ketika gemini-3.1-pro-preview-customtools mengembalikan 401, maksimal 5 kali, dengan waktu tunggu yang meningkat plus jitter acak agar permintaan paralel tidak mengulang bersamaan. Baca base URL dan API key dari environment variable, jangan hardcode.

import os, time, random
import requests

BASE  = os.getenv("OPENAI_BASE_URL")   # e.g. https://<your-gateway>/v1
KEY   = os.getenv("OPENAI_API_KEY")
MODEL = 'gemini-3.1-pro-preview-customtools'


def chat(messages, retries=5):
    """Retry with exponential backoff + jitter."""
    for i in range(retries):
        try:
            r = requests.post(
                BASE + "/chat/completions",
                headers={"Authorization": "Bearer " + KEY},
                json={"model": MODEL, "messages": messages, "stream": True},
                timeout=60,
            )
            if r.status_code == 429 or r.status_code >= 500:
                time.sleep(min(2 ** i + random.uniform(0, 1), 30))
                continue
            r.raise_for_status()
            return r.json()
        except requests.exceptions.Timeout:
            time.sleep(min(2 ** i + random.uniform(0, 1), 30))
    raise RuntimeError("gave up after " + str(retries) + " retries")


print(chat([{"role": "user", "content": "hello"}]))

Data penting model ini

Endpoint APIhttps://api.airai.cc/v1
Kompatibel OpenAIOpenAI-compatible
VendorGoogle
Konteks1M
KemampuanReasoning, Tools, Files, Vision, Audio
Format APIopenai, openai-response, openai-response-compact, anthropic, gemini, openai-alpha-search
Rumus penagihanp * 2 + cr * 0.2 + c * 12) : tier("200k_plus", p * 4 + cr * 0.4 + c * 18

FAQ

Apakah ganti ke model lebih kecil mengurangi 401?

Siapkan juga satu model cadangan. Model dari Google ini punya beberapa node upstream yang bisa diganti gateway. Siapkan model cadangan yang lebih ringan agar alur utama tidak terputus. Taruh nama model di konfigurasi, sehingga ganti upstream tidak perlu mengubah kode.

Apakah retry perlu menambahkan jitter acak?

Biasanya kode bisnis tidak perlu diubah, cukup atur ritme pemanggilan. Dengan penagihan p * 2 + cr * 0.2 + c * 12) : tier("200k_plus", p * 4 + cr * 0.4 + c * 18, permintaan yang gagal tidak dihitung dalam penggunaan. Gunakan exponential backoff untuk error yang bisa diulang, dan kembalikan error segera untuk sisanya.

Bagaimana memantau 401 di produksi?

Kelompokkan error berdasarkan waktu dan node; polanya biasanya langsung terlihat. Model ini dilayani oleh Google, sehingga status upstream mengikuti pengumuman penyedia. Catat request ID pada setiap kegagalan — lebih berguna daripada kode status.

Apakah saya ditagih saat gemini-3.1-pro-preview-customtools mengembalikan 401?

Hanya output yang sudah dihasilkan yang ditagihkan; bagian yang gagal tidak. Penagihan mengikuti p * 2 + cr * 0.2 + c * 12) : tier("200k_plus", p * 4 + cr * 0.4 + c * 18, tanpa output berarti tanpa tagihan. Dengan penagihan p * 2 + cr * 0.2 + c * 12) : tier("200k_plus", p * 4 + cr * 0.4 + c * 18, permintaan yang gagal tidak dihitung dalam penggunaan. Periksa saldo dan batas laju di konsol dulu, baru periksa kodenya. Saat memperkirakan biaya dari p * 2 + cr * 0.2 + c * 12) : tier("200k_plus", p * 4 + cr * 0.4 + c * 18, sertakan juga anggaran percobaan ulang.

Error lain pada model ini

Model lain dengan error yang sama

Data diperbarui: 2026-10-10 18:35

Dukungan teknisDukungan langsung
Kembali ke atas