Python Model (Method)

The python model method is a function method that launches a Python script with a calling convention specifically designed to run calculations or machine learning models as an API.

Additional Info.json Parameters

This method requires a path parameter - this is the path to the Python script. This path can include substitutions.

It should also include a style parameter. The value of this parameter should be 'query' (run the AI model with user-provided inputs), or stream (run the AI model with recorded history).

The 'query' and 'stream' versions of this function take very different parameters.

Query Parameters

Your function should have one input for every input of your AI.

"parameters": [		
		{
			"name": "Temperature",			
			"type": "float",			
			"tag": "temp",
                        "mapping": "Floor Temperature",
                        "source": "Floor.Temperature - Current",
                        "default": 24.5
		}]

In the example above, we create a parameter called 'temp' of type 'float'. It's human-readable name is 'Temperature'.

When the data arrives in the Python script, the name will be 'Floor Temperature'.

In the user-interface, the default value will be 24.5 degrees, but pressing 'Sync With ARDI' will load the temperature from the live Floor Temperature value.

Stream Parameters

"parameters": [		
		{
			"name": "Time",			
			"type": "timerange",			
			"tag": "start",
			"startname": "start",
			"endname": "end"
		},		
		{
			"name": "Range",			
			"type": "string",			
			"tag": "range",
			"default": "10 minutes"
		},
		{
			"name": "Samples",			
			"type": "integer",			
			"tag": "grain",
			"default": 200
		}
	]

Above are the expected parameters for a 'stream' function - the start and end times for the data, and a desired resolution.

How It Works

When writing your script, you'll use the ardifunctions.py library, which will handle ingesting all of the data for you.

Below is an example file…

import ardifunctions
import pandas as pd
import numpy as np
 
defaults = {}
defaults['Floor Temperature'] = 18
 
dfunc = ardifunctions.DynamicFunction("http://localhost/s/op")
dfunc.query = "'Floor' ASSET AIPOINTS"
dfunc.Defaults(defaults)
dfunc.ParseParameters()
 
def Calculate(inputs,results):        
    return {'Output Value': inputs['Floor Temperature'] * 1.2}
 
dfunc.SingleCalc = Calculate
 
dfunc.Execute()

This will call the Calculate function - which is given a dictionary of parameter values - to calculate the output value(s).

This same code works for both the 'query' or 'stream' version of the function - the only difference is that when called on a range of time rather than an instant, the 'Calculate' function will be called many times rather than just once.

Making Solutions More Efficient

If using machine learning models or other algorithms that work well with bulk data, you can use Bulk Calculations in Python Models.