API OpenAI compatible

Puyun AI est entièrement compatible avec le protocole OpenAI API. Vous pouvez utiliser directement le SDK OpenAI ou tout client compatible OpenAI pour vous connecter.

URL de base

text
https://ai.tracup.com/v1

Authentification

Tous les points de terminaison nécessitent une authentification :

  • Bearer Token : Authorization: Bearer <your-api-key>
  • En-tête API Key : x-api-key: <your-api-key>

Lister les modèles

Retourne la liste des modèles actuellement disponibles.

bash
curl https://ai.tracup.com/v1/models \
  -H "Authorization: Bearer sk-your-api-key"

Exemple de réponse :

json
{
  "object": "list",
  "data": [
    { "id": "gpt-4o", "object": "model", "owned_by": "openai" },
    { "id": "claude-sonnet-4-6", "object": "model", "owned_by": "anthropic" },
    { "id": "gemini-2.5-pro", "object": "model", "owned_by": "google" }
  ]
}

Chat Completions

Point de terminaison de complétion de conversation compatible OpenAI. Prend en charge tous les modèles en amont, pas uniquement les modèles OpenAI.

bash
curl https://ai.tracup.com/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "Vous êtes un assistant utile."},
      {"role": "user", "content": "Expliquez l'informatique quantique"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'

Paramètres de la requête :

ParamètreTypeRequisDescription
modelstringOuiID du modèle (ex. gpt-4o, claude-sonnet-4-6)
messagesarrayOuiTableau d'objets de message
streambooleanNonActiver les réponses en streaming
temperaturenumberNonTempérature d'échantillonnage (0-2)
max_tokensintegerNonNombre maximal de Token générés
top_pnumberNonProbabilité de nucleus sampling
nintegerNonNombre de candidats à générer
stopstring/arrayNonSéquence d'arrêt
presence_penaltynumberNonPénalité de présence (-2 à 2)
frequency_penaltynumberNonPénalité de fréquence (-2 à 2)
toolsarrayNonDéfinitions d'outils Function Calling
tool_choicestring/objectNonStratégie d'appel d'outil

Exemple de réponse :

json
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1700000000,
  "model": "gpt-4o",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "L'informatique quantique est une discipline qui exploite les principes de la mécanique quantique..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 128,
    "total_tokens": 153
  }
}

Réponses en streaming

Lorsque "stream": true est défini, la réponse utilise le format SSE :

text
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"delta":{"content":"L'"},"index":0}]}

data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"delta":{"content":"informatique"},"index":0}]}

data: [DONE]

Embeddings

Génère des embeddings vectoriels de texte.

bash
curl https://ai.tracup.com/v1/embeddings \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "Hello world"
  }'

Paramètres de la requête :

ParamètreTypeRequisDescription
modelstringOuiID du modèle d'embedding
inputstring/arrayOuiTexte à intégrer
encoding_formatstringNonFormat d'encodage (float ou base64)

Conversion automatique de protocole

L'un des avantages clés de Puyun AI est la conversion automatique de protocole. Lorsque vous appelez un modèle non-OpenAI (comme Claude ou Gemini) via le point de terminaison compatible OpenAI, la plateforme effectue automatiquement :

  1. Conversion de requête : transformation du corps de la requête au format OpenAI vers le format natif du modèle cible
  2. Conversion de réponse : transformation de la réponse native du modèle au format OpenAI
  3. Adaptation du streaming : les réponses en streaming sont également converties automatiquement

Vous pouvez ainsi appeler tous les modèles avec le même code SDK OpenAI, sans vous soucier des différences de protocole sous-jacentes.

Utiliser le SDK OpenAI

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://ai.tracup.com/v1"
)

# Appeler un modèle OpenAI
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Bonjour"}]
)

# Appeler un modèle Claude — même code, conversion automatique de protocole
response = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "Bonjour"}]
)

# Appeler un modèle Gemini — de la même manière
response = client.chat.completions.create(
    model="gemini-2.5-pro",
    messages=[{"role": "user", "content": "Bonjour"}]
)

Réponses d'erreur

Toutes les erreurs suivent le format d'erreur OpenAI :

json
{
  "error": {
    "message": "Invalid API key",
    "type": "invalid_request_error",
    "code": "invalid_api_key"
  }
}
Code HTTPSignification
400Paramètres de requête invalides
401Échec d'authentification — clé API invalide
403Permissions insuffisantes — modèle non disponible
429Limite de débit ou solde insuffisant
500Erreur interne du serveur
502Erreur du service en amont