Categorieën bekijken

LM Studio API

Inleiding #

Wanneer je LM studio hebt geïnstalleerd, kan je via de ingebouwde server eenvoudig communiceren via een HTTP API, daarmee zijn de mogelijkheden onbeperkt en kan je dus de LLM aanspreken vanuit elke computer, app of IOT device!

Voorbereiding (Linux / WSL) #

WSL #

WSL is een (ubuntu) Linux omgeving in Windows, deze kan men installeren via de APP store.

Zit je in een (verse) WSL prompt dan moet men eerst nog PIP (python package manager) en VENV (python virtual environment) installeren:

sudo apt install -y python3-pip python3-venv

VENV aanmaken #

Python werkt tegenwoordig met virtual environments om conflicten met bibliotheken tegen te gaan en uit te sluiten.

Maak een virtual environment aan met het commando:

python3 -m venv ~/venv

en activeer deze:

source ~/venv/bin/activate

Python OpenAI module installeren #

pip3 install openai

LM Studio – Download en laad een model in #

Download en laad een model in (bv Mistral 3 8B Q4_K_M)

Eenmaal het model geladen ga naar de “developers” TAB en zet daar “running” aan (op poort 1234)

Ps als je de server uit en weer aan zet zie je in het debug/log onderaan zoiets als:

[INFO] [LM STUDIO SERVER] Supported endpoints:
[INFO] [LM STUDIO SERVER] ->	GET  http://192.168.2.28:1234/v1/models
[INFO] [LM STUDIO SERVER] ->	POST http://192.168.2.28:1234/v1/responses
[INFO] [LM STUDIO SERVER] ->	POST http://192.168.2.28:1234/v1/chat/completions
[INFO] [LM STUDIO SERVER] ->	POST http://192.168.2.28:1234/v1/completions
[INFO] [LM STUDIO SERVER] ->	POST http://192.168.2.28:1234/v1/embeddings


Test API verbinding #

Test de verbinding met LM Studio via een browser ga naar localhost of het server ip om de modellijst te krijgen met de volgende URL:

http://localhost:1234/v1/models

of

http://192.168.2.28:1234/v1/models

TIP: Gebruik het IP adres (ipv localhost) ook als je vanuit een WSL omgeving wil comuniceren.

De output is een lijst met beschikbare modellen in LM studio:

{
  "data": [
    {
      "id": "ministral-3-8b-instruct-2512",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "mistralai/ministral-3-14b-reasoning",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "ministral-3-14b-instruct-2512",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "text-embedding-nomic-embed-text-v1.5",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "deepseek/deepseek-r1-0528-qwen3-8b",
      "object": "model",
      "owned_by": "organization_owner"
    }
  ],
  "object": "list"
}

Script – Vraag en response #

Hieronder vind je een eenvoudig python script die een vraag stelt via de LM Studio API en het antwoord in de console uitprint:

from openai import OpenAI

client = OpenAI(
    base_url="http://192.168.2.28:1234/v1",
    api_key="lm-studio"
)

MODEL = "lmstudio-community/ministral-3-8b-instruct-2512"

resp = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "user", "content": "Wat is de hoofdstad van Nederland"}
    ]
)

print(resp.choices[0].message.content)

Voorbeeld output:

De hoofdstad van **Nederland** is **Amsterdam**.

Hoewel Amsterdam de officiële hoofdstad is, heeft het land ook een **politieke hoofdstad**: **Den Haag**. Dit is waar de regering en het parlement zitten.

Zou je meer informatie willen over deze steden?

of:

Hoewel Amsterdam de officiële hoofdstad is, heeft het land **Den Haag** als zittende hoofdstad (de plaats waar de regering en het parlement gevestigd zijn). Amsterdam fungeert echter wel als cultureel, historisch en economisch centrum.

Wil je meer informatie over een specifiek aspect?

Ps. zorg er wel voor dat je een model ingeladen hebt anders krijg je deze foutmelding:

openai.BadRequestError: Error code: 400 - {'error': {'message': "No models loaded. Please load a model in the developer page or use the 'lms load' command.", 'type': 'invalid_request_error', 'param': 'model', 'code': None}}


Script Vraag en Response (streaming) #

Wil je streaming tekst voorbij zien komen zet dan Stream=True en gebruik als voorbeeld onderstaand script:

from openai import OpenAI
import sys

client = OpenAI(
    base_url="http://192.168.2.28:1234/v1",
    api_key="lm-studio"
)

MODEL = "lmstudio-community/ministral-3-8b-instruct-2512"

stream = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "user", "content": "Wat is de hoofdstad van Nederland"}
    ],
    stream=True
)

# Stream woord/token voor woord naar de terminal
for chunk in stream:
    delta = chunk.choices[0].delta

    if delta.content:
        print(delta.content, end="", flush=True)

print()


Script – Vraag en response van een afbeelding #

Hieronder een script en afbeelding om het AI model de afbeelding te laten analyseren

Sla het bestand op als bv orctest.jpg en plaats deze in dezelfde folder als het script.

Het script om de afbeelding te analyseren moet als Base64 verzonden worden (pas het IP adres aan naar eigen situatie):

from openai import OpenAI
import base64

client = OpenAI(
    base_url="http://192.168.2.28:1234/v1",
    api_key="lm-studio-or-mistral-key",
)

MODEL = "ministral-8b-2512"
IMAGE = "ocrtest.jpg"

# 1) Afbeelding inlezen en naar base64 encoderen
with open(IMAGE, "rb") as f:
    image_bytes = f.read()
image_b64 = base64.b64encode(image_bytes).decode("utf-8")

# 2) Versturen als data-URL
resp = client.chat.completions.create(
    model=MODEL,
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Wat zie je op deze foto?"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/png;base64,{image_b64}"
                    },
                },
            ],
        }
    ],
    max_tokens=256,
)

print(resp.choices[0].message.content)

Voorbeeld output:

Op deze foto zie ik een tekstbeeld met de volgende zin:
**"The quick brown fox jumped over the 5 lazy dogs!"**

Het is een klassieke zinsconstructie die vaak wordt gebruikt om het alfabet te oefenen of als testzin voor typersoftware en lettertypes. De zin bevat alle letters van het Engelse alfabet (a-z).

of:

Op deze foto zie je een tekstbeeld met de klassieke **ingelotte zin**:
*"The quick brown fox jumped over the five lazy dogs!"*

Het is een bekende zinsconstructie die vaak wordt gebruikt om het typen van letters te oefenen of als voorbeeldzin voor het testen van fonts en toetsers. De zin bevat alle letters van het Engelse alfabet (a-z).

Ps. installeer en gebruik hiervoor wel een LLM model die “dat”vision” ondersteunt (zoals Mistral 3), anders krijg je een foutmelding zoals:

openai.BadRequestError: Error code: 400 - {'error': 'Model does not support images. Please use a model that does.'}