Skip to main content

Elixir client enables remote execution of python code triggered from a Crucible Plugin on the Signals & Sorcery platform.

Project description

Signals & Sorcery

Signals & Socery is a platform for that connects Elixir AIs to Crucible plugins.

For more information:

elixir-client

The Elixir Client (this repo) is a python3 pip package. It is used to create Elixir AIs. Elixir AIs are Jupyter Notebooks scripted using the elixir client and packaged as containers. The client is responsible for moving data and files backand forth from the plugin (and server). The client allows a user to register python functions with the Signals & Sorcery discovery server. After a function has been registered it can then be triggered remotely from any of the Crucible plugins.

Installation

pip install elixir-client --upgrade

Tests

from the root of the source code dir run:

pip uninstall elixir-client -y && pip install -e . && pytest -s

Usage

This is a simple example of a DAWNet remote script created using the elixir-client. The script defines an arbitrary function that takes two arguments, an integer and a DAWNetFilePath. The function is registered with the DAWNet discovery server. The script then connects to the DAWNet discovery server and waits for a remote trigger.

For thorough documentation and tutorials visit: https://dawnet.tools/client/

import elixir_client.core as elixir 
from elixir_client import DAWNetFilePath, ui_param

# The token is generated by the DAWNet plugin.  
# It is used by the discovery server to associate the remote with the plugin.
TOKEN="0715c132-0b31-406e-b562-9206c479a48a" 

# The registered method can be named anything. Note: the method must be `async`.  
# All parameters must be type hinted.  
# 4 parameter types are supported: int, float, str, DAWNetFilePath
# DAWNetFilePath is a special type. When the file is sent to the remote, it is intercepted by the system and 
# transported to a temp dir on the remote.  In this case the variable `b` is local path to the file.

# The `ui_param` is an optional decorator. It is used to define how the parameter input UI will be rendered in the plugin.  
# If the decorator is not used, the parameter will be rendered as a text input field. 
@ui_param('a', 'DAWNetNumberSlider', min=0, max=10, step=1, default=5)
@ui_param('c', 'DAWNetMultiChoice', options=['cherries', 'oranges', 'grapes'], default='grapes')
async def arbitrary_method(a: int, b: DAWNetFilePath, c: str):
    try: 
        # -----------------------------------------
        # This is where you can write custom code to operate on the input params.
        # ex param `a` could be the number of variations created from param `b` using something like MusicLM
        # -----------------------------------------
        
        # This is how you send results back to the plugin, when processing is complete.
        await elixir.results().add_file(b) 
        # This message is displayed in the plugin.
        await elixir.results().add_message("This is a message XYZ") 

        return True
    except Exception as e: 
        #explicitly send an error message back to the plugin
        await elixir.results().add_error(f"Method encountered an error: {e}")
        return False


# The token generated by the plugin. 
elixir.set_token(token=TOKEN)
# The name of the remote.  This is displayed in the plugin.
elixir.set_name("My Remote Code")
# The description of the remote.  This is displayed in the plugin.
elixir.set_description("This is not a real description.")
# Register the method with the discovery server.
elixir.register_method(arbitrary_method)

# When a file is sent to the remote as a DAWNetFilePath, it will become available at this sample rate. 
elixir.set_input_target_sample_rate(44100) #supported values [22050, 32000, 44100, 48000]
# When a file is sent to the remote as a DAWNetFilePath, it will become available at this bit rate. 
elixir.set_input_target_bit_depth(16) #supported values [16, 24, 32]
# When a file is sent to the remote as a DAWNetFilePath, it will become available with this number of channels.
elixir.set_input_target_channels(2) #supported values [1, 2] mono/stereo respectively
# When a file is sent to the remote as a DAWNetFilePath, it will become available in this format.
elixir.set_input_target_format('wav') #supported values ["wav", "mp3", "aif", "flac"]

# When results are sent back to the plugin, they will be sent at this sample rate.
elixir.set_output_target_sample_rate(44100)
# When results are sent back to the plugin, they will be sent at this bit rate.
elixir.set_output_target_bit_depth(16)
# When results are sent back to the plugin, they will be sent with this number of channels.
elixir.set_output_target_channels(2)
# When results are sent back to the plugin, they will be sent in this format.
elixir.set_output_target_format('wav')

# This should be the last line of the script.  It connects to the discovery server and waits for a remote trigger.
elixir.connect_to_server()

CONFIGURATION:

Note: If the following environment variables are not set, the client will use the default values. The default values will point to the public DAWNet server. If you wish to host your own instance you will need to configure the following environment variables.

export DN_CLIENT_API_BASE_URL='https://signalsandsorceryapi.com/'
export DN_CLIENT_SOCKET_IP='0.0.0.0'
export DN_CLIENT_SOCKET_PORT='8765'
export DN_CLIENT_SENTRY_API_KEY='XXX'
"DN_CLIENT_STORAGE_BUCKET", "https://storage.googleapis.com/your_gcp_bucket/"

Note: If the env var DN_CLIENT_TOKEN is set it will override the set_token() function.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elixir-client-0.7.7.tar.gz (33.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

elixir_client-0.7.7-py3-none-any.whl (35.0 kB view details)

Uploaded Python 3

File details

Details for the file elixir-client-0.7.7.tar.gz.

File metadata

  • Download URL: elixir-client-0.7.7.tar.gz
  • Upload date:
  • Size: 33.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.2

File hashes

Hashes for elixir-client-0.7.7.tar.gz
Algorithm Hash digest
SHA256 67cef488f718fa92adb5046efce7b848e1af112e6b2ddb7e5e4c6f5b2b8a8a2c
MD5 ec8556d56b259e720b8050f50020f562
BLAKE2b-256 17a049edfa7c81045dddcb900148f1177ab364460aded0b293adadbd2c2bdee5

See more details on using hashes here.

File details

Details for the file elixir_client-0.7.7-py3-none-any.whl.

File metadata

  • Download URL: elixir_client-0.7.7-py3-none-any.whl
  • Upload date:
  • Size: 35.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.2

File hashes

Hashes for elixir_client-0.7.7-py3-none-any.whl
Algorithm Hash digest
SHA256 3586105f19d15e9926c16df0fc3861c93615ad0a0f40913f009b0dc08eff1e45
MD5 3b27362c7999831c08ac0bb2e4aed329
BLAKE2b-256 d4b5d730505f0d6019b583cf9f796032a1fba0a35060d4505e0df74bdd3269c9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page