

# Processamento de eventos de saída com a API bidirecional
<a name="output-events"></a>

**nota**  
Esta documentação é para o Amazon Nova versão 1. Para ver o guia do Amazon Nova 2 Sonic, acesse [Como tratar eventos de saída com a API bidirecional](https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-output-events.html).

Quando o modelo Amazon Nova Sonic responde, ele segue uma sequência estruturada de eventos. O fluxo começa com um evento `completionStart` que contém identificadores exclusivos, como `sessionId`, `promptName` e `completionId`. Esses identificadores são consistentes em todo o ciclo de resposta e unem todos os eventos de resposta subsequentes.

Cada tipo de resposta segue um padrão consistente de três partes: `contentStart` define o tipo e o formato do conteúdo, o evento real do conteúdo e `contentEnd` conclui esse segmento. A resposta normalmente inclui vários blocos de conteúdo em sequência: transcrição do reconhecimento automático de fala (ASR) (o que o usuário disse), uso opcional de ferramentas (quando informações externas são necessárias), resposta de texto (o que o modelo planeja dizer) e resposta de áudio (a saída falada).

A transcrição do ASR aparece primeiro, fornecendo a compreensão do modelo sobre a fala do usuário com `role: "USER"` e `"additionalModelFields": "{\"generationStage\":\"FINAL\"}"` no `contentStart`. Quando o modelo precisa de dados externos, ele envia eventos relacionados à ferramenta com nomes e parâmetros específicos da ferramenta. A resposta de texto fornece uma prévia do discurso planejado com `role: "ASSISTANT"` e `"additionalModelFields": "{\"generationStage\":\"SPECULATIVE\"}"`. A resposta de áudio então fornece trechos de fala codificados no Base64 que compartilham o mesmo `contentId` em todo o streaming.

Durante a geração de áudio, o Amazon Nova Sonic é compatível com o fluxo natural de conversação por meio de seu recurso de barge-in. Quando um usuário interrompe o Amazon Nova Sonic enquanto ele está falando, o Nova Sonic imediatamente para de gerar fala, muda para o modo de escuta e envia uma notificação de conteúdo indicando que a interrupção ocorreu. Como o Nova Sonic opera mais rápido do que em tempo real, o áudio pode já ter sido entregue, mas ainda não foi reproduzido. A notificação de interrupção permite que a aplicação cliente limpe sua fila de áudios e interrompa a reprodução imediatamente, criando uma experiência conversacional responsiva.

Depois que a geração de áudio é concluída (ou interrompida via barge-in), o Amazon Nova Sonic fornece uma resposta de texto adicional que contém uma transcrição em nível de frase do que foi realmente falado. Essa resposta de texto inclui um evento `contentStart` com `role: "ASSISTANT"` e `"additionalModelFields": "{\"generationStage\":\"FINAL\"}"`.

Durante todo o tratamento da resposta, eventos `usageEvent` são enviados para rastrear o consumo de tokens. Esses eventos contêm métricas detalhadas para tokens de entrada e de saída (tanto de fala quanto de texto) e seus totais acumulados. Cada `usageEvent` mantém o mesmo `sessionId`, `promptName` e `completionId` que outros eventos no fluxo da conversa. A seção de detalhes fornece as alterações incrementais (delta) e os totais acumulados do uso de tokens, permitindo o monitoramento preciso do uso durante a conversa.

O modelo envia um evento `completionEnd` com os identificadores originais e um `stopReason` que indica como a conversa terminou. Essa hierarquia de eventos garante que a aplicação possa rastrear quais partes da resposta estão associadas e processá-las adequadamente, mantendo o contexto em vários turnos.

O fluxo de eventos de saída começa entrando na fase de geração de resposta. Ele começa com o reconhecimento automático de fala, seleciona uma ferramenta para uso, transcreve a fala, gera áudio, finaliza a transcrição e encerra a sessão.

![Diagrama que explica o fluxo de eventos de saída do Amazon Nova Sonic.](http://docs.aws.amazon.com/pt_br/nova/latest/userguide/images/output-events.png)


## Fluxo de eventos de saída
<a name="output-event-flow"></a>

A estrutura do fluxo de eventos de saída é fornecida nesta seção.

1. `UsageEvent`

   ```
   "event": {
       "usageEvent": {
           "completionId": "string", // unique identifier for completion
           "details": {
               "delta": { // incremental changes since last event
                   "input": {
                       "speechTokens": number, // input speech tokens
                       "textTokens": number // input text tokens
                   },
                   "output": {
                       "speechTokens": number, // speech tokens generated
                       "textTokens": number // text tokens generated
                   }
               },
               "total": { // cumulative counts
                   "input": {
                       "speechTokens": number, // total speech tokens processed
                       "textTokens": number // total text tokens processed
                   },
                   "output": {
                       "speechTokens": number, // total speech tokens generated
                       "textTokens": number // total text tokens generated
                   }
               }
           },
           "promptName": "string", // same unique identifier from promptStart event
           "sessionId": "string", // unique identifier
           "totalInputTokens": number, // cumulative input tokens
           "totalOutputTokens": number, // cumulative output tokens
           "totalTokens": number // total tokens in the session
       }
   }
   ```

1. `CompleteStartEvent`

   ```
   "event": {
           "completionStart": {
               "sessionId": "string", // unique identifier
               "promptName": "string", // same unique identifier from promptStart event
               "completionId": "string", // unique identifier
           }
       }
   ```

1. `TextOutputContent`
   + `ContentStart`

     ```
     "event": {
             "contentStart": {
                 "additionalModelFields": "{\"generationStage\":\"FINAL\"}" | "{\"generationStage\":\"SPECULATIVE\"}",
                 "sessionId": "string", // unique identifier
                 "promptName": "string", // same unique identifier from promptStart event
                 "completionId": "string", // unique identifier
                 "contentId": "string", // unique identifier for the content block
                 "type": "TEXT",
                 "role": "USER" | "ASSISTANT",
                 "textOutputConfiguration": {
                     "mediaType": "text/plain"
                 }
             }
         }
     ```
   + `TextOutput`

     ```
     "event": {
             "textOutput": {
                 "sessionId": "string", // unique identifier
                 "promptName": "string", // same unique identifier from promptStart event
                 "completionId": "string", // unique identifier
                 "contentId": "string", // same unique identifier from its contentStart
                 "content": "string" // User transcribe or Text Response
             }
         }
     ```
   + `ContentEnd`

     ```
     "event": {
         "contentEnd": {
                 "sessionId": "string", // unique identifier
                 "promptName": "string", // same unique identifier from promptStart event
                 "completionId": "string", // unique identifier
                 "contentId": "string", // same unique identifier from its contentStart
                 "stopReason": "PARTIAL_TURN" | "END_TURN" | "INTERRUPTED",
                 "type": "TEXT"
         }
       }
     ```

1. `ToolUse`

   1. `ContentStart`

      ```
      "event": {
          "contentStart": {
            "sessionId": "string", // unique identifier
            "promptName": "string", // same unique identifier from promptStart event
            "completionId": "string", // unique identifier
            "contentId": "string", // unique identifier for the content block
            "type": "TOOL",
            "role": "TOOL",
            "toolUseOutputConfiguration": {
              "mediaType": "application/json"
            }
          }
        }
      ```

   1. `ToolUse`

      ```
      "event": {
          "toolUse": {
            "sessionId": "string", // unique identifier
            "promptName": "string", // same unique identifier from promptStart event
            "completionId": "string", // unique identifier
            "contentId": "string", // same unique identifier from its contentStart
            "content": "json",
            "toolName": "string",
            "toolUseId": "string"
          }
        }
      ```

   1. `ContentEnd`

      ```
      "event": {
          "contentEnd": {
            "sessionId": "string", // unique identifier
            "promptName": "string", // same unique identifier from promptStart event
            "completionId": "string", // unique identifier
            "contentId": "string", // same unique identifier from its contentStart
            "stopReason": "TOOL_USE",
            "type": "TOOL"
          }
        }
      ```

1. `AudioOutputContent`

   1. `ContentStart`

      ```
      "event": {
          "contentStart": {
            "sessionId": "string", // unique identifier
            "promptName": "string", // same unique identifier from promptStart event
            "completionId": "string", // unique identifier
            "contentId": "string", // unique identifier for the content block
            "type": "AUDIO",
            "role": "ASSISTANT",
            "audioOutputConfiguration": {
                  "mediaType": "audio/lpcm",
                  "sampleRateHertz": 8000 | 16000 | 24000,
                  "sampleSizeBits": 16,
                  "encoding": "base64",
                  "channelCount": 1
                  }
            }
        }
      ```

   1. `AudioOutput`

      ```
      "event": {
              "audioOutput": {
                  "sessionId": "string", // unique identifier
                  "promptName": "string", // same unique identifier from promptStart event
                  "completionId": "string", // unique identifier
                  "contentId": "string", // same unique identifier from its contentStart
                  "content": "base64EncodedAudioData", // Audio
              }
          }
      ```

   1. `ContentEnd`

      ```
      "event": {
          "contentEnd": {
            "sessionId": "string", // unique identifier
            "promptName": "string", // same unique identifier from promptStart event
            "completionId": "string", // unique identifier
            "contentId": "string", // same unique identifier from its contentStart
            "stopReason": "PARTIAL_TURN" | "END_TURN",
            "type": "AUDIO"
          }
        }
      ```

1. `CompletionEndEvent`

   ```
   "event": {
       "completionEnd": {
         "sessionId": "string", // unique identifier
         "promptName": "string", // same unique identifier from promptStart event
         "completionId": "string", // unique identifier
         "stopReason": "END_TURN" 
       }
     }
   ```