

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gestion des événements de sortie avec l’API bidirectionnelle
<a name="sonic-output-events"></a>

Lorsque le modèle Amazon Nova Sonic répond, il suit une séquence d’événements structurée. Le flux commence par un événement `completionStart` qui contient des identifiants uniques tels que `sessionId`, `promptName` et `completionId`. Ces identifiants sont cohérents tout au long du cycle de réponse et relient tous les événements de réponse suivants.

## Présentation de
<a name="sonic-output-overview"></a>

Chaque type de réponse suit un modèle cohérent en trois parties : `contentStart` définit le type et le format du contenu, l’événement de contenu réel, et `contentEnd` clôt ce segment. La réponse comprend généralement plusieurs blocs de contenu en séquence : transcription par reconnaissance vocale automatique (ASR) (ce que l’utilisateur a dit), utilisation facultative d’un outil (lorsque des informations externes sont nécessaires), réponse textuelle (ce que le modèle prévoit de dire) et réponse audio (la sortie vocale).

## Types de contenu de réponse
<a name="sonic-response-content-types"></a>

### Transcription ASR
<a name="sonic-asr-transcription"></a>

La transcription ASR apparaît en premier, fournissant la compréhension du modèle de la parole de l’utilisateur avec `role: "USER"` et `"additionalModelFields": "{\"generationStage\":\"FINAL\"}"` dans le `contentStart`.

### Utilisation de l'outil
<a name="sonic-tool-use-response"></a>

Lorsque le modèle a besoin de données externes, il envoie des événements liés à des outils avec des noms et des paramètres d’outils spécifiques.

### Réponse textuelle
<a name="sonic-text-response"></a>

La réponse textuelle fournit un aperçu de la parole prévue avec `role: "ASSISTANT"` et `"additionalModelFields": "{\"generationStage\":\"SPECULATIVE\"}"`.

### Réponse audio
<a name="sonic-audio-response"></a>

La réponse audio fournit ensuite des segments de parole encodés en base64 partageant le même `contentId` tout au long du flux.

## Barge-In Support
<a name="sonic-barge-in-support"></a>

Pendant la génération audio, Amazon Nova Sonic prend en charge le flux naturel de la conversation grâce à sa fonctionnalité d’interruption. Lorsqu’un utilisateur interrompt Amazon Nova Sonic pendant qu’il parle, Nova Sonic arrête immédiatement de générer la parole, passe en mode écoute et envoie une notification de contenu indiquant que l’interruption s’est produite. Comme Nova Sonic fonctionne plus rapidement qu’en temps réel, certains éléments audio peuvent avoir déjà été transmis mais ne pas avoir encore été lus. La notification d’interruption permet à l’application cliente d’effacer sa file d’attente audio et d’arrêter immédiatement la lecture, créant ainsi une expérience conversationnelle réactive.

## Transcription finale
<a name="sonic-final-transcription"></a>

Une fois la génération audio terminée (ou interrompue via l’interruption), Amazon Nova Sonic fournit une réponse textuelle supplémentaire qui contient une transcription au niveau de la phrase de ce qui a été réellement dit. Cette réponse textuelle comprend un événement `contentStart` avec `role: "ASSISTANT"` et `"additionalModelFields": "{\"generationStage\":\"FINAL\"}"`.

## Suivi de l'utilisation
<a name="sonic-usage-tracking"></a>

Tout au long du traitement de la réponse, des événements `usageEvent` sont envoyés pour suivre la consommation de jetons. Ces événements contiennent des métriques détaillées sur les jetons d’entrée et de sortie (voix et texte), ainsi que leurs totaux cumulés. Chaque `usageEvent` conserve les mêmes `sessionId`, `promptName` et `completionId` que les autres événements du flux de conversation. La section des détails fournit à la fois les changements incrémentiels (delta) et les totaux cumulés de l’utilisation des jetons, ce qui permet un suivi précis de l’utilisation pendant la conversation.

## Achèvement
<a name="sonic-completion"></a>

Le modèle envoie un événement `completionEnd` avec les identifiants d’origine et un `stopReason` qui indique comment la conversation s’est terminée. Cette hiérarchie d’événements garantit que votre application peut suivre les parties de la réponse qui vont ensemble et les traiter en conséquence, en conservant le contexte de la conversation tout au long des multiples tours.

Le flux d’événements de sortie commence par entrer dans la phase de génération de réponse. Il commence par la reconnaissance vocale automatique, sélectionne un outil à utiliser, transcrit la parole, génère l’audio, finalise la transcription et termine la session.

![Organigramme montrant les étapes de la conversation, du début à l'ASR, en passant par la manipulation des outils, les réponses textuelles et audio, jusqu'à la fin avec les événements associés.](http://docs.aws.amazon.com/fr_fr/nova/latest/nova2-userguide/images/Output-Event -Flow_3.png)


## Flux d'événements de sortie
<a name="sonic-output-event-flow"></a>

La structure du flux d’événements de sortie est décrite dans cette section.

### 1. UsageEvent
<a name="sonic-usage-event"></a>

```
"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
    }
}
```

### 2. CompleteStartEvent
<a name="sonic-completion-start-event"></a>

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

### 3. TextOutputContent
<a name="sonic-text-output-content"></a>

#### ContentStart
<a name="sonic-text-output-content-start"></a>

```
"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
<a name="sonic-text-output"></a>

```
"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
<a name="sonic-text-output-content-end"></a>

```
"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"
    }
}
```

### 4. ToolUse
<a name="sonic-tool-use-output"></a>

#### ContentStart
<a name="sonic-tool-use-content-start"></a>

```
"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"
        }
    }
}
```

#### ToolUse
<a name="sonic-tool-use-event"></a>

```
"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"
    }
}
```

#### ContentEnd
<a name="sonic-tool-use-content-end"></a>

```
"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"
    }
}
```

### 5. AudioOutputContent
<a name="sonic-audio-output-content"></a>

#### ContentStart
<a name="sonic-audio-output-content-start"></a>

```
"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
        }
    }
}
```

#### AudioOutput
<a name="sonic-audio-output-event"></a>

```
"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
    }
}
```

#### ContentEnd
<a name="sonic-audio-output-content-end"></a>

```
"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"
    }
}
```

### 6. CompletionEndEvent
<a name="sonic-completion-end-event"></a>

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