> 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/pt/acoes/workflow-concepts/workflow-steps/logic-steps/code.md).

# Executar Código

Adicione lógica personalizada com Javascript ou Python

## Como funciona o Code Step?

O Code Step no AirOps Studio atualmente suporta **JavaScript** como no **Python**, o que lhe proporciona a flexibilidade necessária para realizar pedidos avançados.

{% hint style="warning" %}
O código num Code Step é envolvido numa função, e deve usar uma **return** instrução para apresentar os resultados do passo.
{% endhint %}

<figure><img src="https://31915162-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>Exemplo de Code Step</p></figcaption></figure>

## JavaScript

### Como Referenciar uma Entrada

Ao contrário do Liquid, as variáveis JavaScript **excluem** `{{` ou `}}` . Por exemplo:

* `{{linkedin_url}}` seria `linkedin_url`

### Como Referenciar uma Saída

A sintaxe JavaScript é semelhante à do Liquid, mas exclui parênteses retos:

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

### Utilize uma Instrução Return

Tem de incluir uma `return` instrução num Code Step para determinar a saída do passo

### Exemplo em JavaScript

Vamos percorrer um exemplo que referencia tanto uma entrada de texto como uma saída de LLM. Vamos usar um Workflow básico que pede uma entrada de string e devolve uma correspondência de palavras que rimam com ela.

O nosso Code Step será simplesmente responsável por combinar o prompt de entrada com a saída do LLM, para termos apenas um único resultado que inclui a pergunta e a resposta:

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

## Python

### Como Referenciar uma Entrada

Tal como no JavaScript, o Python só requer a referência direta ao nome da variável. Portanto, o mesmo exemplo acima continua a aplicar-se:

* `{{linkedin_url}}` seria `linkedin_url`

### Como Referenciar uma Saída

A sintaxe do Python deve incluir parênteses retos à volta do nome da variável:

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

### Utilize uma Instrução Return

Tem de incluir uma `return` instrução num Code Step para determinar a saída do passo.

### Pacotes Python suportados

Em 13/02/2024:

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

### Adicionar Pacotes Python Adicionais

Embora estejamos sempre a procurar adicionar pacotes suportados nativamente, o nosso Code Step oferece uma solução alternativa para trabalhar com pacotes adicionais.

Ao escrever o seu Code Step, acrescente o seguinte código ao seu bloco:

```python
import os
import sys
import subprocess

# instale o pacote personalizado em /tmp/ e adicione ao caminho
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" %}
Nota: quaisquer bibliotecas externas chamadas com este método serão instaladas sempre que o Code Step for executado, podendo acrescentar vários segundos visíveis ao tempo de execução.
{% endhint %}

### Exemplo em Python

Vamos percorrer o mesmo exemplo acima, mas em Python:

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

## Assistentes de IA

Tanto o Python como o JavaScript suportam a utilização do nosso Assistente de IA para gerar código. Isto pode ser útil se estiver a ter dificuldade em encontrar a sintaxe exata em qualquer uma das linguagens para atingir o seu objetivo.

Tal como no prompt para um LLM, recomendamos que seja o mais claro e detalhado possível na sua descrição.

{% @arcade/embed %}

Assim que os nossos Assistentes de IA tiverem gerado o código, pode manter ou rejeitar o texto gerado. Se decidir que quer adicionar ou remover o código mais tarde, pode usar o mesmo botão "Generate with AI" para modificar o seu prompt e código.

## Como continuar se o Code step falhar

Por predefinição, o code step terminará o workflow se falhar. No entanto, para continuar o workflow se o passo falhar, basta clicar `Continuar` na parte inferior do passo.

<figure><img src="https://31915162-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>Clique em continuar para continuar o workflow</p></figcaption></figure>

O passo devolverá as seguintes chaves:

* `saída` : este será `null`
* `erro` :
  * `mensagem`: a mensagem retornada pela etapa
  * `código` : o código de erro que representa o erro

<figure><img src="https://31915162-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>

## Como tentar novamente se o Code step falhar

Para tentar novamente um passo se este falhar,

1. Selecione `Continuar` em vez de `Terminar Workflow` se o passo falhar
2. Adicione uma condição em que a condição verifica se o `erro` do passo existe, por exemplo `step_1.error`
3. Adicione o passo que pretende tentar novamente caso tenha ocorrido um erro

<figure><img src="https://31915162-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>Verificar se ocorreu um erro</p></figcaption></figure>

## Limites

Existem dois limites principais a ter em conta relativamente ao nosso Code Step:

1. Têm um tempo máximo de execução de 15 minutos
2. O tamanho máximo da carga útil é de 6 MB


---

# 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/pt/acoes/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.
