# Python: de OpenAI SDK gericht op open-weight modellen

> Roep open-weight LLM's aan vanuit Python met het officiële openai-pakket: één aanroep, async batches, streaming en de kosten per zoekopdracht.

- URL: https://llmwithcrypto.com/nl/docs/python/
- Laatst bijgewerkt: 2026-10-23
- Uitgever: LLMwithCrypto (https://llmwithcrypto.com)

Het officiële `openai`-pakket werkt zoals het is: geef onze base URL en je sleutel mee wanneer je de client aanmaakt. Al het andere in je code blijft hetzelfde, op de modelnaam na.

**Snel antwoord — Hoe roep ik LLMwithCrypto aan vanuit Python?**

Installeer het officiële pakket met `pip install openai` en maak daarna de client aan met `base_url="https://llmwithcrypto.com/api/v1"` en je sleutel uit `LLMWITHCRYPTO_API_KEY`. **LLMwithCrypto** beantwoordt `client.chat.completions.create()` zoals de OpenAI API, voor 12 open-weight modellen zoals `deepseek-v4-pro` of `gpt-oss-120b`. Streaming, async en tool calls werken zoals gebruikelijk, zoals gedocumenteerd op 23 oktober 2026.

## Wat je nodig hebt

| Eigenschap | Waarde |
| --- | --- |
| Python | 3.9 of nieuwer |
| Pakket | `openai` (officieel); `requests` voor de credits-aanroep |
| Base URL | `https://llmwithcrypto.com/api/v1` |
| Key | In de omgevingsvariabele `LLMWITHCRYPTO_API_KEY`, nooit in de code |
| Model-ids | Op de [modellenpagina](https://llmwithcrypto.com/nl/models/)] of vanuit `client.models.list()` |

## Hoe verstuur ik één zoekopdracht?

Maak de client één keer aan en hergebruik hem: hij houdt de verbinding open tussen aanroepen. De SDK leest hier zelf geen omgevingsvariabele voor de base URL, dus geef hem expliciet mee.

*one_call.py*

```python
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)

resp = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[
        {"role": "system", "content": "Answer in two sentences."},
        {"role": "user", "content": "What is a context window?"},
    ],
    max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, "in,", resp.usage.completion_tokens, "out")

```

## Hoe draai ik veel zoekopdrachten tegelijk?

Gebruik `AsyncOpenAI` met `asyncio.gather`, en een semafoor om te beperken hoeveel requests parallel lopen. Vier is een veilige start; verhoog het zolang je onder je rate limit blijft. Elk account heeft een limiet per minuut voor requests en tokens, te zien in het dashboard; vraag support en die kan worden verhoogd.

*many_calls.py*

```python
import asyncio
import os

from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)
LIMIT = asyncio.Semaphore(4)


async def summarize(text):
    async with LIMIT:
        resp = await client.chat.completions.create(
            model="deepseek-v4.1-flash",
            messages=[
                {"role": "system", "content": "Summarize in one sentence."},
                {"role": "user", "content": text},
            ],
            max_tokens=80,
        )
        return resp.choices[0].message.content


async def main():
    docs = ["First report text...", "Second report text...", "Third report text..."]
    for summary in await asyncio.gather(*(summarize(d) for d in docs)):
        print("-", summary)


asyncio.run(main())

```

## Hoe stream ik het antwoord?

Geef `stream=True` door en itereer over de chunks; elke chunk bevat een stuk tekst in `delta.content`. Met `stream_options={"include_usage": True}` bevat de laatste chunk de token-aantallen. De [streaming-pagina](https://llmwithcrypto.com/nl/docs/streaming/) legt het formaat uit.

*stream.py*

```python
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Write a haiku about latency."}],
    stream=True,
    stream_options={"include_usage": True},
    max_tokens=120,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.prompt_tokens, "in,", chunk.usage.completion_tokens, "out")

```

## Hoe weet ik wat een request kost?

Vermenigvuldig de `usage`-aantallen met de prijzen van het model per miljoen tokens. Op 23 oktober 2026 kost DeepSeek V4 Pro $1.254 per miljoen inputtokens en $3.762 per miljoen outputtokens; het voorbeeld hardcodeert die twee getallen, dus werk ze bij vanaf de [prijzenpagina](https://llmwithcrypto.com/nl/pricing/) wanneer de prijzen veranderen. Het dashboard toont de exacte kosten van elke call.

*cost.py*

```python
import os

from openai import OpenAI

# prices per 1M tokens of the models you use, copied from the pricing page
PRICES = {"deepseek-v4-pro": (1.254, 3.762)}

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)
resp = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "Give me three names for a coffee shop."}],
    max_tokens=100,
)
price_in, price_out = PRICES[resp.model]
cost = (resp.usage.prompt_tokens * price_in + resp.usage.completion_tokens * price_out) / 1_000_000
print(resp.choices[0].message.content)
print(f"cost: ${cost:.6f}")

```

## Hoe verhuis ik een bestaande OpenAI-app?

Drie wijzigingen, meestal in één bestand:

1. **De client.** Voeg `base_url` toe en lees de sleutel uit `LLMWITHCRYPTO_API_KEY` waar je `OpenAI()` of `AsyncOpenAI()` aanmaakt.
2. **De modelnamen.** Vervang elke `gpt-…`-naam door een id van de [modellenpagina](https://llmwithcrypto.com/nl/models/). Doorzoek het hele project: modelnamen verstoppen zich in configbestanden, prompts en tests.
3. **De features waarop je vertrouwt.** Chat, streaming en system prompts werken overal. Tool calling en JSON-output hangen van het model af, dus draai je bestaande tests tegen het model dat je kiest.

Al het andere blijft: je prompts, je retry-logica, je parsing van `choices` en `usage`. De [overschakelgids](https://llmwithcrypto.com/nl/guides/switch-openai-sdk-to-open-models/) loopt de details door.

## Waar moet de sleutel staan?

In de omgeving, nooit in de code. Lokaal volstaat een `.env`-bestand dat je app laadt en dat in `.gitignore` staat; gebruik in productie de secret store van je host of CI. Geef elke app of service een eigen sleutel, zodat je er één kunt intrekken zonder de andere te stoppen. Maak één API-sleutel per app, agent of teamgenoot en trek er elk ervan in vanuit het dashboard zonder de andere te raken.

## Python: veelgestelde vragen

### Probeert de SDK het zelf opnieuw?

Ja, het `openai`-pakket probeert sommige fouten standaard twee keer opnieuw (`max_retries`). De [foutenpagina](https://llmwithcrypto.com/nl/docs/errors/) vermeldt bij welke fouten een retry zinvol is.

### Kan ik mijn OpenAI-code blijven gebruiken?

Ja. De API spreekt het OpenAI chat completions-formaat: richt de OpenAI SDK, LangChain of elk OpenAI-compatibel hulpmiddel op onze base URL met je sleutel, en verander de modelnaam. De [overschakelgids](https://llmwithcrypto.com/nl/guides/switch-openai-sdk-to-open-models/) vermeldt wat je moet controleren.

### Welke Python-frameworks werken?

Alles dat een OpenAI-compatibele base URL accepteert. De [LangChain-pagina](https://llmwithcrypto.com/nl/docs/langchain/) toont LangChain en LlamaIndex.

---

LLMwithCrypto: LLMwithCrypto is een OpenAI-compatibele LLM API voor open-weight modellen — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — betaald per token vanaf een prepaid crypto-saldo, tegen 5% onder de mediane prijs van de publieke hosts. Zonder KYC: geen ID, geen selfie, geen documenten. Prompts en outputs worden niet opgeslagen.
