

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.

# Complétion de texte Mistral AI
<a name="model-parameters-mistral-text-completion"></a>

L’API de complétion de texte Mistral AI vous permet de générer du texte à l’aide d’un modèle Mistral AI.

Vous effectuez des demandes d’inférence aux modèles Mistral AI avec [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) ou [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html) (streaming). 

Les modèles Mistral AI sont disponibles sous la [licence Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt). Pour plus d’informations sur l’utilisation des modèles Mistral AI, consultez la [documentation Mistral AI](https://docs.mistral.ai/).

**Topics**
+ [Modèles pris en charge](#mistral--text-completion-supported-models)
+ [Demande et réponse](#model-parameters-mistral-text-completion-request-response)
+ [Exemple de code](#api-inference-examples-mistral-text-completion)

## Modèles pris en charge
<a name="mistral--text-completion-supported-models"></a>

Vous pouvez utiliser les modèles Mistral AI suivants.
+ Mistral 7B Instruct
+ Mixtral 8X7B Instruct
+ Mistral Large
+ Mistral Small

Vous avez besoin de l’ID du modèle que vous voulez utiliser. Pour obtenir l’ID du modèle, consultez [Modèles de fondation pris en charge dans Amazon Bedrock](models-supported.md). 

## Demande et réponse
<a name="model-parameters-mistral-text-completion-request-response"></a>

------
#### [ Request ]

Les modèles Mistral AI ont les paramètres d’inférence suivants. 

```
{
    "prompt": string,
    "max_tokens" : int,
    "stop" : [string],    
    "temperature": float,
    "top_p": float,
    "top_k": int
}
```

Les paramètres suivants sont obligatoires.
+  **prompt** : (obligatoire) invite que vous souhaitez transmettre au modèle, comme illustré dans l’exemple suivant. 

  ```
  <s>[INST] What is your favourite condiment? [/INST]
  ```

  L’exemple suivant montre comment mettre en forme une invite complexe. 

  ```
  <s>[INST] What is your favourite condiment? [/INST]
  Well, I'm quite partial to a good squeeze of fresh lemon juice. 
  It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!</s> 
  [INST] Do you have mayonnaise recipes? [/INST]
  ```

  Le texte du rôle d’utilisateur se trouve à l’intérieur des jetons `[INST]...[/INST]`, le texte situé en dehors est le rôle d’assistant. Le début et la fin d’une chaîne sont représentés par les jetons `<s>` (début de chaîne) et `</s>` (fin de chaîne). Pour plus d’informations sur l’envoi d’une invite de discussion dans le format correct, consultez [Modèle de discussion](https://docs.mistral.ai/models/#chat-template) dans la documentation Mistral AI. 

Les paramètres suivants sont facultatifs.
+ **max\$1tokens** : spécifiez le nombre maximum de jetons à utiliser dans la réponse générée. Le modèle tronque la réponse une fois que le texte généré dépasse `max_tokens`.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-mistral-text-completion.html)
+ **stop** : liste de séquences d’arrêt qui, si elles sont générées par le modèle, empêchent le modèle de générer d’autres sorties.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-mistral-text-completion.html)
+ **temperature** : contrôle le caractère aléatoire des prédictions faites par le modèle. Pour plus d’informations, consultez [Génération de réponse d’influence à l’aide de paramètres d’inférence](inference-parameters.md).     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-mistral-text-completion.html)
+ **top\$1p** : contrôle la diversité du texte généré par le modèle en définissant le pourcentage de candidats les plus probables que le modèle prend en compte pour le jeton suivant. Pour plus d’informations, consultez [Génération de réponse d’influence à l’aide de paramètres d’inférence](inference-parameters.md).    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-mistral-text-completion.html)
+ **top\$1k** : contrôle le nombre de candidats les plus probables que le modèle prend en compte pour le jeton suivant. Pour plus d’informations, consultez [Génération de réponse d’influence à l’aide de paramètres d’inférence](inference-parameters.md).    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/model-parameters-mistral-text-completion.html)

------
#### [ Response ]

Voici la réponse `body` d’un appel `InvokeModel` :

```
{
  "outputs": [
    {
        "text": string,
        "stop_reason": string
    }
  ]
}
```

La réponse `body` inclut les champs suivants :
+ **outputs** : liste des sorties du modèle. Chaque sortie contient les champs suivants.
  + **text** : le texte généré par le modèle. 
  + **stop\$1reason** : raison pour laquelle la réponse a cessé de générer du texte. Les valeurs possibles sont :
    + **arrêt** : le modèle a fini de générer le texte pour l’invite d’entrée. Le modèle s’arrête parce qu’il n’a plus de contenu à générer ou s’il génère l’une des séquences d’arrêt que vous définissez dans le paramètre de demande `stop`.
    + **longueur** : la longueur des jetons pour le texte généré dépasse la valeur de `max_tokens` dans l’appel `InvokeModel` (`InvokeModelWithResponseStream`, si vous diffusez une sortie). La réponse est tronquée en fonction du nombre de jetons défini dans `max_tokens`. 

------

## Exemple de code
<a name="api-inference-examples-mistral-text-completion"></a>

Cet exemple montre comment appeler le modèle Mistral 7B Instruct.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate text using a Mistral AI model.
"""
import json
import logging
import boto3


from botocore.exceptions import ClientError

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_text(model_id, body):
    """
    Generate text using a Mistral AI model.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        JSON: The response from the model.
    """

    logger.info("Generating text with Mistral AI model %s", model_id)

    bedrock = boto3.client(service_name='bedrock-runtime')

    response = bedrock.invoke_model(
        body=body,
        modelId=model_id
    )

    logger.info("Successfully generated text with Mistral AI model %s", model_id)

    return response


def main():
    """
    Entrypoint for Mistral AI example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    try:
        model_id = 'mistral.mistral-7b-instruct-v0:2'

        prompt = """<s>[INST] In Bash, how do I list all text files in the current directory
          (excluding subdirectories) that have been modified in the last month? [/INST]"""

        body = json.dumps({
            "prompt": prompt,
            "max_tokens": 400,
            "temperature": 0.7,
            "top_p": 0.7,
            "top_k": 50
        })

        response = generate_text(model_id=model_id,
                                 body=body)

        response_body = json.loads(response.get('body').read())

        outputs = response_body.get('outputs')

        for index, output in enumerate(outputs):

            print(f"Output {index + 1}\n----------")
            print(f"Text:\n{output['text']}\n")
            print(f"Stop reason: {output['stop_reason']}\n")

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
    else:
        print(f"Finished generating text with Mistral AI model {model_id}.")


if __name__ == "__main__":
    main()
```