Waarom een OpenAI-compatibele endpoint
Veel applicaties zijn gebouwd met de OpenAI SDK of verwachten de OpenAI API-structuur (/v1/chat/completions, een messages-array, role-velden). Met de OpenAI-compatibele endpoint van Gemini gebruik je Gemini zonder je bestaande code te herschrijven: meestal volstaat het aanpassen van de base_url, de API-sleutel en de modelnaam.
Dit is handig bij migratie van OpenAI naar Gemini, bij A/B-testen tussen modellen, bij tools die alleen de OpenAI API ondersteunen, en in organisaties met bestaande OpenAI-gebaseerde infrastructuur.
Status in 2026
Ondersteuning voor de OpenAI-bibliotheken is officieel nog in beta terwijl Google de functiedekking uitbreidt. Voor de meeste tekst-, streaming-, embedding- en function-calling-scenario's werkt het stabiel, maar test je eigen flow voordat je productie omzet.
Welk model kies je
Gebruik een actueel model. De Gemini 2.0- en 1.5-modellen zijn inmiddels afgebouwd, gebruik die niet meer in nieuwe code. Stabiele keuzes per juni 2026:
| Model-id | Wanneer |
|---|---|
gemini-2.5-flash |
Snelle, goedkope standaardkeuze voor de meeste taken. |
gemini-2.5-flash-lite |
Nog goedkoper en sneller, voor eenvoudig en hoog-volume werk. |
gemini-2.5-pro |
Stabiel Pro-model voor complexe redeneertaken. |
gemini-3.5-flash |
Nieuwere Flash-generatie met sterkere redenering. |
De 3.x Pro-modellen (zoals gemini-3.1-pro-preview) zijn nog preview. Wil je een stabiel Pro-model in productie, blijf dan bij gemini-2.5-pro. Controleer de modellenpagina van de Gemini API voor de meest actuele lijst, want id's en levenscyclus veranderen regelmatig.
Configuratie met de Python OpenAI-client
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["GEMINI_API_KEY"],
base_url="https://generativelanguage.googleapis.com/v1beta/openai/"
)
response = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[
{"role": "system", "content": "Je bent een behulpzame assistent."},
{"role": "user", "content": "Wat zijn de voordelen van Python?"}
],
temperature=0.7,
max_tokens=512
)
print(response.choices[0].message.content)
print(f"Tokens: {response.usage.total_tokens}")
Gebruik je Gemini-sleutel, niet je OpenAI-sleutel
Verwar de sleutels niet. De endpoint verwacht een Gemini API-sleutel uit Google AI Studio. Een OpenAI-sleutel werkt hier niet en geeft een authenticatiefout.
Streaming via de OpenAI-client
stream = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[{"role": "user", "content": "Schrijf een kort verhaal."}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
print()
JavaScript en TypeScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.GEMINI_API_KEY,
baseURL: "https://generativelanguage.googleapis.com/v1beta/openai/",
});
const response = await client.chat.completions.create({
model: "gemini-2.5-flash",
messages: [
{ role: "system", content: "Je bent een Nederlandse taalassistent." },
{ role: "user", content: "Corrigeer de spelling in deze zin: ik ga naa huis." }
],
});
console.log(response.choices[0].message.content);
Wissel zonder code te wijzigen
Stel de base_url en de modelnaam in via configuratie of omgevingsvariabelen, niet hardcoded. Zo wissel je tussen OpenAI en Gemini door alleen je .env aan te passen, zonder je applicatiecode te raken.
Embeddings via de compatibele endpoint
embedding_response = client.embeddings.create(
model="gemini-embedding-001",
input="Python is een programmeertaal voor data science."
)
vector = embedding_response.data[0].embedding
print(f"Vectordimensies: {len(vector)}")
Het oudere text-embedding-004 is vervangen. Gebruik gemini-embedding-001 voor tekst. Voor multimodale embeddings (tekst, afbeeldingen, audio) biedt Google een nieuwer multimodaal embeddingmodel, controleer de docs voor de exacte id.
Beschikbare modellen opvragen
models = client.models.list()
for model in models.data:
print(model.id)
Wat werkt wel en niet via de compatibele laag
De OpenAI-compat-laag dekt inmiddels de meeste kernfuncties. Een paar Gemini-specifieke features bereik je alleen via de native SDK.
| Functie | Via OpenAI-compat |
|---|---|
| Tekstgeneratie | Ja |
| Streaming | Ja |
| Embeddings | Ja |
| Function calling | Ja |
| Gestructureerde uitvoer (JSON-schema) | Ja |
| Vision en afbeeldingsinvoer | Ja |
| Afbeeldings- en videogeneratie | Ja (afhankelijk van model) |
| System instruction | Ja (via de system-rol) |
| Context caching | Nee |
| Grounding met Google Zoeken | Nee |
Voor context caching, grounding en de fijnmazige Gemini-instellingen gebruik je de native google-genai SDK.
Stapsgewijze migratie van OpenAI naar Gemini
Zet een bestaande OpenAI-app om naar Gemini
- Maak een Gemini API-sleutel aan in Google AI Studio en zet die in een omgevingsvariabele, bijvoorbeeld
GEMINI_API_KEY. - Stel de
base_urlvan je OpenAI-client in ophttps://generativelanguage.googleapis.com/v1beta/openai/. - Vervang de modelnaam, bijvoorbeeld
gpt-4o-minidoorgemini-2.5-flash. - Draai je bestaande tests of een handmatige rooktest en controleer streaming, function calling en token-tellingen.
- Controleer of je geen ongedekte features gebruikt zoals context caching of grounding; verplaats die naar de native SDK.
import os
GEBRUIK_GEMINI = os.environ.get("USE_GEMINI", "false").lower() == "true"
from openai import OpenAI
if GEBRUIK_GEMINI:
client = OpenAI(
api_key=os.environ["GEMINI_API_KEY"],
base_url="https://generativelanguage.googleapis.com/v1beta/openai/"
)
standaard_model = "gemini-2.5-flash"
else:
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
standaard_model = "gpt-4o-mini"
Zijn de kosten hetzelfde als bij de native Gemini API?
Ja, de kosten worden berekend op basis van Gemini-tokenisatie en Gemini-tarieven, niet op OpenAI-tarieven. Je betaalt dus precies wat je via de native Gemini API zou betalen, zolang je een Gemini API-sleutel gebruikt.
Werkt de OpenAI Assistants API ook?
Nee, alleen de Chat Completions- en Embeddings-endpoints zijn geïmplementeerd in de compatibele laag. Assistants, Files, Fine-tuning en andere OpenAI-specifieke endpoints zijn niet beschikbaar via deze route.
Zijn er kwaliteitsverschillen ten opzichte van de native SDK?
Voor standaardgebruik is het verschil minimaal. De compat-laag zet je request intern om naar het Gemini-formaat. Voor Gemini-specifieke features zoals context caching en grounding gebruik je de native SDK.
Kan ik de endpoint gebruiken met LangChain of LlamaIndex?
Ja, configureer de base_url en api_key in de OpenAI-integratie van die frameworks. Dit werkt ook als het framework geen directe Gemini-integratie heeft.
Welk model moet ik kiezen na het afbouwen van Gemini 2.0?
Gebruik gemini-2.5-flash als standaard, gemini-2.5-flash-lite voor goedkoop hoog-volume werk en gemini-2.5-pro of gemini-3.5-flash voor zwaardere taken. De 2.0- en 1.5-modellen zijn niet meer geschikt voor nieuwe projecten.
Werkt function calling betrouwbaar via de compat-laag?
Ja, function calling en gestructureerde uitvoer met JSON-schema worden ondersteund. Combineer je beide tegelijk, controleer dan de configuratie van je client, want sommige frameworks vereisen extra instellingen om tool-calls en schema's samen te laten werken.