> ## Documentation Index
> Fetch the complete documentation index at: https://evolink.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# DeepSeek V4 - API compatible OpenAI

> - Appeler les modèles DeepSeek V4 via le protocole OpenAI Chat Completions
- Prend en charge `deepseek-v4-flash` (rapide et généraliste) et `deepseek-v4-pro` (raisonnement approfondi)
- **Conversation textuelle** : dialogue contextuel en un ou plusieurs tours, prise en charge d'un contexte ultra-long de 1M
- **Prompts système** : personnaliser le rôle et le comportement de l'IA
- **Mode de réflexion** : contrôler le raisonnement approfondi via `thinking.type` ; le contenu de réflexion de `deepseek-v4-pro` est retourné via `reasoning_content`
- **Sortie en streaming** : prend en charge le retour en streaming SSE
- **Appel d'outils** : prend en charge Function Calling (jusqu'à 128 outils)
- **Mode JSON** : activé via `response_format`
- **Cache de contexte** : les requêtes avec le même préfixe déclenchent automatiquement le cache, réduisant considérablement le coût d'entrée

<Note>
  **BaseURL** : La BaseURL par défaut est `https://direct.evolink.ai`, qui offre une meilleure prise en charge des modèles de texte et des connexions persistantes. `https://api.evolink.ai` est le point d'accès principal pour les services multimodaux et sert d'adresse de secours pour les modèles de texte.
</Note>


## OpenAPI

````yaml fr/api-manual/language-series/deepseek-v4/deepseek-v4-chat.json POST /v1/chat/completions
openapi: 3.1.0
info:
  title: Documentation complète des paramètres DeepSeek V4 (compatible OpenAI)
  description: >-
    Référence API complète pour l'interface de chat de la série DeepSeek V4
    (`deepseek-v4-flash` / `deepseek-v4-pro`).


    **Capacités du modèle** :

    - Longueur de contexte : **1 000 000 tokens** (1M)

    - Sortie maximale : **384 000 tokens** (384K)

    - Mode de réflexion : commutateur via le champ `thinking`, `deepseek-v4-pro`
    excelle dans le raisonnement complexe

    - Cache disque de contexte : hit automatique, hit et miss facturés
    séparément


    **Grille tarifaire (UC/1K tokens, unité interne EvoLink)** :

    | Modèle | Hit de cache d'entrée | Miss de cache d'entrée | Sortie |

    | --- | --- | --- | --- |

    | deepseek-v4-flash | 20 | 100 | 200 |

    | deepseek-v4-pro | 100 | 1200 | 2400 |
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://direct.evolink.ai
    description: Production (recommandée)
  - url: https://api.evolink.ai
    description: URL alternative
security:
  - bearerAuth: []
tags:
  - name: Complétion de chat
    description: Points de terminaison liés à la génération de conversations IA
paths:
  /v1/chat/completions:
    post:
      tags:
        - Complétion de chat
      summary: Interface de chat DeepSeek V4 (compatible OpenAI)
      description: >-
        - Appeler les modèles DeepSeek V4 via le protocole OpenAI Chat
        Completions

        - Prend en charge `deepseek-v4-flash` (rapide et généraliste) et
        `deepseek-v4-pro` (raisonnement approfondi)

        - **Conversation textuelle** : dialogue contextuel en un ou plusieurs
        tours, prise en charge d'un contexte ultra-long de 1M

        - **Prompts système** : personnaliser le rôle et le comportement de l'IA

        - **Mode de réflexion** : contrôler le raisonnement approfondi via
        `thinking.type` ; le contenu de réflexion de `deepseek-v4-pro` est
        retourné via `reasoning_content`

        - **Sortie en streaming** : prend en charge le retour en streaming SSE

        - **Appel d'outils** : prend en charge Function Calling (jusqu'à 128
        outils)

        - **Mode JSON** : activé via `response_format`

        - **Cache de contexte** : les requêtes avec le même préfixe déclenchent
        automatiquement le cache, réduisant considérablement le coût d'entrée
      operationId: createChatCompletionDeepSeekV4
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatCompletionRequest'
            examples:
              simple_text:
                summary: Conversation textuelle à tour unique (Flash)
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: user
                      content: Présentez-vous s'il vous plaît
              multi_turn:
                summary: Conversation multi-tours (compréhension du contexte)
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: user
                      content: Qu'est-ce que Python ?
                    - role: assistant
                      content: Python est un langage de programmation de haut niveau...
                    - role: user
                      content: Quels sont ses avantages ?
              system_prompt:
                summary: Utilisation des prompts système
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: system
                      content: >-
                        Vous êtes un assistant de programmation Python
                        professionnel. Répondez aux questions de manière
                        concise.
                    - role: user
                      content: Comment lire un fichier ?
              thinking_mode:
                summary: >-
                  Utiliser le modèle Pro + activation explicite du mode de
                  réflexion
                value:
                  model: deepseek-v4-pro
                  thinking:
                    type: enabled
                    reasoning_effort: high
                  messages:
                    - role: user
                      content: Prouvez que √2 est irrationnel
              disable_thinking:
                summary: Désactiver le mode de réflexion (réponse directe uniquement)
                value:
                  model: deepseek-v4-pro
                  thinking:
                    type: disabled
                  messages:
                    - role: user
                      content: Quelle est la capitale de la France ?
              json_mode:
                summary: Sortie structurée en mode JSON
                value:
                  model: deepseek-v4-flash
                  response_format:
                    type: json_object
                  messages:
                    - role: system
                      content: Vous devez sortir du JSON strict.
                    - role: user
                      content: Donnez-moi un exemple JSON avec les champs name et age
              tool_calling:
                summary: Appel d'outils Function Calling
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: user
                      content: Consultez la météo d'aujourd'hui à Pékin
                  tools:
                    - type: function
                      function:
                        name: get_weather
                        description: Consulter la météo d'une ville donnée
                        parameters:
                          type: object
                          properties:
                            city:
                              type: string
                              description: Nom de la ville
                          required:
                            - city
                  tool_choice: auto
              streaming:
                summary: Sortie en streaming
                value:
                  model: deepseek-v4-flash
                  stream: true
                  stream_options:
                    include_usage: true
                  messages:
                    - role: user
                      content: Écrivez un court poème sur le printemps
      responses:
        '200':
          description: Génération de conversation réussie
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatCompletionResponse'
              examples:
                thinking_disabled:
                  summary: thinking désactivé (réponse en texte brut)
                  value:
                    id: 837f529d-00f9-4731-b2e1-4a54fc31790a
                    object: chat.completion
                    created: 1777026806
                    model: deepseek-v4-flash
                    choices:
                      - index: 0
                        message:
                          role: assistant
                          content: >-
                            Bonjour ! Je suis l'assistant DeepSeek, toujours
                            prêt à répondre à vos questions et à vous aider.
                        logprobs: null
                        finish_reason: stop
                    usage:
                      prompt_tokens: 7
                      completion_tokens: 31
                      total_tokens: 38
                      prompt_tokens_details:
                        cached_tokens: 0
                      prompt_cache_hit_tokens: 0
                      prompt_cache_miss_tokens: 7
                    system_fingerprint: fp_evolink_v4_20260402
                thinking_enabled:
                  summary: thinking activé (avec reasoning_content)
                  value:
                    id: 658083bb-1137-49d2-8c4d-900e508cbd53
                    object: chat.completion
                    created: 1777026807
                    model: deepseek-v4-flash
                    choices:
                      - index: 0
                        message:
                          role: assistant
                          content: La capitale de la France est **Paris**.
                          reasoning_content: >-
                            L'utilisateur demande : "Quelle est la capitale de
                            la France ?" — une question de culture générale. Il
                            suffit de répondre directement "Paris".
                        logprobs: null
                        finish_reason: stop
                    usage:
                      prompt_tokens: 7
                      completion_tokens: 53
                      total_tokens: 60
                      prompt_tokens_details:
                        cached_tokens: 0
                      completion_tokens_details:
                        reasoning_tokens: 45
                      prompt_cache_hit_tokens: 0
                      prompt_cache_miss_tokens: 7
                    system_fingerprint: fp_evolink_v4_20260402
                cache_hit:
                  summary: Hit de cache de contexte (nombreux cache_hit_tokens)
                  value:
                    id: 3e4a1b70-8c59-4b22-a011-9f2c7d5a3e88
                    object: chat.completion
                    created: 1777026900
                    model: deepseek-v4-flash
                    choices:
                      - index: 0
                        message:
                          role: assistant
                          content: Bonjour !
                        logprobs: null
                        finish_reason: stop
                    usage:
                      prompt_tokens: 694
                      completion_tokens: 10
                      total_tokens: 704
                      prompt_tokens_details:
                        cached_tokens: 640
                      prompt_cache_hit_tokens: 640
                      prompt_cache_miss_tokens: 54
                    system_fingerprint: fp_evolink_v4_20260402
        '400':
          description: Paramètres de requête invalides
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 400
                  message: Invalid request parameters
                  type: invalid_request_error
        '401':
          description: Non authentifié, jeton invalide ou expiré
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 401
                  message: Invalid or expired token
                  type: authentication_error
        '402':
          description: Quota insuffisant, recharge requise
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 402
                  message: Insufficient quota
                  type: insufficient_quota_error
        '403':
          description: Pas d'autorisation d'accès à ce modèle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 403
                  message: Access denied for this model
                  type: permission_error
                  param: model
        '404':
          description: Ressource introuvable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 404
                  message: Specified model not found
                  type: not_found_error
                  param: model
        '413':
          description: Corps de requête trop volumineux
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 413
                  message: Request body too large
                  type: request_too_large_error
                  param: messages
        '429':
          description: Limite de débit dépassée
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 429
                  message: Rate limit exceeded
                  type: rate_limit_error
        '500':
          description: Erreur interne du serveur
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 500
                  message: Internal server error
                  type: internal_server_error
        '502':
          description: Erreur de passerelle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 502
                  message: Bad gateway
                  type: bad_gateway_error
        '503':
          description: Service temporairement indisponible
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 503
                  message: Service temporarily unavailable
                  type: service_unavailable_error
components:
  schemas:
    ChatCompletionRequest:
      type: object
      required:
        - model
        - messages
      properties:
        model:
          type: string
          description: >-
            Nom du modèle de conversation


            - `deepseek-v4-flash` : modèle rapide et généraliste, contexte de 1M

            - `deepseek-v4-pro` : modèle de raisonnement approfondi, excelle en
            mathématiques, en programmation et en logique complexe


            **Astuce** : Les deux modèles **ont `thinking` activé par défaut**,
            la réponse contiendra `reasoning_content` ; vous pouvez le
            désactiver via `thinking.type="disabled"` pour réduire le coût des
            tokens de sortie. Les paramètres des deux sont totalement
            identiques.
          enum:
            - deepseek-v4-flash
            - deepseek-v4-pro
          default: deepseek-v4-flash
          example: deepseek-v4-flash
        messages:
          type: array
          description: >-
            Liste des messages de conversation, prend en charge les dialogues
            multi-tours


            Les messages de rôles différents ont des structures de champs
            différentes, veuillez sélectionner le rôle correspondant
          items:
            oneOf:
              - $ref: '#/components/schemas/SystemMessage'
              - $ref: '#/components/schemas/UserMessage'
              - $ref: '#/components/schemas/AssistantRequestMessage'
              - $ref: '#/components/schemas/ToolMessage'
            discriminator:
              propertyName: role
              mapping:
                system:
                  $ref: '#/components/schemas/SystemMessage'
                user:
                  $ref: '#/components/schemas/UserMessage'
                assistant:
                  $ref: '#/components/schemas/AssistantRequestMessage'
                tool:
                  $ref: '#/components/schemas/ToolMessage'
          minItems: 1
        thinking:
          type: object
          description: >-
            Contrôle du mode de réflexion (nouveauté V4)


            **Remarque** :

            - Utilisé pour contrôler la fonctionnalité de réflexion approfondie
            (Chain of Thought)

            - **Activé par défaut pour les deux modèles** (`type=enabled`)

            - Une fois activé, le processus de raisonnement est retourné via
            `choices[].message.reasoning_content` et facturé au tarif des tokens
            de sortie


            ⚠️ **Attention pour les conversations multi-tours / appels
            d'outils** : si la réponse de ce tour contient `reasoning_content`,
            **le message assistant correspondant dans l'historique `messages` de
            la requête suivante doit retourner ce champ tel quel**, sinon l'API
            renverra 400 `The reasoning_content in the thinking mode must be
            passed back to the API`. Si vous ne souhaitez pas le gérer, vous
            pouvez définir explicitement `thinking.type="disabled"` pour toute
            la session.
          properties:
            type:
              type: string
              description: >-
                Commutateur du mode de réflexion


                - `enabled` : activer la réflexion approfondie (par défaut)

                - `disabled` : désactiver la réflexion approfondie, le modèle
                répond directement
              enum:
                - enabled
                - disabled
              default: enabled
            reasoning_effort:
              type: string
              description: >-
                Niveau d'effort de raisonnement


                - `low` : faible effort, réponse plus rapide, moins de
                reasoning_tokens

                - `medium` : effort moyen (par défaut)

                - `high` : effort élevé, processus de réflexion plus approfondi,
                consomme plus de reasoning_tokens
              enum:
                - low
                - medium
                - high
              default: medium
        temperature:
          type: number
          description: >-
            Température d'échantillonnage, contrôle le caractère aléatoire de la
            sortie


            **Remarque** :

            - Valeurs basses (ex. 0.2) : sortie plus déterministe et ciblée

            - Valeurs élevées (ex. 1.5) : sortie plus aléatoire et créative

            - Valeur par défaut : 1
          minimum: 0
          maximum: 2
          default: 1
          example: 1
        top_p:
          type: number
          description: >-
            Paramètre d'échantillonnage nucleus (Nucleus Sampling)


            **Remarque** :

            - Contrôle l'échantillonnage à partir des tokens avec une
            probabilité cumulative

            - Par exemple, 0.9 signifie un échantillonnage parmi les tokens
            ayant 90 % de probabilité cumulative

            - Valeur par défaut : 1.0 (considère tous les tokens)


            **Suggestion** : Ne pas ajuster simultanément temperature et top_p
          minimum: 0
          maximum: 1
          default: 1
          example: 1
        max_tokens:
          type: integer
          description: >-
            Limite le nombre maximum de tokens générés


            **Remarque** :

            - La série V4 peut atteindre **384 000 tokens**

            - Lorsque thinking est activé, reasoning_tokens sont également
            comptés dans la limite max_tokens

            - Si non défini, le modèle décide lui-même de la longueur générée
          minimum: 1
          maximum: 384000
          example: 4096
        frequency_penalty:
          type: number
          description: >-
            Paramètre de pénalité de fréquence, utilisé pour réduire le contenu
            répétitif


            **Remarque** :

            - Les valeurs positives pénalisent en fonction de la fréquence
            d'apparition des tokens dans le texte généré

            - Plus la valeur est élevée, moins le contenu déjà apparu sera
            répété

            - Valeur par défaut : 0 (pas de pénalité)
          minimum: -2
          maximum: 2
          default: 0
          example: 0
        presence_penalty:
          type: number
          description: >-
            Paramètre de pénalité de présence, utilisé pour encourager la
            génération de nouveaux sujets


            **Remarque** :

            - Les valeurs positives pénalisent en fonction de la présence
            antérieure des tokens dans le texte

            - Plus la valeur est élevée, plus le modèle tend à aborder de
            nouveaux sujets

            - Valeur par défaut : 0 (pas de pénalité)
          minimum: -2
          maximum: 2
          default: 0
          example: 0
        response_format:
          type: object
          description: >-
            Spécifier le format de la réponse


            **Remarque** :

            - Définir sur `{"type": "json_object"}` pour activer le mode JSON

            - En mode JSON, le modèle produira un contenu au format JSON valide

            - Il est recommandé de demander explicitement une sortie JSON dans
            le message system ou user pour obtenir les meilleurs résultats
          properties:
            type:
              type: string
              enum:
                - text
                - json_object
              description: Type de format de réponse
              default: text
        stop:
          description: >-
            Séquences d'arrêt, le modèle arrête la génération lorsqu'il
            rencontre ces chaînes


            **Remarque** :

            - Peut être une chaîne unique ou un tableau de chaînes

            - Prend en charge jusqu'à 16 séquences d'arrêt
          oneOf:
            - type: string
            - type: array
              items:
                type: string
              maxItems: 16
        stream:
          type: boolean
          description: >-
            Indique si la réponse doit être retournée en streaming


            - `true` : retour en streaming, le contenu est renvoyé bloc par bloc
            en temps réel via SSE (Server-Sent Events)

            - `false` : attendre la réponse complète et la retourner en une
            seule fois (par défaut)
          default: false
          example: false
        stream_options:
          type: object
          description: |-
            Options de réponse en streaming

            Valide uniquement lorsque `stream=true`
          properties:
            include_usage:
              type: boolean
              description: >-
                Retourner les statistiques usage (avec détail du cache) à la fin
                du streaming
        tools:
          type: array
          description: >-
            Liste des définitions d'outils, utilisée pour Function Calling


            **Remarque** :

            - Prend en charge jusqu'à 128 définitions d'outils

            - Chaque outil doit définir un nom, une description et un schéma de
            paramètres
          items:
            $ref: '#/components/schemas/Tool'
          maxItems: 128
        tool_choice:
          description: >-
            Contrôle le comportement d'appel des outils


            **Valeurs possibles** :

            - `none` : n'appeler aucun outil

            - `auto` : le modèle décide automatiquement d'appeler ou non un
            outil (par défaut lorsque tools est fourni)

            - `required` : force le modèle à appeler un ou plusieurs outils

            - Forme objet `{"type":"function","function":{"name":"xxx"}}` :
            spécifier un outil particulier à appeler


            **Valeur par défaut** : `none` si tools n'est pas fourni, `auto` si
            tools est fourni
          oneOf:
            - type: string
              enum:
                - none
                - auto
                - required
            - type: object
              description: Spécifier un outil particulier à appeler
              properties:
                type:
                  type: string
                  enum:
                    - function
                function:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Nom de la fonction à appeler
                  required:
                    - name
        logprobs:
          type: boolean
          description: >-
            Retourner ou non la probabilité logarithmique des tokens


            **Remarque** :

            - Lorsque défini sur `true`, la réponse inclura les informations de
            probabilité logarithmique de chaque token
          default: false
        top_logprobs:
          type: integer
          description: >-
            Retourner la probabilité logarithmique des N tokens avec la
            probabilité la plus élevée


            **Remarque** :

            - Nécessite `logprobs` défini sur `true`

            - Plage de valeurs : `[0, 20]`
          minimum: 0
          maximum: 20
        logit_bias:
          type: object
          description: >-
            Mappage de biais des tokens


            **Remarque** :

            - La clé est l'ID du token dans le tokenizer, la valeur est un biais
            entre -100 et 100

            - -100 signifie interdire totalement ce token, 100 signifie forcer
            la génération

            - La plage typique -1 à 1 produit déjà un effet observable
          additionalProperties:
            type: number
            minimum: -100
            maximum: 100
        'n':
          type: integer
          description: >-
            Nombre de complétions de chat à générer pour chaque message d'entrée


            **Remarque** :

            - Par défaut 1 ; lorsque défini sur N, N candidats seront retournés
            (facturés à N × output_tokens)
          minimum: 1
          maximum: 8
          default: 1
          example: 1
        seed:
          type: integer
          description: >-
            Graine aléatoire (Bêta)


            **Remarque** :

            - Une fois spécifiée, le modèle tentera un échantillonnage
            déterministe

            - Même seed + mêmes autres paramètres → même sortie (garantie non à
            100 %)
        user:
          type: string
          description: |-
            Identifiant unique représentant l'utilisateur final

            **Remarque** :
            - Permet à la plateforme de surveiller et détecter les abus
            - Il est recommandé d'utiliser un ID utilisateur haché
    ChatCompletionResponse:
      type: object
      properties:
        id:
          type: string
          description: Identifiant unique de la complétion de conversation
          example: 53c548dc-ec02-4a2f-bbb6-eca4184630b8
        model:
          type: string
          description: Nom du modèle réellement utilisé
          example: deepseek-v4-flash
        object:
          type: string
          enum:
            - chat.completion
          description: Type de réponse
          example: chat.completion
        created:
          type: integer
          description: Horodatage de création (Unix en secondes)
          example: 1777021417
        choices:
          type: array
          description: Liste des choix de génération de conversation
          items:
            $ref: '#/components/schemas/Choice'
        usage:
          $ref: '#/components/schemas/Usage'
        system_fingerprint:
          type: string
          description: Identifiant d'empreinte système
          example: fp_evolink_v4_20260402
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: integer
              description: Code d'erreur de statut HTTP
            message:
              type: string
              description: Description de l'erreur
            type:
              type: string
              description: Type d'erreur
            param:
              type: string
              description: Nom du paramètre concerné
    SystemMessage:
      title: System Message
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - system
          description: Identifiant de rôle, fixé à `system`
        content:
          type: string
          description: >-
            Contenu du prompt système, utilisé pour définir le rôle et le
            comportement de l'IA
        name:
          type: string
          description: >-
            Nom du participant, utilisé pour distinguer différentes sources de
            prompts système
    UserMessage:
      title: User Message
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - user
          description: Identifiant de rôle, fixé à `user`
        content:
          type: string
          description: Contenu du message utilisateur (chaîne de texte brut)
        name:
          type: string
          description: Nom du participant, utilisé pour distinguer différents utilisateurs
    AssistantRequestMessage:
      title: Assistant Message
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - assistant
          description: Identifiant de rôle, fixé à `assistant`
        content:
          type:
            - string
            - 'null'
          description: >-
            Contenu du message assistant


            **Remarque** :

            - Utilisé dans les conversations multi-tours pour transmettre
            l'historique des réponses de l'assistant

            - Peut être `null` lorsque `tool_calls` est présent
        name:
          type: string
          description: Nom du participant
        prefix:
          type: boolean
          description: >-
            Activer ou non le mode prefix (continuation de préfixe, Bêta)


            **Remarque** :

            - À définir uniquement dans le dernier message

            - Lorsque défini sur `true`, le modèle continue à générer en
            utilisant le `content` de ce message comme préfixe
          default: false
        reasoning_content:
          type:
            - string
            - 'null'
          description: >-
            Contenu de la chaîne de raisonnement (Bêta)


            **Remarque** :

            - Produit par `deepseek-v4-flash` et `deepseek-v4-pro` lorsque
            thinking est activé (par défaut)

            - **Doit être retourné tel quel dans les scénarios multi-tours** :
            transmettre directement `choices[0].message.reasoning_content` de la
            réponse précédente comme champ `reasoning_content` du message
            assistant d'historique ; l'absence sera rejetée par l'API (400)

            - Lors de la transmission comme contexte historique, il n'est pas
            nécessaire de l'accompagner de `prefix` ; `prefix=true` uniquement
            lorsque la continuation de préfixe est explicitement activée
        tool_calls:
          type: array
          description: >-
            Liste des appels d'outils


            Utilisé pour transmettre les informations d'appels d'outils
            historiques dans les conversations multi-tours
          items:
            type: object
            properties:
              id:
                type: string
                description: Identifiant unique de l'appel d'outil
              type:
                type: string
                enum:
                  - function
              function:
                type: object
                properties:
                  name:
                    type: string
                    description: Nom de la fonction appelée
                  arguments:
                    type: string
                    description: Paramètres de la fonction (chaîne JSON)
    ToolMessage:
      title: Tool Message
      type: object
      required:
        - role
        - content
        - tool_call_id
      properties:
        role:
          type: string
          enum:
            - tool
          description: Identifiant de rôle, fixé à `tool`
        content:
          type: string
          description: Contenu du résultat de l'appel d'outil
        tool_call_id:
          type: string
          description: >-
            ID de l'appel d'outil


            Correspond au champ `id` retourné dans `tool_calls` du message
            assistant
    Tool:
      type: object
      required:
        - type
        - function
      properties:
        type:
          type: string
          enum:
            - function
          description: Type d'outil, actuellement seul `function` est pris en charge
        function:
          type: object
          required:
            - name
          properties:
            name:
              type: string
              description: >-
                Nom de la fonction à appeler


                **Remarque** :

                - Doit être composé des caractères a-z, A-Z, 0-9, ou contenir
                des traits de soulignement et des tirets

                - Longueur maximale de 64 caractères
            description:
              type: string
              description: >-
                Description de la fonctionnalité, permet au modèle de comprendre
                quand et comment appeler la fonction
            parameters:
              type: object
              description: >-
                Paramètres d'entrée de la fonction, décrits avec un objet JSON
                Schema


                **Remarque** :

                - Omettre `parameters` définira une fonction avec une liste de
                paramètres vide
            strict:
              type: boolean
              description: >-
                Activer ou non le mode strict (Bêta)


                **Remarque** :

                - Lorsque défini sur `true`, l'API utilisera le mode strict pour
                l'appel de fonction

                - Garantit que la sortie est toujours conforme à la définition
                JSON Schema de la fonction
              default: false
    Choice:
      type: object
      properties:
        index:
          type: integer
          description: Index du choix
          example: 0
        message:
          $ref: '#/components/schemas/AssistantMessage'
        logprobs:
          type:
            - object
            - 'null'
          description: >-
            Informations de probabilité logarithmique (retournées uniquement si
            `logprobs=true` dans la requête)
        finish_reason:
          type: string
          description: |-
            Raison de la fin

            - `stop` : fin naturelle ou déclenchement d'une séquence d'arrêt
            - `length` : limite maximale de tokens atteinte
            - `content_filter` : contenu filtré par la politique de sécurité
            - `tool_calls` : le modèle a appelé un outil
            - `insufficient_system_resource` : ressources backend insuffisantes
          enum:
            - stop
            - length
            - content_filter
            - tool_calls
            - insufficient_system_resource
          example: stop
    Usage:
      type: object
      description: >-
        Statistiques d'utilisation des tokens (avec détail du cache et du
        raisonnement)
      properties:
        prompt_tokens:
          type: integer
          description: Nombre total de tokens d'entrée (incluant hit et miss de cache)
          example: 694
        completion_tokens:
          type: integer
          description: Nombre de tokens de sortie (incluant la partie reasoning)
          example: 20
        total_tokens:
          type: integer
          description: Nombre total de tokens = prompt_tokens + completion_tokens
          example: 714
        prompt_cache_hit_tokens:
          type: integer
          description: >-
            Nombre de tokens d'entrée qui ont touché le cache de contexte


            **Remarque** : les tokens ayant touché le cache sont facturés au
            **tarif de hit de cache** (Flash 20 UC/1K, Pro 100 UC/1K)
          example: 640
        prompt_cache_miss_tokens:
          type: integer
          description: >-
            Nombre de tokens d'entrée n'ayant pas touché le cache


            **Remarque** : facturés au **tarif d'entrée standard** (Flash 100
            UC/1K, Pro 1200 UC/1K)
          example: 54
        prompt_tokens_details:
          type: object
          description: Détail des tokens d'entrée (style OpenAI)
          properties:
            cached_tokens:
              type: integer
              description: >-
                Nombre de tokens en cache (équivalent à
                `prompt_cache_hit_tokens`, mappé automatiquement par le
                framework)
              example: 640
        completion_tokens_details:
          type: object
          description: Détail des tokens de sortie
          properties:
            reasoning_tokens:
              type: integer
              description: >-
                Nombre de tokens de raisonnement produits par le mode de
                réflexion (comptabilisés en sortie, facturés au tarif de sortie)
              example: 10
    AssistantMessage:
      type: object
      properties:
        role:
          type: string
          description: Rôle de l'expéditeur du message
          enum:
            - assistant
          example: assistant
        content:
          type: string
          description: Contenu du message de réponse de l'IA
          example: >-
            Bonjour ! Je suis DeepSeek V4. J'excelle dans la conversation
            générale, la génération de code, le raisonnement mathématique et
            bien d'autres tâches.
        reasoning_content:
          type: string
          description: >-
            Contenu de la chaîne de raisonnement (retourné uniquement lorsque
            thinking est activé)


            **Remarque** :

            - `deepseek-v4-pro` activé par défaut, retournera le processus de
            raisonnement complet

            - `deepseek-v4-flash` nécessite de définir explicitement
            `thinking.type="enabled"` pour être retourné

            - Facturé au tarif des tokens de sortie, comptabilisé dans
            `completion_tokens_details.reasoning_tokens`
          example: Laissez-moi analyser cette question...
        tool_calls:
          type: array
          description: >-
            Liste des appels d'outils (retournée lorsque le modèle décide
            d'appeler un outil)
          items:
            type: object
            properties:
              id:
                type: string
                description: Identifiant unique de l'appel d'outil
              type:
                type: string
                enum:
                  - function
              function:
                type: object
                properties:
                  name:
                    type: string
                    description: Nom de la fonction appelée
                  arguments:
                    type: string
                    description: Paramètres de la fonction (chaîne JSON)
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        ##Toutes les API nécessitent une authentification Bearer Token##


        **Obtenir une clé API** :


        Visitez la [Page de gestion des clés
        API](https://evolink.ai/dashboard/keys) pour obtenir votre clé API


        **Ajouter à l'en-tête de requête** :

        ```

        Authorization: Bearer YOUR_API_KEY

        ```

````