> For the complete documentation index, see [llms.txt](https://docs.airops.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.airops.com/docs/fr/actions/workflow-concepts/workflow-steps/logic-steps/code.md).

# Exécuter du code

Ajoutez une logique personnalisée avec Javascript ou Python

## Comment fonctionne l’étape Code ?

L’étape Code dans AirOps Studio prend actuellement en charge **JavaScript** et **Python**, ce qui vous offre la flexibilité nécessaire pour effectuer des requêtes avancées.

{% hint style="warning" %}
Le code d’une étape Code est encapsulé dans une fonction, et vous devez utiliser une **return** instruction pour renvoyer les résultats de l’étape.
{% endhint %}

<figure><img src="https://344527547-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-0b2306c3503d270e90185c5eab3ee24a14c54da1%2Fcode_step_1.png?alt=media" alt=""><figcaption><p>Exemple d’étape Code</p></figcaption></figure>

## JavaScript

### Comment référencer une entrée

Contrairement à Liquid, les variables JavaScript **excluent** `{{` ou `}}` . Par exemple :

* `{{linkedin_url}}` serait `linkedin_url`

### Comment référencer une sortie

La syntaxe JavaScript est similaire à celle de Liquid, mais sans les crochets :

* `{{step_1.output}}` serait `step_1.output`
* `{{step_1.output.name}}` serait `step_1.output.name`

### Utiliser une instruction return

Vous devez inclure une `return` instruction dans une étape Code pour déterminer la sortie de l’étape

### Exemple JavaScript

Passons en revue un exemple qui fait référence à la fois à une entrée texte et à une sortie LLM. Nous utiliserons un workflow de base qui demande une chaîne en entrée et renvoie une liste de mots qui riment avec celle-ci.

Notre étape Code aura simplement pour rôle de combiner l’invite d’entrée avec la sortie du LLM, afin d’obtenir un seul résultat contenant la question et la réponse :

{% @arcade/embed url="<https://app.arcade.software/share/ucsCBgcBlpyFyrPMzrZi>" flowId="ucsCBgcBlpyFyrPMzrZi" %}

## Python

### Comment référencer une entrée

À l’instar de JavaScript, Python ne nécessite qu’une référence directe au nom de la variable. Le même exemple ci-dessus s’applique donc ici :

* `{{linkedin_url}}` serait `linkedin_url`

### Comment référencer une sortie

La syntaxe Python doit inclure des crochets autour du nom de la variable :

* `{{step_1.output}}` serait `step_1["output"]`
* `{{step_1.output.key}}` serait `step_1["output"]["key"]`

### Utiliser une instruction return

Vous devez inclure une `return` instruction dans une étape Code pour déterminer la sortie de l’étape.

### Packages Python pris en charge

À partir du 13/02/2024 :

```
pandas==1.3.4
requests
beautifulsoup4
lxml
pyjwt
urllib3==1.26.6
scipy
numpy
pycryptodome
bing-image-urls
markdown
PyPDF2
```

### Ajout de packages Python supplémentaires

Bien que nous cherchions toujours à enrichir les packages pris en charge nativement, notre étape Code propose une solution de contournement pour utiliser des packages supplémentaires.

Lorsque vous écrivez votre étape Code, ajoutez le code suivant à votre bloc :

```python
import os
import sys
import subprocess

# installer un package personnalisé dans /tmp/ et l’ajouter au chemin
subprocess.call('pip install flask -t /tmp/ --no-cache-dir'.split(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
sys.path.insert(1, '/tmp/')
import flask

return 'import ok'
```

{% hint style="info" %}
Remarque : toutes les bibliothèques externes appelées avec cette méthode seront installées à chaque exécution de l’étape Code, ce qui peut ajouter plusieurs secondes au temps d’exécution.
{% endhint %}

### Exemple Python

Passons en revue le même exemple que ci-dessus, mais en Python :

{% @arcade/embed url="<https://app.arcade.software/share/gM15e94F8pxxwY3ExGy3>" flowId="gM15e94F8pxxwY3ExGy3" %}

## Assistants IA

Python et JavaScript prennent en charge notre Assistant IA pour générer du code. Cela peut être utile si vous avez du mal à trouver la syntaxe exacte dans l’un ou l’autre langage pour atteindre votre objectif.

Comme pour l’invite d’un LLM, nous vous recommandons d’être aussi clair et exhaustif que possible dans votre description.

{% @arcade/embed %}

Une fois que nos Assistants IA ont généré le code, vous pouvez conserver ou rejeter le texte généré. Si vous décidez plus tard d’ajouter ou de supprimer du code, vous pouvez utiliser le même bouton « Générer avec l’IA » pour modifier votre invite et votre code.

## Comment continuer si l’étape Code échoue

Par défaut, l’étape de code mettra fin au workflow en cas d’échec. Cependant, pour continuer le workflow si l’étape échoue, cliquez simplement sur `Continuer` en bas de l’étape.

<figure><img src="https://344527547-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-909683bdffa53e503c67fcbd3d10be9b91f137e8%2Fimage.png?alt=media" alt=""><figcaption><p>Cliquez sur continuer pour poursuivre le workflow</p></figcaption></figure>

L’étape renverra les clés suivantes :

* `output`  : ce sera `null`
* `error` :
  * `message` : le message renvoyé par l’étape
  * `code`  : le code d’erreur représentant l’erreur

<figure><img src="https://344527547-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-efafda7fe1d5464d514822509633ec2c8de54f23%2Fimage.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

## Comment réessayer si l’étape Code échoue

Pour réessayer une étape si elle échoue,

1. Sélectionnez `Continuer` au lieu de `Mettre fin au workflow` si l’étape échoue
2. Ajoutez une condition qui vérifie si le `error` de l’étape existe, par exemple : `step_1.error`
3. Ajoutez l’étape que vous souhaitez réessayer s’il y a eu une erreur

<figure><img src="https://344527547-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-f551698d248295d68e604a0eaf0092b8d6134100%2Fimage.png?alt=media" alt="" width="563"><figcaption><p>Vérifier si une erreur s’est produite</p></figcaption></figure>

## Limites

Il existe deux limites principales à connaître concernant notre étape Code :

1. Elle a une durée d’exécution maximale de 15 minutes
2. La taille maximale de la charge utile est de 6 Mo


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.airops.com/docs/fr/actions/workflow-concepts/workflow-steps/logic-steps/code.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
