Python backend code

Using Python

The Python Code Step allows you to write Python code that will be run on the backend. The common use cases for the Python Step is transforming and mapping of the data, as well as execution of machine learning-related functions.

You can pass named variables using the variables section and pass values from UI components using {{ui.input.value}}. You can also use predefined data, params, and error variables to access a result of the previous step, or user dictionary to access user-related information.

Additionally, it is possible to use a number of pre-installed libraries to utilize their functionality within your code:

    abc,
    array,
    asyncio,
    azure-cosmos,
    bs4,
    bson,
    builtins,
    collections,
    charset_normalizer,
    dateutil,
    errno,
    geopy,
    google.protobuf,
    gc,
    jinja2,
    jwt,
    machine,
    math,
    matplotlib,
    music,
    neopixel,
    numpy,
    openai,
    packaging,
    pandas,
    power,
    pypdf,
    pytz,
    query7,
    radio,
    random,
    requests,
    rsa,
    scipy,
    seaborn,
    sklearn,
    speech,
    struct,
    tabulate,
    time,
    types,
    typeshed,
    typing,
    typing_extensions,
    uarray,
    ucollections,
    uerrno,
    urandom,
    ustructu,
    usys,
    utime,
    yaml,
    datetime,
    llama_index,
    tiktoken

Editor hotkeys

  • Ctrl + Enter/Cmd + Enter - run the action

  • Ctrl + F/Cmd + F - find in code

  • Ctrl + G/Cmd + G - next find result

  • Shift + Ctrl + F/Cmd + Option + F - find and replace in the query

  • Ctrl + L/Cmd + L - jump to line

  • Ctrl + Alt + L/Cmd + Option + L - format code

Built-in variables

The following built-in variables are available:

# result of the previous step
return data

# error response of the previous step
return error

# incoming action params, passed in by components,
# the Execution/Loop action steps or when calling the action from the code
return params

# get roles of the current user
return user.get('roles')

While data and error are specific to a particular step, params is available in all steps.

Import external modules

To import external libraries, such as NumPy or Pandas, you can use the import statement in your Python code. These libraries provide a wide range of useful functions and tools for data manipulation and analysis.

Here's an example of how to import NumPy:

import numpy as np

# Now you can use NumPy functions and tools in your code, for example:
my_array = np.array([1, 2, 3])

Similarly, here's an example of how to import Pandas:

import pandas as pd

# Now you can use Pandas functions and tools in your code, for example:
my_dataframe = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})

Data transformation

If the API returns its data in a different format than the components expect, you can use the Code Step to transform it. Python offers several built-in methods for transforming data, such as map(), filter(), and reduce(). For example, to add a new key to a list of dictionaries:

data = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]
new_data = [{'name': d['name'], 'age': d['age'], 'is_adult': d['age'] >= 18} for d in data]

This creates a new list of dictionaries with an additional key is_adult that is True if the age key is greater than or equal to 18. You can also use functions from external libraries such as NumPy and Pandas for more complex transformations.

Merging results of multiple steps

In some cases, you may need to merge the results of multiple steps into a single object. Use Variables section to pass this information to Python and access the output of any previous step using {{steps.<step_name>.data}}.

Debugging errors

In case the code is failing or produces unexpected results:

  • make sure no linter errors are present in the code (exclamation mark in the left gutter);

  • check the result of the previous step (the data variable) and of the other variables (ex. params);

  • comment out the code and add return data to see if the data is in the expected format;

  • use the print to print the data to the console (Logs tab at the bottom of the action).

# commented to test
# if length(data) > 10:
#   return data
# 

print(data)

Last updated