# JSON Format for LLM Værktøjer

## Introduktion

At dele et værktøj på en måde, der hurtigt kan tilføjes til et program eller værktøjsredigerer, ville blive betydeligt forbedret med en standardmetode til at repræsentere et værktøj og hvordan man bruger det. Vi ønsker at muliggøre funktioner som følgende:

* Et ikon til visuelt at repræsentere værktøjet
* Metadata til prompten:
  * Et navn til værktøjet
  * En beskrivelse af værktøjet
  * Brugernoter for værktøjet
* Pladsholderparametre, der er inkluderet i værktøjsstrengen
* Forventet output
* Versionsstyring og tidsstempler.

## JSON Format Specification

```json
{
  "version": "string eller heltal",
  "model_prompt": "string med {{variable_name}} pladsholdere",
  "metadata": {
    "prompt_name": "string",
    "description": "string",
    "usage_notes": "string",
    "model_version": ["string", "string", …],
    "creator": {
      "name": "string",
      "email": "string",
      "organization": "string"
    },
    "parameters": {
      "temperature": "float",
      "max_tokens": "integer",
      "top_p": "float",
      "frequency_penalty": "float",
      "presence_penalty": "float"
    },
    "variables": [
      {
        "name": "variabelnavn 1",
        "type": "text",
        "description": "string",
        "default": "string",
      },
      {
        "name": "variabelnavn 2",
        "type": "single-select",
        "description": "string",
        "default": "value1",
        "allowed_values": ["value1", "value2", "value3"]
      },
      {
        "name": "variabelnavn 3",
        "type": "multi-select",
        "description": "string",
        "default": ["value1", "value2"]
        "allowed_values": ["value1", "value2", "value3"]
      },
      ...
    ],
    "expected_output": {
      "type": "string (f.eks. tekst, kode, begrænset)",
      "format": "string (valgfri, f.eks. JSON, XML, CSV)",
      "language": "string (valgfri, f.eks. Python, JavaScript)",
      "allowed_values": ["string1", "string2", ...] (valgfri)
    },
    "avatar_type": "string (f.eks. url, base64)",
    "avatar": "string (URL eller base64-kodet billede), 256x256 pixels anbefales",
    "timestamp": "string (ISO 8601 format)"
  }
}
```

Du kan downloade vores eksempel JSON [her](https://skydeck-public-assets.s3.amazonaws.com/sample_tool.json).

## Felter Beskrivelse

* **model\_prompt**: En streng, der indeholder GPT-modelprompten.
* **metadata**: Et objekt, der indeholder yderligere information om GPT-modelprompten, herunder følgende underfelter:
  * **model\_version**: En streng, der angiver versionen af den anvendte GPT-model.
  * **creator**: Et objekt, der indeholder information om skaberen af GPT-modelprompten, med følgende underfelter:
    * **name**: En streng, der repræsenterer navnet på skaberen.
    * **email**: En streng, der repræsenterer e-mailen til skaberen.
    * **organization**: En streng, der repræsenterer den organisation, som skaberen er tilknyttet.
  * **parameters**: Et objekt, der indeholder information om GPT-modelparametre, med følgende underfelter:
    * **temperature**: En float, der angiver temperaturen, der bruges til at kontrollere tilfældigheden af outputtet.
    * **max\_tokens**: Et heltal, der angiver det maksimale antal tokens i det genererede svar.
    * **top\_p**: En float, der repræsenterer nucleus sampling sandsynlighedstærsklen.
    * **frequency\_penalty**: En float, der repræsenterer straffen anvendt på tokens baseret på deres hyppighed i datasættet.
    * **presence\_penalty**: En float, der repræsenterer straffen anvendt på nye tokens baseret på deres tilstedeværelse i prompten.
  * **timestamp**: En streng i ISO 8601-format, der repræsenterer dato og tid, hvor GPT-modelprompten blev oprettet eller sidst ændret.
  * **expected\_output (Valgfri)**: Et objekt, der indeholder felter relateret til det forventede output fra model\_prompt, herunder følgende underfelter:
    * **type**: En streng, der angiver typen af output, der forventes fra model\_prompt.
    * **format (Valgfri)**: En streng, der repræsenterer formatet af det forventede output, hvis det er relevant.
    * **language (Valgfri)**: En streng, der repræsenterer programmeringssproget for det forventede output, hvis typen er `code`.
    * **allowed\_values (Valgfri)**: Et array af strenge, der indeholder en liste over tilladte outputværdier, hvis typen er `limited`.
  * **variables (Valgfri)**: En liste, der indeholder variabler, der kan indsættes i `model_prompt` strengen i en f-string stil. Hver variabel indeholder følgende underfelter:
    * **name**: En streng, der repræsenterer variabelnavnet.
    * **type**: En streng, der viser typen af variabel. I øjeblikket er de mulige værdier for `type` `text` for standardvariabel og `single-select` eller `multi-select` for valgvariabler.
    * **description**: En streng, der viser beskrivelsen af variablen, herunder anvendelser og eksempler.
    * **default**: En værdi, der viser standardværdien for variablen. Denne værdi er en streng, hvis `type` er `text` eller `single-select`, og et array af strenge for `multi-select`.
    * **allowed\_values**: Et array af strenge, der indeholder en liste over tilladte værdier, hvis variabeltypen er `single-select` eller `multi-select`.
  * **avatar (Valgfri)**: Et objekt, der indeholder felter relateret til det grafiske billede, der fungerer som et avatar eller ikon for prompten, herunder følgende underfelter:
    * **avatar\_type**: En streng, der specificerer typen af avatar-data, der er inkluderet.
    * **avatar**: En streng, der indeholder URL'en, der peger på billedet, hvis avatar\_type er `url`, eller en base64-kodet streng, der repræsenterer billedet, hvis avatar\_type er `base64`.
  * **prompt\_name (Valgfri)**: En streng, der repræsenterer navnet på prompten.
  * **description (Valgfri)**: En streng, der giver en kort beskrivelse af værktøjet og dets formål.
  * **usage\_notes (Valgfri)**: En streng, der indeholder fritekstnoter fra skaberen om brugen eller eventuelle specifikke overvejelser relateret til værktøjet.

For at specificere formatet af det forventede output fra model\_prompt kan du tilføje et `expected_output` objekt inden for `metadata` objektet. Afhængigt af typen af forventet output kan du inkludere de relevante underfelter i `expected_output` objektet.

For at inkludere felter for variabler, der kan indsættes i `model_prompt` strengen i en f-string stil, kan du tilføje en separat `variables` liste inden for `metadata` objektet.

For at inkludere et grafisk billede, der fungerer som et avatar eller ikon for prompten, kan du tilføje et `avatar` felt inden for `metadata` objektet.

Inkludering af felterne `expected_output`, `variables`, `avatar`, `prompt_name`, `description` og `usage_notes` inden for `metadata` objektet hjælper med at holde al den kontekstuelle information om prompten på ét sted, hvilket gør det lettere at administrere og forstå.

Du kan bruge feltet `version` på det øverste niveau af JSON-objektet til eksplicit at spore versionen af hele JSON-filen.
