Migrering fra OpenAI SDK
Skift base-URL og nøgle. Din OpenAI SDK-kode kører på Stav med routing, et suverænitetsniveau og en forespørgselslog oveni.
Skift to linjer
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["STAV_API_KEY"], # sk_stav_live_...
base_url="https://api.stav.ai/v1", # var https://api.openai.com/v1
)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.STAV_API_KEY,
baseURL: "https://api.stav.ai/v1",
});
Disse fungerer gennem SDK'et:
| SDK-kald | Endepunkt |
|---|---|
chat.completions.create (inkl. streaming, værktøjer, response_format) | POST /v1/chat/completions |
responses.create | POST /v1/responses |
embeddings.create | POST /v1/embeddings |
audio.transcriptions.create | POST /v1/audio/transcriptions — angiv en model; se Taleradskillelse |
audio.speech.create | POST /v1/audio/speech — angiv en model; lyden streames tilbage; se Tekst-til-tale |
models.list, models.retrieve | GET /v1/models |
Modelnavne
Katalog-id'er er modelskaber/model. Fire former fungerer i model:
model="auto" # Smart Router, dit arbejdsområdes standardrouter
model="@acme/eu-only" # en navngiven router
model="openai/gpt-4o-mini" # en model; routeren vælger et leverandørendepunkt
model="gpt-4o-mini" # kun navnet, løses hvis det er entydigt
Et navn alene løses gennem modellens kaldenavne og derefter gennem et unikt match på det sidste led. Hvis to modelskabere deler det, løses det ikke til noget — brug det fulde id. client.models.list() returnerer det, din nøgle har adgang til.
Ved en første migrering er auto som regel det rigtige valg: du får automatisk skift og et suverænitetsniveau uden at hårdkode en model.
Adgange
En nøgle uden adgange kan kalde alt. En nøgle med adgange kræver én per endepunkt:
| Adgang | Endepunkt |
|---|---|
inference:chat | /v1/chat/completions, /v1/responses |
inference:messages | /v1/messages, /v1/messages/count_tokens |
inference:embeddings | /v1/embeddings |
inference:audio | /v1/audio/transcriptions, /v1/audio/speech |
inference:decisions | /v1/decisions |
inference:rerank | /v1/rerank |
inference:models | /v1/models |
At liste modeller er sin egen adgang. OpenAI SDK'et og mange IDE'er og agentværktøjer kalder /v1/models først. Hvis du begrænser en nøgles adgang, skal du inkludere inference:models sammen med adgangen til det API, du bruger.
Hvad der opfører sig anderledes
Stav afviser det, vi ikke kan overholde, ved navn, i stedet for at fjerne det. Forvent et par 400-fejl på første dag.
| OpenAI-adfærd | På Stav |
|---|---|
| Ukendte inddatafelter ignoreres | 400 med navnet på feltet |
| Ikke-understøttet parameter ignoreres lydløst | 400 med navnet på parameteren og modellen |
n > 1 | 400. Send parallelle forespørgsler |
max_completion_tokens | Accepteres, samme som max_tokens. Hvis begge sendes med forskellige værdier, giver det en 400 |
store: false | Accepteres (Stav opbevarer aldrig chat-uddata) |
store: true, metadata | 400 |
json_schema med strict: false | 400. strict skal være true |
seed, logprobs, logit_bias, service_tier, prediction, verbosity, prompt_cache_key, parallel_tool_calls, allowed_tools | Overholdes på OpenAI-kompatible modeller; 400 på Anthropic-, Google- og Mistral-modeller |
user, safety_identifier | Overholdes på OpenAI-kompatible modeller; ignoreres andre steder |
modalities | 400. Kun tekst som uddata |
Værktøjer drevet af leverandøren i tools (web_search, …) | Udelades, nævnes i X-Stav-Dropped-Params |
Se Forespørgselsparametere for den fulde liste.
Streaming
stream = client.chat.completions.create(
model="auto",
messages=messages,
stream=True,
stream_options={"include_usage": True}, # nødvendigt for tokentælling
)
Kontrollér hver chunk for en error-nøgle: En fejl efter streamen er startet ankommer som en SSE-frame, ikke som en HTTP-status.
Se hvad der betjente forespørgslen
raw = client.chat.completions.with_raw_response.create(model="auto", messages=messages)
print(raw.headers.get("X-Stav-Request-Id"))
print(raw.headers.get("X-Stav-Model")) # modellen der svarede
print(raw.headers.get("X-Stav-Sovereignty-Level")) # L0–L4 for leverandørendepunktet
print(raw.headers.get("X-Stav-Route-Reason")) # sat ved ruteret forespørgsel
Se Svarheadere.
Responses-API'et
POST /v1/responses accepterer auto, routere og alle modeller i kataloget. Der er to veje:
| Model | Hvad der sker |
|---|---|
| OpenAI- eller xAI-model (ruteret kommerciel) | Sendes videre til leverandørens eget Responses-API. Værktøjer drevet af leverandøren fungerer |
| Alt andet | Oversættes til chat-uddata |
På den oversatte vej:
store: trueogprevious_response_idafvises. Send de fulde inddata i hver runde.- Værktøjer drevet af leverandøren som
web_searchudelades og nævnes iX-Stav-Dropped-Params. parallel_tool_calls: falseoginclude-poster kan ikke medtages og nævnes i samme header.
På den videresendte vej er standardværdien for store sat til false, ikke OpenAIs true. Intet gemmes hos leverandøren, medmindre du sender store: true — og et arbejdsområde, der kræver ingen dataopbevaring, afviser dette med 403 store_not_permitted.
r = client.responses.create(model="openai/gpt-5.3-codex", input="…", store=True)
client.responses.retrieve(r.id)
retrieve, delete, cancel og input_items.list fungerer kun for gemte OpenAI-svar.
Codex
Codex taler kun Responses-API'et. I ~/.codex/config.toml:
model = "openai/gpt-5.3-codex"
model_provider = "stav"
[model_providers.stav]
name = "Stav"
base_url = "https://api.stav.ai/v1"
env_key = "STAV_API_KEY"
wire_api = "responses"
Enhver model fra kataloget, auto eller en router fungerer som model. Codex sender store: false, så den oversatte sti fungerer for modeller, der ikke er fra OpenAI.
Tjekliste til migrering
- Opret en
sk_stav_test_-nøgle. - Peg én ikke-kritisk tjeneste mod
https://api.stav.ai/v1. - Kør dine test og ret de
400-fejl, der opstår. - Prøv
model="auto"og sammenlign med dit eget evalueringssæt. - Sæt et minimumsniveau for suverænitet for dit arbejdsområde og tjek
X-Stav-Sovereignty-Level. - Rul ud med en
sk_stav_live_-nøgle.
Ikke tilgængeligt
- Assistants, threads, vector stores, files, batch.
- Billedgenerering, lyd i chat, stemme i sanntid og moderation. (Transskription og tekst til tale betjenes — se de to Audio-sider.)
- Rerank.