# Format JSON pour les outils LLM

## Introduction

Partager un outil de manière à ce qu'il puisse être rapidement ajouté à un programme ou à un éditeur d'outils serait grandement amélioré avec une méthode standard pour représenter un outil et comment l'utiliser. Nous voulons activer des fonctionnalités telles que les suivantes :

* Une icône pour représenter visuellement l'outil
* Métadonnées pour l'invite :
  * Un nom pour l'outil
  * Une description pour l'outil
  * Des notes d'utilisation pour l'outil
* Paramètres de pseudo qui sont inclus dans la chaîne d'outils
* Sortie attendue
* Versioning et horodatage.

## Spécification de Format JSON

```json
{
  "version": "chaîne de caractères ou entier",
  "model_prompt": "chaîne de caractères avec des espaces réservés {{nom_variable}}",
  "metadata": {
    "prompt_name": "chaîne de caractères",
    "description": "chaîne de caractères",
    "usage_notes": "chaîne de caractères",
    "model_version": ["chaîne de caractères", "chaîne de caractères", …],
    "creator": {
      "name": "chaîne de caractères",
      "email": "chaîne de caractères",
      "organization": "chaîne de caractères"
    },
    "parameters": {
      "temperature": "nombre à virgule flottante",
      "max_tokens": "entier",
      "top_p": "nombre à virgule flottante",
      "frequency_penalty": "nombre à virgule flottante",
      "presence_penalty": "nombre à virgule flottante"
    },
    "variables": [
      {
        "name": "nom variable 1",
        "type": "texte",
        "description": "chaîne de caractères",
        "default": "chaîne de caractères",
      },
      {
        "name": "nom variable 2",
        "type": "sélection unique",
        "description": "chaîne de caractères",
        "default": "valeur1",
        "allowed_values": ["valeur1", "valeur2", "valeur3"]
      },
      {
        "name": "nom variable 3",
        "type": "sélection multiple",
        "description": "chaîne de caractères",
        "default": ["valeur1", "valeur2"]
        "allowed_values": ["valeur1", "valeur2", "valeur3"]
      },
      ...
    ],
    "expected_output": {
      "type": "chaîne de caractères (par exemple, texte, code, limité)",
      "format": "chaîne de caractères (facultatif, par exemple, JSON, XML, CSV)",
      "language": "chaîne de caractères (facultatif, par exemple, Python, JavaScript)",
      "allowed_values": ["chaîne de caractères1", "chaîne de caractères2", ...] (facultatif)
    },
    "avatar_type": "chaîne de caractères (par exemple, URL, base64)",
    "avatar": "chaîne de caractères (URL ou image codée en base64), 256x256 pixels recommandés",
    "timestamp": "chaîne de caractères (format ISO 8601)"
  }
}
```

Vous pouvez télécharger notre exemple de JSON [ici](https://skydeck-public-assets.s3.amazonaws.com/sample_tool.json).

## Description des Champs

* **model\_prompt**: Une chaîne contenant l'indication de modèle GPT.
* **metadata**: Un objet contenant des informations supplémentaires sur l'indication de modèle GPT, y compris les sous-champs suivants :
  * **model\_version**: Une chaîne indiquant la version du modèle GPT utilisé.
  * **creator**: Un objet contenant des informations sur le créateur de l'indication de modèle GPT, avec les sous-champs suivants :
    * **name**: Une chaîne représentant le nom du créateur.
    * **email**: Une chaîne représentant le courrier électronique du créateur.
    * **organization**: Une chaîne représentant l'organisation à laquelle est affilié le créateur.
  * **parameters**: Un objet contenant des informations sur les paramètres du modèle GPT, avec les sous-champs suivants :
    * **temperature**: Un flottant indiquant la température utilisée pour contrôler l'aléa de la sortie.
    * **max\_tokens**: Un entier indiquant le nombre maximum de jetons dans la réponse générée.
    * **top\_p**: Un flottant représentant le seuil de probabilité d'échantillonnage du noyau.
    * **frequency\_penalty**: Un flottant représentant la pénalité appliquée aux jetons en fonction de leur fréquence dans l'ensemble de données.
    * **presence\_penalty**: Un flottant représentant la pénalité appliquée aux nouveaux jetons en fonction de leur présence dans l'indication.
  * **timestamp**: Une chaîne au format ISO 8601 représentant la date et l'heure de création ou de dernière modification de l'indication de modèle GPT.
  * **expected\_output (Optionnel)**: Un objet contenant des champs liés à la sortie attendue du model\_prompt, y compris les sous-champs suivants :
    * **type**: Une chaîne indiquant le type de sortie attendu du model\_prompt.
    * **format (Optionnel)**: Une chaîne représentant le format de la sortie attendue si applicable.
    * **language (Optionnel)**: Une chaîne représentant le langage de programmation de la sortie attendue si le type est `code`.
    * **allowed\_values (Optionnel)**: Un tableau de chaînes contenant une liste de valeurs de sortie autorisées si le type est `limited`.
  * **variables (Optionnel)**: Une liste contenant des variables qui pourraient être insérées dans la chaîne `model_prompt` au format f-string. Chaque variable contient les sous-champs suivants :
    * **name**: Une chaîne représentant le nom de la variable.
    * **type**: Une chaîne montrant le type de variable. Les valeurs possibles de `type` sont actuellement `text` pour la variable par défaut, et `single-select` ou `multi-select` pour les variables de sélection.
    * **description**: Une chaîne montrant la description de la variable, y compris les usages et les exemples.
    * **default**: Une valeur montrant la valeur par défaut de la variable. Cette valeur est une chaîne si `type` est `text` ou `single-select`, et un tableau de chaînes pour `multi-select`.
    * **allowed\_values**: Un tableau de chaînes contenant une liste de valeurs autorisées si le type de variable est `single-select` ou `multi-select`
  * **avatar (Optionnel)**: Un objet contenant des champs liés à l'image graphique agissant comme un avatar ou une icône pour l'indication, y compris les sous-champs suivants :
    * **avatar\_type**: Une chaîne spécifiant le type de données d'avatar incluses.
    * **avatar**: Une chaîne contenant l'URL pointant vers l'image si le type d'avatar est `url`, ou une chaîne encodée en base64 représentant l'image si le type d'avatar est `base64`.
  * **prompt\_name (Optionnel)**: Une chaîne représentant le nom de l'indication.
  * **description (Optionnel)**: Une chaîne fournissant une brève description de l'outil et de son but.
  * **usage\_notes (Optionnel)**: Une chaîne contenant des notes libres du créateur sur l'utilisation ou toute considération spécifique liée à l'outil.

Pour spécifier le format de la sortie attendue du model\_prompt, vous pouvez ajouter un objet `expected_output` à l'intérieur de l'objet `metadata`. En fonction du type de sortie attendu, vous pouvez inclure les sous-champs pertinents dans l'objet `expected_output`.

Pour inclure des champs pour les variables qui pourraient être insérés dans la chaîne `model_prompt` au format f-string, vous pouvez ajouter une liste `variables` séparée à l'intérieur de l'objet `metadata`.

Pour inclure une image graphique agissant comme un avatar ou une icône pour l'indication, vous pouvez ajouter un champ `avatar` à l'intérieur de l'objet `metadata`.

L'inclusion des champs `expected_output`, `variables`, `avatar`, `prompt_name`, `description`, et `usage_notes` à l'intérieur de l'objet `metadata` aide à garder toute l'information contextuelle sur l'indication en un seul endroit, facilitant sa gestion et sa compréhension.

Vous pouvez utiliser le champ `version` au niveau supérieur de l'objet JSON pour suivre explicitement la version de l'ensemble du fichier JSON
