Title: Migrazione %E2%80%94 LLM EU Canonical: https://llmeu.com/it/docs/migration/ Markdown mirror: https://llmeu.com/it/docs/migration.md Machine-readable: https://llmeu.com/llms.txt (index) - https://llmeu.com/llms-full.txt (full catalogue) - https://llmeu.com/llms-catalogue.json Inizia - [Avvio rapido](/it/docs/quickstart/) - [Console](/it/docs/console/) - [Migrazione](/it/docs/migration/) - [Riferimento API](/it/docs/api/) Riferimento - [Autenticazione](/it/docs/authentication/) - [Endpoint](/it/docs/endpoints/) - [Errori](/it/docs/errors/) - [Limiti di frequenza](/it/docs/rate-limits/) - [Streaming](/it/docs/streaming/) - [Policy](/it/docs/policies/) - [Routing e policy](/it/docs/routing/) - [Residenza e regioni](/it/docs/residency/) - [Prove e verifica](/it/docs/evidence/) - [Compatibilit%C3%A0 OpenAI](/it/docs/openai-compat/) Operazioni - [Self-hosting](/it/docs/self-hosting/) # Migrazione Un URL di base e una chiave spostano un client OpenAI. Questa pagina dichiara anche cosa l'API non fa, perch%C3%A9 una migrazione che lo scopre in produzione non %C3%A8 una migrazione. ## La forma drop-in Punta l'URL di base del client a https://api.llmeu.com/v1 e dagli una chiave API dalla console. La forma della richiesta non cambia. ``` 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) ``` ## Cosa accetta l'endpoint di chat Il validatore delle richieste in apps/api/src/app.mjs controlla quanto segue; ci%C3%B2 che non controlla viene passato o ignorato anzich%C3%A9 rifiutato, cos%C3%AC un client pi%C3%B9 recente continua a funzionare. - model e messages sono obbligatori; messages deve essere un array non vuoto. - Ogni messaggio necessita di un ruolo (system, user, assistant, tool o developer) e contenuto come stringa o array di parti. - stream deve essere un booleano quando presente. - temperature, top_p, max_tokens, presence_penalty, frequency_penalty, seed e n devono essere numeri quando presenti. - max_tokens deve essere almeno 1. - n deve essere esattamente 1; qualsiasi altro valore viene rifiutato. - stop pu%C3%B2 essere una stringa o un array di stringhe. - tools deve essere un array quando presente. - llmeu deve essere un oggetto; non %C3%A8 mai obbligatorio. - tool_choice e response_format vengono inoltrati al backend insieme ai campi sopra; un campo extra sconosciuto non viene rifiutato. ## Extra della richiesta sotto llmeu Un oggetto llmeu con namespace nel corpo della richiesta; un client che ignora i campi sconosciuti pu%C3%B2 inviarlo in sicurezza. Le chiavi sconosciute all'interno di llmeu vengono ignorate; una chiave nota con un valore non valido viene rifiutata, perch%C3%A9 una data_class errata deve fallire in modo chiuso anzich%C3%A9 significare silenziosamente nessuna classe di dati. ``` 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"} }' ``` ## Cosa non esiste Queste risposte sono intenzionali, e un client che se le aspetta vede il codice di errore invece di una sostituzione silenziosa. ## Esportare i tuoi dati L'esportazione dell'account me.json contiene campi selezionati dell'account, organizzazioni, metadati delle chiavi API senza segreti, policy correnti, le ultime 200 tracce per organizzazione e aggregati di utilizzo giornaliero per 365 giorni. Non %C3%A8 una copia completa di tutti i dati personali e non %C3%A8 un registro storico delle policy. L'esportazione di audit NDJSON %C3%A8 predefinita a 7 giorni, consente al massimo 90 giorni e limita le tracce a 5000; il suo manifest contiene counts.truncated, che contrassegna un'esportazione che ha raggiunto il limite. ``` 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 ``` L'eliminazione dell'account stesso avviene nella pagina del profilo ed %C3%A8 soggetta alla regola di propriet%C3%A0 nella pagina della console. ## Un cookie di sessione non %C3%A8 una credenziale API Una sessione del browser autentica la console, non l'API. Un client OpenAI che ne invia una viene rifiutato con 403 api_key_required e deve invece usare una chiave API. Un rifiuto qui indica un codice, quindi una migrazione pu%C3%B2 ramificare su di esso, e il blocco llmeu su ogni risposta dice cosa %C3%A8 realmente successo.