Μετανάστευση

Ένα βασικό URL και ένα κλειδί μεταφέρουν έναν πελάτη OpenAI. Αυτή η σελίδα επίσης δηλώνει τι δεν κάνει το API, επειδή μια μετανάστευση που το ανακαλύπτει σε παραγωγή δεν είναι μετανάστευση.

Η μορφή άμεσης αντικατάστασης

Στρέψτε το βασικό URL του πελάτη στο https://api.llmeu.com/v1 και δώστε του ένα κλειδί API από την κονσόλα. Το σχήμα του αιτήματος δεν αλλάζει.

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)

Τι δέχεται το τελικό σημείο συνομιλίας

Ο επαληθευτής αιτημάτων στο apps/api/src/app.mjs ελέγχει τα ακόλουθα· ό,τι δεν ελέγχει περνά ή αγνοείται αντί να απορρίπτεται, ώστε ένας νεότερος πελάτης να συνεχίζει να λειτουργεί.

  • Τα model και messages είναι υποχρεωτικά· το messages πρέπει να είναι μη κενός πίνακας.
  • Κάθε μήνυμα χρειάζεται έναν ρόλο (system, user, assistant, tool ή developer) και περιεχόμενο ως συμβολοσειρά ή πίνακα τμημάτων.
  • Το stream πρέπει να είναι boolean όταν υπάρχει.
  • Τα temperature, top_p, max_tokens, presence_penalty, frequency_penalty, seed και n πρέπει να είναι αριθμοί όταν υπάρχουν.
  • Το max_tokens πρέπει να είναι τουλάχιστον 1.
  • Το n πρέπει να είναι ακριβώς 1· οτιδήποτε άλλο απορρίπτεται.
  • Το stop μπορεί να είναι συμβολοσειρά ή πίνακας συμβολοσειρών.
  • Το tools πρέπει να είναι πίνακας όταν υπάρχει.
  • Το llmeu πρέπει να είναι αντικείμενο· δεν είναι ποτέ υποχρεωτικό.
  • Τα tool_choice και response_format προωθούνται στο backend μαζί με τα παραπάνω πεδία· ένα άγνωστο επιπλέον πεδίο δεν απορρίπτεται.

Πρόσθετα αιτήματος στο llmeu

Ένα αντικείμενο llmeu με namespace στο σώμα του αιτήματος· ένας πελάτης που αγνοεί άγνωστα πεδία μπορεί να το στείλει με ασφάλεια.

Πεδίο Τιμή Επίδραση
residencyeu-hosted | eu-owned | de | anyΠεριορίζει τη δρομολόγηση σε τελικά σημεία σε αυτό το residency· ένα κενό σύνολο επιλέξιμων επιστρέφει 409 no_endpoint_for_policy αντί να διευρύνει το φίλτρο.
taskένα όνομα εργασίαςΗ εργασία στην οποία ο δρομολογητής προσαρμόζει το μοντέλο.
retentionzeroΜόνο το μηδέν είναι υλοποιημένο. Το αίτημα για περισσότερο από όσο επιτρέπει η πολιτική επιστρέφει 403 retention_exceeds_policy· μια επιτρεπόμενη πραγματική τιμή άλλη από το μηδέν επιστρέφει 501 retention_not_implemented.
data_classpublic | internal | confidential | restrictedΕλέγχεται έναντι των επιτρεπόμενων κλάσεων δεδομένων της πολιτικής: μια κλάση εκτός αυτών επιστρέφει 403 data_class_not_allowed, και μια άγνωστη κλάση επιστρέφει 400 invalid_data_class.
policy_iduuidΟνομάζει μια πολιτική του ίδιου οργανισμού· ένα άγνωστο id επιστρέφει 404 policy_not_found.
max_usd_per_1mένας αριθμόςΈνα ανώτατο όριο τιμής ανά εκατομμύριο tokens για αυτό το αίτημα.
allow_partnerstrue | falseΑν επιτρέπεται να χρησιμοποιηθούν τελικά σημεία συνεργατών για αυτό το αίτημα.

Τα άγνωστα κλειδιά μέσα στο llmeu αγνοούνται· ένα γνωστό κλειδί με μη έγκυρη τιμή απορρίπτεται, επειδή ένα κακό data_class πρέπει να αποτυγχάνει κλειστά αντί να σημαίνει σιωπηλά καμία κλάση δεδομένων.

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"}
  }'

Τι δεν υπάρχει

Αυτές οι απαντήσεις είναι σκόπιμες, και ένας πελάτης που τις περιμένει βλέπει τον κωδικό σφάλματος αντί για σιωπηλή υποκατάσταση.

Αίτημα Αποτέλεσμα
POST /v1/completions501 not_implemented — Το παλαιό τελικό σημείο completions δεν προσφέρεται· χρησιμοποιήστε το /v1/chat/completions.
n > 1400 unsupported_n — υποστηρίζεται μόνο n = 1.
POST /v1/embeddingsΤα embeddings χρειάζονται ένα μοντέλο embedding, και το προεπιλεγμένο ζητούμενο id είναι bge-m3. Επί του παρόντος εξυπηρετούνται από το ντετερμινιστικό τοπικό backend, του οποίου η απάντηση φέρει llmeu.mock: true και τη σημείωση ότι επιστρέφονται ντετερμινιστικά διανύσματα placeholder και δεν εξυπηρετούνται βάρη embedding σε αυτή την ανάπτυξη.
/v1/files, /v1/batches, /v1/assistants, /v1/fine_tuning, /v1/audio, /v1/images404 unknown_route — δεν δρομολογείται καθόλου· μια διαδρομή /v1 που ο δρομολογητής δεν γνωρίζει απαντά 404 unknown_route, και οποιαδήποτε άλλη διαδρομή απαντά 404 not_found.

Εξαγωγή των δεδομένων σας

Η εξαγωγή λογαριασμού me.json περιέχει επιλεγμένα πεδία λογαριασμού, οργανισμούς, μεταδεδομένα κλειδιών API χωρίς μυστικά, τρέχουσες πολιτικές, τα τελευταία 200 ίχνη ανά οργανισμό και ημερήσια συγκεντρωτικά στοιχεία χρήσης για 365 ημέρες. Δεν είναι πλήρες αντίγραφο όλων των προσωπικών δεδομένων και ούτε ιστορικό αρχείο πολιτικών.

Η εξαγωγή ελέγχου NDJSON έχει προεπιλογή 7 ημέρες, επιτρέπει το πολύ 90 ημέρες και περιορίζει τα ίχνη στα 5000· το manifest της φέρει counts.truncated, που σηματοδοτεί μια εξαγωγή που έφτασε το όριο.

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

Η διαγραφή του ίδιου του λογαριασμού γίνεται στη σελίδα προφίλ και υπόκειται στον κανόνα ιδιοκτησίας στη σελίδα της κονσόλας.

Ένα cookie συνεδρίας δεν είναι διαπιστευτήριο API

Μια συνεδρία προγράμματος περιήγησης επαληθεύει την κονσόλα, όχι το API. Ένας πελάτης OpenAI που στέλνει μία απορρίπτεται με 403 api_key_required και πρέπει να χρησιμοποιήσει κλειδί API αντ' αυτού.

Μια απόρριψη εδώ αναφέρει έναν κωδικό, ώστε μια μετανάστευση να μπορεί να διακλαδωθεί βάσει αυτού, και το μπλοκ llmeu σε κάθε απάντηση λέει τι πραγματικά συνέβη.