Episode ini melebarkan jangkauan model: mengenal paket provider seperti langchain-openai, langchain-anthropic, dan langchain-groq, memakai antarmuka BaseChatModel yang seragam, lalu menyusun fallback antar model, retry policy, timeout, dan model profiles untuk aplikasi yang tangguh.

Di episode 15 kalian mengamankan agent dengan threat model dan mitigasi berlapis. Ada satu aspek keamanan yang sering dilupakan dalam pemilihan model: ketergantungan pada satu provider. Jika satu penyedia API turun, atau biayanya tiba-tiba membengkak, seluruh aplikasi ikut terdampak. Arsitektur yang sehat tidak menggantungkan nyawanya pada satu vendor model.
Episode 16 mengajarkan fleksibilitas itu. Kita akan memetakan paket provider resmi LangChain, memakai antarmuka BaseChatModel yang seragam sehingga satu kode bisa berganti provider, lalu menyusun fallback antar model, retry policy dan timeout, serta menutup dengan model profiles yang menyederhanakan pengelolaan banyak model. Pada akhir episode, aplikasi kalian bisa gagal di satu provider tanpa gagal di seluruhnya.
Salah satu desain paling penting LangChain v1 adalah arsitektur core/integrations yang sudah kalian kenal dari episode 2: langchain-core berisi primitif abstrak, sementara dukungan tiap penyedia hidup di paket terpisah. Ini berarti kalian hanya menginstal yang benar-benar dipakai, dan integrasi bisa dirilis lebih cepat daripada menunggu rilis inti. Paket provider utama:
langchain-openai — OpenAI, termasuk model terbaru dan embedding.langchain-anthropic — Claude dari Anthropic.langchain-groq — akses cepat ke model open-weight via Groq.langchain-mistralai — model Mistral (Mistral Large, Nemo, dan lain-lain).langchain-fireworks — hosting model berkecepatan tinggi dari Fireworks.langchain-xai — model Grok dari xAI.langchain-perplexity — akses ke model berbasis pencarian Perplexity.langchain-openrouter — satu API untuk ratusan model dari banyak vendor.pip install langchain-openai langchain-anthropic langchain-groq
pip install langchain-mistralai langchain-fireworks langchain-xai
pip install langchain-perplexity langchain-openrouterSemua paket ini mengembalikan objek dengan antarmuka yang sama — itulah yang membuat perpindahan provider terasa ringan. Setiap paket membaca kredensialnya dari environment variable yang bersesuaian (OPENAI_API_KEY, ANTHROPIC_API_KEY, GROQ_API_KEY, dan seterusnya), sesuai pola secrets via env dari episode 15.
Meskipun backend berbeda, seluruh kelas model chat di LangChain menurun dari BaseChatModel — kontrak tunggal yang menjamin perilaku yang sama: invoke, ainvoke, stream, batch, bind_tools, hingga with_structured_output. Perhatikan keseragaman ini di tiga provider berbeda:
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_groq import ChatGroq
openai_model = ChatOpenAI(model="gpt-5.2", temperature=0.3)
anthropic_model = ChatAnthropic(model="claude-opus-5", temperature=0.3)
groq_model = ChatGroq(model="llama-3.3-70b-versatile", temperature=0.3)
for model in [openai_model, anthropic_model, groq_model]:
jawaban = model.invoke("Sebutkan satu bahasa pemrograman.")
print(model.__class__.__name__, jawaban.content)Kode di atas berjalan tanpa perubahan pada tiga provider berbeda. Bedanya di permukaan: nama parameter model, nama model yang valid, dan dukungan fitur (misalnya, tidak semua model mendukung tool calling atau structured output). Inilah kekuatan utama abstraksi LangChain — kalian belajar sekali, memakai di mana saja. Untuk mengetes lintas provider secara cepat, cukup ganti satu objek model di seluruh pipeline.
Info
"Seragam" bukan berarti "identik". Fitur tertentu (vision, tool calling, streaming events) ada di satu provider tapi belum tentu di provider lain. Selalu cek dokumentasi paket dan catatan rilis sebelum berasumsi fitur pindah bersama antarmuka.
BaseChatModel mendukung fallback: daftar model cadangan yang dipakai berurutan jika model utama error. Ini adalah pertahanan langsung terhadap downtime provider. Dengan with_fallbacks, satu objek chain bisa mencoba model utama, lalu otomatis beralih ke cadangan saat model utama gagal:
primary = ChatOpenAI(model="gpt-5.2", temperature=0.3)
backup = ChatAnthropic(model="claude-opus-5", temperature=0.3)
chat = primary.with_fallbacks([backup])
hasil = chat.invoke("Jelaskan cara kerja fallback model.")Jika gpt-5.2 error (rate limit, timeout, service down), LangChain otomatis mencoba claude-opus-5. Fallback bisa lebih dari satu — urutan list adalah urutan prioritas. Ini berguna juga untuk strategi biaya: model mahal sebagai utama, model murah sebagai cadangan saat utama over-budget. Fallback berlaku di semua level: dari satu invoke sederhana hingga chain LCEL penuh dan agent — karena with_fallbacks mengembalikan objek yang tetap bertipe Runnable.
Error provider sering bersifat sementara: rate limit sesaat, koneksi yang putus, atau overload singkat. Retry menangani yang sementara ini; timeout menangani yang menggantung. Kombinasi keduanya membuat aplikasi tidak menyerah terlalu cepat, sekaligus tidak menunggu selamanya:
robust = primary.with_retry(
stop_after_attempt=3,
wait_exponential_jitter=True,
)
timeout_model = primary.with_timeout(seconds=30)
chain = (prompt | timeout_model | StrOutputParser())wait_exponential_jitter=True membuat jeda antar percobaan naik secara eksponensial dengan variasi acak — variasi ini mencegah efek "thundering herd" ketika banyak klien gagal bersamaan lalu mencoba ulang serentak. Nilai standar yang masuk akal: tiga percobaan dengan backoff, timeout 30-60 detik tergantung latensi model. Kombinasikan retry dan timeout dengan fallback secara berurutan: retry beberapa kali pada provider utama, lalu menyerah dan pindah ke cadangan.
Warning
Retry tanpa batas sama berbahayanya dengan timeout tanpa retry. Pasang batas percobaan dan selalu sertakan timeout di lapisan pemanggilan. Untuk request yang tidak idempoten, pertimbangkan juga efek retry: panggilan yang berhasil di sisi provider tapi gagal di sisi kalian bisa dieksekusi dua kali.
Semakin banyak provider, semakin banyak kombinasi parameter yang harus diingat: temperature yang pas untuk tiap model, max token, nama model yang valid, dan seterusnya. Model profiles (dikenal juga sebagai harness profiles) memusatkan pengaturan ini: satu nama profil menyandikan semua parameter untuk satu varian model.
from langchain import profiles
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
profile = profiles.get_harness_profile("openai.gpt-5.2")
model_a = ChatOpenAI(**profile)
profile_lain = profiles.get_harness_profile("anthropic.claude-opus-5")
model_b = ChatAnthropic(**profile_lain)get_harness_profile mengembalikan dict parameter yang siap disebarkan ke constructor model dengan operator unpacking. Pindah ke model baru cukup mengganti satu string nama profil — parameter yang tepat ikut terpasang, dan tim tidak lagi menyimpan konfigurasi model berserakan di setiap file. Kombinasi paling kuat di produksi: model profiles untuk konfigurasi, with_fallbacks untuk ketahanan, retry untuk gangguan sementara, dan LangSmith (episode 19) untuk memantau bagaimana tiap model berperilaku di kondisi nyata.
Episode 16 melepaskan kalian dari ketergantungan pada satu model: memahami peta paket provider (langchain-openai, langchain-anthropic, langchain-groq, hingga langchain-openrouter), memanfaatkan antarmuka BaseChatModel yang seragam agar satu kode melayani banyak backend, menyusun fallback antar model untuk ketahanan, memasang retry policy dan timeout untuk menangani gangguan sementara, serta merapikan konfigurasi dengan model profiles. Aplikasi kalian kini tidak lagi menaruh semua telur di satu keranjang vendor.
Inti yang harus dibawa pulang:
BaseChatModel menjamin invoke, stream, bind_tools, dan with_structured_output berlaku di semua provider.with_fallbacks mengalihkan kegagalan ke model cadangan secara otomatis dan bisa dirantai.Fondasi per-model yang kokoh ini akan kita gunakan untuk hal yang lebih besar. Di episode 17 kita mendalami LangGraph Lanjutan: typed state dengan reducers, checkpointing untuk time travel, subgraphs, dan persistence dengan langgraph-checkpoint-postgres beserta namespace dan TTL. Sampai jumpa di sana!