Kasimir Docs DEEN Zur App →

API: Embeddings

OpenAI-kompatibler Embeddings-Endpunkt der Kasimir Public API für 1024-dimensionale Vektor-Embeddings.

Der Embeddings-Endpunkt der Kasimir Public API wandelt Text in numerische Vektor-Embeddings um, die du für semantische Suche, Clustering, Klassifikation oder eigene RAG-Pipelines verwenden kannst. Die Schnittstelle ist wire-kompatibel zur OpenAI Embeddings API: Du kannst das offizielle OpenAI Python SDK (oder jeden OpenAI-kompatiblen Client) unverändert verwenden und lediglich base_url und api_key auf Kasimir umstellen. Intern wird die Anfrage durch den DSGVO-konformen LiteLLM-Proxy an das eingebundene Embedding-Modell weitergeleitet, mit Mandanten-Governance (Modell-Freigabe, EU-Gate) und Verbrauchsabrechnung pro Aufruf.

Endpunkt

Methode

POST

URL

https://kasimir.ai/api/v1/embeddings

Base URL

https://kasimir.ai/api/v1

Content-Type

application/json

Auth

Authorization: Bearer <api-key>

Benötigter Scope

chat:write

ℹ️

OpenAI-kompatibel Setze in einem beliebigen OpenAI-Client base_url = "https://kasimir.ai/api/v1" und api_key = "<dein-kasimir-key>". Request- und Response-Form entsprechen POST /v1/embeddings von OpenAI.

Authentifizierung

Alle Aufrufe werden über einen Firmen-API-Key authentifiziert, der im Header Authorization: Bearer <key> mitgesendet wird.

  • Keys werden von Workspace-Inhabern oder -Admins unter Verwaltung → Zugriff (/administration/access) erzeugt.

  • Das Format ist kasi_ gefolgt von 32 Zeichen (z. B. kasi_a3f9k2m7q4t6w8x1c5v9b2n4z6s8d0f2). Der Klartext wird nur einmal bei der Erstellung angezeigt — danach speichert Kasimir lediglich einen SHA-256-Hash.

  • Neue Keys erhalten standardmäßig die Scopes chat:read und chat:write. Für Embeddings ist chat:write zwingend erforderlich.

  • Widerrufene Keys (revoked_at gesetzt) werden mit 401 abgewiesen.

⚠️

Key niemals im Client-Code Behandle den API-Key wie ein Passwort. Verwende ihn ausschließlich serverseitig und committe ihn nie in ein Repository. Bei Verlust den Key in /administration/access widerrufen und einen neuen erzeugen.

Request

Header

Wert

Pflicht

Authorization

Bearer <api-key>

ja

Content-Type

application/json

ja

Body-Parameter

Parameter

Typ

Pflicht

Beschreibung

model

string

ja

Der öffentliche Modell-Slug eines Embedding-Modells, z. B. self-hosted-bge-m3. Verfügbare Slugs liefert GET /api/v1/models.

input

string | string[]

ja

Der zu embeddende Text. Entweder ein einzelner String oder ein Array von Strings für Batch-Embedding.

💡

Zusätzliche Felder werden durchgereicht Der Body wird mit passthrough-Semantik validiert: Zusätzliche OpenAI-kompatible Felder (z. B. encoding_format, dimensions, sofern das Upstream-Modell sie unterstützt) werden unverändert an den LiteLLM-Proxy weitergegeben. Nur model und input sind verpflichtend und werden validiert.

Response

Die Antwort entspricht dem OpenAI-Embeddings-Schema. Das Feld model in der Antwort enthält den Kasimir-Slug (nicht die interne Upstream-Modell-ID).

Feld

Typ

Beschreibung

object

string

Immer "list".

data

array

Liste der Embedding-Objekte (siehe unten).

model

string

Der angeforderte Kasimir-Modell-Slug.

usage

object

Token-Verbrauch: prompt_tokens, total_tokens.

Jedes Element in data:

Feld

Typ

Beschreibung

object

string

Immer "embedding".

index

number

Position im input-Array.

embedding

number[]

Der Vektor. Beim Standard-Modell 1024 Dimensionen.

ℹ️

Vektor-Dimension Das eingebundene Embedding-Modell self-hosted-bge-m3 (BGE-M3, EU-gehostet) liefert 1024-dimensionale Vektoren. Die Kasimir-RAG-Pipeline ist auf vector(1024) festgelegt; ein Modellwechsel auf eine andere Dimension erfordert eine neue Schema-Migration.

Beispiele

curl — einzelner Text

curl https://kasimir.ai/api/v1/embeddings \
  -H "Authorization: Bearer kasi_DEIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "self-hosted-bge-m3",
    "input": "Die DSGVO regelt den Umgang mit personenbezogenen Daten."
  }'

curl — Batch (mehrere Texte)

curl https://kasimir.ai/api/v1/embeddings \
  -H "Authorization: Bearer kasi_DEIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "self-hosted-bge-m3",
    "input": [
      "Erster Absatz zum Embedden.",
      "Zweiter Absatz zum Embedden."
    ]
  }'

OpenAI Python SDK

from openai import OpenAI

client = OpenAI(
    base_url="https://kasimir.ai/api/v1",
    api_key="kasi_DEIN_API_KEY",
)

resp = client.embeddings.create(
    model="self-hosted-bge-m3",
    input="Die DSGVO regelt den Umgang mit personenbezogenen Daten.",
)

vector = resp.data[0].embedding
print(len(vector))   # 1024
print(resp.usage.prompt_tokens)

Batch mit dem Python SDK

texts = [
    "Erster Absatz zum Embedden.",
    "Zweiter Absatz zum Embedden.",
]

resp = client.embeddings.create(model="self-hosted-bge-m3", input=texts)

for item in resp.data:
    print(item.index, len(item.embedding))

Beispiel-Antwort

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [0.0123, -0.0456, 0.0789, "...weitere 1021 Werte..."]
    }
  ],
  "model": "self-hosted-bge-m3",
  "usage": {
    "prompt_tokens": 12,
    "total_tokens": 12
  }
}
POST /api/v1/embeddings Request lifecycle: auth → gate → budget → proxy → model → response Client curl / OpenAI SDK POST /v1/embeddings Authorization: Bearer kasi_… { input, model } Kasimir API Gateway 1 Authenticate verify kasi_ key hash scope: chat:write 2 Resolve model slug → bge-m3 EU-hosting gate 3 Assert budget monthly spend cap tenant ledger lookup all checks pass → forward LiteLLM proxy / router one wire format BGE-M3 embedding model 1024-dim vec 200 OK → { data:[ embedding ] } api_usage ledger +1 row: tokens · cost · model write
Anfrageweg eines Embeddings-Aufrufs: Auth, Modell-Governance und Budget-Prüfung vor dem LiteLLM-Proxy, danach Metering.

Modelle auflisten

Welche Slugs für deinen Workspace freigegeben sind, ermittelst du über den Modell-Endpunkt. Er gibt Chat- und Embedding-Modelle zurück (gefiltert nach Mandanten-Freigabe und EU-Gate):

curl https://kasimir.ai/api/v1/models \
  -H "Authorization: Bearer kasi_DEIN_API_KEY"
client.models.list()

Fehler

Fehler werden im OpenAI-Fehlerformat zurückgegeben, damit Standard-SDKs sie normal behandeln:

{
  "error": {
    "message": "Missing scope: chat:write",
    "type": "permission_error",
    "code": null
  }
}

Der HTTP-Statuscode bestimmt das type-Feld:

Status

error.type

Ursache

400

invalid_request_error

Ungültiger Body (fehlendes model/input oder falscher Typ).

401

authentication_error

Kein Bearer-Token, ungültiger Key oder widerrufener Key.

402

insufficient_quota

Monatsbudget des Workspace erreicht.

403

permission_error

Fehlender Scope (chat:write) oder nicht freigegebenes Nicht-EU-Modell.

404

not_found_error

Modell-Slug unbekannt, inaktiv oder für den Workspace deaktiviert.

>= 500

api_error

Upstream- bzw. Proxy-Fehler (z. B. 502 Upstream error: …).

⚠️

Budget-Grenze (402) Hat der Workspace ein monthly_budget_eur gesetzt und die Summe aus API- und In-App-Verbrauch des laufenden Kalendermonats erreicht es, antwortet jeder Aufruf mit 402. Ein nicht gesetztes oder auf ≤ 0 stehendes Budget bedeutet „unbegrenzt".

Governance & Abrechnung

  • Modell-Freigabe: Es gelten dieselben Regeln wie im In-App-Modell-Picker — Workspace-Scope, active, Verwendungszweck embedding, die Deny-Liste disabled_model_slugs sowie das EU/Nicht-EU-Gate (allow_non_eu_models).

  • EU-Gate: Nicht-EU-Modelle (eu_hosted = false) werden mit 403 abgelehnt, solange der Workspace sie nicht ausdrücklich freigeschaltet hat. Das Standard-Embedding-Modell ist EU-gehostet.

  • Metering: Jeder erfolgreiche Aufruf wird im Verbrauchs-Ledger (api_usage) erfasst — mit prompt_tokens aus der Upstream-Antwort und den EUR-Kosten gemäß den Modell-Raten. Das Metering ist „best-effort" und blockiert die Antwort nie.

💡

DSGVO / Datenresidenz Der Standard-Embedding-Slug self-hosted-bge-m3 ist als EU-gehostet markiert. Wenn Datenresidenz für dich kritisch ist, prüfe vor dem Embedden personenbezogener Daten über GET /api/v1/models, dass dein gewähltes Modell EU-gehostet ist.