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

# Tomar una decisión

> Evalúa preguntas tipadas sobre el estado de la aplicación con los modelos de decisión compatibles.

Usa `POST /v1/decisions` cuando tu aplicación necesite respuestas estructuradas que el código pueda consumir directamente. Los modelos compatibles incluyen TypeSafe Jev 1.13 (`typesafe/jev-1.13.0`), Together Tev1 4B Experimental (`together/tev1-4b-experimental`) y Respan Span-01 (`respan/span-01:free` y `respan/span-01`).

La solicitud contiene:

* `state`: una cadena, objeto o matriz que contiene la información que se va a evaluar.
* `questions`: un mapa de preguntas con nombre. Cada pregunta establece `type` en `noul`, `choice` o `score` e incluye `instructions`; los tipos compatibles dependen del modelo seleccionado.
* `model`: el identificador del modelo de Phaseo. Usa `typesafe/jev-1.13.0` para Jev 1.13 o `typesafe/jev-latest` para seguir la última versión de Jev.

Liquid D1 (`liquid-ai/d1:free`, también disponible como `liquid-ai/d1`) y Perplexity Decider 27B (`perplexity/decider-27b`) admiten los tres tipos de preguntas. D1 es gratuito durante el acceso anticipado experimental. Decider cuesta 0,04 USD por millón de tokens de entrada, incluidos los de imagen; los tokens de salida son gratuitos. Añade una credencial del proveedor Perplexity en Phaseo para usar Decider. Su estado con imágenes usa URL de datos base64 PNG, JPEG o WebP; no admite URL de imágenes remotas. Cada pregunta de elección acepta hasta 255 opciones y cada pregunta de puntuación hasta 10 niveles. Comprueba la disponibilidad antes de invocar cualquiera de los modelos.

Para Respan Span-01, `state` debe ser un segmento de conversación con una matriz `input` de mensajes previos y un mensaje `output` del asistente. Span-01 solo admite preguntas `noul`. La respuesta `noul` es la probabilidad de que el comportamiento esté presente; `probabilities` también incluye las probabilidades de ausencia y de no poder observarlo.

```json theme={null}
{
  "model": "respan/span-01:free",
  "state": {
    "input": [{ "role": "user", "content": "Please connect me to a person." }],
    "output": { "role": "assistant", "content": "I will connect you to support." }
  },
  "questions": {
    "escalation": {
      "type": "noul",
      "instructions": "Does the assistant offer a human handoff?"
    }
  }
}
```

`respan/span-01:free` es el modelo Lite gratuito con un límite diario; Phaseo lo asigna al identificador de modelo API `span-01-free` de Respan. `respan/span-01` se asigna al identificador `span-01-pro` de Respan y Respan lo factura a 0,02 USD por millón de tokens de entrada; los tokens de salida son gratuitos. Span-01 está en acceso anticipado, así que Respan debe habilitar el acceso para tu organización. Añade tu clave API de Respan como credencial del proveedor Respan en Phaseo antes de invocar estos modelos.

Las respuestas usan las mismas claves que `questions`. Las respuestas `choice` incluyen la opción seleccionada, probabilidades y confianza; las respuestas `noul` incluyen una probabilidad de 0 a 1; y las respuestas `score` incluyen una puntuación ponderada por probabilidad, leyenda, probabilidades y confianza.

Para el ejemplo de Respan, una respuesta tiene este aspecto:

```json theme={null}
{
  "answers": {
    "escalation": {
      "type": "noul",
      "noul": 0.73,
      "probabilities": {
        "true": 0.73,
        "false": 0.25,
        "not_observable": 0.02
      }
    }
  }
}
```

Jev permite combinar los tres tipos de preguntas en una solicitud; Span-01 solo admite preguntas `noul`. Consulta el [inicio rápido](../../quickstart) para ver ejemplos de cURL, JavaScript, SDK de TypeScript y SDK de Python listos para copiar y pegar. Jev 1.13 se factura a 0,042 USD por millón de tokens de entrada; los tokens de salida son gratuitos.

Para conocer la semántica de las preguntas del proveedor, consulta la [referencia API](https://docs.typesafe.ai/api) de TypeSafe.

### Decisiones sobre imágenes con Clef

`cloudflare/clef` y `cloudflare/clef-flash` admiten los tres tipos de preguntas e imágenes integradas mediante Cloudflare Workers AI. Cada uno tiene una ventana de contexto de 65.536 tokens. La entrada cuesta 0,24 USD por millón de tokens en Clef y 0,09 USD en Clef Flash.

```json theme={null}
{
  "model": "cloudflare/clef-flash",
  "state": "Inspect the attached product photo.",
  "images": [{ "content_type": "image/png", "base64": "<base64 image bytes>" }],
  "questions": {
    "damaged": { "type": "noul", "instructions": "Is the product visibly damaged?" }
  }
}
```

También puedes proporcionar una cadena `data:image/png;base64,...` en `images`. Clef admite hasta cuatro imágenes PNG, JPEG o WebP, cada una de un máximo de 4 MiB y 16 megapíxeles, con un total máximo de 8 MiB de datos de imagen decodificados y un cuerpo de solicitud de 13 MiB. No se admiten URL remotas. Cloudflare valida los formatos y las dimensiones de las imágenes. Los modelos sin soporte para imágenes rechazan las solicitudes con imágenes.

Clef admite un máximo de 64 preguntas, con identificadores de hasta 100 letras, dígitos, guiones bajos, puntos o guiones. Las preguntas de elección requieren entre 2 y 255 opciones; las de puntuación, entre 2 y 10 niveles. Consulta la [documentación de Clef](https://developers.cloudflare.com/workers-ai/models/clef/) de Cloudflare.


## OpenAPI

````yaml es/openapi/v1/openapi.localized.yaml POST /decisions
openapi: 3.0.3
info:
  title: Phaseo Gateway API
  description: >-
    Una API de pasarela para acceder a diversos modelos de IA mediante endpoints
    compatibles con OpenAI.
  version: 1.0.0
  contact:
    name: Phaseo
    url: https://phaseo.app
    email: danielbutler500@gmail.com
servers:
  - url: https://api.phaseo.app/v1
    description: Enrutamiento global
security:
  - BearerAuth: []
tags:
  - name: Gateway
    description: Core Phaseo Gateway operations.
paths:
  /decisions:
    post:
      tags:
        - Gateway
      summary: Tomar decisiones estructuradas
      description: >-
        Evalúa preguntas tipadas Noul, Choice y Score sobre un estado
        estructurado con un modelo de decisión como TypeSafe Jev.
      operationId: makeDecision
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DecisionsRequest'
      responses:
        '200':
          description: Respuesta de decisiones estructuradas
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionsResponse'
components:
  schemas:
    DecisionsRequest:
      type: object
      required:
        - model
        - state
        - questions
      properties:
        model:
          type: string
          description: >-
            Identificador canónico del modelo de Phaseo o alias del modelo del
            proveedor.
          default: typesafe/jev-1.13.0
        state:
          description: Estado estructurado evaluado por el modelo.
          oneOf:
            - type: string
            - type: object
              additionalProperties: true
            - type: array
              items: {}
        questions:
          type: object
          minProperties: 1
          maxProperties: 128
          additionalProperties:
            oneOf:
              - $ref: '#/components/schemas/DecisionNoulQuestion'
              - $ref: '#/components/schemas/DecisionChoiceQuestion'
              - $ref: '#/components/schemas/DecisionScoreQuestion'
        images:
          type: array
          maxItems: 4
          description: >-
            Imágenes integradas para modelos de decisión con capacidad visual.
            Clef acepta PNG, JPEG o WebP; no se admiten URL remotas. Máximo de 4
            MiB y 16 megapíxeles por imagen, 8 MiB de datos decodificados en
            total y 13 MiB por cuerpo de solicitud.
          items:
            oneOf:
              - type: string
                pattern: >-
                  ^[Dd][Aa][Tt][Aa]:image/(png|jpeg|webp);base64,[A-Za-z0-9+/]+={0,2}$
              - $ref: '#/components/schemas/DecisionImage'
        meta:
          type: boolean
          default: false
        echo_upstream_request:
          type: boolean
        debug:
          $ref: '#/components/schemas/DebugOptions'
        provider:
          $ref: '#/components/schemas/ProviderRoutingOptions'
        routing:
          $ref: '#/components/schemas/ProviderRoutingOptions'
        metadata:
          type: object
          additionalProperties: true
    DecisionsResponse:
      type: object
      properties:
        model:
          type: string
        answers:
          type: object
          additionalProperties: true
        usage:
          $ref: '#/components/schemas/DecisionsUsage'
        request_id:
          type: string
          nullable: true
        meta:
          type: object
          additionalProperties: true
    DecisionNoulQuestion:
      type: object
      required:
        - type
        - instructions
      properties:
        type:
          type: string
          enum:
            - noul
        instructions:
          $ref: '#/components/schemas/DecisionInstructions'
        criteria:
          type: object
          properties:
            'true':
              type: string
            'false':
              type: string
          additionalProperties: true
    DecisionChoiceQuestion:
      type: object
      required:
        - type
        - instructions
        - criteria
      properties:
        type:
          type: string
          enum:
            - choice
        instructions:
          $ref: '#/components/schemas/DecisionInstructions'
        criteria:
          type: object
          minProperties: 1
          additionalProperties:
            type: string
            nullable: true
    DecisionScoreQuestion:
      type: object
      required:
        - type
        - instructions
        - criteria
      properties:
        type:
          type: string
          enum:
            - score
        instructions:
          $ref: '#/components/schemas/DecisionInstructions'
        criteria:
          type: array
          minItems: 2
          items:
            type: string
    DecisionImage:
      type: object
      required:
        - content_type
        - base64
      properties:
        content_type:
          type: string
          enum:
            - image/png
            - image/jpeg
            - image/webp
        base64:
          type: string
          pattern: ^[A-Za-z0-9+/]+={0,2}$
    DebugOptions:
      type: object
      description: >-
        Controles de depuración de la pasarela. Estas opciones nunca se reenvían
        al proveedor.
      properties:
        enabled:
          type: boolean
        return_upstream_request:
          type: boolean
        return_upstream_response:
          type: boolean
        trace:
          type: boolean
        trace_level:
          type: string
          enum:
            - summary
            - full
    ProviderRoutingOptions:
      type: object
      description: >-
        Preferencias de enrutamiento de proveedores para la selección de la
        pasarela.
      properties:
        order:
          type: array
          items:
            type: string
        only:
          type: array
          items:
            type: string
        ignore:
          type: array
          items:
            type: string
        include_alpha:
          type: boolean
          description: >-
            Incluir proveedores alpha en el enrutamiento (desactivado de forma
            predeterminada).
        allow_fallbacks:
          type: boolean
          nullable: true
          description: Permitir recurrir a otro proveedor apto tras un fallo.
        require_parameters:
          type: boolean
          nullable: true
          description: >-
            Exigir que el proveedor admita los parámetros solicitados antes del
            enrutamiento.
        required_execution_region:
          type: string
          nullable: true
          description: >-
            Restringir el enrutamiento a proveedores con la región de ejecución
            solicitada.
        required_data_region:
          type: string
          nullable: true
          description: >-
            Restringir el enrutamiento a proveedores con la región de datos
            solicitada.
        require_zero_data_retention:
          type: boolean
          nullable: true
          description: >-
            Restringir el enrutamiento a proveedores que admiten la retención
            cero de datos.
        data_collection:
          type: string
          nullable: true
          enum:
            - allow
            - deny
        zdr:
          type: boolean
          nullable: true
        enforce_distillable_text:
          type: boolean
          nullable: true
        quantizations:
          type: array
          nullable: true
          items:
            type: string
        sort:
          oneOf:
            - type: string
            - type: object
              additionalProperties: true
          description: >-
            Ordenar los proveedores para esta solicitud, por ejemplo, por
            precio, latencia o rendimiento.
        max_price:
          type: object
          properties:
            prompt:
              oneOf:
                - type: number
                - type: string
            completion:
              oneOf:
                - type: number
                - type: string
            image:
              oneOf:
                - type: number
                - type: string
            audio:
              oneOf:
                - type: number
                - type: string
            request:
              oneOf:
                - type: number
                - type: string
        preferred_min_throughput:
          oneOf:
            - type: number
            - type: object
              additionalProperties:
                type: number
        preferred_max_latency:
          oneOf:
            - type: number
            - type: object
              additionalProperties:
                type: number
    DecisionsUsage:
      type: object
      properties:
        input_tokens:
          type: integer
          minimum: 0
        output_tokens:
          type: integer
          minimum: 0
        total_tokens:
          type: integer
          minimum: 0
    DecisionInstructions:
      oneOf:
        - type: string
        - type: object
          additionalProperties: true
        - type: array
          items: {}
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Autenticación con token Bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.