Μετεγκατάσταση
Ένα βασικό 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)
Τι δέχεται το endpoint συνομιλίας
Ο επαληθευτής αιτημάτων στο 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 στο σώμα του αιτήματος· ένας πελάτης που αγνοεί άγνωστα πεδία μπορεί να το στείλει με ασφάλεια.
| Πεδίο | Τιμή | Επίδραση |
|---|---|---|
| residency | eu-hosted | eu-owned | de | any | Περιορίζει τη δρομολόγηση σε endpoints αυτής της περιοχής διαμονής δεδομένων· ένα κενό σύνολο επιλέξιμων επιστρέφει 409 no_endpoint_for_policy αντί να διευρύνει το φίλτρο. |
| task | ένα όνομα εργασίας | Η εργασία στην οποία ο δρομολογητής προσαρμόζει το μοντέλο. |
| retention | zero | Μόνο το μηδέν έχει υλοποιηθεί. Η αίτηση για περισσότερο από όσο επιτρέπει η πολιτική επιστρέφει 403 retention_exceeds_policy· μια επιτρεπόμενη πραγματική τιμή διάφορη του μηδενός επιστρέφει 501 retention_not_implemented. |
| data_class | public | internal | confidential | restricted | Ελέγχεται έναντι των επιτρεπόμενων κλάσεων δεδομένων της πολιτικής: μια κλάση εκτός αυτών επιστρέφει 403 data_class_not_allowed, και μια άγνωστη κλάση επιστρέφει 400 invalid_data_class. |
| policy_id | uuid | Κατονομάζει μια πολιτική του ίδιου οργανισμού· ένα άγνωστο id επιστρέφει 404 policy_not_found. |
| max_usd_per_1m | ένας αριθμός | Ένα ανώτατο όριο τιμής ανά εκατομμύριο tokens για αυτό το αίτημα. |
| allow_partners | true | false | Αν μπορούν να χρησιμοποιηθούν endpoints συνεργατών για αυτό το αίτημα. |
Τα άγνωστα κλειδιά μέσα στο 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/completions | 501 not_implemented — το παλαιό endpoint completions δεν προσφέρεται; χρησιμοποιήστε το /v1/chat/completions. |
| n > 1 | 400 unsupported_n — υποστηρίζεται μόνο n = 1. |
| POST /v1/embeddings | Τα embeddings χρειάζονται ένα μοντέλο embedding, και το προεπιλεγμένο αναγνωριστικό που ζητείται είναι bge-m3. Κανένα δεν εξυπηρετείται σε αυτήν την ανάπτυξη, οπότε η διαδρομή δεν προσφέρεται εδώ αντί να επιστρέφει διανύσματα placeholder. |
| /v1/files, /v1/batches, /v1/assistants, /v1/fine_tuning, /v1/audio, /v1/images | 404 unknown_route — δεν δρομολογείται καθόλου; μια διαδρομή /v1 που ο router δεν γνωρίζει απαντά 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 σε κάθε απόκριση δηλώνει τι συνέβη πραγματικά.