# OpenAI-compatibele Gemini endpoint ## 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. :::info title="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 ```python 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}") ``` :::warn title="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 ```python 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 ```javascript 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); ``` :::tip title="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 ```python 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 ```python 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 :::howto title="Zet een bestaande OpenAI-app om naar Gemini" 1. Maak een Gemini API-sleutel aan in Google AI Studio en zet die in een omgevingsvariabele, bijvoorbeeld `GEMINI_API_KEY`. 2. Stel de `base_url` van je OpenAI-client in op `https://generativelanguage.googleapis.com/v1beta/openai/`. 3. Vervang de modelnaam, bijvoorbeeld `gpt-4o-mini` door `gemini-2.5-flash`. 4. Draai je bestaande tests of een handmatige rooktest en controleer streaming, function calling en token-tellingen. 5. Controleer of je geen ongedekte features gebruikt zoals context caching of grounding; verplaats die naar de native SDK. ::: ```python 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" ``` :::faq ### 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. :::