Миграция
Базов 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 трябва да бъде булева стойност, когато присъства.
- temperature, top_p, max_tokens, presence_penalty, frequency_penalty, seed и n трябва да бъдат числа, когато присъстват.
- max_tokens трябва да бъде поне 1.
- n трябва да бъде точно 1; всичко друго се отхвърля.
- stop може да бъде низ или масив от низове.
- tools трябва да бъде масив, когато присъства.
- llmeu трябва да бъде обект; никога не е задължителен.
- tool_choice и response_format се препращат към бекенда заедно с горните полета; неизвестно допълнително поле не се отхвърля.
Допълнителни параметри на заявката под llmeu
Обект llmeu с пространство от имена в тялото на заявката; клиент, който игнорира неизвестни полета, може да го изпрати безопасно.
| Поле | Стойност | Ефект |
|---|---|---|
| residency | eu-hosted | eu-owned | de | any | Стеснява маршрутизирането до крайни точки в тази резидентност; празен набор от допустими връща 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 | Посочва политика на същата организация; неизвестен идентификатор връща 404 policy_not_found. |
| max_usd_per_1m | число | Таван на цената на милион токени за тази заявка. |
| allow_partners | true | 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/completions | 501 not_implemented — остарялата крайна точка completions не се предлага; използвайте /v1/chat/completions. |
| n > 1 | 400 unsupported_n — поддържа се само n = 1. |
| POST /v1/embeddings | Embeddings се нуждаят от модел за вграждане, а подразбиращият се заявен идентификатор е bge-m3. В момента се обслужват от детерминистичния локален бекенд, чийто отговор носи llmeu.mock: true и бележката, че се връщат детерминистични заместващи вектори и не се обслужват тегла за вграждане на това внедряване. |
| /v1/files, /v1/batches, /v1/assistants, /v1/fine_tuning, /v1/audio, /v1/images | 404 unknown_route — изобщо не се маршрутизира; /v1 път, който рутерът не познава, отговаря с 404 unknown_route, а всеки друг път отговаря с 404 not_found. |
Изтегляне на вашите данни
Експортът на акаунта me.json съдържа избрани полета на акаунта, организации, метаданни за API ключове без тайни, текущи политики, последните 200 следи на организация и дневни агрегати за използване за 365 дни. Той не е пълно копие на всички лични данни и не е исторически запис на политики.
NDJSON експортът на одита по подразбиране е 7 дни, позволява най-много 90 дни и ограничава следите до 5000; неговият манифест съдържа 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
Изтриването на самия акаунт се извършва на страницата с профила и е предмет на правилото за собственост на страницата на конзолата.
Бисквитката на сесията не е API идентификационни данни
Сесията в браузъра удостоверява конзолата, не API. OpenAI клиент, който изпрати такава, се отказва с 403 api_key_required и трябва да използва API ключ вместо това.
Отказът тук посочва код, така че миграцията може да се разклони по него, а блокът llmeu във всеки отговор казва какво всъщност се е случило.