# Flytta från OpenAI till Porten

# Flytta från OpenAI till Porten

För en applikation som använder Chat Completions börjar bytet med två inställningar:
Portens API-nyckel och `https://porten.ai/v1` som bas-URL. Du behöver också välja ett
modell-ID från Portens katalog. Ett GPT-modellnamn blir inte automatiskt en motsvarande
modell hos Porten, och samma API-format innebär inte samma svarskvalitet.

## 1. Skapa nyckeln och välj modell

Skapa en nyckel i [API keys](/build/keys). Använd en separat serverhemlighet för Porten;
skicka inte din OpenAI-nyckel till en annan leverantör och lägg inte nyckeln i webbläsarkod.

```bash
export PORTEN_API_KEY="sk-porten-…"
curl --fail-with-body https://porten.ai/v1/models \
  -H "Authorization: Bearer $PORTEN_API_KEY"
```

Välj en chattmodell från svaret och sätt `PORTEN_MODEL` till dess exakta `id` i din
servermiljö. Kontrollera kapabiliteter, kontext och aktuell tillgänglighet i
[modellkatalogen](/models). Ett erbjudet modell-ID är inte ett löfte om ledig kapacitet
för just din nyckels region och nodklass. Se [modeller och laddning](/docs/models).

## 2. Byt klientkonfiguration

Med OpenAI:s Python-SDK kan resten av ett enkelt Chat Completions-anrop behålla sin form:

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["PORTEN_API_KEY"],
    base_url="https://porten.ai/v1",
)
response = client.chat.completions.create(
    model=os.environ["PORTEN_MODEL"],
    messages=[{"role": "user", "content": "Skriv en kort hälsning."}],
    max_tokens=128,
)
print(response.choices[0].message.content)
```

För strömning använder du `stream=True` och läser `chunk.choices[0].delta.content`
när `choices` inte är tom. Fullständiga Python- och TypeScript-exempel finns i
[Quickstart](/docs/quickstart); inställningar för färdiga verktyg finns i
[integrationsguiden](/docs/integrations).

## 3. Avgränsa vad som migreras

| Befintlig funktion | Kontroll före byte |
| --- | --- |
| Textchatt och strömning | Testa Chat Completions med vald modell och hantera tomma strömningsdelar. |
| Verktygsanrop, JSON eller bildindata | Kontrollera modellens verifierade kapabiliteter och testa verkliga indata. |
| Embeddings | Kontrollera modell och dimension; bygg om vektorindex om embeddingmodellen byts. |
| Responses, Assistants eller leverantörens lagrade konversationer | Ett byte av bas-URL räcker inte. Portens dokumenterade chattgränssnitt är `/v1/chat/completions`; konversationshistorik måste hanteras i applikationen. |
| Fakturering och gränser | Porten har separat saldo, prissättning, kvoter och modellutbud. |

Använd [API-referensen](/docs/api-reference) som gräns för stödda endpoints och
parametrar. Flytta inte en hel applikation enbart för att ett enkelt chattanrop fungerar.

## 4. Verifiera före produktionsbyte

Kör samma representativa frågor mot båda implementationerna. Jämför korrekta svar,
verktygsargument, kontextgränser, svarstid och faktisk kostnad i [Activity](/build/activity).
Testa även otillgänglig modell, avbruten ström och begränsad kapacitet. Sätt begränsade
återförsök; en trasig anslutning kan inträffa efter att inferensen redan har börjat.

Behåll en konfigurationsstyrd återställningsväg under utrullningen. Om region eller
nodägande är ett krav får automatisk reservrouting inte kringgå samma krav. Läs
[jämförelsen av dataresidens](/docs/data-residency) innan du väljer policy.

SDK-konfigurationen stöds av [OpenAI:s officiella Python-SDK](https://github.com/openai/openai-python).
Exemplet avser Chat Completions; kompatibiliteten måste verifieras mot den SDK-version
och de funktioner din applikation använder.
