> ## 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 con OpenAI

> - Llama al modelo DeepSeek V4 usando el protocolo OpenAI Chat Completions
- Soporta dos modelos: `deepseek-v4-flash` (rápido y general) y `deepseek-v4-pro` (razonamiento profundo)
- **Conversación de texto puro**: diálogo de uno o varios turnos con soporte para contexto ultra largo de 1M
- **Prompt de sistema**: personaliza el rol y el comportamiento de la IA
- **Modo de pensamiento**: controla el razonamiento profundo mediante `thinking.type`; el contenido de pensamiento de `deepseek-v4-pro` se devuelve en `reasoning_content`
- **Salida en streaming**: soporta respuestas SSE en streaming
- **Llamada a herramientas**: soporta Function Calling (hasta 128 herramientas)
- **Modo JSON**: se habilita mediante `response_format`
- **Caché de contexto**: las solicitudes con el mismo prefijo alcanzan automáticamente la caché, reduciendo notablemente el coste de entrada

<Note>
  **BaseURL**: La BaseURL predeterminada es `https://direct.evolink.ai`, que ofrece mejor compatibilidad con modelos de texto y admite conexiones persistentes. `https://api.evolink.ai` es el endpoint principal para servicios multimodales y actúa como dirección de respaldo para los modelos de texto.
</Note>


## OpenAPI

````yaml es/api-manual/language-series/deepseek-v4/deepseek-v4-chat.json POST /v1/chat/completions
openapi: 3.1.0
info:
  title: Documentación completa de parámetros de DeepSeek V4 (compatible con OpenAI)
  description: >-
    Referencia completa de la API de conversación de la serie DeepSeek V4
    (`deepseek-v4-flash` / `deepseek-v4-pro`).


    **Capacidades del modelo**:

    - Longitud de contexto: **1,000,000 tokens** (1M)

    - Salida máxima: **384,000 tokens** (384K)

    - Modo de pensamiento: se controla mediante el campo `thinking`;
    `deepseek-v4-pro` destaca en razonamiento complejo

    - Caché de contexto en disco: acierto automático, con facturación separada
    para aciertos y fallos


    **Niveles de facturación (UC/1K tokens, unidad interna de EvoLink)**:

    | Modelo | Acierto de caché de entrada | Fallo de caché de entrada | Salida
    |

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

    | 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: Producción (recomendado)
  - url: https://api.evolink.ai
    description: URL alternativa
security:
  - bearerAuth: []
tags:
  - name: Generación de conversación
    description: Interfaces relacionadas con la generación de conversación de IA
paths:
  /v1/chat/completions:
    post:
      tags:
        - Generación de conversación
      summary: Interfaz de conversación DeepSeek V4 (compatible con OpenAI)
      description: >-
        - Llama al modelo DeepSeek V4 usando el protocolo OpenAI Chat
        Completions

        - Soporta dos modelos: `deepseek-v4-flash` (rápido y general) y
        `deepseek-v4-pro` (razonamiento profundo)

        - **Conversación de texto puro**: diálogo de uno o varios turnos con
        soporte para contexto ultra largo de 1M

        - **Prompt de sistema**: personaliza el rol y el comportamiento de la IA

        - **Modo de pensamiento**: controla el razonamiento profundo mediante
        `thinking.type`; el contenido de pensamiento de `deepseek-v4-pro` se
        devuelve en `reasoning_content`

        - **Salida en streaming**: soporta respuestas SSE en streaming

        - **Llamada a herramientas**: soporta Function Calling (hasta 128
        herramientas)

        - **Modo JSON**: se habilita mediante `response_format`

        - **Caché de contexto**: las solicitudes con el mismo prefijo alcanzan
        automáticamente la caché, reduciendo notablemente el coste de entrada
      operationId: createChatCompletionDeepSeekV4
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatCompletionRequest'
            examples:
              simple_text:
                summary: Conversación de texto de un solo turno (Flash)
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: user
                      content: Por favor, preséntate
              multi_turn:
                summary: Conversación multi-turno (comprensión de contexto)
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: user
                      content: ¿Qué es Python?
                    - role: assistant
                      content: Python es un lenguaje de programación de alto nivel...
                    - role: user
                      content: ¿Cuáles son sus ventajas?
              system_prompt:
                summary: Uso de prompt de sistema
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: system
                      content: >-
                        Eres un asistente profesional de programación en Python.
                        Responde preguntas de forma concisa.
                    - role: user
                      content: ¿Cómo leo un archivo?
              thinking_mode:
                summary: Modelo Pro + modo de pensamiento explícitamente activado
                value:
                  model: deepseek-v4-pro
                  thinking:
                    type: enabled
                    reasoning_effort: high
                  messages:
                    - role: user
                      content: Demuestra que √2 es irracional
              disable_thinking:
                summary: Desactivar modo de pensamiento (solo respuesta directa)
                value:
                  model: deepseek-v4-pro
                  thinking:
                    type: disabled
                  messages:
                    - role: user
                      content: ¿Cuál es la capital de Francia?
              json_mode:
                summary: Salida estructurada en modo JSON
                value:
                  model: deepseek-v4-flash
                  response_format:
                    type: json_object
                  messages:
                    - role: system
                      content: Debes generar JSON estricto.
                    - role: user
                      content: Dame un JSON de ejemplo con los campos name y age
              tool_calling:
                summary: Llamada a herramientas (Function Calling)
                value:
                  model: deepseek-v4-flash
                  messages:
                    - role: user
                      content: Consulta el clima de hoy en Pekín
                  tools:
                    - type: function
                      function:
                        name: get_weather
                        description: Consulta el clima de una ciudad determinada
                        parameters:
                          type: object
                          properties:
                            city:
                              type: string
                              description: Nombre de la ciudad
                          required:
                            - city
                  tool_choice: auto
              streaming:
                summary: Salida en streaming
                value:
                  model: deepseek-v4-flash
                  stream: true
                  stream_options:
                    include_usage: true
                  messages:
                    - role: user
                      content: Escribe un poema corto sobre la primavera
      responses:
        '200':
          description: Conversación generada con éxito
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatCompletionResponse'
              examples:
                thinking_disabled:
                  summary: thinking desactivado (respuesta en texto plano)
                  value:
                    id: 837f529d-00f9-4731-b2e1-4a54fc31790a
                    object: chat.completion
                    created: 1777026806
                    model: deepseek-v4-flash
                    choices:
                      - index: 0
                        message:
                          role: assistant
                          content: >-
                            ¡Hola! Soy el asistente DeepSeek, siempre listo para
                            responder tus preguntas y ayudarte.
                        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 activado (con 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 capital de Francia es **París**.
                          reasoning_content: >-
                            El usuario pregunta: "¿Cuál es la capital de
                            Francia?" — una pregunta de cultura general. Basta
                            con responder directamente "París".
                        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: >-
                    Acierto de caché de contexto (gran cantidad de
                    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: ¡Hola!
                        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: Parámetros de solicitud inválidos
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 400
                  message: Invalid request parameters
                  type: invalid_request_error
        '401':
          description: No autenticado, token inválido o expirado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 401
                  message: Invalid or expired token
                  type: authentication_error
        '402':
          description: Cuota insuficiente, se requiere recarga
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 402
                  message: Insufficient quota
                  type: insufficient_quota_error
        '403':
          description: Sin permiso para acceder al modelo
          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: Recurso no encontrado
          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: Cuerpo de la solicitud demasiado grande
          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: Límite de frecuencia de solicitudes excedido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 429
                  message: Rate limit exceeded
                  type: rate_limit_error
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 500
                  message: Internal server error
                  type: internal_server_error
        '502':
          description: Error de puerta de enlace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 502
                  message: Bad gateway
                  type: bad_gateway_error
        '503':
          description: Servicio temporalmente no disponible
          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: >-
            Nombre del modelo de conversación


            - `deepseek-v4-flash`: modelo rápido y general, contexto de 1M

            - `deepseek-v4-pro`: modelo de razonamiento profundo, destaca en
            matemáticas, programación y lógica compleja


            **Nota**: ambos modelos **tienen `thinking` habilitado por
            defecto**, y la respuesta incluirá `reasoning_content`. Puede
            desactivarlo con `thinking.type="disabled"` para reducir el coste de
            tokens de salida. Los parámetros son idénticos para ambos modelos.
          enum:
            - deepseek-v4-flash
            - deepseek-v4-pro
          default: deepseek-v4-flash
          example: deepseek-v4-flash
        messages:
          type: array
          description: >-
            Lista de mensajes de la conversación, con soporte para diálogo
            multi-turno


            Los mensajes de distintos roles tienen estructuras de campos
            diferentes; selecciona el rol correspondiente para ver su detalle
          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: >-
            Control del modo de pensamiento (novedad en V4)


            **Descripción**:

            - Controla la funcionalidad de pensamiento profundo (Chain of
            Thought)

            - **Habilitado por defecto en ambos modelos** (`type=enabled`)

            - Al estar habilitado, el proceso de razonamiento se devuelve en
            `choices[].message.reasoning_content` y se factura como tokens de
            salida


            ⚠️ **Aviso para multi-turno / llamadas a herramientas**: si la
            respuesta de este turno incluye `reasoning_content`, **el mensaje
            `assistant` correspondiente en el historial de `messages` de la
            siguiente solicitud debe devolver este campo tal cual**; de lo
            contrario, la API devolverá 400 `The reasoning_content in the
            thinking mode must be passed back to the API`. Si no deseas
            gestionarlo, puedes establecer explícitamente
            `thinking.type="disabled"` para toda la sesión.
          properties:
            type:
              type: string
              description: >-
                Interruptor del modo de pensamiento


                - `enabled`: habilita el pensamiento profundo (por defecto)

                - `disabled`: desactiva el pensamiento profundo, el modelo
                responde directamente
              enum:
                - enabled
                - disabled
              default: enabled
            reasoning_effort:
              type: string
              description: >-
                Nivel de esfuerzo de razonamiento


                - `low`: esfuerzo bajo, respuesta más rápida, menos
                reasoning_tokens

                - `medium`: esfuerzo medio (por defecto)

                - `high`: esfuerzo alto, proceso de pensamiento más exhaustivo,
                consume más reasoning_tokens
              enum:
                - low
                - medium
                - high
              default: medium
        temperature:
          type: number
          description: |-
            Temperatura de muestreo, controla la aleatoriedad de la salida

            **Descripción**:
            - Valores bajos (p. ej. 0.2): salida más determinista y enfocada
            - Valores altos (p. ej. 1.5): salida más aleatoria y creativa
            - Valor por defecto: 1
          minimum: 0
          maximum: 2
          default: 1
          example: 1
        top_p:
          type: number
          description: >-
            Parámetro de muestreo por núcleo (Nucleus Sampling)


            **Descripción**:

            - Controla el muestreo desde los tokens cuya probabilidad acumulada
            alcanza cierto umbral

            - Por ejemplo, 0.9 significa seleccionar entre los tokens que
            alcancen el 90% de probabilidad acumulada

            - Valor por defecto: 1.0 (considera todos los tokens)


            **Recomendación**: no ajustes simultáneamente `temperature` y
            `top_p`
          minimum: 0
          maximum: 1
          default: 1
          example: 1
        max_tokens:
          type: integer
          description: >-
            Limita el número máximo de tokens a generar


            **Descripción**:

            - La serie V4 admite hasta **384,000 tokens**

            - Cuando `thinking` está activado, los reasoning_tokens también
            cuentan para el límite de `max_tokens`

            - Si no se define, el modelo decide la longitud por sí mismo
          minimum: 1
          maximum: 384000
          example: 4096
        frequency_penalty:
          type: number
          description: >-
            Penalización por frecuencia, se utiliza para reducir contenido
            repetitivo


            **Descripción**:

            - Valores positivos penalizan según la frecuencia con la que un
            token aparece en el texto ya generado

            - Cuanto mayor sea el valor, menos se repetirá contenido ya visto

            - Valor por defecto: 0 (sin penalización)
          minimum: -2
          maximum: 2
          default: 0
          example: 0
        presence_penalty:
          type: number
          description: >-
            Penalización por presencia, fomenta la introducción de temas nuevos


            **Descripción**:

            - Valores positivos penalizan según si un token ya ha aparecido en
            el texto

            - Cuanto mayor sea el valor, más tiende el modelo a explorar temas
            nuevos

            - Valor por defecto: 0 (sin penalización)
          minimum: -2
          maximum: 2
          default: 0
          example: 0
        response_format:
          type: object
          description: >-
            Especifica el formato de la respuesta


            **Descripción**:

            - Establecer `{"type": "json_object"}` habilita el modo JSON

            - En modo JSON el modelo generará contenido con formato JSON válido

            - Se recomienda indicar explícitamente en el mensaje `system` o
            `user` que se desea salida JSON para obtener los mejores resultados
          properties:
            type:
              type: string
              enum:
                - text
                - json_object
              description: Tipo de formato de la respuesta
              default: text
        stop:
          description: >-
            Secuencias de parada; el modelo detiene la generación al encontrar
            estas cadenas


            **Descripción**:

            - Puede ser una cadena única o un array de cadenas

            - Admite hasta 16 secuencias de parada
          oneOf:
            - type: string
            - type: array
              items:
                type: string
              maxItems: 16
        stream:
          type: boolean
          description: >-
            Si la respuesta debe devolverse en streaming


            - `true`: devolución en streaming, se envía el contenido por partes
            mediante SSE (Server-Sent Events)

            - `false`: espera a la respuesta completa y la devuelve de una vez
            (por defecto)
          default: false
          example: false
        stream_options:
          type: object
          description: |-
            Opciones de respuesta en streaming

            Solo son efectivas cuando `stream=true`
          properties:
            include_usage:
              type: boolean
              description: >-
                Devuelve información estadística de `usage` al finalizar el
                streaming (incluyendo desglose de caché)
        tools:
          type: array
          description: >-
            Lista de definiciones de herramientas, usada para Function Calling


            **Descripción**:

            - Admite hasta 128 definiciones de herramientas

            - Cada herramienta debe definir nombre, descripción y esquema de
            parámetros
          items:
            $ref: '#/components/schemas/Tool'
          maxItems: 128
        tool_choice:
          description: >-
            Controla el comportamiento de llamada a herramientas


            **Valores posibles**:

            - `none`: no llamar a ninguna herramienta

            - `auto`: el modelo decide automáticamente si llamar a una
            herramienta (por defecto cuando se proporcionan `tools`)

            - `required`: obliga al modelo a llamar a una o más herramientas

            - Forma de objeto `{"type":"function","function":{"name":"xxx"}}`:
            especifica la herramienta concreta a llamar


            **Valor por defecto**: `none` si no hay `tools`, `auto` si hay
            `tools`
          oneOf:
            - type: string
              enum:
                - none
                - auto
                - required
            - type: object
              description: Especifica la llamada a una herramienta concreta
              properties:
                type:
                  type: string
                  enum:
                    - function
                function:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Nombre de la función a llamar
                  required:
                    - name
        logprobs:
          type: boolean
          description: >-
            Si se devuelven las probabilidades logarítmicas de los tokens


            **Descripción**:

            - Al establecerlo en `true`, la respuesta incluirá la probabilidad
            logarítmica de cada token
          default: false
        top_logprobs:
          type: integer
          description: >-
            Devuelve las probabilidades logarítmicas de los N tokens con mayor
            probabilidad


            **Descripción**:

            - Requiere que `logprobs` sea `true`

            - Rango admitido: `[0, 20]`
          minimum: 0
          maximum: 20
        logit_bias:
          type: object
          description: >-
            Mapa de sesgo de tokens


            **Descripción**:

            - La clave es el ID del token en el tokenizer, el valor es un sesgo
            entre -100 y 100

            - -100 prohíbe totalmente ese token, 100 fuerza su generación

            - Los valores típicos entre -1 y 1 ya producen un efecto perceptible
          additionalProperties:
            type: number
            minimum: -100
            maximum: 100
        'n':
          type: integer
          description: >-
            Número de completaciones de chat a generar por cada mensaje de
            entrada


            **Descripción**:

            - Por defecto 1; con N se devolverán N candidatos (facturados como N
            × output_tokens)
          minimum: 1
          maximum: 8
          default: 1
          example: 1
        seed:
          type: integer
          description: >-
            Semilla aleatoria (Beta)


            **Descripción**:

            - Al especificarla, el modelo intentará realizar un muestreo
            determinista

            - Mismo `seed` + mismos demás parámetros → misma salida (no
            garantizado al 100%)
        user:
          type: string
          description: |-
            Identificador único que representa al usuario final

            **Descripción**:
            - Ayuda a la plataforma a monitorear y detectar abusos
            - Se recomienda usar un ID de usuario hasheado
    ChatCompletionResponse:
      type: object
      properties:
        id:
          type: string
          description: Identificador único de la completación de conversación
          example: 53c548dc-ec02-4a2f-bbb6-eca4184630b8
        model:
          type: string
          description: Nombre del modelo realmente utilizado
          example: deepseek-v4-flash
        object:
          type: string
          enum:
            - chat.completion
          description: Tipo de respuesta
          example: chat.completion
        created:
          type: integer
          description: Marca de tiempo de creación (Unix en segundos)
          example: 1777021417
        choices:
          type: array
          description: Lista de opciones generadas por la conversación
          items:
            $ref: '#/components/schemas/Choice'
        usage:
          $ref: '#/components/schemas/Usage'
        system_fingerprint:
          type: string
          description: Identificador de huella del sistema
          example: fp_evolink_v4_20260402
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: integer
              description: Código de error HTTP
            message:
              type: string
              description: Descripción del error
            type:
              type: string
              description: Tipo de error
            param:
              type: string
              description: Nombre del parámetro relacionado
    SystemMessage:
      title: System Message
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - system
          description: Identificador de rol, fijo en `system`
        content:
          type: string
          description: >-
            Contenido del prompt de sistema, se utiliza para definir el rol y el
            comportamiento de la IA
        name:
          type: string
          description: >-
            Nombre del participante, útil para distinguir distintos orígenes de
            prompts de sistema
    UserMessage:
      title: User Message
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - user
          description: Identificador de rol, fijo en `user`
        content:
          type: string
          description: Contenido del mensaje del usuario (cadena de texto puro)
        name:
          type: string
          description: Nombre del participante, útil para distinguir distintos usuarios
    AssistantRequestMessage:
      title: Assistant Message
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - assistant
          description: Identificador de rol, fijo en `assistant`
        content:
          type:
            - string
            - 'null'
          description: >-
            Contenido del mensaje del asistente


            **Descripción**:

            - Se utiliza para transmitir respuestas previas del asistente en
            conversaciones multi-turno

            - Puede ser `null` cuando existen `tool_calls`
        name:
          type: string
          description: Nombre del participante
        prefix:
          type: boolean
          description: >-
            Habilita el modo de continuación por prefijo (Beta)


            **Descripción**:

            - Solo se define en el último mensaje

            - Si se establece `true`, el modelo continuará generando a partir
            del `content` de ese mensaje como prefijo
          default: false
        reasoning_content:
          type:
            - string
            - 'null'
          description: >-
            Contenido de la cadena de pensamiento (Beta)


            **Descripción**:

            - Tanto `deepseek-v4-flash` como `deepseek-v4-pro` lo producen
            cuando `thinking` está habilitado (por defecto)

            - **En multi-turno debe devolverse tal cual**: toma el
            `choices[0].message.reasoning_content` de la respuesta anterior y
            páselo directamente como campo `reasoning_content` del mensaje
            `assistant` en el historial; su ausencia será rechazada por la API
            (400)

            - Al pasarlo como contexto histórico no es necesario acompañarlo de
            `prefix`; únicamente cuando se activa explícitamente el modo de
            continuación por prefijo se usa `prefix=true`
        tool_calls:
          type: array
          description: >-
            Lista de llamadas a herramientas


            Se utiliza para transmitir información histórica de llamadas a
            herramientas en conversaciones multi-turno
          items:
            type: object
            properties:
              id:
                type: string
                description: Identificador único de la llamada a la herramienta
              type:
                type: string
                enum:
                  - function
              function:
                type: object
                properties:
                  name:
                    type: string
                    description: Nombre de la función llamada
                  arguments:
                    type: string
                    description: Parámetros de la función (cadena JSON)
    ToolMessage:
      title: Tool Message
      type: object
      required:
        - role
        - content
        - tool_call_id
      properties:
        role:
          type: string
          enum:
            - tool
          description: Identificador de rol, fijo en `tool`
        content:
          type: string
          description: Contenido del resultado devuelto por la llamada a la herramienta
        tool_call_id:
          type: string
          description: >-
            ID de la llamada a la herramienta


            Corresponde al campo `id` devuelto en `tool_calls` dentro del
            mensaje `assistant`
    Tool:
      type: object
      required:
        - type
        - function
      properties:
        type:
          type: string
          enum:
            - function
          description: Tipo de herramienta; actualmente solo se admite `function`
        function:
          type: object
          required:
            - name
          properties:
            name:
              type: string
              description: >-
                Nombre de la función a llamar


                **Descripción**:

                - Debe estar formado por caracteres a-z, A-Z, 0-9, o contener
                guiones bajos y guiones

                - Longitud máxima de 64 caracteres
            description:
              type: string
              description: >-
                Descripción de la funcionalidad de la función, para que el
                modelo comprenda cuándo y cómo llamarla
            parameters:
              type: object
              description: >-
                Parámetros de entrada de la función, descritos como objeto JSON
                Schema


                **Descripción**:

                - Omitir `parameters` definirá una función con lista de
                parámetros vacía
            strict:
              type: boolean
              description: >-
                Si se activa el modo estricto (Beta)


                **Descripción**:

                - Al establecerlo en `true`, la API usará el modo strict para
                las llamadas a funciones

                - Garantiza que la salida siempre respete la definición de JSON
                Schema de la función
              default: false
    Choice:
      type: object
      properties:
        index:
          type: integer
          description: Índice de la opción
          example: 0
        message:
          $ref: '#/components/schemas/AssistantMessage'
        logprobs:
          type:
            - object
            - 'null'
          description: >-
            Información de probabilidad logarítmica (solo se devuelve cuando se
            solicita `logprobs=true`)
        finish_reason:
          type: string
          description: >-
            Motivo de finalización


            - `stop`: final natural o activación de una secuencia de parada

            - `length`: alcanzado el límite máximo de tokens

            - `content_filter`: contenido filtrado por políticas de seguridad

            - `tool_calls`: el modelo llamó a una herramienta

            - `insufficient_system_resource`: recursos insuficientes en el
            backend
          enum:
            - stop
            - length
            - content_filter
            - tool_calls
            - insufficient_system_resource
          example: stop
    Usage:
      type: object
      description: Estadísticas de uso de tokens (incluye desglose de caché y razonamiento)
      properties:
        prompt_tokens:
          type: integer
          description: >-
            Número total de tokens del contenido de entrada (incluye aciertos y
            fallos de caché)
          example: 694
        completion_tokens:
          type: integer
          description: >-
            Número de tokens del contenido de salida (incluye la parte de
            reasoning)
          example: 20
        total_tokens:
          type: integer
          description: Total de tokens = prompt_tokens + completion_tokens
          example: 714
        prompt_cache_hit_tokens:
          type: integer
          description: >-
            Número de tokens de entrada que acertaron la caché de contexto


            **Descripción**: los tokens con acierto de caché se facturan al
            **precio de acierto de caché** (Flash 20 UC/1K, Pro 100 UC/1K)
          example: 640
        prompt_cache_miss_tokens:
          type: integer
          description: >-
            Número de tokens de entrada que no acertaron la caché


            **Descripción**: se facturan al **precio estándar de entrada**
            (Flash 100 UC/1K, Pro 1200 UC/1K)
          example: 54
        prompt_tokens_details:
          type: object
          description: Desglose detallado de tokens de entrada (estilo OpenAI)
          properties:
            cached_tokens:
              type: integer
              description: >-
                Número de tokens con acierto de caché (equivalente a
                `prompt_cache_hit_tokens`, mapeado automáticamente por el
                framework)
              example: 640
        completion_tokens_details:
          type: object
          description: Desglose detallado de tokens de salida
          properties:
            reasoning_tokens:
              type: integer
              description: >-
                Número de tokens de razonamiento producidos por el modo de
                pensamiento (contabilizados como salida y facturados al precio
                de salida)
              example: 10
    AssistantMessage:
      type: object
      properties:
        role:
          type: string
          description: Rol del remitente del mensaje
          enum:
            - assistant
          example: assistant
        content:
          type: string
          description: Contenido del mensaje de respuesta de la IA
          example: >-
            ¡Hola! Soy DeepSeek V4. Soy bueno en conversaciones generales,
            generación de código, razonamiento matemático y muchas otras tareas.
        reasoning_content:
          type: string
          description: >-
            Contenido de la cadena de pensamiento (solo se devuelve cuando
            `thinking` está habilitado)


            **Descripción**:

            - `deepseek-v4-pro` lo tiene habilitado por defecto y devuelve el
            proceso de razonamiento completo

            - `deepseek-v4-flash` requiere establecer explícitamente
            `thinking.type="enabled"` para devolverlo

            - Se factura como tokens de salida y se contabiliza en
            `completion_tokens_details.reasoning_tokens`
          example: Permíteme analizar esta pregunta...
        tool_calls:
          type: array
          description: >-
            Lista de llamadas a herramientas (se devuelve cuando el modelo
            decide llamar a una herramienta)
          items:
            type: object
            properties:
              id:
                type: string
                description: Identificador único de la llamada a la herramienta
              type:
                type: string
                enum:
                  - function
              function:
                type: object
                properties:
                  name:
                    type: string
                    description: Nombre de la función llamada
                  arguments:
                    type: string
                    description: Parámetros de la función (cadena JSON)
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        ##Todas las interfaces requieren autenticación mediante Bearer Token##


        **Obtención de la API Key**:


        Visita la [página de gestión de API
        Key](https://evolink.ai/dashboard/keys) para obtener tu API Key


        **Al usarla, añádela en la cabecera de la solicitud**:

        ```

        Authorization: Bearer YOUR_API_KEY

        ```

````