

# Processamento de eventos de entrada com a API bidirecional
<a name="input-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 entrada com a API bidirecional](https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-input-events.html).

A API de streaming bidirecional usa uma arquitetura orientada por eventos com eventos estruturados de entrada e saída. Compreender a ordem correta dos eventos é crucial para implementar aplicações de conversação bem-sucedidas e manter o estado adequado da conversa durante as interações.

A conversa do Nova Sonic segue uma sequência estruturada de eventos. Você começa enviando um evento `sessionStart` que contém os parâmetros de configuração de inferência, como temperatura e limites de token. Em seguida, você envia `promptStart` para definir o formato de saída de áudio e as configurações de ferramentas, atribuindo um identificador `promptName` exclusivo que deve ser incluído em todos os eventos subsequentes.

Para cada tipo de interação (prompt do sistema, áudio etc.), você segue um padrão de três partes: use `contentStart` para definir o tipo de conteúdo e o perfil do conteúdo (`SYSTEM`, `USER`, `ASSISTANT`, `TOOL`), depois forneça o evento de conteúdo real e finalize com `contentEnd` para concluir o segmento. O evento `contentStart` especifica se você está enviando resultados de ferramentas, transmitindo áudio ou se é um prompt do sistema. O evento `contentStart` inclui um identificador `contentName` exclusivo.

Um histórico de conversa pode ser incluído apenas uma vez, após o prompt do sistema e antes do início do streaming de áudio. Ele segue o mesmo padrão `contentStart`/`textInput`/`contentEnd`. Os perfis `USER` e `ASSISTANT` devem ser definidos no evento `contentStart` para cada mensagem histórica. Isso fornece um contexto essencial para a conversa atual, mas deve ser concluído antes que qualquer nova entrada do usuário comece.

O streaming de áudio opera com amostragem contínua de microfone. Depois de enviar um `contentStart` inicial, os quadros de áudio (aproximadamente 32 ms cada) são capturados diretamente do microfone e enviados imediatamente como eventos `audioInput` usando o mesmo `contentName`. Essas amostras de áudio devem ser transmitidas em tempo real à medida que são capturadas, mantendo a cadência natural de amostragem do microfone durante toda a conversa. Todos os quadros de áudio compartilham um único contêiner de conteúdo até que a conversa termine e seja explicitamente concluída.

Depois que a conversa terminar ou precisar ser encerrada, é essencial fechar adequadamente todos os streamings abertos e encerrar a sessão na sequência correta. Para encerrar adequadamente uma sessão e evitar vazamentos de recursos, você deve seguir uma sequência de fechamento específica:

1. Feche todos os streamings de áudio abertos com o evento `contentEnd`.

1. Envie um evento `promptEnd` que faça referência ao `promptName` original.

1. Envie o evento `sessionEnd`.

Ignorar qualquer um desses eventos de encerramento pode resultar em conversas incompletas ou em recursos órfãos.

Esses identificadores criam uma estrutura hierárquica: o `promptName` une todos os eventos da conversa, enquanto cada `contentName` marca os limites de blocos de conteúdo específicos. Essa hierarquia garante que o modelo mantenha o contexto adequado durante toda a interação.

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


## Fluxo de eventos de entrada
<a name="input-event-flow"></a>

A estrutura do fluxo de eventos de entrada é fornecida nesta seção.

1. `RequestStartEvent`

   ```
   {
       "event": {
           "sessionStart": {
               "inferenceConfiguration": {
                   "maxTokens": "int",
                   "topP": "float",
                   "temperature": "float"
               }
           }
       }
   }
   ```

1. `PromptStartEvent`

   ```
   {
       "event": {
           "promptStart": {
               "promptName": "string", // unique identifier same across all events i.e. UUID
               "textOutputConfiguration": {
                   "mediaType": "text/plain"
               },
               "audioOutputConfiguration": {
                   "mediaType": "audio/lpcm",
                   "sampleRateHertz": 8000 | 16000 | 24000,
                   "sampleSizeBits": 16,
                   "channelCount": 1,
                   "voiceId": "matthew" | "tiffany" | "amy" |
                           "lupe" | "carlos" | "ambre" | "florian" |
                           "greta" | "lennart" | "beatrice" | "lorenzo",
                   "encoding": "base64",
                   "audioType": "SPEECH",
               },
               "toolUseOutputConfiguration": {
                   "mediaType": "application/json"
               },
               "toolConfiguration": {
                   "tools": [{
                       "toolSpec": {
                           "name": "string",
                           "description": "string",
                           "inputSchema": {
                               "json": "{}"
                           }
                       }
                   }]
               }
           }
       }
   }
   ```

1. `InputContentStartEvent`
   + `Text`

     ```
     {
         "event": {
             "contentStart": {
                 "promptName": "string", // same unique identifier from promptStart event
                 "contentName": "string", // unique identifier for the content block
                 "type": "TEXT",
                 "interactive": false,
                 "role": "SYSTEM" | "USER" | "ASSISTANT",
                 "textInputConfiguration": {
                     "mediaType": "text/plain"
                 }
             }
         }
     }
     ```
   + `Audio`

     ```
     {
         "event": {
             "contentStart": {
                 "promptName": "string", // same unique identifier from promptStart event
                 "contentName": "string", // unique identifier for the content block
                 "type": "AUDIO",
                 "interactive": true,
                 "role": "USER",
                 "audioInputConfiguration": {
                     "mediaType": "audio/lpcm",
                     "sampleRateHertz": 8000 | 16000 | 24000,
                     "sampleSizeBits": 16,
                     "channelCount": 1,
                     "audioType": "SPEECH",
                     "encoding": "base64"
                 }
             }
         }
     }
     ```
   + `Tool`

     ```
     {
         "event": {
             "contentStart": {
                 "promptName": "string", // same unique identifier from promptStart event
                 "contentName": "string", // unique identifier for the content block
                 "interactive": false,
                 "type": "TOOL",
                 "role": "TOOL",
                 "toolResultInputConfiguration": {
                     "toolUseId": "string", // existing tool use id
                     "type": "TEXT",
                     "textInputConfiguration": {
                         "mediaType": "text/plain"
                     }
                 }
             }
         }
     }
     ```

1. `TextInputContent`

   ```
   {
       "event": {
           "textInput": {
               "promptName": "string", // same unique identifier from promptStart event
               "contentName": "string", // unique identifier for the content block
               "content": "string"
           }
       }
   }
   ```

1. `AudioInputContent`

   ```
   {
       "event": {
           "audioInput": {
               "promptName": "string", // same unique identifier from promptStart event
               "contentName": "string", // same unique identifier from its contentStart
               "content": "base64EncodedAudioData"
           }
       }
   }
   ```

1. `ToolResultContentEvent`

   ```
   "event": {
       "toolResult": {
           "promptName": "string", // same unique identifier from promptStart event
           "contentName": "string", // same unique identifier from its contentStart
           "content": "{\"key\": \"value\"}" // stringified JSON object as a tool result 
       }
   }
   ```

1. `InputContentEndEvent`

   ```
   {
       "event": {
           "contentEnd": {
               "promptName": "string", // same unique identifier from promptStart event
               "contentName": "string" // same unique identifier from its contentStart
           }
       }
   }
   ```

1. `PromptEndEvent`

   ```
   {
       "event": {
           "promptEnd": {
               "promptName": "string" // same unique identifier from promptStart event
           }
       }
   }
   ```

1. `RequestEndEvent`

   ```
   {
       "event": {
           "sessionEnd": {}
       }
   }
   ```