Migration von OpenAI/Anthropic
Für die meisten Projekte reichen drei Änderungen: Base URL, API-Key und Modellname.
OpenAI-SDK
- Python
- TypeScript
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.openhippo.io/v1", # instead of https://api.openai.com/v1
api_key=os.environ["OPENHIPPO_API_KEY"], # hk_live_...
)
response = client.chat.completions.create(
model="openhippo/gpt-oss-120b", # a model from our list
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.openhippo.io/v1", // instead of https://api.openai.com/v1
apiKey: process.env.OPENHIPPO_API_KEY, // hk_live_...
});
const response = await client.chat.completions.create({
model: "openhippo/gpt-oss-120b", // a model from our list
messages: [{ role: "user", content: "Hello!" }],
});
console.log(response.choices[0].message.content);
Viele Tools lesen die Variablen OPENAI_BASE_URL und OPENAI_API_KEY. Dann genügt:
export OPENAI_BASE_URL="https://api.openhippo.io/v1"
export OPENAI_API_KEY="$OPENHIPPO_API_KEY"
Anthropic-SDK
Open Hippo bietet die Anthropic Messages API unter /v1/messages, inklusive Streaming. Zwei Besonderheiten:
- Base URL ohne
/v1: Das SDK hängt/v1/messagesselbst an. - Key als Bearer-Token: Übergib den Key als
auth_token(Python) bzw.authToken(TypeScript), nicht alsapi_key. Das SDK schickt ihn dann im HeaderAuthorization: Bearer. SetzeANTHROPIC_API_KEYin dieser Umgebung nicht.
- Python
- TypeScript
pip install anthropic
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.openhippo.io",
auth_token=os.environ["OPENHIPPO_API_KEY"],
)
message = client.messages.create(
model="openhippo/gpt-oss-120b",
max_tokens=512,
messages=[{"role": "user", "content": "Hello!"}],
)
print(message.content[0].text)
npm install @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://api.openhippo.io",
authToken: process.env.OPENHIPPO_API_KEY,
apiKey: null,
});
const message = await client.messages.create({
model: "openhippo/gpt-oss-120b",
max_tokens: 512,
messages: [{ role: "user", content: "Hello!" }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
}
Unterschiede zu OpenAI und Anthropic
| Thema | Bei Open Hippo |
|---|---|
| Modellnamen | Eigene IDs wie openhippo/gpt-oss-120b oder Aliase wie hippo-coding, siehe Modelle. Groß-/Kleinschreibung zählt; ein unbekannter Name gibt 400 invalid_request_error. |
| Authentifizierung | Nur Authorization: Bearer <key> ist dokumentiert. |
| Unbekannte Parameter | Parameter, die ein Modell nicht unterstützt, werden stillschweigend verworfen, statt einen Fehler auszulösen. Prüfe also das Ergebnis, nicht nur den Statuscode. Siehe unten. |
| Streaming | Per SSE auf /v1/chat/completions und /v1/messages, siehe Streaming. |
| Endpunkte | Nur die Pfade aus Authentifizierung & Basics. Files, Batches, Fine-Tuning, Assistants und Bildgenerierung gibt es nicht. /v1/responses unterstützt nur das Anlegen einer Antwort. |
| Reasoning | reasoning_effort (OpenAI) und thinking (Anthropic) werden auf die Stufen des Modells abgebildet, siehe Chat. |
| Abrechnung | Prepaid-Guthaben in Euro. Ist es leer, antwortet die API mit 402. Partner-Modelle erst nach der ersten Aufladung, siehe Prepaid & Preise. |
| Limits | Budgets pro Key, Konto, Mitglied und Firma statt Tier-Limits, siehe Budgets & Limits. |
| Fehlerformat | Fehler aus Authentifizierung und Abrechnung kommen im OpenAI-Format {"error": {...}}, auch auf /v1/messages. Siehe Fehler, Limits, Retries. |
Noch nicht dokumentiert
Für diese Parameter und Funktionen haben wir das Verhalten noch nicht dokumentiert bzw. getestet. Sie können je nach Modell funktionieren oder stillschweigend verworfen werden; prüfe das Ergebnis selbst:
response_format/ JSON modestream_options.include_usageseedlogprobsnparallel_tool_calls
Fragen dazu: support@openhippo.io.