Migrering

En bas-URL och en nyckel flyttar en OpenAI-klient över. Denna sida anger också vad API:et inte gör, eftersom en migrering som upptäcker det i produktion inte är en migrering.

Den drop-in-formade strukturen

Peka klientens bas-URL till https://api.llmeu.com/v1 och ge den en API-nyckel från konsolen. Begärans utformning ändras inte.

from openai import OpenAI

client = OpenAI(base_url="https://api.llmeu.com/v1", api_key="llmeu_live_xxxxxxxx.your-secret")

resp = client.chat.completions.create(
    model="llmeu-auto",
    messages=[{"role": "user", "content": "Say hello from EU hosting."}],
)
print(resp.choices[0].message.content)

Vad chattändpunkten accepterar

Begärans validator i apps/api/src/app.mjs kontrollerar följande; det som den inte kontrollerar skickas vidare eller ignoreras snarare än avvisas, så en nyare klient fortsätter fungera.

  • model och messages är obligatoriska; messages måste vara en icke-tom array.
  • Varje meddelande behöver en roll (system, user, assistant, tool eller developer) och innehåll som en sträng eller en array av delar.
  • stream måste vara ett booleskt värde när det finns.
  • temperature, top_p, max_tokens, presence_penalty, frequency_penalty, seed och n måste vara nummer när de finns.
  • max_tokens måste vara minst 1.
  • n måste vara exakt 1; allt annat nekas.
  • stop får vara en sträng eller en array av strängar.
  • tools måste vara en array när det finns.
  • llmeu måste vara ett objekt; det är aldrig obligatoriskt.
  • tool_choice och response_format vidarebefordras till backend tillsammans med fälten ovan; ett okänt extrafält avvisas inte.

Begärans extrafält under llmeu

Ett namnutrymmat llmeu-objekt i begärans brödtext; en klient som ignorerar okända fält kan skicka det säkert.

Fält Värde Effekt
residencyeu-hosted | eu-owned | de | anyBegränsar routning till ändpunkter i den residensen; en tom kvalificerad uppsättning returnerar 409 no_endpoint_for_policy snarare än att vidga filtret.
taskett uppgiftsnamnDen uppgift som routern anpassar modellen till.
retentionzeroEndast noll är implementerat. Att begära mer än policyn tillåter returnerar 403 retention_exceeds_policy; ett tillåtet effektivt värde som inte är noll returnerar 501 retention_not_implemented.
data_classpublic | internal | confidential | restrictedKontrolleras mot policyns tillåtna dataklasser: en klass utanför dem returnerar 403 data_class_not_allowed, och en okänd klass returnerar 400 invalid_data_class.
policy_iduuidNamnger en policy för samma organisation; ett okänt id returnerar 404 policy_not_found.
max_usd_per_1mett nummerEtt pristak per miljon tokens för denna begäran.
allow_partnerstrue | falseOm partnerändpunkter får användas för denna begäran.

Okända nycklar inuti llmeu ignoreras; en känd nyckel med ett ogiltigt värde nekas, eftersom en felaktig data_class måste misslyckas stängt snarare än att tyst innebära ingen dataklass.

curl https://api.llmeu.com/v1/chat/completions \
  -H "Authorization: Bearer $LLMEU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llmeu-auto",
    "messages": [{"role": "user", "content": "Summarise this contract."}],
    "llmeu": {"residency": "eu-owned", "data_class": "confidential", "retention": "zero"}
  }'

Vad som inte finns

Dessa svar är avsiktliga, och en klient som förväntar sig dem ser felkoden snarare än en tyst substitution.

Begäran Resultat
POST /v1/completions501 not_implemented — den äldre completions-ändpunkten erbjuds inte; använd /v1/chat/completions.
n > 1400 unsupported_n — endast n = 1 stöds.
POST /v1/embeddingsEmbeddings behöver en inbäddningsmodell, och det begärda standard-id:t är bge-m3. De betjänas för närvarande av den deterministiska lokala backend, vars svar innehåller llmeu.mock: true och noteringen att deterministiska platshållarvektorer returneras och inga inbäddningsvikter serveras i denna distribution.
/v1/files, /v1/batches, /v1/assistants, /v1/fine_tuning, /v1/audio, /v1/images404 unknown_route — routas inte alls; en /v1-sökväg som routern inte känner igen svarar 404 unknown_route, och alla andra sökvägar svarar 404 not_found.

Att ta ut dina data

Kontoexporten me.json innehåller valda kontofält, organisationer, API-nyckelmetadata utan hemligheter, aktuella policyer, de senaste 200 spåren per organisation och dagliga användningsaggregat för 365 dagar. Det är inte en fullständig kopia av alla personuppgifter och inte en historisk policyregister.

NDJSON-revisionsexporten har standardvärdet 7 dagar, tillåter högst 90 dagar och begränsar spår till 5000; dess manifest innehåller counts.truncated, vilket markerar en export som nådde gränsen.

GET /app/exports/me.json
GET /app/exports/audit.ndjson?days=7
GET /app/exports/traces.json
GET /app/exports/usage.json
GET /app/exports/policies.json

Att radera själva kontot sker på profilsidan och omfattas av ägarregeln på konsolsidan.

En sessionscookie är inte en API-uppgift

En webbläsarsession autentiserar konsolen, inte API:et. En OpenAI-klient som skickar en nekas med 403 api_key_required och måste använda en API-nyckel i stället.

Ett avslag här namnger en kod, så en migrering kan förgrena sig på den, och llmeu-blocket i varje svar säger vad som faktiskt hände.