1 - Wallaroo Edge Computer Vision Observability

A demonstration on observability with computer vision deployed on edge devices.

This tutorial and the assets can be downloaded as part of the Wallaroo Tutorials repository.

Computer Vision for Object Detection in Retail

The following tutorial demonstrates using Wallaroo for observability of edge deployments of computer vision models.

Introduction

This tutorial focuses on the resnet50 computer vision model. By default, this provides the following outputs from receiving an image converted to tensor values:

  • boxes: The bounding boxes for detected objects.
  • classes: The class of the detected object (bottle, coat, person, etc).
  • confidences: The confidence the model has that the detected model is the class.

For this demonstration, the model is modified with Wallaroo Bring Your Own Predict (BYOP) to add two additional fields:

  • avg_px_intensity: the average pixel intensity checks the input to determine the average value of the Red/Green/Blue pixel values. This is used as a benchmark to determine if the two images are significantly different. For example, an all white photo would have an avg_px_intensity of 1, while an all blank photo would have a value of 0.
  • avg_confidence: The average confidence of all detected objects.

This demonstration will use avg_confidence to demonstrate observability in our edge deployed computer vision model.

Prerequisites

  • A Wallaroo Ops instance 2023.4 and above with [edge deployment enabled](Edge Deployment Registry Guide).
  • An x64 edge device with Docker installed, recommended with at least 8 cores.

In order for the wallaroo tutorial notebooks to run properly, the videos directory must contain these models in the models directory.

To download the Wallaroo Computer Vision models, use the following link:

https://storage.googleapis.com/wallaroo-public-data/cv-demo-models/cv-retail-models.zip

Unzip the contents into the directory models.

The following models are required to run the tutorial:

onnx==1.12.0
onnxruntime==1.12.1
torchvision
torch
matplotlib==3.5.0
opencv-python
imutils
pytz
ipywidgets

To run this tutorial outside of a Wallaroo Ops center, the Wallaroo SDK is available and is installed via pip with:

pip install wallaroo==2023.4.1

References

Steps

Import Libraries

The following libraries are used to execute this tutorial. The utils.py provides additional helper methods for rendering the images into tensor fields and other useful tasks.

# preload needed libraries 

import wallaroo
from wallaroo.object import EntityNotFoundError
from wallaroo.framework import Framework
from IPython.display import display
from IPython.display import Image
import pandas as pd
import json
import datetime
import time
import cv2
import matplotlib.pyplot as plt
import string
import random
import pyarrow as pa
import sys
import asyncio
import numpy as np

import utils
pd.set_option('display.max_colwidth', None)

import datetime

# api based inference request
import requests

Connect to the Wallaroo Instance

The first step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

The option request_timeout provides additional time for the Wallaroo model upload process to complete.

wl = wallaroo.Client(request_timeout=600)

Create Workspace

We will create a workspace to manage our pipeline and models. The following variables will set the name of our sample workspace then set it as the current workspace.

Workspace names must be unique. The following helper function will either create a new workspace, or retrieve an existing one with the same name. Verify that a pre-existing workspace has been shared with the targeted user.

Set the variables workspace_name to ensure a unique workspace name if required.

The workspace will then be set as the Current Workspace. Model uploads and

def get_workspace(name, client):
    workspace = None
    for ws in client.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = client.create_workspace(name)
    return workspace

workspace_name = "cv-retail-edge-observability"
model_name = "resnet-with-intensity"
model_file_name = "./models/model-with-pixel-intensity.zip"
pipeline_name = "retail-inv-tracker-edge-obs"

workspace = get_workspace(workspace_name, wl)
wl.set_current_workspace(workspace)
{'name': 'cv-retail-edge-observability', 'id': 8, 'archived': False, 'created_by': 'cc3619bb-2cec-4a44-9333-55a0dc6b3997', 'created_at': '2024-01-10T17:37:38.659309+00:00', 'models': [], 'pipelines': []}

Upload Model

The model is uploaded as a BYOP model, where the model, Python script and other artifacts are included in a .zip file. This requires the input and output schemas for the model specified in Apache Arrow Schema format.

input_schema = pa.schema([
    pa.field('tensor', pa.list_(
        pa.list_(
            pa.list_(
                pa.float32(), # images are normalized
                list_size=640
            ),
            list_size=480
        ),
        list_size=3
    )),
])

output_schema = pa.schema([
    pa.field('boxes', pa.list_(pa.list_(pa.float32(), list_size=4))),
    pa.field('classes', pa.list_(pa.int64())),
    pa.field('confidences', pa.list_(pa.float32())),
    pa.field('avg_px_intensity', pa.list_(pa.float32())),
    pa.field('avg_confidence', pa.list_(pa.float32())),
])

model = wl.upload_model(model_name, 
                        model_file_name, 
                        framework=Framework.CUSTOM,
                        input_schema=input_schema, 
                        output_schema=output_schema)
Waiting for model loading - this will take up to 10.0min.
Model is pending loading to a container runtime......
Model is attempting loading to a container runtime.............successful

Ready

Deploy Pipeline

Next we configure the hardware we want to use for deployment. If we plan on eventually deploying to edge, this is a good way to simulate edge hardware conditions. The BYOP model is deployed as a Wallaroo Containerized Runtime, so the hardware allocation is performed through the sidekick options.

deployment_config = wallaroo.DeploymentConfigBuilder() \
    .replica_count(1) \
    .cpus(1) \
    .memory("2Gi") \
    .sidekick_cpus(model, 1) \
    .sidekick_memory(model, '6Gi') \
    .build()

We create the pipeline with the wallaroo.client.build_pipeline method, and assign our model as a model pipeline step. Once complete, we will deploy the pipeline to allocate resources from the Kuberntes cluster hosting the Wallaroo Ops to the pipeline.

pipeline = wl.build_pipeline(pipeline_name)
pipeline.clear()
pipeline.add_model_step(model)
pipeline.deploy(deployment_config = deployment_config)
nameretail-inv-tracker-edge-obs
created2024-01-10 17:50:59.035145+00:00
last_updated2024-01-10 17:50:59.700103+00:00
deployedTrue
archNone
tags
versionsd0c2ed1c-3691-49f1-8fc8-e6510e4c39f8, 773099d3-6d64-4a92-b5a7-f614a916965d
stepsresnet-with-intensity
publishedFalse

Monitoring for Model Drift

For this example, we want to track the average confidence of object predictions and get alerted if we see a drop in confidence.

We will convert a set of images to pandas DataFrames with the images converted to tensor values. The first set of images baseline_images as well formed images. The second set blurred_images are the same photos intentionally blurred for our observability demonstration.

baseline_images = [
    "./data/images/input/example/dairy_bottles.png",
    "./data/images/input/example/dairy_products.png",
    "./data/images/input/example/product_cheeses.png"
]
   
blurred_images = [
    "./data/images/input/example/blurred-dairy_bottles.png",
    "./data/images/input/example/blurred-dairy_products.png",
    "./data/images/input/example/blurred-product_cheeses.png"
]

baseline_images_list = utils.processImages(baseline_images)
blurred_images_list = utils.processImages(blurred_images)

The Wallaroo SDK is capable of using numpy arrays in a pandas DataFrame for inference requests. Our demonstration will focus on using API calls for inference requests, so we will flatten the numpy array and use that value for our inference inputs. The following examples show using a baseline and blurred image for inference requests and the sample outputs.

# baseline image
df_test = pd.DataFrame({'tensor': wallaroo.utils.flatten_np_array_columns(baseline_images_list[0], 'tensor')})
df_test
tensor
0[0.9372549, 0.9529412, 0.9490196, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.94509804, 0.9490196, 0.9490196, 0.9529412, 0.9529412, 0.9490196, 0.9607843, 0.96862745, 0.9647059, 0.96862745, 0.9647059, 0.95686275, 0.9607843, 0.9647059, 0.9647059, 0.9607843, 0.9647059, 0.972549, 0.95686275, 0.9607843, 0.91764706, 0.95686275, 0.91764706, 0.8784314, 0.89411765, 0.84313726, 0.8784314, 0.8627451, 0.8509804, 0.9254902, 0.84705883, 0.96862745, 0.89411765, 0.81960785, 0.8509804, 0.92941177, 0.8666667, 0.8784314, 0.8666667, 0.9647059, 0.9764706, 0.98039216, 0.9764706, 0.972549, 0.972549, 0.972549, 0.972549, 0.972549, 0.972549, 0.98039216, 0.89411765, 0.48235294, 0.4627451, 0.43137255, 0.27058825, 0.25882354, 0.29411766, 0.34509805, 0.36862746, 0.4117647, 0.45490196, 0.4862745, 0.5254902, 0.56078434, 0.6039216, 0.64705884, 0.6862745, 0.72156864, 0.74509805, 0.7490196, 0.7882353, 0.8666667, 0.98039216, 0.9882353, 0.96862745, 0.9647059, 0.96862745, 0.972549, 0.9647059, 0.9607843, 0.9607843, 0.9607843, 0.9607843, ...]
result = pipeline.infer(df_test, 
                        dataset=['time', 'out.avg_confidence','out.avg_px_intensity','out.boxes','out.classes','out.confidences','check_failures','metadata'])
result
timeout.avg_confidenceout.avg_px_intensityout.boxesout.classesout.confidencesmetadata.partition
02024-01-10 17:53:50.655[0.35880384][0.425382][[2.1511102, 193.98323, 76.26535, 475.40292], [610.82245, 98.606316, 639.8868, 232.27054], [544.2867, 98.726524, 581.28845, 230.20497], [454.99344, 113.08567, 484.78464, 210.1282], [502.58884, 331.87665, 551.2269, 476.49182], [538.54254, 292.1205, 587.46545, 468.1288], [578.5417, 99.70756, 617.2247, 233.57082], [548.552, 191.84564, 577.30585, 238.47737], [459.83328, 344.29712, 505.42633, 456.7118], [483.47168, 110.56585, 514.0936, 205.00156], [262.1222, 190.36658, 323.4903, 405.20584], [511.6675, 104.53834, 547.01715, 228.23663], [75.39197, 205.62312, 168.49893, 453.44086], [362.50656, 173.16858, 398.66956, 371.8243], [490.42468, 337.627, 534.1234, 461.0242], [351.3856, 169.14897, 390.7583, 244.06992], [525.19824, 291.73895, 570.5553, 417.6439], [563.4224, 285.3889, 609.30853, 452.25943], [425.57935, 366.24915, 480.63535, 474.54], [154.538, 198.0377, 227.64284, 439.84412], [597.02893, 273.60458, 637.2067, 439.03214], [473.88763, 293.41992, 519.7537, 349.2304], [262.77597, 192.03581, 313.3096, 258.3466], [521.1493, 152.89026, 534.8596, 246.52365], [389.89633, 178.07867, 431.87555, 360.59323], [215.99901, 179.52965, 280.2847, 421.9092], [523.6454, 310.7387, 560.36487, 473.57968], [151.7131, 191.41077, 228.71013, 443.32187], [0.50784916, 14.856098, 504.5198, 405.7277], [443.83676, 340.1249, 532.83734, 475.77713], [472.37848, 329.13092, 494.03647, 352.5906], [572.41455, 286.26132, 601.8677, 384.5899], [532.7721, 189.89102, 551.9026, 241.76051], [564.0309, 105.75121, 597.0351, 225.32579], [551.25854, 287.16034, 590.9206, 405.71548], [70.46805, 0.39822236, 92.786545, 84.40113], [349.44534, 3.6184297, 392.61484, 98.43363], [64.40484, 215.14934, 104.09457, 436.50797], [615.1218, 269.46683, 633.30853, 306.03452], [238.31851, 0.73957217, 290.2898, 91.30623], [449.37347, 337.39554, 480.13208, 369.35126], [74.95623, 191.84235, 164.21284, 457.00143], [391.96646, 6.255016, 429.23056, 100.72327], [597.48663, 276.6981, 618.0615, 298.62778], [384.51172, 171.95828, 407.01276, 205.28722], [341.5734, 179.8058, 365.88345, 208.57889], [555.0278, 288.62695, 582.6162, 358.0912], [615.92035, 264.9265, 632.3316, 280.2552], [297.95154, 0.5227982, 347.18744, 95.13106], [311.64868, 203.67934, 369.6169, 392.58063], [163.10356, 0.0, 227.67468, 86.49685], [68.518974, 1.870926, 161.25877, 82.89816], [593.6093, 103.263596, 617.124, 200.96545], [263.3115, 200.12204, 275.699, 234.26517], [592.2285, 279.66064, 619.70496, 379.14764], [597.7549, 269.6543, 618.5473, 286.25214], [478.04306, 204.36165, 530.00745, 239.35196], [501.34528, 289.28003, 525.766, 333.00262], [462.4777, 336.92056, 491.32016, 358.18915], [254.40384, 203.89566, 273.66177, 237.13142], [307.96042, 154.70946, 440.4545, 386.88065], [195.53915, 187.13596, 367.6518, 404.91095], [77.52113, 2.9323518, 160.15236, 81.59642], [577.648, 283.4004, 601.4359, 307.41882], [516.63873, 129.74504, 540.40936, 242.17572], [543.2536, 253.38689, 631.3576, 466.62567], [271.1358, 45.97066, 640.0, 456.88235], [568.77203, 188.66449, 595.866, 235.05397], [400.997, 169.88531, 419.35645, 185.80077], [473.9581, 328.07736, 493.2316, 339.41437], [602.9851, 376.39505, 633.74243, 438.61758], [480.95963, 117.62996, 525.08826, 242.74872], [215.71178, 194.87447, 276.59906, 414.3832], [462.2966, 331.94638, 493.14175, 347.97647], [543.94977, 196.90623, 556.04315, 238.99141], [386.8205, 446.6134, 428.81064, 480.00003], [152.22516, 0.0, 226.98564, 85.44817], [616.91815, 246.15547, 630.8656, 273.48447], [576.33356, 100.67465, 601.9629, 183.61014], [260.99304, 202.73479, 319.40524, 304.172], [333.5814, 169.75925, 390.9659, 278.09406], [286.26767, 3.700516, 319.3962, 88.77158], [532.5545, 209.36183, 552.58417, 240.08965], [572.99915, 207.65208, 595.62415, 235.46635], [6.2744417, 0.5994095, 96.04993, 81.27411], [203.32298, 188.94266, 227.27435, 254.29417], [513.7689, 154.48575, 531.3786, 245.21616], [547.53815, 369.9145, 583.13916, 470.30206], [316.64532, 252.80664, 336.65454, 272.82834], [234.79965, 0.0003570557, 298.05707, 92.014496], [523.0663, 195.29694, 534.485, 242.23671], [467.7621, 202.35623, 536.2362, 245.53342], [146.07208, 0.9752747, 178.93895, 83.210175], [18.780663, 1.0261598, 249.98721, 88.49467], [600.9064, 270.41983, 625.3632, 297.94083], [556.40955, 287.84702, 580.2647, 322.64728], [80.6706, 161.22787, 638.6261, 480.00003], [455.98315, 334.6629, 480.16724, 349.97784], [613.9905, 267.98065, 635.95807, 375.1775], [345.75964, 2.459102, 395.91183, 99.68698]][44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 86, 82, 44, 44, 44, 44, 44, 44, 84, 84, 44, 44, 44, 44, 86, 84, 44, 44, 44, 44, 44, 84, 44, 44, 84, 44, 44, 44, 44, 51, 44, 44, 44, 44, 44, 44, 44, 44, 44, 82, 44, 44, 44, 44, 44, 86, 44, 44, 1, 84, 44, 44, 44, 44, 84, 47, 47, 84, 14, 44, 44, 53, 84, 47, 47, 44, 84, 44, 44, 82, 44, 44, 44][0.9965358, 0.9883404, 0.9700247, 0.9696426, 0.96478045, 0.96037567, 0.9542889, 0.9467539, 0.946524, 0.94484967, 0.93611854, 0.91653466, 0.9133634, 0.8874814, 0.84405905, 0.825526, 0.82326967, 0.81740034, 0.7956525, 0.78669065, 0.7731486, 0.75193685, 0.7360918, 0.7009186, 0.6932351, 0.65077204, 0.63243586, 0.57877576, 0.5023476, 0.50163734, 0.44628552, 0.42804396, 0.4253787, 0.39086252, 0.36836442, 0.3473236, 0.32950658, 0.3105372, 0.29076362, 0.28558296, 0.26680034, 0.26302803, 0.25444376, 0.24568668, 0.2353662, 0.23321979, 0.22612995, 0.22483191, 0.22332378, 0.21442991, 0.20122288, 0.19754867, 0.19439234, 0.19083925, 0.1871393, 0.17646024, 0.16628945, 0.16326219, 0.14825206, 0.13694529, 0.12920643, 0.12815322, 0.122357555, 0.121289656, 0.116281696, 0.11498632, 0.111848116, 0.11016138, 0.1095062, 0.1039151, 0.10385688, 0.097573474, 0.09632071, 0.09557622, 0.091599144, 0.09062039, 0.08262358, 0.08223499, 0.07993951, 0.07989185, 0.078758545, 0.078201495, 0.07737936, 0.07690251, 0.07593444, 0.07503418, 0.07482597, 0.068981, 0.06841128, 0.06764157, 0.065750405, 0.064908616, 0.061884128, 0.06010121, 0.0578873, 0.05717648, 0.056616478, 0.056017116, 0.05458274, 0.053669468]engine-fc59fccbc-bs2sg
# example of an inference from a bad photo

df_test = pd.DataFrame({'tensor': wallaroo.utils.flatten_np_array_columns(blurred_images_list[0], 'tensor')})
result = pipeline.infer(df_test, dataset=['time', 'out.avg_confidence','out.avg_px_intensity','out.boxes','out.classes','out.confidences','check_failures','metadata'])
result
timeout.avg_confidenceout.avg_px_intensityout.boxesout.classesout.confidencesmetadata.partition
02024-01-10 17:53:59.016[0.29440108][0.42540666][[1.104647, 203.48311, 81.29011, 472.4321], [67.34002, 195.64558, 163.41652, 470.1668], [218.88916, 180.21216, 281.3725, 422.2332], [156.47955, 189.82559, 227.1866, 443.35718], [393.81195, 172.34473, 434.30322, 363.96057], [266.56137, 201.46182, 326.2503, 406.3162], [542.941, 99.440956, 588.42365, 229.33481], [426.12668, 260.50723, 638.6193, 476.10742], [511.26102, 106.84715, 546.8103, 243.0127], [0.0, 68.56848, 482.48538, 472.53766], [347.34027, 0.0, 401.10968, 97.51968], [289.03827, 0.32189485, 347.78888, 93.458755], [91.05826, 183.34473, 207.86084, 469.46518], [613.1202, 102.11072, 639.4794, 228.7474], [369.04257, 177.80518, 419.34775, 371.53873], [512.19727, 92.89032, 548.08636, 239.37686], [458.50125, 115.80958, 485.57538, 236.75961], [571.35834, 102.115395, 620.06, 230.47636], [481.23752, 105.288246, 516.5597, 246.37486], [74.288246, 0.4324219, 162.55719, 80.09118], [566.6188, 102.72982, 623.63257, 226.31448], [14.5338335, 0.0, 410.35077, 100.371155], [67.72321, 186.76591, 144.67079, 272.91965], [171.88432, 1.3620621, 220.8489, 82.6873], [455.16003, 109.83146, 486.36246, 243.25917], [320.3717, 211.61632, 373.62762, 397.29614], [476.53476, 105.55374, 517.4519, 240.22443], [530.3071, 97.575066, 617.83466, 235.27464], [146.26923, 184.24777, 186.76619, 459.51907], [610.5376, 99.28521, 638.6954, 235.62247], [316.39325, 194.10446, 375.8869, 401.48578], [540.51245, 105.909325, 584.589, 239.12834], [460.5496, 313.47333, 536.9969, 447.4658], [222.15643, 206.45018, 282.35947, 423.1165], [80.06503, 0.0, 157.40846, 79.61287], [396.70865, 235.83214, 638.7461, 473.58328], [494.6364, 115.012085, 520.81445, 241.98145], [432.90045, 145.19109, 464.7877, 264.47726], [200.3818, 181.47552, 232.85869, 429.13736], [50.631256, 161.2574, 321.71106, 465.66733], [545.57556, 106.189095, 593.3653, 227.64984], [338.0726, 1.0913361, 413.84973, 101.5233], [364.8136, 178.95511, 410.21368, 373.15686], [392.6712, 173.77844, 434.40182, 370.18982], [361.36926, 175.07799, 397.51382, 371.78812], [158.44263, 182.24762, 228.91519, 445.61328], [282.683, 0.0, 348.24307, 92.91383], [0.0, 194.40187, 640.0, 474.7329], [276.38458, 260.773, 326.8054, 407.18048], [528.4028, 105.582886, 561.3014, 239.953], [506.40353, 115.89468, 526.7106, 233.26082], [20.692535, 4.8851624, 441.1723, 215.57448], [193.52037, 188.48592, 329.2185, 428.5391], [1.6791562, 122.02866, 481.69287, 463.82855], [255.57025, 0.0, 396.8555, 100.11973], [457.83475, 91.354, 534.8592, 250.44174], [313.2646, 156.99405, 445.05853, 389.01157], [344.55948, 0.0, 370.23212, 94.05032], [24.93765, 11.427448, 439.70956, 184.92136], [433.3421, 132.6041, 471.16473, 259.3983]][44, 44, 44, 44, 44, 44, 44, 61, 90, 82, 44, 84, 44, 47, 44, 44, 90, 44, 44, 84, 47, 84, 44, 84, 44, 84, 90, 44, 44, 44, 44, 90, 61, 84, 44, 67, 90, 44, 44, 44, 47, 84, 84, 84, 44, 86, 44, 67, 84, 90, 90, 82, 44, 78, 84, 44, 44, 44, 78, 84][0.99679935, 0.9928388, 0.95979476, 0.94534546, 0.76680815, 0.7245405, 0.6529537, 0.6196737, 0.61694986, 0.6146526, 0.52818304, 0.51962215, 0.51650614, 0.50039023, 0.48194215, 0.48113948, 0.4220569, 0.35743266, 0.3185851, 0.31218198, 0.3114053, 0.29015902, 0.2836629, 0.24364658, 0.23470096, 0.23113059, 0.20228004, 0.19990075, 0.19283496, 0.18304716, 0.17492934, 0.16523221, 0.1606256, 0.15927774, 0.14796422, 0.1388699, 0.1340389, 0.13308196, 0.11703869, 0.10279331, 0.10200763, 0.0987304, 0.09823867, 0.09219642, 0.09162199, 0.088787705, 0.08765345, 0.080090344, 0.07868707, 0.07560313, 0.07533865, 0.07433937, 0.07159829, 0.069288105, 0.065867245, 0.06332389, 0.057103153, 0.05622299, 0.052092217, 0.05025773]engine-fc59fccbc-bs2sg

Inference Request via API

The following code performs the same inference request through the pipeline’s inference URL. This is used to demonstrate how the API inference result appears, which is used for the later examples.

headers = wl.auth.auth_header()

headers['Content-Type'] = 'application/json; format=pandas-records'

deploy_url = pipeline._deployment._url()

response = requests.post(
                    deploy_url, 
                    headers=headers, 
                    data=df_test.to_json(orient="records")
                )

display(pd.DataFrame(response.json()))
timeoutmetadata
01704909276772{'avg_confidence': [0.29440108], 'avg_px_intensity': [0.42540666], 'boxes': [[1.104647, 203.48311, 81.29011, 472.4321], [67.34002, 195.64558, 163.41652, 470.1668], [218.88916, 180.21216, 281.3725, 422.2332], [156.47955, 189.82559, 227.1866, 443.35718], [393.81195, 172.34473, 434.30322, 363.96057], [266.56137, 201.46182, 326.2503, 406.3162], [542.941, 99.440956, 588.42365, 229.33481], [426.12668, 260.50723, 638.6193, 476.10742], [511.26102, 106.84715, 546.8103, 243.0127], [0.0, 68.56848, 482.48538, 472.53766], [347.34027, 0.0, 401.10968, 97.51968], [289.03827, 0.32189485, 347.78888, 93.458755], [91.05826, 183.34473, 207.86084, 469.46518], [613.1202, 102.11072, 639.4794, 228.7474], [369.04257, 177.80518, 419.34775, 371.53873], [512.19727, 92.89032, 548.08636, 239.37686], [458.50125, 115.80958, 485.57538, 236.75961], [571.35834, 102.115395, 620.06, 230.47636], [481.23752, 105.288246, 516.5597, 246.37486], [74.288246, 0.4324219, 162.55719, 80.09118], [566.6188, 102.72982, 623.63257, 226.31448], [14.5338335, 0.0, 410.35077, 100.371155], [67.72321, 186.76591, 144.67079, 272.91965], [171.88432, 1.3620621, 220.8489, 82.6873], [455.16003, 109.83146, 486.36246, 243.25917], [320.3717, 211.61632, 373.62762, 397.29614], [476.53476, 105.55374, 517.4519, 240.22443], [530.3071, 97.575066, 617.83466, 235.27464], [146.26923, 184.24777, 186.76619, 459.51907], [610.5376, 99.28521, 638.6954, 235.62247], [316.39325, 194.10446, 375.8869, 401.48578], [540.51245, 105.909325, 584.589, 239.12834], [460.5496, 313.47333, 536.9969, 447.4658], [222.15643, 206.45018, 282.35947, 423.1165], [80.06503, 0.0, 157.40846, 79.61287], [396.70865, 235.83214, 638.7461, 473.58328], [494.6364, 115.012085, 520.81445, 241.98145], [432.90045, 145.19109, 464.7877, 264.47726], [200.3818, 181.47552, 232.85869, 429.13736], [50.631256, 161.2574, 321.71106, 465.66733], [545.57556, 106.189095, 593.3653, 227.64984], [338.0726, 1.0913361, 413.84973, 101.5233], [364.8136, 178.95511, 410.21368, 373.15686], [392.6712, 173.77844, 434.40182, 370.18982], [361.36926, 175.07799, 397.51382, 371.78812], [158.44263, 182.24762, 228.91519, 445.61328], [282.683, 0.0, 348.24307, 92.91383], [0.0, 194.40187, 640.0, 474.7329], [276.38458, 260.773, 326.8054, 407.18048], [528.4028, 105.582886, 561.3014, 239.953], [506.40353, 115.89468, 526.7106, 233.26082], [20.692535, 4.8851624, 441.1723, 215.57448], [193.52037, 188.48592, 329.2185, 428.5391], [1.6791562, 122.02866, 481.69287, 463.82855], [255.57025, 0.0, 396.8555, 100.11973], [457.83475, 91.354, 534.8592, 250.44174], [313.2646, 156.99405, 445.05853, 389.01157], [344.55948, 0.0, 370.23212, 94.05032], [24.93765, 11.427448, 439.70956, 184.92136], [433.3421, 132.6041, 471.16473, 259.3983]], 'classes': [44, 44, 44, 44, 44, 44, 44, 61, 90, 82, 44, 84, 44, 47, 44, 44, 90, 44, 44, 84, 47, 84, 44, 84, 44, 84, 90, 44, 44, 44, 44, 90, 61, 84, 44, 67, 90, 44, 44, 44, 47, 84, 84, 84, 44, 86, 44, 67, 84, 90, 90, 82, 44, 78, 84, 44, 44, 44, 78, 84], 'confidences': [0.99679935, 0.9928388, 0.95979476, 0.94534546, 0.76680815, 0.7245405, 0.6529537, 0.6196737, 0.61694986, 0.6146526, 0.52818304, 0.51962215, 0.51650614, 0.50039023, 0.48194215, 0.48113948, 0.4220569, 0.35743266, 0.3185851, 0.31218198, 0.3114053, 0.29015902, 0.2836629, 0.24364658, 0.23470096, 0.23113059, 0.20228004, 0.19990075, 0.19283496, 0.18304716, 0.17492934, 0.16523221, 0.1606256, 0.15927774, 0.14796422, 0.1388699, 0.1340389, 0.13308196, 0.11703869, 0.10279331, 0.10200763, 0.0987304, 0.09823867, 0.09219642, 0.09162199, 0.088787705, 0.08765345, 0.080090344, 0.07868707, 0.07560313, 0.07533865, 0.07433937, 0.07159829, 0.069288105, 0.065867245, 0.06332389, 0.057103153, 0.05622299, 0.052092217, 0.05025773]}{'last_model': '{"model_name":"resnet-with-intensity","model_sha":"6d58039b1a02c5cce85646292965d29056deabdfcc6b18c34adf566922c212b0"}', 'pipeline_version': '', 'elapsed': [146497846, 6506643289], 'dropped': [], 'partition': 'engine-fc59fccbc-bs2sg'}

Store the Ops Pipeline Partition

Wallaroo pipeline logs include the metadata.partition field that indicates what instance of the pipeline performed the inference. This partition name updates each time a new pipeline version is created; modifying the pipeline steps and other actions changes the pipeline version.

ops_partition = result.loc[0, 'metadata.partition']
ops_partition
'engine-fc59fccbc-bs2sg'

API Inference Helper Functions

The following helper functions are set up to perform inferences through either the Wallaroo Ops pipeline, or an edge deployed version of the pipeline.

For this example, update the hostname testboy.local to the hostname of the deployed edge device.

import requests

def ops_pipeline_inference(df):
    df_flattened = pd.DataFrame({'tensor': wallaroo.utils.flatten_np_array_columns(df, 'tensor')})
    # api based inference request
    headers = wl.auth.auth_header()

    headers['Content-Type'] = 'application/json; format=pandas-records'

    deploy_url = pipeline._deployment._url()

    response = requests.post(
                        deploy_url, 
                        headers=headers, 
                        data=df_flattened.to_json(orient="records")
                    )

    display(pd.DataFrame(response.json()).loc[:, ['time', 'metadata']])

def edge_pipeline_inference(df):
    df_flattened = pd.DataFrame({'tensor': wallaroo.utils.flatten_np_array_columns(df, 'tensor')})
    # api based inference request
    # headers = wl.auth.auth_header()

    headers = {
        'Content-Type': 'application/json; format=pandas-records'
    }

    deploy_url = 'http://testboy.local:8080/pipelines/retail-inv-tracker-edge-obs'

    response = requests.post(
                        deploy_url, 
                        headers=headers, 
                        data=df_flattened.to_json(orient="records")
                    )

    display(pd.DataFrame(response.json()).loc[:, ['time', 'out', 'metadata']])

Edge Deployment

We can now deploy the pipeline to an edge device. This will require the following steps:

  • Publish the pipeline: Publishes the pipeline to the OCI registry.
  • Add Edge: Add the edge location to the pipeline publish.
  • Deploy Edge: Deploy the edge device with the edge location settings.
pup = pipeline.publish()
Waiting for pipeline publish... It may take up to 600 sec.
Pipeline is Publishing......Published.
display(pup)
ID5
Pipeline Versionc2dd2c7d-618d-497f-8515-3aa1469d7985
StatusPublished
Engine URLghcr.io/wallaroolabs/doc-samples/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.1-4351
Pipeline URLghcr.io/wallaroolabs/doc-samples/pipelines/retail-inv-tracker-edge-obs:c2dd2c7d-618d-497f-8515-3aa1469d7985
Helm Chart URLoci://ghcr.io/wallaroolabs/doc-samples/charts/retail-inv-tracker-edge-obs
Helm Chart Referenceghcr.io/wallaroolabs/doc-samples/charts@sha256:306df0921321c299d0b04c8e0499ab0678082a197da97676e280e5d752ab415b
Helm Chart Version0.0.1-c2dd2c7d-618d-497f-8515-3aa1469d7985
Engine Config{'engine': {'resources': {'limits': {'cpu': 4.0, 'memory': '3Gi'}, 'requests': {'cpu': 4.0, 'memory': '3Gi'}, 'arch': 'x86', 'gpu': False}}, 'engineAux': {}, 'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 0.2, 'memory': '512Mi'}, 'arch': 'x86', 'gpu': False}}}
User Images[]
Created Byjohn.hummel@wallaroo.ai
Created At2024-01-10 18:09:25.001491+00:00
Updated At2024-01-10 18:09:25.001491+00:00
Docker Run Variables{}

Add Edge

The edge location is added with the publish.add_edge(name) method. This returns the OCI registration information, and the EDGE_BUNDLE information. The EDGE_BUNDLE data is a base64 encoded set of parameters for the pipeline that the edge device is associated with.

Edge names must be unique. Update the edge name below if required.

edge_name = 'cv-observability-demo-sample'
edge_publish = pup.add_edge(edge_name)
display(edge_publish)
ID5
Pipeline Versionc2dd2c7d-618d-497f-8515-3aa1469d7985
StatusPublished
Engine URLghcr.io/wallaroolabs/doc-samples/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.1-4351
Pipeline URLghcr.io/wallaroolabs/doc-samples/pipelines/retail-inv-tracker-edge-obs:c2dd2c7d-618d-497f-8515-3aa1469d7985
Helm Chart URLoci://ghcr.io/wallaroolabs/doc-samples/charts/retail-inv-tracker-edge-obs
Helm Chart Referenceghcr.io/wallaroolabs/doc-samples/charts@sha256:306df0921321c299d0b04c8e0499ab0678082a197da97676e280e5d752ab415b
Helm Chart Version0.0.1-c2dd2c7d-618d-497f-8515-3aa1469d7985
Engine Config{'engine': {'resources': {'limits': {'cpu': 4.0, 'memory': '3Gi'}, 'requests': {'cpu': 4.0, 'memory': '3Gi'}, 'arch': 'x86', 'gpu': False}}, 'engineAux': {}, 'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 0.2, 'memory': '512Mi'}, 'arch': 'x86', 'gpu': False}}}
User Images[]
Created Byjohn.hummel@wallaroo.ai
Created At2024-01-10 18:09:25.001491+00:00
Updated At2024-01-10 18:09:25.001491+00:00
Docker Run Variables{'EDGE_BUNDLE': 'abcde'}

DevOps Deployment

The edge deployment is performed with docker run, docker compose, or helm installations. The following command generates the docker run command, with the following values provided by the DevOps Engineer:

  • $REGISTRYURL
  • $REGISTRYUSERNAME
  • $REGISTRYPASSWORD

Before deploying, create the ./data directory that is used to store the authentication credentials.

# create docker run 

docker_command = f'''
docker run -p 8080:8080 \\
    -v ./data:/persist \\
    -e DEBUG=true \\
    -e OCI_REGISTRY=$REGISTRYURL \\
    -e EDGE_BUNDLE={edge_publish.docker_run_variables['EDGE_BUNDLE']} \\
    -e CONFIG_CPUS=6 \\
    -e OCI_USERNAME=$REGISTRYUSERNAME \\
    -e OCI_PASSWORD=$REGISTRYPASSWORD \\
    -e PIPELINE_URL={edge_publish.pipeline_url} \\
    {edge_publish.engine_url}
'''

print(docker_command)
docker run -p 8080:8080 \
    -v ./data:/persist \
    -e DEBUG=true \
    -e OCI_REGISTRY=$REGISTRYURL \
    -e EDGE_BUNDLE=ZXhwb3J0IEJVTkRMRV9WRVJTSU9OPTEKZXhwb3J0IEVER0VfTkFNRT1jdi1vYnNlcnZhYmlsaXR5LWRlbW8tc2FtcGxlCmV4cG9ydCBKT0lOX1RPS0VOPWQxN2E0NzJlLTYzNjQtNDcxMi05MWUyLWRhNzUzMjQ1MzNiYwpleHBvcnQgT1BTQ0VOVEVSX0hPU1Q9ZG9jLXRlc3QuZWRnZS53YWxsYXJvb2NvbW11bml0eS5uaW5qYQpleHBvcnQgUElQRUxJTkVfVVJMPWdoY3IuaW8vd2FsbGFyb29sYWJzL2RvYy1zYW1wbGVzL3BpcGVsaW5lcy9yZXRhaWwtaW52LXRyYWNrZXItZWRnZS1vYnM6YzJkZDJjN2QtNjE4ZC00OTdmLTg1MTUtM2FhMTQ2OWQ3OTg1CmV4cG9ydCBXT1JLU1BBQ0VfSUQ9OA== \
    -e CONFIG_CPUS=6 \
    -e OCI_USERNAME=$REGISTRYUSERNAME \
    -e OCI_PASSWORD=$REGISTRYPASSWORD \
    -e PIPELINE_URL=ghcr.io/wallaroolabs/doc-samples/pipelines/retail-inv-tracker-edge-obs:c2dd2c7d-618d-497f-8515-3aa1469d7985 \
    ghcr.io/wallaroolabs/doc-samples/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.1-4351

Verify Logs

Before we perform inferences on the edge deployment, we’ll collect the pipeline logs and display the current partitions. These should only include the Wallaroo Ops pipeline.

logs = pipeline.logs(dataset=['time', 'metadata'])

ops_locations = [pd.unique(logs['metadata.partition']).tolist()][0]
display(ops_locations)
ops_location = ops_locations[0]
Warning: The inference log is above the allowable limit and the following columns may have been suppressed for various rows in the logs: ['in.tensor']. To review the dropped columns for an individual inference’s suppressed data, include dataset=["metadata"] in the log request.

['engine-fc59fccbc-bs2sg']

Drift Detection Example

The following uses our baseline and blurred data to create observability values. We start with creating a set of baseline images inference results through our deployed Ops pipeline, storing the start and end dates.

baseline_start = datetime.datetime.now(datetime.timezone.utc)

for i in range(10):
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)

time.sleep(10)

baseline_end = datetime.datetime.now(datetime.timezone.utc)

Build Assay with Baseline

We will use the baseline values to create our assay, specifying the start and end dates to use for the baseline values. From there we will run an interactive assay to view the current values against the baseline. Since they are just the baseline values, everything should be fine.

For our assay window, we will set the locations to both the Ops pipeline and the edge deployed pipeline. This gathers the pipeline log values from both partitions for the assay.

# create baseline from numpy

assay_name_from_dates = "average confidence drift detection example"
step_name = "resnet-with-intensity"
assay_builder_from_dates = wl.build_assay(assay_name_from_dates, 
                               pipeline, 
                               step_name, 
                               iopath="output avg_confidence 0", 
                               baseline_start=baseline_start,
                               baseline_end=baseline_end)
# assay from recent updates

assay_builder_from_dates = assay_builder_from_dates.add_run_until(baseline_end)

# View 1 minute intervals
# just ops
(assay_builder_from_dates
    .window_builder()
    .add_width(minutes=1)
    .add_interval(minutes=1)
    .add_start(baseline_start)
    .add_location_filter([ops_partition, edge_name])
)
<wallaroo.assay_config.WindowBuilder at 0x14850dd00>
assay_config = assay_builder_from_dates.build()
assay_results = assay_config.interactive_run()

print(f"Generated {len(assay_results)} analyses")
assay_results.chart_scores()
Generated 6 analyses

Set Observability Data

The next set of inferences will send all blurred image data to the edge deployed pipeline, and all good to the Ops pipeline. By the end, we will be able to demonstrate viewing the assay results to show detecting the blurred images causing more and more scores outside of the baseline.

Every so often we will rerun the interactive assay to show the updated results.

assay_window_start = datetime.datetime.now(datetime.timezone.utc)

for i in range(1):
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(9):
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
# assay window from dates

assay_window_end = datetime.datetime.now(datetime.timezone.utc)

assay_builder_from_dates = assay_builder_from_dates.add_run_until(assay_window_end)

# View 1 minute intervals
# just combined
(assay_builder_from_dates
    .window_builder()
    .add_width(minutes=6)
    .add_interval(minutes=6)
    .add_start(assay_window_start)
    .add_location_filter([ops_partition, edge_name])
)
<wallaroo.assay_config.WindowBuilder at 0x14850dd00>
assay_config = assay_builder_from_dates.build()
assay_results = assay_config.interactive_run()

print(f"Generated {len(assay_results)} analyses")
assay_results.chart_scores()
Generated 1 analyses
for i in range(8):
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(2):
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(7):
    print(i)
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(3):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(6):
    print(i)
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(4):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
# assay window from dates

assay_window_end = datetime.datetime.now(datetime.timezone.utc)

assay_builder_from_dates = assay_builder_from_dates.add_run_until(assay_window_end)

# View 1 minute intervals
# just combined
(assay_builder_from_dates
    .window_builder()
    .add_width(minutes=7)
    .add_interval(minutes=7)
    .add_start(assay_window_start)
    .add_location_filter([ops_partition, edge_name])
)
<wallaroo.assay_config.WindowBuilder at 0x14850dd00>
assay_config = assay_builder_from_dates.build()
assay_results = assay_config.interactive_run()

print(f"Generated {len(assay_results)} analyses")
assay_results.chart_scores()
Generated 7 analyses
for i in range(5):
    print(i)
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(5):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(4):
    print(i)
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(6):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(3):
    print(i)
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(7):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(2):
    print(i)
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(8):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(1):
    print(i)
    for good_image in baseline_images_list:
        ops_pipeline_inference(good_image)
for i in range(9):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
for i in range(10):
    print(i)
    for bad_image in blurred_images_list:
        edge_pipeline_inference(bad_image)
# assay window from dates

assay_window_end = datetime.datetime.now(datetime.timezone.utc)

assay_builder_from_dates = assay_builder_from_dates.add_run_until(assay_window_end)

# just combined
(assay_builder_from_dates
    .window_builder()
    .add_width(minutes=6)
    .add_interval(minutes=6)
    .add_start(assay_window_start)
    .add_location_filter([ops_partition, edge_name])
)
<wallaroo.assay_config.WindowBuilder at 0x14850dd00>
assay_config = assay_builder_from_dates.build()
assay_results = assay_config.interactive_run()

print(f"Generated {len(assay_results)} analyses")
assay_results.chart_scores()
Generated 16 analyses

If we isolate to just the Ops center pipeline, we see a different result.

# assay window from dates

assay_window_end = datetime.datetime.now(datetime.timezone.utc)

assay_builder_from_dates = assay_builder_from_dates.add_run_until(assay_window_end)

# just combined
(assay_builder_from_dates
    .window_builder()
    .add_width(minutes=6)
    .add_interval(minutes=6)
    .add_start(assay_window_start)
    .add_location_filter([ops_partition])
)
<wallaroo.assay_config.WindowBuilder at 0x14850dd00>
assay_config = assay_builder_from_dates.build()
assay_results = assay_config.interactive_run()

print(f"Generated {len(assay_results)} analyses")
assay_results.chart_scores()
Generated 13 analyses

If we isolate to only the edge location, we see where the out of baseline scores are coming from.

# assay window from dates

assay_window_end = datetime.datetime.now(datetime.timezone.utc)

assay_builder_from_dates = assay_builder_from_dates.add_run_until(assay_window_end)

# just combined
(assay_builder_from_dates
    .window_builder()
    .add_width(minutes=6)
    .add_interval(minutes=6)
    .add_start(assay_window_start)
    .add_location_filter([edge_name])
)
<wallaroo.assay_config.WindowBuilder at 0x14850dd00>
assay_config = assay_builder_from_dates.build()
assay_results = assay_config.interactive_run()

print(f"Generated {len(assay_results)} analyses")
assay_results.chart_scores()
Generated 12 analyses

With the demonstration complete, we can shut down the edge deployed pipeline and undeploy the pipeline in the Ops center.

pipeline.undeploy()
nameretail-inv-tracker-edge-obs
created2024-01-10 17:50:59.035145+00:00
last_updated2024-01-10 18:09:22.128239+00:00
deployedFalse
archNone
tags
versionsc2dd2c7d-618d-497f-8515-3aa1469d7985, bee8f4f6-b1d3-40e7-9fc5-221db3ff1b87, 79321f4e-ca2d-4be1-8590-8c3be5d8953c, 64c06b04-d8fb-4651-ae5e-886c12a30e94, d0c2ed1c-3691-49f1-8fc8-e6510e4c39f8, 773099d3-6d64-4a92-b5a7-f614a916965d
stepsresnet-with-intensity
publishedTrue

2 - Wallaroo Model Observability: Anomaly Detection with CCFraud

How to detect anomalous model inputs or outputs using the CCFraud model as an example.

The following tutorials are available from the Wallaroo Tutorials Repository.

Wallaroo Model Observability: Anomaly Detection with CCFraud

The following tutorial demonstrates the use case of detecting anomalies: inference input or output data that does not match typical validations.

Wallaroo provides validations to detect anomalous data from inference inputs and outputs. Validations are added to a Wallaroo pipeline with the wallaroo.pipeline.add_validations method.

Adding validations takes the format:

pipeline.add_validations(
    validation_name_01 = polars.col(in|out.{column_name}) EXPRESSION,
    validation_name_02 = polars.col(in|out.{column_name}) EXPRESSION
    ...{additional rules}
)
  • validation_name: The user provided name of the validation. The names must match Python variable naming requirements.
    • IMPORTANT NOTE: Using the name count as a validation name returns an error. Any validation rules named count are dropped upon request and a warning returned.
  • polars.col(in|out.{column_name}): Specifies the input or output for a specific field aka “column” in an inference result. Wallaroo inference requests are in the format in.{field_name} for inputs, and out.{field_name} for outputs.
  • EXPRESSION: The expression to validate. When the expression returns True, that indicates an anomaly detected.

The polars library version 0.18.5 is used to create the validation rule. This is installed by default with the Wallaroo SDK. This provides a powerful range of comparisons to organizations tracking anomalous data from their ML models.

When validations are added to a pipeline, inference request outputs return the following fields:

FieldTypeDescription
anomaly.countIntegerThe total of all validations that returned True.
anomaly.{validation name}BoolThe output of the validation {validation_name}.

When validation returns True, an anomaly is detected.

For example, adding the validation fraud to the following pipeline returns anomaly.count of 1 when the validation fraud returns True. The validation fraud returns True when the output field dense_1 at index 0 is greater than 0.9.

sample_pipeline = wallaroo.client.build_pipeline("sample-pipeline")
sample_pipeline.add_model_step(ccfraud_model)

# add the validation
sample_pipeline.add_validations(
    fraud=pl.col("out.dense_1").list.get(0) > 0.9,
    )

# deploy the pipeline
sample_pipeline.deploy()

# sample inference
display(sample_pipeline.infer_from_file("dev_high_fraud.json", data_format='pandas-records'))
 timein.tensorout.dense_1anomaly.countanomaly.fraud
02024-02-02 16:05:42.152[1.0678324729, 18.1555563975, -1.6589551058, 5…][0.981199]1True

Detecting Anomalies from Inference Request Results

When an inference request is submitted to a Wallaroo pipeline with validations, the following fields are output:

FieldTypeDescription
anomaly.countIntegerThe total of all validations that returned True.
anomaly.{validation name}BoolThe output of each pipeline validation {validation_name}.

For example, adding the validation fraud to the following pipeline returns anomaly.count of 1 when the validation fraud returns True.

sample_pipeline = wallaroo.client.build_pipeline("sample-pipeline")
sample_pipeline.add_model_step(ccfraud_model)

# add the validation
sample_pipeline.add_validations(
    fraud=pl.col("out.dense_1").list.get(0) > 0.9,
    )

# deploy the pipeline
sample_pipeline.deploy()

# sample inference
display(sample_pipeline.infer_from_file("dev_high_fraud.json", data_format='pandas-records'))
 timein.tensorout.dense_1anomaly.countanomaly.fraud
02024-02-02 16:05:42.152[1.0678324729, 18.1555563975, -1.6589551058, 5…][0.981199]1True

Anomaly Detection Demonstration

The following demonstrates how to:

  • Upload a ccfraud ML model trained to detect the likelihood of a transaction being fraudulent. This outputs the field dense_1 as an float where the closer to 1, the higher the likelihood of the transaction being fraudulent.
  • Add the ccfraud model as a pipeline step.
  • Add the validation fraud to detect when the output of dense_1 at index 0 when the values are greater than 0.9.
  • Deploy the pipeline and performing sample inferences on it.
  • Perform sample inferences to show when the fraud validation returns True and False.
  • Perform sample inference with different datasets to show enable or disable certain fields from displaying in the inference results.

Prerequisites

  • Wallaroo version 2023.4.1 and above.
  • polars version 0.18.5. This is installed by default with the Wallaroo SDK.

Tutorial Steps

Load Libraries

The first step is to import the libraries used in this notebook.

import wallaroo
wallaroo.__version__
'2023.4.1+379cb6b8a'

Connect to the Wallaroo Instance through the User Interface

The next step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

wl = wallaroo.Client()

Create a New Workspace

We’ll use the SDK below to create our workspace then assign as our current workspace. The current workspace is used by the Wallaroo SDK for where to upload models, create pipelines, etc. We’ll also set up variables for our models and pipelines down the road, so we have one spot to change names to whatever fits your organization’s standards best.

Before starting, verify that the workspace name is unique in your Wallaroo instance.

def get_workspace(name, client):
    workspace = None
    for ws in client.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = client.create_workspace(name)
    return workspace

workspace_name = 'validation-ccfraud-demonstration-jch'
pipeline_name = 'ccfraud-validation-demo'
model_name = 'ccfraud'
model_file_name = './models/ccfraud.onnx'
workspace = get_workspace(workspace_name, wl)
wl.set_current_workspace(workspace)
{'name': 'validation-ccfraud-demonstration-jch', 'id': 19, 'archived': False, 'created_by': 'c97d480f-6064-4537-b18e-40fb1864b4cd', 'created_at': '2024-02-08T16:57:29.044902+00:00', 'models': [{'name': 'ccfraud', 'versions': 2, 'owner_id': '""', 'last_update_time': datetime.datetime(2024, 2, 8, 17, 12, 40, 341069, tzinfo=tzutc()), 'created_at': datetime.datetime(2024, 2, 8, 16, 57, 31, 612826, tzinfo=tzutc())}], 'pipelines': [{'name': 'ccfraud-validation', 'create_time': datetime.datetime(2024, 2, 8, 16, 57, 32, 340043, tzinfo=tzutc()), 'definition': '[]'}]}

Upload the Model

Upload the model to the Wallaroo workspace with the wallaroo.client.upload_model method. Our ccfraud ML model is a Wallaroo Default Runtime of type ONNX, so all we need is the model name, the model file path, and the framework type of wallaroo.framework.Framework.ONNX.

ccfraud_model = (wl.upload_model(model_name, 
                                 model_file_name, 
                                 framework=wallaroo.framework.Framework.ONNX)
                )

Build the Pipeline

Pipelines are build with the wallaroo.client.build_pipeline method, which takes the pipeline name. This will create the pipeline in our default workspace. Note that if there are any existing pipelines with the same name in this workspace, this method will retrieve that pipeline for this SDK session.

Once the pipeline is created, we add the ccfraud model as our pipeline step.

sample_pipeline = wl.build_pipeline(pipeline_name)
sample_pipeline = sample_pipeline.add_model_step(ccfraud_model)

Add Validation

Now we add our validation to our new pipeline. We will give it the following configuration.

  • Validation Name: fraud
  • Validation Field: out.dense_1
  • Validation Field Index: 0
  • Validation Expression: Values greater than 0.9.

The polars library is required for creating the validation. We will import the polars library, then add our validation to the pipeline.

  • IMPORTANT NOTE: Validation names must be unique per pipeline. If a validation of the same name is added, both are included in the pipeline validations, but only most recent validation with the same name is displayed with the inference results. Anomalies detected by multiple validations of the same name are added to the anomaly.count inference result field.
import polars as pl

sample_pipeline = sample_pipeline.add_validations(
    fraud=pl.col("out.dense_1").list.get(0) > 0.9
)

Display Pipeline And Validation Steps

The method wallaroo.pipeline.steps() shows the current pipeline steps. The added validations are in the Check field. This is used for demonstration purposes to show the added validation to the pipeline.

sample_pipeline.steps()
[{'ModelInference': {'models': [{'name': 'ccfraud', 'version': 'f1f2ab86-a41d-4601-b14a-b594e3d86c6e', 'sha': 'bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507'}]}},
 {'Check': {'tree': ['{"Alias":[{"BinaryExpr":{"left":{"Function":{"input":[{"Column":"out.dense_1"},{"Literal":{"Int32":0}}],"function":{"ListExpr":"Get"},"options":{"collect_groups":"ApplyFlat","fmt_str":"","input_wildcard_expansion":false,"auto_explode":true,"cast_to_supertypes":false,"allow_rename":false,"pass_name_to_apply":false,"changes_length":false,"check_lengths":true,"allow_group_aware":true}}},"op":"Gt","right":{"Literal":{"Float64":0.9}}}},"fraud"]}']}}]

Deploy Pipeline

With the pipeline steps set and the validations created, we deploy the pipeline. Because of it’s size, we will only allocate 0.1 cpu from the cluster for the pipeline’s use.

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.1)\
    .build()

sample_pipeline.deploy(deployment_config=deploy_config)
Waiting for deployment - this will take up to 45s ......... ok
nameccfraud-validation-demo
created2024-02-08 17:47:02.951799+00:00
last_updated2024-02-08 17:47:03.074392+00:00
deployedTrue
archNone
tags
versions5d5a2272-5c80-4eb1-9712-0a342febb775, 7baa8bc8-2218-4b09-9436-00a40407a14d
stepsccfraud
publishedFalse

Sample Inferences

Two sample inferences are performed with the method wallaroo.pipeline.infer_from_file that takes either a pandas Record JSON file or an Apache Arrow table as the input.

For our demonstration, we will use the following pandas Record JSON files with the following sample data:

  • ./data/dev_smoke_test.pandas.json: A sample inference that generates a low (lower than 0.01) likelihood of fraud.
  • ./data/dev_high_fraud.pandas.json: A sample inference that generates a high (higher than 0.90) likelihood of fraud.

The inference request returns a pandas DataFrame.

Each of the inference outputs will include the following fields:

FieldTypeDescription
timeDateTimeThe DateTime of the inference request.
in.{input_field_name}Input DependentEach input field submitted is labeled as in.{input_field_name} in the inference request result. For our example, this is tensor, so the input field in the returned inference request is in.tensor.
out.{model_output_field_name}Output DependentEach field output by the ML model is labeled as out.{model_output_field_name} in the inference request result. For our example, the ccfraud model returns dense_1 as its output field, so the output field in the returned inference request is out.dense_1.
anomaly.countIntegerThe total number of validations that returned True.
**anomaly.{validation_name}BoolEach validation added to the pipeline is returned as anomaly.{validation_name}, and returns either True if the validation returns True, indicating an anomaly is found, or False for an anomaly for the validation is not found. For our example, we will have anomaly.fraud returned.
sample_pipeline.infer_from_file("./data/dev_smoke_test.pandas.json")
timein.dense_inputout.dense_1anomaly.countanomaly.fraud
02024-02-08 17:47:12.909[1.0678324729, 0.2177810266, -1.7115145262, 0....[0.0014974177]0False
sample_pipeline.infer_from_file("./data/dev_high_fraud.json")
timein.dense_inputout.dense_1anomaly.countanomaly.fraud
02024-02-08 17:47:12.962[1.0678324729, 18.1555563975, -1.6589551058, 5...[0.981199]1True

Other Validation Examples

The following are additional examples of validations.

Multiple Validations

The following uses multiple validations to check for anomalies. We still use fraud which detects outputs that are greater than 0.9. The second validation too_low triggers an anomaly when the out.dense_1 is under 0.05.

After the validations are added, the pipeline is redeployed to “set” them.

sample_pipeline = sample_pipeline.add_validations(
    too_low=pl.col("out.dense_1").list.get(0) < 0.001
)

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.1)\
    .build()
sample_pipeline.undeploy()
sample_pipeline.deploy(deployment_config=deploy_config)
Waiting for undeployment - this will take up to 45s ..................................... ok
Waiting for deployment - this will take up to 45s ......... ok
nameccfraud-validation-demo
created2024-02-08 17:47:02.951799+00:00
last_updated2024-02-08 17:47:51.243530+00:00
deployedTrue
archNone
tags
versions54982a2e-180b-4da6-ab50-e2940ec14ff5, 5d5a2272-5c80-4eb1-9712-0a342febb775, 7baa8bc8-2218-4b09-9436-00a40407a14d
stepsccfraud
publishedFalse
sample_pipeline.infer_from_file("./data/dev_smoke_test.pandas.json")
timein.dense_inputout.dense_1anomaly.countanomaly.fraudanomaly.too_low
02024-02-08 17:48:00.996[1.0678324729, 0.2177810266, -1.7115145262, 0....[0.0014974177]0FalseFalse
sample_pipeline.infer_from_file("./data/dev_high_fraud.json")
timein.dense_inputout.dense_1anomaly.countanomaly.fraudanomaly.too_low
02024-02-08 17:48:01.041[1.0678324729, 18.1555563975, -1.6589551058, 5...[0.981199]1TrueFalse

Compound Validations

The following combines multiple field checks into a single validation. For this, we will check for values of out.dense_1 that are between 0.05 and 0.9.

Each expression is separated by (). For example:

  • Expression 1: pl.col("out.dense_1").list.get(0) < 0.9
  • Expression 2: pl.col("out.dense_1").list.get(0) > 0.001
  • Compound Expression: (pl.col("out.dense_1").list.get(0) < 0.9) & (pl.col("out.dense_1").list.get(0) > 0.001)
sample_pipeline = sample_pipeline.add_validations(
    in_between_2=(pl.col("out.dense_1").list.get(0) < 0.9) & (pl.col("out.dense_1").list.get(0) > 0.001)
)

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.1)\
    .build()
sample_pipeline.undeploy()
sample_pipeline.deploy(deployment_config=deploy_config)
Waiting for undeployment - this will take up to 45s ..................................... ok
Waiting for deployment - this will take up to 45s ......... ok
nameccfraud-validation-demo
created2024-02-08 17:47:02.951799+00:00
last_updated2024-02-08 17:48:39.387256+00:00
deployedTrue
archNone
tags
versions97fb284e-aa10-4192-a072-308a705b969c, 54982a2e-180b-4da6-ab50-e2940ec14ff5, 5d5a2272-5c80-4eb1-9712-0a342febb775, 7baa8bc8-2218-4b09-9436-00a40407a14d
stepsccfraud
publishedFalse
results = sample_pipeline.infer_from_file("./data/cc_data_1k.df.json")

results.loc[results['anomaly.in_between_2'] == True] 
timein.dense_inputout.dense_1anomaly.countanomaly.fraudanomaly.in_between_2anomaly.too_low
42024-02-08 17:48:49.305[0.5817662108, 0.097881551, 0.1546819424, 0.47...[0.0010916889]1FalseTrueFalse
72024-02-08 17:48:49.305[1.0379636346, -0.152987302, -1.0912561862, -0...[0.0011294782]1FalseTrueFalse
82024-02-08 17:48:49.305[0.1517283662, 0.6589966337, -0.3323713647, 0....[0.0018743575]1FalseTrueFalse
92024-02-08 17:48:49.305[-0.1683100246, 0.7070470317, 0.1875234948, -0...[0.0011520088]1FalseTrueFalse
102024-02-08 17:48:49.305[0.6066235674, 0.0631839305, -0.0802961973, 0....[0.0016568303]1FalseTrueFalse
........................
9822024-02-08 17:48:49.305[-0.0932906169, 0.2837744937, -0.061094265, 0....[0.0010192394]1FalseTrueFalse
9832024-02-08 17:48:49.305[0.0991458877, 0.5813808183, -0.3863062246, -0...[0.0020678043]1FalseTrueFalse
9922024-02-08 17:48:49.305[1.0458395446, 0.2492453605, -1.5260449285, 0....[0.0013128221]1FalseTrueFalse
9982024-02-08 17:48:49.305[1.0046377125, 0.0343666504, -1.3512533246, 0....[0.0011070371]1FalseTrueFalse
10002024-02-08 17:48:49.305[0.6118805301, 0.1726081102, 0.4310545502, 0.5...[0.0012498498]1FalseTrueFalse

179 rows × 7 columns

Specify Dataset

Wallaroo inference requests allow datasets to be excluded or included with the dataset_exclude and dataset parameters.

ParameterTypeDescription
dataset_excludeList(String)The list of datasets to exclude. Values include:
  • metadata: Returns inference time per model, last model used, and other parameters.
  • anomaly: The anomaly results of all validations added to the pipeline.
datasetList(String)The list of datasets and fields to include.

For our example, we will exclude the anomaly dataset, but include the datasets 'time', 'in', 'out', 'anomaly.count'. Note that while we exclude anomaly, we override that with by setting the anomaly field 'anomaly.count' in our dataset parameter.

sample_pipeline.infer_from_file("./data/dev_high_fraud.json", 
                                dataset_exclude=['anomaly'], 
                                dataset=['time', 'in', 'out', 'anomaly.count']
                                )
timein.dense_inputout.dense_1anomaly.count
02024-02-08 17:48:49.634[1.0678324729, 18.1555563975, -1.6589551058, 5...[0.981199]1

Undeploy the Pipeline

With the demonstration complete, we undeploy the pipeline and return the resources back to the cluster.

sample_pipeline.undeploy()
Waiting for undeployment - this will take up to 45s ..................................... ok
nameccfraud-validation-demo
created2024-02-08 17:47:02.951799+00:00
last_updated2024-02-08 17:48:39.387256+00:00
deployedFalse
archNone
tags
versions97fb284e-aa10-4192-a072-308a705b969c, 54982a2e-180b-4da6-ab50-e2940ec14ff5, 5d5a2272-5c80-4eb1-9712-0a342febb775, 7baa8bc8-2218-4b09-9436-00a40407a14d
stepsccfraud
publishedFalse

3 - Wallaroo Model Observability: Anomaly Detection with House Price Prediction

How to detect anomalous model inputs or outputs using the CCFraud model as an example.

The following tutorials are available from the Wallaroo Tutorials Repository.

Wallaroo Model Observability: Anomaly Detection with House Price Prediction

The following tutorial demonstrates the use case of detecting anomalies: inference input or output data that does not match typical validations.

Wallaroo provides validations to detect anomalous data from inference inputs and outputs. Validations are added to a Wallaroo pipeline with the wallaroo.pipeline.add_validations method.

Adding validations takes the format:

pipeline.add_validations(
    validation_name_01 = polars.col(in|out.{column_name}) EXPRESSION,
    validation_name_02 = polars.col(in|out.{column_name}) EXPRESSION
    ...{additional rules}
)
  • validation_name: The user provided name of the validation. The names must match Python variable naming requirements.
    • IMPORTANT NOTE: Using the name count as a validation name returns an error. Any validation rules named count are dropped upon request and a warning returned.
  • polars.col(in|out.{column_name}): Specifies the input or output for a specific field aka “column” in an inference result. Wallaroo inference requests are in the format in.{field_name} for inputs, and out.{field_name} for outputs.
  • EXPRESSION: The expression to validate. When the expression returns True, that indicates an anomaly detected.

The polars library version 0.18.5 is used to create the validation rule. This is installed by default with the Wallaroo SDK. This provides a powerful range of comparisons to organizations tracking anomalous data from their ML models.

When validations are added to a pipeline, inference request outputs return the following fields:

FieldTypeDescription
anomaly.countIntegerThe total of all validations that returned True.
anomaly.{validation name}BoolThe output of the validation {validation_name}.

When validation returns True, an anomaly is detected.

For example, adding the validation fraud to the following pipeline returns anomaly.count of 1 when the validation fraud returns True. The validation fraud returns True when the output field dense_1 at index 0 is greater than 0.9.

sample_pipeline = wallaroo.client.build_pipeline("sample-pipeline")
sample_pipeline.add_model_step(model)

# add the validation
sample_pipeline.add_validations(
    fraud=pl.col("out.dense_1").list.get(0) > 0.9,
    )

# deploy the pipeline
sample_pipeline.deploy()

# sample inference
display(sample_pipeline.infer_from_file("dev_high_fraud.json", data_format='pandas-records'))
 timein.tensorout.dense_1anomaly.countanomaly.fraud
02024-02-02 16:05:42.152[1.0678324729, 18.1555563975, -1.6589551058, 5…][0.981199]1True

Detecting Anomalies from Inference Request Results

When an inference request is submitted to a Wallaroo pipeline with validations, the following fields are output:

FieldTypeDescription
anomaly.countIntegerThe total of all validations that returned True.
anomaly.{validation name}BoolThe output of each pipeline validation {validation_name}.

For example, adding the validation fraud to the following pipeline returns anomaly.count of 1 when the validation fraud returns True.

sample_pipeline = wallaroo.client.build_pipeline("sample-pipeline")
sample_pipeline.add_model_step(model)

# add the validation
sample_pipeline.add_validations(
    fraud=pl.col("out.dense_1").list.get(0) > 0.9,
    )

# deploy the pipeline
sample_pipeline.deploy()

# sample inference
display(sample_pipeline.infer_from_file("dev_high_fraud.json", data_format='pandas-records'))
 timein.tensorout.dense_1anomaly.countanomaly.fraud
02024-02-02 16:05:42.152[1.0678324729, 18.1555563975, -1.6589551058, 5…][0.981199]1True

Anomaly Detection Demonstration

The following demonstrates how to:

  • Upload a house price ML model trained to predict house prices based on a set of inputs. This outputs the field variable as an float which is the predicted house price.
  • Add the house price model as a pipeline step.
  • Add the validation too_high to detect when a house price exceeds a certain value.
  • Deploy the pipeline and performing sample inferences on it.
  • Perform sample inferences to show when the too_high validation returns True and False.
  • Perform sample inference with different datasets to show enable or disable certain fields from displaying in the inference results.

Prerequisites

  • Wallaroo version 2023.4.1 and above.
  • polars version 0.18.5. This is installed by default with the Wallaroo SDK.

Tutorial Steps

Load Libraries

The first step is to import the libraries used in this notebook.

import wallaroo
wallaroo.__version__
'2023.4.1+379cb6b8a'

Connect to the Wallaroo Instance through the User Interface

The next step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

wl = wallaroo.Client()

Create a New Workspace

We’ll use the SDK below to create our workspace then assign as our current workspace. The current workspace is used by the Wallaroo SDK for where to upload models, create pipelines, etc. We’ll also set up variables for our models and pipelines down the road, so we have one spot to change names to whatever fits your organization’s standards best.

Before starting, verify that the workspace name is unique in your Wallaroo instance.

def get_workspace(name, client):
    workspace = None
    for ws in client.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = client.create_workspace(name)
    return workspace

workspace_name = 'validation-house-price-demonstration'
pipeline_name = 'validation-demo'
model_name = 'anomaly-housing-model'
model_file_name = './models/rf_model.onnx'
workspace = get_workspace(workspace_name, wl)
wl.set_current_workspace(workspace)
{'name': 'validation-house-price-demonstration', 'id': 25, 'archived': False, 'created_by': 'c97d480f-6064-4537-b18e-40fb1864b4cd', 'created_at': '2024-02-08T21:52:50.354176+00:00', 'models': [{'name': 'anomaly-housing-model', 'versions': 1, 'owner_id': '""', 'last_update_time': datetime.datetime(2024, 2, 8, 21, 52, 51, 671284, tzinfo=tzutc()), 'created_at': datetime.datetime(2024, 2, 8, 21, 52, 51, 671284, tzinfo=tzutc())}], 'pipelines': [{'name': 'validation-demo', 'create_time': datetime.datetime(2024, 2, 8, 21, 52, 52, 879885, tzinfo=tzutc()), 'definition': '[]'}]}

Upload the Model

Upload the model to the Wallaroo workspace with the wallaroo.client.upload_model method. Our house price ML model is a Wallaroo Default Runtime of type ONNX, so all we need is the model name, the model file path, and the framework type of wallaroo.framework.Framework.ONNX.

model = (wl.upload_model(model_name, 
                                 model_file_name, 
                                 framework=wallaroo.framework.Framework.ONNX)
                )

Build the Pipeline

Pipelines are build with the wallaroo.client.build_pipeline method, which takes the pipeline name. This will create the pipeline in our default workspace. Note that if there are any existing pipelines with the same name in this workspace, this method will retrieve that pipeline for this SDK session.

Once the pipeline is created, we add the ccfraud model as our pipeline step.

sample_pipeline = wl.build_pipeline(pipeline_name)
sample_pipeline.clear()
sample_pipeline = sample_pipeline.add_model_step(model)
import onnx

model = onnx.load(model_file_name)
output =[node.name for node in model.graph.output]

input_all = [node.name for node in model.graph.input]
input_initializer =  [node.name for node in model.graph.initializer]
net_feed_input = list(set(input_all)  - set(input_initializer))

print('Inputs: ', net_feed_input)
print('Outputs: ', output)
Inputs:  ['float_input']
Outputs:  ['variable']

Add Validation

Now we add our validation to our new pipeline. We will give it the following configuration.

  • Validation Name: too_high
  • Validation Field: out.variable
  • Validation Field Index: 0
  • Validation Expression: Values greater than 1000000.0.

The polars library is required for creating the validation. We will import the polars library, then add our validation to the pipeline.

  • IMPORTANT NOTE: Validation names must be unique per pipeline. If a validation of the same name is added, both are included in the pipeline validations, but only most recent validation with the same name is displayed with the inference results. Anomalies detected by multiple validations of the same name are added to the anomaly.count inference result field.
import polars as pl

sample_pipeline = sample_pipeline.add_validations(
    too_high=pl.col("out.variable").list.get(0) > 1000000.0
)

Display Pipeline And Validation Steps

The method wallaroo.pipeline.steps() shows the current pipeline steps. The added validations are in the Check field. This is used for demonstration purposes to show the added validation to the pipeline.

sample_pipeline.steps()
[{'ModelInference': {'models': [{'name': 'anomaly-housing-model', 'version': '9a76a2cf-9ea3-4978-8fd5-005d0280e661', 'sha': 'e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6'}]}},
 {'Check': {'tree': ['{"Alias":[{"BinaryExpr":{"left":{"Function":{"input":[{"Column":"out.variable"},{"Literal":{"Int32":0}}],"function":{"ListExpr":"Get"},"options":{"collect_groups":"ApplyFlat","fmt_str":"","input_wildcard_expansion":false,"auto_explode":true,"cast_to_supertypes":false,"allow_rename":false,"pass_name_to_apply":false,"changes_length":false,"check_lengths":true,"allow_group_aware":true}}},"op":"Gt","right":{"Literal":{"Float64":1000000.0}}}},"too_high"]}']}}]

Deploy Pipeline

With the pipeline steps set and the validations created, we deploy the pipeline. Because of it’s size, we will only allocate 0.1 cpu from the cluster for the pipeline’s use.

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.25)\
    .build()

sample_pipeline.deploy(deployment_config=deploy_config)
Waiting for undeployment - this will take up to 45s ..................................... ok
Waiting for deployment - this will take up to 45s ......... ok
namevalidation-demo
created2024-02-08 21:52:52.879885+00:00
last_updated2024-02-08 22:14:13.217863+00:00
deployedTrue
archNone
tags
versions2a8d204a-f359-4f02-b558-950dbab28dc6, 424c7f24-ca65-45af-825f-64d3e9f8e8c8, 190226c9-a536-4457-9851-a68ef968b6fc, e10707fd-75b8-4386-8466-e58dc13d2828, 53b87a42-8498-475a-bf30-73fdebbf85cc
stepsanomaly-housing-model
publishedFalse

Sample Inferences

Two sample inferences are performed with the method wallaroo.pipeline.infer_from_file that takes either a pandas Record JSON file or an Apache Arrow table as the input.

For our demonstration, we will use the following pandas Record JSON file with the following sample data:

  • ./data/houseprice_5000_data.json: A sample sets of 5000 houses to generates a range of predicted values.

The inference request returns a pandas DataFrame.

Each of the inference outputs will include the following fields:

FieldTypeDescription
timeDateTimeThe DateTime of the inference request.
in.{input_field_name}Input DependentEach input field submitted is labeled as in.{input_field_name} in the inference request result. For our example, this is tensor, so the input field in the returned inference request is in.tensor.
out.{model_output_field_name}Output DependentEach field output by the ML model is labeled as out.{model_output_field_name} in the inference request result. For our example, the ccfraud model returns dense_1 as its output field, so the output field in the returned inference request is out.dense_1.
anomaly.countIntegerThe total number of validations that returned True.
**anomaly.{validation_name}BoolEach validation added to the pipeline is returned as anomaly.{validation_name}, and returns either True if the validation returns True, indicating an anomaly is found, or False for an anomaly for the validation is not found. For our example, we will have anomaly.fraud returned.
results = sample_pipeline.infer_from_file('./data/test-1000.df.json')
# first 20 results
display(results.head(20))

# only results that trigger the anomaly too_high
results.loc[results['anomaly.too_high'] == True]
timein.float_inputout.variableanomaly.countanomaly.too_high
02024-02-08 22:14:47.075[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0,...[718013.75]0False
12024-02-08 22:14:47.075[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0,...[615094.56]0False
22024-02-08 22:14:47.075[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, ...[448627.72]0False
32024-02-08 22:14:47.075[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0,...[758714.2]0False
42024-02-08 22:14:47.075[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4....[513264.7]0False
52024-02-08 22:14:47.075[3.0, 2.0, 2140.0, 4923.0, 1.0, 0.0, 0.0, 4.0,...[668288.0]0False
62024-02-08 22:14:47.075[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0,...[1004846.5]1True
72024-02-08 22:14:47.075[3.0, 2.0, 1280.0, 960.0, 2.0, 0.0, 0.0, 3.0, ...[684577.2]0False
82024-02-08 22:14:47.075[4.0, 2.5, 2820.0, 15000.0, 2.0, 0.0, 0.0, 4.0...[727898.1]0False
92024-02-08 22:14:47.075[3.0, 2.25, 1790.0, 11393.0, 1.0, 0.0, 0.0, 3....[559631.1]0False
102024-02-08 22:14:47.075[3.0, 1.5, 1010.0, 7683.0, 1.5, 0.0, 0.0, 5.0,...[340764.53]0False
112024-02-08 22:14:47.075[3.0, 2.0, 1270.0, 1323.0, 3.0, 0.0, 0.0, 3.0,...[442168.06]0False
122024-02-08 22:14:47.075[4.0, 1.75, 2070.0, 9120.0, 1.0, 0.0, 0.0, 4.0...[630865.6]0False
132024-02-08 22:14:47.075[4.0, 1.0, 1620.0, 4080.0, 1.5, 0.0, 0.0, 3.0,...[559631.1]0False
142024-02-08 22:14:47.075[4.0, 3.25, 3990.0, 9786.0, 2.0, 0.0, 0.0, 3.0...[909441.1]0False
152024-02-08 22:14:47.075[4.0, 2.0, 1780.0, 19843.0, 1.0, 0.0, 0.0, 3.0...[313096.0]0False
162024-02-08 22:14:47.075[4.0, 2.5, 2130.0, 6003.0, 2.0, 0.0, 0.0, 3.0,...[404040.8]0False
172024-02-08 22:14:47.075[3.0, 1.75, 1660.0, 10440.0, 1.0, 0.0, 0.0, 3....[292859.5]0False
182024-02-08 22:14:47.075[3.0, 2.5, 2110.0, 4118.0, 2.0, 0.0, 0.0, 3.0,...[338357.88]0False
192024-02-08 22:14:47.075[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5....[682284.6]0False
timein.float_inputout.variableanomaly.countanomaly.too_high
62024-02-08 22:14:47.075[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0,...[1004846.5]1True
302024-02-08 22:14:47.075[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0...[1514079.8]1True
402024-02-08 22:14:47.075[4.0, 4.5, 5120.0, 41327.0, 2.0, 0.0, 0.0, 3.0...[1204324.8]1True
632024-02-08 22:14:47.075[4.0, 3.0, 4040.0, 19700.0, 2.0, 0.0, 0.0, 3.0...[1028923.06]1True
1102024-02-08 22:14:47.075[4.0, 2.5, 3470.0, 20445.0, 2.0, 0.0, 0.0, 4.0...[1412215.3]1True
1302024-02-08 22:14:47.075[4.0, 2.75, 2620.0, 13777.0, 1.5, 0.0, 2.0, 4....[1223839.1]1True
1332024-02-08 22:14:47.075[5.0, 2.25, 3320.0, 13138.0, 1.0, 0.0, 2.0, 4....[1108000.1]1True
1542024-02-08 22:14:47.075[4.0, 2.75, 3800.0, 9606.0, 2.0, 0.0, 0.0, 3.0...[1039781.25]1True
1602024-02-08 22:14:47.075[5.0, 3.5, 4150.0, 13232.0, 2.0, 0.0, 0.0, 3.0...[1042119.1]1True
2102024-02-08 22:14:47.075[4.0, 3.5, 4300.0, 70407.0, 2.0, 0.0, 0.0, 3.0...[1115275.0]1True
2392024-02-08 22:14:47.075[4.0, 3.25, 5010.0, 49222.0, 2.0, 0.0, 0.0, 5....[1092274.1]1True
2482024-02-08 22:14:47.075[4.0, 3.75, 4410.0, 8112.0, 3.0, 0.0, 4.0, 3.0...[1967344.1]1True
2552024-02-08 22:14:47.075[4.0, 3.0, 4750.0, 21701.0, 1.5, 0.0, 0.0, 5.0...[2002393.5]1True
2712024-02-08 22:14:47.075[5.0, 3.25, 5790.0, 13726.0, 2.0, 0.0, 3.0, 3....[1189654.4]1True
2812024-02-08 22:14:47.075[3.0, 3.0, 3570.0, 6250.0, 2.0, 0.0, 2.0, 3.0,...[1124493.3]1True
2822024-02-08 22:14:47.075[3.0, 2.75, 3170.0, 34850.0, 1.0, 0.0, 0.0, 5....[1227073.8]1True
2832024-02-08 22:14:47.075[4.0, 2.75, 3260.0, 19542.0, 1.0, 0.0, 0.0, 4....[1364650.3]1True
2852024-02-08 22:14:47.075[4.0, 2.75, 4020.0, 18745.0, 2.0, 0.0, 4.0, 4....[1322835.9]1True
3232024-02-08 22:14:47.075[3.0, 3.0, 2480.0, 5500.0, 2.0, 0.0, 3.0, 3.0,...[1100884.1]1True
3512024-02-08 22:14:47.075[5.0, 4.0, 4660.0, 9900.0, 2.0, 0.0, 2.0, 4.0,...[1058105.0]1True
3602024-02-08 22:14:47.075[4.0, 3.5, 3770.0, 8501.0, 2.0, 0.0, 0.0, 3.0,...[1169643.0]1True
3982024-02-08 22:14:47.075[3.0, 2.25, 2390.0, 7875.0, 1.0, 0.0, 1.0, 3.0...[1364149.9]1True
4142024-02-08 22:14:47.075[5.0, 3.5, 5430.0, 10327.0, 2.0, 0.0, 2.0, 3.0...[1207858.6]1True
4432024-02-08 22:14:47.075[5.0, 4.0, 4360.0, 8030.0, 2.0, 0.0, 0.0, 3.0,...[1160512.8]1True
4972024-02-08 22:14:47.075[4.0, 2.5, 4090.0, 11225.0, 2.0, 0.0, 0.0, 3.0...[1048372.4]1True
5132024-02-08 22:14:47.075[4.0, 3.25, 3320.0, 8587.0, 3.0, 0.0, 0.0, 3.0...[1130661.0]1True
5202024-02-08 22:14:47.075[5.0, 3.75, 4170.0, 8142.0, 2.0, 0.0, 2.0, 3.0...[1098628.8]1True
5302024-02-08 22:14:47.075[4.0, 4.25, 3500.0, 8750.0, 1.0, 0.0, 4.0, 5.0...[1140733.8]1True
5352024-02-08 22:14:47.075[4.0, 3.5, 4460.0, 16271.0, 2.0, 0.0, 2.0, 3.0...[1208638.0]1True
5562024-02-08 22:14:47.075[4.0, 3.5, 4285.0, 9567.0, 2.0, 0.0, 1.0, 5.0,...[1886959.4]1True
6232024-02-08 22:14:47.075[4.0, 3.25, 4240.0, 25639.0, 2.0, 0.0, 3.0, 3....[1156651.3]1True
6242024-02-08 22:14:47.075[4.0, 3.5, 3440.0, 9776.0, 2.0, 0.0, 0.0, 3.0,...[1124493.3]1True
6342024-02-08 22:14:47.075[4.0, 3.25, 4700.0, 38412.0, 2.0, 0.0, 0.0, 3....[1164589.4]1True
6512024-02-08 22:14:47.075[3.0, 3.0, 3920.0, 13085.0, 2.0, 1.0, 4.0, 4.0...[1452224.5]1True
6582024-02-08 22:14:47.075[3.0, 3.25, 3230.0, 7800.0, 2.0, 0.0, 3.0, 3.0...[1077279.3]1True
6712024-02-08 22:14:47.075[3.0, 3.5, 3080.0, 6495.0, 2.0, 0.0, 3.0, 3.0,...[1122811.8]1True
6852024-02-08 22:14:47.075[4.0, 2.5, 4200.0, 35267.0, 2.0, 0.0, 0.0, 3.0...[1181336.0]1True
6862024-02-08 22:14:47.075[4.0, 3.25, 4160.0, 47480.0, 2.0, 0.0, 0.0, 3....[1082353.3]1True
6982024-02-08 22:14:47.075[4.0, 4.5, 5770.0, 10050.0, 1.0, 0.0, 3.0, 5.0...[1689843.3]1True
7112024-02-08 22:14:47.075[3.0, 2.5, 5403.0, 24069.0, 2.0, 1.0, 4.0, 4.0...[1946437.3]1True
7202024-02-08 22:14:47.075[5.0, 3.0, 3420.0, 18129.0, 2.0, 0.0, 0.0, 3.0...[1325961.0]1True
7222024-02-08 22:14:47.075[3.0, 3.25, 4560.0, 13363.0, 1.0, 0.0, 4.0, 3....[2005883.1]1True
7262024-02-08 22:14:47.075[5.0, 3.5, 4200.0, 5400.0, 2.0, 0.0, 0.0, 3.0,...[1052898.0]1True
7372024-02-08 22:14:47.075[4.0, 3.25, 2980.0, 7000.0, 2.0, 0.0, 3.0, 3.0...[1156206.5]1True
7402024-02-08 22:14:47.075[4.0, 4.5, 6380.0, 88714.0, 2.0, 0.0, 0.0, 3.0...[1355747.1]1True
7822024-02-08 22:14:47.075[5.0, 4.25, 4860.0, 9453.0, 1.5, 0.0, 1.0, 5.0...[1910823.8]1True
7982024-02-08 22:14:47.075[4.0, 2.5, 2790.0, 5450.0, 2.0, 0.0, 0.0, 3.0,...[1097757.4]1True
8182024-02-08 22:14:47.075[4.0, 4.0, 4620.0, 130208.0, 2.0, 0.0, 0.0, 3....[1164589.4]1True
8272024-02-08 22:14:47.075[4.0, 2.5, 3340.0, 10422.0, 2.0, 0.0, 0.0, 3.0...[1103101.4]1True
8282024-02-08 22:14:47.075[5.0, 3.5, 3760.0, 10207.0, 2.0, 0.0, 0.0, 3.0...[1489624.5]1True
9012024-02-08 22:14:47.075[4.0, 2.25, 4470.0, 60373.0, 2.0, 0.0, 0.0, 3....[1208638.0]1True
9122024-02-08 22:14:47.075[3.0, 2.25, 2960.0, 8330.0, 1.0, 0.0, 3.0, 4.0...[1178314.0]1True
9192024-02-08 22:14:47.075[4.0, 3.25, 5180.0, 19850.0, 2.0, 0.0, 3.0, 3....[1295531.3]1True
9412024-02-08 22:14:47.075[4.0, 3.75, 3770.0, 4000.0, 2.5, 0.0, 0.0, 5.0...[1182821.0]1True
9652024-02-08 22:14:47.075[6.0, 4.0, 5310.0, 12741.0, 2.0, 0.0, 2.0, 3.0...[2016006.0]1True
9732024-02-08 22:14:47.075[5.0, 2.0, 3540.0, 9970.0, 2.0, 0.0, 3.0, 3.0,...[1085835.8]1True
9972024-02-08 22:14:47.075[4.0, 3.25, 2910.0, 1880.0, 2.0, 0.0, 3.0, 5.0...[1060847.5]1True

Other Validation Examples

The following are additional examples of validations.

Multiple Validations

The following uses multiple validations to check for anomalies. We still use fraud which detects outputs that are greater than 1000000.0. The second validation too_low triggers an anomaly when the out.variable is under 250000.0.

After the validations are added, the pipeline is redeployed to “set” them.

sample_pipeline = sample_pipeline.add_validations(
    too_low=pl.col("out.variable").list.get(0) < 250000.0
)

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.1)\
    .build()
sample_pipeline.undeploy()
sample_pipeline.deploy(deployment_config=deploy_config)
Waiting for undeployment - this will take up to 45s ..................................... ok
Waiting for deployment - this will take up to 45s .............. ok
namevalidation-demo
created2024-02-08 21:52:52.879885+00:00
last_updated2024-02-08 22:16:50.265231+00:00
deployedTrue
archNone
tags
versions053580e2-f73d-4b63-8c9c-0b5e06be96c2, 2a8d204a-f359-4f02-b558-950dbab28dc6, 424c7f24-ca65-45af-825f-64d3e9f8e8c8, 190226c9-a536-4457-9851-a68ef968b6fc, e10707fd-75b8-4386-8466-e58dc13d2828, 53b87a42-8498-475a-bf30-73fdebbf85cc
stepsanomaly-housing-model
publishedFalse
results = sample_pipeline.infer_from_file('./data/test-1000.df.json')
# first 20 results
display(results.head(20))

# only results that trigger the anomaly too_high
results.loc[results['anomaly.too_high'] == True]

# only results that trigger the anomaly too_low
results.loc[results['anomaly.too_low'] == True]
timein.float_inputout.variableanomaly.countanomaly.too_highanomaly.too_low
02024-02-08 22:17:23.630[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0,...[718013.75]0FalseFalse
12024-02-08 22:17:23.630[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0,...[615094.56]0FalseFalse
22024-02-08 22:17:23.630[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, ...[448627.72]0FalseFalse
32024-02-08 22:17:23.630[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0,...[758714.2]0FalseFalse
42024-02-08 22:17:23.630[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4....[513264.7]0FalseFalse
52024-02-08 22:17:23.630[3.0, 2.0, 2140.0, 4923.0, 1.0, 0.0, 0.0, 4.0,...[668288.0]0FalseFalse
62024-02-08 22:17:23.630[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0,...[1004846.5]1TrueFalse
72024-02-08 22:17:23.630[3.0, 2.0, 1280.0, 960.0, 2.0, 0.0, 0.0, 3.0, ...[684577.2]0FalseFalse
82024-02-08 22:17:23.630[4.0, 2.5, 2820.0, 15000.0, 2.0, 0.0, 0.0, 4.0...[727898.1]0FalseFalse
92024-02-08 22:17:23.630[3.0, 2.25, 1790.0, 11393.0, 1.0, 0.0, 0.0, 3....[559631.1]0FalseFalse
102024-02-08 22:17:23.630[3.0, 1.5, 1010.0, 7683.0, 1.5, 0.0, 0.0, 5.0,...[340764.53]0FalseFalse
112024-02-08 22:17:23.630[3.0, 2.0, 1270.0, 1323.0, 3.0, 0.0, 0.0, 3.0,...[442168.06]0FalseFalse
122024-02-08 22:17:23.630[4.0, 1.75, 2070.0, 9120.0, 1.0, 0.0, 0.0, 4.0...[630865.6]0FalseFalse
132024-02-08 22:17:23.630[4.0, 1.0, 1620.0, 4080.0, 1.5, 0.0, 0.0, 3.0,...[559631.1]0FalseFalse
142024-02-08 22:17:23.630[4.0, 3.25, 3990.0, 9786.0, 2.0, 0.0, 0.0, 3.0...[909441.1]0FalseFalse
152024-02-08 22:17:23.630[4.0, 2.0, 1780.0, 19843.0, 1.0, 0.0, 0.0, 3.0...[313096.0]0FalseFalse
162024-02-08 22:17:23.630[4.0, 2.5, 2130.0, 6003.0, 2.0, 0.0, 0.0, 3.0,...[404040.8]0FalseFalse
172024-02-08 22:17:23.630[3.0, 1.75, 1660.0, 10440.0, 1.0, 0.0, 0.0, 3....[292859.5]0FalseFalse
182024-02-08 22:17:23.630[3.0, 2.5, 2110.0, 4118.0, 2.0, 0.0, 0.0, 3.0,...[338357.88]0FalseFalse
192024-02-08 22:17:23.630[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5....[682284.6]0FalseFalse
timein.float_inputout.variableanomaly.countanomaly.too_highanomaly.too_low
212024-02-08 22:17:23.630[2.0, 2.0, 1390.0, 1302.0, 2.0, 0.0, 0.0, 3.0,...[249227.8]1FalseTrue
692024-02-08 22:17:23.630[3.0, 1.75, 1050.0, 9871.0, 1.0, 0.0, 0.0, 5.0...[236238.66]1FalseTrue
832024-02-08 22:17:23.630[3.0, 1.75, 1070.0, 8100.0, 1.0, 0.0, 0.0, 4.0...[236238.66]1FalseTrue
952024-02-08 22:17:23.630[3.0, 2.5, 1340.0, 3011.0, 2.0, 0.0, 0.0, 3.0,...[244380.27]1FalseTrue
1242024-02-08 22:17:23.630[4.0, 1.5, 1200.0, 10890.0, 1.0, 0.0, 0.0, 5.0...[241330.19]1FalseTrue
.....................
9392024-02-08 22:17:23.630[3.0, 1.0, 1150.0, 4800.0, 1.5, 0.0, 0.0, 4.0,...[240834.92]1FalseTrue
9462024-02-08 22:17:23.630[2.0, 1.0, 780.0, 6250.0, 1.0, 0.0, 0.0, 3.0, ...[236815.78]1FalseTrue
9482024-02-08 22:17:23.630[1.0, 1.0, 620.0, 8261.0, 1.0, 0.0, 0.0, 3.0, ...[236815.78]1FalseTrue
9622024-02-08 22:17:23.630[3.0, 1.0, 1190.0, 7500.0, 1.0, 0.0, 0.0, 5.0,...[241330.19]1FalseTrue
9912024-02-08 22:17:23.630[2.0, 1.0, 870.0, 8487.0, 1.0, 0.0, 0.0, 4.0, ...[236238.66]1FalseTrue

62 rows × 6 columns

Compound Validations

The following combines multiple field checks into a single validation. For this, we will check for values of out.variable that are between 500000 and 1000000.

Each expression is separated by (). For example:

  • Expression 1: pl.col("out.variable").list.get(0) < 1000000.0
  • Expression 2: pl.col("out.variable").list.get(0) > 500000.0
  • Compound Expression: (pl.col("out.variable").list.get(0) < 1000000.0) & (pl.col("out.variable").list.get(0) > 500000.0)
sample_pipeline = sample_pipeline.add_validations(
    in_between=(pl.col("out.variable").list.get(0) < 1000000.0) & (pl.col("out.variable").list.get(0) > 500000.0)
)

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.1)\
    .build()
sample_pipeline.undeploy()
sample_pipeline.deploy(deployment_config=deploy_config)
Waiting for undeployment - this will take up to 45s .................................... ok
Waiting for deployment - this will take up to 45s ............. ok
namevalidation-demo
created2024-02-08 21:52:52.879885+00:00
last_updated2024-02-08 22:18:18.613710+00:00
deployedTrue
archNone
tags
versions016728d7-3948-467f-8ecc-e0594f406884, 053580e2-f73d-4b63-8c9c-0b5e06be96c2, 2a8d204a-f359-4f02-b558-950dbab28dc6, 424c7f24-ca65-45af-825f-64d3e9f8e8c8, 190226c9-a536-4457-9851-a68ef968b6fc, e10707fd-75b8-4386-8466-e58dc13d2828, 53b87a42-8498-475a-bf30-73fdebbf85cc
stepsanomaly-housing-model
publishedFalse
results = sample_pipeline.infer_from_file('./data/test-1000.df.json')

results.loc[results['anomaly.in_between'] == True] 
timein.float_inputout.variableanomaly.countanomaly.in_betweenanomaly.too_highanomaly.too_low
02024-02-08 22:18:32.886[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0,...[718013.75]1TrueFalseFalse
12024-02-08 22:18:32.886[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0,...[615094.56]1TrueFalseFalse
32024-02-08 22:18:32.886[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0,...[758714.2]1TrueFalseFalse
42024-02-08 22:18:32.886[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4....[513264.7]1TrueFalseFalse
52024-02-08 22:18:32.886[3.0, 2.0, 2140.0, 4923.0, 1.0, 0.0, 0.0, 4.0,...[668288.0]1TrueFalseFalse
........................
9892024-02-08 22:18:32.886[4.0, 2.75, 2500.0, 4950.0, 2.0, 0.0, 0.0, 3.0...[700271.56]1TrueFalseFalse
9932024-02-08 22:18:32.886[3.0, 2.5, 2140.0, 8925.0, 2.0, 0.0, 0.0, 3.0,...[669645.5]1TrueFalseFalse
9952024-02-08 22:18:32.886[3.0, 2.5, 2900.0, 23550.0, 1.0, 0.0, 0.0, 3.0...[827411.0]1TrueFalseFalse
9982024-02-08 22:18:32.886[3.0, 1.75, 2910.0, 37461.0, 1.0, 0.0, 0.0, 4....[706823.56]1TrueFalseFalse
9992024-02-08 22:18:32.886[3.0, 2.0, 2005.0, 7000.0, 1.0, 0.0, 0.0, 3.0,...[581003.0]1TrueFalseFalse

395 rows × 7 columns

Specify Dataset

Wallaroo inference requests allow datasets to be excluded or included with the dataset_exclude and dataset parameters.

ParameterTypeDescription
dataset_excludeList(String)The list of datasets to exclude. Values include:
  • metadata: Returns inference time per model, last model used, and other parameters.
  • anomaly: The anomaly results of all validations added to the pipeline.
datasetList(String)The list of datasets and fields to include.

For our example, we will exclude the anomaly dataset, but include the datasets 'time', 'in', 'out', 'anomaly.count'. Note that while we exclude anomaly, we override that with by setting the anomaly field 'anomaly.count' in our dataset parameter.

sample_pipeline.infer_from_file('./data/test-1000.df.json', 
                                dataset_exclude=['anomaly'], 
                                dataset=['time', 'in', 'out', 'anomaly.count']
                                )
timein.float_inputout.variableanomaly.count
02024-02-08 22:19:04.558[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0,...[718013.75]1
12024-02-08 22:19:04.558[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0,...[615094.56]1
22024-02-08 22:19:04.558[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, ...[448627.72]0
32024-02-08 22:19:04.558[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0,...[758714.2]1
42024-02-08 22:19:04.558[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4....[513264.7]1
...............
9952024-02-08 22:19:04.558[3.0, 2.5, 2900.0, 23550.0, 1.0, 0.0, 0.0, 3.0...[827411.0]1
9962024-02-08 22:19:04.558[4.0, 1.75, 2700.0, 7875.0, 1.5, 0.0, 0.0, 4.0...[441960.38]0
9972024-02-08 22:19:04.558[4.0, 3.25, 2910.0, 1880.0, 2.0, 0.0, 3.0, 5.0...[1060847.5]1
9982024-02-08 22:19:04.558[3.0, 1.75, 2910.0, 37461.0, 1.0, 0.0, 0.0, 4....[706823.56]1
9992024-02-08 22:19:04.558[3.0, 2.0, 2005.0, 7000.0, 1.0, 0.0, 0.0, 3.0,...[581003.0]1

1000 rows × 4 columns

Undeploy the Pipeline

With the demonstration complete, we undeploy the pipeline and return the resources back to the cluster.

sample_pipeline.undeploy()
Waiting for undeployment - this will take up to 45s .................................... ok
namevalidation-demo
created2024-02-08 21:52:52.879885+00:00
last_updated2024-02-08 22:18:18.613710+00:00
deployedFalse
archNone
tags
versions016728d7-3948-467f-8ecc-e0594f406884, 053580e2-f73d-4b63-8c9c-0b5e06be96c2, 2a8d204a-f359-4f02-b558-950dbab28dc6, 424c7f24-ca65-45af-825f-64d3e9f8e8c8, 190226c9-a536-4457-9851-a68ef968b6fc, e10707fd-75b8-4386-8466-e58dc13d2828, 53b87a42-8498-475a-bf30-73fdebbf85cc
stepsanomaly-housing-model
publishedFalse

4 - Wallaroo Edge Observability with Classification Financial Models

A demonstration on publishing an a Classification Financial model with Edge Observability through Wallaroo.

The following tutorial is available on the Wallaroo Github Repository.

Classification Financial Services Edge Deployment Demonstration

This notebook will walk through building Wallaroo pipeline with a a Classification model deployed to detect the likelihood of credit card fraud, then publishing that pipeline to an Open Container Initiative (OCI) Registry where it can be deployed in other Docker and Kubernetes environments.

This demonstration will focus on deployment to the edge. For further examples of using Wallaroo with this computer vision models, see Wallaroo 101.

This demonstration performs the following:

  • In Wallaroo Ops:
    • Setting up a workspace, pipeline, and model for deriving the price of a house based on inputs.
    • Creating an assay from a sample of inferences.
    • Display the inference result and upload the assay to the Wallaroo instance where it can be referenced later.
  • In a remote aka edge location:
    • Deploying the Wallaroo pipeline as a Wallaroo Inference Server deployed on an edge device with observability features.
  • In Wallaroo Ops:
    • Observe the Wallaroo Ops and remote Wallaroo Inference Server inference results as part of the pipeline logs.

Prerequisites

  • A deployed Wallaroo Ops instance.
  • A location with Docker or Kubernetes with helm for Wallaroo Inference server deployments.
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.
    • pandas: Pandas, mainly used for Pandas DataFrame

References

Data Scientist Pipeline Publish Steps

Load Libraries

The first step is to import the libraries used in this notebook.

import wallaroo
from wallaroo.object import EntityNotFoundError

import pyarrow as pa
import pandas as pd
import requests

# used to display dataframe information without truncating
from IPython.display import display
pd.set_option('display.max_colwidth', None)

Connect to the Wallaroo Instance through the User Interface

The next step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

wl = wallaroo.Client()

Create a New Workspace

We’ll use the SDK below to create our workspace , assign as our current workspace, then display all of the workspaces we have at the moment. We’ll also set up variables for our models and pipelines down the road, so we have one spot to change names to whatever fits your organization’s standards best.

To allow this tutorial to be run by multiple users in the same Wallaroo instance, a random 4 character prefix will be added to the workspace, pipeline, and model. Feel free to set suffix='' if this is not required.

import string
import random

# make a random 4 character suffix to verify uniqueness in tutorials
random_suffix= ''.join(random.choice(string.ascii_lowercase) for i in range(4))

suffix='jch'

workspace_name = f'edge-observability-demo{suffix}'
pipeline_name = 'edge-observability-pipeline'
xgboost_model_name = 'ccfraud-xgboost'
xgboost_model_file_name = './models/xgboost_ccfraud.onnx'
def get_workspace(name):
    workspace = None
    for ws in wl.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = wl.create_workspace(name)
    return workspace

def get_pipeline(name):
    try:
        pipeline = wl.pipelines_by_name(name)[0]
    except EntityNotFoundError:
        pipeline = wl.build_pipeline(name)
    return pipeline
workspace = get_workspace(workspace_name)

wl.set_current_workspace(workspace)
{'name': 'edge-observability-demojch', 'id': 14, 'archived': False, 'created_by': 'b3deff28-04d0-41b8-a04f-b5cf610d6ce9', 'created_at': '2023-10-31T20:12:45.456363+00:00', 'models': [], 'pipelines': []}

Upload the Model

When a model is uploaded to a Wallaroo cluster, it is optimized and packaged to make it ready to run as part of a pipeline. In many times, the Wallaroo Server can natively run a model without any Python overhead. In other cases, such as a Python script, a custom Python environment will be automatically generated. This is comparable to the process of “containerizing” a model by adding a small HTTP server and other wrapping around it.

Our pretrained model is in ONNX format, which is specified in the framework parameter.

xgboost_edge_demo_model = wl.upload_model(
    xgboost_model_name,
    xgboost_model_file_name,
    framework=wallaroo.framework.Framework.ONNX,
).configure(tensor_fields=["tensor"])

Reserve Pipeline Resources

Before deploying an inference engine we need to tell wallaroo what resources it will need.
To do this we will use the wallaroo DeploymentConfigBuilder() and fill in the options listed below to determine what the properties of our inference engine will be.

We will be testing this deployment for an edge scenario, so the resource specifications are kept small – what’s the minimum needed to meet the expected load on the planned hardware.

  • cpus - 1 => allow the engine to use 4 CPU cores when running the neural net
  • memory - 900Mi => each inference engine will have 2 GB of memory, which is plenty for processing a single image at a time.
  • arch - we will specify the X86 architecture.
deploy_config = (wallaroo
                 .DeploymentConfigBuilder()
                 .replica_count(1)
                 .cpus(1)
                 .memory("900Mi")
                 .build()
                 )

Simulated Edge Deployment

We will now deploy our pipeline into the current Kubernetes environment using the specified resource constraints. This is a “simulated edge” deploy in that we try to mimic the edge hardware as closely as possible.

pipeline = get_pipeline(pipeline_name)
display(pipeline)

# clear the pipeline if previously run
pipeline.clear()
pipeline.add_model_step(xgboost_edge_demo_model)

pipeline.deploy(deployment_config = deploy_config)
nameedge-observability-pipeline
created2023-10-31 20:12:45.895294+00:00
last_updated2023-10-31 20:12:45.895294+00:00
deployed(none)
archNone
tags
versions5d440e01-f2db-440c-a4f9-cd28bb491b6c
steps
publishedFalse
Waiting for deployment - this will take up to 45s ....... ok
nameedge-observability-pipeline
created2023-10-31 20:12:45.895294+00:00
last_updated2023-10-31 20:12:46.009712+00:00
deployedTrue
archNone
tags
versions2b335efd-5593-422c-9ee9-52542b59601a, 5d440e01-f2db-440c-a4f9-cd28bb491b6c
stepsccfraud-xgboost
publishedFalse

Run Single Image Inference

A single image, encoded using the Apache Arrow format, is sent to the deployed pipeline. Arrow is used here because, as a binary protocol, there is far lower network and compute overhead than using JSON. The Wallaroo Server engine accepts both JSON, pandas DataFrame, and Apache Arrow formats.

The sample DataFrames and arrow tables are in the ./data directory. We’ll use the Apache Arrow table cc_data_10k.arrow.

Once complete, we’ll display how long the inference request took.

import datetime
import time

deploy_url = pipeline._deployment._url()

headers = wl.auth.auth_header()

headers['Content-Type']='application/vnd.apache.arrow.file'
# headers['Content-Type']='application/json; format=pandas-records'
headers['Accept']='application/json; format=pandas-records'

dataFile = './data/cc_data_1k.arrow'
local_inference_start = datetime.datetime.now()
!curl -X POST {deploy_url} \
     -H "Authorization:{headers['Authorization']}" \
     -H "Content-Type:{headers['Content-Type']}" \
     -H "Accept:{headers['Accept']}" \
     --data-binary @{dataFile} > curl_response_xgboost.df.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  799k  100  685k  100  114k  39.3M  6733k --:--:-- --:--:-- --:--:-- 45.9M

We will import the inference output, and isolate the metadata partition to store where the inference results are stored in the pipeline logs.

# display the first 20 results

df_results = pd.read_json('./curl_response_xgboost.df.json', orient="records")
# get just the partition
df_results['partition'] = df_results['metadata'].map(lambda x: x['partition'])
# display(df_results.head(20))
display(df_results.head(20).loc[:, ['time', 'out', 'partition']])
timeoutpartition
01698783174953{'variable': [1.0094898]}engine-5d9b58dbd9-v5rvw
11698783174953{'variable': [1.0094898]}engine-5d9b58dbd9-v5rvw
21698783174953{'variable': [1.0094898]}engine-5d9b58dbd9-v5rvw
31698783174953{'variable': [1.0094898]}engine-5d9b58dbd9-v5rvw
41698783174953{'variable': [-1.9073485999999998e-06]}engine-5d9b58dbd9-v5rvw
51698783174953{'variable': [-4.4882298e-05]}engine-5d9b58dbd9-v5rvw
61698783174953{'variable': [-9.36985e-05]}engine-5d9b58dbd9-v5rvw
71698783174953{'variable': [-8.3208084e-05]}engine-5d9b58dbd9-v5rvw
81698783174953{'variable': [-8.332728999999999e-05]}engine-5d9b58dbd9-v5rvw
91698783174953{'variable': [0.0004896521599999999]}engine-5d9b58dbd9-v5rvw
101698783174953{'variable': [0.0006609559]}engine-5d9b58dbd9-v5rvw
111698783174953{'variable': [7.57277e-05]}engine-5d9b58dbd9-v5rvw
121698783174953{'variable': [-0.000100553036]}engine-5d9b58dbd9-v5rvw
131698783174953{'variable': [-0.0005198717]}engine-5d9b58dbd9-v5rvw
141698783174953{'variable': [-3.695488e-06]}engine-5d9b58dbd9-v5rvw
151698783174953{'variable': [-0.00010883808]}engine-5d9b58dbd9-v5rvw
161698783174953{'variable': [-0.00017666817]}engine-5d9b58dbd9-v5rvw
171698783174953{'variable': [-2.8312206e-05]}engine-5d9b58dbd9-v5rvw
181698783174953{'variable': [2.1755695e-05]}engine-5d9b58dbd9-v5rvw
191698783174953{'variable': [-8.493661999999999e-05]}engine-5d9b58dbd9-v5rvw

Undeploy Pipeline

With our testing complete, we will undeploy the pipeline and return the resources back to the cluster.

pipeline.undeploy()
Waiting for undeployment - this will take up to 45s .................................... ok
nameedge-observability-pipeline
created2023-10-31 20:12:45.895294+00:00
last_updated2023-10-31 20:12:46.009712+00:00
deployedFalse
archNone
tags
versions2b335efd-5593-422c-9ee9-52542b59601a, 5d440e01-f2db-440c-a4f9-cd28bb491b6c
stepsccfraud-xgboost
publishedFalse

Publish the Pipeline for Edge Deployment

It worked! For a demo, we’ll take working once as “tested”. So now that we’ve tested our pipeline, we are ready to publish it for edge deployment.

Publishing it means assembling all of the configuration files and model assets and pushing them to an Open Container Initiative (OCI) repository set in the Wallaroo instance as the Edge Registry service. DevOps engineers then retrieve that image and deploy it through Docker, Kubernetes, or similar deployments.

See Edge Deployment Registry Guide for details on adding an OCI Registry Service to Wallaroo as the Edge Deployment Registry.

This is done through the SDK command wallaroo.pipeline.publish(deployment_config) which has the following parameters and returns.

Publish a Pipeline Parameters

The publish method takes the following parameters. The containerized pipeline will be pushed to the Edge registry service with the model, pipeline configurations, and other artifacts needed to deploy the pipeline.

ParameterTypeDescription
deployment_configwallaroo.deployment_config.DeploymentConfig (Optional)Sets the pipeline deployment configuration. For example: For more information on pipeline deployment configuration, see the Wallaroo SDK Essentials Guide: Pipeline Deployment Configuration.

Publish a Pipeline Returns

FieldTypeDescription
idintegerNumerical Wallaroo id of the published pipeline.
pipeline version idintegerNumerical Wallaroo id of the pipeline version published.
statusstringThe status of the pipeline publication. Values include:
  • PendingPublish: The pipeline publication is about to be uploaded or is in the process of being uploaded.
  • Published: The pipeline is published and ready for use.
Engine URLstringThe URL of the published pipeline engine in the edge registry.
Pipeline URLstringThe URL of the published pipeline in the edge registry.
Helm Chart URLstringThe URL of the helm chart for the published pipeline in the edge registry.
Helm Chart ReferencestringThe help chart reference.
Helm Chart VersionstringThe version of the Helm Chart of the published pipeline. This is also used as the Docker tag.
Engine Configwallaroo.deployment_config.DeploymentConfigThe pipeline configuration included with the published pipeline.
Created AtDateTimeWhen the published pipeline was created.
Updated AtDateTimeWhen the published pipeline was updated.

Publish Example

We will now publish the pipeline to our Edge Deployment Registry with the pipeline.publish(deployment_config) command. deployment_config is an optional field that specifies the pipeline deployment. This can be overridden by the DevOps engineer during deployment.

pub=pipeline.publish(deploy_config)
display(pub)
Waiting for pipeline publish... It may take up to 600 sec.
Pipeline is Publishing....Published.
ID2
Pipeline Version1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
StatusPublished
Engine URLus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4092
Pipeline URLus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/pipelines/edge-observability-pipeline:1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
Helm Chart URLoci://us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts/edge-observability-pipeline
Helm Chart Referenceus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts@sha256:8bf628174b5ff87d913590d34a4c3d5eaa846b8b2a52bcf6a76295cd588cb6e8
Helm Chart Version0.0.1-1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
Engine Config{'engine': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 1.0, 'memory': '512Mi'}}}, 'engineAux': {'images': {}}, 'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 1.0, 'memory': '512Mi'}}}}
User Images[]
Created Byjohn.hummel@wallaroo.ai
Created At2023-10-31 20:13:32.751657+00:00
Updated At2023-10-31 20:13:32.751657+00:00
Docker Run Variables{}

List Published Pipelines

The method wallaroo.client.list_pipelines() shows a list of all pipelines in the Wallaroo instance, and includes the published field that indicates whether the pipeline was published to the registry (True), or has not yet been published (False).

wl.list_pipelines()
namecreatedlast_updateddeployedarchtagsversionsstepspublished
edge-observability-pipeline2023-31-Oct 20:12:452023-31-Oct 20:13:32FalseNone1a5a21e2-f0e8-4148-9ee2-23c877c0ac90, 2b335efd-5593-422c-9ee9-52542b59601a, 5d440e01-f2db-440c-a4f9-cd28bb491b6cccfraud-xgboostTrue
housepricesagapipeline2023-31-Oct 20:04:582023-31-Oct 20:13:02TrueNone0056edf3-730f-452d-a6ed-2dfa47ff5567, 8bc714ea-8257-4512-a102-402baf3143b3, 76006480-b145-4d6a-9e95-9b2e7a4f8d8ehousepricesagacontrolTrue

List Publishes from a Pipeline

All publishes created from a pipeline are displayed with the wallaroo.pipeline.publishes method. The pipeline_version_id is used to know what version of the pipeline was used in that specific publish. This allows for pipelines to be updated over time, and newer versions to be sent and tracked to the Edge Deployment Registry service.

List Publishes Parameters

N/A

List Publishes Returns

A List of the following fields:

FieldTypeDescription
idintegerNumerical Wallaroo id of the published pipeline.
pipeline_version_idintegerNumerical Wallaroo id of the pipeline version published.
engine_urlstringThe URL of the published pipeline engine in the edge registry.
pipeline_urlstringThe URL of the published pipeline in the edge registry.
created_bystringThe email address of the user that published the pipeline.
Created AtDateTimeWhen the published pipeline was created.
Updated AtDateTimeWhen the published pipeline was updated.
pipeline.publishes()
idpipeline_version_nameengine_urlpipeline_urlcreated_bycreated_atupdated_at
21a5a21e2-f0e8-4148-9ee2-23c877c0ac90us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4092us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/pipelines/edge-observability-pipeline:1a5a21e2-f0e8-4148-9ee2-23c877c0ac90john.hummel@wallaroo.ai2023-31-Oct 20:13:322023-31-Oct 20:13:32

DevOps - Pipeline Edge Deployment

Once a pipeline is deployed to the Edge Registry service, it can be deployed in environments such as Docker, Kubernetes, or similar container running services by a DevOps engineer as a Wallaroo Server.

The following guides will demonstrate publishing a Wallaroo Pipeline as a Wallaroo Server.

Add Edge Location

Wallaroo Servers can optionally connect to the Wallaroo Ops instance and transmit their inference results. These are added to the pipeline logs for the published pipeline the Wallaroo Server is associated with.

Wallaroo Servers are added with the wallaroo.pipeline_publish.add_edge(name: string) method. The name is the unique primary key for each edge added to the pipeline publish and must be unique.

This returns a Publish Edge with the following fields:

FieldTypeDescription
idIntegerThe integer ID of the pipeline publish.
created_atDateTimeThe DateTime of the pipeline publish.
docker_run_variablesStringThe Docker variables in UUID format that include the following: The BUNDLE_VERSION, EDGE_NAME, JOIN_TOKEN_, OPSCENTER_HOST, PIPELINE_URL, and WORKSPACE_ID.
engine_configStringThe Wallaroo wallaroo.deployment_config.DeploymentConfig for the pipeline.
pipeline_version_idIntegerThe integer identifier of the pipeline version published.
statusStringThe status of the publish. Published is a successful publish.
updated_atDateTimeThe DateTime when the pipeline publish was updated.
user_imagesList[String]User images used in the pipeline publish.
created_byStringThe UUID of the Wallaroo user that created the pipeline publish.
engine_urlStringThe URL for the published pipeline’s Wallaroo engine in the OCI registry.
errorStringAny errors logged.
helmStringThe helm chart, helm reference and helm version.
pipeline_urlStringThe URL for the published pipeline’s container in the OCI registry.
pipeline_version_nameStringThe UUID identifier of the pipeline version published.
additional_propertiesStringAny other identities.

Two edge publishes will be created so we can demonstrate removing an edge shortly.

edge_01_name = f'edge-ccfraud-observability{random_suffix}'
edge01 = pub.add_edge(edge_01_name)
display(edge01)

edge_02_name = f'edge-ccfraud-observability-02{random_suffix}'
edge02 = pub.add_edge(edge_02_name)
display(edge02)
ID2
Pipeline Version1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
StatusPublished
Engine URLus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4092
Pipeline URLus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/pipelines/edge-observability-pipeline:1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
Helm Chart URLoci://us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts/edge-observability-pipeline
Helm Chart Referenceus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts@sha256:8bf628174b5ff87d913590d34a4c3d5eaa846b8b2a52bcf6a76295cd588cb6e8
Helm Chart Version0.0.1-1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
Engine Config{'engine': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 1.0, 'memory': '512Mi'}}}, 'engineAux': {'images': {}}, 'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 1.0, 'memory': '512Mi'}}}}
User Images[]
Created Byjohn.hummel@wallaroo.ai
Created At2023-10-31 20:13:32.751657+00:00
Updated At2023-10-31 20:13:32.751657+00:00
Docker Run Variables{'EDGE_BUNDLE': 'abcde'}
ID2
Pipeline Version1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
StatusPublished
Engine URLus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4092
Pipeline URLus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/pipelines/edge-observability-pipeline:1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
Helm Chart URLoci://us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts/edge-observability-pipeline
Helm Chart Referenceus-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts@sha256:8bf628174b5ff87d913590d34a4c3d5eaa846b8b2a52bcf6a76295cd588cb6e8
Helm Chart Version0.0.1-1a5a21e2-f0e8-4148-9ee2-23c877c0ac90
Engine Config{'engine': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 1.0, 'memory': '512Mi'}}}, 'engineAux': {'images': {}}, 'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 1.0, 'memory': '512Mi'}}}}
User Images[]
Created Byjohn.hummel@wallaroo.ai
Created At2023-10-31 20:13:32.751657+00:00
Updated At2023-10-31 20:13:32.751657+00:00
Docker Run Variables{'EDGE_BUNDLE': 'abcde'}
pipeline.list_edges()
IDNameTagsPipeline VersionSPIFFE ID
898bb58c-77c2-4164-b6cc-f004dc39e125edge-ccfraud-observabilityymgy[]6wallaroo.ai/ns/deployments/edge/898bb58c-77c2-4164-b6cc-f004dc39e125
1f35731a-f4f6-4cd0-a23a-c4a326b73277edge-ccfraud-observability-02ymgy[]6wallaroo.ai/ns/deployments/edge/1f35731a-f4f6-4cd0-a23a-c4a326b73277

Remove Edge Location

Wallaroo Servers are removed with the wallaroo.pipeline_publish.remove_edge(name: string) method.

This returns a Publish Edge with the following fields:

FieldTypeDescription
idIntegerThe integer ID of the pipeline publish.
created_atDateTimeThe DateTime of the pipeline publish.
docker_run_variablesStringThe Docker variables in UUID format that include the following: The BUNDLE_VERSION, EDGE_NAME, JOIN_TOKEN_, OPSCENTER_HOST, PIPELINE_URL, and WORKSPACE_ID.
engine_configStringThe Wallaroo wallaroo.deployment_config.DeploymentConfig for the pipeline.
pipeline_version_idIntegerThe integer identifier of the pipeline version published.
statusStringThe status of the publish. Published is a successful publish.
updated_atDateTimeThe DateTime when the pipeline publish was updated.
user_imagesList[String]User images used in the pipeline publish.
created_byStringThe UUID of the Wallaroo user that created the pipeline publish.
engine_urlStringThe URL for the published pipeline’s Wallaroo engine in the OCI registry.
errorStringAny errors logged.
helmStringThe helm chart, helm reference and helm version.
pipeline_urlStringThe URL for the published pipeline’s container in the OCI registry.
pipeline_version_nameStringThe UUID identifier of the pipeline version published.
additional_propertiesStringAny other identities.

Two edge publishes will be created so we can demonstrate removing an edge shortly.

sample = pub.remove_edge(edge_02_name)
display(sample)
None
pipeline.list_edges()
IDNameTagsPipeline VersionSPIFFE ID
898bb58c-77c2-4164-b6cc-f004dc39e125edge-ccfraud-observabilityymgy[]6wallaroo.ai/ns/deployments/edge/898bb58c-77c2-4164-b6cc-f004dc39e125

Docker Deployment

First, the DevOps engineer must authenticate to the same OCI Registry service used for the Wallaroo Edge Deployment registry.

For more details, check with the documentation on your artifact service. The following are provided for the three major cloud services:

For the deployment, the engine URL is specified with the following environmental variables:

  • DEBUG (true|false): Whether to include debug output.
  • OCI_REGISTRY: The URL of the registry service.
  • CONFIG_CPUS: The number of CPUs to use.
  • OCI_USERNAME: The edge registry username.
  • OCI_PASSWORD: The edge registry password or token.
  • PIPELINE_URL: The published pipeline URL.

Docker Deployment Example

Using our sample environment, here’s sample deployment using Docker with a computer vision ML model, the same used in the Wallaroo Use Case Tutorials Computer Vision: Retail tutorials.

docker run -p 8080:8080 \
    -e DEBUG=true \
    -e OCI_REGISTRY={your registry server} \
    -e EDGE_BUNDLE={Your edge bundle['EDGE_BUNDLE']}
    -e CONFIG_CPUS=1 \
    -e OCI_USERNAME=oauth2accesstoken \
    -e OCI_PASSWORD={registry token here} \
    -e PIPELINE_URL={your registry server}{Your Wallaroo Server pipeline} \
    {your registry server}/{Your Wallaroo Server engine}

Docker Compose Deployment

For users who prefer to use docker compose, the following sample compose.yaml file is used to launch the Wallaroo Edge pipeline. This is the same used in the Wallaroo Use Case Tutorials Computer Vision: Retail tutorials.

services:
  engine:
    image: {Your Engine URL}
    ports:
      - 8080:8080
    environment:
      EDGE_BUNDLE: {Your Edge Bundle['EDGE_BUNDLE']}
      PIPELINE_URL: {Your Pipeline URL}
      OCI_REGISTRY: {Your Edge Registry URL}
      OCI_USERNAME:  {Your Registry Username}
      OCI_PASSWORD: {Your Token or Password}
      CONFIG_CPUS: 1

For example:

services:
  engine:
    image: sample-registry.com/engine:v2023.3.0-main-3707
    ports:
      - 8080:8080
    environment:
      PIPELINE_URL: sample-registry.com/pipelines/edge-cv-retail:bf70eaf7-8c11-4b46-b751-916a43b1a555
      OCI_REGISTRY: sample-registry.com
      OCI_USERNAME:  _json_key_base64
      OCI_PASSWORD: abc123
      CONFIG_CPUS: 1

Docker Compose Deployment Example

The deployment and undeployment is then just a simple docker compose up and docker compose down. The following shows an example of deploying the Wallaroo edge pipeline using docker compose.

docker compose up
[+] Running 1/1
 ✔ Container cv_data-engine-1  Recreated                                                                                                                                                                 0.5s
Attaching to cv_data-engine-1
cv_data-engine-1  | Wallaroo Engine - Standalone mode
cv_data-engine-1  | Login Succeeded
cv_data-engine-1  | Fetching manifest and config for pipeline: sample-registry.com/pipelines/edge-cv-retail:bf70eaf7-8c11-4b46-b751-916a43b1a555
cv_data-engine-1  | Fetching model layers
cv_data-engine-1  | digest: sha256:c6c8869645962e7711132a7e17aced2ac0f60dcdc2c7faa79b2de73847a87984
cv_data-engine-1  |   filename: c6c8869645962e7711132a7e17aced2ac0f60dcdc2c7faa79b2de73847a87984
cv_data-engine-1  |   name: resnet-50
cv_data-engine-1  |   type: model
cv_data-engine-1  |   runtime: onnx
cv_data-engine-1  |   version: 693e19b5-0dc7-4afb-9922-e3f7feefe66d
cv_data-engine-1  |
cv_data-engine-1  | Fetched
cv_data-engine-1  | Starting engine
cv_data-engine-1  | Looking for preexisting `yaml` files in //modelconfigs
cv_data-engine-1  | Looking for preexisting `yaml` files in //pipelines

Helm Deployment

Published pipelines can be deployed through the use of helm charts.

Helm deployments take up to two steps - the first step is in retrieving the required values.yaml and making updates to override.

  1. Pull the helm charts from the published pipeline. The two fields are the Helm Chart URL and the Helm Chart version to specify the OCI . This typically takes the format of:
helm pull oci://{published.helm_chart_url} --version {published.helm_chart_version}
  1. Extract the tgz file and copy the values.yaml and copy the values used to edit engine allocations, etc. The following are required for the deployment to run:
ociRegistry:
  registry: {your registry service}
  username:  {registry username here}
  password: {registry token here}

Store this into another file, suc as local-values.yaml.

  1. Create the namespace to deploy the pipeline to. For example, the namespace wallaroo-edge-pipeline would be:
kubectl create -n wallaroo-edge-pipeline
  1. Deploy the helm installation with helm install through one of the following options:

    1. Specify the tgz file that was downloaded and the local values file. For example:

      helm install --namespace {namespace} --values {local values file} {helm install name} {tgz path}
      
    2. Specify the expended directory from the downloaded tgz file.

      helm install --namespace {namespace} --values {local values file} {helm install name} {helm directory path}
      
    3. Specify the Helm Pipeline Helm Chart and the Pipeline Helm Version.

      helm install --namespace {namespace} --values {local values file} {helm install name} oci://{published.helm_chart_url} --version {published.helm_chart_version}
      
  2. Once deployed, the DevOps engineer will have to forward the appropriate ports to the svc/engine-svc service in the specific pipeline. For example, using kubectl port-forward to the namespace ccfraud that would be:

    kubectl port-forward svc/engine-svc -n ccfraud01 8080 --address 0.0.0.0`
    

The following code segment generates a docker run template based on the previously published pipeline. Replace the $REGISTRYURL, $REGISTRYUSERNAME and $REGISTRYPASSWORD with your OCI registry values.

docker_command = f'''
docker run -p 8080:8080 \\
    -e DEBUG=true \\
    -e OCI_REGISTRY=$REGISTRYURL \\
    -e EDGE_BUNDLE={edge01.docker_run_variables['EDGE_BUNDLE']} \\
    -e CONFIG_CPUS=1 \\
    -e OCI_USERNAME=$REGISTRYUSERNAME \\
    -e OCI_PASSWORD=$REGISTRYPASSWORD \\
    -e PIPELINE_URL={edge01.pipeline_url} \\
    {edge01.engine_url}
'''

print(docker_command)

Edge Deployed Pipeline API Endpoints

Once deployed, we can check the pipelines and models available. We’ll use a curl command, but any HTTP based request will work the same way.

The endpoint /pipelines returns:

  • id (String): The name of the pipeline.
  • status (String): The status as either Running, or Error if there are any issues.

For this example, the deployment is made on a machine called localhost. Replace this URL with the URL of you edge deployment.

!curl testboy.local:8080/pipelines

The endpoint /models returns a List of models with the following fields:

  • name (String): The model name.
  • sha (String): The sha hash value of the ML model.
  • status (String): The status of either Running or Error if there are any issues.
  • version (String): The model version. This matches the version designation used by Wallaroo to track model versions in UUID format.
!curl testboy.local:8080/models

Edge Inference Endpoint

The inference endpoint takes the following pattern:

  • /pipelines/{pipeline-name}: The pipeline-name is the same as returned from the /pipelines endpoint as id.

Wallaroo inference endpoint URLs accept the following data inputs through the Content-Type header:

  • Content-Type: application/vnd.apache.arrow.file: For Apache Arrow tables.
  • Content-Type: application/json; format=pandas-records: For pandas DataFrame in record format.

Once deployed, we can perform an inference through the deployment URL.

The endpoint returns Content-Type: application/json; format=pandas-records by default with the following fields:

  • check_failures (List[Integer]): Whether any validation checks were triggered. For more information, see Wallaroo SDK Essentials Guide: Pipeline Management: Anomaly Testing.
  • elapsed (List[Integer]): A list of time in nanoseconds for:
    • [0] The time to serialize the input.
    • [1…n] How long each step took.
  • model_name (String): The name of the model used.
  • model_version (String): The version of the model in UUID format.
  • original_data: The original input data. Returns null if the input may be too long for a proper return.
  • outputs (List): The outputs of the inference result separated by data type, where each data type includes:
    • data: The returned values.
    • dim (List[Integer]): The dimension shape returned.
    • v (Integer): The vector shape of the data.
  • pipeline_name (String): The name of the pipeline.
  • shadow_data: Any shadow deployed data inferences in the same format as outputs.
  • time (Integer): The time since UNIX epoch.
!curl -X POST testboy.local:8080/pipelines/edge-observability-pipeline \
    -H "Content-Type: application/vnd.apache.arrow.file" \
    --data-binary @./data/cc_data_1k.arrow > curl_response_edge.df.json
# display the first 20 results

df_results = pd.read_json('./curl_response_edge.df.json', orient="records")
# display(df_results.head(20))
display(df_results.head(20).loc[:, ['time', 'out', 'metadata']])
pipeline.export_logs(
    limit=30000,
    directory='partition-edge-observability',
    file_prefix='edge-logs',
    dataset=['time', 'out', 'metadata']
)
# display the head 20 results

df_logs = pd.read_json('./partition-edge-observability/edge-logs-1.json', orient="records", lines=True)
# get just the partition
# df_results['partition'] = df_results['metadata'].map(lambda x: x['partition'])
# display(df_results.head(20))
display(df_logs.head(20).loc[:, ['time', 'out.variable', 'metadata.partition']])
display(pd.unique(df_logs['metadata.partition']))

5 - Wallaroo Assays Model Insights Tutorial

How to use Wallaroo Assays to monitor the environment and know when to retrain the model based on changes to data.

This tutorial and the assets can be downloaded as part of the Wallaroo Tutorials repository.

Model Drift Observability with Assays

The Model Insights feature lets you monitor how the environment that your model operates within may be changing in ways that affect it’s predictions so that you can intervene (retrain) in an efficient and timely manner. Changes in the inputs, data drift, can occur due to errors in the data processing pipeline or due to changes in the environment such as user preference or behavior.

This notebook focuses on interactive exploration over historical data. After you are comfortable with how your data has behaved historically, you can schedule this same analysis (called an assay) to automatically run periodically, looking for indications of data drift or concept drift.

In this notebook, we will be running a drift assay on an ONNX model pre-trained to predict house prices.

Goal

Model insights monitors the output of the spam classifier model over a designated time window and compares it to an expected baseline distribution. We measure the difference between the window distribution and the baseline distribution; large differences indicate that the behavior of the model (or its inputs) has changed from what we expect. This possibly indicates a change that should be accounted for, possibly by retraining the models.

Resources

This tutorial provides the following:

  • Models:
    • models/rf_model.onnx: The champion model that has been used in this environment for some time.
    • Various inputs:
      • smallinputs.df.json: A set of house inputs that tends to generate low house price values.
      • biginputs.df.json: A set of house inputs that tends to generate high house price values.

Prerequisites

  • A deployed Wallaroo instance
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.
    • pandas: Pandas, mainly used for Pandas DataFrame

Steps

  • Deploying a sample ML model used to determine house prices based on a set of input parameters.
  • Build an assay baseline from a set of baseline start and end dates, and an assay baseline from a numpy array.
  • Preview the assay and show different assay configurations.
  • Upload the assay.
  • View assay results.
  • Pause and resume the assay.

Import Libraries

The first step will be to import our libraries, and set variables used through this tutorial.

import wallaroo
from wallaroo.object import EntityNotFoundError
from wallaroo.framework import Framework

from IPython.display import display

# used to display DataFrame information without truncating
from IPython.display import display
import pandas as pd
pd.set_option('display.max_colwidth', None)

import datetime
import time

# used for unique connection names

import string
import random

suffix= ''.join(random.choice(string.ascii_lowercase) for i in range(4))
suffix=''

# used to make a unique workspace
suffix=''

workspace_name = f'assay-demonstration-tutorial{suffix}'
main_pipeline_name = f'assay-demonstration-tutorial'
model_name_control = f'house-price-estimator'
model_file_name_control = './models/rf_model.onnx'

# Set the name of the assay
assay_name=f"house price test{suffix}"

# ignoring warnings for demonstration
import warnings
warnings.filterwarnings('ignore')

# used to display DataFrame information without truncating
from IPython.display import display
import pandas as pd
pd.set_option('display.max_colwidth', None)
def get_workspace(name, client):
    workspace = None
    for ws in client.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = client.create_workspace(name)
    return workspace

Connect to the Wallaroo Instance

The first step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

# Login through local Wallaroo instance

wl = wallaroo.Client()

wl = wallaroo.Client()

wallarooPrefix = "doc-test."
wallarooSuffix = "wallarooexample.ai"

wl = wallaroo.Client(api_endpoint=f"https://{wallarooPrefix}api.{wallarooSuffix}", 
                    auth_endpoint=f"https://{wallarooPrefix}keycloak.{wallarooSuffix}", 
                    auth_type="sso")

Create Workspace

We will create a workspace to manage our pipeline and models. The following variables will set the name of our sample workspace then set it as the current workspace.

Workspace, pipeline, and model names should be unique to each user, so we’ll add in a randomly generated suffix so multiple people can run this tutorial in a Wallaroo instance without effecting each other.

workspace = get_workspace(workspace_name, wl)

wl.set_current_workspace(workspace)
{'name': 'assay-demonstration-tutorial', 'id': 5, 'archived': False, 'created_by': '755d34dd-e562-454e-82ed-593d6f3244b7', 'created_at': '2024-02-15T16:18:22.083904+00:00', 'models': [], 'pipelines': []}

Upload The Champion Model

For our example, we will upload the champion model that has been trained to derive house prices from a variety of inputs. The model file is rf_model.onnx, and is uploaded with the name house-price-estimator.

housing_model_control = (wl.upload_model(model_name_control, 
                                        model_file_name_control, 
                                        framework=Framework.ONNX)
                                        .configure(tensor_fields=["tensor"])
                        )

Build the Pipeline

This pipeline is made to be an example of an existing situation where a model is deployed and being used for inferences in a production environment. We’ll call it assay-demonstration-tutorial, set housing_model_control as a pipeline step, then run a few sample inferences.

This pipeline will be a simple one - just a single pipeline step.

mainpipeline = wl.build_pipeline(main_pipeline_name)
# clear the steps if used before
mainpipeline.clear()

mainpipeline.add_model_step(housing_model_control)

#minimum deployment config
deploy_config = wallaroo.DeploymentConfigBuilder().replica_count(1).cpus(0.5).memory("1Gi").build()

mainpipeline.deploy(deployment_config = deploy_config)
nameassay-demonstration-tutorial
created2024-02-15 16:18:25.122619+00:00
last_updated2024-02-15 16:18:26.007576+00:00
deployedTrue
archNone
tags
versions53ea84b7-21d0-4aad-9e20-5d8f368abc63, 8de360dd-a086-4b7f-a5ec-84bae69e13ac
stepshouse-price-estimator
publishedFalse

Testing

We’ll use two inferences as a quick sample test - one that has a house that should be determined around $700k, the other with a house determined to be around $1.5 million.

normal_input = pd.DataFrame.from_records({"tensor": [[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0]]})
result = mainpipeline.infer(normal_input)
display(result)
timein.tensorout.variablecheck_failures
02024-02-15 16:18:42.466[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
large_house_input = pd.DataFrame.from_records({'tensor': [[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0]]})
large_house_result = mainpipeline.infer(large_house_input)
display(large_house_result)
timein.tensorout.variablecheck_failures
02024-02-15 16:18:42.866[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.4]0

Generate Sample Data

Before creating the assays, we must generate data for the assays to build from.

For this example, we will:

  • Perform sample inferences based on lower priced houses and use that as our baseline.
  • Generate inferences from specific set of high priced houses create inference outputs that will be outside the baseline. This is used in later steps to demonstrate baseline comparison against assay analyses.

Inference Results History Generation

To start the demonstration, we’ll create a baseline of values from houses with small estimated prices and set that as our baseline.

We will save the beginning and end periods of our baseline data to the variables assay_baseline_start and assay_baseline_end.

small_houses_inputs = pd.read_json('./data/smallinputs.df.json')
baseline_size = 500

# Where the baseline data will start
assay_baseline_start = datetime.datetime.now()

# These inputs will be random samples of small priced houses.  Around 30,000 is a good number
small_houses = small_houses_inputs.sample(baseline_size, replace=True).reset_index(drop=True)

# Wait 60 seconds to set this data apart from the rest
time.sleep(60)
small_results = mainpipeline.infer(small_houses)

# Set the baseline end

assay_baseline_end = datetime.datetime.now()

Generate Numpy Baseline Values

This process generates a numpy array of the inference results used as baseline data in later steps.

# get the numpy values

# set the results to a non-array value
small_results_baseline_df = small_results.copy()
small_results_baseline_df['variable']=small_results['out.variable'].map(lambda x: x[0])
small_results_baseline_df

# set the numpy array
small_results_baseline = small_results_baseline_df['variable'].to_numpy()

Assay Test Data

The following will generate inference data for us to test against the assay baseline. For this, we will add in house data that generate higher house prices than the baseline data we used earlier.

This process should take 6 minutes to generate the historical data we’ll later use in our assays. We store the DateTime assay_window_start to determine where to start out assay analyses.

# Get a spread of house values

# # Set the start for our assay window period.
assay_window_start = datetime.datetime.now()

time.sleep(65)
inference_size = 1000

# And a spread of large house values

small_houses_inputs = pd.read_json('./data/smallinputs.df.json', orient="records")
small_houses = small_houses_inputs.sample(inference_size, replace=True).reset_index(drop=True)

mainpipeline.infer(small_houses)

time.sleep(65)
# Get a spread of large house values

time.sleep(65)
inference_size = 1000

# And a spread of large house values

big_houses_inputs = pd.read_json('./data/biginputs.df.json', orient="records")
big_houses = big_houses_inputs.sample(inference_size, replace=True).reset_index(drop=True)

mainpipeline.infer(big_houses)

time.sleep(65)

Model Insights via the Wallaroo Dashboard SDK

Assays generated through the Wallaroo SDK can be previewed, configured, and uploaded to the Wallaroo Ops instance. The following is a condensed version of this process. For full details see the Wallaroo SDK Essentials Guide: Assays Management guide.

Model drift detection with assays using the Wallaroo SDK follows this general process.

  • Define the Baseline: From either historical inference data for a specific model in a pipeline, or from a pre-determine array of data, a baseline is formed.
  • Assay Preview: Once the baseline is formed, we preview the assay and configure the different options until we have the the best method of detecting environment or model drift.
  • Create Assay: With the previews and configuration complete, we upload the assay. The assay will perform an analysis on a regular scheduled based on the configuration.
  • Get Assay Results: Retrieve the analyses and use them to detect model drift and possible sources.
  • Pause/Resume Assay: Pause or restart an assay as needed.

Define the Baseline

Assay baselines are defined with the wallaroo.client.build_assay method. Through this process we define the baseline from either a range of dates or pre-generated values.

wallaroo.client.build_assay take the following parameters:

ParameterTypeDescription
assay_nameString (Required) - requiredThe name of the assay. Assay names must be unique across the Wallaroo instance.
pipelinewallaroo.pipeline.Pipeline (Required)The pipeline the assay is monitoring.
model_nameString (Required)The name of the model to monitor.
iopathString (Required)The input/output data for the model being tracked in the format input/output field index. Only one value is tracked for any assay. For example, to track the output of the model’s field house_value at index 0, the iopath is 'output house_value 0.
baseline_startdatetime.datetime (Optional)The start time for the inferences to use as the baseline. Must be included with baseline_end. Cannot be included with baseline_data.
baseline_enddatetime.datetime (Optional)The end time of the baseline window. the baseline. Windows start immediately after the baseline window and are run at regular intervals continuously until the assay is deactivated or deleted. Must be included with baseline_start. Cannot be included with baseline_data..
baseline_datanumpy.array (Optional)The baseline data in numpy array format. Cannot be included with either baseline_start or baseline_data.

Baselines are created in one of two ways:

  • Date Range: The baseline_start and baseline_end retrieves the inference requests and results for the pipeline from the start and end period. This data is summarized and used to create the baseline.
  • Numpy Values: The baseline_data sets the baseline from a provided numpy array.

Define the Baseline Example

This example shows two methods of defining the baseline for an assay:

  • "assays from date baseline": This assay uses historical inference requests to define the baseline. This assay is saved to the variable assay_builder_from_dates.
  • "assays from numpy": This assay uses a pre-generated numpy array to define the baseline. This assay is saved to the variable assay_builder_from_numpy.

In both cases, the following parameters are used:

ParameterValue
assay_name"assays from date baseline" and "assays from numpy"
pipelinemainpipeline: A pipeline with a ML model that predicts house prices. The output field for this model is variable.
model_name"houseprice-predictor" - the model name set during model upload.
iopathThese assays monitor the model’s output field variable at index 0. From this, the iopath setting is "output variable 0".

The difference between the two assays’ parameters determines how the baseline is generated.

  • "assays from date baseline": Uses the baseline_start and baseline_end to set the time period of inference requests and results to gather data from.
  • "assays from numpy": Uses a pre-generated numpy array as for the baseline data.

For each of our assays, we will set the time period of inference data to compare against the baseline data.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

# assay builder by baseline
assay_builder_from_numpy = wl.build_assay(assay_name="assays from numpy", 
                               pipeline=mainpipeline, 
                               model_name="house-price-estimator", 
                               iopath="output variable 0", 
                               baseline_data = small_results_baseline)

# set the width, interval, and time period 
assay_builder_from_numpy.add_run_until(datetime.datetime.now())
assay_builder_from_numpy.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)

assay_config_from_numpy = assay_builder_from_numpy.build()
assay_results_from_numpy = assay_config_from_numpy.interactive_run()

Baseline DataFrame

The method wallaroo.assay_config.AssayBuilder.baseline_dataframe returns a DataFrame of the assay baseline generated from the provided parameters. This includes:

  • metadata: The inference metadata with the model information, inference time, and other related factors.
  • in data: Each input field assigned with the label in.{input field name}.
  • out data: Each output field assigned with the label out.{output field name}

Note that for assays generated from numpy values, there is only the out data based on the supplied baseline data.

In the following example, the baseline DataFrame is retrieved.

display(assay_builder_from_dates.baseline_dataframe())
timemetadatainput_tensor_0input_tensor_1input_tensor_2input_tensor_3input_tensor_4input_tensor_5input_tensor_6input_tensor_7...input_tensor_9input_tensor_10input_tensor_11input_tensor_12input_tensor_13input_tensor_14input_tensor_15input_tensor_16input_tensor_17output_variable_0
01708013922866{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [49610, 341497], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}4.03.003710.020000.02.00.02.05.0...2760.0950.047.669600-122.2610003970.020000.079.00.00.01.514079e+06
11708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}3.02.501500.07420.01.00.00.03.0...1000.0500.047.723598-122.1740041840.07272.042.00.00.04.196772e+05
21708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}4.02.502009.05000.02.00.00.03.0...2009.00.047.257702-122.1979982009.05182.00.00.00.03.208637e+05
31708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}3.01.751530.07245.01.00.00.04.0...1530.00.047.730999-122.1910021530.07490.031.00.00.04.319292e+05
41708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}3.01.751480.04800.02.00.00.04.0...1140.0340.047.656700-122.3970031810.04800.070.00.00.05.361757e+05
..................................................................
4961708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}4.02.252560.012100.01.00.00.04.0...1760.0800.047.631001-122.1080022240.012100.038.00.00.07.019407e+05
4971708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}2.01.001160.05000.01.00.00.04.0...1160.00.047.686501-122.3990021750.05000.077.00.00.04.508677e+05
4981708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}4.02.501910.05000.02.00.00.03.0...1910.00.047.360802-122.0360032020.05000.09.00.00.02.962027e+05
4991708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}3.01.501590.08911.01.00.00.03.0...1590.00.047.739399-122.2519991590.09625.058.00.00.04.371780e+05
5001708013983808{'last_model': '{"model_name":"house-price-estimator","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}', 'pipeline_version': '', 'elapsed': [2517407, 2287534], 'dropped': [], 'partition': 'engine-58b565bf45-29xnm'}4.02.752640.04000.02.00.00.05.0...1730.0910.047.672699-122.2969971530.03740.089.00.00.07.184457e+05

501 rows × 21 columns

assay_builder_from_numpy.baseline_dataframe()
output_variable_0
0419677.20
1320863.72
2431929.20
3536175.70
4343304.63
......
495701940.70
496450867.70
497296202.70
498437177.97
499718445.70

500 rows × 1 columns

Baseline Stats

The method wallaroo.assay.AssayAnalysis.baseline_stats() returns a pandas.core.frame.DataFrame of the baseline stats.

The baseline stats for each assay are displayed in the examples below.

assay_results_from_dates[0].baseline_stats()
Baseline
count501
min236238.671875
max1514079.375
mean495193.231786
median442168.125
std226075.814267
startNone
endNone
assay_results_from_numpy[0].baseline_stats()
Baseline
count500
min236238.67
max1489624.3
mean493155.46054
median441840.425
std221657.583536
startNone
endNone

Baseline Bins

The method wallaroo.assay.AssayAnalysis.baseline_bins a simple dataframe to with the edge/bin data for a baseline.

assay_results_from_dates[0].baseline_bins()
b_edgesb_edge_namesb_aggregated_valuesb_aggregation
02.362387e+05left_outlier0.000000Density
12.962027e+05q_200.203593Density
24.159643e+05q_400.195609Density
34.640602e+05q_600.203593Density
46.821819e+05q_800.197605Density
51.514079e+06q_1000.199601Density
6infright_outlier0.000000Density
assay_results_from_numpy[0].baseline_bins()
b_edgesb_edge_namesb_aggregated_valuesb_aggregation
0236238.67left_outlier0.000Density
1296202.70q_200.204Density
2415964.30q_400.196Density
3464057.38q_600.200Density
4675545.44q_800.200Density
51489624.30q_1000.200Density
6infright_outlier0.000Density

Baseline Histogram Chart

The method wallaroo.assay_config.AssayBuilder.baseline_histogram returns a histogram chart of the assay baseline generated from the provided parameters.

assay_builder_from_dates.baseline_histogram()

Baseline KDE Chart

The method wallaroo.assay_config.AssayBuilder.baseline_kde returns a Kernel Density Estimation (KDE) chart of the assay baseline generated from the provided parameters.

assay_builder_from_dates.baseline_kde()

Baseline ECDF Chart

The method wallaroo.assay_config.AssayBuilder.baseline_ecdf returns a Empirical Cumulative Distribution Function (CDF) chart of the assay baseline generated from the provided parameters.

assay_builder_from_dates.baseline_ecdf()

Assay Preview

Now that the baseline is defined, we look at different configuration options and view how the assay baseline and results changes. Once we determine what gives us the best method of determining model drift, we can create the assay.

Analysis List Chart Scores

Analysis List scores show the assay scores for each assay result interval in one chart. Values that are outside of the alert threshold are colored red, while scores within the alert threshold are green.

Assay chart scores are displayed with the method wallaroo.assay.AssayAnalysisList.chart_scores(title: Optional[str] = None), with ability to display an optional title with the chart.

The following example shows retrieving the assay results and displaying the chart scores. From our example, we have two windows - the first should be green, and the second is red showing that values were outside the alert threshold.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates.chart_scores()

Analysis Chart

The method wallaroo.assay.AssayAnalysis.chart() displays a comparison between the baseline and an interval of inference data.

This is compared to the Chart Scores, which is a list of all of the inference data split into intervals, while the Analysis Chart shows the breakdown of one set of inference data against the baseline.

Score from the Analysis List Chart Scores and each element from the Analysis List DataFrame generates

The following fields are included.

FieldTypeDescription
baseline meanFloatThe mean of the baseline values.
window meanFloatThe mean of the window values.
baseline medianFloatThe median of the baseline values.
window medianFloatThe median of the window values.
bin_modeStringThe binning mode used for the assay.
aggregationStringThe aggregation mode used for the assay.
metricStringThe metric mode used for the assay.
weightedBoolWhether the bins were manually weighted.
scoreFloatThe score from the assay window.
scoresList(Float)The score from each assay window bin.
indexInteger/NoneThe window index. Interactive assay runs are None.
# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Density
metric = PSI
weighted = False
score = 0.0363497101644573
scores = [0.0, 0.027271477163285655, 0.003847844548034077, 0.000217023993714693, 0.002199485350158766, 0.0028138791092641195, 0.0]
index = None

Analysis List DataFrame

wallaroo.assay.AssayAnalysisList.to_dataframe() returns a DataFrame showing the assay results for each window aka individual analysis. This DataFrame contains the following fields:

FieldTypeDescription
assay_idInteger/NoneThe assay id. Only provided from uploaded and executed assays.
nameString/NoneThe name of the assay. Only provided from uploaded and executed assays.
iopathString/NoneThe iopath of the assay. Only provided from uploaded and executed assays.
scoreFloatThe assay score.
startDateTimeThe DateTime start of the assay window.
minFloatThe minimum value in the assay window.
maxFloatThe maximum value in the assay window.
meanFloatThe mean value in the assay window.
medianFloatThe median value in the assay window.
stdFloatThe standard deviation value in the assay window.
warning_thresholdFloat/NoneThe warning threshold of the assay window.
alert_thresholdFloat/NoneThe alert threshold of the assay window.
statusStringThe assay window status. Values are:
  • OK: The score is within accepted thresholds.
  • Warning: The score has triggered the warning_threshold if exists, but not the alert_threshold.
  • Alert: The score has triggered the the alert_threshold.

For this example, the assay analysis list DataFrame is listed.

From this tutorial, we should have 2 windows of dta to look at, each one minute apart. The first window should show status: OK, with the second window with the very large house prices will show status: alert

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates.to_dataframe()
assay_idnameiopathscorestartminmaxmeanmedianstdwarning_thresholdalert_thresholdstatus
0None0.0363502024-02-15T16:20:43.976756+00:002.362387e+051489624.2505.177634e+054.486278e+05227729.030050None0.25Ok
1None8.8686142024-02-15T16:22:43.976756+00:001.514079e+062016006.1251.885772e+061.946438e+06160046.727324None0.25Alert

Analysis List Full DataFrame

wallaroo.assay.AssayAnalysisList.to_full_dataframe() returns a DataFrame showing all values, including the inputs and outputs from the assay results for each window aka individual analysis. This DataFrame contains the following fields:

pipeline_id	warning_threshold	bin_index	created_at
FieldTypeDescription
window_startDateTimeThe date and time when the window period began.
analyzed_atDateTimeThe date and time when the assay analysis was performed.
elapsed_millisIntegerHow long the analysis took to perform in milliseconds.
baseline_summary_countIntegerThe number of data elements from the baseline.
baseline_summary_minFloatThe minimum value from the baseline summary.
baseline_summary_maxFloatThe maximum value from the baseline summary.
baseline_summary_meanFloatThe mean value of the baseline summary.
baseline_summary_medianFloatThe median value of the baseline summary.
baseline_summary_stdFloatThe standard deviation value of the baseline summary.
baseline_summary_edges_{0…n}FloatThe baseline summary edges for each baseline edge from 0 to number of edges.
summarizer_typeStringThe type of summarizer used for the baseline. See wallaroo.assay_config for other summarizer types.
summarizer_bin_weightsList / NoneIf baseline bin weights were provided, the list of those weights. Otherwise, None.
summarizer_provided_edgesList / NoneIf baseline bin edges were provided, the list of those edges. Otherwise, None.
statusStringThe assay window status. Values are:
  • OK: The score is within accepted thresholds.
  • Warning: The score has triggered the warning_threshold if exists, but not the alert_threshold.
  • Alert: The score has triggered the the alert_threshold.
idInteger/NoneThe id for the window aka analysis. Only provided from uploaded and executed assays.
assay_idInteger/NoneThe assay id. Only provided from uploaded and executed assays.
pipeline_idInteger/NoneThe pipeline id. Only provided from uploaded and executed assays.
warning_thresholdFloatThe warning threshold set for the assay.
warning_thresholdFloatThe warning threshold set for the assay.
bin_indexInteger/NoneThe bin index for the window aka analysis.
created_atDatetime/NoneThe date and time the window aka analysis was generated. Only provided from uploaded and executed assays.

For this example, full DataFrame from an assay preview is generated.

From this tutorial, we should have 2 windows of dta to look at, each one minute apart. The first window should show status: OK, with the second window with the very large house prices will show status: alert

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates.to_full_dataframe()
window_startanalyzed_atelapsed_millisbaseline_summary_countbaseline_summary_minbaseline_summary_maxbaseline_summary_meanbaseline_summary_medianbaseline_summary_stdbaseline_summary_edges_0...summarizer_typesummarizer_bin_weightssummarizer_provided_edgesstatusidassay_idpipeline_idwarning_thresholdbin_indexcreated_at
02024-02-15T16:20:43.976756+00:002024-02-15T16:26:42.266029+00:0082501236238.6718751514079.375495193.231786442168.125226075.814267236238.671875...UnivariateContinuousNoneNoneOkNoneNoneNoneNoneNoneNone
12024-02-15T16:22:43.976756+00:002024-02-15T16:26:42.266134+00:0083501236238.6718751514079.375495193.231786442168.125226075.814267236238.671875...UnivariateContinuousNoneNoneAlertNoneNoneNoneNoneNoneNone

2 rows × 86 columns

Analysis Compare Basic Stats

The method wallaroo.assay.AssayAnalysis.compare_basic_stats returns a DataFrame comparing one set of inference data against the baseline.

This is compared to the Analysis List DataFrame, which is a list of all of the inference data split into intervals, while the Analysis Compare Basic Stats shows the breakdown of one set of inference data against the baseline.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].compare_basic_stats()
BaselineWindowdiffpct_diff
count501.01000.0499.00000099.600798
min236238.671875236238.6718750.0000000.000000
max1514079.3751489624.25-24455.125000-1.615181
mean495193.231786517763.39462522570.1628394.557850
median442168.125448627.81256459.6875001.460912
std226075.814267227729.030051653.2157830.731266
startNone2024-02-15T16:20:43.976756+00:00NaNNaN
endNone2024-02-15T16:21:43.976756+00:00NaNNaN

Configure Assays

Before creating the assay, configure the assay and continue to preview it until the best method for detecting drift is set. The following options are available.

Score Metric

The score is a distance between the baseline and the analysis window. The larger the score, the greater the difference between the baseline and the analysis window. The following methods are provided determining the score:

  • PSI (Default) - Population Stability Index (PSI).
  • MAXDIFF: Maximum difference between corresponding bins.
  • SUMDIFF: Mum of differences between corresponding bins.

The metric type used is updated with the wallaroo.assay_config.AssayBuilder.add_metric(metric: wallaroo.assay_config.Metric) method.

The following three charts use each of the metrics. Note how the scores change based on the score type used.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set metric PSI mode
assay_builder_from_dates.summarizer_builder.add_metric(wallaroo.assay_config.Metric.PSI)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Density
metric = PSI
weighted = False
score = 0.0363497101644573
scores = [0.0, 0.027271477163285655, 0.003847844548034077, 0.000217023993714693, 0.002199485350158766, 0.0028138791092641195, 0.0]
index = None
# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set metric MAXDIFF mode
assay_builder_from_dates.summarizer_builder.add_metric(wallaroo.assay_config.Metric.MAXDIFF)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Density
metric = MaxDiff
weighted = False
score = 0.06759281437125747
scores = [0.0, 0.06759281437125747, 0.028391217564870255, 0.006592814371257472, 0.02139520958083832, 0.02439920159680639, 0.0]
index = 1
# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set metric SUMDIFF mode
assay_builder_from_dates.summarizer_builder.add_metric(wallaroo.assay_config.Metric.SUMDIFF)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Density
metric = SumDiff
weighted = False
score = 0.07418562874251496
scores = [0.0, 0.06759281437125747, 0.028391217564870255, 0.006592814371257472, 0.02139520958083832, 0.02439920159680639, 0.0]
index = None
Alert Threshold

Assay alert thresholds are modified with the wallaroo.assay_config.AssayBuilder.add_alert_threshold(alert_threshold: float) method. By default alert thresholds are 0.1.

The following example updates the alert threshold to 0.5.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

assay_builder_from_dates.add_alert_threshold(0.5)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates.to_dataframe()
assay_idnameiopathscorestartminmaxmeanmedianstdwarning_thresholdalert_thresholdstatus
0None0.0363502024-02-15T16:20:43.976756+00:002.362387e+051489624.2505.177634e+054.486278e+05227729.030050None0.5Ok
1None8.8686142024-02-15T16:22:43.976756+00:001.514079e+062016006.1251.885772e+061.946438e+06160046.727324None0.5Alert
Number of Bins

Number of bins sets how the baseline data is partitioned. The total number of bins includes the set number plus the left_outlier and the right_outlier, so the total number of bins will be the total set + 2.

The number of bins is set with the wallaroo.assay_config.UnivariateContinousSummarizerBuilder.add_num_bins(num_bins: int) method.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# Set the number of bins
# update number of bins here
assay_builder_from_dates.summarizer_builder.add_num_bins(10)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Density
metric = PSI
weighted = False
score = 0.05250979748389363
scores = [0.0, 0.009076998929542533, 0.01924002322223739, 0.0021945246367443406, 0.0016700458183385653, 0.005779503770625584, 0.002393429678215835, 0.002942858220315506, 0.00010651192741915124, 0.00046961759334670583, 0.008636283687108028, 0.0]
index = None
Binning Mode

Binning Mode defines how the bins are separated. Binning modes are modified through the wallaroo.assay_config.UnivariateContinousSummarizerBuilder.add_bin_mode(bin_mode: bin_mode: wallaroo.assay_config.BinMode, edges: Optional[List[float]] = None).

Available bin_mode values from wallaroo.assay_config.Binmode are the following:

  • QUANTILE (Default): Based on percentages. If num_bins is 5 then quintiles so bins are created at the 20%, 40%, 60%, 80% and 100% points.
  • EQUAL: Evenly spaced bins where each bin is set with the formula min - max / num_bins
  • PROVIDED: The user provides the edge points for the bins.

If PROVIDED is supplied, then a List of float values must be provided for the edges parameter that matches the number of bins.

The following examples are used to show how each of the binning modes effects the bins.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# update binning mode here
assay_builder_from_dates.summarizer_builder.add_bin_mode(wallaroo.assay_config.BinMode.QUANTILE)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Density
metric = PSI
weighted = False
score = 0.0363497101644573
scores = [0.0, 0.027271477163285655, 0.003847844548034077, 0.000217023993714693, 0.002199485350158766, 0.0028138791092641195, 0.0]
index = None
# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# update binning mode here
assay_builder_from_dates.summarizer_builder.add_bin_mode(wallaroo.assay_config.BinMode.EQUAL)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Equal
aggregation = Density
metric = PSI
weighted = False
score = 0.013362603453760629
scores = [0.0, 0.0016737762070682225, 1.1166481947075492e-06, 0.011233704798893194, 1.276169365380064e-07, 0.00045387818266796784, 0.0]
index = None

The following example manually sets the bin values.

The values in this dataset run from 200000 to 1500000. We can specify the bins with the BinMode.PROVIDED and specifying a list of floats with the right hand / upper edge of each bin and optionally the lower edge of the smallest bin. If the lowest edge is not specified the threshold for left outliers is taken from the smallest value in the baseline dataset.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

edges = [200000.0, 400000.0, 600000.0, 800000.0, 1500000.0, 2000000.0]

# update binning mode here
assay_builder_from_dates.summarizer_builder.add_bin_mode(wallaroo.assay_config.BinMode.PROVIDED, edges)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Provided
aggregation = Density
metric = PSI
weighted = False
score = 0.01005936099521711
scores = [0.0, 0.0030207963288415803, 0.00011480201840874194, 0.00045327555974347976, 0.0037119550613212583, 0.0027585320269020493, 0.0]
index = None
Aggregation Options

Assay aggregation options are modified with the wallaroo.assay_config.AssayBuilder.add_aggregation(aggregation: wallaroo.assay_config.Aggregation) method. The following options are provided:

  • Aggregation.DENSITY (Default): Count the number/percentage of values that fall in each bin.
  • Aggregation.CUMULATIVE: Empirical Cumulative Density Function style, which keeps a cumulative count of the values/percentages that fall in each bin.

The following example demonstrate the different results between the two.

#Aggregation.DENSITY - the default

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

assay_builder_from_dates.summarizer_builder.add_aggregation(wallaroo.assay_config.Aggregation.DENSITY)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Density
metric = PSI
weighted = False
score = 0.0363497101644573
scores = [0.0, 0.027271477163285655, 0.003847844548034077, 0.000217023993714693, 0.002199485350158766, 0.0028138791092641195, 0.0]
index = None
#Aggregation.CUMULATIVE

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

assay_builder_from_dates.summarizer_builder.add_aggregation(wallaroo.assay_config.Aggregation.CUMULATIVE)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Cumulative
metric = PSI
weighted = False
score = 0.17698802395209584
scores = [0.0, 0.06759281437125747, 0.03920159680638724, 0.04579441117764471, 0.02439920159680642, 0.0, 0.0]
index = None
Inference Interval and Inference Width

The inference interval aka window interval sets how often to run the assay analysis. This is set from the wallaroo.assay_config.AssayBuilder.window_builder.add_interval method to collect data expressed in time units: “hours=24”, “minutes=1”, etc.

For example, with an interval of 1 minute, the assay collects data every minute. Within an hour, 60 intervals of data is collected.

We can adjust the interval and see how the assays change based on how frequently they are run.

The width sets the time period from the wallaroo.assay_config.AssayBuilder.window_builder.add_width method to collect data expressed in time units: “hours=24”, “minutes=1”, etc.

For example, an interval of 1 minute and a width of 1 minute collects 1 minutes worth of data every minute. An interval of 1 minute with a width of 5 minutes collects 5 minute of inference data every minute.

By default, the interval and width is 24 hours.

For this example, we’ll adjust the width and interval from 1 minute to 5 minutes and see how the number of analyses and their score changes.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates.chart_scores()
# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=5).add_interval(minutes=5).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates.chart_scores()

Add Run Until and Add Inference Start

For previewing assays, setting wallaroo.assay_config.AssayBuilder.add_run_until sets the end date and time for collecting inference data. When an assay is uploaded, this setting is no longer valid - assays run at the Inference Interval until the assay is paused.

Setting the wallaroo.assay_config.WindowBuilder.add_start sets the start date and time to collect inference data. When an assay is uploaded, this setting is included, and assay results will be displayed starting from that start date at the Inference Interval until the assay is paused. By default, add_start begins 24 hours after the assay is uploaded unless set in the assay configuration manually.

For the following example, the add_run_until setting is set to datetime.datetime.now() to collect all inference data from assay_window_start up until now, and the second example limits that example to only two minutes of data.

# inference data that includes all of the data until now 

assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(datetime.datetime.now())
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()
assay_results_from_dates.chart_scores()
# inference data that includes all of the data until now 

assay_builder_from_dates = wl.build_assay(assay_name="assays from date baseline", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and time period 
assay_builder_from_dates.add_run_until(assay_window_start+datetime.timedelta(seconds=120))
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_dates.build()
assay_results_from_dates = assay_config_from_dates.interactive_run()

assay_results_from_dates.chart_scores()

Create Assay

With the assay previewed and configuration options determined, we officially create it by uploading it to the Wallaroo instance.

Once it is uploaded, the assay runs an analysis based on the window width, interval, and the other settings configured.

Assays are uploaded with the wallaroo.assay_config.upload() method. This uploads the assay into the Wallaroo database with the configurations applied and returns the assay id. Note that assay names must be unique across the Wallaroo instance; attempting to upload an assay with the same name as an existing one will return an error.

wallaroo.assay_config.upload() returns the assay id for the assay.

Typically we would just call wallaroo.assay_config.upload() after configuring the assay. For the example below, we will perform the complete configuration in one window to show all of the configuration steps at once before creating the assay.

# Build the assay, based on the start and end of our baseline time, 
# and tracking the output variable index 0
assay_builder_from_dates = wl.build_assay(assay_name="assays creation example", 
                                          pipeline=mainpipeline, 
                                          model_name="house-price-estimator", 
                                          iopath="output variable 0",
                                          baseline_start=assay_baseline_start, 
                                          baseline_end=assay_baseline_end)

# set the width, interval, and assay start date and time
assay_builder_from_dates.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)

# add other options
assay_builder_from_dates.summarizer_builder.add_aggregation(wallaroo.assay_config.Aggregation.CUMULATIVE)
assay_builder_from_dates.summarizer_builder.add_metric(wallaroo.assay_config.Metric.MAXDIFF)
assay_builder_from_dates.add_alert_threshold(0.5)

assay_id = assay_builder_from_dates.upload()

# wait 65 seconds for the first analysis run performed
time.sleep(65)

The assay is now visible through the Wallaroo UI by selecting the workspace, then the pipeline, then Insights.

Get Assay Results

Once an assay is created the assay runs an analysis based on the window width, interval, and the other settings configured.

Assay results are retrieved with the wallaroo.client.get_assay_results method, which takes the following parameters:

ParameterTypeDescription
assay_idInteger (Required)The numerical id of the assay.
startDatetime.Datetime (Required)The start date and time of historical data from the pipeline to start analyses from.
endDatetime.Datetime (Required)The end date and time of historical data from the pipeline to limit analyses to.
  • IMPORTANT NOTE: This process requires that additional historical data is generated from the time the assay is created to when the results are available. To add additional inference data, use the Assay Test Data section above.
assay_results = wl.get_assay_results(assay_id=assay_id,
                     start=assay_window_start,
                     end=datetime.datetime.now())

assay_results.chart_scores()
assay_results[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Cumulative
metric = MaxDiff
weighted = False
score = 0.067592815
scores = [0.0, 0.06759281437125747, 0.03920159680638724, 0.04579441117764471, 0.02439920159680642, 0.0, 0.0]
index = 1

List and Retrieve Assay

If the assay id is not already know, it is retrieved from the wallaroo.client.list_assays() method. Select the assay to retrieve data for and retrieve its id with wallaroo.assay.Assay._id method.

wl.list_assays()
nameactivestatuswarning_thresholdalert_thresholdpipeline_name
assays creation exampleTrue{"run_at": "2024-02-15T16:40:53.212979206+00:00", "num_ok": 0, "num_warnings": 0, "num_alerts": 0}None0.5assay-demonstration-tutorial
retrieved_assay = wl.list_assays()[0]

live_assay_results = wl.get_assay_results(assay_id=retrieved_assay._id,
                     start=assay_window_start,
                     end=datetime.datetime.now())

live_assay_results.chart_scores()
live_assay_results[0].chart()
baseline mean = 495193.23178642715
window mean = 517763.394625
baseline median = 442168.125
window median = 448627.8125
bin_mode = Quantile
aggregation = Cumulative
metric = MaxDiff
weighted = False
score = 0.067592815
scores = [0.0, 0.06759281437125747, 0.03920159680638724, 0.04579441117764471, 0.02439920159680642, 0.0, 0.0]
index = 1

Pause and Resume Assay

Assays are paused and started with the wallaroo.assay.Assay.turn_off and wallaroo.assay.Assay.turn_on methods.

For the following, we retrieve an assay from the wallaroo instance and pause it, then list the assays to verify its setting Active is False.

display(wl.list_assays())
retrieved_assay = wl.list_assays()[0]
nameactivestatuswarning_thresholdalert_thresholdpipeline_name
assays creation exampleTrue{"run_at": "2024-02-15T16:40:53.212979206+00:00", "num_ok": 0, "num_warnings": 0, "num_alerts": 0}None0.5assay-demonstration-tutorial

Now we pause the assay, and show the assay list to verify it is no longer active.

retrieved_assay.turn_off()
display(wl.list_assays())
nameactivestatuswarning_thresholdalert_thresholdpipeline_name
assays creation exampleFalse{"run_at": "2024-02-15T16:40:53.212979206+00:00", "num_ok": 0, "num_warnings": 0, "num_alerts": 0}None0.5assay-demonstration-tutorial

We resume the assay and verify its setting Active is True.

retrieved_assay.turn_on()
display(wl.list_assays())
nameactivestatuswarning_thresholdalert_thresholdpipeline_name
assays creation exampleTrue{"run_at": "2024-02-15T16:40:53.212979206+00:00", "num_ok": 0, "num_warnings": 0, "num_alerts": 0}None0.5assay-demonstration-tutorial

Undeploy Main Pipeline

With the examples and tutorial complete, we will undeploy the main pipeline and return the resources back to the Wallaroo instance.

mainpipeline.undeploy()

6 - Computer Vision Pipeline Logs MLOps API Tutorial

How to retrieve computer vision oriented pipeline logs through the Wallaroo MLOps API.

This tutorial and the assets can be downloaded as part of the Wallaroo Tutorials repository.

Pipeline API Log Tutorial

This tutorial demonstrates Wallaroo Pipeline MLOps API for pipeline log retrieval for Computer Vision based models.

This tutorial will demonstrate how to:

  1. Select or create a workspace, pipeline and upload the control model, and additional testing models.
  2. Add a pipeline step with the champion model, then deploy the pipeline and perform sample inferences for computer vision detection.
  3. Retrieve the logs via the Wallaroo MLOps API. These steps will be simplified to only show the API log retrieval method. See the Wallaroo Documentation site for full details.
  4. Use the pipeline logs to display metadata data.
  5. Undeploy the pipeline.

This tutorial provides the following:

  • Models:
    • models/yolov8n.onnx: A pre-trained Yolov8n model.
  • Data:
    • data/dogbike.png: A PNG image with a dog and bicycle.
    • data/dogbike.df.json: A pandas Record format JSON file of the PNG image converted to numpy array values for inference requests.

Prerequisites

  • A deployed Wallaroo instance
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.

Initial Steps

Import libraries

The first step is to import the libraries needed for this notebook.

import wallaroo
from wallaroo.object import EntityNotFoundError

import pyarrow as pa

from IPython.display import display

# used to display DataFrame information without truncating
from IPython.display import display
import pandas as pd
pd.set_option('display.max_colwidth', None)

import datetime
import requests

Connect to the Wallaroo Instance

The first step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). If logging in externally, update the wallarooPrefix and wallarooSuffix variables with the proper DNS information. For more information on Wallaroo Client settings, see the Client Connection guide.

# Login through local Wallaroo instance

wl = wallaroo.Client()

Wallaroo MLOps API URL

API URL

The variable APIURL is used to specify the connection to the Wallaroo instance’s MLOps API URL, and is composed of the Wallaroo DNS prefix and suffix. For full details, see the Wallaroo API Connection Guide
.

For this demonstration, the following Wallaroo SDK methods are used to generate the API authentication Bearer token, and the MLOps API URL.

For full details on connecting to a Wallaroo instance via MLOps API calls, see the Wallaroo API Connection Guide.

These methods are:

  • wallaroo.client.auth_header(): Returns the authorization Bearer token for a user authenticated through the Wallaroo SDK.
  • wallaroo.client.api_endpoint: Returns the Wallaroo instance’s api endpoint.
display(wl.auth.auth_header())
display(wl.api_endpoint)
{'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJzWThabWtGcm9VWDdDSzFiQjEyS1dwWGtaaUk2R01Gd1ZQUHduWmxxbkVRIn0.eyJleHAiOjE3MDMyNjYxOTIsImlhdCI6MTcwMzI2NjEzMiwiYXV0aF90aW1lIjoxNzAzMjY0OTgxLCJqdGkiOiI0NDdmNmU4YS02NTY0LTRhMDQtODBiYy03MDY1YjViMzM4NTQiLCJpc3MiOiJodHRwczovL2RvYy10ZXN0LmtleWNsb2FrLndhbGxhcm9vY29tbXVuaXR5Lm5pbmphL2F1dGgvcmVhbG1zL21hc3RlciIsImF1ZCI6WyJtYXN0ZXItcmVhbG0iLCJhY2NvdW50Il0sInN1YiI6ImNkOGZkMDYzLTYyZmItNDhkYy05NTg5LTFkZTFiMjlkOTZhNyIsInR5cCI6IkJlYXJlciIsImF6cCI6InNkay1jbGllbnQiLCJzZXNzaW9uX3N0YXRlIjoiMTIxNTg0M2UtMThhNy00NzgyLWE0YjgtODQ4YjIyYWQxYzdmIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLW1hc3RlciIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJtYXN0ZXItcmVhbG0iOnsicm9sZXMiOlsibWFuYWdlLXVzZXJzIiwidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgb3BlbmlkIGVtYWlsIiwic2lkIjoiMTIxNTg0M2UtMThhNy00NzgyLWE0YjgtODQ4YjIyYWQxYzdmIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJodHRwczovL2hhc3VyYS5pby9qd3QvY2xhaW1zIjp7IngtaGFzdXJhLXVzZXItaWQiOiJjZDhmZDA2My02MmZiLTQ4ZGMtOTU4OS0xZGUxYjI5ZDk2YTciLCJ4LWhhc3VyYS1kZWZhdWx0LXJvbGUiOiJ1c2VyIiwieC1oYXN1cmEtYWxsb3dlZC1yb2xlcyI6WyJ1c2VyIl0sIngtaGFzdXJhLXVzZXItZ3JvdXBzIjoie30ifSwibmFtZSI6IkpvaG4gSGFuc2FyaWNrIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiam9obi5odW1tZWxAd2FsbGFyb28uYWkiLCJnaXZlbl9uYW1lIjoiSm9obiIsImZhbWlseV9uYW1lIjoiSGFuc2FyaWNrIiwiZW1haWwiOiJqb2huLmh1bW1lbEB3YWxsYXJvby5haSJ9.W4rshsGTfdHrQnfP03zDcKUJSTEXVHb6HGmci5wDjCSUmqVibauaifoPl1b9mC9XR384-mt9CTEoA4k9JR9YntGzVgifQ2FgSvFtLHaTMMdl1BYulmJmnG_1jxheU7bc0XcgaBpTTQprkVn_UNvipIQuTxIwSsRyJzCmTXofQ8MQB5M1UVz2EQij-w9PzNWUbgDQ0K4IueYFK3idF3VWZCrO3ETEQV-xqySc-GoOmS8IQHWgNBb_WD11SjBYj1wrISYj3PgBAalyCc-hxZKDbdtuWGjjjeexqkGr_aTc4DfxQS3VUki4k9pCJEi5riLeOf0eJvRRYT69GrLrIe7IIA'}

https://doc-test.api.wallarooexample.ai

Create Workspace

We will create a workspace to manage our pipeline and models. The following variables will set the name of our sample workspace then set it as the current workspace.

  • IMPORTANT NOTE: Workspace names must be unique across the Wallaroo instance. To verify unique names, the randomization code below is provided to allow the workspace name to be unique. If this is not required, set suffix to ''.

  • References

import string
import random

# make a random 4 character suffix to prevent overwriting other user's workspaces
suffix= ''.join(random.choice(string.ascii_lowercase) for i in range(4))

suffix=''

workspace_name = f'log-api-cv-workspace{suffix}'
main_pipeline_name = 'log-api-cv'
model_name = 'yolov8n'
model_file_name = './models/yolov8n.onnx'
def get_workspace(name, client):
    workspace = None
    for ws in client.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = client.create_workspace(name)
    return workspace
workspace = get_workspace(workspace_name, wl)

wl.set_current_workspace(workspace)

workspace_id = workspace.id()

Upload The Computer Vision Model

For our example, we will upload the Yolov8n model, and set the input field to images.

# Upload Retrained Yolo8 Model 

yolov8_model = (wl.upload_model(model_name, 
                               model_file_name, 
                               framework=wallaroo.framework.Framework.ONNX)
                               .configure(tensor_fields=['images'],
                                          batch_config="single"
                                          )
                )

Build the Pipeline

This pipeline is made to be an example of an existing situation where a model is deployed and being used for inferences in a production environment. We’ll call it housepricepipeline, set housingcontrol as a pipeline step, then run a few sample inferences.

mainpipeline = wl.build_pipeline(main_pipeline_name)

# in case this pipeline was run before
mainpipeline.undeploy()
mainpipeline.clear()
mainpipeline.add_model_step(yolov8_model).deploy()
namelog-api-cv
created2023-12-22 17:10:06.563220+00:00
last_updated2023-12-22 17:55:34.460452+00:00
deployedTrue
archNone
tags
versionsb1c6d8ea-0259-4a45-aca5-c065a2d59d2d, a8f0adef-5ab9-4695-95eb-e09c256b221c, d174e395-66b5-40bb-bec0-a689e597749f, 4db1d862-0c8d-4394-9009-8aee1324503c, ce598566-83f7-4983-a8e5-4fc779e2c008, b016fb58-d52e-46e1-afc4-31268f471077, 0bd75ecf-1923-42cf-b7e5-6593699465c0
stepsapi-sample-model
publishedFalse

Testing

We’ll pass in our DataFrame reference file as an inference request, noting the start and end times for our log retrieval.

dataframe_start = datetime.datetime.now(datetime.timezone.utc)

# run as inference api

# Retrieve the token
headers = wl.auth.auth_header()

# set Content-Type type
headers['Content-Type']='application/json; format=pandas-records'

## Inference through external URL using dataframe

df = pd.read_json('./data/dogbike.df.json')
data = df.to_dict(orient="records")

# submit the request via POST, import as pandas DataFrame
response = pd.DataFrame.from_records(
    requests.post(
        mainpipeline._deployment._url(), 
        json=data, 
        headers=headers)
        .json()
    )
# just to account for any local versus server time discrepancy
import time
time.sleep(20)
dataframe_end = datetime.datetime.now(datetime.timezone.utc)

# run additional inferences outside the time frame

for i in range(10):
    # submit the request via POST, import as pandas DataFrame
    response = pd.DataFrame.from_records(
        requests.post(
            mainpipeline._deployment._url(), 
            json=data, 
            headers=headers)
            .json()
        )

Get Pipeline Logs

Pipeline logs are retrieved through the Wallaroo MLOps API with the following request.

  • REQUEST URL
    • v1/api/pipelines/get_logs
  • Headers
    • Accept:
      • application/json; format=pandas-records: For the logs returned as pandas DataFrame
      • application/vnd.apache.arrow.file: for the logs returned as Apache Arrow
  • PARAMETERS
    • pipeline_name (String Required): The name of the pipeline.
    • workspace_id (Integer Required): The numerical identifier of the workspace.
    • cursor (String Optional): Cursor returned with a previous page of results from a pipeline log request, used to retrieve the next page of information.
    • order (String Optional Default: Desc): The order for log inserts returned. Valid values are:
      • Asc: In chronological order of inserts.
      • Desc: In reverse chronological order of inserts.
    • page_size (Integer Optional Default: 1000.): Max records per page.
    • start_time (String Optional): The start time of the period to retrieve logs for in RFC 3339 format for DateTime. Must be combined with end_time.
    • end_time (String Optional): The end time of the period to retrieve logs for in RFC 3339 format for DateTime. Must be combined with start_time.
  • RETURNS
    • The logs are returned by default as 'application/json; format=pandas-records' format. To request the logs as Apache Arrow tables, set the submission header Accept to application/vnd.apache.arrow.file.
    • Headers:
      • x-iteration-cursor: Used to retrieve the next page of results. This is not included if x-iteration-status is All.
      • x-iteration-status: Informs whether there are more records available outside of this log request parameters.
        • All: This page includes all logs available from this request. If x-iteration-status is All, then x-iteration-cursor is not provided.
        • SchemaChange: A change in the log schema caused by actions such as pipeline version, etc.
        • RecordLimited: The number of records exceeded from the page size, more records can be requested as the next page. There may be more records available to retrieve OR the record limit was reached for this request even if no more records are available in next cursor request.
        • ByteLimited: The number of records exceeded the pipeline log limit which is around 100K.

Get Pipeline Logs Example

For our example, we will retrieve the pipeline logs. FIrst by specifying the date and time, then we will request the logs and continue to show them as long as the cursor has another log to display. Because of the size of the input and outputs, most logs may be constrained by the x-iteration-status as ByteLimited.

# retrieve the authorization token
headers = wl.auth.auth_header()

url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

# Standard log retrieval

data = {
    'pipeline_name': main_pipeline_name,
    'workspace_id': workspace_id,
    'start_time': dataframe_start.isoformat(),
    'end_time': dataframe_end.isoformat()
}

response = requests.post(url, headers=headers, json=data)
standard_logs = pd.DataFrame.from_records(response.json())

display(len(standard_logs))
display(standard_logs.loc[:, ["time", "out"]])
1
timeout
01703267760538{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
# retrieve the authorization token
headers = wl.auth.auth_header()

url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

# datetime set back one day to get more values

data = {
    'pipeline_name': main_pipeline_name,
    'workspace_id': workspace_id
}

response = requests.post(url, headers=headers, json=data)
standard_logs = pd.DataFrame.from_records(response.json())

display(standard_logs.loc[:, ["time", "out"]])
cursor = response.headers['x-iteration-cursor']

# if there's another record, get the next one

while 'x-iteration-cursor' in response.headers:
    # retrieve the authorization token
    headers = wl.auth.auth_header()

    url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

    # datetime set back one day to get more values

    data = {
        'pipeline_name': main_pipeline_name,
        'workspace_id': workspace_id,
        'cursor': response.headers['x-iteration-cursor']
    }

    response = requests.post(url, headers=headers, json=data)
    # if there's no response, the logs are done
    if response.json() != []:
        standard_logs = pd.DataFrame.from_records(response.json())
        display(standard_logs.head(5).loc[:, ["time", "out"]])
timeout
01703267304746{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
11703267414439{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
21703267420527{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
31703267426032{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
41703267432037{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
51703267437567{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
61703267442644{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
71703267449561{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
81703267455734{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
91703267462641{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
101703267468362{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
timeout
01703267760538{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
11703267788432{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
21703267794241{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
31703267802339{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
41703267810346{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
timeout
01703266176951{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
11703266192757{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
21703266198591{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
31703266205430{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}
41703266212538{'output0': [17.09787, 16.459343, 17.259743, 19.960602, 43.600235, 59.986958, 62.826073, 68.24793, 77.43261, 80.82158, 89.44183, 96.168915, 99.22421, 112.584045, 126.75803, 131.9707, 137.1645, 141.93822, 146.29594, 152.00876, 155.94037, 165.20976, 175.27249, 184.05307, 193.66891, 201.51189, 215.04979, 223.80424, 227.24472, 234.19638, 244.9743, 248.5781, 252.42526, 264.95795, 278.48563, 285.758, 293.1897, 300.48227, 305.47742, 314.46085, 319.89404, 324.83658, 335.99536, 345.1116, 350.31964, 352.41107, 365.44934, 381.30008, 391.52316, 399.29163, 405.78503, 411.33804, 415.93207, 421.6868, 431.67108, 439.9069, 447.71542, 459.38522, 474.13187, 479.32642, 484.49884, 493.5153, 501.29932, 507.7967, 514.26044, 523.1473, 531.3479, 542.5094, 555.619, 557.7229, 564.6408, 571.5525, 572.8373, 587.95703, 604.2997, 609.452, 616.31714, 623.5797, 624.13153, 634.47266, 16.970057, 16.788723, 17.441803, 17.900642, 36.188023, 57.277973, 61.664352, 62.556896, 63.43486, 79.50621, 83.844, 95.983765, 106.166, 115.368454, 123.09253, 124.5821, 128.65866, 139.16113, 142.02315, 143.69855, ...]}

Undeploy Main Pipeline

With the examples and tutorial complete, we will undeploy the main pipeline and return the resources back to the Wallaroo instance.

mainpipeline.undeploy()
namelog-api-cv
created2023-12-22 17:10:06.563220+00:00
last_updated2023-12-22 17:55:34.460452+00:00
deployedFalse
archNone
tags
versionsb1c6d8ea-0259-4a45-aca5-c065a2d59d2d, a8f0adef-5ab9-4695-95eb-e09c256b221c, d174e395-66b5-40bb-bec0-a689e597749f, 4db1d862-0c8d-4394-9009-8aee1324503c, ce598566-83f7-4983-a8e5-4fc779e2c008, b016fb58-d52e-46e1-afc4-31268f471077, 0bd75ecf-1923-42cf-b7e5-6593699465c0
stepsapi-sample-model
publishedFalse

7 - Wallaroo Edge Observability with Classification Financial Models through API

A demonstration on publishing an a Classification Financial model with Edge Observability through the Wallaroo MLOps API.

The following tutorial is available on the Wallaroo Github Repository.

Classification Financial Services Edge Deployment Demonstration via API

This notebook will walk through building Wallaroo pipeline with a a Classification model deployed to detect the likelihood of credit card fraud, then publishing that pipeline to an Open Container Initiative (OCI) Registry where it can be deployed in other Docker and Kubernetes environments. This example focuses on using the Wallaroo MLOps API to publish the pipeline and retrieve the relevant information.

This demonstration will focus on deployment to the edge. For further examples of using Wallaroo with this computer vision models, see Wallaroo 101.

For this demonstration, logging into the Wallaroo MLOps API will be done through the Wallaroo SDK. For more details on authenticating and connecting to the Wallaroo MLOps API, see the Wallaroo API Connection Guide.

This demonstration performs the following:

  • In Wallaroo Ops:
    • Setting up a workspace, pipeline, and model for deriving the price of a house based on inputs.
    • Creating an assay from a sample of inferences.
    • Display the inference result and upload the assay to the Wallaroo instance where it can be referenced later.
  • In a remote aka edge location:
    • Deploying the Wallaroo pipeline as a Wallaroo Inference Server deployed on an edge device with observability features.
  • In Wallaroo Ops:
    • Observe the Wallaroo Ops and remote Wallaroo Inference Server inference results as part of the pipeline logs.

Prerequisites

  • A deployed Wallaroo Ops instance.
  • A location with Docker or Kubernetes with helm for Wallaroo Inference server deployments.
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.
    • pandas: Pandas, mainly used for Pandas DataFrame

References

Data Scientist Pipeline Publish Steps

Load Libraries

The first step is to import the libraries used in this notebook.

import wallaroo
from wallaroo.object import EntityNotFoundError

import pyarrow as pa
import pandas as pd
import requests

# used to display dataframe information without truncating
from IPython.display import display
pd.set_option('display.max_colwidth', None)

Connect to the Wallaroo Instance through the User Interface

The next step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

wl = wallaroo.Client()

Create a New Workspace

We’ll use the SDK below to create our workspace , assign as our current workspace, then display all of the workspaces we have at the moment. We’ll also set up variables for our models and pipelines down the road, so we have one spot to change names to whatever fits your organization’s standards best.

To allow this tutorial to be run by multiple users in the same Wallaroo instance, a random 4 character prefix will be added to the workspace, pipeline, and model. Feel free to set suffix='' if this is not required.

import string
import random

# make a random 4 character suffix to verify uniqueness in tutorials
suffix_random= ''.join(random.choice(string.ascii_lowercase) for i in range(4))
suffix=''

workspace_name = f'edge-publish-api-demo{suffix}'
pipeline_name = 'edge-pipeline'
model_name = 'ccfraud'
model_file_name = './models/xgboost_ccfraud.onnx'
def get_workspace(name):
    workspace = None
    for ws in wl.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = wl.create_workspace(name)
    return workspace

def get_pipeline(name):
    try:
        pipeline = wl.pipelines_by_name(name)[0]
    except EntityNotFoundError:
        pipeline = wl.build_pipeline(name)
    return pipeline
workspace = get_workspace(workspace_name)

wl.set_current_workspace(workspace)
{'name': 'edge-publish-api-demo', 'id': 21, 'archived': False, 'created_by': 'b3deff28-04d0-41b8-a04f-b5cf610d6ce9', 'created_at': '2023-10-31T20:36:33.093439+00:00', 'models': [], 'pipelines': []}

Upload the Model

When a model is uploaded to a Wallaroo cluster, it is optimized and packaged to make it ready to run as part of a pipeline. In many times, the Wallaroo Server can natively run a model without any Python overhead. In other cases, such as a Python script, a custom Python environment will be automatically generated. This is comparable to the process of “containerizing” a model by adding a small HTTP server and other wrapping around it.

Our pretrained model is in ONNX format, which is specified in the framework parameter.

edge_demo_model = wl.upload_model(
    model_name,
    model_file_name,
    framework=wallaroo.framework.Framework.ONNX,
).configure(tensor_fields=["tensor"])

Reserve Pipeline Resources

Before deploying an inference engine we need to tell wallaroo what resources it will need.
To do this we will use the wallaroo DeploymentConfigBuilder() and fill in the options listed below to determine what the properties of our inference engine will be.

We will be testing this deployment for an edge scenario, so the resource specifications are kept small – what’s the minimum needed to meet the expected load on the planned hardware.

  • cpus - 0.5 => allow the engine to use 4 CPU cores when running the neural net
  • memory - 900Mi => each inference engine will have 2 GB of memory, which is plenty for processing a single image at a time.
  • arch - we will specify the X86 architecture.
deploy_config = (wallaroo
                 .DeploymentConfigBuilder()
                 .replica_count(1)
                 .cpus(1)
                 .memory("900Mi")
                 .build()
                 )

Simulated Edge Deployment

We will now deploy our pipeline into the current Kubernetes environment using the specified resource constraints. This is a “simulated edge” deploy in that we try to mimic the edge hardware as closely as possible.

pipeline = get_pipeline(pipeline_name)
display(pipeline)

pipeline.add_model_step(edge_demo_model)

pipeline.deploy(deployment_config = deploy_config)
nameedge-pipeline
created2023-10-31 20:36:33.486078+00:00
last_updated2023-10-31 20:36:33.486078+00:00
deployed(none)
archNone
tags
versionsa5752acc-9334-4cac-8b34-471979b55d61
steps
publishedFalse
Waiting for deployment - this will take up to 45s ............. ok
nameedge-pipeline
created2023-10-31 20:36:33.486078+00:00
last_updated2023-10-31 20:36:33.629569+00:00
deployedTrue
archNone
tags
versions932e9cd2-978e-40e6-ab84-2ed5e5d63408, a5752acc-9334-4cac-8b34-471979b55d61
stepsccfraud
publishedFalse

Run Sample Inference

A sample input will not be provided to test the inference.

The sample DataFrames and arrow tables are in the ./data directory. We’ll use the Apache Arrow table cc_data_1k.arrow with 1,000 records.

deploy_url = pipeline._deployment._url()

headers = wl.auth.auth_header()

headers['Content-Type']='application/vnd.apache.arrow.file'
# headers['Content-Type']='application/json; format=pandas-records'
headers['Accept']='application/json; format=pandas-records'

dataFile = './data/cc_data_1k.arrow'
!curl -X POST {deploy_url} \
     -H "Authorization:{headers['Authorization']}" \
     -H "Content-Type:{headers['Content-Type']}" \
     -H "Accept:{headers['Accept']}" \
     --data-binary @{dataFile} > curl_response.df.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  755k  100  641k  100  114k  44.7M  8176k --:--:-- --:--:-- --:--:-- 52.7M
# display the first 20 results

df_results = pd.read_json('./curl_response.df.json', orient="records")
# get just the partition
df_results['partition'] = df_results['metadata'].map(lambda x: x['partition'])
# display(df_results.head(20))
display(df_results.head(20).loc[:, ['time', 'out', 'partition']])
timeoutpartition
01698784607697{'variable': [1.0094898]}engine-fc7d5c445-bw7hf
11698784607697{'variable': [1.0094898]}engine-fc7d5c445-bw7hf
21698784607697{'variable': [1.0094898]}engine-fc7d5c445-bw7hf
31698784607697{'variable': [1.0094898]}engine-fc7d5c445-bw7hf
41698784607697{'variable': [-1.9073485999999998e-06]}engine-fc7d5c445-bw7hf
51698784607697{'variable': [-4.4882298e-05]}engine-fc7d5c445-bw7hf
61698784607697{'variable': [-9.36985e-05]}engine-fc7d5c445-bw7hf
71698784607697{'variable': [-8.3208084e-05]}engine-fc7d5c445-bw7hf
81698784607697{'variable': [-8.332728999999999e-05]}engine-fc7d5c445-bw7hf
91698784607697{'variable': [0.0004896521599999999]}engine-fc7d5c445-bw7hf
101698784607697{'variable': [0.0006609559]}engine-fc7d5c445-bw7hf
111698784607697{'variable': [7.57277e-05]}engine-fc7d5c445-bw7hf
121698784607697{'variable': [-0.000100553036]}engine-fc7d5c445-bw7hf
131698784607697{'variable': [-0.0005198717]}engine-fc7d5c445-bw7hf
141698784607697{'variable': [-3.695488e-06]}engine-fc7d5c445-bw7hf
151698784607697{'variable': [-0.00010883808]}engine-fc7d5c445-bw7hf
161698784607697{'variable': [-0.00017666817]}engine-fc7d5c445-bw7hf
171698784607697{'variable': [-2.8312206e-05]}engine-fc7d5c445-bw7hf
181698784607697{'variable': [2.1755695e-05]}engine-fc7d5c445-bw7hf
191698784607697{'variable': [-8.493661999999999e-05]}engine-fc7d5c445-bw7hf

Undeploy the Pipeline

With the testing complete, we can undeploy the pipeline. Note that deploying and undeploying a pipeline is not required for publishing a pipeline to the Edge Registry - this is done just for this demonstration.

pipeline.undeploy()
Waiting for undeployment - this will take up to 45s .................................... ok
nameedge-pipeline
created2023-10-31 20:36:33.486078+00:00
last_updated2023-10-31 20:36:33.629569+00:00
deployedFalse
archNone
tags
versions932e9cd2-978e-40e6-ab84-2ed5e5d63408, a5752acc-9334-4cac-8b34-471979b55d61
stepsccfraud
publishedFalse

Publish the Pipeline for Edge Deployment

It worked! For a demo, we’ll take working once as “tested”. So now that we’ve tested our pipeline, we are ready to publish it for edge deployment.

Publishing it means assembling all of the configuration files and model assets and pushing them to an Open Container Initiative (OCI) repository set in the Wallaroo instance as the Edge Registry service. DevOps engineers then retrieve that image and deploy it through Docker, Kubernetes, or similar deployments.

See Edge Deployment Registry Guide for details on adding an OCI Registry Service to Wallaroo as the Edge Deployment Registry.

This is done through the SDK command wallaroo.pipeline.publish(deployment_config) which has the following parameters and returns.

Publish a Pipeline Endpoint

Pipelines are published as images to the edge registry set in the Enable Wallaroo Edge Registry through the following endpoint.

  • Endpoint:
    • /v1/api/pipelines/publish
  • Parameters
    • pipeline_id (Integer Required): The numerical id of the pipeline to publish to the edge registry.
    • pipeline_version_id (Integer Required): The numerical id of the pipeline’s version to publish to the edge registry.
    • model_config_ids (List Optional): The list of model config ids to include.
  • Returns
    • id (Integer): Numerical Wallaroo id of the published pipeline.
    • pipeline_version_id (Integer): Numerical Wallaroo id of the pipeline version published.
    • status: The status of the pipeline publish. Values include:
      • PendingPublish: The pipeline publication is about to be uploaded or is in the process of being uploaded.
      • Published: The pipeline is published and ready for use.
    • created_at (String): When the published pipeline was created.
    • updated_at (String): When the published pipeline was updated.
    • created_by (String): The email address of the Wallaroo user that created the pipeline publish.
    • pipeline_url (String): The URL of the published pipeline in the edge registry. May be null until the status is Published)
    • engine_url (String): The URL of the published pipeline engine in the edge registry. May be null until the status is Published.
    • helm (String): The helm chart, helm reference and helm version.
    • engine_config (*wallaroo.deployment_config.DeploymentConfig) | The pipeline configuration included with the published pipeline.

Publish Example

We will now publish the pipeline to our Edge Deployment Registry with the pipeline.publish(deployment_config) command. deployment_config is an optional field that specifies the pipeline deployment. This can be overridden by the DevOps engineer during deployment. For this demonstration, we will be retrieving the most recent pipeline version.

For this, we will require the pipeline version id, the workspace id, and the model config ids (which will be empty as not required).

# get the pipeline version
pipeline_version_id = pipeline.versions()[-1].id()
display(pipeline_version_id)

pipeline_id = pipeline.id()
display(pipeline_id)
headers = {
    "Authorization": wl.auth._bearer_token_str(),
    "Content-Type": "application/json",
}

url = f"{wl.api_endpoint}/v1/api/pipelines/publish"
response = requests.post(
    url,
    headers=headers,
    json={"pipeline_id": 1, 
          "pipeline_version_id": pipeline_version_id, 
          "model_config_ids": [edge_demo_model.id()]
          }
    )
display(response.json())
7

7

{'id': 3,
 'pipeline_version_id': 7,
 'pipeline_version_name': 'a5752acc-9334-4cac-8b34-471979b55d61',
 'status': 'PendingPublish',
 'created_at': '2023-10-31T20:37:25.516351+00:00',
 'updated_at': '2023-10-31T20:37:25.516351+00:00',
 'created_by': 'b3deff28-04d0-41b8-a04f-b5cf610d6ce9',
 'pipeline_url': None,
 'engine_url': None,
 'helm': None,
 'engine_config': {'engine': {'resources': {'limits': {'cpu': 4.0,
     'memory': '3Gi'},
    'requests': {'cpu': 4.0, 'memory': '3Gi'}}},
  'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'},
    'requests': {'cpu': 0.2, 'memory': '512Mi'}}},
  'engineAux': {}},
 'error': None,
 'user_images': [],
 'docker_run_variables': {}}
publish_id = response.json()['id']
display(publish_id)
3

Get Publish Status

The status of a created Wallaroo pipeline publish is available through the following endpoint.

  • Endpoint:
    • /v1/api/pipelines/get_publish_status
  • Parameters
    • publish_id (Integer Required): The numerical id of the pipeline publish to retrieve.
  • Returns
    • id (Integer): Numerical Wallaroo id of the published pipeline.
    • pipeline_version_id (Integer): Numerical Wallaroo id of the pipeline version published.
    • status: The status of the pipeline publish. Values include:
      • PendingPublish: The pipeline publication is about to be uploaded or is in the process of being uploaded.
      • Published: The pipeline is published and ready for use.
    • created_at (String): When the published pipeline was created.
    • updated_at (String): When the published pipeline was updated.
    • created_by (String): The email address of the Wallaroo user that created the pipeline publish.
    • pipeline_url (String): The URL of the published pipeline in the edge registry. May be null until the status is Published)
    • engine_url (String): The URL of the published pipeline engine in the edge registry. May be null until the status is Published.
    • helm: The Helm chart information including the following fields:
      • reference (String): The Helm reference.
      • chart (String): The Helm chart URL.
      • version (String): The Helm chart version.
    • engine_config (*wallaroo.deployment_config.DeploymentConfig) | The pipeline configuration included with the published pipeline.

Get Publish Status Example

The following example shows retrieving the status of a recently created pipeline publish. Once the published status is Published we know the pipeline is ready for deployment.

headers = {
    "Authorization": wl.auth._bearer_token_str(),
    "Content-Type": "application/json",
}
url = f"{wl.api_endpoint}/v1/api/pipelines/get_publish_status"
response = requests.post(
    url,
    headers=headers,
    json={
        "id": publish_id
        },
)
display(response.json())
pub = response.json()
{'id': 3,
 'pipeline_version_id': 7,
 'pipeline_version_name': 'a5752acc-9334-4cac-8b34-471979b55d61',
 'status': 'Publishing',
 'created_at': '2023-10-31T20:37:25.516351+00:00',
 'updated_at': '2023-10-31T20:37:25.516351+00:00',
 'created_by': 'b3deff28-04d0-41b8-a04f-b5cf610d6ce9',
 'pipeline_url': None,
 'engine_url': None,
 'helm': None,
 'engine_config': {'engine': {'resources': {'limits': {'cpu': 4.0,
     'memory': '3Gi'},
    'requests': {'cpu': 4.0, 'memory': '3Gi'}}},
  'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'},
    'requests': {'cpu': 0.2, 'memory': '512Mi'}}},
  'engineAux': {}},
 'error': None,
 'user_images': [],
 'docker_run_variables': {}}

List Publishes for a Pipeline

A list of publishes created for a specific pipeline is retrieved through the following endpoint.

  • Endpoint:
    • /v1/api/pipelines/list_publishes_for_pipeline
  • Parameters
    • publish_id (Integer Required): The numerical id of the pipeline to retrieve all publishes for.
  • Returns a List of pipeline publishes with the following fields:
    • id (Integer): Numerical Wallaroo id of the published pipeline.
    • pipeline_version_id (Integer): Numerical Wallaroo id of the pipeline version published.
    • status: The status of the pipeline publish. Values include:
      • PendingPublish: The pipeline publication is about to be uploaded or is in the process of being uploaded.
      • Published: The pipeline is published and ready for use.
    • created_at (String): When the published pipeline was created.
    • updated_at (String): When the published pipeline was updated.
    • created_by (String): The email address of the Wallaroo user that created the pipeline publish.
    • pipeline_url (String): The URL of the published pipeline in the edge registry. May be null until the status is Published)
    • engine_url (String): The URL of the published pipeline engine in the edge registry. May be null until the status is Published.
    • helm: The Helm chart information including the following fields:
      • reference (String): The Helm reference.
      • chart (String): The Helm chart URL.
      • version (String): The Helm chart version.
    • engine_config (*wallaroo.deployment_config.DeploymentConfig) | The pipeline configuration included with the published pipeline.

List Publishes for a Pipeline Example

headers = {
    "Authorization": wl.auth._bearer_token_str(),
    "Content-Type": "application/json",
}

url = f"{wl.api_endpoint}/v1/api/pipelines/list_publishes_for_pipeline"

response = requests.post(
    url,
    headers=headers,
    json={"pipeline_id": pipeline_id},
)
display(response.json())
{'publishes': [{'id': 3,
   'pipeline_version_id': 7,
   'pipeline_version_name': 'a5752acc-9334-4cac-8b34-471979b55d61',
   'status': 'Publishing',
   'created_at': '2023-10-31T20:37:25.516351+00:00',
   'updated_at': '2023-10-31T20:37:25.516351+00:00',
   'created_by': 'b3deff28-04d0-41b8-a04f-b5cf610d6ce9',
   'pipeline_url': None,
   'engine_url': None,
   'helm': None,
   'engine_config': {'engine': {'resources': {'limits': {'cpu': 4.0,
       'memory': '3Gi'},
      'requests': {'cpu': 4.0, 'memory': '3Gi'}}},
    'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'},
      'requests': {'cpu': 0.2, 'memory': '512Mi'}}},
    'engineAux': {}},
   'error': None,
   'user_images': [],
   'docker_run_variables': {}}],
 'edges': []}

DevOps Deployment

We now have our pipeline published to our Edge Registry service. We can deploy this in a x86 environment running Docker that is logged into the same registry service that we deployed to.

For more details, check with the documentation on your artifact service. The following are provided for the three major cloud services:

Add Edge Location

Wallaroo Servers can optionally connect to the Wallaroo Ops instance and transmit their inference results. These are added to the pipeline logs for the published pipeline the Wallaroo Server is associated with.

Add Publish Edge

Edges are added to an existing pipeline publish with the following endpoint.

  • Endpoint
    • /v1/api/pipelines/add_edge_to_publish
  • Parameters
    • name (String Required): The name of the edge. This must be a unique value across all edges in the Wallaroo instance.
    • pipeline_publish_id (Integer Required): The numerical identifier of the pipeline publish to add this edge to.
    • tags (List[String] Required): A list of optional tags.
  • Returns
    • id (Integer): The integer ID of the pipeline publish.
    • created_at: (String): The DateTime of the pipeline publish.
    • docker_run_variables (String) The Docker variables in base64 encoded format that include the following: The BUNDLE_VERSION, EDGE_NAME, JOIN_TOKEN_, OPSCENTER_HOST, PIPELINE_URL, and WORKSPACE_ID.
    • engine_config (String): The Wallaroo wallaroo.deployment_config.DeploymentConfig for the pipeline.
    • pipeline_version_id (Integer): The integer identifier of the pipeline version published.
    • status (String): The status of the publish. Published is a successful publish.
    • updated_at (DateTime): The DateTime when the pipeline publish was updated.
    • user_images (List[String]): User images used in the pipeline publish.
    • created_by (String): The UUID of the Wallaroo user that created the pipeline publish.
    • engine_url (String): The URL for the published pipeline’s Wallaroo engine in the OCI registry.
    • error (String): Any errors logged.
    • helm (String): The helm chart, helm reference and helm version.
    • pipeline_url (String): The URL for the published pipeline’s container in the OCI registry.
    • pipeline_version_name (String): The UUID identifier of the pipeline version published.
    • additional_properties (String): Any additional properties.
headers = {
    "Authorization": wl.auth._bearer_token_str(),
    "Content-Type": "application/json",
}

edge_name = f"ccfraud-observability-api{suffix_random}"

url = f"{wl.api_endpoint}/v1/api/pipelines/add_edge_to_publish"

response = requests.post(
    url,
    headers=headers,
    json={
        "pipeline_publish_id": publish_id,
        "name": edge_name,
        "tags": []
    }
)
display(response.json())
{'id': 3,
 'pipeline_version_id': 7,
 'pipeline_version_name': 'a5752acc-9334-4cac-8b34-471979b55d61',
 'status': 'Published',
 'created_at': '2023-10-31T20:37:25.516351+00:00',
 'updated_at': '2023-10-31T20:37:25.516351+00:00',
 'created_by': 'b3deff28-04d0-41b8-a04f-b5cf610d6ce9',
 'pipeline_url': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/pipelines/edge-pipeline:a5752acc-9334-4cac-8b34-471979b55d61',
 'engine_url': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4092',
 'helm': {'reference': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts@sha256:4197aaf0beccfc7f935e93c60338aa043d84dddaf4deaeadb000a5cdb4c7ab33',
  'chart': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts/edge-pipeline',
  'version': '0.0.1-a5752acc-9334-4cac-8b34-471979b55d61',
  'values': {'edgeBundle': 'ZXhwb3J0IEJVTkRMRV9WRVJTSU9OPTEKZXhwb3J0IEVER0VfTkFNRT1jY2ZyYXVkLW9ic2VydmFiaWxpdHktYXBpbnZ3aApleHBvcnQgSk9JTl9UT0tFTj1jMmFmNjgxNC0yZGI4LTRmNDgtOGJmMS03NzIwMTkxODhhMzEKZXhwb3J0IE9QU0NFTlRFUl9IT1NUPXByb2R1Y3QtdWF0LWVlLmVkZ2Uud2FsbGFyb29jb21tdW5pdHkubmluamEKZXhwb3J0IFBJUEVMSU5FX1VSTD11cy1jZW50cmFsMS1kb2NrZXIucGtnLmRldi93YWxsYXJvby1kZXYtMjUzODE2L3VhdC9waXBlbGluZXMvZWRnZS1waXBlbGluZTphNTc1MmFjYy05MzM0LTRjYWMtOGIzNC00NzE5NzliNTVkNjEKZXhwb3J0IFdPUktTUEFDRV9JRD0yMQ=='}},
 'engine_config': {'engine': {'resources': {'limits': {'cpu': 4.0,
     'memory': '3Gi'},
    'requests': {'cpu': 4.0, 'memory': '3Gi'}}},
  'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'},
    'requests': {'cpu': 0.2, 'memory': '512Mi'}}},
  'engineAux': {}},
 'error': None,
 'user_images': [],
 'docker_run_variables': {'EDGE_BUNDLE': 'abcde'}}
# used for deployment later
edge_location_publish=response.json()

Remove Edge from Publish

Edges are removed from an existing pipeline publish with the following endpoint.

  • Endpoint
    • /v1/api/pipelines/remove_edge_from_publish
  • Parameters
    • name (String Required): The name of the edge. This must be a unique value across all edges in the Wallaroo instance.
  • Returns
    • null
# adding another edge to remove

headers = {
    "Authorization": wl.auth._bearer_token_str(),
    "Content-Type": "application/json",
}

edge_name2 = f"ccfraud-observability-api2{suffix_random}"

url = f"{wl.api_endpoint}/v1/api/pipelines/add_edge_to_publish"

response = requests.post(
    url,
    headers=headers,
    json={
        "pipeline_publish_id": publish_id,
        "name": edge_name2,
        "tags": []
    }
)
display(response.json())
{'id': 3,
 'pipeline_version_id': 7,
 'pipeline_version_name': 'a5752acc-9334-4cac-8b34-471979b55d61',
 'status': 'Published',
 'created_at': '2023-10-31T20:37:25.516351+00:00',
 'updated_at': '2023-10-31T20:37:25.516351+00:00',
 'created_by': 'b3deff28-04d0-41b8-a04f-b5cf610d6ce9',
 'pipeline_url': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/pipelines/edge-pipeline:a5752acc-9334-4cac-8b34-471979b55d61',
 'engine_url': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4092',
 'helm': {'reference': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts@sha256:4197aaf0beccfc7f935e93c60338aa043d84dddaf4deaeadb000a5cdb4c7ab33',
  'chart': 'us-central1-docker.pkg.dev/wallaroo-dev-253816/uat/charts/edge-pipeline',
  'version': '0.0.1-a5752acc-9334-4cac-8b34-471979b55d61',
  'values': {'edgeBundle': 'ZXhwb3J0IEJVTkRMRV9WRVJTSU9OPTEKZXhwb3J0IEVER0VfTkFNRT1jY2ZyYXVkLW9ic2VydmFiaWxpdHktYXBpMm52d2gKZXhwb3J0IEpPSU5fVE9LRU49NDZhODVmZGYtMzYwZC00MjUxLTk2NTEtNTBkYmRiNDFkNTA1CmV4cG9ydCBPUFNDRU5URVJfSE9TVD1wcm9kdWN0LXVhdC1lZS5lZGdlLndhbGxhcm9vY29tbXVuaXR5Lm5pbmphCmV4cG9ydCBQSVBFTElORV9VUkw9dXMtY2VudHJhbDEtZG9ja2VyLnBrZy5kZXYvd2FsbGFyb28tZGV2LTI1MzgxNi91YXQvcGlwZWxpbmVzL2VkZ2UtcGlwZWxpbmU6YTU3NTJhY2MtOTMzNC00Y2FjLThiMzQtNDcxOTc5YjU1ZDYxCmV4cG9ydCBXT1JLU1BBQ0VfSUQ9MjE='}},
 'engine_config': {'engine': {'resources': {'limits': {'cpu': 4.0,
     'memory': '3Gi'},
    'requests': {'cpu': 4.0, 'memory': '3Gi'}}},
  'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'},
    'requests': {'cpu': 0.2, 'memory': '512Mi'}}},
  'engineAux': {}},
 'error': None,
 'user_images': [],
 'docker_run_variables': {'EDGE_BUNDLE': 'abcde'}}
edge_name2
'ccfraud-observability-api2nvwh'
# remove the edge

headers = {
    "Authorization": wl.auth._bearer_token_str(),
    "Content-Type": "application/json",
}

edge_name2 = f"ccfraud-observability-api2{suffix_random}"

url = f"{wl.api_endpoint}/v1/api/pipelines/remove_edge"

response = requests.post(
    url,
    headers=headers,
    json={
        "name": "ccfraud-observability-api2nvwh",
    }
)
display(response)
<Response [200]>

DevOps - Pipeline Edge Deployment

Once a pipeline is deployed to the Edge Registry service, it can be deployed in environments such as Docker, Kubernetes, or similar container running services by a DevOps engineer.

Docker Deployment

First, the DevOps engineer must authenticate to the same OCI Registry service used for the Wallaroo Edge Deployment registry.

For more details, check with the documentation on your artifact service. The following are provided for the three major cloud services:

For the deployment, the engine URL is specified with the following environmental variables:

  • DEBUG (true|false): Whether to include debug output.
  • OCI_REGISTRY: The URL of the registry service.
  • CONFIG_CPUS: The number of CPUs to use.
  • OCI_USERNAME: The edge registry username.
  • OCI_PASSWORD: The edge registry password or token.
  • PIPELINE_URL: The published pipeline URL.

Docker Deployment Example

Using our sample environment, here’s sample deployment using Docker with a computer vision ML model, the same used in the Wallaroo Use Case Tutorials Computer Vision: Retail tutorials.

docker run -p 8080:8080 \
    -e DEBUG=true -e OCI_REGISTRY={your registry server} \
    -e CONFIG_CPUS=1 \
    -e OCI_USERNAME=oauth2accesstoken \
    -e OCI_PASSWORD={registry token here} \
    -e PIPELINE_URL={your registry server}/pipelines/edge-cv-retail:bf70eaf7-8c11-4b46-b751-916a43b1a555 \
    {your registry server}/engine:v2023.3.0-main-3707

Docker Compose Deployment

For users who prefer to use docker compose, the following sample compose.yaml file is used to launch the Wallaroo Edge pipeline. This is the same used in the Wallaroo Use Case Tutorials Computer Vision: Retail tutorials.

services:
  engine:
    image: {Your Engine URL}
    ports:
      - 8080:8080
    environment:
      PIPELINE_URL: {Your Pipeline URL}
      OCI_REGISTRY: {Your Edge Registry URL}
      OCI_USERNAME:  {Your Registry Username}
      OCI_PASSWORD: {Your Token or Password}
      CONFIG_CPUS: 1

For example:

services:
  engine:
    image: sample-registry.com/engine:v2023.3.0-main-3707
    ports:
      - 8080:8080
    environment:
      PIPELINE_URL: sample-registry.com/pipelines/edge-cv-retail:bf70eaf7-8c11-4b46-b751-916a43b1a555
      OCI_REGISTRY: sample-registry.com
      OCI_USERNAME:  _json_key_base64
      OCI_PASSWORD: abc123
      CONFIG_CPUS: 1

Docker Compose Deployment Example

The deployment and undeployment is then just a simple docker compose up and docker compose down. The following shows an example of deploying the Wallaroo edge pipeline using docker compose.

docker compose up
[+] Running 1/1
 ✔ Container cv_data-engine-1  Recreated                                                                                                                                                                 0.5s
Attaching to cv_data-engine-1
cv_data-engine-1  | Wallaroo Engine - Standalone mode
cv_data-engine-1  | Login Succeeded
cv_data-engine-1  | Fetching manifest and config for pipeline: sample-registry.com/pipelines/edge-cv-retail:bf70eaf7-8c11-4b46-b751-916a43b1a555
cv_data-engine-1  | Fetching model layers
cv_data-engine-1  | digest: sha256:c6c8869645962e7711132a7e17aced2ac0f60dcdc2c7faa79b2de73847a87984
cv_data-engine-1  |   filename: c6c8869645962e7711132a7e17aced2ac0f60dcdc2c7faa79b2de73847a87984
cv_data-engine-1  |   name: resnet-50
cv_data-engine-1  |   type: model
cv_data-engine-1  |   runtime: onnx
cv_data-engine-1  |   version: 693e19b5-0dc7-4afb-9922-e3f7feefe66d
cv_data-engine-1  |
cv_data-engine-1  | Fetched
cv_data-engine-1  | Starting engine
cv_data-engine-1  | Looking for preexisting `yaml` files in //modelconfigs
cv_data-engine-1  | Looking for preexisting `yaml` files in //pipelines

Helm Deployment

Published pipelines can be deployed through the use of helm charts.

Helm deployments take up to two steps - the first step is in retrieving the required values.yaml and making updates to override.

  1. Pull the helm charts from the published pipeline. The two fields are the Helm Chart URL and the Helm Chart version to specify the OCI . This typically takes the format of:
helm pull oci://{published.helm_chart_url} --version {published.helm_chart_version}
  1. Extract the tgz file and copy the values.yaml and copy the values used to edit engine allocations, etc. The following are required for the deployment to run:
ociRegistry:
  registry: {your registry service}
  username:  {registry username here}
  password: {registry token here}

Store this into another file, suc as local-values.yaml.

  1. Create the namespace to deploy the pipeline to. For example, the namespace wallaroo-edge-pipeline would be:
kubectl create -n wallaroo-edge-pipeline
  1. Deploy the helm installation with helm install through one of the following options:

    1. Specify the tgz file that was downloaded and the local values file. For example:

      helm install --namespace {namespace} --values {local values file} {helm install name} {tgz path}
      
    2. Specify the expended directory from the downloaded tgz file.

      helm install --namespace {namespace} --values {local values file} {helm install name} {helm directory path}
      
    3. Specify the Helm Pipeline Helm Chart and the Pipeline Helm Version.

      helm install --namespace {namespace} --values {local values file} {helm install name} oci://{published.helm_chart_url} --version {published.helm_chart_version}
      
  2. Once deployed, the DevOps engineer will have to forward the appropriate ports to the svc/engine-svc service in the specific pipeline. For example, using kubectl port-forward to the namespace ccfraud that would be:

    kubectl port-forward svc/engine-svc -n ccfraud01 8080 --address 0.0.0.0`
    

The following generates a docker run command based on the added edge location example above. Replace $REGISTRYURL, $REGISTRYUSERNAME and $REGISTRYPASSWORD with the appropriate values.

docker_command = f'''
docker run -p 8080:8080 \\
    -e DEBUG=true \\
    -e OCI_REGISTRY=$REGISTRYURL \\
    -e EDGE_BUNDLE={edge_location_publish['docker_run_variables']['EDGE_BUNDLE']} \\
    -e CONFIG_CPUS=1 \\
    -e OCI_USERNAME=$REGISTRYUSERNAME \\
    -e OCI_PASSWORD=$REGISTRYPASSWORD \\
    -e PIPELINE_URL={edge_location_publish['pipeline_url']} \\
    {edge_location_publish['engine_url']}
'''

print(docker_command)

Edge Deployed Pipeline API Endpoints

Once deployed, we can check the pipelines and models available. We’ll use a curl command, but any HTTP based request will work the same way.

The endpoint /pipelines returns:

  • id (String): The name of the pipeline.
  • status (String): The status as either Running, or Error if there are any issues.

For this example, the deployment is made on a machine called testboy.local. Replace this URL with the URL of you edge deployment.

!curl testboy.local:8080/pipelines

The endpoint /models returns a List of models with the following fields:

  • name (String): The model name.
  • sha (String): The sha hash value of the ML model.
  • status (String): The status of either Running or Error if there are any issues.
  • version (String): The model version. This matches the version designation used by Wallaroo to track model versions in UUID format.
!curl testboy.local:8080/models

Edge Inference Endpoint

The inference endpoint takes the following pattern:

  • /pipelines/{pipeline-name}: The pipeline-name is the same as returned from the /pipelines endpoint as id.

Wallaroo inference endpoint URLs accept the following data inputs through the Content-Type header:

  • Content-Type: application/vnd.apache.arrow.file: For Apache Arrow tables.
  • Content-Type: application/json; format=pandas-records: For pandas DataFrame in record format.

Once deployed, we can perform an inference through the deployment URL.

The endpoint returns Content-Type: application/json; format=pandas-records by default with the following fields:

  • check_failures (List[Integer]): Whether any validation checks were triggered. For more information, see Wallaroo SDK Essentials Guide: Pipeline Management: Anomaly Testing.
  • elapsed (List[Integer]): A list of time in nanoseconds for:
    • [0] The time to serialize the input.
    • [1…n] How long each step took.
  • model_name (String): The name of the model used.
  • model_version (String): The version of the model in UUID format.
  • original_data: The original input data. Returns null if the input may be too long for a proper return.
  • outputs (List): The outputs of the inference result separated by data type, where each data type includes:
    • data: The returned values.
    • dim (List[Integer]): The dimension shape returned.
    • v (Integer): The vector shape of the data.
  • pipeline_name (String): The name of the pipeline.
  • shadow_data: Any shadow deployed data inferences in the same format as outputs.
  • time (Integer): The time since UNIX epoch.
!curl -X POST testboy.local:8080/pipelines/edge-pipeline \
    -H "Content-Type: application/vnd.apache.arrow.file" \
    --data-binary @./data/cc_data_1k.arrow > curl_response_edge.df.json
# display the first 20 results

df_results = pd.read_json('./curl_response_edge.df.json', orient="records")
# display(df_results.head(20))
display(df_results.head(20).loc[:, ['time', 'out', 'metadata']])
pipeline.export_logs(
    limit=30000,
    directory='partition-edge-observability',
    file_prefix='edge-logs-api',
    dataset=['time', 'out', 'metadata']
)
# display the head 20 results

df_logs = pd.read_json('./partition-edge-observability/edge-logs-api-1.json', orient="records", lines=True)
# get just the partition
# df_results['partition'] = df_results['metadata'].map(lambda x: x['partition'])
# display(df_results.head(20))
display(df_logs.head(20).loc[:, ['time', 'out.variable', 'metadata.partition']])
display(pd.unique(df_logs['metadata.partition']))

8 - Pipeline Logs MLOps API Tutorial

How to retrieve pipeline logs through the Wallaroo MLOps API.

This tutorial and the assets can be downloaded as part of the Wallaroo Tutorials repository.

Pipeline API Log Tutorial

This tutorial demonstrates Wallaroo Pipeline MLOps API for pipeline log retrieval.

This tutorial will demonstrate how to:

  1. Select or create a workspace, pipeline and upload the control model, and additional testing models.
  2. Add a pipeline step with the champion model, then deploy the pipeline and perform sample inferences.
  3. Retrieve the logs via the Wallaroo MLOps API. These steps will be simplified to only show the API log retrieval method. See the Wallaroo Documentation site for full details.
  4. Swap out the pipeline step with the champion model with a shadow deploy step that compares the champion model against two competitors.
  5. Perform sample inferences with a shadow deployed step, then display the log files through the MLOps API for a shadow deployed pipeline.
  6. Swap out the shadow deployed pipeline step with an A/B pipeline step.
  7. Perform sample inferences with a A/B pipeline step, then display the log files through the MLOps API for an A/B pipeline step.
  8. Undeploy the pipeline.

This tutorial provides the following:

  • Models:
    • models/rf_model.onnx: The champion model that has been used in this environment for some time.
    • models/xgb_model.onnx and models/gbr_model.onnx: Rival models that will be tested against the champion.
  • Data:
    • data/xtest-1.df.json and data/xtest-1k.df.json: DataFrame JSON inference inputs with 1 input and 1,000 inputs.
    • data/xtest-1k.arrow: Apache Arrow inference inputs with 1 input and 1,000 inputs.

Prerequisites

  • A deployed Wallaroo instance
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.
    • pandas: Pandas, mainly used for Pandas DataFrame
    • pyarrow: Pyarrow for Apache Arrow support

Initial Steps

Import libraries

The first step is to import the libraries needed for this notebook.

import wallaroo
from wallaroo.object import EntityNotFoundError

import pyarrow as pa

from IPython.display import display

# used to display DataFrame information without truncating
from IPython.display import display
import pandas as pd
pd.set_option('display.max_colwidth', None)

import datetime
import requests

Connect to the Wallaroo Instance

The first step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). If logging in externally, update the wallarooPrefix and wallarooSuffix variables with the proper DNS information. For more information on Wallaroo Client settings, see the Client Connection guide.

# Login through local Wallaroo instance

wl = wallaroo.Client()

Wallaroo MLOps API URL

API URL

The variable APIURL is used to specify the connection to the Wallaroo instance’s MLOps API URL, and is composed of the Wallaroo DNS prefix and suffix. For full details, see the Wallaroo API Connection Guide
.

For our examples, we will use the Wallaroo SDK to retrieve the API endpoint via the wl.api_endpoint() method.

display(wl.api_endpoint)
'https://doc-test.api.wallarooexample.ai'

Create Workspace

We will create a workspace to manage our pipeline and models. The following variables will set the name of our sample workspace then set it as the current workspace.

workspace_name = 'logapiworkspace'
main_pipeline_name = 'logapipipeline'
model_name_control = 'logapicontrol'
model_file_name_control = './models/rf_model.onnx'
def get_workspace(name, client):
    workspace = None
    for ws in client.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = client.create_workspace(name)
    return workspace
workspace = get_workspace(workspace_name, wl)

wl.set_current_workspace(workspace)

workspace_id = workspace.id()

Standard Pipeline

Upload The Champion Model

For our example, we will upload the champion model that has been trained to derive house prices from a variety of inputs. The model file is rf_model.onnx, and is uploaded with the name housingcontrol.

housing_model_control = (wl.upload_model(model_name_control, 
                                         model_file_name_control, 
                                         framework=wallaroo.framework.Framework.ONNX)
                                         .configure(tensor_fields=["tensor"])
                        )

Build the Pipeline

This pipeline is made to be an example of an existing situation where a model is deployed and being used for inferences in a production environment. We’ll call it housepricepipeline, set housingcontrol as a pipeline step, then run a few sample inferences.

mainpipeline = wl.build_pipeline(main_pipeline_name)
mainpipeline.undeploy()
# in case this pipeline was run before
mainpipeline.clear()
mainpipeline.add_model_step(housing_model_control).deploy()
namelogapipipeline
created2024-03-07 17:14:00.354660+00:00
last_updated2024-03-07 17:14:01.362335+00:00
deployedTrue
archNone
accelNone
tags
versionsc6c4e074-9525-4c51-8496-d2ed4c0ec714, 9739a581-ea94-4ba6-bcef-169e076253d2
stepslogapicontrol
publishedFalse

Testing

We’ll pass in two DataFrame formatted inference requests which are returned as a pandas DataFrame. Then roughly 1,000 inferences as a batch as an Apache Arrow table, which is returned as an arrow table, which we’ll convert into a pandas DataFrame to display the first 20 results.

dataframe_start = datetime.datetime.now(datetime.timezone.utc)

normal_input = pd.DataFrame.from_records({"tensor": [[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0]]})
result = mainpipeline.infer(normal_input)
display(result)

large_house_input = pd.DataFrame.from_records({'tensor': [[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0]]})
large_house_result = mainpipeline.infer(large_house_input)
display(large_house_result)

import time
time.sleep(10)
dataframe_end = datetime.datetime.now(datetime.timezone.utc)

# generating multiple log entries
batch_inferences = mainpipeline.infer_from_file('./data/xtest-1k.arrow')
batch_inferences = mainpipeline.infer_from_file('./data/xtest-1k.arrow')
batch_inferences = mainpipeline.infer_from_file('./data/xtest-1k.arrow')

large_inference_result = batch_inferences.to_pandas()
display(large_inference_result.head(20))
timein.tensorout.variableanomaly.count
02024-03-07 17:14:17.592[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
timein.tensorout.variableanomaly.count
02024-03-07 17:14:17.811[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.4]0
timein.tensorout.variableanomaly.count
02024-03-07 17:14:28.829[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.75]0
12024-03-07 17:14:28.829[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0, 8.0, 2170.0, 0.0, 47.7109, -122.017, 2310.0, 7419.0, 6.0, 0.0, 0.0][615094.56]0
22024-03-07 17:14:28.829[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, 8.0, 880.0, 420.0, 47.5893, -122.317, 1300.0, 824.0, 6.0, 0.0, 0.0][448627.72]0
32024-03-07 17:14:28.829[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2500.0, 0.0, 47.5759, -121.994, 2560.0, 8475.0, 24.0, 0.0, 0.0][758714.2]0
42024-03-07 17:14:28.829[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4.0, 7.0, 2200.0, 0.0, 47.7659, -122.341, 1690.0, 8038.0, 62.0, 0.0, 0.0][513264.7]0
52024-03-07 17:14:28.829[3.0, 2.0, 2140.0, 4923.0, 1.0, 0.0, 0.0, 4.0, 8.0, 1070.0, 1070.0, 47.6902, -122.339, 1470.0, 4923.0, 86.0, 0.0, 0.0][668288.0]0
62024-03-07 17:14:28.829[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0, 9.0, 3140.0, 450.0, 47.6763, -122.267, 2100.0, 6250.0, 9.0, 0.0, 0.0][1004846.5]0
72024-03-07 17:14:28.829[3.0, 2.0, 1280.0, 960.0, 2.0, 0.0, 0.0, 3.0, 9.0, 1040.0, 240.0, 47.602, -122.311, 1280.0, 1173.0, 0.0, 0.0, 0.0][684577.2]0
82024-03-07 17:14:28.829[4.0, 2.5, 2820.0, 15000.0, 2.0, 0.0, 0.0, 4.0, 9.0, 2820.0, 0.0, 47.7255, -122.101, 2440.0, 15000.0, 29.0, 0.0, 0.0][727898.1]0
92024-03-07 17:14:28.829[3.0, 2.25, 1790.0, 11393.0, 1.0, 0.0, 0.0, 3.0, 8.0, 1790.0, 0.0, 47.6297, -122.099, 2290.0, 11894.0, 36.0, 0.0, 0.0][559631.1]0
102024-03-07 17:14:28.829[3.0, 1.5, 1010.0, 7683.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1010.0, 0.0, 47.72, -122.318, 1550.0, 7271.0, 61.0, 0.0, 0.0][340764.53]0
112024-03-07 17:14:28.829[3.0, 2.0, 1270.0, 1323.0, 3.0, 0.0, 0.0, 3.0, 8.0, 1270.0, 0.0, 47.6934, -122.342, 1330.0, 1323.0, 8.0, 0.0, 0.0][442168.06]0
122024-03-07 17:14:28.829[4.0, 1.75, 2070.0, 9120.0, 1.0, 0.0, 0.0, 4.0, 7.0, 1250.0, 820.0, 47.6045, -122.123, 1650.0, 8400.0, 57.0, 0.0, 0.0][630865.6]0
132024-03-07 17:14:28.829[4.0, 1.0, 1620.0, 4080.0, 1.5, 0.0, 0.0, 3.0, 7.0, 1620.0, 0.0, 47.6696, -122.324, 1760.0, 4080.0, 91.0, 0.0, 0.0][559631.1]0
142024-03-07 17:14:28.829[4.0, 3.25, 3990.0, 9786.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3990.0, 0.0, 47.6784, -122.026, 3920.0, 8200.0, 10.0, 0.0, 0.0][909441.1]0
152024-03-07 17:14:28.829[4.0, 2.0, 1780.0, 19843.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1780.0, 0.0, 47.4414, -122.154, 2210.0, 13500.0, 52.0, 0.0, 0.0][313096.0]0
162024-03-07 17:14:28.829[4.0, 2.5, 2130.0, 6003.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2130.0, 0.0, 47.4518, -122.12, 1940.0, 4529.0, 11.0, 0.0, 0.0][404040.8]0
172024-03-07 17:14:28.829[3.0, 1.75, 1660.0, 10440.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1040.0, 620.0, 47.4448, -121.77, 1240.0, 10380.0, 36.0, 0.0, 0.0][292859.5]0
182024-03-07 17:14:28.829[3.0, 2.5, 2110.0, 4118.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2110.0, 0.0, 47.3878, -122.153, 2110.0, 4044.0, 25.0, 0.0, 0.0][338357.88]0
192024-03-07 17:14:28.829[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1300.0, 900.0, 47.6845, -122.201, 2320.0, 10814.0, 94.0, 0.0, 0.0][682284.6]0

Standard Pipeline Logs

Pipeline logs are retrieved through the Wallaroo MLOps API with the following request.

  • REQUEST URL
    • v1/api/pipelines/get_logs
  • Headers
    • Accept:
      • application/json; format=pandas-records: For the logs returned as pandas DataFrame
      • application/vnd.apache.arrow.file: for the logs returned as Apache Arrow
  • PARAMETERS
    • pipeline_name (String Required): The name of the pipeline.
    • workspace_id (Integer Required): The numerical identifier of the workspace.
    • cursor (String Optional): Cursor returned with a previous page of results from a pipeline log request, used to retrieve the next page of information.
    • order (String Optional Default: Desc): The order for log inserts returned. Valid values are:
      • Asc: In chronological order of inserts.
      • Desc: In reverse chronological order of inserts.
    • page_size (Integer Optional Default: 1000.): Max records per page.
    • start_time (String Optional): The start time of the period to retrieve logs for in RFC 3339 format for DateTime. Must be combined with end_time.
    • end_time (String Optional): The end time of the period to retrieve logs for in RFC 3339 format for DateTime. Must be combined with start_time.
  • RETURNS
    • The logs are returned by default as 'application/json; format=pandas-records' format. To request the logs as Apache Arrow tables, set the submission header Accept to application/vnd.apache.arrow.file.
    • Headers:
      • x-iteration-cursor: Used to retrieve the next page of results. This is not included if x-iteration-status is All.
      • x-iteration-status: Informs whether there are more records available outside of this log request parameters.
        • All: This page includes all logs available from this request. If x-iteration-status is All, then x-iteration-cursor is not provided.
        • SchemaChange: A change in the log schema caused by actions such as pipeline version, etc.
        • RecordLimited: The number of records exceeded from the page size, more records can be requested as the next page. There may be more records available to retrieve OR the record limit was reached for this request even if no more records are available in next cursor request.
        • ByteLimited: The number of records exceeded the pipeline log limit which is around 100K.
# retrieve the authorization token
headers = wl.auth.auth_header()

url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

# Standard log retrieval

data = {
    'pipeline_name': main_pipeline_name,
    'workspace_id': workspace_id
}

response = requests.post(url, headers=headers, json=data)
standard_logs = pd.DataFrame.from_records(response.json())

display(len(standard_logs))
display(standard_logs.head(5).loc[:, ["time", "in", "out"]])
cursor = response.headers['x-iteration-cursor']
2
timeinout
01709831657592{'tensor': [4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0]}{'variable': [718013.7]}
11709831657811{'tensor': [4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0]}{'variable': [1514079.4]}
# Get next page of results as an arrow table

# retrieve the authorization token
headers = wl.auth.auth_header()
headers['Accept']="application/vnd.apache.arrow.file"

url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

# Standard log retrieval

data = {
    'pipeline_name': main_pipeline_name,
    'workspace_id': workspace_id,
    'cursor': cursor
}

response = requests.post(url, headers=headers, json=data)

# Arrow table is retrieved 
with pa.ipc.open_file(response.content) as reader:
    arrow_table = reader.read_all()

# convert to Polars DataFrame and display the first 5 rows
display(arrow_table.to_pandas().head(5).loc[:,["time", "out"]])
timeout
01709831668232{'variable': [718013.75]}
11709831668232{'variable': [615094.56]}
21709831668232{'variable': [448627.72]}
31709831668232{'variable': [758714.2]}
41709831668232{'variable': [513264.7]}
# Retrieve logs from specific date/time to only get the two DataFrame input inferences in ascending format

# retrieve the authorization token
headers = wl.auth.auth_header()

url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

# Standard log retrieval

data = {
    'pipeline_name': main_pipeline_name,
    'workspace_id': workspace_id,
    'order': 'Asc',
    'start_time': f'{dataframe_start.isoformat()}',
    'end_time': f'{dataframe_end.isoformat()}'
}

response = requests.post(url, headers=headers, json=data)
standard_logs = pd.DataFrame.from_records(response.json())

display(standard_logs.head(5).loc[:, ["time", "in", "out"]])
display(response.headers)
timeinout
01709831657592{'tensor': [4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0]}{'variable': [718013.7]}
11709831657811{'tensor': [4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0]}{'variable': [1514079.4]}
{'content-type': 'application/json; format=pandas-records', 'x-iteration-status': 'All', 'content-length': '877', 'date': 'Thu, 07 Mar 2024 17:14:29 GMT', 'x-envoy-upstream-service-time': '4', 'server': 'envoy'}

Shadow Deploy Pipelines

Let’s assume that after analyzing the assay information we want to test two challenger models to our control. We do that with the Shadow Deploy pipeline step.

In Shadow Deploy, the pipeline step is added with the add_shadow_deploy method, with the champion model listed first, then an array of challenger models after. All inference data is fed to all models, with the champion results displayed in the out.variable column, and the shadow results in the format out_{model name}.variable. For example, since we named our challenger models housingchallenger01 and housingchallenger02, the columns out_housingchallenger01.variable and out_housingchallenger02.variable have the shadow deployed model results.

For this example, we will remove the previous pipeline step, then replace it with a shadow deploy step with rf_model.onnx as our champion, and models xgb_model.onnx and gbr_model.onnx as the challengers. We’ll deploy the pipeline and prepare it for sample inferences.

# Upload the challenger models

model_name_challenger01 = 'logcontrolchallenger01'
model_file_name_challenger01 = './models/xgb_model.onnx'

model_name_challenger02 = 'logcontrolchallenger02'
model_file_name_challenger02 = './models/gbr_model.onnx'

housing_model_challenger01 = (wl.upload_model(model_name_challenger01, 
                                              model_file_name_challenger01, 
                                              framework=wallaroo.framework.Framework.ONNX)
                                              .configure(tensor_fields=["tensor"])
                            )
housing_model_challenger02 = (wl.upload_model(model_name_challenger02, 
                                              model_file_name_challenger02, 
                                              framework=wallaroo.framework.Framework.ONNX).configure(tensor_fields=["tensor"])
                                )
# Undeploy the pipeline
mainpipeline.undeploy()

mainpipeline.clear()

# Add the new shadow deploy step with our challenger models
mainpipeline.add_shadow_deploy(housing_model_control, [housing_model_challenger01, housing_model_challenger02])

# Deploy the pipeline with the new shadow step
mainpipeline.deploy()
namelogapipipeline
created2024-03-07 17:14:00.354660+00:00
last_updated2024-03-07 17:16:26.023654+00:00
deployedTrue
archNone
accelNone
tags
versions3690d26a-d9d8-4b48-b0a7-afcac1d7c6b9, c6c4e074-9525-4c51-8496-d2ed4c0ec714, 9739a581-ea94-4ba6-bcef-169e076253d2
stepslogapicontrol
publishedFalse

Shadow Deploy Sample Inference

We’ll now use our same sample data for an inference to our shadow deployed pipeline, then display the first 20 results with just the comparative outputs.

shadow_date_start = datetime.datetime.now(datetime.timezone.utc)

shadow_result = mainpipeline.infer_from_file('./data/xtest-1k.arrow')

shadow_outputs =  shadow_result.to_pandas()
display(shadow_outputs.loc[0:20,['out.variable','out_logcontrolchallenger01.variable','out_logcontrolchallenger02.variable']])

shadow_date_end = datetime.datetime.now(datetime.timezone.utc)
out.variableout_logcontrolchallenger01.variableout_logcontrolchallenger02.variable
0[718013.75][659806.0][704901.9]
1[615094.56][732883.5][695994.44]
2[448627.72][419508.84][416164.8]
3[758714.2][634028.8][655277.2]
4[513264.7][427209.44][426854.66]
5[668288.0][615501.9][632556.1]
6[1004846.5][1139732.5][1100465.2]
7[684577.2][498328.88][528278.06]
8[727898.1][722664.4][659439.94]
9[559631.1][525746.44][534331.44]
10[340764.53][376337.1][377187.2]
11[442168.06][382053.12][403964.3]
12[630865.6][505608.97][528991.3]
13[559631.1][603260.5][612201.75]
14[909441.1][969585.4][893874.7]
15[313096.0][313633.75][318054.94]
16[404040.8][360413.56][357816.75]
17[292859.5][316674.94][294034.7]
18[338357.88][299907.44][323254.3]
19[682284.6][811896.75][770916.7]
20[583765.94][573618.5][549141.4]

Shadow Deploy Logs

Pipelines with a shadow deployed step include the shadow inference result in the same format as the inference result: inference results from shadow deployed models are displayed as out_{model name}.{output variable}.

# Retrieve logs from specific date/time to only get the two DataFrame input inferences in ascending format

# retrieve the authorization token
headers = wl.auth.auth_header()

url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

# Standard log retrieval

data = {
    'pipeline_name': main_pipeline_name,
    'workspace_id': workspace_id,
    'order': 'Asc',
    'start_time': f'{shadow_date_start.isoformat()}',
    'end_time': f'{shadow_date_end.isoformat()}'
}

response = requests.post(url, headers=headers, json=data)
standard_logs = pd.DataFrame.from_records(response.json())

display(standard_logs.head(5).loc[:, ["time", "out", "out_logcontrolchallenger01", "out_logcontrolchallenger02"]])
timeoutout_logcontrolchallenger01out_logcontrolchallenger02
01709831801106{'variable': [718013.75]}{'variable': [659806.0]}{'variable': [704901.9]}
11709831801106{'variable': [615094.56]}{'variable': [732883.5]}{'variable': [695994.44]}
21709831801106{'variable': [448627.72]}{'variable': [419508.84]}{'variable': [416164.8]}
31709831801106{'variable': [758714.2]}{'variable': [634028.8]}{'variable': [655277.2]}
41709831801106{'variable': [513264.7]}{'variable': [427209.44]}{'variable': [426854.66]}

A/B Testing Pipeline

A/B testing allows inference requests to be split between a control model and one or more challenger models. For full details, see the Pipeline Management Guide: A/B Testing.

When the inference results and log entries are displayed, they include the column out._model_split which displays:

FieldTypeDescription
nameStringThe model name used for the inference.
versionStringThe version of the model.
shaStringThe sha hash of the model version.

For this example, the shadow deployed step will be removed and replaced with an A/B Testing step with the ratio 1:1:1, so the control and each of the challenger models will be split randomly between inference requests. A set of sample inferences will be run, then the pipeline logs displayed.

pipeline = (wl.build_pipeline(“randomsplitpipeline-demo”)
.add_random_split([(2, control), (1, challenger)], “session_id”))

ab_date_start = datetime.datetime.now(datetime.timezone.utc)
mainpipeline.undeploy()

# remove the shadow deploy steps
mainpipeline.clear()

# Add the a/b test step to the pipeline
mainpipeline.add_random_split([(1, housing_model_control), (1, housing_model_challenger01), (1, housing_model_challenger02)], "session_id")

mainpipeline.deploy()

# Perform sample inferences of 20 rows and display the results

abtesting_inputs = pd.read_json('./data/xtest-1k.df.json')

for index, row in abtesting_inputs.sample(20).iterrows():
    display(mainpipeline.infer(row.to_frame('tensor').reset_index()).loc[:,["out._model_split", "out.variable"]])

ab_date_end = datetime.datetime.now(datetime.timezone.utc)
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][224316.13]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][241330.17]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][675545.44]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][391424.6]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][767853.5]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"5a205da3-a31f-4758-9626-74da277f060e","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][327108.25]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][338138.0]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][220148.0]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][291799.84]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][706407.4]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"5a205da3-a31f-4758-9626-74da277f060e","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][231846.72]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][428174.94]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"5a205da3-a31f-4758-9626-74da277f060e","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][728114.44]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"5a205da3-a31f-4758-9626-74da277f060e","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][416164.8]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][879092.9]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][441465.72]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"5a205da3-a31f-4758-9626-74da277f060e","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][1532461.0]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][448627.8]
out._model_splitout.variable
0[{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][713485.7]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][1720818.0]

Retrieve A/B Testing Log Files through API

The log files for A/B Testing pipeline inference results contain the model information with the model outputs in the out field.

# Retrieve logs from specific date/time to only get the two DataFrame input inferences in ascending format

# retrieve the authorization token
headers = wl.auth.auth_header()

url = f"{wl.api_endpoint}/v1/api/pipelines/get_logs"

# Standard log retrieval

data = {
    'pipeline_name': main_pipeline_name,
    'workspace_id': workspace_id,
    'order': 'Asc',
    'start_time': f'{ab_date_start.isoformat()}',
    'end_time': f'{ab_date_end.isoformat()}'
}

response = requests.post(url, headers=headers, json=data)
standard_logs = pd.DataFrame.from_records(response.json())

display(standard_logs.head(5).loc[:, ["time", "out"]])
timeout
01709831883585{'_model_split': ['{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}'], 'variable': [224316.13]}
11709831883828{'_model_split': ['{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}'], 'variable': [241330.17]}
21709831884044{'_model_split': ['{"name":"logapicontrol","version":"3a4d6449-64d8-482d-b497-a8c9d9092a8c","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}'], 'variable': [675545.44]}
31709831884273{'_model_split': ['{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}'], 'variable': [391424.6]}
41709831884465{'_model_split': ['{"name":"logcontrolchallenger01","version":"1ec4c975-95bf-4f83-8ef8-37c76fd2f861","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}'], 'variable': [767853.5]}

Undeploy Main Pipeline

With the examples and tutorial complete, we will undeploy the main pipeline and return the resources back to the Wallaroo instance.

mainpipeline.undeploy()
namelogapipipeline
created2024-03-07 17:14:00.354660+00:00
last_updated2024-03-07 17:17:33.498224+00:00
deployedFalse
archNone
accelNone
tags
versions7fba4700-0076-48d8-924c-bbc18d030f47, 3690d26a-d9d8-4b48-b0a7-afcac1d7c6b9, c6c4e074-9525-4c51-8496-d2ed4c0ec714, 9739a581-ea94-4ba6-bcef-169e076253d2
stepslogapicontrol
publishedFalse

9 - Pipeline Logs Tutorial

How to retrieve pipeline logs as DataFrame, Apache Arrow tables, and saved to files.

This tutorial and the assets can be downloaded as part of the Wallaroo Tutorials repository.

Pipeline Log Tutorial

This tutorial demonstrates Wallaroo Pipeline logs and

This tutorial will demonstrate how to:

  1. Select or create a workspace, pipeline and upload the control model, then additional models for A/B Testing and Shadow Deploy.
  2. Add a pipeline step with the champion model, then deploy the pipeline and perform sample inferences.
  3. Display the various log types for a standard deployed pipeline.
  4. Swap out the pipeline step with the champion model with a shadow deploy step that compares the champion model against two competitors.
  5. Perform sample inferences with a shadow deployed step, then display the log files for a shadow deployed pipeline.
  6. Swap out the shadow deployed pipeline step with an A/B pipeline step.
  7. Perform sample inferences with a A/B pipeline step, then display the log files for an A/B pipeline step.
  8. Undeploy the pipeline.

This tutorial provides the following:

  • Models:
    • models/rf_model.onnx: The champion model that has been used in this environment for some time.
    • models/xgb_model.onnx and models/gbr_model.onnx: Rival models that will be tested against the champion.
  • Data:
    • data/xtest-1.df.json and data/xtest-1k.df.json: DataFrame JSON inference inputs with 1 input and 1,000 inputs.
    • data/xtest-1k.arrow: Apache Arrow inference inputs with 1 input and 1,000 inputs.

Prerequisites

  • A deployed Wallaroo instance
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.
    • pandas: Pandas, mainly used for Pandas DataFrame
    • pyarrow: Pyarrow for Apache Arrow support

Initial Steps

Import libraries

The first step is to import the libraries needed for this notebook.

import wallaroo
from wallaroo.object import EntityNotFoundError

import pyarrow as pa

from IPython.display import display

# used to display DataFrame information without truncating
from IPython.display import display
import pandas as pd
pd.set_option('display.max_colwidth', None)

import datetime

import os

Connect to the Wallaroo Instance

The first step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

# Login through local Wallaroo instance

wl = wallaroo.Client()

Create Workspace

We will create a workspace to manage our pipeline and models. The following variables will set the name of our sample workspace then set it as the current workspace.

workspace_name = 'logworkspace'
main_pipeline_name = 'logpipeline-test'
model_name_control = 'logcontrol'
model_file_name_control = './models/rf_model.onnx'
def get_workspace(name):
    workspace = None
    for ws in wl.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = wl.create_workspace(name)
    return workspace
workspace = get_workspace(workspace_name)

wl.set_current_workspace(workspace)
{'name': 'logworkspace', 'id': 27, 'archived': False, 'created_by': 'c97d480f-6064-4537-b18e-40fb1864b4cd', 'created_at': '2024-02-09T16:21:07.131681+00:00', 'models': [], 'pipelines': []}

Standard Pipeline

Upload The Champion Model

For our example, we will upload the champion model that has been trained to derive house prices from a variety of inputs. The model file is rf_model.onnx, and is uploaded with the name housingcontrol.

housing_model_control = (wl.upload_model(model_name_control, 
                                         model_file_name_control, 
                                         framework=wallaroo.framework.Framework.ONNX)
                                         .configure(tensor_fields=["tensor"])
                        )

Build the Pipeline

This pipeline is made to be an example of an existing situation where a model is deployed and being used for inferences in a production environment. We’ll call it housepricepipeline, set housingcontrol as a pipeline step, then run a few sample inferences.

mainpipeline = wl.build_pipeline(main_pipeline_name)
# in case this pipeline was run before
mainpipeline.clear()
mainpipeline.add_model_step(housing_model_control)

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.25)\
    .build()

mainpipeline.deploy(deployment_config=deploy_config)
Waiting for deployment - this will take up to 45s .......... ok
namelogpipeline-test
created2024-02-09 16:21:09.406182+00:00
last_updated2024-02-09 16:30:53.067304+00:00
deployedTrue
archNone
tags
versionse2b9d903-4015-4d09-902b-9150a7196cea, 9df38be1-d2f4-4be1-9022-8f0570a238b9, 3078b49f-3eff-48d1-8d9b-a8780b329ecc, 21bff9df-828f-40e7-8a22-449a2e636b44, f78a7030-bd25-4bf7-ba0d-a18cfe3790e0, 10c1ac25-d626-4413-8d5d-1bed42d0e65c, b179b693-b6b6-4ff9-b2a4-2a639d88bc9b, da7b9cf0-81e8-452b-8b70-689406dc9548, a9a9b62c-9d37-427f-99af-67725558bf9b, 1c14591a-96b4-4059-bb63-2d2bc4e308d5, add660ac-0ebf-4a24-bb6d-6cdc875866c8
stepslogcontrol
publishedFalse

Testing

We’ll use two inferences as a quick sample test - one that has a house that should be determined around \$700k, the other with a house determined to be around \$1.5 million. We’ll also save the start and end periods for these events to for later log functionality.

dataframe_start = datetime.datetime.now()

normal_input = pd.DataFrame.from_records({"tensor": [
            [
                4.0, 
                2.5, 
                2900.0, 
                5505.0, 
                2.0, 
                0.0, 
                0.0, 
                3.0, 
                8.0, 
                2900.0, 
                0.0, 
                47.6063, 
                -122.02, 
                2970.0, 
                5251.0, 
                12.0, 
                0.0, 
                0.0
            ]
        ]
    }
)
result = mainpipeline.infer(normal_input)
display(result)
timein.tensorout.variableanomaly.count
02024-02-09 16:31:04.817[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
large_house_input = pd.DataFrame.from_records(
    {
        'tensor': [
            [
                4.0, 
                3.0, 
                3710.0, 
                20000.0, 
                2.0, 
                0.0, 
                2.0, 
                5.0, 
                10.0, 
                2760.0, 
                950.0, 
                47.6696, 
                -122.261, 
                3970.0, 
                20000.0, 
                79.0, 
                0.0, 
                0.0
            ]
        ]
    }
)
large_house_result = mainpipeline.infer(large_house_input)
display(large_house_result)

import time
time.sleep(10)
dataframe_end = datetime.datetime.now()
timein.tensorout.variableanomaly.count
02024-02-09 16:31:04.917[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.4]0

As one last sample, we’ll run through roughly 1,000 inferences at once and show a few of the results. For this example we’ll use an Apache Arrow table, which has a smaller file size compared to uploading a pandas DataFrame JSON file. The inference result is returned as an arrow table, which we’ll convert into a pandas DataFrame to display the first 20 results.

batch_inferences = mainpipeline.infer_from_file('./data/xtest-1k.arrow')

large_inference_result = batch_inferences.to_pandas()
display(large_inference_result.head(20))
timein.tensorout.variableanomaly.count
02024-02-09 16:31:15.018[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.75]0
12024-02-09 16:31:15.018[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0, 8.0, 2170.0, 0.0, 47.7109, -122.017, 2310.0, 7419.0, 6.0, 0.0, 0.0][615094.56]0
22024-02-09 16:31:15.018[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, 8.0, 880.0, 420.0, 47.5893, -122.317, 1300.0, 824.0, 6.0, 0.0, 0.0][448627.72]0
32024-02-09 16:31:15.018[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2500.0, 0.0, 47.5759, -121.994, 2560.0, 8475.0, 24.0, 0.0, 0.0][758714.2]0
42024-02-09 16:31:15.018[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4.0, 7.0, 2200.0, 0.0, 47.7659, -122.341, 1690.0, 8038.0, 62.0, 0.0, 0.0][513264.7]0
52024-02-09 16:31:15.018[3.0, 2.0, 2140.0, 4923.0, 1.0, 0.0, 0.0, 4.0, 8.0, 1070.0, 1070.0, 47.6902, -122.339, 1470.0, 4923.0, 86.0, 0.0, 0.0][668288.0]0
62024-02-09 16:31:15.018[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0, 9.0, 3140.0, 450.0, 47.6763, -122.267, 2100.0, 6250.0, 9.0, 0.0, 0.0][1004846.5]0
72024-02-09 16:31:15.018[3.0, 2.0, 1280.0, 960.0, 2.0, 0.0, 0.0, 3.0, 9.0, 1040.0, 240.0, 47.602, -122.311, 1280.0, 1173.0, 0.0, 0.0, 0.0][684577.2]0
82024-02-09 16:31:15.018[4.0, 2.5, 2820.0, 15000.0, 2.0, 0.0, 0.0, 4.0, 9.0, 2820.0, 0.0, 47.7255, -122.101, 2440.0, 15000.0, 29.0, 0.0, 0.0][727898.1]0
92024-02-09 16:31:15.018[3.0, 2.25, 1790.0, 11393.0, 1.0, 0.0, 0.0, 3.0, 8.0, 1790.0, 0.0, 47.6297, -122.099, 2290.0, 11894.0, 36.0, 0.0, 0.0][559631.1]0
102024-02-09 16:31:15.018[3.0, 1.5, 1010.0, 7683.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1010.0, 0.0, 47.72, -122.318, 1550.0, 7271.0, 61.0, 0.0, 0.0][340764.53]0
112024-02-09 16:31:15.018[3.0, 2.0, 1270.0, 1323.0, 3.0, 0.0, 0.0, 3.0, 8.0, 1270.0, 0.0, 47.6934, -122.342, 1330.0, 1323.0, 8.0, 0.0, 0.0][442168.06]0
122024-02-09 16:31:15.018[4.0, 1.75, 2070.0, 9120.0, 1.0, 0.0, 0.0, 4.0, 7.0, 1250.0, 820.0, 47.6045, -122.123, 1650.0, 8400.0, 57.0, 0.0, 0.0][630865.6]0
132024-02-09 16:31:15.018[4.0, 1.0, 1620.0, 4080.0, 1.5, 0.0, 0.0, 3.0, 7.0, 1620.0, 0.0, 47.6696, -122.324, 1760.0, 4080.0, 91.0, 0.0, 0.0][559631.1]0
142024-02-09 16:31:15.018[4.0, 3.25, 3990.0, 9786.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3990.0, 0.0, 47.6784, -122.026, 3920.0, 8200.0, 10.0, 0.0, 0.0][909441.1]0
152024-02-09 16:31:15.018[4.0, 2.0, 1780.0, 19843.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1780.0, 0.0, 47.4414, -122.154, 2210.0, 13500.0, 52.0, 0.0, 0.0][313096.0]0
162024-02-09 16:31:15.018[4.0, 2.5, 2130.0, 6003.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2130.0, 0.0, 47.4518, -122.12, 1940.0, 4529.0, 11.0, 0.0, 0.0][404040.8]0
172024-02-09 16:31:15.018[3.0, 1.75, 1660.0, 10440.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1040.0, 620.0, 47.4448, -121.77, 1240.0, 10380.0, 36.0, 0.0, 0.0][292859.5]0
182024-02-09 16:31:15.018[3.0, 2.5, 2110.0, 4118.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2110.0, 0.0, 47.3878, -122.153, 2110.0, 4044.0, 25.0, 0.0, 0.0][338357.88]0
192024-02-09 16:31:15.018[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1300.0, 900.0, 47.6845, -122.201, 2320.0, 10814.0, 94.0, 0.0, 0.0][682284.6]0

Standard Pipeline Logs

Pipeline logs with standard pipeline steps are retrieved either with:

  • Pipeline logs which returns either a pandas DataFrame or Apache Arrow table.
  • Pipeline export_logs which saves the logs either a pandas DataFrame JSON file or Apache Arrow table.

For full details, see the Wallaroo Documentation Pipeline Log Management guide.

Pipeline Log Method

The Pipeline logs method includes the following parameters. For a complete list, see the Wallaroo SDK Essentials Guide: Pipeline Log Management.

ParameterTypeDescription
limitInt (Optional)Limits how many log records to display. Defaults to 100. If there are more pipeline logs than are being displayed, the Warning message Pipeline log record limit exceeded will be displayed. For example, if 100 log files were requested and there are a total of 1,000, the warning message will be displayed.
start_datetime and end_datetimeDateTime (Optional)Limits logs to all logs between the start and end DateTime parameters. Both parameters must be provided. Submitting a logs() request with only start_datetime or end_datetime will generate an exception.
If start_datetime and end_datetime are provided as parameters, then the records are returned in chronological order, with the oldest record displayed first.
datasetList (OPTIONAL)The datasets to be returned. The datasets available are:
  • *: Default. This translates to ["time", "in", "out", "anomaly"].
  • time: The DateTime of the inference request.
  • in: All inputs listed as in_{variable_name}.
  • out: All outputs listed as out_variable_name.
  • anomaly: Flags whether an anomaly was detected was triggered. 0 indicates no checks were triggered, 1 or greater indicates a an anomaly was detected. was triggered. Each validation is displayed in the returned logs as part of the anomaly dataset as anomaly.{validation_name}. For more information on anomaly detection, see Wallaroo SDK Essentials Guide: Anomaly Detection
  • meta: Returns metadata. IMPORTANT NOTE: See Metadata Requests Restrictions for specifications on how this dataset can be used with other datasets.
    • Returns in the metadata.elapsed field:
      • A list of time in nanoseconds for:
        • The time to serialize the input.
        • How long each step took.
    • Returns in the metadata.last_model field:
      • A dict with each Python step as:
        • model_name: The name of the model in the pipeline step.
        • model_sha : The sha hash of the model in the pipeline step.
    • Returns in the metadata.pipeline_version field:
      • The pipeline version as a UUID value.
  • metadata.elapsed: IMPORTANT NOTE: See Metadata Requests Restrictionsfor specifications on how this dataset can be used with other datasets.
    • Returns in the metadata.elapsed field:
      • A list of time in nanoseconds for:
        • The time to serialize the input.
        • How long each step took.
arrowBoolean (Optional)Defaults to False. If arrow is set to True, then the logs are returned as an Apache Arrow table. If arrow=False, then the logs are returned as a pandas DataFrame.
Pipeline Log Warnings

If the total number of logs the either the set limit or 10 MB in file size, the following warning is returned:

Warning: There are more logs available. Please set a larger limit or request a file using export_logs.

If the total number of logs requested either through the limit or through the start_datetime and end_datetime request is greater than 10 MB in size, the following error is displayed:

Warning: Pipeline log size limit exceeded. Only displaying 509 log messages. Please request a file using export_logs.

The following examples demonstrate displaying the logs, then displaying the logs between the control_model_start and control_model_end periods, then again retrieved as an Arrow table with the logs limited to only 5 entries.

# pipeline log retrieval - reverse chronological order

regular_logs = mainpipeline.logs()

display("Standard Logs")
display(len(regular_logs))
display(regular_logs)

# Display metadata

metadatalogs = mainpipeline.logs(dataset=["time", "out.variable", "metadata"])
display("Metadata Logs")
# Only showing the pipeline version for space reasons
display(metadatalogs.loc[:, ["time", "out.variable", "metadata.pipeline_version"]])

# Display logs restricted by date and limit 

display("Logs restricted by date")
arrow_logs = mainpipeline.logs(start_datetime=dataframe_start, end_datetime=dataframe_end, limit=50)

display(len(arrow_logs))
display(arrow_logs)

# # pipeline log retrieval limited to arrow tables
display(mainpipeline.logs(arrow=True))
    Pipeline log schema has changed over the logs requested 1 newest records retrieved successfully, newest record seen was at <datetime>. Please request additional records separately

    'Standard Logs'

    1
timein.tensorout.variableanomaly.count
02024-02-09 16:28:44.753[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
    Pipeline log schema has changed over the logs requested 1 newest records retrieved successfully, newest record seen was at <datetime>. Please request additional records separately

    'Metadata Logs'
timeout.variablemetadata.pipeline_version
02024-02-09 16:28:44.753[718013.7]21bff9df-828f-40e7-8a22-449a2e636b44
'Logs restricted by date'

2

timein.tensorout.variableanomaly.count
02024-02-09 16:31:04.817[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
12024-02-09 16:31:04.917[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.4]0
    Pipeline log schema has changed over the logs requested 1 newest records retrieved successfully, newest record seen was at <datetime>. Please request additional records separately

    pyarrow.Table
    time: timestamp[ms]
    in.tensor: list<item: double> not null
      child 0, item: double
    out.variable: list<inner: float not null> not null
      child 0, inner: float not null
    anomaly.count: uint32 not null
    ----
    time: [[2024-02-09 16:28:44.753]]
    in.tensor: [[[4,2.5,2900,5505,2,...,2970,5251,12,0,0]]]
    out.variable: [[[718013.7]]]
    anomaly.count: [[0]]
result = mainpipeline.infer(normal_input, dataset=["*", "metadata.pipeline_version"])
display(result)
timein.tensorout.variableanomaly.countmetadata.pipeline_version
02024-02-09 16:31:30.617[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0

The following displays the pipeline metadata logs.

Standard Pipeline Steps Log Requests

Effected pipeline steps:

  • add_model_step
  • replace_with_model_step

For log file requests, the following metadata dataset requests for standard pipeline steps are available:

  • metadata

These must be paired with specific columns. * is not available when paired with metadata.

  • in: All input fields.
  • out: All output fields.
  • time: The DateTime the inference request was made.
  • in.{input_fields}: Any input fields (tensor, etc.)
  • out.{output_fields}: Any output fields (out.house_price, out.variable, etc.)
  • anomaly.count: Any anomalies detected from validations.
  • anomaly.{validation}: The validation that triggered the anomaly detection and whether it is True (indicating an anomaly was detected) or False.

The following requests the metadata, and displays the output variable and last model from the metadata.

# Display metadata

metadatalogs = mainpipeline.logs(dataset=['time', "out","metadata"])
display("Metadata Logs")
display(metadatalogs.loc[:, ['time', 'out.variable', 'metadata.last_model']])
    Pipeline log schema has changed over the logs requested 2 newest records retrieved successfully, newest record seen was at <datetime>. Please request additional records separately

    'Metadata Logs'
timeout.variablemetadata.last_model
02024-02-09 16:28:44.753[718013.7]{"model_name":"logcontrol","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}
12024-02-09 16:31:30.617[718013.7]{"model_name":"logcontrol","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}

Pipeline Limits

In a previous step we performed 10,000 inferences at once. If we attempt to pull them at once, we’ll likely run into the size limit for this pipeline and receive the following warning message indicating that the pipeline size limits were exceeded and we should use export_logs instead.

Warning: Pipeline log size limit exceeded. Only displaying 1000 log messages (of 10000 requested). Please request a file using export_logs.

logs = mainpipeline.logs(limit=10000)
display(logs)
    Pipeline log schema has changed over the logs requested 2 newest records retrieved successfully, newest record seen was at <datetime>. Please request additional records separately
timein.tensorout.variableanomaly.count
02024-02-09 16:28:44.753[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
12024-02-09 16:31:30.617[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0

Pipeline export_logs Method

The Pipeline method export_logs returns the Pipeline records as either a DataFrame JSON file, or an Apache Arrow table file. For a complete list, see the Wallaroo SDK Essentials Guide: Pipeline Log Management.

The export_logs method takes the following parameters:

ParameterTypeDescription
directoryString (Optional) (Default: logs)Logs are exported to a file from current working directory to directory.
data_size_limitString (Optional) ((Default: 100MB)The maximum size for the exported data in bytes. Note that file size is approximate to the request; a request of 10MiB may return 10.3MB of data. The fields are in the format “{size as number} {unit value}”, and can include a space so “10 MiB” and “10MiB” are the same. The accepted unit values are:
  • KiB (for KiloBytes)
  • MiB (for MegaBytes)
  • GiB (for GigaBytes)
  • TiB (for TeraBytes)
file_prefixString (Optional) (Default: The name of the pipeline)The name of the exported files. By default, this will the name of the pipeline and is segmented by pipeline version between the limits or the start and end period. For example: ’logpipeline-1.json`, etc.
limitInt (Optional)Limits how many log records to display. Defaults to 100. If there are more pipeline logs than are being displayed, the Warning message Pipeline log record limit exceeded will be displayed. For example, if 100 log files were requested and there are a total of 1,000, the warning message will be displayed.
start and endDateTime (Optional)Limits logs to all logs between the start and end DateTime parameters. Both parameters must be provided. Submitting a logs() request with only start or end will generate an exception.
If start and end are provided as parameters, then the records are returned in chronological order, with the oldest record displayed first.
datasetList (OPTIONAL)The datasets to be returned. The datasets available are:
  • *: Default. This translates to ["time", "in", "out", "anomaly"].
  • time: The DateTime of the inference request.
  • in: All inputs listed as in_{variable_name}.
  • out: All outputs listed as out_variable_name.
  • anomaly: Flags whether an anomaly was detected was triggered. 0 indicates no checks were triggered, 1 or greater indicates a an anomaly was detected. was triggered. Each validation is displayed in the returned logs as part of the anomaly dataset as anomaly.{validation_name}. For more information on anomaly detection, see Wallaroo SDK Essentials Guide: Anomaly Detection
  • meta: Returns metadata. IMPORTANT NOTE: See Metadata RequestsRestrictions for specifications on how this dataset can be used with otherdatasets.
    • Returns in the metadata.elapsed field:
      • A list of time in nanoseconds for:
        • The time to serialize the input.
        • How long each step took.
    • Returns in the metadata.last_model field:
      • A dict with each Python step as:
        • model_name: The name of the model in the pipeline step.
        • model_sha : The sha hash of the model in the pipeline step.
    • Returns in the metadata.pipeline_version field:
      • The pipeline version as a UUID value.
  • metadata.elapsed: IMPORTANT NOTE: See Metadata Requests Restrictionsfor specifications on how this dataset can be used with other datasets.
    • Returns in the metadata.elapsed field:
      • A list of time in nanoseconds for:
        • The time to serialize the input.
        • How long each step took.
arrowBoolean (Optional)Defaults to False. If arrow is set to True, then the logs are returned as an Apache Arrow table. If arrow=False, then the logs are returned as JSON in pandas DataFrame format.

The following examples demonstrate saving a DataFrame version of the mainpipeline logs, then an Arrow version.

# Save the DataFrame version of the log file

mainpipeline.export_logs()
display(os.listdir('./logs'))

mainpipeline.export_logs(arrow=True)
display(os.listdir('./logs'))
Warning: There are more logs available. Please set a larger limit to export more data.

Note: The logs with different schemas are written to separate files in the provided directory.

[’logpipeline-test-1.arrow’,
’logpipeline-test-2.arrow’,
’logpipeline-test-2.json’,
’logpipeline-1.json’,
’logpipeline-test-1.json’,
’logpipeline-1.arrow']

Warning: There are more logs available. Please set a larger limit to export more data.

Note: The logs with different schemas are written to separate files in the provided directory.

[’logpipeline-test-1.arrow’,
’logpipeline-test-2.arrow’,
’logpipeline-test-2.json’,
’logpipeline-1.json’,
’logpipeline-test-1.json’,
’logpipeline-1.arrow’]

Shadow Deploy Pipelines

Let’s assume that after analyzing the assay information we want to test two challenger models to our control. We do that with the Shadow Deploy pipeline step.

In Shadow Deploy, the pipeline step is added with the add_shadow_deploy method, with the champion model listed first, then an array of challenger models after. All inference data is fed to all models, with the champion results displayed in the out.variable column, and the shadow results in the format out_{model name}.variable. For example, since we named our challenger models housingchallenger01 and housingchallenger02, the columns out_housingchallenger01.variable and out_housingchallenger02.variable have the shadow deployed model results.

For this example, we will remove the previous pipeline step, then replace it with a shadow deploy step with rf_model.onnx as our champion, and models xgb_model.onnx and gbr_model.onnx as the challengers. We’ll deploy the pipeline and prepare it for sample inferences.

# Upload the challenger models

model_name_challenger01 = 'logcontrolchallenger01'
model_file_name_challenger01 = './models/xgb_model.onnx'

model_name_challenger02 = 'logcontrolchallenger02'
model_file_name_challenger02 = './models/gbr_model.onnx'

housing_model_challenger01 = (wl.upload_model(model_name_challenger01, 
                                              model_file_name_challenger01, 
                                              framework=wallaroo.framework.Framework.ONNX)
                                              .configure(tensor_fields=["tensor"])
                            )
housing_model_challenger02 = (wl.upload_model(model_name_challenger02, 
                                              model_file_name_challenger02, 
                                              framework=wallaroo.framework.Framework.ONNX)
                                              .configure(tensor_fields=["tensor"])
                            )
# Undeploy the pipeline
mainpipeline.undeploy()

mainpipeline.clear()

# Add the new shadow deploy step with our challenger models
mainpipeline.add_shadow_deploy(housing_model_control, [housing_model_challenger01, housing_model_challenger02])

# Deploy the pipeline with the new shadow step
deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.25)\
    .build()

mainpipeline.deploy(deployment_config=deploy_config)
Waiting for undeployment - this will take up to 45s ................................... ok
Waiting for deployment - this will take up to 45s ........ ok
namelogpipeline-test
created2024-02-09 16:21:09.406182+00:00
last_updated2024-02-09 16:33:08.547068+00:00
deployedTrue
archNone
tags
versionse143a2d5-5641-4dcc-8ae4-786fd777a30a, e2b9d903-4015-4d09-902b-9150a7196cea, 9df38be1-d2f4-4be1-9022-8f0570a238b9, 3078b49f-3eff-48d1-8d9b-a8780b329ecc, 21bff9df-828f-40e7-8a22-449a2e636b44, f78a7030-bd25-4bf7-ba0d-a18cfe3790e0, 10c1ac25-d626-4413-8d5d-1bed42d0e65c, b179b693-b6b6-4ff9-b2a4-2a639d88bc9b, da7b9cf0-81e8-452b-8b70-689406dc9548, a9a9b62c-9d37-427f-99af-67725558bf9b, 1c14591a-96b4-4059-bb63-2d2bc4e308d5, add660ac-0ebf-4a24-bb6d-6cdc875866c8
stepslogcontrol
publishedFalse

Shadow Deploy Sample Inference

We’ll now use our same sample data for an inference to our shadow deployed pipeline, then display the first 20 results with just the comparative outputs.

shadow_date_start = datetime.datetime.now()

shadow_result = mainpipeline.infer_from_file('./data/xtest-1k.arrow')

shadow_outputs =  shadow_result.to_pandas()
display(shadow_outputs.loc[0:20,['out.variable','out_logcontrolchallenger01.variable','out_logcontrolchallenger02.variable']])

shadow_date_end = datetime.datetime.now()
out.variableout_logcontrolchallenger01.variableout_logcontrolchallenger02.variable
0[718013.75][659806.0][704901.9]
1[615094.56][732883.5][695994.44]
2[448627.72][419508.84][416164.8]
3[758714.2][634028.8][655277.2]
4[513264.7][427209.44][426854.66]
5[668288.0][615501.9][632556.1]
6[1004846.5][1139732.5][1100465.2]
7[684577.2][498328.88][528278.06]
8[727898.1][722664.4][659439.94]
9[559631.1][525746.44][534331.44]
10[340764.53][376337.1][377187.2]
11[442168.06][382053.12][403964.3]
12[630865.6][505608.97][528991.3]
13[559631.1][603260.5][612201.75]
14[909441.1][969585.4][893874.7]
15[313096.0][313633.75][318054.94]
16[404040.8][360413.56][357816.75]
17[292859.5][316674.94][294034.7]
18[338357.88][299907.44][323254.3]
19[682284.6][811896.75][770916.7]
20[583765.94][573618.5][549141.4]

Shadow Deploy Logs

Pipelines with a shadow deployed step include the shadow inference result in the same format as the inference result: inference results from shadow deployed models are displayed as out_{model name}.{output variable}.

# display logs with shadow deployed steps

display(mainpipeline.logs(start_datetime=shadow_date_start, end_datetime=shadow_date_end).loc[:, ["time", "out.variable", "out_logcontrolchallenger01.variable", "out_logcontrolchallenger02.variable"]])
Warning: Pipeline log size limit exceeded. Please request logs using export_logs
timeout.variableout_logcontrolchallenger01.variableout_logcontrolchallenger02.variable
02024-02-09 16:33:18.093[718013.75][659806.0][704901.9]
12024-02-09 16:33:18.093[615094.56][732883.5][695994.44]
22024-02-09 16:33:18.093[448627.72][419508.84][416164.8]
32024-02-09 16:33:18.093[758714.2][634028.8][655277.2]
42024-02-09 16:33:18.093[513264.7][427209.44][426854.66]
...............
4952024-02-09 16:33:18.093[873315.0][779848.6][771244.75]
4962024-02-09 16:33:18.093[721143.6][607252.1][610430.56]
4972024-02-09 16:33:18.093[1048372.4][844343.56][900959.4]
4982024-02-09 16:33:18.093[244566.38][251694.84][246188.81]
4992024-02-09 16:33:18.093[518869.0][482136.66][547725.56]

500 rows × 4 columns

For log file requests, the following metadata dataset requests for testing pipeline steps are available:

  • metadata

These must be paired with specific columns. * is not available when paired with metadata.

  • in: All input fields.
  • out: All output fields.
  • time: The DateTime the inference request was made.
  • in.{input_fields}: Any input fields (tensor, etc.).
  • out.{output_fields}: Any output fields matching the specific output_field (out.house_price, out.variable, etc.).
  • out_: All shadow deployed challenger steps Any output fields matching the specific output_field (out.house_price, out.variable, etc.).
  • anomaly.count: Any anomalies detected from validations.
  • anomaly.{validation}: The validation that triggered the anomaly detection and whether it is True (indicating an anomaly was detected) or False.

The following example retrieves the logs from a pipeline with shadow deployed models, and displays the specific shadow deployed model outputs and the metadata.elasped field.

# display logs with shadow deployed steps

display(mainpipeline.logs(start_datetime=shadow_date_start, end_datetime=shadow_date_end).loc[:, ["time", 
                                                                                                  "out.variable", 
                                                                                                  "out_logcontrolchallenger01.variable", 
                                                                                                  "out_logcontrolchallenger02.variable"
                                                                                                  ]
                                                                                        ])
Warning: Pipeline log size limit exceeded. Please request logs using export_logs
timeout.variableout_logcontrolchallenger01.variableout_logcontrolchallenger02.variable
02024-02-09 16:33:18.093[718013.75][659806.0][704901.9]
12024-02-09 16:33:18.093[615094.56][732883.5][695994.44]
22024-02-09 16:33:18.093[448627.72][419508.84][416164.8]
32024-02-09 16:33:18.093[758714.2][634028.8][655277.2]
42024-02-09 16:33:18.093[513264.7][427209.44][426854.66]
...............
4952024-02-09 16:33:18.093[873315.0][779848.6][771244.75]
4962024-02-09 16:33:18.093[721143.6][607252.1][610430.56]
4972024-02-09 16:33:18.093[1048372.4][844343.56][900959.4]
4982024-02-09 16:33:18.093[244566.38][251694.84][246188.81]
4992024-02-09 16:33:18.093[518869.0][482136.66][547725.56]

500 rows × 4 columns

metadatalogs = mainpipeline.logs(dataset=["time",
                                          "out_logcontrolchallenger01.variable", 
                                          "out_logcontrolchallenger02.variable", 
                                          "metadata",
                                          'anomaly.count'
                                          ],
                                start_datetime=shadow_date_start, 
                                end_datetime=shadow_date_end
                                )

display(metadatalogs.loc[:, ['out_logcontrolchallenger01.variable',	
                             'out_logcontrolchallenger02.variable', 
                             'metadata.elapsed',
                             'anomaly.count'
                             ]
                        ])
Warning: Pipeline log size limit exceeded. Please request logs using export_logs
out_logcontrolchallenger01.variableout_logcontrolchallenger02.variablemetadata.elapsedanomaly.count
0[659806.0][704901.9][325472, 124071]0
1[732883.5][695994.44][325472, 124071]0
2[419508.84][416164.8][325472, 124071]0
3[634028.8][655277.2][325472, 124071]0
4[427209.44][426854.66][325472, 124071]0
...............
495[779848.6][771244.75][325472, 124071]0
496[607252.1][610430.56][325472, 124071]0
497[844343.56][900959.4][325472, 124071]0
498[251694.84][246188.81][325472, 124071]0
499[482136.66][547725.56][325472, 124071]0

500 rows × 4 columns

The following demonstrates exporting the shadow deployed logs to the directory shadow.

# Save shadow deployed log files as pandas DataFrame

mainpipeline.export_logs(directory="shadow", file_prefix="shadowdeploylogs")
display(os.listdir('./shadow'))
Warning: There are more logs available. Please set a larger limit to export more data.

Note: The logs with different schemas are written to separate files in the provided directory.

[‘shadowdeploylogs-2.json’, ‘shadowdeploylogs-1.json’]

A/B Testing Pipeline

A/B testing allows inference requests to be split between a control model and one or more challenger models. For full details, see the Pipeline Management Guide: A/B Testing.

When the inference results and log entries are displayed, they include the column out._model_split which displays:

FieldTypeDescription
nameStringThe model name used for the inference.
versionStringThe version of the model.
shaStringThe sha hash of the model version.

For this example, the shadow deployed step will be removed and replaced with an A/B Testing step with the ratio 1:1:1, so the control and each of the challenger models will be split randomly between inference requests. A set of sample inferences will be run, then the pipeline logs displayed.

pipeline = (wl.build_pipeline(“randomsplitpipeline-demo”)
.add_random_split([(2, control), (1, challenger)], “session_id”))

mainpipeline.undeploy()

# remove the shadow deploy steps
mainpipeline.clear()

# Add the a/b test step to the pipeline
mainpipeline.add_random_split([(1, housing_model_control), (1, housing_model_challenger01), (1, housing_model_challenger02)], "session_id")

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.25)\
    .build()

mainpipeline.deploy(deployment_config=deploy_config)

# Perform sample inferences of 20 rows and display the results
ab_date_start = datetime.datetime.now()
abtesting_inputs = pd.read_json('./data/xtest-1k.df.json')

for index, row in abtesting_inputs.sample(20).iterrows():
    display(mainpipeline.infer(row.to_frame('tensor').reset_index()).loc[:,["out._model_split", "out.variable"]])

ab_date_end = datetime.datetime.now()
Waiting for undeployment - this will take up to 45s ..................................... ok
Waiting for deployment - this will take up to 45s ......... ok
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"5b63884e-3f09-4e90-9f09-213350b9c445","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][300542.5]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"5b63884e-3f09-4e90-9f09-213350b9c445","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][580584.3]
out._model_splitout.variable
0[{"name":"logcontrol","version":"1f93edce-3f3e-4d29-be29-6a4e9303da05","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][447162.84]
out._model_splitout.variable
0[{"name":"logcontrol","version":"1f93edce-3f3e-4d29-be29-6a4e9303da05","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][581002.94]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"5b63884e-3f09-4e90-9f09-213350b9c445","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][944906.25]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"6fc54099-7151-48d7-9e57-6d989fb9bb1c","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][488997.9]
out._model_splitout.variable
0[{"name":"logcontrol","version":"1f93edce-3f3e-4d29-be29-6a4e9303da05","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][373955.94]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"5b63884e-3f09-4e90-9f09-213350b9c445","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][868765.4]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"6fc54099-7151-48d7-9e57-6d989fb9bb1c","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][499459.2]
out._model_splitout.variable
0[{"name":"logcontrol","version":"1f93edce-3f3e-4d29-be29-6a4e9303da05","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][559631.06]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"5b63884e-3f09-4e90-9f09-213350b9c445","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][344156.25]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"6fc54099-7151-48d7-9e57-6d989fb9bb1c","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][296829.75]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"6fc54099-7151-48d7-9e57-6d989fb9bb1c","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][532923.94]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"6fc54099-7151-48d7-9e57-6d989fb9bb1c","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][878232.2]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"6fc54099-7151-48d7-9e57-6d989fb9bb1c","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][996693.6]
out._model_splitout.variable
0[{"name":"logcontrolchallenger02","version":"6fc54099-7151-48d7-9e57-6d989fb9bb1c","sha":"ed6065a79d841f7e96307bb20d5ef22840f15da0b587efb51425c7ad60589d6a"}][544343.3]
out._model_splitout.variable
0[{"name":"logcontrol","version":"1f93edce-3f3e-4d29-be29-6a4e9303da05","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][379076.28]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"5b63884e-3f09-4e90-9f09-213350b9c445","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][585684.3]
out._model_splitout.variable
0[{"name":"logcontrolchallenger01","version":"5b63884e-3f09-4e90-9f09-213350b9c445","sha":"31e92d6ccb27b041a324a7ac22cf95d9d6cc3aa7e8263a229f7c4aec4938657c"}][573976.44]
out._model_splitout.variable
0[{"name":"logcontrol","version":"1f93edce-3f3e-4d29-be29-6a4e9303da05","sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}][310164.06]
## Get the logs with the a/b testing information

metadatalogs = mainpipeline.logs(dataset=["time",
                                          "out", 
                                          "metadata"
                                          ]
                                )

display(metadatalogs.loc[:, ['out.variable', 'metadata.last_model']])
    Pipeline log schema has changed over the logs requested 2 newest records retrieved successfully, newest record seen was at <datetime>. Please request additional records separately
out.variablemetadata.last_model
0[718013.7]{"model_name":"logcontrol","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}
1[718013.7]{"model_name":"logcontrol","model_sha":"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6"}
# Save a/b testing log files as DataFrame

mainpipeline.export_logs(directory="abtesting", 
                         file_prefix="abtests", 
                         start_datetime=ab_date_start, 
                         end_datetime=ab_date_end)
display(os.listdir('./abtesting'))
['abtests-1.json']

The following exports the metadata with the log files.

# Save a/b testing log files as DataFrame

mainpipeline.export_logs(directory="abtesting-metadata", 
                         file_prefix="abtests", 
                         start_datetime=ab_date_start, 
                         end_datetime=ab_date_end,
                         dataset=["time", "out", "metadata"])
display(os.listdir('./abtesting-metadata'))
['abtests-1.json']

Anomaly Detection Logs

Wallaroo provides validations to detect anomalous data from inference inputs and outputs. Validations are added to a Wallaroo pipeline with the wallaroo.pipeline.add_validations method.

Adding validations takes the format:

pipeline.add_validations(
    validation_name_01 = polars.col(in|out.{column_name}) EXPRESSION,
    validation_name_02 = polars.col(in|out.{column_name}) EXPRESSION
    ...{additional rules}
)
  • validation_name: The user provided name of the validation. The names must match Python variable naming requirements.
    • IMPORTANT NOTE: Using the name count as a validation name returns an error. Any validation rules named count are dropped upon request and an error returned.
  • polars.col(in|out.{column_name}): Specifies the input or output for a specific field aka “column” in an inference result. Wallaroo inference requests are in the format in.{field_name} for inputs, and out.{field_name} for outputs.
  • EXPRESSION: The expression to validate. When the expression returns True, that indicates an anomaly detected.

The polars library version 0.18.5 is used to create the validation rule. This is installed by default with the Wallaroo SDK. This provides a powerful range of comparisons to organizations tracking anomalous data from their ML models.

When validations are added to a pipeline, inference request outputs return the following fields:

FieldTypeDescription
anomaly.countIntegerThe total of all validations that returned True.
anomaly.{validation name}BoolThe output of the validation {validation_name}.

When validation returns True, an anomaly is detected.

For example, adding the validation fraud to the following pipeline returns anomaly.count of 1 when the validation fraud returns True. The validation fraud returns True when the output field dense_1 at index 0 is greater than 0.9.

sample_pipeline = wallaroo.client.build_pipeline("sample-pipeline")
sample_pipeline.add_model_step(model)

# add the validation
sample_pipeline.add_validations(
    fraud=pl.col("out.dense_1").list.get(0) > 0.9,
    )

# deploy the pipeline
sample_pipeline.deploy()

# sample inference
display(sample_pipeline.infer_from_file("dev_high_fraud.json", data_format='pandas-records'))
 timein.tensorout.dense_1anomaly.countanomaly.fraud
02024-02-02 16:05:42.152[1.0678324729, 18.1555563975, -1.6589551058, 5…][0.981199]1True

Anomaly Detection Inference Requests Example

For this example, we create the validation rule too_high which detects houses with a value greater than 1,000,000 and show the output for houses that trigger that validation.

For these examples we’ll create a new pipeline to ensure the logs are “clean” for the samples.

import polars as pl

mainpipeline.undeploy()
mainpipeline.clear()
mainpipeline.add_model_step(housing_model_control)
mainpipeline.add_validations(
    too_high=pl.col("out.variable").list.get(0) > 1000000.0
)

deploy_config = wallaroo.deployment_config.DeploymentConfigBuilder() \
    .cpus(0.25)\
    .build()

mainpipeline.deploy(deployment_config=deploy_config)
Waiting for undeployment - this will take up to 45s ...................................... ok
Waiting for deployment - this will take up to 45s ......... ok
namelogpipeline-test
created2024-02-09 16:21:09.406182+00:00
last_updated2024-02-09 16:53:37.061953+00:00
deployedTrue
archNone
tags
versions764c7706-c996-42e9-90ff-87b1b496f98d, 05c46dbc-9d72-40d5-bc4c-7fee7bc3e971, 9a4d76f5-9905-4063-8bf8-47e103987515, d5e4882a-3c17-4965-b059-66432a50a3cd, 00b3d5e7-4644-4138-b73d-b0511b3c9e2a, e143a2d5-5641-4dcc-8ae4-786fd777a30a, e2b9d903-4015-4d09-902b-9150a7196cea, 9df38be1-d2f4-4be1-9022-8f0570a238b9, 3078b49f-3eff-48d1-8d9b-a8780b329ecc, 21bff9df-828f-40e7-8a22-449a2e636b44, f78a7030-bd25-4bf7-ba0d-a18cfe3790e0, 10c1ac25-d626-4413-8d5d-1bed42d0e65c, b179b693-b6b6-4ff9-b2a4-2a639d88bc9b, da7b9cf0-81e8-452b-8b70-689406dc9548, a9a9b62c-9d37-427f-99af-67725558bf9b, 1c14591a-96b4-4059-bb63-2d2bc4e308d5, add660ac-0ebf-4a24-bb6d-6cdc875866c8
stepslogcontrol
publishedFalse
import datetime
import time
import pytz

inference_start = datetime.datetime.now(pytz.utc)

# adding sleep to ensure log distinction
time.sleep(15)

results = mainpipeline.infer_from_file('./data/test-1000.df.json')

inference_end = datetime.datetime.now(pytz.utc)

# first 20 results
display(results.head(20))

# only results that trigger the anomaly too_high
results.loc[results['anomaly.too_high'] == True]
timein.tensorout.variableanomaly.countanomaly.too_high
02024-02-09 16:54:02.507[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.75]0False
12024-02-09 16:54:02.507[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0, 8.0, 2170.0, 0.0, 47.7109, -122.017, 2310.0, 7419.0, 6.0, 0.0, 0.0][615094.56]0False
22024-02-09 16:54:02.507[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, 8.0, 880.0, 420.0, 47.5893, -122.317, 1300.0, 824.0, 6.0, 0.0, 0.0][448627.72]0False
32024-02-09 16:54:02.507[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2500.0, 0.0, 47.5759, -121.994, 2560.0, 8475.0, 24.0, 0.0, 0.0][758714.2]0False
42024-02-09 16:54:02.507[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4.0, 7.0, 2200.0, 0.0, 47.7659, -122.341, 1690.0, 8038.0, 62.0, 0.0, 0.0][513264.7]0False
52024-02-09 16:54:02.507[3.0, 2.0, 2140.0, 4923.0, 1.0, 0.0, 0.0, 4.0, 8.0, 1070.0, 1070.0, 47.6902, -122.339, 1470.0, 4923.0, 86.0, 0.0, 0.0][668288.0]0False
62024-02-09 16:54:02.507[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0, 9.0, 3140.0, 450.0, 47.6763, -122.267, 2100.0, 6250.0, 9.0, 0.0, 0.0][1004846.5]1True
72024-02-09 16:54:02.507[3.0, 2.0, 1280.0, 960.0, 2.0, 0.0, 0.0, 3.0, 9.0, 1040.0, 240.0, 47.602, -122.311, 1280.0, 1173.0, 0.0, 0.0, 0.0][684577.2]0False
82024-02-09 16:54:02.507[4.0, 2.5, 2820.0, 15000.0, 2.0, 0.0, 0.0, 4.0, 9.0, 2820.0, 0.0, 47.7255, -122.101, 2440.0, 15000.0, 29.0, 0.0, 0.0][727898.1]0False
92024-02-09 16:54:02.507[3.0, 2.25, 1790.0, 11393.0, 1.0, 0.0, 0.0, 3.0, 8.0, 1790.0, 0.0, 47.6297, -122.099, 2290.0, 11894.0, 36.0, 0.0, 0.0][559631.1]0False
102024-02-09 16:54:02.507[3.0, 1.5, 1010.0, 7683.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1010.0, 0.0, 47.72, -122.318, 1550.0, 7271.0, 61.0, 0.0, 0.0][340764.53]0False
112024-02-09 16:54:02.507[3.0, 2.0, 1270.0, 1323.0, 3.0, 0.0, 0.0, 3.0, 8.0, 1270.0, 0.0, 47.6934, -122.342, 1330.0, 1323.0, 8.0, 0.0, 0.0][442168.06]0False
122024-02-09 16:54:02.507[4.0, 1.75, 2070.0, 9120.0, 1.0, 0.0, 0.0, 4.0, 7.0, 1250.0, 820.0, 47.6045, -122.123, 1650.0, 8400.0, 57.0, 0.0, 0.0][630865.6]0False
132024-02-09 16:54:02.507[4.0, 1.0, 1620.0, 4080.0, 1.5, 0.0, 0.0, 3.0, 7.0, 1620.0, 0.0, 47.6696, -122.324, 1760.0, 4080.0, 91.0, 0.0, 0.0][559631.1]0False
142024-02-09 16:54:02.507[4.0, 3.25, 3990.0, 9786.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3990.0, 0.0, 47.6784, -122.026, 3920.0, 8200.0, 10.0, 0.0, 0.0][909441.1]0False
152024-02-09 16:54:02.507[4.0, 2.0, 1780.0, 19843.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1780.0, 0.0, 47.4414, -122.154, 2210.0, 13500.0, 52.0, 0.0, 0.0][313096.0]0False
162024-02-09 16:54:02.507[4.0, 2.5, 2130.0, 6003.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2130.0, 0.0, 47.4518, -122.12, 1940.0, 4529.0, 11.0, 0.0, 0.0][404040.8]0False
172024-02-09 16:54:02.507[3.0, 1.75, 1660.0, 10440.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1040.0, 620.0, 47.4448, -121.77, 1240.0, 10380.0, 36.0, 0.0, 0.0][292859.5]0False
182024-02-09 16:54:02.507[3.0, 2.5, 2110.0, 4118.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2110.0, 0.0, 47.3878, -122.153, 2110.0, 4044.0, 25.0, 0.0, 0.0][338357.88]0False
192024-02-09 16:54:02.507[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1300.0, 900.0, 47.6845, -122.201, 2320.0, 10814.0, 94.0, 0.0, 0.0][682284.6]0False
timein.tensorout.variableanomaly.countanomaly.too_high
62024-02-09 16:54:02.507[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0, 9.0, 3140.0, 450.0, 47.6763, -122.267, 2100.0, 6250.0, 9.0, 0.0, 0.0][1004846.5]1True
302024-02-09 16:54:02.507[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.8]1True
402024-02-09 16:54:02.507[4.0, 4.5, 5120.0, 41327.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3290.0, 1830.0, 47.7009, -122.059, 3360.0, 82764.0, 6.0, 0.0, 0.0][1204324.8]1True
632024-02-09 16:54:02.507[4.0, 3.0, 4040.0, 19700.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4040.0, 0.0, 47.7205, -122.127, 3930.0, 21887.0, 27.0, 0.0, 0.0][1028923.06]1True
1102024-02-09 16:54:02.507[4.0, 2.5, 3470.0, 20445.0, 2.0, 0.0, 0.0, 4.0, 10.0, 3470.0, 0.0, 47.547, -122.219, 3360.0, 21950.0, 51.0, 0.0, 0.0][1412215.3]1True
1302024-02-09 16:54:02.507[4.0, 2.75, 2620.0, 13777.0, 1.5, 0.0, 2.0, 4.0, 9.0, 1720.0, 900.0, 47.58, -122.285, 3530.0, 9287.0, 88.0, 0.0, 0.0][1223839.1]1True
1332024-02-09 16:54:02.507[5.0, 2.25, 3320.0, 13138.0, 1.0, 0.0, 2.0, 4.0, 9.0, 1900.0, 1420.0, 47.759, -122.269, 2820.0, 13138.0, 51.0, 0.0, 0.0][1108000.1]1True
1542024-02-09 16:54:02.507[4.0, 2.75, 3800.0, 9606.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3800.0, 0.0, 47.7368, -122.208, 3400.0, 9677.0, 6.0, 0.0, 0.0][1039781.25]1True
1602024-02-09 16:54:02.507[5.0, 3.5, 4150.0, 13232.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4150.0, 0.0, 47.3417, -122.182, 3840.0, 15121.0, 9.0, 0.0, 0.0][1042119.1]1True
2102024-02-09 16:54:02.507[4.0, 3.5, 4300.0, 70407.0, 2.0, 0.0, 0.0, 3.0, 10.0, 2710.0, 1590.0, 47.4472, -122.092, 3520.0, 26727.0, 22.0, 0.0, 0.0][1115275.0]1True
2392024-02-09 16:54:02.507[4.0, 3.25, 5010.0, 49222.0, 2.0, 0.0, 0.0, 5.0, 9.0, 3710.0, 1300.0, 47.5489, -122.092, 3140.0, 54014.0, 36.0, 0.0, 0.0][1092274.1]1True
2482024-02-09 16:54:02.507[4.0, 3.75, 4410.0, 8112.0, 3.0, 0.0, 4.0, 3.0, 11.0, 3570.0, 840.0, 47.5888, -122.392, 2770.0, 5750.0, 12.0, 0.0, 0.0][1967344.1]1True
2552024-02-09 16:54:02.507[4.0, 3.0, 4750.0, 21701.0, 1.5, 0.0, 0.0, 5.0, 11.0, 4750.0, 0.0, 47.6454, -122.218, 3120.0, 18551.0, 38.0, 0.0, 0.0][2002393.5]1True
2712024-02-09 16:54:02.507[5.0, 3.25, 5790.0, 13726.0, 2.0, 0.0, 3.0, 3.0, 10.0, 4430.0, 1360.0, 47.5388, -122.114, 5790.0, 13726.0, 0.0, 0.0, 0.0][1189654.4]1True
2812024-02-09 16:54:02.507[3.0, 3.0, 3570.0, 6250.0, 2.0, 0.0, 2.0, 3.0, 10.0, 2710.0, 860.0, 47.5624, -122.399, 2550.0, 7596.0, 30.0, 0.0, 0.0][1124493.3]1True
2822024-02-09 16:54:02.507[3.0, 2.75, 3170.0, 34850.0, 1.0, 0.0, 0.0, 5.0, 9.0, 3170.0, 0.0, 47.6611, -122.169, 3920.0, 36740.0, 58.0, 0.0, 0.0][1227073.8]1True
2832024-02-09 16:54:02.507[4.0, 2.75, 3260.0, 19542.0, 1.0, 0.0, 0.0, 4.0, 10.0, 2170.0, 1090.0, 47.6245, -122.236, 3480.0, 19863.0, 46.0, 0.0, 0.0][1364650.3]1True
2852024-02-09 16:54:02.507[4.0, 2.75, 4020.0, 18745.0, 2.0, 0.0, 4.0, 4.0, 10.0, 2830.0, 1190.0, 47.6042, -122.21, 3150.0, 20897.0, 26.0, 0.0, 0.0][1322835.9]1True
3232024-02-09 16:54:02.507[3.0, 3.0, 2480.0, 5500.0, 2.0, 0.0, 3.0, 3.0, 10.0, 1730.0, 750.0, 47.6466, -122.404, 2950.0, 5670.0, 64.0, 1.0, 55.0][1100884.1]1True
3512024-02-09 16:54:02.507[5.0, 4.0, 4660.0, 9900.0, 2.0, 0.0, 2.0, 4.0, 9.0, 2600.0, 2060.0, 47.5135, -122.2, 3380.0, 9900.0, 35.0, 0.0, 0.0][1058105.0]1True
3602024-02-09 16:54:02.507[4.0, 3.5, 3770.0, 8501.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3770.0, 0.0, 47.6744, -122.196, 1520.0, 9660.0, 6.0, 0.0, 0.0][1169643.0]1True
3982024-02-09 16:54:02.507[3.0, 2.25, 2390.0, 7875.0, 1.0, 0.0, 1.0, 3.0, 10.0, 1980.0, 410.0, 47.6515, -122.278, 3720.0, 9075.0, 66.0, 0.0, 0.0][1364149.9]1True
4142024-02-09 16:54:02.507[5.0, 3.5, 5430.0, 10327.0, 2.0, 0.0, 2.0, 3.0, 10.0, 4010.0, 1420.0, 47.5476, -122.116, 4340.0, 10324.0, 7.0, 0.0, 0.0][1207858.6]1True
4432024-02-09 16:54:02.507[5.0, 4.0, 4360.0, 8030.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4360.0, 0.0, 47.5923, -121.973, 3570.0, 6185.0, 0.0, 0.0, 0.0][1160512.8]1True
4972024-02-09 16:54:02.507[4.0, 2.5, 4090.0, 11225.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4090.0, 0.0, 47.581, -121.971, 3510.0, 8762.0, 9.0, 0.0, 0.0][1048372.4]1True
5132024-02-09 16:54:02.507[4.0, 3.25, 3320.0, 8587.0, 3.0, 0.0, 0.0, 3.0, 11.0, 2950.0, 370.0, 47.691, -122.337, 1860.0, 5668.0, 6.0, 0.0, 0.0][1130661.0]1True
5202024-02-09 16:54:02.507[5.0, 3.75, 4170.0, 8142.0, 2.0, 0.0, 2.0, 3.0, 10.0, 4170.0, 0.0, 47.5354, -122.181, 3030.0, 7980.0, 9.0, 0.0, 0.0][1098628.8]1True
5302024-02-09 16:54:02.507[4.0, 4.25, 3500.0, 8750.0, 1.0, 0.0, 4.0, 5.0, 9.0, 2140.0, 1360.0, 47.7222, -122.367, 3110.0, 8750.0, 63.0, 0.0, 0.0][1140733.8]1True
5352024-02-09 16:54:02.507[4.0, 3.5, 4460.0, 16271.0, 2.0, 0.0, 2.0, 3.0, 11.0, 4460.0, 0.0, 47.5862, -121.97, 4540.0, 17122.0, 13.0, 0.0, 0.0][1208638.0]1True
5562024-02-09 16:54:02.507[4.0, 3.5, 4285.0, 9567.0, 2.0, 0.0, 1.0, 5.0, 10.0, 3485.0, 800.0, 47.6434, -122.409, 2960.0, 6902.0, 68.0, 0.0, 0.0][1886959.4]1True
6232024-02-09 16:54:02.507[4.0, 3.25, 4240.0, 25639.0, 2.0, 0.0, 3.0, 3.0, 10.0, 3550.0, 690.0, 47.3241, -122.378, 3590.0, 24967.0, 25.0, 0.0, 0.0][1156651.3]1True
6242024-02-09 16:54:02.507[4.0, 3.5, 3440.0, 9776.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3440.0, 0.0, 47.5374, -122.216, 2400.0, 11000.0, 9.0, 0.0, 0.0][1124493.3]1True
6342024-02-09 16:54:02.507[4.0, 3.25, 4700.0, 38412.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3420.0, 1280.0, 47.6445, -122.167, 3640.0, 35571.0, 36.0, 0.0, 0.0][1164589.4]1True
6512024-02-09 16:54:02.507[3.0, 3.0, 3920.0, 13085.0, 2.0, 1.0, 4.0, 4.0, 11.0, 3920.0, 0.0, 47.5716, -122.204, 3450.0, 13287.0, 18.0, 0.0, 0.0][1452224.5]1True
6582024-02-09 16:54:02.507[3.0, 3.25, 3230.0, 7800.0, 2.0, 0.0, 3.0, 3.0, 10.0, 3230.0, 0.0, 47.6348, -122.403, 3030.0, 6600.0, 9.0, 0.0, 0.0][1077279.3]1True
6712024-02-09 16:54:02.507[3.0, 3.5, 3080.0, 6495.0, 2.0, 0.0, 3.0, 3.0, 11.0, 2530.0, 550.0, 47.6321, -122.393, 4120.0, 8620.0, 18.0, 1.0, 10.0][1122811.8]1True
6852024-02-09 16:54:02.507[4.0, 2.5, 4200.0, 35267.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4200.0, 0.0, 47.7108, -122.071, 3540.0, 22234.0, 24.0, 0.0, 0.0][1181336.0]1True
6862024-02-09 16:54:02.507[4.0, 3.25, 4160.0, 47480.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4160.0, 0.0, 47.7266, -122.115, 3400.0, 40428.0, 19.0, 0.0, 0.0][1082353.3]1True
6982024-02-09 16:54:02.507[4.0, 4.5, 5770.0, 10050.0, 1.0, 0.0, 3.0, 5.0, 9.0, 3160.0, 2610.0, 47.677, -122.275, 2950.0, 6700.0, 65.0, 0.0, 0.0][1689843.3]1True
7112024-02-09 16:54:02.507[3.0, 2.5, 5403.0, 24069.0, 2.0, 1.0, 4.0, 4.0, 12.0, 5403.0, 0.0, 47.4169, -122.348, 3980.0, 104374.0, 39.0, 0.0, 0.0][1946437.3]1True
7202024-02-09 16:54:02.507[5.0, 3.0, 3420.0, 18129.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2540.0, 880.0, 47.5333, -122.217, 3750.0, 16316.0, 62.0, 1.0, 53.0][1325961.0]1True
7222024-02-09 16:54:02.507[3.0, 3.25, 4560.0, 13363.0, 1.0, 0.0, 4.0, 3.0, 11.0, 2760.0, 1800.0, 47.6205, -122.214, 4060.0, 13362.0, 20.0, 0.0, 0.0][2005883.1]1True
7262024-02-09 16:54:02.507[5.0, 3.5, 4200.0, 5400.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3140.0, 1060.0, 47.7077, -122.12, 3300.0, 5564.0, 2.0, 0.0, 0.0][1052898.0]1True
7372024-02-09 16:54:02.507[4.0, 3.25, 2980.0, 7000.0, 2.0, 0.0, 3.0, 3.0, 10.0, 2140.0, 840.0, 47.5933, -122.292, 2200.0, 4800.0, 114.0, 1.0, 114.0][1156206.5]1True
7402024-02-09 16:54:02.507[4.0, 4.5, 6380.0, 88714.0, 2.0, 0.0, 0.0, 3.0, 12.0, 6380.0, 0.0, 47.5592, -122.015, 3040.0, 7113.0, 8.0, 0.0, 0.0][1355747.1]1True
7822024-02-09 16:54:02.507[5.0, 4.25, 4860.0, 9453.0, 1.5, 0.0, 1.0, 5.0, 10.0, 3100.0, 1760.0, 47.6196, -122.286, 3150.0, 8557.0, 109.0, 0.0, 0.0][1910823.8]1True
7982024-02-09 16:54:02.507[4.0, 2.5, 2790.0, 5450.0, 2.0, 0.0, 0.0, 3.0, 10.0, 1930.0, 860.0, 47.6453, -122.303, 2320.0, 5450.0, 89.0, 1.0, 75.0][1097757.4]1True
8182024-02-09 16:54:02.507[4.0, 4.0, 4620.0, 130208.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4620.0, 0.0, 47.5885, -121.939, 4620.0, 131007.0, 1.0, 0.0, 0.0][1164589.4]1True
8272024-02-09 16:54:02.507[4.0, 2.5, 3340.0, 10422.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3340.0, 0.0, 47.6515, -122.197, 1770.0, 9490.0, 18.0, 0.0, 0.0][1103101.4]1True
8282024-02-09 16:54:02.507[5.0, 3.5, 3760.0, 10207.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3150.0, 610.0, 47.5605, -122.225, 3550.0, 12118.0, 46.0, 0.0, 0.0][1489624.5]1True
9012024-02-09 16:54:02.507[4.0, 2.25, 4470.0, 60373.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4470.0, 0.0, 47.7289, -122.127, 3210.0, 40450.0, 26.0, 0.0, 0.0][1208638.0]1True
9122024-02-09 16:54:02.507[3.0, 2.25, 2960.0, 8330.0, 1.0, 0.0, 3.0, 4.0, 10.0, 2260.0, 700.0, 47.7035, -122.385, 2960.0, 8840.0, 62.0, 0.0, 0.0][1178314.0]1True
9192024-02-09 16:54:02.507[4.0, 3.25, 5180.0, 19850.0, 2.0, 0.0, 3.0, 3.0, 12.0, 3540.0, 1640.0, 47.562, -122.162, 3160.0, 9750.0, 9.0, 0.0, 0.0][1295531.3]1True
9412024-02-09 16:54:02.507[4.0, 3.75, 3770.0, 4000.0, 2.5, 0.0, 0.0, 5.0, 9.0, 2890.0, 880.0, 47.6157, -122.287, 2800.0, 5000.0, 98.0, 0.0, 0.0][1182821.0]1True
9652024-02-09 16:54:02.507[6.0, 4.0, 5310.0, 12741.0, 2.0, 0.0, 2.0, 3.0, 10.0, 3600.0, 1710.0, 47.5696, -122.213, 4190.0, 12632.0, 48.0, 0.0, 0.0][2016006.0]1True
9732024-02-09 16:54:02.507[5.0, 2.0, 3540.0, 9970.0, 2.0, 0.0, 3.0, 3.0, 9.0, 3540.0, 0.0, 47.7108, -122.277, 2280.0, 7195.0, 44.0, 0.0, 0.0][1085835.8]1True
9972024-02-09 16:54:02.507[4.0, 3.25, 2910.0, 1880.0, 2.0, 0.0, 3.0, 5.0, 9.0, 1830.0, 1080.0, 47.616, -122.282, 3100.0, 8200.0, 100.0, 0.0, 0.0][1060847.5]1True
### Anomaly Detection Logs

Pipeline logs retrieves with `wallaroo.pipeline.logs` include the `anomaly` dataset.
logs = mainpipeline.logs(limit=1000)
display(logs)
display(logs.loc[logs['anomaly.too_high'] == True])
Warning: There are more logs available. Please set a larger limit or request a file using export_logs.
timein.tensorout.variableanomaly.countanomaly.too_high
02024-02-09 16:49:26.521[3.0, 2.0, 2005.0, 7000.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1605.0, 400.0, 47.6039, -122.298, 1750.0, 4500.0, 34.0, 0.0, 0.0][581003.0]0False
12024-02-09 16:49:26.521[3.0, 1.75, 2910.0, 37461.0, 1.0, 0.0, 0.0, 4.0, 7.0, 1530.0, 1380.0, 47.7015, -122.164, 2520.0, 18295.0, 47.0, 0.0, 0.0][706823.56]0False
22024-02-09 16:49:26.521[4.0, 3.25, 2910.0, 1880.0, 2.0, 0.0, 3.0, 5.0, 9.0, 1830.0, 1080.0, 47.616, -122.282, 3100.0, 8200.0, 100.0, 0.0, 0.0][1060847.5]1True
32024-02-09 16:49:26.521[4.0, 1.75, 2700.0, 7875.0, 1.5, 0.0, 0.0, 4.0, 8.0, 2700.0, 0.0, 47.454, -122.144, 2220.0, 7875.0, 46.0, 0.0, 0.0][441960.38]0False
42024-02-09 16:49:26.521[3.0, 2.5, 2900.0, 23550.0, 1.0, 0.0, 0.0, 3.0, 10.0, 1490.0, 1410.0, 47.5708, -122.153, 2900.0, 19604.0, 27.0, 0.0, 0.0][827411.0]0False
..................
9952024-02-09 16:49:26.521[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4.0, 7.0, 2200.0, 0.0, 47.7659, -122.341, 1690.0, 8038.0, 62.0, 0.0, 0.0][513264.7]0False
9962024-02-09 16:49:26.521[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2500.0, 0.0, 47.5759, -121.994, 2560.0, 8475.0, 24.0, 0.0, 0.0][758714.2]0False
9972024-02-09 16:49:26.521[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, 8.0, 880.0, 420.0, 47.5893, -122.317, 1300.0, 824.0, 6.0, 0.0, 0.0][448627.72]0False
9982024-02-09 16:49:26.521[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0, 8.0, 2170.0, 0.0, 47.7109, -122.017, 2310.0, 7419.0, 6.0, 0.0, 0.0][615094.56]0False
9992024-02-09 16:49:26.521[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.75]0False

1000 rows × 5 columns

timein.tensorout.variableanomaly.countanomaly.too_high
22024-02-09 16:49:26.521[4.0, 3.25, 2910.0, 1880.0, 2.0, 0.0, 3.0, 5.0, 9.0, 1830.0, 1080.0, 47.616, -122.282, 3100.0, 8200.0, 100.0, 0.0, 0.0][1060847.5]1True
262024-02-09 16:49:26.521[5.0, 2.0, 3540.0, 9970.0, 2.0, 0.0, 3.0, 3.0, 9.0, 3540.0, 0.0, 47.7108, -122.277, 2280.0, 7195.0, 44.0, 0.0, 0.0][1085835.8]1True
342024-02-09 16:49:26.521[6.0, 4.0, 5310.0, 12741.0, 2.0, 0.0, 2.0, 3.0, 10.0, 3600.0, 1710.0, 47.5696, -122.213, 4190.0, 12632.0, 48.0, 0.0, 0.0][2016006.0]1True
582024-02-09 16:49:26.521[4.0, 3.75, 3770.0, 4000.0, 2.5, 0.0, 0.0, 5.0, 9.0, 2890.0, 880.0, 47.6157, -122.287, 2800.0, 5000.0, 98.0, 0.0, 0.0][1182821.0]1True
802024-02-09 16:49:26.521[4.0, 3.25, 5180.0, 19850.0, 2.0, 0.0, 3.0, 3.0, 12.0, 3540.0, 1640.0, 47.562, -122.162, 3160.0, 9750.0, 9.0, 0.0, 0.0][1295531.2]1True
872024-02-09 16:49:26.521[3.0, 2.25, 2960.0, 8330.0, 1.0, 0.0, 3.0, 4.0, 10.0, 2260.0, 700.0, 47.7035, -122.385, 2960.0, 8840.0, 62.0, 0.0, 0.0][1178314.0]1True
982024-02-09 16:49:26.521[4.0, 2.25, 4470.0, 60373.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4470.0, 0.0, 47.7289, -122.127, 3210.0, 40450.0, 26.0, 0.0, 0.0][1208638.0]1True
1712024-02-09 16:49:26.521[5.0, 3.5, 3760.0, 10207.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3150.0, 610.0, 47.5605, -122.225, 3550.0, 12118.0, 46.0, 0.0, 0.0][1489624.5]1True
1722024-02-09 16:49:26.521[4.0, 2.5, 3340.0, 10422.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3340.0, 0.0, 47.6515, -122.197, 1770.0, 9490.0, 18.0, 0.0, 0.0][1103101.4]1True
1812024-02-09 16:49:26.521[4.0, 4.0, 4620.0, 130208.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4620.0, 0.0, 47.5885, -121.939, 4620.0, 131007.0, 1.0, 0.0, 0.0][1164589.4]1True
2012024-02-09 16:49:26.521[4.0, 2.5, 2790.0, 5450.0, 2.0, 0.0, 0.0, 3.0, 10.0, 1930.0, 860.0, 47.6453, -122.303, 2320.0, 5450.0, 89.0, 1.0, 75.0][1097757.4]1True
2172024-02-09 16:49:26.521[5.0, 4.25, 4860.0, 9453.0, 1.5, 0.0, 1.0, 5.0, 10.0, 3100.0, 1760.0, 47.6196, -122.286, 3150.0, 8557.0, 109.0, 0.0, 0.0][1910823.8]1True
2592024-02-09 16:49:26.521[4.0, 4.5, 6380.0, 88714.0, 2.0, 0.0, 0.0, 3.0, 12.0, 6380.0, 0.0, 47.5592, -122.015, 3040.0, 7113.0, 8.0, 0.0, 0.0][1355747.1]1True
2622024-02-09 16:49:26.521[4.0, 3.25, 2980.0, 7000.0, 2.0, 0.0, 3.0, 3.0, 10.0, 2140.0, 840.0, 47.5933, -122.292, 2200.0, 4800.0, 114.0, 1.0, 114.0][1156206.5]1True
2732024-02-09 16:49:26.521[5.0, 3.5, 4200.0, 5400.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3140.0, 1060.0, 47.7077, -122.12, 3300.0, 5564.0, 2.0, 0.0, 0.0][1052898.0]1True
2772024-02-09 16:49:26.521[3.0, 3.25, 4560.0, 13363.0, 1.0, 0.0, 4.0, 3.0, 11.0, 2760.0, 1800.0, 47.6205, -122.214, 4060.0, 13362.0, 20.0, 0.0, 0.0][2005883.1]1True
2792024-02-09 16:49:26.521[5.0, 3.0, 3420.0, 18129.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2540.0, 880.0, 47.5333, -122.217, 3750.0, 16316.0, 62.0, 1.0, 53.0][1325961.0]1True
2882024-02-09 16:49:26.521[3.0, 2.5, 5403.0, 24069.0, 2.0, 1.0, 4.0, 4.0, 12.0, 5403.0, 0.0, 47.4169, -122.348, 3980.0, 104374.0, 39.0, 0.0, 0.0][1946437.2]1True
3012024-02-09 16:49:26.521[4.0, 4.5, 5770.0, 10050.0, 1.0, 0.0, 3.0, 5.0, 9.0, 3160.0, 2610.0, 47.677, -122.275, 2950.0, 6700.0, 65.0, 0.0, 0.0][1689843.2]1True
3132024-02-09 16:49:26.521[4.0, 3.25, 4160.0, 47480.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4160.0, 0.0, 47.7266, -122.115, 3400.0, 40428.0, 19.0, 0.0, 0.0][1082353.2]1True
3142024-02-09 16:49:26.521[4.0, 2.5, 4200.0, 35267.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4200.0, 0.0, 47.7108, -122.071, 3540.0, 22234.0, 24.0, 0.0, 0.0][1181336.0]1True
3282024-02-09 16:49:26.521[3.0, 3.5, 3080.0, 6495.0, 2.0, 0.0, 3.0, 3.0, 11.0, 2530.0, 550.0, 47.6321, -122.393, 4120.0, 8620.0, 18.0, 1.0, 10.0][1122811.8]1True
3412024-02-09 16:49:26.521[3.0, 3.25, 3230.0, 7800.0, 2.0, 0.0, 3.0, 3.0, 10.0, 3230.0, 0.0, 47.6348, -122.403, 3030.0, 6600.0, 9.0, 0.0, 0.0][1077279.2]1True
3482024-02-09 16:49:26.521[3.0, 3.0, 3920.0, 13085.0, 2.0, 1.0, 4.0, 4.0, 11.0, 3920.0, 0.0, 47.5716, -122.204, 3450.0, 13287.0, 18.0, 0.0, 0.0][1452224.5]1True
3652024-02-09 16:49:26.521[4.0, 3.25, 4700.0, 38412.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3420.0, 1280.0, 47.6445, -122.167, 3640.0, 35571.0, 36.0, 0.0, 0.0][1164589.4]1True
3752024-02-09 16:49:26.521[4.0, 3.5, 3440.0, 9776.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3440.0, 0.0, 47.5374, -122.216, 2400.0, 11000.0, 9.0, 0.0, 0.0][1124493.2]1True
3762024-02-09 16:49:26.521[4.0, 3.25, 4240.0, 25639.0, 2.0, 0.0, 3.0, 3.0, 10.0, 3550.0, 690.0, 47.3241, -122.378, 3590.0, 24967.0, 25.0, 0.0, 0.0][1156651.2]1True
4432024-02-09 16:49:26.521[4.0, 3.5, 4285.0, 9567.0, 2.0, 0.0, 1.0, 5.0, 10.0, 3485.0, 800.0, 47.6434, -122.409, 2960.0, 6902.0, 68.0, 0.0, 0.0][1886959.4]1True
4642024-02-09 16:49:26.521[4.0, 3.5, 4460.0, 16271.0, 2.0, 0.0, 2.0, 3.0, 11.0, 4460.0, 0.0, 47.5862, -121.97, 4540.0, 17122.0, 13.0, 0.0, 0.0][1208638.0]1True
4692024-02-09 16:49:26.521[4.0, 4.25, 3500.0, 8750.0, 1.0, 0.0, 4.0, 5.0, 9.0, 2140.0, 1360.0, 47.7222, -122.367, 3110.0, 8750.0, 63.0, 0.0, 0.0][1140733.8]1True
4792024-02-09 16:49:26.521[5.0, 3.75, 4170.0, 8142.0, 2.0, 0.0, 2.0, 3.0, 10.0, 4170.0, 0.0, 47.5354, -122.181, 3030.0, 7980.0, 9.0, 0.0, 0.0][1098628.8]1True
4862024-02-09 16:49:26.521[4.0, 3.25, 3320.0, 8587.0, 3.0, 0.0, 0.0, 3.0, 11.0, 2950.0, 370.0, 47.691, -122.337, 1860.0, 5668.0, 6.0, 0.0, 0.0][1130661.0]1True
5022024-02-09 16:49:26.521[4.0, 2.5, 4090.0, 11225.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4090.0, 0.0, 47.581, -121.971, 3510.0, 8762.0, 9.0, 0.0, 0.0][1048372.4]1True
5562024-02-09 16:49:26.521[5.0, 4.0, 4360.0, 8030.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4360.0, 0.0, 47.5923, -121.973, 3570.0, 6185.0, 0.0, 0.0, 0.0][1160512.8]1True
5852024-02-09 16:49:26.521[5.0, 3.5, 5430.0, 10327.0, 2.0, 0.0, 2.0, 3.0, 10.0, 4010.0, 1420.0, 47.5476, -122.116, 4340.0, 10324.0, 7.0, 0.0, 0.0][1207858.6]1True
6012024-02-09 16:49:26.521[3.0, 2.25, 2390.0, 7875.0, 1.0, 0.0, 1.0, 3.0, 10.0, 1980.0, 410.0, 47.6515, -122.278, 3720.0, 9075.0, 66.0, 0.0, 0.0][1364149.9]1True
6392024-02-09 16:49:26.521[4.0, 3.5, 3770.0, 8501.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3770.0, 0.0, 47.6744, -122.196, 1520.0, 9660.0, 6.0, 0.0, 0.0][1169643.0]1True
6482024-02-09 16:49:26.521[5.0, 4.0, 4660.0, 9900.0, 2.0, 0.0, 2.0, 4.0, 9.0, 2600.0, 2060.0, 47.5135, -122.2, 3380.0, 9900.0, 35.0, 0.0, 0.0][1058105.0]1True
6762024-02-09 16:49:26.521[3.0, 3.0, 2480.0, 5500.0, 2.0, 0.0, 3.0, 3.0, 10.0, 1730.0, 750.0, 47.6466, -122.404, 2950.0, 5670.0, 64.0, 1.0, 55.0][1100884.1]1True
7142024-02-09 16:49:26.521[4.0, 2.75, 4020.0, 18745.0, 2.0, 0.0, 4.0, 4.0, 10.0, 2830.0, 1190.0, 47.6042, -122.21, 3150.0, 20897.0, 26.0, 0.0, 0.0][1322835.9]1True
7162024-02-09 16:49:26.521[4.0, 2.75, 3260.0, 19542.0, 1.0, 0.0, 0.0, 4.0, 10.0, 2170.0, 1090.0, 47.6245, -122.236, 3480.0, 19863.0, 46.0, 0.0, 0.0][1364650.2]1True
7172024-02-09 16:49:26.521[3.0, 2.75, 3170.0, 34850.0, 1.0, 0.0, 0.0, 5.0, 9.0, 3170.0, 0.0, 47.6611, -122.169, 3920.0, 36740.0, 58.0, 0.0, 0.0][1227073.8]1True
7182024-02-09 16:49:26.521[3.0, 3.0, 3570.0, 6250.0, 2.0, 0.0, 2.0, 3.0, 10.0, 2710.0, 860.0, 47.5624, -122.399, 2550.0, 7596.0, 30.0, 0.0, 0.0][1124493.2]1True
7282024-02-09 16:49:26.521[5.0, 3.25, 5790.0, 13726.0, 2.0, 0.0, 3.0, 3.0, 10.0, 4430.0, 1360.0, 47.5388, -122.114, 5790.0, 13726.0, 0.0, 0.0, 0.0][1189654.4]1True
7442024-02-09 16:49:26.521[4.0, 3.0, 4750.0, 21701.0, 1.5, 0.0, 0.0, 5.0, 11.0, 4750.0, 0.0, 47.6454, -122.218, 3120.0, 18551.0, 38.0, 0.0, 0.0][2002393.5]1True
7512024-02-09 16:49:26.521[4.0, 3.75, 4410.0, 8112.0, 3.0, 0.0, 4.0, 3.0, 11.0, 3570.0, 840.0, 47.5888, -122.392, 2770.0, 5750.0, 12.0, 0.0, 0.0][1967344.1]1True
7602024-02-09 16:49:26.521[4.0, 3.25, 5010.0, 49222.0, 2.0, 0.0, 0.0, 5.0, 9.0, 3710.0, 1300.0, 47.5489, -122.092, 3140.0, 54014.0, 36.0, 0.0, 0.0][1092274.1]1True
7892024-02-09 16:49:26.521[4.0, 3.5, 4300.0, 70407.0, 2.0, 0.0, 0.0, 3.0, 10.0, 2710.0, 1590.0, 47.4472, -122.092, 3520.0, 26727.0, 22.0, 0.0, 0.0][1115275.0]1True
8392024-02-09 16:49:26.521[5.0, 3.5, 4150.0, 13232.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4150.0, 0.0, 47.3417, -122.182, 3840.0, 15121.0, 9.0, 0.0, 0.0][1042119.1]1True
8452024-02-09 16:49:26.521[4.0, 2.75, 3800.0, 9606.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3800.0, 0.0, 47.7368, -122.208, 3400.0, 9677.0, 6.0, 0.0, 0.0][1039781.25]1True
8662024-02-09 16:49:26.521[5.0, 2.25, 3320.0, 13138.0, 1.0, 0.0, 2.0, 4.0, 9.0, 1900.0, 1420.0, 47.759, -122.269, 2820.0, 13138.0, 51.0, 0.0, 0.0][1108000.1]1True
8692024-02-09 16:49:26.521[4.0, 2.75, 2620.0, 13777.0, 1.5, 0.0, 2.0, 4.0, 9.0, 1720.0, 900.0, 47.58, -122.285, 3530.0, 9287.0, 88.0, 0.0, 0.0][1223839.1]1True
8892024-02-09 16:49:26.521[4.0, 2.5, 3470.0, 20445.0, 2.0, 0.0, 0.0, 4.0, 10.0, 3470.0, 0.0, 47.547, -122.219, 3360.0, 21950.0, 51.0, 0.0, 0.0][1412215.2]1True
9362024-02-09 16:49:26.521[4.0, 3.0, 4040.0, 19700.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4040.0, 0.0, 47.7205, -122.127, 3930.0, 21887.0, 27.0, 0.0, 0.0][1028923.06]1True
9592024-02-09 16:49:26.521[4.0, 4.5, 5120.0, 41327.0, 2.0, 0.0, 0.0, 3.0, 10.0, 3290.0, 1830.0, 47.7009, -122.059, 3360.0, 82764.0, 6.0, 0.0, 0.0][1204324.8]1True
9692024-02-09 16:49:26.521[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.8]1True
9932024-02-09 16:49:26.521[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0, 9.0, 3140.0, 450.0, 47.6763, -122.267, 2100.0, 6250.0, 9.0, 0.0, 0.0][1004846.5]1True

Undeploy Main Pipeline

With the examples and tutorial complete, we will undeploy the main pipeline and return the resources back to the Wallaroo instance.

mainpipeline.undeploy()
Waiting for undeployment - this will take up to 45s ..................................... ok
namelogpipeline-test
created2024-02-09 16:21:09.406182+00:00
last_updated2024-02-09 16:53:37.061953+00:00
deployedFalse
archNone
tags
versions764c7706-c996-42e9-90ff-87b1b496f98d, 05c46dbc-9d72-40d5-bc4c-7fee7bc3e971, 9a4d76f5-9905-4063-8bf8-47e103987515, d5e4882a-3c17-4965-b059-66432a50a3cd, 00b3d5e7-4644-4138-b73d-b0511b3c9e2a, e143a2d5-5641-4dcc-8ae4-786fd777a30a, e2b9d903-4015-4d09-902b-9150a7196cea, 9df38be1-d2f4-4be1-9022-8f0570a238b9, 3078b49f-3eff-48d1-8d9b-a8780b329ecc, 21bff9df-828f-40e7-8a22-449a2e636b44, f78a7030-bd25-4bf7-ba0d-a18cfe3790e0, 10c1ac25-d626-4413-8d5d-1bed42d0e65c, b179b693-b6b6-4ff9-b2a4-2a639d88bc9b, da7b9cf0-81e8-452b-8b70-689406dc9548, a9a9b62c-9d37-427f-99af-67725558bf9b, 1c14591a-96b4-4059-bb63-2d2bc4e308d5, add660ac-0ebf-4a24-bb6d-6cdc875866c8
stepslogcontrol
publishedFalse

10 - Wallaroo Edge Observability with Wallaroo Assays

A demonstration on deploying a Wallaroo Pipeline as a Wallaroo Server edge deployment, and using the inference data for assays.

This tutorial and the assets can be downloaded as part of the Wallaroo Tutorials repository.

Wallaroo Edge Observability with Assays Tutorial

This notebook is designed to demonstrate the Wallaroo Edge Observability with Wallaroo Assays. This notebook will walk through the process of:

  • In Wallaroo Ops:
    • Setting up a workspace, pipeline, and model for deriving the price of a house based on inputs.
    • Creating an assay from a sample of inferences.
    • Display the inference result and upload the assay to the Wallaroo instance where it can be referenced later.
  • In a remote aka edge location:
    • Deploying the Wallaroo pipeline as a Wallaroo Inference Server deployed on an edge device with observability features.
  • In Wallaroo Ops:
    • Updating the assay to use the edge location’s inferences for assays.

This tutorial provides the following:

  • Models:
    • models/rf_model.onnx: The champion model that has been used in this environment for some time.
    • models/xgb_model.onnx and models/gbr_model.onnx: Rival models that will be tested against the champion.
  • Data:
    • data/xtest-1.df.json and data/xtest-1k.df.json: DataFrame JSON inference inputs with 1 input and 1,000 inputs.
    • data/xtest-1k.arrow: Apache Arrow inference inputs with 1 input and 1,000 inputs.

Prerequisites

  • A deployed Wallaroo Ops instance.
  • A location with Docker or Kubernetes with helm for Wallaroo Inference server deployments.
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.
    • pandas: Pandas, mainly used for Pandas DataFrame

References

# used for unique workspace names

import string
import random

suffix= ''.join(random.choice(string.ascii_lowercase) for i in range(4))
suffix='jch'

workspace_name = f'edge-observability-{suffix}'
main_pipeline_name = 'houseprice-estimation-edge'
model_name_control = 'housepricesagacontrol'
model_file_name_control = './models/rf_model.onnx'

# Set the name of the assay
edge_name=f"house-price-edge-{suffix}"
def get_workspace(name, client):
    workspace = None
    for ws in wl.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = wl.create_workspace(name)
    return workspace

def get_pipeline(name, workspace):
    pipelines = workspace.pipelines()
    pipe_filter = filter(lambda x: x.name() == name, pipelines)
    pipes = list(pipe_filter)
    # we can't have a pipe in the workspace with the same name, so it's always the first
    if pipes:
        pipeline = pipes[0]
    else:
        pipeline = wl.build_pipeline(name)
    return pipeline

Initial Steps

Import libraries

The first step is to import the libraries needed for this notebook.

import wallaroo
from wallaroo.object import EntityNotFoundError
from wallaroo.framework import Framework

from IPython.display import display

# used to display DataFrame information without truncating
from IPython.display import display
import pandas as pd
pd.set_option('display.max_colwidth', None)

import datetime
import time

Connect to the Wallaroo Instance

The first step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

# Login through local Wallaroo instance

wl = wallaroo.Client()

Create Workspace

We will create a workspace to manage our pipeline and models. The following variables will set the name of our sample workspace then set it as the current workspace.

Workspace, pipeline, and model names should be unique to each user, so we’ll add in a randomly generated suffix so multiple people can run this tutorial in a Wallaroo instance without effecting each other.

workspace = get_workspace(workspace_name, wl)

wl.set_current_workspace(workspace)
{'name': 'edge-observability-jch', 'id': 11, 'archived': False, 'created_by': '93dc3434-cf57-47b4-a3e4-b2168b1fd7e1', 'created_at': '2023-12-12T18:03:20.250521+00:00', 'models': [], 'pipelines': []}

Upload The Champion Model

For our example, we will upload the champion model that has been trained to derive house prices from a variety of inputs. The model file is rf_model.onnx, and is uploaded with the name housingcontrol.

housing_model_control = (wl.upload_model(model_name_control, 
                                        model_file_name_control, 
                                        framework=Framework.ONNX)
                                        .configure(tensor_fields=["tensor"])
                        )

Standard Pipeline Steps

Build the Pipeline

This pipeline is made to be an example of an existing situation where a model is deployed and being used for inferences in a production environment. We’ll call it housepricepipeline, set housingcontrol as a pipeline step, then run a few sample inferences.

This pipeline will be a simple one - just a single pipeline step.

mainpipeline = get_pipeline(main_pipeline_name, workspace)
mainpipeline.clear()

mainpipeline.add_model_step(housing_model_control)

#minimum deployment config
deploy_config = wallaroo.DeploymentConfigBuilder().replica_count(1).cpus(0.5).memory("1Gi").build()

mainpipeline.deploy(deployment_config = deploy_config)
namehouseprice-estimation-edge
created2023-12-12 18:03:28.275490+00:00
last_updated2023-12-12 18:03:29.206241+00:00
deployedTrue
archNone
tags
versions66d73202-0c8c-4468-b589-67286a2f5dd6, be11e14c-1565-4d68-8bf5-f9eebd7cd458
stepshousepricesagacontrol
publishedFalse

Testing

We’ll use two inferences as a quick sample test - one that has a house that should be determined around $700k, the other with a house determined to be around $1.5 million. We’ll also save the start and end periods for these events to for later log functionality.

normal_input = pd.DataFrame.from_records({"tensor": [[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0]]})
result = mainpipeline.infer(normal_input)
display(result)
timein.tensorout.variablecheck_failures
02023-12-12 18:03:46.251[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
large_house_input = pd.DataFrame.from_records({'tensor': [[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0]]})
large_house_result = mainpipeline.infer(large_house_input)
display(large_house_result)
timein.tensorout.variablecheck_failures
02023-12-12 18:03:46.644[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.4]0

Assays

Wallaroo assays provide a method for detecting input or model drift. These can be triggered either when unexpected input is provided for the inference, or when the model needs to be retrained from changing environment conditions.

Wallaroo assays can track either an input field and its index, or an output field and its index. For full details, see the Wallaroo Assays Management Guide.

For this example, we will:

  • Perform sample inferences based on lower priced houses.
  • Create an assay with the baseline set off those lower priced houses.
  • Generate inferences spread across all house values, plus specific set of high priced houses to trigger the assay alert.
  • Run an interactive assay to show the detection of values outside the established baseline.

Assay Generation

To start the demonstration, we’ll create a baseline of values from houses with small estimated prices and set that as our baseline. Assays are typically run on a 24 hours interval based on a 24 hour window of data, but we’ll bypass that by setting our baseline time even shorter.

small_houses_inputs = pd.read_json('./data/smallinputs.df.json')
baseline_size = 500

# Where the baseline data will start
assay_baseline_start = datetime.datetime.now()

# These inputs will be random samples of small priced houses.  Around 30,000 is a good number
small_houses = small_houses_inputs.sample(baseline_size, replace=True).reset_index(drop=True)

# Wait 30 seconds to set this data apart from the rest
time.sleep(30)
small_results = mainpipeline.infer(small_houses)

# Set the baseline end

assay_baseline_end = datetime.datetime.now()
display(small_results)
timein.tensorout.variablecheck_failures
02023-12-12 18:04:57.444[2.0, 1.0, 830.0, 26329.0, 1.0, 1.0, 3.0, 4.0, 6.0, 830.0, 0.0, 47.4011993408, -122.4250030518, 2030.0, 27338.0, 86.0, 0.0, 0.0][379398.28]0
12023-12-12 18:04:57.444[5.0, 1.75, 2660.0, 10637.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1670.0, 990.0, 47.6944999695, -122.2919998169, 1570.0, 6825.0, 92.0, 0.0, 0.0][716776.56]0
22023-12-12 18:04:57.444[3.0, 1.75, 1630.0, 15600.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1630.0, 0.0, 47.6800003052, -122.1650009155, 1830.0, 10850.0, 56.0, 0.0, 0.0][559631.06]0
32023-12-12 18:04:57.444[3.0, 1.0, 1980.0, 3243.0, 1.5, 0.0, 0.0, 3.0, 8.0, 1980.0, 0.0, 47.6428985596, -122.327003479, 1380.0, 1249.0, 102.0, 0.0, 0.0][577149.0]0
42023-12-12 18:04:57.444[4.0, 2.5, 2230.0, 4372.0, 2.0, 0.0, 0.0, 5.0, 8.0, 1540.0, 690.0, 47.6697998047, -122.3339996338, 2020.0, 4372.0, 79.0, 0.0, 0.0][682284.56]0
...............
4952023-12-12 18:04:57.444[3.0, 2.75, 2050.0, 3320.0, 1.5, 0.0, 0.0, 4.0, 7.0, 1580.0, 470.0, 47.6719017029, -122.3010025024, 1760.0, 4150.0, 87.0, 0.0, 0.0][630865.5]0
4962023-12-12 18:04:57.444[3.0, 2.5, 1520.0, 4170.0, 2.0, 0.0, 0.0, 3.0, 7.0, 1520.0, 0.0, 47.3842010498, -122.0400009155, 1560.0, 4237.0, 10.0, 0.0, 0.0][261886.94]0
4972023-12-12 18:04:57.444[3.0, 1.75, 1460.0, 7800.0, 1.0, 0.0, 0.0, 2.0, 7.0, 1040.0, 420.0, 47.3035011292, -122.3820037842, 1310.0, 7865.0, 36.0, 0.0, 0.0][300480.3]0
4982023-12-12 18:04:57.444[4.0, 1.75, 2320.0, 9240.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1160.0, 1160.0, 47.4908981323, -122.2570037842, 2130.0, 7320.0, 55.0, 1.0, 55.0][404676.1]0
4992023-12-12 18:04:57.444[5.0, 3.0, 2170.0, 2440.0, 1.5, 0.0, 0.0, 4.0, 8.0, 1450.0, 720.0, 47.6724014282, -122.3170013428, 2070.0, 4000.0, 103.0, 0.0, 0.0][675545.44]0

500 rows × 4 columns

Derive Numpy Values

For our assay, we will create it using the inference results and collect them into one numpy array.

# get the numpy values

# set the results to a non-array value
small_results_baseline_df = small_results.copy()
small_results_baseline_df['variable']=small_results['out.variable'].map(lambda x: x[0])
small_results_baseline_df
timein.tensorout.variablecheck_failuresvariable
02023-12-12 18:04:57.444[2.0, 1.0, 830.0, 26329.0, 1.0, 1.0, 3.0, 4.0, 6.0, 830.0, 0.0, 47.4011993408, -122.4250030518, 2030.0, 27338.0, 86.0, 0.0, 0.0][379398.28]0379398.28
12023-12-12 18:04:57.444[5.0, 1.75, 2660.0, 10637.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1670.0, 990.0, 47.6944999695, -122.2919998169, 1570.0, 6825.0, 92.0, 0.0, 0.0][716776.56]0716776.56
22023-12-12 18:04:57.444[3.0, 1.75, 1630.0, 15600.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1630.0, 0.0, 47.6800003052, -122.1650009155, 1830.0, 10850.0, 56.0, 0.0, 0.0][559631.06]0559631.06
32023-12-12 18:04:57.444[3.0, 1.0, 1980.0, 3243.0, 1.5, 0.0, 0.0, 3.0, 8.0, 1980.0, 0.0, 47.6428985596, -122.327003479, 1380.0, 1249.0, 102.0, 0.0, 0.0][577149.0]0577149.00
42023-12-12 18:04:57.444[4.0, 2.5, 2230.0, 4372.0, 2.0, 0.0, 0.0, 5.0, 8.0, 1540.0, 690.0, 47.6697998047, -122.3339996338, 2020.0, 4372.0, 79.0, 0.0, 0.0][682284.56]0682284.56
..................
4952023-12-12 18:04:57.444[3.0, 2.75, 2050.0, 3320.0, 1.5, 0.0, 0.0, 4.0, 7.0, 1580.0, 470.0, 47.6719017029, -122.3010025024, 1760.0, 4150.0, 87.0, 0.0, 0.0][630865.5]0630865.50
4962023-12-12 18:04:57.444[3.0, 2.5, 1520.0, 4170.0, 2.0, 0.0, 0.0, 3.0, 7.0, 1520.0, 0.0, 47.3842010498, -122.0400009155, 1560.0, 4237.0, 10.0, 0.0, 0.0][261886.94]0261886.94
4972023-12-12 18:04:57.444[3.0, 1.75, 1460.0, 7800.0, 1.0, 0.0, 0.0, 2.0, 7.0, 1040.0, 420.0, 47.3035011292, -122.3820037842, 1310.0, 7865.0, 36.0, 0.0, 0.0][300480.3]0300480.30
4982023-12-12 18:04:57.444[4.0, 1.75, 2320.0, 9240.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1160.0, 1160.0, 47.4908981323, -122.2570037842, 2130.0, 7320.0, 55.0, 1.0, 55.0][404676.1]0404676.10
4992023-12-12 18:04:57.444[5.0, 3.0, 2170.0, 2440.0, 1.5, 0.0, 0.0, 4.0, 8.0, 1450.0, 720.0, 47.6724014282, -122.3170013428, 2070.0, 4000.0, 103.0, 0.0, 0.0][675545.44]0675545.44

500 rows × 5 columns

# get the numpy values
small_results_baseline = small_results_baseline_df['variable'].to_numpy()
small_results_baseline
array([ 379398.28,  716776.56,  559631.06,  577149.  ,  682284.56,
        950176.7 ,  675545.44,  559631.06,  256630.36,  340764.53,
        559631.06,  246088.6 ,  241852.33, 1322835.6 ,  317132.63,
        435628.72,  519346.94,  252192.9 ,  536371.2 ,  559631.06,
        575724.7 ,  559452.94,  725572.56,  252192.9 ,  274207.16,
        703282.7 ,  758714.3 ,  827411.25,  736751.3 ,  657905.75,
        548006.06,  557391.25,  448180.78,  451058.3 ,  381737.6 ,
        502022.94,  411000.13,  488736.22,  716558.56,  430252.3 ,
        450867.7 ,  416774.6 ,  559631.06,  682181.9 ,  879092.9 ,
        555231.94,  391459.97,  244380.27,  236238.67,  328513.6 ,
        252539.6 ,  879092.9 ,  358668.2 ,  291903.97,  365436.22,
        320863.72,  713485.7 ,  284336.47,  448627.8 ,  439977.53,
        758714.3 ,  721518.44,  701940.7 ,  879092.9 ,  559631.06,
        435628.72,  303002.25,  551223.44,  447162.84,  536371.2 ,
        244380.27,  873848.44,  725572.56,  557391.25,  725184.1 ,
       1077279.1 ,  554921.94,  706407.4 ,  673288.6 ,  448627.8 ,
        557391.25,  581002.94,  380009.28,  435628.72,  513264.66,
        572709.94,  637377.  ,  448627.8 ,  557391.25,  284336.47,
        283759.94,  292859.44,  703282.7 ,  258377.  ,  450867.7 ,
        700294.25,  557391.25,  448627.8 ,  380009.28,  287576.4 ,
        701940.7 ,  981676.7 ,  557391.25,  341649.34,  450867.7 ,
       1100884.3 ,  365436.22,  448627.8 ,  519346.94,  293808.03,
        368504.3 ,  437177.97,  423382.72,  448627.8 ,  241330.17,
        712309.9 ,  244380.27,  236238.67,  987157.25,  713979.  ,
        288798.1 ,  904378.7 ,  400561.2 ,  448627.8 ,  904378.7 ,
        424966.6 ,  758714.3 ,  450867.7 ,  641162.2 ,  473287.25,
        557391.25,  278475.66,  559631.06,  736751.3 ,  404676.1 ,
        313096.  ,  447951.56,  275408.03,  431992.22,  450996.34,
        718445.7 ,  296411.7 ,  450867.7 ,  435628.72,  682284.56,
        450867.7 , 1295531.8 ,  757403.4 ,  559631.06,  435628.72,
        363491.63,  713358.8 ,  404676.1 ,  447162.84,  450867.7 ,
        559631.06,  630865.5 ,  597475.75,  999203.06,  236238.67,
        544392.06,  365436.22,  559631.06,  437177.97, 1052897.9 ,
        700294.25,  266405.63,  559452.94,  448627.8 ,  268856.88,
        448627.8 ,  713979.  ,  435628.72,  391459.97,  276709.06,
        765468.9 ,  637377.  ,  846775.06,  536371.2 ,  437177.97,
        581002.94,  435628.72,  700271.56,  415964.3 ,  513083.8 ,
        431929.2 ,  236238.67,  291857.06,  448627.8 ,  457449.06,
        442168.13,  236238.67,  711565.44,  291239.75,  725875.94,
        831483.56,  448627.8 ,  426066.38,  701940.7 ,  829775.3 ,
        431992.22,  308049.63,  553463.25,  300446.66,  291239.75,
        553463.25,  439977.53,  873848.44,  713979.  ,  448627.8 ,
        919031.5 , 1052897.9 ,  765468.9 ,  431992.22,  437177.97,
        536371.2 ,  379752.2 ,  713485.7 ,  446769.  ,  837085.5 ,
        536371.2 ,  837085.5 ,  552992.06,  450867.7 ,  642519.7 ,
        381737.6 ,  536371.2 ,  713485.7 ,  442168.13,  303002.25,
        363491.63,  263051.63,  437177.97,  448627.8 ,  846775.06,
        553463.25,  523152.63,  379752.2 ,  665791.5 ,  475270.97,
        758714.3 ,  725184.1 ,  448627.8 ,  437177.97,  236238.67,
        383833.88,  559631.06,  244351.92,  713485.7 ,  450867.7 ,
        416774.6 ,  575285.1 ,  630865.5 ,  701940.7 ,  290323.1 ,
        284845.34,  554921.94,  581002.94,  519346.94,  340764.53,
        338357.88,  340764.53,  421402.1 ,  453195.8 ,  999203.06,
        448627.8 ,  236238.67,  274207.16,  266405.63,  536371.2 ,
        251194.58,  917346.2 ,  349102.75,  947561.9 ,  431992.22,
        291239.75,  252192.9 ,  448627.8 ,  385561.78, 1122811.6 ,
        317765.63,  725875.94,  784103.56,  422481.5 ,  447951.56,
        241657.14,  267013.97,  597475.75,  458858.44,  322015.03,
        536371.2 ,  725572.56,  448627.8 ,  538436.75,  538436.75,
        349102.75,  288798.1 ,  448627.8 ,  557391.25,  448627.8 ,
        431992.22,  544392.06, 1160512.8 ,  416774.6 ,  300988.8 ,
        310992.94,  555231.94,  421306.6 ,  630865.5 ,  278475.66,
        656923.44,  921695.4 ,  442168.13,  680620.7 ,  236238.67,
        324875.06,  628260.9 ,  274207.16,  759983.6 ,  252192.9 ,
        290323.1 ,  424966.6 ,  450867.7 ,  448627.8 ,  450867.7 ,
        400561.2 ,  557391.25,  921695.4 ,  303002.25,  274207.16,
        450867.7 , 1100884.3 ,  475270.97,  886958.6 ,  573403.2 ,
        557391.25,  873848.44,  379076.28,  464057.38,  261201.22,
        246525.2 ,  437177.97,  252539.6 , 1060847.5 ,  532234.1 ,
        947561.9 ,  713485.7 ,  424966.6 ,  400561.2 , 1295531.8 ,
        435628.72,  333878.22,  573403.2 ,  517771.6 ,  450996.34,
        434534.22,  682284.56,  831483.56,  554921.94,  544392.06,
        937359.6 , 1077279.1 ,  332134.97,  391459.97,  718013.7 ,
        448627.8 ,  303002.25,  424966.6 ,  348616.63,  758714.3 ,
        532234.1 ,  469038.13,  435628.72,  334257.7 ,  309800.8 ,
        274207.16,  516278.63,  559631.06,  276709.06,  718445.7 ,
        437177.97,  437177.97,  675545.44,  559923.9 ,  303002.25,
        404551.03,  432908.6 ,  687786.44,  292859.44,  411000.13,
        252192.9 , 1108000.  ,  921695.4 , 1124493.  ,  542342.  ,
        293808.03,  448627.8 ,  453195.8 ,  383833.88,  630865.5 ,
        380009.28,  340764.53,  758714.3 ,  450867.7 ,  435628.72,
        276709.06,  421402.1 ,  340764.53,  886958.6 ,  447162.84,
        475270.97,  442856.4 , 1082353.1 ,  416774.6 ,  785664.75,
        383833.88,  403520.16,  404040.78,  921561.56,  437177.97,
        482485.6 ,  244380.27,  340764.53,  266405.63,  718588.94,
        450867.7 ,  332134.97,  563844.44,  701940.7 ,  784103.56,
        277145.63,  418823.38,  784103.56,  450996.34,  426066.38,
        758714.3 , 1227073.8 ,  332134.97,  290323.1 ,  559631.06,
        277145.63,  701940.7 ,  291857.06,  404484.53,  418823.38,
        236238.67,  380009.28,  342604.47,  542342.  ,  243585.28,
        516278.63,  448627.8 ,  594678.75,  431929.2 ,  291239.75,
        349102.75,  723934.9 ,  559631.06,  517121.56,  423382.72,
        296202.7 ,  435628.72,  252192.9 , 1039781.2 ,  450867.7 ,
        303936.78,  393833.97,  403520.16,  276709.06,  284845.34,
        320863.72,  308049.63,  267013.97,  701940.7 ,  291239.75,
        919031.5 ,  461279.1 ,  450867.7 ,  557391.25,  726181.75,
        700271.56,  400561.2 ,  542342.  ,  788215.2 ,  450996.34,
        675545.44,  340764.53,  765468.9 ,  536371.2 ,  435628.72,
        846775.06,  765468.9 ,  641162.2 ,  779810.06,  683845.75,
        630865.5 ,  261886.94,  300480.3 ,  404676.1 ,  675545.44])

Create Assay from Numpy Values

Assays are created with the wallaroo.client.build_assay method. We provide the following parameters:

  • The unique name of the assay
  • The pipeline
  • The name of the model to track inference data from
  • The model name
  • The iopath (the fields output by the model to track)
  • The baseline data - our derived numpy array.
assay_baseline_from_numpy_name = "assays from numpy for edge"

# assay builder by baseline
assay_builder_from_numpy = wl.build_assay(assay_name=assay_baseline_from_numpy_name, 
                               pipeline=mainpipeline, 
                               model_name=model_name_control, 
                               iopath="output variable 0", 
                               baseline_data = small_results_baseline)

We’ll display the histogram of the current baseline, which came directly from the previous inference results.

# assay_builder_from_numpy.window_builder().add_width(minutes=1)
# assay_builder_from_numpy.window_builder().add_start(assay_baseline_start)
<wallaroo.assay_config.WindowBuilder at 0x177b80c40>
# assay_config_from_numpy = assay_builder_from_numpy.build()
# assay_analysis_from_numpy = assay_config_from_numpy.interactive_run()
# get the histogram from the numpy baseline
assay_builder_from_numpy.baseline_histogram()

Assay Testing

Now we’ll perform some inferences with a spread of values, then a larger set with a set of larger house values to trigger our assay alert. We’ll use our assay created from the numpy baseline values to demonstrate.

Because our assay windows are 1 minutes, we’ll need to stagger our inference values to be set into the proper windows. This will take about 4 minutes.

# Get a spread of house values

# Set the start for our assay window period.
assay_window_start = datetime.datetime.now()

time.sleep(35)
regular_houses_inputs = pd.read_json('./data/xtest-1k.df.json', orient="records")
inference_size = 1000

regular_houses = regular_houses_inputs.sample(inference_size, replace=True).reset_index(drop=True)

# And a spread of large house values

time.sleep(65)
big_houses_inputs = pd.read_json('./data/biginputs.df.json', orient="records")
big_houses = big_houses_inputs.sample(inference_size, replace=True).reset_index(drop=True)

mainpipeline.infer(big_houses)

# End our assay window period
assay_window_end = datetime.datetime.now()

Assay Configuration

Because we are using a short amount of data, we’ll shorten the window and interval to just 1 minute each, and narrow the window to when we started our set of inferences to when we finish.

assay_builder_from_numpy.add_run_until(assay_window_end)
assay_builder_from_numpy.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_numpy.build()
assay_analysis_from_numpy = assay_config_from_numpy.interactive_run()
# Show how many assay windows were analyzed, then show the chart
print(f"Generated {len(assay_analysis_from_numpy)} analyses")
assay_analysis_from_numpy.chart_scores()
Generated 2 analyses
# Display the results as a DataFrame - we're mainly interested in the score and whether the 
# alert threshold was triggered
display(assay_analysis_from_numpy.to_dataframe().loc[:, ["score", "start", "alert_threshold", "status"]])
scorestartalert_thresholdstatus
00.0027692023-12-12T18:04:26.569377+00:000.25Ok
18.8699742023-12-12T18:05:26.569377+00:000.25Alert

Undeploy Main Pipeline

With the examples and tutorial complete, we will undeploy the main pipeline and return the resources back to the Wallaroo instance.

mainpipeline.undeploy()
namehouseprice-estimation-edge
created2023-12-12 18:03:28.275490+00:00
last_updated2023-12-12 18:03:29.206241+00:00
deployedFalse
archNone
tags
versions66d73202-0c8c-4468-b589-67286a2f5dd6, be11e14c-1565-4d68-8bf5-f9eebd7cd458
stepshousepricesagacontrol
publishedFalse

Edge Deployment

We can now deploy the pipeline to an edge device. This will require the following steps:

  • Publish the pipeline: Publishes the pipeline to the OCI registry.
  • Add Edge: Add the edge location to the pipeline publish.
  • Deploy Edge: Deploy the edge device with the edge location settings.

Publish Pipeline

Publishing the pipeline uses the pipeline publish() command, which returns the OCI registry information.

assay_pub = mainpipeline.publish()
Waiting for pipeline publish... It may take up to 600 sec.
Pipeline is Publishing....Published.

Add Edge

The edge location is added with the publish.add_edge(name) method. This returns the OCI registration information, and the EDGE_BUNDLE information. The EDGE_BUNDLE data is a base64 encoded set of parameters for the pipeline that the edge device is associated with.

display(edge_name)
edge_publish = assay_pub.add_edge(edge_name)
display(edge_publish)
'house-price-edge-jch'
ID3
Pipeline Version210d54bf-2788-4e61-be63-31a57738ce15
StatusPublished
Engine URLghcr.io/wallaroolabs/doc-samples/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4103
Pipeline URLghcr.io/wallaroolabs/doc-samples/pipelines/houseprice-estimation-edge:210d54bf-2788-4e61-be63-31a57738ce15
Helm Chart URLoci://ghcr.io/wallaroolabs/doc-samples/charts/houseprice-estimation-edge
Helm Chart Referenceghcr.io/wallaroolabs/doc-samples/charts@sha256:a075005a0aca85006392b49edcb0066f17261f32ace3796e87e2a753d78f42d3
Helm Chart Version0.0.1-210d54bf-2788-4e61-be63-31a57738ce15
Engine Config{'engine': {'resources': {'limits': {'cpu': 4.0, 'memory': '3Gi'}, 'requests': {'cpu': 4.0, 'memory': '3Gi'}}}, 'engineAux': {}, 'enginelb': {'resources': {'limits': {'cpu': 1.0, 'memory': '512Mi'}, 'requests': {'cpu': 0.2, 'memory': '512Mi'}}}}
User Images[]
Created Byjohn.hansarick@wallaroo.ai
Created At2023-12-12 18:16:53.829858+00:00
Updated At2023-12-12 18:16:53.829858+00:00
Docker Run Variables{'EDGE_BUNDLE': 'abcde'}

DevOps Deployment

The edge deployment is performed with docker run, docker compose, or helm installations. The following command generates the docker run command, with the following values provided by the DevOps Engineer:

  • $REGISTRYURL
  • $REGISTRYUSERNAME
  • $REGISTRYPASSWORD

Before deploying, create the ./data directory that is used to store the authentication credentials.

# create docker run 

docker_command = f'''
docker run -p 8080:8080 \\
    -v ./data:/persist \\
    -e DEBUG=true \\
    -e OCI_REGISTRY=$REGISTRYURL \\
    -e EDGE_BUNDLE={edge_publish.docker_run_variables['EDGE_BUNDLE']} \\
    -e CONFIG_CPUS=1 \\
    -e OCI_USERNAME=$REGISTRYUSERNAME \\
    -e OCI_PASSWORD=$REGISTRYPASSWORD \\
    -e PIPELINE_URL={edge_publish.pipeline_url} \\
    {edge_publish.engine_url}
'''

print(docker_command)
docker run -p 8080:8080 \
    -v ./data:/persist \
    -e DEBUG=true \
    -e OCI_REGISTRY=$REGISTRYURL \
    -e EDGE_BUNDLE=ZXhwb3J0IEJVTkRMRV9WRVJTSU9OPTEKZXhwb3J0IEVER0VfTkFNRT1ob3VzZS1wcmljZS1lZGdlLWpjaApleHBvcnQgSk9JTl9UT0tFTj05MzNjNDIyNy0wZWYxLTQxODQtYTkyZS1lMWFiYzNkM2Y0M2YKZXhwb3J0IE9QU0NFTlRFUl9IT1NUPWRvYy10ZXN0LmVkZ2Uud2FsbGFyb29jb21tdW5pdHkubmluamEKZXhwb3J0IFBJUEVMSU5FX1VSTD1naGNyLmlvL3dhbGxhcm9vbGFicy9kb2Mtc2FtcGxlcy9waXBlbGluZXMvaG91c2VwcmljZS1lc3RpbWF0aW9uLWVkZ2U6MjEwZDU0YmYtMjc4OC00ZTYxLWJlNjMtMzFhNTc3MzhjZTE1CmV4cG9ydCBXT1JLU1BBQ0VfSUQ9MTE= \
    -e CONFIG_CPUS=1 \
    -e OCI_USERNAME=$REGISTRYUSERNAME \
    -e OCI_PASSWORD=$REGISTRYPASSWORD \
    -e PIPELINE_URL=ghcr.io/wallaroolabs/doc-samples/pipelines/houseprice-estimation-edge:210d54bf-2788-4e61-be63-31a57738ce15 \
    ghcr.io/wallaroolabs/doc-samples/engines/proxy/wallaroo/ghcr.io/wallaroolabs/standalone-mini:v2023.4.0-4103

Verify Logs

Before we perform inferences on the edge deployment, we’ll collect the pipeline logs and display the current partitions. These should only include the Wallaroo Ops pipeline.

logs = mainpipeline.logs(dataset=['time', 'out.variable', 'metadata'])

ops_locations = [pd.unique(logs['metadata.partition']).tolist()][0]
display(ops_locations)
ops_location = ops_locations[0]
Warning: There are more logs available. Please set a larger limit or request a file using export_logs.

['engine-6c9f97965b-pgjrw']

Edge Inferences

We will perform sample inference on our edge location, then verify that the inference results are added to our pipeline logs with the name of our edge location. For these example, the edge location is on the hostname testboy.local.

edge_datetime_start = datetime.datetime.now()

!curl testboy.local:8080/pipelines
{"pipelines":[{"id":"houseprice-estimation-edge","status":"Running"}]}
!curl -X POST testboy.local:8080/pipelines/{main_pipeline_name} \
    -H "Content-Type: Content-Type: application/json; format=pandas-records" \
    --data @./data/xtest-1k.df.json
[{"time":1702405553622,"in":{"tensor":[4.0,2.5,2900.0,5505.0,2.0,0.0,0.0,3.0,8.0,2900.0,0.0,47.6063,-122.02,2970.0,5251.0,12.0,0.0,0.0]},"out":{"variable":[718013.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,2170.0,6361.0,1.0,0.0,2.0,3.0,8.0,2170.0,0.0,47.7109,-122.017,2310.0,7419.0,6.0,0.0,0.0]},"out":{"variable":[615094.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1300.0,812.0,2.0,0.0,0.0,3.0,8.0,880.0,420.0,47.5893,-122.317,1300.0,824.0,6.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2500.0,8540.0,2.0,0.0,0.0,3.0,9.0,2500.0,0.0,47.5759,-121.994,2560.0,8475.0,24.0,0.0,0.0]},"out":{"variable":[758714.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2200.0,11520.0,1.0,0.0,0.0,4.0,7.0,2200.0,0.0,47.7659,-122.341,1690.0,8038.0,62.0,0.0,0.0]},"out":{"variable":[513264.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2140.0,4923.0,1.0,0.0,0.0,4.0,8.0,1070.0,1070.0,47.6902,-122.339,1470.0,4923.0,86.0,0.0,0.0]},"out":{"variable":[668287.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3590.0,5334.0,2.0,0.0,2.0,3.0,9.0,3140.0,450.0,47.6763,-122.267,2100.0,6250.0,9.0,0.0,0.0]},"out":{"variable":[1004846.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1280.0,960.0,2.0,0.0,0.0,3.0,9.0,1040.0,240.0,47.602,-122.311,1280.0,1173.0,0.0,0.0,0.0]},"out":{"variable":[684577.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2820.0,15000.0,2.0,0.0,0.0,4.0,9.0,2820.0,0.0,47.7255,-122.101,2440.0,15000.0,29.0,0.0,0.0]},"out":{"variable":[727898.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1790.0,11393.0,1.0,0.0,0.0,3.0,8.0,1790.0,0.0,47.6297,-122.099,2290.0,11894.0,36.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1010.0,7683.0,1.5,0.0,0.0,5.0,7.0,1010.0,0.0,47.72,-122.318,1550.0,7271.0,61.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1270.0,1323.0,3.0,0.0,0.0,3.0,8.0,1270.0,0.0,47.6934,-122.342,1330.0,1323.0,8.0,0.0,0.0]},"out":{"variable":[442168.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2070.0,9120.0,1.0,0.0,0.0,4.0,7.0,1250.0,820.0,47.6045,-122.123,1650.0,8400.0,57.0,0.0,0.0]},"out":{"variable":[630865.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1620.0,4080.0,1.5,0.0,0.0,3.0,7.0,1620.0,0.0,47.6696,-122.324,1760.0,4080.0,91.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,3990.0,9786.0,2.0,0.0,0.0,3.0,9.0,3990.0,0.0,47.6784,-122.026,3920.0,8200.0,10.0,0.0,0.0]},"out":{"variable":[909441.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1780.0,19843.0,1.0,0.0,0.0,3.0,7.0,1780.0,0.0,47.4414,-122.154,2210.0,13500.0,52.0,0.0,0.0]},"out":{"variable":[313096.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2130.0,6003.0,2.0,0.0,0.0,3.0,8.0,2130.0,0.0,47.4518,-122.12,1940.0,4529.0,11.0,0.0,0.0]},"out":{"variable":[404040.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1660.0,10440.0,1.0,0.0,0.0,3.0,7.0,1040.0,620.0,47.4448,-121.77,1240.0,10380.0,36.0,0.0,0.0]},"out":{"variable":[292859.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2110.0,4118.0,2.0,0.0,0.0,3.0,8.0,2110.0,0.0,47.3878,-122.153,2110.0,4044.0,25.0,0.0,0.0]},"out":{"variable":[338357.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2200.0,11250.0,1.5,0.0,0.0,5.0,7.0,1300.0,900.0,47.6845,-122.201,2320.0,10814.0,94.0,0.0,0.0]},"out":{"variable":[682284.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2020.0,10260.0,2.0,0.0,0.0,4.0,7.0,2020.0,0.0,47.6801,-122.114,2020.0,10311.0,31.0,0.0,0.0]},"out":{"variable":[583765.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,1390.0,1302.0,2.0,0.0,0.0,3.0,7.0,1390.0,0.0,47.3089,-122.33,1390.0,1302.0,28.0,0.0,0.0]},"out":{"variable":[249227.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1400.0,7920.0,1.0,0.0,0.0,3.0,7.0,1400.0,0.0,47.4658,-122.184,1910.0,7700.0,52.0,0.0,0.0]},"out":{"variable":[267013.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1370.0,1140.0,2.0,0.0,0.0,3.0,8.0,1080.0,290.0,47.7055,-122.342,1340.0,1050.0,5.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2390.0,6976.0,2.0,0.0,0.0,3.0,7.0,2390.0,0.0,47.4807,-122.182,2390.0,6346.0,11.0,0.0,0.0]},"out":{"variable":[410291.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,2170.0,2440.0,1.5,0.0,0.0,4.0,8.0,1450.0,720.0,47.6724,-122.317,2070.0,4000.0,103.0,0.0,0.0]},"out":{"variable":[675545.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1370.0,9460.0,1.0,0.0,0.0,3.0,6.0,1370.0,0.0,47.6238,-122.191,1690.0,9930.0,65.0,0.0,0.0]},"out":{"variable":[449699.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2270.0,5000.0,2.0,0.0,0.0,3.0,9.0,2270.0,0.0,47.6916,-122.37,1210.0,5000.0,0.0,0.0,0.0]},"out":{"variable":[756046.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,1330.0,1379.0,2.0,0.0,0.0,4.0,8.0,1120.0,210.0,47.6126,-122.313,1810.0,1770.0,9.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.75,2490.0,24969.0,1.0,0.0,2.0,4.0,8.0,1540.0,950.0,47.336,-122.35,2790.0,15600.0,55.0,0.0,0.0]},"out":{"variable":[392724.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,3710.0,20000.0,2.0,0.0,2.0,5.0,10.0,2760.0,950.0,47.6696,-122.261,3970.0,20000.0,79.0,0.0,0.0]},"out":{"variable":[1514079.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2800.0,17300.0,1.0,0.0,0.0,4.0,8.0,1420.0,1380.0,47.5716,-122.128,2140.0,12650.0,44.0,0.0,0.0]},"out":{"variable":[706407.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1790.0,50529.0,1.0,0.0,0.0,5.0,7.0,1090.0,700.0,47.3511,-122.073,1940.0,50529.0,50.0,0.0,0.0]},"out":{"variable":[291904.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1340.0,11744.0,1.0,0.0,0.0,2.0,7.0,1340.0,0.0,47.4947,-122.36,2020.0,13673.0,64.0,0.0,0.0]},"out":{"variable":[259657.52]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2110.0,7434.0,2.0,0.0,0.0,4.0,7.0,2110.0,0.0,47.3935,-122.169,2100.0,7749.0,36.0,0.0,0.0]},"out":{"variable":[335398.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2440.0,3600.0,2.5,0.0,0.0,4.0,8.0,2440.0,0.0,47.6298,-122.362,2440.0,5440.0,112.0,0.0,0.0]},"out":{"variable":[713978.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2100.0,11894.0,1.0,0.0,0.0,4.0,8.0,1720.0,380.0,47.6006,-122.194,2390.0,9450.0,46.0,0.0,0.0]},"out":{"variable":[642519.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1280.0,959.0,3.0,0.0,0.0,3.0,8.0,1280.0,0.0,47.6914,-122.343,1130.0,1126.0,9.0,0.0,0.0]},"out":{"variable":[446768.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1740.0,9038.0,1.0,0.0,0.0,4.0,7.0,1740.0,0.0,47.5897,-122.136,1390.0,9770.0,59.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1860.0,3504.0,2.0,0.0,0.0,3.0,7.0,1860.0,0.0,47.776,-122.239,1860.0,4246.0,14.0,0.0,0.0]},"out":{"variable":[438514.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,4.5,5120.0,41327.0,2.0,0.0,0.0,3.0,10.0,3290.0,1830.0,47.7009,-122.059,3360.0,82764.0,6.0,0.0,0.0]},"out":{"variable":[1204324.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,670.0,11505.0,1.0,0.0,0.0,3.0,5.0,670.0,0.0,47.499,-122.157,2180.0,11505.0,12.0,0.0,0.0]},"out":{"variable":[251194.61]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2370.0,4200.0,2.0,0.0,0.0,3.0,8.0,2370.0,0.0,47.3699,-122.019,2370.0,4370.0,1.0,0.0,0.0]},"out":{"variable":[349102.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2580.0,7865.0,1.0,0.0,0.0,4.0,8.0,1480.0,1100.0,47.6208,-122.139,2140.0,8400.0,51.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,998.0,904.0,2.0,0.0,0.0,3.0,7.0,798.0,200.0,47.6983,-122.367,998.0,1110.0,7.0,0.0,0.0]},"out":{"variable":[400561.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2930.0,7806.0,2.0,0.0,0.0,3.0,9.0,2930.0,0.0,47.6219,-122.024,2600.0,6051.0,9.0,0.0,0.0]},"out":{"variable":[779809.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1120.0,4000.0,1.0,0.0,0.0,4.0,7.0,870.0,250.0,47.6684,-122.368,1470.0,4000.0,98.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,2000.0,4800.0,2.0,0.0,0.0,4.0,7.0,2000.0,0.0,47.6583,-122.351,1260.0,1452.0,104.0,0.0,0.0]},"out":{"variable":[581002.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1520.0,3370.0,2.0,0.0,0.0,3.0,8.0,1520.0,0.0,47.5696,-122.004,1860.0,4486.0,21.0,0.0,0.0]},"out":{"variable":[535229.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2920.0,9904.0,2.0,0.0,0.0,4.0,9.0,2920.0,0.0,47.5759,-121.995,1810.0,5617.0,24.0,0.0,0.0]},"out":{"variable":[778197.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1850.0,8208.0,1.0,0.0,0.0,4.0,7.0,1180.0,670.0,47.3109,-122.362,1790.0,8174.0,44.0,0.0,0.0]},"out":{"variable":[291261.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3430.0,35120.0,2.0,0.0,0.0,3.0,10.0,3430.0,0.0,47.6484,-122.182,3920.0,35230.0,31.0,0.0,0.0]},"out":{"variable":[950176.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1530.0,6375.0,2.0,0.0,0.0,3.0,7.0,1530.0,0.0,47.4692,-122.162,1500.0,8712.0,72.0,1.0,41.0]},"out":{"variable":[289359.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1640.0,8400.0,1.0,0.0,0.0,3.0,8.0,1180.0,460.0,47.3733,-122.289,1600.0,8120.0,46.0,0.0,0.0]},"out":{"variable":[277145.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1540.0,8400.0,1.0,0.0,0.0,3.0,7.0,1180.0,360.0,47.6554,-122.129,1550.0,8760.0,46.0,0.0,0.0]},"out":{"variable":[552992.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1850.0,8310.0,1.0,0.0,0.0,3.0,7.0,1200.0,650.0,47.7717,-122.29,1840.0,10080.0,53.0,0.0,0.0]},"out":{"variable":[437753.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1530.0,7245.0,1.0,0.0,0.0,4.0,7.0,1530.0,0.0,47.731,-122.191,1530.0,7490.0,31.0,0.0,0.0]},"out":{"variable":[431929.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2610.0,5866.0,2.0,0.0,0.0,3.0,8.0,2610.0,0.0,47.3441,-122.04,2480.0,5188.0,9.0,0.0,0.0]},"out":{"variable":[358668.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1710.0,5000.0,1.0,0.0,0.0,3.0,8.0,1110.0,600.0,47.6772,-122.285,1750.0,5304.0,36.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,3470.0,12003.0,2.0,0.0,0.0,3.0,8.0,3470.0,0.0,47.624,-122.048,2220.0,12283.0,37.0,0.0,0.0]},"out":{"variable":[732736.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1020.0,1204.0,2.0,0.0,0.0,3.0,7.0,720.0,300.0,47.5445,-122.376,1360.0,1506.0,10.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2870.0,6600.0,2.0,0.0,2.0,3.0,8.0,2870.0,0.0,47.5745,-122.113,2570.0,7925.0,30.0,0.0,0.0]},"out":{"variable":[710023.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,1440.0,4666.0,1.0,0.0,0.0,3.0,8.0,1440.0,0.0,47.709,-122.019,1510.0,4595.0,5.0,0.0,0.0]},"out":{"variable":[359614.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,4040.0,19700.0,2.0,0.0,0.0,3.0,11.0,4040.0,0.0,47.7205,-122.127,3930.0,21887.0,27.0,0.0,0.0]},"out":{"variable":[1028923.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,4.5,3300.0,7480.0,2.0,0.0,0.0,3.0,8.0,3300.0,0.0,47.6796,-122.104,2470.0,7561.0,34.0,0.0,0.0]},"out":{"variable":[725572.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1670.0,3852.0,2.0,0.0,3.0,4.0,8.0,1670.0,0.0,47.6411,-122.371,2320.0,4572.0,87.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1700.0,6031.0,2.0,0.0,0.0,3.0,8.0,1700.0,0.0,47.3582,-122.191,1930.0,6035.0,20.0,0.0,0.0]},"out":{"variable":[290323.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3220.0,7873.0,2.0,0.0,0.0,3.0,10.0,3220.0,0.0,47.5849,-122.03,2610.0,8023.0,21.0,0.0,0.0]},"out":{"variable":[886958.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.25,3030.0,20446.0,2.0,0.0,2.0,3.0,9.0,2130.0,900.0,47.6133,-122.106,2890.0,20908.0,38.0,0.0,0.0]},"out":{"variable":[811666.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1050.0,9871.0,1.0,0.0,0.0,5.0,7.0,1050.0,0.0,47.3816,-122.087,1300.0,10794.0,46.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,2230.0,6000.0,1.0,0.0,1.0,3.0,8.0,1260.0,970.0,47.5373,-122.395,2120.0,7200.0,47.0,0.0,0.0]},"out":{"variable":[683845.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2710.0,6474.0,2.0,0.0,0.0,3.0,8.0,2710.0,0.0,47.5383,-121.878,2870.0,6968.0,11.0,0.0,0.0]},"out":{"variable":[717470.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3490.0,18521.0,2.0,0.0,0.0,4.0,9.0,3490.0,0.0,47.7406,-122.07,2850.0,18521.0,24.0,0.0,0.0]},"out":{"variable":[873314.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,720.0,5820.0,1.0,0.0,1.0,5.0,6.0,720.0,0.0,47.7598,-122.255,952.0,5820.0,65.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2100.0,11942.0,1.0,0.0,0.0,3.0,7.0,1030.0,1070.0,47.55,-122.356,1170.0,6986.0,50.0,0.0,0.0]},"out":{"variable":[642519.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,3240.0,6919.0,2.0,0.0,0.0,3.0,8.0,2760.0,480.0,47.4779,-122.122,2970.0,5690.0,0.0,0.0,0.0]},"out":{"variable":[464811.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1410.0,5000.0,1.0,0.0,2.0,4.0,7.0,940.0,470.0,47.5531,-122.379,1450.0,5000.0,97.0,0.0,0.0]},"out":{"variable":[437929.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2300.0,5090.0,2.0,0.0,0.0,3.0,8.0,1700.0,600.0,47.545,-122.36,1530.0,9100.0,7.0,0.0,0.0]},"out":{"variable":[686890.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2410.0,7140.0,2.0,0.0,0.0,3.0,8.0,2410.0,0.0,47.6329,-122.021,2350.0,7140.0,21.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1920.0,7455.0,1.0,0.0,0.0,4.0,7.0,960.0,960.0,47.7106,-122.286,1920.0,7455.0,75.0,1.0,25.0]},"out":{"variable":[447162.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1670.0,9886.0,1.0,0.0,0.0,5.0,7.0,1670.0,0.0,47.7249,-122.287,2590.0,9997.0,67.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1880.0,5500.0,2.0,0.0,0.0,4.0,7.0,1880.0,0.0,47.657,-122.393,1230.0,5500.0,67.0,1.0,60.0]},"out":{"variable":[561604.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1270.0,10790.0,1.0,0.0,0.0,3.0,7.0,1270.0,0.0,47.6647,-122.177,1270.0,10790.0,58.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1070.0,8100.0,1.0,0.0,0.0,4.0,6.0,1070.0,0.0,47.2853,-122.22,1260.0,8100.0,57.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2480.0,4950.0,2.0,0.0,0.0,3.0,7.0,2480.0,0.0,47.4389,-122.116,2230.0,5298.0,11.0,0.0,0.0]},"out":{"variable":[397183.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1400.0,4914.0,1.5,0.0,0.0,3.0,7.0,1400.0,0.0,47.681,-122.364,1400.0,3744.0,85.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3190.0,4980.0,2.0,0.0,0.0,3.0,9.0,3190.0,0.0,47.3657,-122.034,2830.0,6720.0,10.0,0.0,0.0]},"out":{"variable":[511200.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1700.0,4400.0,1.5,0.0,0.0,4.0,8.0,1700.0,0.0,47.612,-122.292,1610.0,4180.0,108.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1620.0,14467.0,2.0,0.0,0.0,3.0,7.0,1620.0,0.0,47.6306,-122.035,1470.0,13615.0,33.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2160.0,8809.0,1.0,0.0,0.0,3.0,9.0,1540.0,620.0,47.6994,-122.349,930.0,5420.0,0.0,0.0,0.0]},"out":{"variable":[726181.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1060.0,7868.0,1.0,0.0,0.0,3.0,7.0,1060.0,0.0,47.7414,-122.295,1530.0,10728.0,63.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,2320.0,18919.0,2.0,1.0,4.0,4.0,8.0,2320.0,0.0,47.3905,-122.462,1610.0,18919.0,39.0,0.0,0.0]},"out":{"variable":[491385.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,3.75,3190.0,4700.0,2.0,0.0,0.0,3.0,8.0,3190.0,0.0,47.3724,-122.105,2680.0,5640.0,12.0,0.0,0.0]},"out":{"variable":[383833.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,2.0,1900.0,8240.0,1.0,0.0,0.0,2.0,7.0,1200.0,700.0,47.7037,-122.296,1900.0,8240.0,51.0,0.0,0.0]},"out":{"variable":[458858.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,3940.0,27591.0,2.0,0.0,3.0,3.0,9.0,3440.0,500.0,47.5157,-122.116,3420.0,29170.0,14.0,0.0,0.0]},"out":{"variable":[736751.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1340.0,3011.0,2.0,0.0,0.0,3.0,7.0,1340.0,0.0,47.3839,-122.038,1060.0,3232.0,19.0,0.0,0.0]},"out":{"variable":[244380.27]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,2280.0,8339.0,1.0,0.0,0.0,4.0,7.0,1220.0,1060.0,47.6986,-122.297,1970.0,8340.0,61.0,0.0,0.0]},"out":{"variable":[665791.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2510.0,12013.0,2.0,0.0,0.0,3.0,8.0,2510.0,0.0,47.3473,-122.314,1870.0,8017.0,27.0,0.0,0.0]},"out":{"variable":[352864.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.5,1750.0,12491.0,1.0,0.0,0.0,3.0,6.0,1390.0,360.0,47.6995,-122.174,1560.0,12473.0,54.0,0.0,0.0]},"out":{"variable":[467742.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1590.0,4600.0,1.5,0.0,0.0,4.0,7.0,1290.0,300.0,47.6807,-122.399,1770.0,4350.0,88.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1740.0,3060.0,1.0,0.0,0.0,5.0,8.0,950.0,790.0,47.6816,-122.31,1800.0,3960.0,84.0,1.0,84.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2570.0,11070.0,2.0,0.0,0.0,4.0,8.0,2570.0,0.0,47.4507,-122.152,2210.0,9600.0,49.0,0.0,0.0]},"out":{"variable":[427942.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2420.0,11120.0,1.0,0.0,2.0,4.0,8.0,1620.0,800.0,47.4954,-122.366,2210.0,8497.0,63.0,0.0,0.0]},"out":{"variable":[447951.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2632.0,4117.0,2.0,0.0,0.0,3.0,8.0,2632.0,0.0,47.3428,-122.278,2040.0,5195.0,1.0,0.0,0.0]},"out":{"variable":[368504.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1440.0,11330.0,1.0,0.0,0.0,3.0,7.0,1440.0,0.0,47.4742,-122.265,1580.0,10100.0,50.0,0.0,0.0]},"out":{"variable":[263051.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1630.0,1686.0,2.0,0.0,0.0,3.0,10.0,1330.0,300.0,47.6113,-122.314,1570.0,2580.0,0.0,0.0,0.0]},"out":{"variable":[917346.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2600.0,3839.0,2.0,0.0,0.0,3.0,7.0,2600.0,0.0,47.4324,-122.145,2180.0,4800.0,9.0,0.0,0.0]},"out":{"variable":[400676.47]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,3160.0,8429.0,1.0,0.0,3.0,4.0,7.0,1620.0,1540.0,47.511,-122.251,1760.0,6780.0,33.0,0.0,0.0]},"out":{"variable":[480989.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1480.0,5400.0,2.0,0.0,0.0,4.0,8.0,1480.0,0.0,47.6095,-122.296,1280.0,3600.0,100.0,0.0,0.0]},"out":{"variable":[533935.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2040.0,12065.0,1.0,0.0,0.0,3.0,8.0,2040.0,0.0,47.3756,-122.044,2010.0,11717.0,27.0,0.0,0.0]},"out":{"variable":[328513.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3470.0,20445.0,2.0,0.0,0.0,4.0,10.0,3470.0,0.0,47.547,-122.219,3360.0,21950.0,51.0,0.0,0.0]},"out":{"variable":[1412215.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1400.0,6380.0,1.0,0.0,0.0,4.0,7.0,700.0,700.0,47.7015,-122.316,1690.0,5800.0,91.0,0.0,0.0]},"out":{"variable":[394707.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1610.0,8976.0,1.0,0.0,0.0,4.0,8.0,1610.0,0.0,47.6011,-122.192,1930.0,8976.0,48.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1850.0,8770.0,2.0,0.0,0.0,3.0,8.0,1850.0,0.0,47.2091,-122.009,2350.0,8606.0,18.0,0.0,0.0]},"out":{"variable":[291857.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,2170.0,9948.0,2.0,0.0,0.0,3.0,7.0,2170.0,0.0,47.4263,-122.331,1500.0,9750.0,62.0,0.0,0.0]},"out":{"variable":[371795.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.25,1950.0,8086.0,1.0,0.0,0.0,3.0,7.0,1130.0,820.0,47.3179,-122.331,1670.0,8550.0,35.0,0.0,0.0]},"out":{"variable":[312429.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2080.0,87991.0,1.0,0.0,0.0,3.0,6.0,1040.0,1040.0,47.6724,-121.865,2080.0,84300.0,44.0,0.0,0.0]},"out":{"variable":[632114.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,2580.0,4500.0,2.0,0.0,0.0,4.0,9.0,1850.0,730.0,47.6245,-122.316,2590.0,4100.0,110.0,0.0,0.0]},"out":{"variable":[964052.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,2240.0,7725.0,1.0,0.0,0.0,5.0,7.0,1120.0,1120.0,47.5331,-122.365,1340.0,6300.0,58.0,0.0,0.0]},"out":{"variable":[423382.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,800.0,1200.0,2.0,0.0,0.0,3.0,7.0,800.0,0.0,47.6969,-122.347,806.0,1200.0,15.0,0.0,0.0]},"out":{"variable":[404484.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1980.0,3243.0,1.5,0.0,0.0,3.0,8.0,1980.0,0.0,47.6429,-122.327,1380.0,1249.0,102.0,0.0,0.0]},"out":{"variable":[577149.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,1280.0,1257.0,2.0,0.0,0.0,3.0,8.0,1040.0,240.0,47.6721,-122.374,1280.0,1249.0,14.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2000.0,14733.0,1.0,0.0,0.0,4.0,8.0,2000.0,0.0,47.6001,-122.178,2620.0,14733.0,57.0,0.0,0.0]},"out":{"variable":[581002.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1350.0,1493.0,2.0,0.0,0.0,3.0,8.0,1050.0,300.0,47.5421,-122.388,1250.0,1202.0,7.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1200.0,10890.0,1.0,0.0,0.0,5.0,7.0,1200.0,0.0,47.3423,-122.088,1250.0,10139.0,42.0,0.0,0.0]},"out":{"variable":[241330.19]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1850.0,7684.0,1.0,0.0,0.0,3.0,8.0,1320.0,530.0,47.2975,-122.37,1940.0,7630.0,35.0,0.0,0.0]},"out":{"variable":[291857.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1440.0,725.0,2.0,0.0,0.0,3.0,8.0,1100.0,340.0,47.5607,-122.378,1440.0,4255.0,3.0,0.0,0.0]},"out":{"variable":[447192.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1040.0,4240.0,1.0,0.0,0.0,4.0,7.0,860.0,180.0,47.6768,-122.367,1170.0,4240.0,90.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1088.0,1360.0,2.0,0.0,0.0,3.0,7.0,1088.0,0.0,47.7094,-122.213,1098.0,1469.0,31.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1260.0,15000.0,1.5,0.0,0.0,4.0,7.0,1260.0,0.0,47.2737,-122.153,2400.0,21715.0,32.0,0.0,0.0]},"out":{"variable":[254622.98]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2620.0,13777.0,1.5,0.0,2.0,4.0,9.0,1720.0,900.0,47.58,-122.285,3530.0,9287.0,88.0,0.0,0.0]},"out":{"variable":[1223838.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2260.0,41236.0,1.0,0.0,0.0,4.0,8.0,1690.0,570.0,47.5528,-122.034,3080.0,30240.0,53.0,0.0,0.0]},"out":{"variable":[695842.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1640.0,9234.0,1.0,0.0,0.0,5.0,7.0,1060.0,580.0,47.5162,-122.274,2230.0,10354.0,47.0,0.0,0.0]},"out":{"variable":[332134.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.25,3320.0,13138.0,1.0,0.0,2.0,4.0,9.0,1900.0,1420.0,47.759,-122.269,2820.0,13138.0,51.0,0.0,0.0]},"out":{"variable":[1108000.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1320.0,1824.0,1.5,0.0,0.0,4.0,6.0,1320.0,0.0,47.585,-122.294,1320.0,4000.0,105.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2250.0,10160.0,2.0,0.0,0.0,5.0,8.0,2250.0,0.0,47.5645,-122.219,2660.0,10125.0,48.0,0.0,0.0]},"out":{"variable":[684559.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1740.0,3690.0,2.0,0.0,0.0,3.0,8.0,1740.0,0.0,47.5345,-121.867,2100.0,4944.0,14.0,0.0,0.0]},"out":{"variable":[517771.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1730.0,4286.0,2.0,0.0,0.0,3.0,7.0,1730.0,0.0,47.432,-122.329,1780.0,4343.0,16.0,0.0,0.0]},"out":{"variable":[310164.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,1020.0,3200.0,1.0,0.0,0.0,3.0,7.0,1020.0,0.0,47.6361,-122.343,1670.0,3480.0,87.0,0.0,0.0]},"out":{"variable":[449699.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1420.0,1438.0,2.0,0.0,0.0,3.0,9.0,1280.0,140.0,47.6265,-122.323,1490.0,1439.0,11.0,0.0,0.0]},"out":{"variable":[684577.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1180.0,1800.0,2.0,0.0,2.0,3.0,8.0,1180.0,0.0,47.6168,-122.301,1500.0,1948.0,21.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2800.0,12831.0,2.0,0.0,0.0,3.0,8.0,2800.0,0.0,47.7392,-121.966,2810.0,10235.0,13.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1320.0,9675.0,1.5,0.0,0.0,4.0,7.0,1320.0,0.0,47.5695,-121.902,1160.0,9675.0,44.0,0.0,0.0]},"out":{"variable":[438346.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1380.0,4590.0,1.0,0.0,0.0,2.0,7.0,930.0,450.0,47.6841,-122.293,1320.0,4692.0,64.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1340.0,4000.0,1.5,0.0,0.0,4.0,7.0,1340.0,0.0,47.6652,-122.288,1510.0,4000.0,87.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1580.0,14398.0,1.0,0.0,0.0,3.0,7.0,1080.0,500.0,47.6328,-122.174,1650.0,14407.0,34.0,0.0,0.0]},"out":{"variable":[558463.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,920.0,43560.0,1.0,0.0,0.0,4.0,5.0,920.0,0.0,47.5245,-121.931,1530.0,11875.0,91.0,0.0,0.0]},"out":{"variable":[243300.83]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1720.0,37363.0,1.0,0.0,0.0,4.0,8.0,1350.0,370.0,47.6608,-122.035,2740.0,40635.0,41.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,2940.0,5763.0,1.0,0.0,0.0,5.0,8.0,1640.0,1300.0,47.5589,-122.295,2020.0,7320.0,59.0,0.0,0.0]},"out":{"variable":[727968.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1730.0,10396.0,1.0,0.0,0.0,3.0,7.0,1730.0,0.0,47.4497,-122.168,1510.0,10396.0,51.0,0.0,0.0]},"out":{"variable":[300988.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1320.0,11090.0,1.0,0.0,0.0,3.0,7.0,1320.0,0.0,47.7748,-122.304,1320.0,8319.0,59.0,0.0,0.0]},"out":{"variable":[341649.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2250.0,8076.0,2.0,0.0,0.0,3.0,8.0,2250.0,0.0,47.3667,-122.041,2180.0,7244.0,19.0,0.0,0.0]},"out":{"variable":[343304.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,2260.0,280962.0,2.0,0.0,2.0,3.0,9.0,1890.0,370.0,47.6359,-121.94,2860.0,219542.0,9.0,0.0,0.0]},"out":{"variable":[735392.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2210.0,14073.0,1.0,0.0,0.0,3.0,8.0,1630.0,580.0,47.4774,-122.142,2340.0,11340.0,37.0,0.0,0.0]},"out":{"variable":[416774.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,3800.0,9606.0,2.0,0.0,0.0,3.0,9.0,3800.0,0.0,47.7368,-122.208,3400.0,9677.0,6.0,0.0,0.0]},"out":{"variable":[1039781.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1200.0,43560.0,1.0,0.0,0.0,3.0,5.0,1200.0,0.0,47.3375,-122.123,1400.0,54450.0,46.0,0.0,0.0]},"out":{"variable":[242656.47]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1380.0,5198.0,1.0,0.0,0.0,4.0,7.0,1380.0,0.0,47.5514,-122.357,1320.0,6827.0,33.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1480.0,8165.0,1.0,0.0,0.0,4.0,7.0,1480.0,0.0,47.3624,-122.079,1450.0,7939.0,30.0,0.0,0.0]},"out":{"variable":[256845.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1890.0,9646.0,1.0,0.0,0.0,3.0,8.0,1890.0,0.0,47.4838,-122.299,1580.0,9488.0,49.0,0.0,0.0]},"out":{"variable":[307947.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1260.0,11224.0,1.0,0.0,0.0,5.0,7.0,1260.0,0.0,47.7444,-122.321,1570.0,11052.0,67.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,4150.0,13232.0,2.0,0.0,0.0,3.0,11.0,4150.0,0.0,47.3417,-122.182,3840.0,15121.0,9.0,0.0,0.0]},"out":{"variable":[1042119.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,3070.0,8474.0,2.0,0.0,0.0,3.0,9.0,3070.0,0.0,47.6852,-122.184,3070.0,8527.0,3.0,0.0,0.0]},"out":{"variable":[837085.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2160.0,9540.0,2.0,0.0,0.0,3.0,8.0,2160.0,0.0,47.7668,-122.243,1720.0,12593.0,36.0,0.0,0.0]},"out":{"variable":[513083.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1280.0,10716.0,1.0,0.0,0.0,4.0,7.0,1280.0,0.0,47.4755,-122.145,1440.0,9870.0,45.0,0.0,0.0]},"out":{"variable":[243585.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2190.0,3746.0,2.0,0.0,0.0,3.0,8.0,2190.0,0.0,47.3896,-122.034,2200.0,3591.0,9.0,0.0,0.0]},"out":{"variable":[341472.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,930.0,7129.0,1.0,0.0,0.0,3.0,6.0,930.0,0.0,47.7234,-122.333,1300.0,8075.0,66.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,720.0,8040.0,1.0,0.0,0.0,3.0,6.0,720.0,0.0,47.4662,-122.359,2300.0,9500.0,71.0,0.0,0.0]},"out":{"variable":[251194.61]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1120.0,7250.0,1.0,0.0,0.0,4.0,7.0,1120.0,0.0,47.7143,-122.211,1340.0,7302.0,42.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1760.0,6150.0,1.5,0.0,0.0,3.0,7.0,1760.0,0.0,47.3871,-122.224,1760.0,8276.0,63.0,0.0,0.0]},"out":{"variable":[289684.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,1920.0,8259.0,2.0,0.0,0.0,4.0,8.0,1920.0,0.0,47.5616,-122.088,2030.0,8910.0,35.0,0.0,0.0]},"out":{"variable":[553463.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2590.0,6120.0,2.0,0.0,0.0,3.0,8.0,2590.0,0.0,47.6667,-122.327,1390.0,3060.0,105.0,0.0,0.0]},"out":{"variable":[715530.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1650.0,2710.0,2.0,0.0,2.0,3.0,8.0,1650.0,0.0,47.5173,-121.878,1760.0,2992.0,6.0,0.0,0.0]},"out":{"variable":[354512.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1280.0,8710.0,1.0,0.0,0.0,3.0,7.0,1280.0,0.0,47.4472,-122.16,1520.0,9375.0,47.0,0.0,0.0]},"out":{"variable":[245070.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1420.0,11040.0,1.0,0.0,0.0,4.0,7.0,1420.0,0.0,47.5969,-122.14,1530.0,8208.0,54.0,0.0,0.0]},"out":{"variable":[453195.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2330.0,33750.0,2.0,0.0,0.0,3.0,9.0,2330.0,0.0,47.4787,-121.723,2270.0,35000.0,32.0,1.0,18.0]},"out":{"variable":[521639.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1790.0,12000.0,1.0,0.0,0.0,3.0,7.0,1040.0,750.0,47.3945,-122.313,1840.0,12000.0,54.0,0.0,0.0]},"out":{"variable":[291872.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,3520.0,36558.0,2.0,0.0,0.0,4.0,8.0,2100.0,1420.0,47.4658,-122.007,3000.0,36558.0,29.0,0.0,0.0]},"out":{"variable":[475971.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2090.0,7416.0,1.0,0.0,0.0,4.0,7.0,1050.0,1040.0,47.4107,-122.179,1710.0,7527.0,44.0,0.0,0.0]},"out":{"variable":[349619.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1760.0,6300.0,1.0,0.0,0.0,3.0,7.0,1060.0,700.0,47.5003,-122.26,1340.0,7300.0,52.0,0.0,0.0]},"out":{"variable":[300446.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,1610.0,11201.0,1.0,0.0,0.0,5.0,7.0,1020.0,590.0,47.7024,-122.198,1610.0,9000.0,32.0,0.0,0.0]},"out":{"variable":[465401.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2630.0,48706.0,2.0,0.0,0.0,3.0,8.0,2630.0,0.0,47.775,-122.125,2680.0,48706.0,28.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1570.0,10824.0,2.0,0.0,0.0,3.0,7.0,1570.0,0.0,47.54,-122.275,1530.0,8125.0,107.0,0.0,0.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.25,2910.0,9454.0,1.0,0.0,1.0,3.0,8.0,1910.0,1000.0,47.5871,-122.173,2400.0,10690.0,42.0,0.0,0.0]},"out":{"variable":[711565.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2120.0,7620.0,2.0,0.0,0.0,3.0,8.0,2120.0,0.0,47.457,-122.346,1820.0,7620.0,43.0,1.0,31.0]},"out":{"variable":[404040.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2320.0,9420.0,1.0,0.0,0.0,5.0,7.0,2320.0,0.0,47.5133,-122.196,2030.0,9420.0,62.0,0.0,0.0]},"out":{"variable":[413013.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1010.0,1546.0,2.0,0.0,0.0,3.0,8.0,1010.0,0.0,47.5998,-122.311,1010.0,1517.0,44.0,1.0,43.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2730.0,5820.0,2.0,0.0,0.0,3.0,8.0,2730.0,0.0,47.4856,-122.154,2730.0,5700.0,0.0,0.0,0.0]},"out":{"variable":[457449.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,870.0,7227.0,1.0,0.0,0.0,3.0,7.0,870.0,0.0,47.7288,-122.331,1250.0,7252.0,66.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,820.0,681.0,3.0,0.0,0.0,3.0,8.0,820.0,0.0,47.6619,-122.352,820.0,1156.0,8.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2450.0,4187.0,2.0,0.0,2.0,3.0,8.0,2450.0,0.0,47.5471,-122.016,2320.0,4187.0,4.0,0.0,0.0]},"out":{"variable":[705013.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,3380.0,7074.0,2.0,0.0,0.0,3.0,8.0,2200.0,1180.0,47.7462,-121.978,2060.0,6548.0,15.0,0.0,0.0]},"out":{"variable":[597475.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1050.0,6250.0,1.0,0.0,0.0,4.0,6.0,840.0,210.0,47.5024,-122.333,1310.0,12500.0,72.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,770.0,4800.0,1.0,0.0,0.0,3.0,7.0,770.0,0.0,47.527,-122.383,1390.0,4800.0,71.0,0.0,0.0]},"out":{"variable":[313906.47]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1600.0,7350.0,1.0,0.0,0.0,4.0,7.0,1600.0,0.0,47.6977,-122.126,1600.0,7200.0,35.0,0.0,0.0]},"out":{"variable":[469038.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1930.0,13350.0,1.0,0.0,0.0,3.0,8.0,1930.0,0.0,47.3317,-122.365,2270.0,13350.0,48.0,0.0,0.0]},"out":{"variable":[306159.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1330.0,13102.0,1.0,0.0,0.0,3.0,7.0,1330.0,0.0,47.3172,-122.322,1270.0,11475.0,46.0,0.0,0.0]},"out":{"variable":[244380.27]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2640.0,4000.0,2.0,0.0,0.0,5.0,8.0,1730.0,910.0,47.6727,-122.297,1530.0,3740.0,89.0,0.0,0.0]},"out":{"variable":[718445.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,850.0,2340.0,1.0,0.0,0.0,3.0,7.0,850.0,0.0,47.6707,-122.328,1300.0,3000.0,92.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2070.0,7995.0,1.0,0.0,0.0,3.0,7.0,1350.0,720.0,47.403,-122.175,1620.0,6799.0,28.0,0.0,0.0]},"out":{"variable":[349100.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1680.0,4226.0,2.0,0.0,0.0,3.0,8.0,1680.0,0.0,47.3684,-122.123,1800.0,5559.0,12.0,0.0,0.0]},"out":{"variable":[289727.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,1350.0,2560.0,1.0,0.0,0.0,4.0,8.0,1350.0,0.0,47.6338,-122.106,1800.0,2560.0,41.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,3010.0,7215.0,2.0,0.0,0.0,3.0,9.0,3010.0,0.0,47.6952,-122.178,3010.0,7215.0,0.0,0.0,0.0]},"out":{"variable":[795841.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1260.0,10350.0,1.0,0.0,0.0,3.0,7.0,1260.0,0.0,47.6357,-122.123,1800.0,10350.0,55.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1930.0,5570.0,1.0,0.0,0.0,3.0,8.0,1930.0,0.0,47.7173,-122.034,1810.0,5178.0,9.0,0.0,0.0]},"out":{"variable":[444885.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1850.0,7850.0,2.0,0.0,0.0,3.0,8.0,1850.0,0.0,47.6914,-122.103,1830.0,8140.0,29.0,0.0,0.0]},"out":{"variable":[550183.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1100.0,11824.0,1.0,0.0,0.0,4.0,7.0,1100.0,0.0,47.5704,-122.141,1380.0,11796.0,60.0,0.0,0.0]},"out":{"variable":[438346.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2910.0,6334.0,2.0,0.0,0.0,3.0,8.0,2910.0,0.0,47.4826,-121.771,2790.0,6352.0,1.0,0.0,0.0]},"out":{"variable":[463718.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2060.0,7080.0,2.0,0.0,0.0,3.0,9.0,1800.0,260.0,47.6455,-122.409,3070.0,7500.0,75.0,0.0,0.0]},"out":{"variable":[904204.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2700.0,37011.0,2.0,0.0,0.0,3.0,9.0,2700.0,0.0,47.3496,-122.088,2700.0,37457.0,30.0,0.0,0.0]},"out":{"variable":[490051.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1990.0,4740.0,1.0,0.0,0.0,3.0,7.0,1080.0,910.0,47.6112,-122.303,1560.0,2370.0,89.0,0.0,0.0]},"out":{"variable":[581002.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,4300.0,70407.0,2.0,0.0,0.0,3.0,10.0,2710.0,1590.0,47.4472,-122.092,3520.0,26727.0,22.0,0.0,0.0]},"out":{"variable":[1115274.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1680.0,81893.0,1.0,0.0,0.0,3.0,7.0,1680.0,0.0,47.3248,-122.179,2480.0,38637.0,23.0,0.0,0.0]},"out":{"variable":[290987.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2040.0,12000.0,1.0,0.0,0.0,4.0,7.0,1300.0,740.0,47.7362,-122.241,1930.0,12000.0,52.0,0.0,0.0]},"out":{"variable":[477541.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2190.0,125452.0,1.0,0.0,2.0,3.0,9.0,2190.0,0.0,47.2703,-122.069,3000.0,125017.0,46.0,0.0,0.0]},"out":{"variable":[656707.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2220.0,11646.0,1.0,0.0,0.0,3.0,7.0,1270.0,950.0,47.7762,-122.27,1490.0,10003.0,64.0,0.0,0.0]},"out":{"variable":[513264.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1680.0,11193.0,2.0,0.0,0.0,3.0,8.0,1680.0,0.0,47.4482,-122.125,2080.0,8084.0,30.0,0.0,0.0]},"out":{"variable":[311515.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,3460.0,7977.0,2.0,0.0,0.0,3.0,9.0,3460.0,0.0,47.5908,-122.062,3390.0,6630.0,3.0,0.0,0.0]},"out":{"variable":[879092.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2717.0,4513.0,2.0,0.0,0.0,3.0,8.0,2717.0,0.0,47.3373,-122.266,2550.0,4841.0,9.0,0.0,0.0]},"out":{"variable":[371040.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,0.75,1020.0,1076.0,2.0,0.0,0.0,3.0,7.0,1020.0,0.0,47.5941,-122.299,1020.0,1357.0,6.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1490.0,4522.0,2.0,0.0,0.0,3.0,7.0,1490.0,0.0,47.7611,-122.233,1580.0,4667.0,5.0,0.0,0.0]},"out":{"variable":[417980.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,840.0,7020.0,1.5,0.0,0.0,4.0,7.0,840.0,0.0,47.5513,-122.394,1310.0,7072.0,72.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1970.0,4590.0,2.5,0.0,0.0,3.0,7.0,1970.0,0.0,47.666,-122.332,1900.0,4590.0,105.0,0.0,0.0]},"out":{"variable":[572710.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,820.0,3700.0,1.0,0.0,0.0,5.0,7.0,820.0,0.0,47.588,-122.251,1750.0,9000.0,46.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2701.0,4500.0,2.0,0.0,0.0,3.0,9.0,2701.0,0.0,47.2586,-122.194,2570.0,4800.0,0.0,0.0,0.0]},"out":{"variable":[467855.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1340.0,8867.0,2.0,0.0,0.0,3.0,8.0,1340.0,0.0,47.724,-122.327,1630.0,7287.0,30.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2420.0,10200.0,1.0,0.0,0.0,3.0,8.0,1220.0,1200.0,47.72,-122.236,2240.0,9750.0,53.0,0.0,0.0]},"out":{"variable":[538316.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1340.0,7788.0,1.0,0.0,2.0,3.0,7.0,1340.0,0.0,47.5094,-122.244,2550.0,7788.0,67.0,0.0,0.0]},"out":{"variable":[278475.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,940.0,9839.0,1.0,0.0,0.0,3.0,6.0,940.0,0.0,47.5379,-122.386,1330.0,8740.0,104.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,4.0,2080.0,2250.0,3.0,0.0,4.0,3.0,8.0,2080.0,0.0,47.6598,-122.355,2080.0,2250.0,17.0,0.0,0.0]},"out":{"variable":[656923.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1810.0,8232.0,1.0,0.0,0.0,3.0,8.0,1810.0,0.0,47.3195,-122.273,2260.0,8491.0,27.0,0.0,0.0]},"out":{"variable":[291239.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1030.0,3000.0,1.0,0.0,0.0,3.0,7.0,830.0,200.0,47.6813,-122.317,1830.0,3000.0,90.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1170.0,5248.0,1.0,0.0,0.0,5.0,6.0,1170.0,0.0,47.5318,-122.374,1170.0,5120.0,74.0,0.0,0.0]},"out":{"variable":[260266.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2830.0,3750.0,3.0,0.0,0.0,3.0,10.0,2830.0,0.0,47.6799,-122.385,1780.0,5000.0,0.0,0.0,0.0]},"out":{"variable":[937359.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,3310.0,8540.0,1.0,0.0,4.0,4.0,9.0,1660.0,1650.0,47.5603,-122.158,3450.0,9566.0,41.0,0.0,0.0]},"out":{"variable":[921561.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,2.0,3000.0,204732.0,2.5,0.0,2.0,3.0,8.0,3000.0,0.0,47.6331,-121.945,2330.0,213008.0,35.0,0.0,0.0]},"out":{"variable":[716558.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,900.0,5000.0,1.0,0.0,0.0,3.0,7.0,900.0,0.0,47.6883,-122.395,1280.0,5000.0,70.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2580.0,7344.0,2.0,0.0,0.0,3.0,8.0,2580.0,0.0,47.5647,-122.09,2390.0,7507.0,37.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1990.0,4040.0,1.5,0.0,0.0,5.0,8.0,1390.0,600.0,47.6867,-122.354,1180.0,3030.0,88.0,0.0,0.0]},"out":{"variable":[581002.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1440.0,1102.0,3.0,0.0,0.0,3.0,8.0,1440.0,0.0,47.6995,-122.346,1440.0,1434.0,6.0,0.0,0.0]},"out":{"variable":[408956.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,5010.0,49222.0,2.0,0.0,0.0,5.0,9.0,3710.0,1300.0,47.5489,-122.092,3140.0,54014.0,36.0,0.0,0.0]},"out":{"variable":[1092274.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1770.0,5750.0,2.0,0.0,0.0,3.0,7.0,1770.0,0.0,47.5621,-122.394,970.0,5750.0,67.0,0.0,0.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,1790.0,7203.0,1.0,0.0,0.0,4.0,7.0,1110.0,680.0,47.7709,-122.294,2270.0,9000.0,41.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,2470.0,4760.0,1.5,0.0,0.0,5.0,9.0,1890.0,580.0,47.6331,-122.31,2470.0,4760.0,108.0,0.0,0.0]},"out":{"variable":[957189.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2060.0,5721.0,1.0,0.0,2.0,3.0,9.0,1140.0,920.0,47.5268,-122.388,2060.0,8124.0,50.0,0.0,0.0]},"out":{"variable":[764936.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1240.0,720.0,2.0,0.0,0.0,3.0,7.0,1150.0,90.0,47.5322,-122.072,1260.0,810.0,7.0,0.0,0.0]},"out":{"variable":[258321.64]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,4.0,4100.0,8120.0,2.0,0.0,0.0,3.0,9.0,4100.0,0.0,47.6917,-122.02,4100.0,7625.0,3.0,0.0,0.0]},"out":{"variable":[987974.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1680.0,7910.0,1.0,0.0,0.0,3.0,7.0,1680.0,0.0,47.5085,-122.385,1330.0,7910.0,66.0,0.0,0.0]},"out":{"variable":[323856.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1400.0,6600.0,1.0,0.0,0.0,3.0,6.0,1280.0,120.0,47.4845,-122.331,1730.0,6600.0,60.0,0.0,0.0]},"out":{"variable":[259955.61]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.75,4410.0,8112.0,3.0,0.0,4.0,3.0,11.0,3570.0,840.0,47.5888,-122.392,2770.0,5750.0,12.0,0.0,0.0]},"out":{"variable":[1967344.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.75,3710.0,34412.0,2.0,0.0,0.0,3.0,10.0,2910.0,800.0,47.5888,-122.04,2390.0,34412.0,36.0,0.0,0.0]},"out":{"variable":[924823.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3450.0,35100.0,2.0,0.0,0.0,3.0,10.0,3450.0,0.0,47.7302,-122.106,3110.0,35894.0,27.0,0.0,0.0]},"out":{"variable":[921695.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1810.0,5080.0,1.0,0.0,0.0,3.0,7.0,1030.0,780.0,47.6819,-122.287,1780.0,7620.0,57.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,1850.0,16960.0,1.0,0.0,2.0,4.0,8.0,1850.0,0.0,47.7128,-122.365,2470.0,13761.0,61.0,0.0,0.0]},"out":{"variable":[440821.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1570.0,6300.0,1.0,0.0,0.0,3.0,7.0,820.0,750.0,47.5565,-122.275,1510.0,4281.0,61.0,1.0,52.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2140.0,13260.0,1.0,0.0,0.0,3.0,7.0,1240.0,900.0,47.5074,-122.353,1640.0,13260.0,66.0,0.0,0.0]},"out":{"variable":[388243.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,4750.0,21701.0,1.5,0.0,0.0,5.0,11.0,4750.0,0.0,47.6454,-122.218,3120.0,18551.0,38.0,0.0,0.0]},"out":{"variable":[2002393.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1270.0,2509.0,2.0,0.0,0.0,3.0,8.0,1270.0,0.0,47.5357,-122.365,1420.0,2206.0,10.0,0.0,0.0]},"out":{"variable":[431992.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2030.0,4867.0,2.0,0.0,0.0,3.0,7.0,2030.0,0.0,47.3747,-122.128,2030.0,5000.0,12.0,0.0,0.0]},"out":{"variable":[327625.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1520.0,4170.0,2.0,0.0,0.0,3.0,7.0,1520.0,0.0,47.3842,-122.04,1560.0,4237.0,10.0,0.0,0.0]},"out":{"variable":[261886.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,1570.0,499571.0,1.0,0.0,3.0,4.0,7.0,1570.0,0.0,47.1808,-122.023,1700.0,181708.0,42.0,0.0,0.0]},"out":{"variable":[303082.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.25,2500.0,7620.0,1.0,0.0,3.0,3.0,7.0,1250.0,1250.0,47.5298,-122.344,2020.0,7620.0,53.0,0.0,0.0]},"out":{"variable":[474010.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.25,3070.0,64033.0,1.0,0.0,0.0,3.0,9.0,2730.0,340.0,47.3238,-122.292,1560.0,28260.0,31.0,0.0,0.0]},"out":{"variable":[536388.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,3060.0,8862.0,2.0,0.0,0.0,3.0,8.0,3060.0,0.0,47.5322,-122.185,2680.0,8398.0,26.0,0.0,0.0]},"out":{"variable":[481600.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1250.0,8400.0,1.0,0.0,0.0,3.0,7.0,960.0,290.0,47.7505,-122.315,1560.0,8400.0,64.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1670.0,8800.0,1.0,0.0,0.0,4.0,7.0,1150.0,520.0,47.6096,-122.132,2020.0,8250.0,53.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.25,4115.0,7910.0,2.0,0.0,0.0,3.0,9.0,4115.0,0.0,47.6847,-122.016,3950.0,6765.0,0.0,0.0,0.0]},"out":{"variable":[988481.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,2680.0,15438.0,2.0,0.0,2.0,3.0,8.0,2680.0,0.0,47.6109,-122.226,4480.0,14406.0,113.0,1.0,54.0]},"out":{"variable":[747075.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1150.0,6600.0,1.5,0.0,0.0,4.0,6.0,1150.0,0.0,47.6709,-122.185,1530.0,6600.0,44.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1650.0,1180.0,3.0,0.0,0.0,3.0,8.0,1650.0,0.0,47.6636,-122.319,1720.0,1960.0,0.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1850.0,2575.0,2.0,0.0,0.0,3.0,9.0,1850.0,0.0,47.5525,-122.273,1080.0,4120.0,1.0,0.0,0.0]},"out":{"variable":[723935.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1560.0,3840.0,1.0,0.0,0.0,4.0,6.0,960.0,600.0,47.6882,-122.365,1560.0,4800.0,90.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.25,5790.0,13726.0,2.0,0.0,3.0,3.0,10.0,4430.0,1360.0,47.5388,-122.114,5790.0,13726.0,0.0,0.0,0.0]},"out":{"variable":[1189654.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2070.0,2992.0,2.0,0.0,0.0,3.0,8.0,2070.0,0.0,47.4496,-122.12,1900.0,2957.0,13.0,0.0,0.0]},"out":{"variable":[400536.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,980.0,6380.0,1.0,0.0,0.0,3.0,7.0,760.0,220.0,47.692,-122.308,1390.0,6380.0,73.0,0.0,0.0]},"out":{"variable":[444933.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.75,2110.0,5000.0,1.5,0.0,0.0,4.0,7.0,1250.0,860.0,47.6745,-122.287,1720.0,5000.0,69.0,0.0,0.0]},"out":{"variable":[656396.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,740.0,6250.0,1.0,0.0,0.0,3.0,6.0,740.0,0.0,47.506,-122.335,980.0,6957.0,72.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1140.0,5258.0,1.5,0.0,0.0,3.0,6.0,1140.0,0.0,47.5122,-122.383,1140.0,5280.0,103.0,0.0,0.0]},"out":{"variable":[312719.84]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,2298.0,10140.0,1.0,0.0,0.0,3.0,7.0,2298.0,0.0,47.6909,-122.083,2580.0,24724.0,46.0,0.0,0.0]},"out":{"variable":[683869.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,890.0,9465.0,1.0,0.0,0.0,3.0,6.0,890.0,0.0,47.4388,-122.328,1590.0,9147.0,57.0,0.0,0.0]},"out":{"variable":[240212.23]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1950.0,5451.0,2.0,0.0,0.0,3.0,7.0,1950.0,0.0,47.4341,-122.144,2240.0,6221.0,10.0,0.0,0.0]},"out":{"variable":[350049.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,830.0,26329.0,1.0,1.0,3.0,4.0,6.0,830.0,0.0,47.4012,-122.425,2030.0,27338.0,86.0,0.0,0.0]},"out":{"variable":[379398.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,3570.0,6250.0,2.0,0.0,2.0,3.0,10.0,2710.0,860.0,47.5624,-122.399,2550.0,7596.0,30.0,0.0,0.0]},"out":{"variable":[1124493.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,3170.0,34850.0,1.0,0.0,0.0,5.0,9.0,3170.0,0.0,47.6611,-122.169,3920.0,36740.0,58.0,0.0,0.0]},"out":{"variable":[1227073.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,3260.0,19542.0,1.0,0.0,0.0,4.0,10.0,2170.0,1090.0,47.6245,-122.236,3480.0,19863.0,46.0,0.0,0.0]},"out":{"variable":[1364650.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1210.0,4141.0,1.0,0.0,0.0,4.0,7.0,910.0,300.0,47.686,-122.382,1310.0,4141.0,72.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,4020.0,18745.0,2.0,0.0,4.0,4.0,10.0,2830.0,1190.0,47.6042,-122.21,3150.0,20897.0,26.0,0.0,0.0]},"out":{"variable":[1322835.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1930.0,10183.0,1.0,0.0,0.0,4.0,8.0,1480.0,450.0,47.5624,-122.135,2320.0,10000.0,39.0,0.0,0.0]},"out":{"variable":[559453.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1240.0,5758.0,1.5,0.0,0.0,4.0,6.0,960.0,280.0,47.5675,-122.396,1460.0,5750.0,105.0,0.0,0.0]},"out":{"variable":[437002.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1730.0,4102.0,3.0,1.0,4.0,3.0,8.0,1730.0,0.0,47.645,-122.084,2340.0,16994.0,19.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2160.0,10987.0,1.0,0.0,0.0,4.0,8.0,1440.0,720.0,47.6333,-122.034,1280.0,11617.0,34.0,1.0,22.0]},"out":{"variable":[673288.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1770.0,30689.0,1.0,0.0,4.0,3.0,9.0,1770.0,0.0,47.7648,-122.37,2650.0,30280.0,62.0,0.0,0.0]},"out":{"variable":[836230.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,3001.0,5710.0,2.0,0.0,0.0,3.0,8.0,3001.0,0.0,47.3727,-122.177,2340.0,5980.0,8.0,0.0,0.0]},"out":{"variable":[379076.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,962.0,1992.0,2.0,0.0,0.0,3.0,7.0,962.0,0.0,47.6911,-122.313,1130.0,1992.0,3.0,0.0,0.0]},"out":{"variable":[446768.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2350.0,5100.0,2.0,0.0,0.0,3.0,8.0,2350.0,0.0,47.3512,-122.008,2350.0,5363.0,11.0,0.0,0.0]},"out":{"variable":[349102.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1750.0,14400.0,1.0,0.0,0.0,4.0,7.0,1750.0,0.0,47.4535,-122.361,2030.0,14400.0,63.0,0.0,0.0]},"out":{"variable":[313096.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1620.0,1171.0,3.0,0.0,4.0,3.0,8.0,1470.0,150.0,47.6681,-122.355,1620.0,1505.0,6.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1410.0,5101.0,1.5,0.0,0.0,3.0,8.0,1410.0,0.0,47.6872,-122.333,1410.0,4224.0,87.0,0.0,0.0]},"out":{"variable":[450928.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,990.0,8140.0,1.0,0.0,0.0,1.0,6.0,990.0,0.0,47.5828,-122.382,2150.0,5000.0,105.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2690.0,7000.0,2.0,0.0,0.0,5.0,7.0,1840.0,850.0,47.6784,-122.277,1800.0,6435.0,71.0,0.0,0.0]},"out":{"variable":[718445.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2240.0,4616.0,2.0,0.0,0.0,3.0,7.0,1840.0,400.0,47.5118,-122.194,2260.0,5200.0,14.0,0.0,0.0]},"out":{"variable":[407385.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,810.0,4080.0,1.0,0.0,0.0,4.0,6.0,810.0,0.0,47.5337,-122.379,1400.0,4080.0,73.0,0.0,0.0]},"out":{"variable":[375011.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1240.0,10956.0,1.0,0.0,0.0,3.0,6.0,1240.0,0.0,47.3705,-122.15,1240.0,8137.0,27.0,0.0,0.0]},"out":{"variable":[243063.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2550.0,7555.0,2.0,0.0,0.0,3.0,8.0,2550.0,0.0,47.2614,-122.29,2550.0,6800.0,13.0,0.0,0.0]},"out":{"variable":[353912.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,770.0,6731.0,1.0,0.0,0.0,4.0,6.0,770.0,0.0,47.7505,-122.312,1120.0,9212.0,72.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3450.0,7832.0,2.0,0.0,0.0,3.0,10.0,3450.0,0.0,47.5637,-122.123,3220.0,8567.0,7.0,0.0,0.0]},"out":{"variable":[921695.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1660.0,2890.0,2.0,0.0,0.0,3.0,7.0,1660.0,0.0,47.5434,-122.293,1540.0,2890.0,14.0,0.0,0.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1450.0,5456.0,1.0,0.0,0.0,5.0,7.0,1450.0,0.0,47.5442,-122.297,980.0,6100.0,63.0,0.0,0.0]},"out":{"variable":[451058.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1170.0,6543.0,1.0,0.0,0.0,3.0,7.0,1170.0,0.0,47.537,-122.385,1550.0,7225.0,101.0,0.0,0.0]},"out":{"variable":[434534.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2750.0,11830.0,2.0,0.0,0.0,3.0,9.0,2750.0,0.0,47.4698,-122.121,2310.0,11830.0,0.0,0.0,0.0]},"out":{"variable":[515844.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2060.0,2900.0,1.5,0.0,0.0,5.0,8.0,1330.0,730.0,47.5897,-122.292,1910.0,3900.0,84.0,0.0,0.0]},"out":{"variable":[630865.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2350.0,20820.0,1.0,0.0,0.0,4.0,8.0,1800.0,550.0,47.6095,-122.059,2040.0,10800.0,36.0,0.0,0.0]},"out":{"variable":[700294.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1160.0,3700.0,1.5,0.0,0.0,3.0,7.0,1160.0,0.0,47.5651,-122.359,1340.0,3750.0,105.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2070.0,9600.0,1.0,0.0,1.0,3.0,7.0,1590.0,480.0,47.616,-122.239,3000.0,16215.0,68.0,0.0,0.0]},"out":{"variable":[636559.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2490.0,5812.0,2.0,0.0,0.0,3.0,8.0,2490.0,0.0,47.3875,-122.155,2690.0,6012.0,14.0,0.0,0.0]},"out":{"variable":[352272.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,980.0,3800.0,1.0,0.0,0.0,3.0,7.0,980.0,0.0,47.6903,-122.34,1520.0,5010.0,89.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1130.0,2640.0,1.0,0.0,0.0,4.0,8.0,1130.0,0.0,47.6438,-122.357,1680.0,3200.0,87.0,0.0,0.0]},"out":{"variable":[449699.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,0.75,1240.0,4000.0,1.0,0.0,0.0,4.0,7.0,1240.0,0.0,47.6239,-122.297,1460.0,4000.0,47.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1400.0,2036.0,2.0,0.0,0.0,3.0,7.0,1400.0,0.0,47.5516,-122.382,1500.0,2036.0,11.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1530.0,8500.0,1.0,0.0,0.0,5.0,7.0,1030.0,500.0,47.3592,-122.046,1850.0,8140.0,19.0,0.0,0.0]},"out":{"variable":[281411.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1830.0,8133.0,1.0,0.0,0.0,3.0,8.0,1390.0,440.0,47.7478,-122.247,2310.0,11522.0,19.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2570.0,10431.0,2.0,0.0,0.0,3.0,9.0,2570.0,0.0,47.4188,-122.213,2590.0,10078.0,25.0,0.0,0.0]},"out":{"variable":[482485.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1760.0,4125.0,1.5,0.0,3.0,4.0,7.0,1760.0,0.0,47.6748,-122.352,1760.0,4000.0,87.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2990.0,5669.0,2.0,0.0,0.0,3.0,8.0,2990.0,0.0,47.6119,-122.011,3110.0,5058.0,11.0,0.0,0.0]},"out":{"variable":[728707.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,2480.0,5500.0,2.0,0.0,3.0,3.0,10.0,1730.0,750.0,47.6466,-122.404,2950.0,5670.0,64.0,1.0,55.0]},"out":{"variable":[1100884.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1240.0,8410.0,1.0,0.0,0.0,5.0,6.0,1240.0,0.0,47.753,-122.328,1630.0,8410.0,67.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2720.0,5000.0,1.5,0.0,0.0,4.0,7.0,1530.0,1190.0,47.6827,-122.376,1210.0,5000.0,75.0,0.0,0.0]},"out":{"variable":[718445.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3880.0,14550.0,2.0,0.0,0.0,3.0,10.0,3880.0,0.0,47.6378,-122.04,3240.0,14045.0,27.0,0.0,0.0]},"out":{"variable":[946325.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2460.0,38794.0,2.0,0.0,0.0,3.0,9.0,2460.0,0.0,47.7602,-122.022,2470.0,51400.0,16.0,0.0,0.0]},"out":{"variable":[721143.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,920.0,4095.0,1.0,0.0,0.0,4.0,6.0,920.0,0.0,47.5484,-122.278,1460.0,4945.0,100.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,2330.0,7280.0,1.0,0.0,0.0,3.0,7.0,1450.0,880.0,47.4282,-122.28,1830.0,12178.0,33.0,0.0,0.0]},"out":{"variable":[392393.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1900.0,8160.0,1.0,0.0,0.0,3.0,7.0,1900.0,0.0,47.2114,-121.986,1280.0,6532.0,40.0,0.0,0.0]},"out":{"variable":[287576.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3820.0,17745.0,2.0,0.0,2.0,3.0,8.0,2440.0,1380.0,47.557,-122.295,2520.0,9640.0,59.0,0.0,0.0]},"out":{"variable":[785664.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,2840.0,7199.0,1.0,0.0,0.0,3.0,7.0,1710.0,1130.0,47.5065,-122.275,2210.0,10800.0,11.0,0.0,0.0]},"out":{"variable":[432908.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1580.0,507038.0,1.0,0.0,2.0,4.0,7.0,1580.0,0.0,47.2303,-121.936,2040.0,210394.0,29.0,0.0,0.0]},"out":{"variable":[311536.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2650.0,18295.0,2.0,0.0,0.0,3.0,8.0,2650.0,0.0,47.6075,-122.154,2230.0,19856.0,28.0,0.0,0.0]},"out":{"variable":[706407.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1260.0,8092.0,1.0,0.0,0.0,3.0,7.0,1260.0,0.0,47.3635,-122.054,1950.0,8092.0,28.0,0.0,0.0]},"out":{"variable":[253958.77]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1960.0,8136.0,1.0,0.0,0.0,3.0,7.0,980.0,980.0,47.5208,-122.364,1070.0,7480.0,66.0,0.0,0.0]},"out":{"variable":[365436.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2210.0,7620.0,2.0,0.0,0.0,3.0,8.0,2210.0,0.0,47.6938,-122.13,1920.0,7440.0,20.0,0.0,0.0]},"out":{"variable":[677870.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.25,3160.0,10587.0,1.0,0.0,0.0,5.0,7.0,2190.0,970.0,47.7238,-122.165,2200.0,7761.0,55.0,0.0,0.0]},"out":{"variable":[573403.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2280.0,7500.0,1.0,0.0,0.0,4.0,7.0,1140.0,1140.0,47.4182,-122.332,1660.0,8000.0,51.0,0.0,0.0]},"out":{"variable":[380461.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2870.0,6658.0,2.0,0.0,0.0,3.0,8.0,2870.0,0.0,47.5394,-121.878,2770.0,6658.0,11.0,0.0,0.0]},"out":{"variable":[713358.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,2570.0,4000.0,2.0,0.0,0.0,3.0,8.0,1750.0,820.0,47.6743,-122.313,1970.0,4000.0,105.0,1.0,105.0]},"out":{"variable":[713978.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1220.0,3000.0,1.5,0.0,0.0,3.0,6.0,1220.0,0.0,47.6506,-122.346,1350.0,3000.0,114.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1140.0,1069.0,3.0,0.0,0.0,3.0,8.0,1140.0,0.0,47.6907,-122.342,1230.0,1276.0,10.0,0.0,0.0]},"out":{"variable":[446768.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1700.0,6356.0,1.5,0.0,0.0,3.0,7.0,1700.0,0.0,47.5677,-122.281,2080.0,6000.0,107.0,0.0,0.0]},"out":{"variable":[548006.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1280.0,4366.0,2.0,0.0,0.0,4.0,6.0,1280.0,0.0,47.335,-122.215,1280.0,4366.0,29.0,0.0,0.0]},"out":{"variable":[243063.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.75,1465.0,972.0,2.0,0.0,0.0,3.0,7.0,1050.0,415.0,47.621,-122.298,1480.0,1430.0,8.0,0.0,0.0]},"out":{"variable":[498579.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[7.0,3.25,4340.0,8521.0,2.0,0.0,0.0,3.0,7.0,2550.0,1790.0,47.52,-122.338,1890.0,8951.0,28.0,0.0,0.0]},"out":{"variable":[474651.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2640.0,3750.0,2.0,0.0,0.0,5.0,7.0,1840.0,800.0,47.6783,-122.363,1690.0,5000.0,103.0,0.0,0.0]},"out":{"variable":[718445.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1397.0,18000.0,1.0,0.0,0.0,3.0,7.0,1397.0,0.0,47.3388,-122.166,1950.0,31294.0,49.0,1.0,49.0]},"out":{"variable":[261201.19]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1590.0,87120.0,1.0,0.0,3.0,3.0,8.0,1590.0,0.0,47.2241,-122.072,2780.0,183161.0,16.0,0.0,0.0]},"out":{"variable":[318011.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,4.0,4660.0,9900.0,2.0,0.0,2.0,4.0,9.0,2600.0,2060.0,47.5135,-122.2,3380.0,9900.0,35.0,0.0,0.0]},"out":{"variable":[1058105.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1260.0,1312.0,3.0,0.0,0.0,3.0,8.0,1260.0,0.0,47.6538,-122.356,1300.0,1312.0,7.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,930.0,6098.0,1.0,0.0,0.0,4.0,6.0,930.0,0.0,47.5289,-122.03,1730.0,9000.0,95.0,0.0,0.0]},"out":{"variable":[246901.17]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,1230.0,3774.0,1.0,0.0,0.0,4.0,6.0,830.0,400.0,47.6886,-122.354,1300.0,3774.0,90.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1470.0,1703.0,2.0,0.0,0.0,3.0,8.0,1470.0,0.0,47.5478,-121.999,1380.0,1107.0,9.0,0.0,0.0]},"out":{"variable":[504122.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2120.0,5277.0,2.0,0.0,0.0,3.0,7.0,2120.0,0.0,47.6811,-122.034,2370.0,5257.0,10.0,0.0,0.0]},"out":{"variable":[657905.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1780.0,2778.0,2.0,0.0,0.0,3.0,8.0,1530.0,250.0,47.5487,-122.372,1380.0,1998.0,7.0,0.0,0.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1860.0,3840.0,1.5,0.0,0.0,3.0,7.0,1170.0,690.0,47.6886,-122.359,1400.0,3840.0,87.0,1.0,86.0]},"out":{"variable":[560013.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,1700.0,7495.0,1.0,0.0,0.0,4.0,7.0,1200.0,500.0,47.7589,-122.354,1650.0,7495.0,51.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3770.0,8501.0,2.0,0.0,0.0,3.0,10.0,3770.0,0.0,47.6744,-122.196,1520.0,9660.0,6.0,0.0,0.0]},"out":{"variable":[1169643.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1740.0,30886.0,2.0,0.0,0.0,3.0,8.0,1740.0,0.0,47.46,-121.707,1740.0,39133.0,22.0,0.0,0.0]},"out":{"variable":[306037.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,980.0,9135.0,1.0,0.0,0.0,3.0,7.0,980.0,0.0,47.3496,-122.289,1780.0,9135.0,59.0,0.0,0.0]},"out":{"variable":[247640.27]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1680.0,5000.0,2.0,0.0,0.0,3.0,8.0,1680.0,0.0,47.3196,-122.395,1720.0,5000.0,27.0,0.0,0.0]},"out":{"variable":[296411.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2330.0,4950.0,1.5,0.0,0.0,3.0,6.0,1430.0,900.0,47.5585,-122.29,1160.0,5115.0,114.0,0.0,0.0]},"out":{"variable":[689450.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1630.0,1526.0,3.0,0.0,0.0,3.0,8.0,1630.0,0.0,47.6536,-122.354,1570.0,1274.0,0.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2040.0,3810.0,2.0,0.0,0.0,3.0,8.0,2040.0,0.0,47.3537,-122.0,2370.0,4590.0,9.0,0.0,0.0]},"out":{"variable":[328513.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.0,2280.0,5750.0,1.0,0.0,0.0,4.0,8.0,1140.0,1140.0,47.5672,-122.39,1780.0,5750.0,64.0,0.0,0.0]},"out":{"variable":[682284.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1350.0,10125.0,1.0,0.0,0.0,3.0,8.0,1350.0,0.0,47.3334,-122.298,1520.0,9720.0,48.0,0.0,0.0]},"out":{"variable":[248495.05]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.0,2050.0,10200.0,1.0,0.0,0.0,3.0,6.0,1430.0,620.0,47.4136,-122.333,1940.0,8625.0,58.0,0.0,0.0]},"out":{"variable":[355371.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1480.0,4800.0,2.0,0.0,0.0,4.0,7.0,1140.0,340.0,47.6567,-122.397,1810.0,4800.0,70.0,0.0,0.0]},"out":{"variable":[536175.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2990.0,15085.0,2.0,0.0,0.0,3.0,9.0,2990.0,0.0,47.746,-122.218,3150.0,13076.0,8.0,0.0,0.0]},"out":{"variable":[810731.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1450.0,4500.0,1.5,0.0,0.0,4.0,7.0,1450.0,0.0,47.6739,-122.396,1470.0,5000.0,93.0,0.0,0.0]},"out":{"variable":[464057.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1200.0,2002.0,2.0,0.0,0.0,3.0,8.0,1200.0,0.0,47.4659,-122.189,1270.0,1848.0,48.0,0.0,0.0]},"out":{"variable":[241852.31]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,2.75,3500.0,5150.0,2.0,0.0,0.0,5.0,8.0,2430.0,1070.0,47.6842,-122.363,1430.0,3860.0,105.0,0.0,0.0]},"out":{"variable":[784103.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2190.0,4944.0,2.0,0.0,0.0,3.0,8.0,2190.0,0.0,47.5341,-121.866,2190.0,5108.0,16.0,0.0,0.0]},"out":{"variable":[598725.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2630.0,4611.0,2.0,0.0,0.0,3.0,8.0,2630.0,0.0,47.5322,-121.868,2220.0,5250.0,14.0,0.0,0.0]},"out":{"variable":[470087.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2550.0,5395.0,2.0,0.0,0.0,3.0,8.0,2550.0,0.0,47.5355,-121.874,2850.0,6109.0,14.0,0.0,0.0]},"out":{"variable":[699002.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,3.75,2930.0,14980.0,2.0,0.0,3.0,3.0,9.0,2930.0,0.0,47.5441,-122.117,3210.0,10787.0,1.0,0.0,0.0]},"out":{"variable":[788215.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,1630.0,20750.0,1.0,0.0,0.0,4.0,7.0,1100.0,530.0,47.3657,-122.113,1630.0,8640.0,40.0,0.0,0.0]},"out":{"variable":[278094.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.75,2320.0,7700.0,1.0,0.0,0.0,5.0,7.0,1290.0,1030.0,47.3426,-122.285,1740.0,7210.0,52.0,0.0,0.0]},"out":{"variable":[347191.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1900.0,5065.0,2.0,0.0,0.0,3.0,8.0,1900.0,0.0,47.7175,-122.034,1350.0,4664.0,10.0,0.0,0.0]},"out":{"variable":[441512.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1020.0,7020.0,1.5,0.0,0.0,4.0,7.0,1020.0,0.0,47.7362,-122.314,1020.0,5871.0,61.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1280.0,16738.0,1.5,0.0,0.0,4.0,5.0,1280.0,0.0,47.3895,-122.023,1590.0,16317.0,82.0,0.0,0.0]},"out":{"variable":[246525.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3500.0,7048.0,2.0,0.0,0.0,3.0,9.0,3500.0,0.0,47.6811,-122.025,3920.0,7864.0,9.0,0.0,0.0]},"out":{"variable":[879092.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1810.0,8158.0,1.0,0.0,0.0,3.0,8.0,1450.0,360.0,47.6258,-122.038,1740.0,9532.0,30.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1220.0,5120.0,1.5,0.0,0.0,5.0,6.0,1220.0,0.0,47.205,-121.996,1540.0,7670.0,75.0,0.0,0.0]},"out":{"variable":[244351.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.25,1720.0,1587.0,2.5,0.0,2.0,3.0,9.0,1410.0,310.0,47.6187,-122.299,1490.0,1620.0,11.0,0.0,0.0]},"out":{"variable":[725184.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1270.0,1333.0,3.0,0.0,0.0,3.0,8.0,1270.0,0.0,47.6933,-122.342,1330.0,1333.0,9.0,0.0,0.0]},"out":{"variable":[442168.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1250.0,3880.0,1.0,0.0,0.0,4.0,7.0,750.0,500.0,47.6869,-122.392,1240.0,3880.0,70.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3710.0,7491.0,2.0,0.0,0.0,3.0,9.0,3710.0,0.0,47.5596,-122.016,3040.0,7491.0,12.0,0.0,0.0]},"out":{"variable":[879092.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1500.0,10227.0,1.0,0.0,0.0,4.0,7.0,1000.0,500.0,47.2043,-121.996,1490.0,7670.0,69.0,0.0,0.0]},"out":{"variable":[256845.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1160.0,1269.0,2.0,0.0,0.0,3.0,7.0,970.0,190.0,47.6608,-122.335,1700.0,3150.0,9.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2000.0,7414.0,2.0,0.0,0.0,4.0,7.0,2000.0,0.0,47.3508,-122.057,2000.0,7414.0,21.0,0.0,0.0]},"out":{"variable":[320863.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1880.0,11700.0,1.0,0.0,0.0,4.0,7.0,1880.0,0.0,47.3213,-122.187,2230.0,35200.0,46.0,0.0,0.0]},"out":{"variable":[296253.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.25,1710.0,2171.0,2.0,0.0,0.0,3.0,7.0,1400.0,310.0,47.5434,-122.368,1380.0,1300.0,0.0,0.0,0.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,2240.0,3800.0,2.0,0.0,0.0,3.0,8.0,1370.0,870.0,47.6887,-122.307,1690.0,4275.0,85.0,0.0,0.0]},"out":{"variable":[682284.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,2720.0,4000.0,2.0,0.0,1.0,3.0,10.0,2070.0,650.0,47.5554,-122.267,1450.0,4000.0,0.0,0.0,0.0]},"out":{"variable":[941029.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2390.0,7875.0,1.0,0.0,1.0,3.0,10.0,1980.0,410.0,47.6515,-122.278,3720.0,9075.0,66.0,0.0,0.0]},"out":{"variable":[1364149.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2050.0,3320.0,1.5,0.0,0.0,4.0,7.0,1580.0,470.0,47.6719,-122.301,1760.0,4150.0,87.0,0.0,0.0]},"out":{"variable":[630865.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1100.0,1737.0,2.0,0.0,0.0,3.0,8.0,1100.0,0.0,47.4499,-122.189,1610.0,2563.0,8.0,0.0,0.0]},"out":{"variable":[241657.14]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,0.75,770.0,4600.0,1.0,0.0,0.0,4.0,6.0,770.0,0.0,47.5565,-122.377,1550.0,4600.0,104.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2920.0,6300.0,1.0,0.0,0.0,3.0,8.0,1710.0,1210.0,47.7065,-122.37,1940.0,6300.0,58.0,0.0,0.0]},"out":{"variable":[719351.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3340.0,34238.0,1.0,0.0,0.0,4.0,8.0,2060.0,1280.0,47.7654,-122.076,2400.0,36590.0,37.0,0.0,0.0]},"out":{"variable":[597475.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,4.25,4110.0,42755.0,2.0,0.0,2.0,3.0,10.0,2970.0,1140.0,47.3375,-122.337,2730.0,12750.0,14.0,0.0,0.0]},"out":{"variable":[900814.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,1560.0,1466.0,3.0,0.0,0.0,3.0,8.0,1560.0,0.0,47.6604,-122.352,1530.0,2975.0,8.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1900.0,7225.0,1.0,0.0,0.0,3.0,8.0,1220.0,680.0,47.6394,-122.113,1900.0,7399.0,44.0,0.0,0.0]},"out":{"variable":[563844.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1480.0,6210.0,1.0,0.0,0.0,3.0,7.0,1080.0,400.0,47.774,-122.351,1290.0,7509.0,64.0,0.0,0.0]},"out":{"variable":[415964.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1070.0,5000.0,1.0,0.0,0.0,3.0,7.0,1070.0,0.0,47.6666,-122.331,1710.0,5000.0,91.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2080.0,11375.0,1.0,0.0,0.0,3.0,8.0,2080.0,0.0,47.214,-121.993,1080.0,12899.0,12.0,0.0,0.0]},"out":{"variable":[337248.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1670.0,9880.0,1.0,0.0,0.0,4.0,7.0,1670.0,0.0,47.4864,-122.348,1670.0,9807.0,73.0,1.0,22.0]},"out":{"variable":[299854.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1920.0,7500.0,1.0,0.0,0.0,4.0,7.0,1920.0,0.0,47.4222,-122.318,1490.0,8000.0,52.0,0.0,0.0]},"out":{"variable":[303936.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2780.0,6000.0,1.0,0.0,3.0,4.0,9.0,1670.0,1110.0,47.6442,-122.406,2780.0,6000.0,66.0,0.0,0.0]},"out":{"variable":[998351.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2990.0,6037.0,2.0,0.0,0.0,3.0,9.0,2990.0,0.0,47.4766,-121.735,2990.0,5992.0,2.0,0.0,0.0]},"out":{"variable":[524275.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,5430.0,10327.0,2.0,0.0,2.0,3.0,10.0,4010.0,1420.0,47.5476,-122.116,4340.0,10324.0,7.0,0.0,0.0]},"out":{"variable":[1207858.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1980.0,4500.0,2.0,0.0,0.0,3.0,7.0,1980.0,0.0,47.3671,-122.113,2200.0,4500.0,2.0,0.0,0.0]},"out":{"variable":[320395.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1240.0,12400.0,1.0,0.0,0.0,3.0,7.0,1240.0,0.0,47.607,-122.132,1640.0,9600.0,56.0,0.0,0.0]},"out":{"variable":[449699.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2360.0,4080.0,2.0,0.0,0.0,3.0,7.0,2360.0,0.0,47.6825,-122.038,2290.0,4080.0,11.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,3260.0,24300.0,1.5,0.0,1.0,4.0,8.0,2310.0,950.0,47.7587,-122.274,2390.0,32057.0,64.0,0.0,0.0]},"out":{"variable":[611431.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2280.0,27441.0,2.0,0.0,0.0,3.0,8.0,2280.0,0.0,47.7628,-122.123,2350.0,35020.0,18.0,0.0,0.0]},"out":{"variable":[519346.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1480.0,4200.0,1.5,0.0,0.0,3.0,7.0,1480.0,0.0,47.6147,-122.298,1460.0,3600.0,89.0,0.0,0.0]},"out":{"variable":[533935.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1710.0,1664.0,2.0,0.0,0.0,5.0,8.0,1300.0,410.0,47.6456,-122.383,1470.0,5400.0,11.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,2800.0,7694.0,1.0,0.0,0.0,3.0,9.0,2800.0,0.0,47.7095,-122.022,2420.0,7694.0,10.0,0.0,0.0]},"out":{"variable":[759983.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,0.75,1080.0,5025.0,1.0,0.0,0.0,3.0,5.0,1080.0,0.0,47.4936,-122.335,1370.0,6000.0,66.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2840.0,8800.0,2.0,0.0,0.0,3.0,9.0,2840.0,0.0,47.7029,-122.171,1840.0,7700.0,6.0,0.0,0.0]},"out":{"variable":[765468.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2000.0,8700.0,1.0,0.0,0.0,5.0,7.0,1010.0,990.0,47.374,-122.141,1490.0,7350.0,39.0,0.0,0.0]},"out":{"variable":[317551.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1410.0,7700.0,1.0,0.0,0.0,3.0,7.0,980.0,430.0,47.4577,-122.171,1510.0,7700.0,52.0,0.0,0.0]},"out":{"variable":[257630.27]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1000.0,4171.0,1.0,0.0,0.0,3.0,7.0,1000.0,0.0,47.6834,-122.097,1090.0,3479.0,29.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1150.0,4000.0,1.0,0.0,0.0,3.0,7.0,1150.0,0.0,47.6575,-122.394,1150.0,4288.0,67.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1050.0,18304.0,1.0,0.0,0.0,4.0,7.0,1050.0,0.0,47.3206,-122.269,1690.0,15675.0,61.0,0.0,0.0]},"out":{"variable":[241809.89]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2580.0,21115.0,2.0,0.0,0.0,4.0,9.0,2580.0,0.0,47.5566,-122.219,2690.0,10165.0,37.0,0.0,0.0]},"out":{"variable":[793214.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1750.0,5200.0,1.0,0.0,1.0,4.0,8.0,1750.0,0.0,47.6995,-122.383,2060.0,5200.0,58.0,0.0,0.0]},"out":{"variable":[467742.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,3410.0,9600.0,1.0,0.0,0.0,4.0,8.0,1870.0,1540.0,47.6358,-122.103,2390.0,9679.0,46.0,0.0,0.0]},"out":{"variable":[732736.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1500.0,3608.0,2.0,0.0,0.0,3.0,8.0,1500.0,0.0,47.5472,-121.994,2080.0,2686.0,9.0,0.0,0.0]},"out":{"variable":[525737.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,901.0,1245.0,3.0,0.0,0.0,3.0,7.0,901.0,0.0,47.6774,-122.325,1138.0,1137.0,13.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2130.0,6222.0,1.0,0.0,0.0,3.0,7.0,1300.0,830.0,47.5272,-122.276,2130.0,6222.0,23.0,0.0,0.0]},"out":{"variable":[391460.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2640.0,8800.0,1.0,0.0,0.0,3.0,8.0,1620.0,1020.0,47.7552,-122.148,2500.0,11700.0,35.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2100.0,2200.0,2.0,0.0,0.0,4.0,7.0,1500.0,600.0,47.614,-122.294,1750.0,4400.0,96.0,0.0,0.0]},"out":{"variable":[642519.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1080.0,9225.0,1.0,0.0,0.0,2.0,7.0,1080.0,0.0,47.4842,-122.346,1410.0,9840.0,59.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2590.0,12600.0,2.0,0.0,0.0,3.0,9.0,2590.0,0.0,47.5566,-122.162,2620.0,11050.0,36.0,0.0,0.0]},"out":{"variable":[758714.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2180.0,7876.0,1.0,0.0,0.0,4.0,7.0,1290.0,890.0,47.5157,-122.191,1960.0,7225.0,38.0,0.0,0.0]},"out":{"variable":[395096.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,810.0,5100.0,1.0,0.0,0.0,3.0,6.0,810.0,0.0,47.7317,-122.343,1500.0,5100.0,59.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2430.0,88426.0,1.0,0.0,0.0,4.0,7.0,1570.0,860.0,47.4828,-121.718,1560.0,56827.0,29.0,0.0,0.0]},"out":{"variable":[418823.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,4.0,4360.0,8030.0,2.0,0.0,0.0,3.0,10.0,4360.0,0.0,47.5923,-121.973,3570.0,6185.0,0.0,0.0,0.0]},"out":{"variable":[1160512.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,3190.0,29982.0,1.0,0.0,3.0,4.0,8.0,2630.0,560.0,47.458,-122.368,2600.0,19878.0,74.0,0.0,0.0]},"out":{"variable":[509102.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2210.0,4000.0,2.0,0.0,0.0,3.0,8.0,2210.0,0.0,47.6954,-122.017,2230.0,4674.0,6.0,0.0,0.0]},"out":{"variable":[673519.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1453.0,2225.0,2.0,0.0,0.0,4.0,8.0,1453.0,0.0,47.5429,-122.188,1860.0,2526.0,29.0,0.0,0.0]},"out":{"variable":[453298.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1790.0,3962.0,2.0,0.0,0.0,3.0,8.0,1790.0,0.0,47.6894,-122.391,1340.0,3960.0,22.0,0.0,0.0]},"out":{"variable":[554922.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,730.0,5040.0,1.0,0.0,0.0,3.0,6.0,730.0,0.0,47.5387,-122.374,790.0,5040.0,87.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.75,2690.0,4000.0,2.0,0.0,3.0,4.0,9.0,2120.0,570.0,47.6418,-122.372,2830.0,4000.0,105.0,1.0,80.0]},"out":{"variable":[999203.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1240.0,10800.0,1.0,0.0,0.0,5.0,7.0,1240.0,0.0,47.5233,-122.185,1810.0,10800.0,55.0,0.0,0.0]},"out":{"variable":[268856.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1300.0,8284.0,1.0,0.0,0.0,3.0,7.0,1300.0,0.0,47.3327,-122.306,1360.0,7848.0,46.0,0.0,0.0]},"out":{"variable":[243560.81]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1340.0,8505.0,1.0,0.0,0.0,3.0,6.0,1340.0,0.0,47.4727,-122.297,1370.0,9000.0,83.0,0.0,0.0]},"out":{"variable":[246026.86]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,900.0,4368.0,1.0,0.0,0.0,5.0,6.0,900.0,0.0,47.2107,-121.99,1290.0,5000.0,100.0,1.0,35.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2120.0,9706.0,1.0,0.0,0.0,3.0,7.0,1370.0,750.0,47.4939,-122.297,1730.0,11337.0,49.0,0.0,0.0]},"out":{"variable":[385561.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,2500.0,5801.0,1.5,0.0,0.0,3.0,8.0,1960.0,540.0,47.632,-122.29,3670.0,7350.0,88.0,0.0,0.0]},"out":{"variable":[739536.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1670.0,5400.0,2.0,0.0,0.0,5.0,8.0,1670.0,0.0,47.635,-122.284,2100.0,5400.0,102.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1200.0,9266.0,1.0,0.0,0.0,4.0,7.0,1200.0,0.0,47.314,-122.208,1200.0,9266.0,54.0,0.0,0.0]},"out":{"variable":[241330.19]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1330.0,36537.0,1.0,0.0,0.0,4.0,7.0,1330.0,0.0,47.3126,-122.129,1650.0,35100.0,26.0,0.0,0.0]},"out":{"variable":[249455.83]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2340.0,5670.0,2.0,0.0,0.0,3.0,7.0,2340.0,0.0,47.4913,-122.152,2190.0,4869.0,5.0,0.0,0.0]},"out":{"variable":[407019.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2160.0,4297.0,2.0,0.0,0.0,3.0,9.0,2160.0,0.0,47.5476,-122.012,2160.0,3968.0,15.0,0.0,0.0]},"out":{"variable":[723867.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1120.0,8661.0,1.0,0.0,0.0,3.0,7.0,1120.0,0.0,47.7034,-122.307,1470.0,7205.0,68.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1350.0,8220.0,1.0,0.0,0.0,3.0,7.0,1060.0,290.0,47.7224,-122.358,1540.0,8280.0,66.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2800.0,9538.0,2.0,0.0,0.0,3.0,8.0,2800.0,0.0,47.2675,-122.307,1970.0,7750.0,21.0,0.0,0.0]},"out":{"variable":[375104.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1260.0,1488.0,3.0,0.0,0.0,3.0,7.0,1260.0,0.0,47.7071,-122.336,1190.0,1095.0,5.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,1990.0,7712.0,1.0,0.0,0.0,3.0,8.0,1210.0,780.0,47.5688,-122.087,1720.0,7393.0,41.0,0.0,0.0]},"out":{"variable":[575724.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2330.0,16300.0,2.0,0.0,0.0,3.0,9.0,2330.0,0.0,47.7037,-122.24,2330.0,16300.0,51.0,0.0,0.0]},"out":{"variable":[920796.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[9.0,3.0,3680.0,4400.0,2.0,0.0,0.0,3.0,7.0,2830.0,850.0,47.6374,-122.324,1960.0,2450.0,107.0,0.0,0.0]},"out":{"variable":[784103.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2340.0,6183.0,1.0,0.0,0.0,3.0,7.0,1210.0,1130.0,47.6979,-122.31,1970.0,6183.0,85.0,0.0,0.0]},"out":{"variable":[676904.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2140.0,159865.0,1.0,0.0,0.0,4.0,7.0,1140.0,1000.0,47.4235,-122.218,1830.0,15569.0,54.0,0.0,0.0]},"out":{"variable":[385957.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.25,3080.0,12100.0,2.0,0.0,0.0,3.0,8.0,2080.0,1000.0,47.695,-122.399,2100.0,6581.0,30.0,0.0,0.0]},"out":{"variable":[756699.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3190.0,24170.0,2.0,0.0,0.0,3.0,10.0,3190.0,0.0,47.6209,-122.052,2110.0,26321.0,13.0,0.0,0.0]},"out":{"variable":[886958.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2570.0,7221.0,1.0,0.0,0.0,4.0,8.0,1570.0,1000.0,47.6921,-122.387,2440.0,7274.0,57.0,0.0,0.0]},"out":{"variable":[713978.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2830.0,5932.0,2.0,0.0,0.0,3.0,9.0,2830.0,0.0,47.6479,-122.408,2840.0,5593.0,0.0,0.0,0.0]},"out":{"variable":[800304.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1440.0,11787.0,1.0,0.0,0.0,3.0,8.0,1440.0,0.0,47.6276,-122.033,2190.0,11787.0,31.0,0.0,0.0]},"out":{"variable":[462431.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3740.0,41458.0,2.0,0.0,2.0,3.0,11.0,3740.0,0.0,47.7375,-122.139,3750.0,38325.0,14.0,0.0,0.0]},"out":{"variable":[957666.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1680.0,4584.0,2.0,0.0,0.0,3.0,7.0,1680.0,0.0,47.4794,-122.182,2160.0,4621.0,11.0,0.0,0.0]},"out":{"variable":[311515.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,3230.0,17833.0,2.0,0.0,0.0,4.0,9.0,3230.0,0.0,47.5683,-122.188,3690.0,17162.0,41.0,0.0,0.0]},"out":{"variable":[937281.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1800.0,4357.0,2.0,0.0,0.0,3.0,8.0,1800.0,0.0,47.5337,-121.841,1800.0,3663.0,2.0,0.0,0.0]},"out":{"variable":[450996.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1460.0,11481.0,1.0,0.0,0.0,2.0,7.0,1170.0,290.0,47.4493,-121.777,1540.0,9680.0,19.0,0.0,0.0]},"out":{"variable":[266405.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,3470.0,212639.0,2.0,0.0,0.0,3.0,7.0,2070.0,1400.0,47.7066,-121.968,2370.0,233917.0,21.0,0.0,0.0]},"out":{"variable":[727923.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,3310.0,5300.0,2.0,0.0,2.0,3.0,8.0,2440.0,870.0,47.5178,-122.389,2140.0,7500.0,6.0,0.0,0.0]},"out":{"variable":[480151.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1770.0,6014.0,1.5,0.0,0.0,4.0,7.0,1240.0,530.0,47.5773,-122.393,1740.0,6014.0,68.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1560.0,1020.0,3.0,0.0,0.0,3.0,8.0,1560.0,0.0,47.605,-122.304,1560.0,1728.0,0.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1350.0,14200.0,1.0,0.0,0.0,3.0,7.0,1350.0,0.0,47.7315,-121.972,2100.0,15101.0,25.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1840.0,5000.0,1.5,0.0,0.0,5.0,7.0,1340.0,500.0,47.6652,-122.362,1840.0,5000.0,99.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2480.0,10804.0,1.0,0.0,0.0,3.0,8.0,1800.0,680.0,47.7721,-122.367,2480.0,10400.0,38.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1030.0,8414.0,1.0,0.0,0.0,4.0,7.0,1030.0,0.0,47.7654,-122.297,1750.0,8414.0,47.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2450.0,15002.0,1.0,0.0,0.0,5.0,9.0,2450.0,0.0,47.4268,-122.343,2650.0,15055.0,40.0,0.0,0.0]},"out":{"variable":[508746.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1010.0,4000.0,1.0,0.0,0.0,3.0,6.0,1010.0,0.0,47.5536,-122.267,1040.0,4000.0,103.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1330.0,1200.0,3.0,0.0,0.0,3.0,7.0,1330.0,0.0,47.7034,-122.344,1330.0,1206.0,12.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,2770.0,19700.0,2.0,0.0,0.0,3.0,8.0,1780.0,990.0,47.7581,-122.365,2360.0,9700.0,31.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1900.0,5520.0,1.0,0.0,0.0,3.0,7.0,1280.0,620.0,47.5549,-122.292,1330.0,5196.0,32.0,0.0,0.0]},"out":{"variable":[551223.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1470.0,2034.0,2.0,0.0,0.0,4.0,8.0,1470.0,0.0,47.6213,-122.153,1510.0,2055.0,29.0,0.0,0.0]},"out":{"variable":[517121.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,2770.0,8763.0,2.0,0.0,0.0,3.0,8.0,2100.0,670.0,47.2625,-122.308,2030.0,7242.0,18.0,0.0,0.0]},"out":{"variable":[373955.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3550.0,35689.0,2.0,0.0,0.0,4.0,9.0,3550.0,0.0,47.7503,-122.074,3350.0,35711.0,23.0,0.0,0.0]},"out":{"variable":[873314.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2510.0,47044.0,2.0,0.0,0.0,3.0,9.0,2510.0,0.0,47.7699,-122.085,2600.0,42612.0,27.0,0.0,0.0]},"out":{"variable":[721143.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,4090.0,11225.0,2.0,0.0,0.0,3.0,10.0,4090.0,0.0,47.581,-121.971,3510.0,8762.0,9.0,0.0,0.0]},"out":{"variable":[1048372.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,720.0,5000.0,1.0,0.0,0.0,5.0,6.0,720.0,0.0,47.5195,-122.374,810.0,5000.0,63.0,0.0,0.0]},"out":{"variable":[244566.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2930.0,22000.0,1.0,0.0,3.0,4.0,9.0,1580.0,1350.0,47.3227,-122.384,2930.0,9758.0,36.0,0.0,0.0]},"out":{"variable":[518869.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,850.0,5000.0,1.0,0.0,0.0,3.0,6.0,850.0,0.0,47.3817,-122.314,1160.0,5000.0,39.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1570.0,1433.0,3.0,0.0,0.0,3.0,8.0,1570.0,0.0,47.6858,-122.336,1570.0,2652.0,4.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2390.0,15669.0,2.0,0.0,0.0,3.0,9.0,2390.0,0.0,47.7446,-122.193,2640.0,12500.0,24.0,0.0,0.0]},"out":{"variable":[741973.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,0.75,920.0,20412.0,1.0,1.0,2.0,5.0,6.0,920.0,0.0,47.4781,-122.49,1162.0,54705.0,64.0,0.0,0.0]},"out":{"variable":[338418.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2800.0,246114.0,2.0,0.0,0.0,3.0,9.0,2800.0,0.0,47.6586,-121.962,2750.0,60351.0,15.0,0.0,0.0]},"out":{"variable":[765468.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1120.0,9912.0,1.0,0.0,0.0,4.0,6.0,1120.0,0.0,47.3735,-122.43,1540.0,9750.0,34.0,0.0,0.0]},"out":{"variable":[309800.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,2760.0,4500.0,2.0,0.0,0.0,3.0,9.0,2120.0,640.0,47.6529,-122.372,1950.0,6000.0,10.0,0.0,0.0]},"out":{"variable":[798189.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2710.0,11400.0,1.0,0.0,0.0,4.0,9.0,1430.0,1280.0,47.561,-122.153,2640.0,11000.0,38.0,0.0,0.0]},"out":{"variable":[772047.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1700.0,7496.0,2.0,0.0,0.0,3.0,8.0,1700.0,0.0,47.432,-122.189,2280.0,7496.0,20.0,0.0,0.0]},"out":{"variable":[310992.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3420.0,33106.0,2.0,0.0,0.0,3.0,9.0,3420.0,0.0,47.3554,-121.986,3420.0,36590.0,10.0,0.0,0.0]},"out":{"variable":[539867.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1060.0,5750.0,1.0,0.0,0.0,3.0,6.0,950.0,110.0,47.6562,-122.389,1790.0,5857.0,110.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2720.0,54048.0,2.0,0.0,0.0,3.0,8.0,2720.0,0.0,47.7181,-122.089,2580.0,37721.0,30.0,0.0,0.0]},"out":{"variable":[546009.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2740.0,43101.0,2.0,0.0,0.0,3.0,9.0,2740.0,0.0,47.7649,-122.049,2740.0,33447.0,21.0,0.0,0.0]},"out":{"variable":[727898.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,3320.0,8587.0,3.0,0.0,0.0,3.0,11.0,2950.0,370.0,47.691,-122.337,1860.0,5668.0,6.0,0.0,0.0]},"out":{"variable":[1130661.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3130.0,13202.0,2.0,0.0,0.0,3.0,10.0,3130.0,0.0,47.5878,-121.976,2840.0,10470.0,19.0,0.0,0.0]},"out":{"variable":[879083.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1370.0,5125.0,1.0,0.0,0.0,5.0,6.0,1370.0,0.0,47.6926,-122.346,1200.0,5100.0,70.0,0.0,0.0]},"out":{"variable":[444933.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2040.0,5508.0,2.0,0.0,0.0,4.0,8.0,2040.0,0.0,47.5719,-122.007,2130.0,5496.0,18.0,0.0,0.0]},"out":{"variable":[627853.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3140.0,12792.0,2.0,0.0,0.0,4.0,9.0,3140.0,0.0,47.3863,-122.156,2510.0,12792.0,37.0,0.0,0.0]},"out":{"variable":[513583.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1190.0,7620.0,1.5,0.0,0.0,3.0,6.0,1190.0,0.0,47.5281,-122.348,1060.0,7320.0,88.0,0.0,0.0]},"out":{"variable":[247792.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2927.0,12171.0,2.0,0.0,0.0,3.0,10.0,2927.0,0.0,47.5948,-121.983,2967.0,12166.0,17.0,0.0,0.0]},"out":{"variable":[829775.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.75,4170.0,8142.0,2.0,0.0,2.0,3.0,10.0,4170.0,0.0,47.5354,-122.181,3030.0,7980.0,9.0,0.0,0.0]},"out":{"variable":[1098628.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2520.0,5000.0,3.0,0.0,0.0,3.0,9.0,2520.0,0.0,47.5664,-122.359,1130.0,5000.0,24.0,0.0,0.0]},"out":{"variable":[793214.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,2738.0,6031.0,2.0,0.0,0.0,3.0,8.0,2738.0,0.0,47.2962,-122.35,2738.0,5201.0,0.0,0.0,0.0]},"out":{"variable":[371040.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1110.0,8724.0,1.0,0.0,0.0,4.0,7.0,1110.0,0.0,47.3056,-122.206,1390.0,7750.0,24.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1180.0,1231.0,3.0,0.0,0.0,3.0,7.0,1180.0,0.0,47.6845,-122.315,1280.0,3360.0,7.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,910.0,6000.0,1.0,0.0,0.0,2.0,6.0,910.0,0.0,47.5065,-122.338,1090.0,6957.0,58.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1540.0,7168.0,1.0,0.0,0.0,3.0,7.0,1160.0,380.0,47.455,-122.198,1540.0,7176.0,51.0,0.0,0.0]},"out":{"variable":[293808.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1570.0,9415.0,2.0,0.0,0.0,4.0,7.0,1570.0,0.0,47.3168,-122.174,1550.0,8978.0,30.0,0.0,0.0]},"out":{"variable":[276709.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2160.0,9682.0,2.0,0.0,0.0,3.0,8.0,2160.0,0.0,47.4106,-122.204,1770.0,9600.0,15.0,0.0,0.0]},"out":{"variable":[363491.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1190.0,9199.0,1.0,0.0,0.0,3.0,7.0,1190.0,0.0,47.4258,-122.322,1190.0,9364.0,59.0,0.0,0.0]},"out":{"variable":[241330.19]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,4.25,3500.0,8750.0,1.0,0.0,4.0,5.0,9.0,2140.0,1360.0,47.7222,-122.367,3110.0,8750.0,63.0,0.0,0.0]},"out":{"variable":[1140733.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2230.0,9625.0,1.0,0.0,4.0,3.0,8.0,1180.0,1050.0,47.508,-122.244,2300.0,8211.0,59.0,0.0,0.0]},"out":{"variable":[473591.84]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2420.0,9147.0,2.0,0.0,0.0,3.0,10.0,2420.0,0.0,47.3221,-122.322,1400.0,7200.0,16.0,0.0,0.0]},"out":{"variable":[559139.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1750.0,7208.0,2.0,0.0,0.0,3.0,8.0,1750.0,0.0,47.4315,-122.192,2050.0,7524.0,20.0,0.0,0.0]},"out":{"variable":[311909.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.75,2330.0,6450.0,1.0,0.0,1.0,3.0,8.0,1330.0,1000.0,47.4959,-122.367,2330.0,8258.0,57.0,0.0,0.0]},"out":{"variable":[448720.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,4460.0,16271.0,2.0,0.0,2.0,3.0,11.0,4460.0,0.0,47.5862,-121.97,4540.0,17122.0,13.0,0.0,0.0]},"out":{"variable":[1208638.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,3010.0,1842.0,2.0,0.0,0.0,3.0,9.0,3010.0,0.0,47.5836,-121.994,2950.0,4200.0,3.0,0.0,0.0]},"out":{"variable":[795841.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1780.0,4750.0,1.0,0.0,0.0,4.0,7.0,1080.0,700.0,47.6859,-122.395,1690.0,5962.0,67.0,0.0,0.0]},"out":{"variable":[558463.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1650.0,2201.0,3.0,0.0,0.0,3.0,8.0,1650.0,0.0,47.7108,-122.333,1650.0,1965.0,8.0,0.0,0.0]},"out":{"variable":[439977.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2370.0,11310.0,1.0,0.0,0.0,3.0,8.0,1550.0,820.0,47.7684,-122.289,1890.0,8621.0,47.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,1520.0,1884.0,3.0,0.0,0.0,3.0,8.0,1520.0,0.0,47.7176,-122.284,1360.0,1939.0,5.0,0.0,0.0]},"out":{"variable":[424966.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,1300.0,4659.0,1.0,0.0,0.0,3.0,8.0,1300.0,0.0,47.7132,-122.033,1640.0,4780.0,9.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2074.0,4900.0,2.0,0.0,0.0,3.0,8.0,2074.0,0.0,47.7327,-122.233,1840.0,7382.0,17.0,0.0,0.0]},"out":{"variable":[483519.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3200.0,6691.0,2.0,0.0,0.0,3.0,7.0,3200.0,0.0,47.367,-122.031,2610.0,6510.0,13.0,0.0,0.0]},"out":{"variable":[383833.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1060.0,12690.0,1.0,0.0,0.0,3.0,7.0,1060.0,0.0,47.6736,-122.167,1920.0,10200.0,45.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1740.0,7290.0,1.0,0.0,0.0,3.0,8.0,1280.0,460.0,47.6461,-122.397,1820.0,6174.0,64.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2490.0,8700.0,1.0,0.0,0.0,3.0,7.0,1890.0,600.0,47.7397,-122.324,1470.0,7975.0,39.0,0.0,0.0]},"out":{"variable":[530288.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1050.0,7854.0,1.0,0.0,0.0,4.0,7.0,1050.0,0.0,47.3011,-122.369,1360.0,7668.0,40.0,0.0,0.0]},"out":{"variable":[239734.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1800.0,6750.0,1.5,0.0,0.0,4.0,7.0,1800.0,0.0,47.6868,-122.285,1420.0,5900.0,64.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2570.0,6466.0,2.0,0.0,0.0,3.0,9.0,2570.0,0.0,47.3324,-122.17,2520.0,6667.0,15.0,0.0,0.0]},"out":{"variable":[464060.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1590.0,21600.0,1.5,0.0,0.0,4.0,7.0,1590.0,0.0,47.2159,-121.966,1780.0,21600.0,44.0,0.0,0.0]},"out":{"variable":[283759.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1400.0,1650.0,3.0,0.0,0.0,3.0,7.0,1400.0,0.0,47.7222,-122.29,1430.0,1650.0,15.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3010.0,7953.0,2.0,0.0,0.0,3.0,9.0,3010.0,0.0,47.522,-122.19,2670.0,6202.0,14.0,0.0,0.0]},"out":{"variable":[660749.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1280.0,9000.0,1.5,0.0,0.0,4.0,6.0,1280.0,0.0,47.4915,-122.338,1430.0,4500.0,60.0,0.0,0.0]},"out":{"variable":[243585.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1270.0,6760.0,1.0,0.0,0.0,5.0,7.0,1270.0,0.0,47.7381,-122.179,1550.0,5734.0,42.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2160.0,7200.0,1.5,0.0,0.0,3.0,7.0,1220.0,940.0,47.5576,-122.273,1900.0,7200.0,59.0,0.0,0.0]},"out":{"variable":[673288.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,4285.0,9567.0,2.0,0.0,1.0,5.0,10.0,3485.0,800.0,47.6434,-122.409,2960.0,6902.0,68.0,0.0,0.0]},"out":{"variable":[1886959.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2060.0,8906.0,1.0,0.0,0.0,4.0,7.0,1220.0,840.0,47.5358,-122.289,1840.0,8906.0,36.0,0.0,0.0]},"out":{"variable":[627884.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,2670.0,5001.0,1.0,0.0,0.0,3.0,9.0,1640.0,1030.0,47.5666,-122.293,1610.0,5001.0,1.0,0.0,0.0]},"out":{"variable":[793214.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2380.0,13550.0,2.0,0.0,0.0,3.0,7.0,2380.0,0.0,47.4486,-122.288,1230.0,9450.0,15.0,0.0,0.0]},"out":{"variable":[397096.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,3600.0,9437.0,2.0,0.0,0.0,3.0,9.0,3600.0,0.0,47.4822,-122.131,3550.0,9421.0,0.0,0.0,0.0]},"out":{"variable":[542342.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,1090.0,32010.0,1.0,0.0,0.0,4.0,6.0,1090.0,0.0,47.6928,-121.87,1870.0,25346.0,56.0,0.0,0.0]},"out":{"variable":[444407.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1700.0,6375.0,1.0,0.0,0.0,4.0,7.0,850.0,850.0,47.6973,-122.295,1470.0,8360.0,65.0,0.0,0.0]},"out":{"variable":[469038.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.0,2000.0,4211.0,1.5,0.0,2.0,4.0,7.0,1280.0,720.0,47.6283,-122.301,1680.0,4000.0,106.0,0.0,0.0]},"out":{"variable":[582564.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1780.0,9969.0,1.0,0.0,0.0,3.0,8.0,1450.0,330.0,47.7286,-122.168,1950.0,7974.0,29.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2190.0,6450.0,1.0,0.0,0.0,3.0,8.0,1480.0,710.0,47.5284,-122.391,2190.0,6450.0,58.0,0.0,0.0]},"out":{"variable":[421402.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2220.0,10530.0,1.0,0.0,0.0,4.0,8.0,1700.0,520.0,47.6383,-122.098,2500.0,10014.0,41.0,0.0,0.0]},"out":{"variable":[680620.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1940.0,4400.0,1.0,0.0,0.0,3.0,7.0,970.0,970.0,47.6371,-122.279,1480.0,3080.0,92.0,0.0,0.0]},"out":{"variable":[567502.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,2120.0,6290.0,1.0,0.0,0.0,4.0,8.0,1220.0,900.0,47.5658,-122.318,1620.0,5400.0,65.0,0.0,0.0]},"out":{"variable":[657905.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2242.0,4800.0,2.0,0.0,0.0,3.0,8.0,2242.0,0.0,47.2581,-122.2,2009.0,4800.0,2.0,0.0,0.0]},"out":{"variable":[343304.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,770.0,5040.0,1.0,0.0,0.0,3.0,5.0,770.0,0.0,47.5964,-122.299,1330.0,2580.0,85.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,3320.0,5354.0,2.0,0.0,0.0,3.0,9.0,3320.0,0.0,47.6542,-122.331,2330.0,4040.0,11.0,0.0,0.0]},"out":{"variable":[974485.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,840.0,9480.0,1.0,0.0,0.0,3.0,6.0,840.0,0.0,47.3277,-122.341,840.0,9420.0,55.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,2000.0,5000.0,1.5,0.0,0.0,5.0,7.0,2000.0,0.0,47.5787,-122.293,2200.0,5000.0,90.0,0.0,0.0]},"out":{"variable":[581002.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,800.0,6016.0,1.0,0.0,0.0,3.0,6.0,800.0,0.0,47.6913,-122.369,1470.0,3734.0,72.0,0.0,0.0]},"out":{"variable":[446768.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2300.0,35287.0,2.0,0.0,0.0,3.0,8.0,2300.0,0.0,47.2477,-121.937,1760.0,47916.0,38.0,0.0,0.0]},"out":{"variable":[400628.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,4.0,1680.0,7268.0,1.0,0.0,0.0,3.0,8.0,1370.0,310.0,47.5571,-122.356,2040.0,8259.0,7.0,0.0,0.0]},"out":{"variable":[546632.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1180.0,10277.0,1.0,0.0,0.0,3.0,6.0,1180.0,0.0,47.488,-121.787,1680.0,11104.0,31.0,0.0,0.0]},"out":{"variable":[246775.17]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1460.0,3840.0,1.5,0.0,0.0,3.0,8.0,1340.0,120.0,47.533,-122.347,990.0,4200.0,87.0,0.0,0.0]},"out":{"variable":[288798.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1540.0,3570.0,1.5,0.0,0.0,5.0,7.0,1490.0,50.0,47.6692,-122.325,1620.0,4080.0,84.0,0.0,0.0]},"out":{"variable":[552992.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,870.0,4600.0,1.0,0.0,0.0,4.0,7.0,870.0,0.0,47.5274,-122.379,930.0,4600.0,72.0,0.0,0.0]},"out":{"variable":[313906.47]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,2010.0,3797.0,1.5,0.0,0.0,3.0,7.0,1450.0,560.0,47.5596,-122.315,1660.0,4650.0,92.0,1.0,82.0]},"out":{"variable":[578362.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,1790.0,47250.0,1.0,0.0,0.0,3.0,7.0,1220.0,570.0,47.5302,-121.746,1250.0,43791.0,27.0,0.0,0.0]},"out":{"variable":[323826.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2230.0,4372.0,2.0,0.0,0.0,5.0,8.0,1540.0,690.0,47.6698,-122.334,2020.0,4372.0,79.0,0.0,0.0]},"out":{"variable":[682284.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1310.0,9855.0,1.0,0.0,0.0,3.0,7.0,1310.0,0.0,47.7296,-122.241,1310.0,8370.0,52.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,2170.0,2500.0,2.0,0.0,0.0,3.0,8.0,1710.0,460.0,47.6742,-122.303,2170.0,4080.0,17.0,0.0,0.0]},"out":{"variable":[675545.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1180.0,14258.0,2.0,0.0,0.0,3.0,7.0,1180.0,0.0,47.7112,-122.238,1860.0,10390.0,27.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1910.0,5040.0,1.5,0.0,0.0,3.0,8.0,1910.0,0.0,47.6312,-122.061,1980.0,4275.0,43.0,0.0,0.0]},"out":{"variable":[563844.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,0.75,900.0,3527.0,1.0,0.0,0.0,3.0,6.0,900.0,0.0,47.5083,-122.336,1220.0,4080.0,76.0,0.0,0.0]},"out":{"variable":[236815.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2180.0,8000.0,1.0,0.0,0.0,4.0,9.0,1630.0,550.0,47.317,-122.378,2310.0,8000.0,39.0,0.0,0.0]},"out":{"variable":[444141.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,1670.0,3330.0,1.5,0.0,0.0,4.0,7.0,1670.0,0.0,47.6551,-122.36,1370.0,5000.0,89.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3250.0,8970.0,2.0,0.0,0.0,3.0,10.0,3250.0,0.0,47.5862,-122.037,3240.0,8449.0,20.0,0.0,0.0]},"out":{"variable":[886958.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1720.0,5525.0,1.0,0.0,2.0,5.0,7.0,960.0,760.0,47.559,-122.298,1760.0,5525.0,73.0,0.0,0.0]},"out":{"variable":[546632.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1060.0,10228.0,1.0,0.0,0.0,3.0,7.0,1060.0,0.0,47.7481,-122.3,1570.0,10228.0,66.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2640.0,8625.0,2.0,0.0,0.0,3.0,8.0,2640.0,0.0,47.4598,-122.15,2240.0,8700.0,27.0,0.0,0.0]},"out":{"variable":[441465.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1440.0,27505.0,1.0,0.0,0.0,3.0,8.0,1440.0,0.0,47.7553,-122.37,2430.0,16400.0,64.0,0.0,0.0]},"out":{"variable":[359614.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,3120.0,157875.0,2.0,0.0,0.0,4.0,8.0,3120.0,0.0,47.444,-122.187,1580.0,7050.0,38.0,0.0,0.0]},"out":{"variable":[448180.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1730.0,7442.0,2.0,0.0,0.0,3.0,7.0,1730.0,0.0,47.3507,-122.178,1630.0,6458.0,27.0,0.0,0.0]},"out":{"variable":[285253.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1540.0,7200.0,1.0,0.0,0.0,3.0,7.0,1260.0,280.0,47.3424,-122.308,1540.0,8416.0,48.0,0.0,0.0]},"out":{"variable":[275408.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1220.0,8040.0,1.5,0.0,0.0,3.0,7.0,1220.0,0.0,47.7133,-122.308,1360.0,8040.0,50.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1460.0,9759.0,1.0,0.0,0.0,5.0,7.0,1460.0,0.0,47.6644,-122.144,1620.0,8421.0,42.0,0.0,0.0]},"out":{"variable":[498579.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1650.0,9780.0,1.0,0.0,0.0,3.0,7.0,950.0,700.0,47.6549,-122.394,1650.0,5458.0,72.0,0.0,0.0]},"out":{"variable":[558463.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1700.0,7532.0,1.0,0.0,0.0,3.0,7.0,1700.0,0.0,47.355,-122.176,1690.0,7405.0,27.0,0.0,0.0]},"out":{"variable":[284336.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2206.0,82031.0,1.0,0.0,2.0,3.0,6.0,866.0,1340.0,47.6302,-122.069,2590.0,53024.0,31.0,0.0,0.0]},"out":{"variable":[682181.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,750.0,4000.0,1.0,0.0,0.0,4.0,6.0,750.0,0.0,47.5547,-122.272,1120.0,5038.0,89.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1100.0,5400.0,1.5,0.0,0.0,3.0,7.0,1100.0,0.0,47.6604,-122.396,1770.0,4400.0,106.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2340.0,8990.0,2.0,0.0,0.0,3.0,8.0,2340.0,0.0,47.3781,-122.03,2980.0,6718.0,11.0,0.0,0.0]},"out":{"variable":[349102.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2120.0,3220.0,2.0,0.0,0.0,3.0,9.0,2120.0,0.0,47.6662,-122.083,2120.0,3547.0,9.0,0.0,0.0]},"out":{"variable":[713948.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2520.0,53143.0,1.5,0.0,0.0,3.0,7.0,2520.0,0.0,47.743,-121.925,2020.0,56628.0,26.0,0.0,0.0]},"out":{"variable":[530288.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2960.0,8968.0,1.0,0.0,0.0,4.0,8.0,1640.0,1320.0,47.6233,-122.102,1890.0,9077.0,49.0,0.0,0.0]},"out":{"variable":[713485.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1510.0,7200.0,1.5,0.0,0.0,4.0,7.0,1510.0,0.0,47.761,-122.307,1950.0,10656.0,60.0,0.0,0.0]},"out":{"variable":[421306.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2350.0,18800.0,1.0,0.0,2.0,3.0,8.0,2350.0,0.0,47.5904,-122.177,3050.0,14640.0,55.0,0.0,0.0]},"out":{"variable":[718588.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1980.0,6566.0,2.0,0.0,0.0,3.0,8.0,1980.0,0.0,47.3809,-122.097,2590.0,6999.0,11.0,0.0,0.0]},"out":{"variable":[320395.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2170.0,3200.0,1.5,0.0,0.0,5.0,7.0,1280.0,890.0,47.6543,-122.347,1180.0,1224.0,91.0,0.0,0.0]},"out":{"variable":[675545.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,3940.0,11632.0,2.0,0.0,0.0,3.0,10.0,3940.0,0.0,47.438,-122.344,2015.0,11632.0,0.0,0.0,0.0]},"out":{"variable":[655009.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1390.0,2815.0,2.0,0.0,0.0,3.0,8.0,1390.0,0.0,47.566,-122.366,1390.0,3700.0,16.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1400.0,7384.0,1.0,0.0,0.0,3.0,7.0,1150.0,250.0,47.4655,-122.174,1820.0,7992.0,35.0,0.0,0.0]},"out":{"variable":[267013.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2780.0,32880.0,1.0,0.0,0.0,3.0,9.0,2780.0,0.0,47.4798,-121.727,2780.0,40091.0,21.0,0.0,0.0]},"out":{"variable":[533212.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1250.0,1150.0,2.0,0.0,0.0,3.0,8.0,1080.0,170.0,47.5582,-122.363,1250.0,1150.0,6.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2360.0,8290.0,1.0,0.0,0.0,4.0,7.0,1180.0,1180.0,47.6738,-122.281,1880.0,7670.0,65.0,0.0,0.0]},"out":{"variable":[713978.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3070.0,6923.0,2.0,0.0,0.0,3.0,9.0,3070.0,0.0,47.669,-122.172,2190.0,9218.0,5.0,0.0,0.0]},"out":{"variable":[831483.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2370.0,10631.0,2.0,0.0,0.0,3.0,8.0,2370.0,0.0,47.3473,-122.302,2200.0,8297.0,15.0,0.0,0.0]},"out":{"variable":[349102.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1780.0,7800.0,1.0,0.0,0.0,3.0,7.0,1060.0,720.0,47.4932,-122.263,1450.0,7800.0,57.0,0.0,0.0]},"out":{"variable":[300446.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,4240.0,25639.0,2.0,0.0,3.0,3.0,10.0,3550.0,690.0,47.3241,-122.378,3590.0,24967.0,25.0,0.0,0.0]},"out":{"variable":[1156651.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3440.0,9776.0,2.0,0.0,0.0,3.0,10.0,3440.0,0.0,47.5374,-122.216,2400.0,11000.0,9.0,0.0,0.0]},"out":{"variable":[1124493.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,3.25,1400.0,1243.0,3.0,0.0,0.0,3.0,8.0,1400.0,0.0,47.6534,-122.353,1400.0,1335.0,14.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2020.0,7070.0,1.0,0.0,0.0,5.0,7.0,1010.0,1010.0,47.5202,-122.378,1390.0,6000.0,56.0,0.0,0.0]},"out":{"variable":[379752.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,2070.0,5386.0,1.0,0.0,0.0,4.0,7.0,1140.0,930.0,47.6896,-122.374,1770.0,5386.0,66.0,0.0,0.0]},"out":{"variable":[628260.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2570.0,7980.0,2.0,0.0,0.0,3.0,9.0,2570.0,0.0,47.6378,-122.065,2760.0,6866.0,16.0,0.0,0.0]},"out":{"variable":[758714.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1290.0,3140.0,2.0,0.0,0.0,3.0,7.0,1290.0,0.0,47.6971,-122.026,1290.0,2628.0,6.0,0.0,0.0]},"out":{"variable":[400561.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,2230.0,12968.0,2.0,0.0,0.0,3.0,9.0,2230.0,0.0,47.6271,-122.197,2260.0,10160.0,25.0,0.0,0.0]},"out":{"variable":[757403.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1110.0,9762.0,1.0,0.0,0.0,4.0,7.0,1110.0,0.0,47.676,-122.15,1900.0,9720.0,51.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1220.0,1086.0,3.0,0.0,0.0,3.0,8.0,1220.0,0.0,47.7049,-122.353,1220.0,1422.0,7.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2160.0,3139.0,1.0,0.0,0.0,3.0,7.0,1080.0,1080.0,47.6662,-122.338,1650.0,3740.0,74.0,0.0,0.0]},"out":{"variable":[673288.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,4700.0,38412.0,2.0,0.0,0.0,3.0,10.0,3420.0,1280.0,47.6445,-122.167,3640.0,35571.0,36.0,0.0,0.0]},"out":{"variable":[1164589.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1880.0,4499.0,2.0,0.0,0.0,3.0,8.0,1880.0,0.0,47.5664,-121.999,2130.0,5114.0,22.0,0.0,0.0]},"out":{"variable":[553463.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2160.0,15817.0,2.0,0.0,0.0,3.0,8.0,2160.0,0.0,47.4166,-122.183,1990.0,15817.0,16.0,0.0,0.0]},"out":{"variable":[404551.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2340.0,16500.0,1.0,0.0,0.0,4.0,8.0,1500.0,840.0,47.5952,-122.051,2210.0,15251.0,42.0,0.0,0.0]},"out":{"variable":[687786.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,960.0,1829.0,2.0,0.0,0.0,3.0,7.0,960.0,0.0,47.6032,-122.308,1470.0,1829.0,10.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1270.0,1062.0,2.0,0.0,0.0,3.0,8.0,1060.0,210.0,47.6568,-122.321,1260.0,1112.0,7.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2560.0,5800.0,2.0,0.0,0.0,3.0,9.0,2560.0,0.0,47.3474,-122.025,3040.0,5800.0,10.0,0.0,0.0]},"out":{"variable":[464060.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1090.0,4000.0,1.5,0.0,0.0,4.0,7.0,1090.0,0.0,47.6846,-122.386,1520.0,4000.0,70.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1610.0,14000.0,1.0,0.0,0.0,4.0,7.0,1050.0,560.0,47.3429,-122.036,1550.0,10080.0,38.0,0.0,0.0]},"out":{"variable":[276709.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1578.0,7340.0,2.0,0.0,0.0,3.0,7.0,1578.0,0.0,47.3771,-122.186,1850.0,7200.0,4.0,0.0,0.0]},"out":{"variable":[284081.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1370.0,22326.0,2.0,0.0,0.0,3.0,7.0,1370.0,0.0,47.4469,-121.775,1580.0,10920.0,21.0,0.0,0.0]},"out":{"variable":[252192.89]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1780.0,14810.0,1.0,0.0,0.0,4.0,8.0,1180.0,600.0,47.3581,-122.288,1450.0,6728.0,65.0,0.0,0.0]},"out":{"variable":[281823.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1630.0,15600.0,1.0,0.0,0.0,3.0,7.0,1630.0,0.0,47.68,-122.165,1830.0,10850.0,56.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1100.0,17334.0,1.0,0.0,0.0,3.0,7.0,1100.0,0.0,47.3003,-122.27,1530.0,18694.0,36.0,0.0,0.0]},"out":{"variable":[238078.05]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,950.0,11835.0,1.0,0.0,0.0,3.0,5.0,950.0,0.0,47.7494,-122.237,1690.0,12586.0,82.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,1390.0,1080.0,2.0,0.0,0.0,3.0,7.0,1140.0,250.0,47.5325,-122.282,1450.0,1461.0,9.0,0.0,0.0]},"out":{"variable":[271309.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2150.0,13789.0,1.0,0.0,0.0,4.0,8.0,1610.0,540.0,47.7591,-122.295,2150.0,15480.0,48.0,0.0,0.0]},"out":{"variable":[508926.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,3920.0,13085.0,2.0,1.0,4.0,4.0,11.0,3920.0,0.0,47.5716,-122.204,3450.0,13287.0,18.0,0.0,0.0]},"out":{"variable":[1452224.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2720.0,8000.0,1.0,0.0,0.0,4.0,7.0,1360.0,1360.0,47.5237,-122.391,1790.0,8000.0,60.0,0.0,0.0]},"out":{"variable":[434958.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1200.0,9085.0,1.0,0.0,0.0,4.0,7.0,1200.0,0.0,47.2795,-122.353,1200.0,9085.0,46.0,0.0,0.0]},"out":{"variable":[241330.19]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,1310.0,8667.0,1.5,0.0,0.0,1.0,6.0,1310.0,0.0,47.6059,-122.313,1130.0,4800.0,96.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2400.0,3844.0,1.0,0.0,0.0,5.0,7.0,1200.0,1200.0,47.7027,-122.347,1100.0,3844.0,40.0,0.0,0.0]},"out":{"variable":[712309.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2160.0,15788.0,1.0,0.0,0.0,3.0,8.0,2160.0,0.0,47.6227,-122.207,2260.0,9787.0,63.0,0.0,0.0]},"out":{"variable":[673288.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2280.0,15347.0,1.0,0.0,0.0,5.0,7.0,2280.0,0.0,47.5218,-122.164,2280.0,15347.0,54.0,0.0,0.0]},"out":{"variable":[416617.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.25,3230.0,7800.0,2.0,0.0,3.0,3.0,10.0,3230.0,0.0,47.6348,-122.403,3030.0,6600.0,9.0,0.0,0.0]},"out":{"variable":[1077279.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2210.0,8465.0,1.0,0.0,0.0,3.0,8.0,1490.0,720.0,47.2647,-122.221,2210.0,7917.0,24.0,0.0,0.0]},"out":{"variable":[338137.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2380.0,16236.0,1.0,0.0,0.0,3.0,7.0,1540.0,840.0,47.6126,-122.12,2230.0,8925.0,53.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1080.0,4000.0,1.0,0.0,0.0,3.0,7.0,1080.0,0.0,47.6902,-122.387,1530.0,4240.0,75.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2950.0,10254.0,2.0,0.0,0.0,3.0,9.0,2950.0,0.0,47.4888,-122.14,2800.0,9323.0,8.0,0.0,0.0]},"out":{"variable":[523152.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2100.0,5060.0,2.0,0.0,0.0,3.0,7.0,2100.0,0.0,47.563,-122.298,1520.0,2468.0,8.0,0.0,0.0]},"out":{"variable":[642519.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1540.0,115434.0,1.5,0.0,0.0,4.0,7.0,1540.0,0.0,47.4163,-122.22,2027.0,23522.0,91.0,0.0,0.0]},"out":{"variable":[301714.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,940.0,5000.0,1.0,0.0,0.0,3.0,7.0,880.0,60.0,47.6771,-122.398,1420.0,5000.0,74.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1620.0,1841.0,2.0,0.0,0.0,3.0,8.0,1540.0,80.0,47.5483,-122.004,1530.0,1831.0,10.0,0.0,0.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3180.0,12528.0,2.0,0.0,1.0,4.0,9.0,2060.0,1120.0,47.7058,-122.379,2850.0,11410.0,36.0,0.0,0.0]},"out":{"variable":[944006.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1810.0,6583.0,1.0,0.0,0.0,3.0,7.0,1500.0,310.0,47.7273,-122.351,860.0,8670.0,47.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,3230.0,5167.0,1.5,0.0,0.0,4.0,8.0,2000.0,1230.0,47.7053,-122.34,1509.0,1626.0,106.0,0.0,0.0]},"out":{"variable":[756699.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1540.0,9154.0,1.0,0.0,0.0,3.0,8.0,1540.0,0.0,47.6207,-122.042,1990.0,10273.0,31.0,0.0,0.0]},"out":{"variable":[555231.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,3080.0,6495.0,2.0,0.0,3.0,3.0,11.0,2530.0,550.0,47.6321,-122.393,4120.0,8620.0,18.0,1.0,10.0]},"out":{"variable":[1122811.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1420.0,7420.0,1.5,0.0,0.0,3.0,6.0,1420.0,0.0,47.4949,-122.239,1290.0,6600.0,70.0,0.0,0.0]},"out":{"variable":[256630.31]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1020.0,5410.0,1.0,0.0,0.0,4.0,7.0,880.0,140.0,47.6924,-122.31,1580.0,5376.0,86.0,0.0,0.0]},"out":{"variable":[444933.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2480.0,6112.0,2.0,0.0,0.0,3.0,7.0,2480.0,0.0,47.4387,-122.114,3220.0,6727.0,10.0,0.0,0.0]},"out":{"variable":[400456.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1770.0,7251.0,1.0,0.0,0.0,4.0,8.0,1770.0,0.0,47.4087,-122.17,2560.0,7210.0,24.0,0.0,0.0]},"out":{"variable":[294203.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,820.0,5100.0,1.0,0.0,0.0,4.0,6.0,820.0,0.0,47.5175,-122.205,2270.0,5100.0,60.0,0.0,0.0]},"out":{"variable":[258377.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2420.0,7548.0,1.0,0.0,0.0,4.0,8.0,1370.0,1050.0,47.3112,-122.376,2150.0,8000.0,47.0,0.0,0.0]},"out":{"variable":[350835.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,4.5,3500.0,8504.0,2.0,0.0,0.0,3.0,7.0,3500.0,0.0,47.7349,-122.295,1550.0,8460.0,35.0,0.0,0.0]},"out":{"variable":[637376.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2701.0,5821.0,2.0,0.0,0.0,3.0,7.0,2701.0,0.0,47.2873,-122.177,2566.0,5843.0,1.0,0.0,0.0]},"out":{"variable":[371040.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1620.0,997.0,2.5,0.0,0.0,3.0,8.0,1540.0,80.0,47.54,-122.026,1620.0,1068.0,4.0,0.0,0.0]},"out":{"variable":[544392.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,2050.0,5000.0,2.0,0.0,0.0,4.0,8.0,1370.0,680.0,47.6235,-122.298,1720.0,5000.0,27.0,0.0,0.0]},"out":{"variable":[630865.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2400.0,7738.0,1.5,0.0,0.0,3.0,8.0,2400.0,0.0,47.4562,-122.33,2170.0,8452.0,50.0,0.0,0.0]},"out":{"variable":[424253.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,710.0,4618.0,1.0,0.0,1.0,3.0,5.0,710.0,0.0,47.64,-122.394,1810.0,4988.0,90.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1720.0,6000.0,1.0,0.0,2.0,3.0,7.0,1000.0,720.0,47.4999,-122.223,1690.0,6000.0,60.0,0.0,0.0]},"out":{"variable":[332793.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,4200.0,35267.0,2.0,0.0,0.0,3.0,11.0,4200.0,0.0,47.7108,-122.071,3540.0,22234.0,24.0,0.0,0.0]},"out":{"variable":[1181336.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,4160.0,47480.0,2.0,0.0,0.0,3.0,10.0,4160.0,0.0,47.7266,-122.115,3400.0,40428.0,19.0,0.0,0.0]},"out":{"variable":[1082353.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1500.0,7482.0,1.0,0.0,0.0,4.0,7.0,1210.0,290.0,47.4619,-122.187,1480.0,7308.0,46.0,0.0,0.0]},"out":{"variable":[265691.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1720.0,8100.0,2.0,0.0,0.0,3.0,8.0,1720.0,0.0,47.6746,-122.4,2210.0,8100.0,107.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1590.0,11745.0,1.0,0.0,0.0,3.0,7.0,1090.0,500.0,47.3553,-122.28,1540.0,12530.0,36.0,0.0,0.0]},"out":{"variable":[276046.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2860.0,4500.0,2.0,0.0,2.0,3.0,8.0,1980.0,880.0,47.6463,-122.371,2310.0,4500.0,99.0,0.0,0.0]},"out":{"variable":[721518.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2120.0,6710.0,1.0,0.0,0.0,5.0,7.0,1420.0,700.0,47.7461,-122.324,1880.0,6960.0,55.0,0.0,0.0]},"out":{"variable":[494083.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2660.0,4975.0,2.0,0.0,0.0,3.0,8.0,2660.0,0.0,47.5487,-122.272,1840.0,6653.0,0.0,0.0,0.0]},"out":{"variable":[718445.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,980.0,1020.0,3.0,0.0,0.0,3.0,8.0,980.0,0.0,47.6844,-122.387,980.0,1023.0,6.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2040.0,5616.0,2.0,0.0,0.0,3.0,8.0,2040.0,0.0,47.7737,-122.238,2380.0,4737.0,2.0,0.0,0.0]},"out":{"variable":[481460.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1360.0,9603.0,1.0,0.0,0.0,3.0,7.0,1360.0,0.0,47.3959,-122.309,2240.0,10605.0,52.0,0.0,0.0]},"out":{"variable":[257407.33]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,3450.0,28324.0,1.0,0.0,0.0,5.0,8.0,2350.0,1100.0,47.6991,-122.196,2640.0,14978.0,42.0,0.0,0.0]},"out":{"variable":[782434.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1810.0,4220.0,2.0,0.0,0.0,3.0,8.0,1810.0,0.0,47.7177,-122.034,1350.0,4479.0,10.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,4.5,5770.0,10050.0,1.0,0.0,3.0,5.0,9.0,3160.0,2610.0,47.677,-122.275,2950.0,6700.0,65.0,0.0,0.0]},"out":{"variable":[1689843.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1720.0,6417.0,1.0,0.0,0.0,3.0,7.0,1720.0,0.0,47.7268,-122.311,1430.0,6240.0,61.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1470.0,18581.0,1.5,0.0,0.0,3.0,6.0,1470.0,0.0,47.4336,-122.197,1770.0,18581.0,90.0,0.0,0.0]},"out":{"variable":[275884.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2340.0,10495.0,1.0,0.0,0.0,4.0,8.0,2340.0,0.0,47.5386,-122.226,3120.0,11068.0,47.0,0.0,0.0]},"out":{"variable":[704672.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,2080.0,8112.0,1.0,1.0,4.0,4.0,8.0,1040.0,1040.0,47.7134,-122.277,2030.0,8408.0,75.0,1.0,45.0]},"out":{"variable":[987157.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1360.0,16000.0,1.0,0.0,0.0,3.0,7.0,1360.0,0.0,47.7583,-122.306,1360.0,12939.0,36.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1080.0,6760.0,1.0,0.0,2.0,3.0,6.0,1080.0,0.0,47.7008,-122.386,2080.0,5800.0,91.0,0.0,0.0]},"out":{"variable":[392867.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1750.0,68841.0,1.0,0.0,0.0,3.0,7.0,1750.0,0.0,47.4442,-122.081,1550.0,32799.0,72.0,0.0,0.0]},"out":{"variable":[303002.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,670.0,5750.0,1.0,0.0,0.0,3.0,7.0,670.0,0.0,47.5624,-122.394,1170.0,5750.0,73.0,1.0,69.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,2990.0,9773.0,2.0,0.0,0.0,4.0,8.0,2990.0,0.0,47.6344,-122.174,2230.0,11553.0,42.0,0.0,0.0]},"out":{"variable":[713485.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1360.0,9688.0,1.0,0.0,0.0,4.0,7.0,1360.0,0.0,47.2574,-122.31,1390.0,9685.0,31.0,0.0,0.0]},"out":{"variable":[247009.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,2500.0,35802.0,1.5,0.0,0.0,3.0,7.0,2500.0,0.0,47.6488,-122.153,2880.0,40510.0,59.0,0.0,0.0]},"out":{"variable":[713003.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2300.0,41900.0,1.0,0.0,0.0,4.0,8.0,1310.0,990.0,47.477,-122.292,1160.0,8547.0,76.0,0.0,0.0]},"out":{"variable":[430252.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,5403.0,24069.0,2.0,1.0,4.0,4.0,12.0,5403.0,0.0,47.4169,-122.348,3980.0,104374.0,39.0,0.0,0.0]},"out":{"variable":[1946437.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1530.0,4944.0,1.0,0.0,0.0,3.0,7.0,1530.0,0.0,47.6857,-122.341,1500.0,4944.0,64.0,0.0,0.0]},"out":{"variable":[550275.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1120.0,758.0,2.0,0.0,0.0,3.0,7.0,1120.0,0.0,47.5325,-122.072,1150.0,758.0,2.0,0.0,0.0]},"out":{"variable":[247726.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2350.0,6958.0,2.0,0.0,0.0,3.0,9.0,2350.0,0.0,47.3321,-122.172,2480.0,6395.0,16.0,0.0,0.0]},"out":{"variable":[461279.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.0,2300.0,7897.0,2.5,0.0,0.0,4.0,8.0,2300.0,0.0,47.7556,-122.356,2030.0,7902.0,59.0,0.0,0.0]},"out":{"variable":[523576.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2130.0,9100.0,1.0,0.0,0.0,3.0,8.0,1290.0,840.0,47.3815,-122.169,1770.0,7700.0,36.0,0.0,0.0]},"out":{"variable":[334257.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1560.0,7000.0,1.0,0.0,0.0,4.0,7.0,1560.0,0.0,47.3355,-122.284,1560.0,7200.0,46.0,0.0,0.0]},"out":{"variable":[276709.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2030.0,8400.0,1.0,0.0,0.0,3.0,7.0,1330.0,700.0,47.6713,-122.152,1920.0,8400.0,47.0,0.0,0.0]},"out":{"variable":[595497.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,660.0,6509.0,1.0,0.0,0.0,4.0,5.0,660.0,0.0,47.4938,-122.171,970.0,5713.0,63.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,3420.0,18129.0,2.0,0.0,0.0,3.0,9.0,2540.0,880.0,47.5333,-122.217,3750.0,16316.0,62.0,1.0,53.0]},"out":{"variable":[1325960.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2460.0,4399.0,2.0,0.0,0.0,3.0,7.0,2460.0,0.0,47.5415,-121.884,2060.0,4399.0,7.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.25,4560.0,13363.0,1.0,0.0,4.0,3.0,11.0,2760.0,1800.0,47.6205,-122.214,4060.0,13362.0,20.0,0.0,0.0]},"out":{"variable":[2005883.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2670.0,189486.0,2.0,0.0,4.0,3.0,8.0,2670.0,0.0,47.2585,-122.061,2190.0,218610.0,42.0,0.0,0.0]},"out":{"variable":[495822.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1350.0,2325.0,3.0,0.0,0.0,3.0,7.0,1350.0,0.0,47.6965,-122.35,1520.0,1652.0,16.0,0.0,0.0]},"out":{"variable":[422481.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3670.0,54450.0,2.0,0.0,0.0,3.0,10.0,3670.0,0.0,47.6211,-122.016,2900.0,49658.0,15.0,0.0,0.0]},"out":{"variable":[921695.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,4200.0,5400.0,2.0,0.0,0.0,3.0,9.0,3140.0,1060.0,47.7077,-122.12,3300.0,5564.0,2.0,0.0,0.0]},"out":{"variable":[1052897.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,1810.0,9240.0,2.0,0.0,0.0,3.0,7.0,1810.0,0.0,47.4362,-122.187,1660.0,9240.0,54.0,0.0,0.0]},"out":{"variable":[303866.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,700.0,5829.0,1.0,0.0,0.0,3.0,6.0,700.0,0.0,47.6958,-122.357,1160.0,6700.0,70.0,0.0,0.0]},"out":{"variable":[432971.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3220.0,38448.0,2.0,0.0,0.0,3.0,10.0,3220.0,0.0,47.6854,-122.053,3090.0,38448.0,21.0,0.0,0.0]},"out":{"variable":[886958.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1520.0,7983.0,1.0,0.0,0.0,5.0,7.0,1520.0,0.0,47.7357,-122.193,1520.0,7783.0,47.0,0.0,0.0]},"out":{"variable":[424966.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1910.0,5000.0,2.0,0.0,0.0,3.0,7.0,1910.0,0.0,47.3608,-122.036,2020.0,5000.0,9.0,0.0,0.0]},"out":{"variable":[296202.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2840.0,216493.0,2.0,0.0,0.0,3.0,9.0,2840.0,0.0,47.702,-121.892,2820.0,175111.0,23.0,0.0,0.0]},"out":{"variable":[765468.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,3430.0,15119.0,2.0,0.0,0.0,3.0,10.0,3430.0,0.0,47.5678,-122.032,3430.0,12045.0,17.0,0.0,0.0]},"out":{"variable":[919031.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1760.0,5390.0,1.0,0.0,0.0,3.0,8.0,1760.0,0.0,47.3482,-122.042,2310.0,5117.0,0.0,0.0,0.0]},"out":{"variable":[291239.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1110.0,1290.0,3.0,0.0,0.0,3.0,8.0,1110.0,0.0,47.6968,-122.34,1360.0,1251.0,8.0,0.0,0.0]},"out":{"variable":[405552.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1350.0,941.0,3.0,0.0,0.0,3.0,9.0,1350.0,0.0,47.6265,-122.364,1640.0,1369.0,8.0,0.0,0.0]},"out":{"variable":[684577.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,2980.0,7000.0,2.0,0.0,3.0,3.0,10.0,2140.0,840.0,47.5933,-122.292,2200.0,4800.0,114.0,1.0,114.0]},"out":{"variable":[1156206.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,2260.0,1834.0,2.0,0.0,0.0,3.0,8.0,1660.0,600.0,47.6111,-122.308,2260.0,1834.0,12.0,0.0,0.0]},"out":{"variable":[682284.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.25,3400.0,7452.0,2.0,0.0,0.0,3.0,10.0,3400.0,0.0,47.6141,-122.136,2650.0,8749.0,15.0,0.0,0.0]},"out":{"variable":[911794.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,4.5,6380.0,88714.0,2.0,0.0,0.0,3.0,12.0,6380.0,0.0,47.5592,-122.015,3040.0,7113.0,8.0,0.0,0.0]},"out":{"variable":[1355747.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.75,3180.0,9889.0,2.0,0.0,0.0,3.0,9.0,2500.0,680.0,47.6853,-122.204,2910.0,8558.0,2.0,0.0,0.0]},"out":{"variable":[946050.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,3130.0,12381.0,2.0,0.0,0.0,3.0,9.0,3130.0,0.0,47.5599,-122.118,3250.0,10049.0,20.0,0.0,0.0]},"out":{"variable":[836480.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1470.0,7694.0,1.0,0.0,0.0,4.0,7.0,1470.0,0.0,47.3539,-122.054,1580.0,7480.0,23.0,0.0,0.0]},"out":{"variable":[259333.95]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.25,2360.0,3873.0,2.0,0.0,0.0,3.0,8.0,1990.0,370.0,47.5635,-122.299,1720.0,3071.0,8.0,0.0,0.0]},"out":{"variable":[713978.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,4.0,2790.0,16117.0,2.0,0.0,0.0,4.0,9.0,2790.0,0.0,47.6033,-122.155,2740.0,25369.0,15.0,0.0,0.0]},"out":{"variable":[765468.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2600.0,4506.0,2.0,0.0,0.0,3.0,9.0,2600.0,0.0,47.5146,-122.188,2470.0,6041.0,9.0,0.0,0.0]},"out":{"variable":[575285.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3270.0,15704.0,2.0,0.0,0.0,3.0,9.0,2110.0,1160.0,47.6256,-122.042,3020.0,8582.0,24.0,0.0,0.0]},"out":{"variable":[846775.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2810.0,6146.0,2.0,0.0,0.0,3.0,9.0,2810.0,0.0,47.4045,-122.208,2810.0,6180.0,16.0,0.0,0.0]},"out":{"variable":[488736.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1480.0,5600.0,1.0,0.0,0.0,4.0,6.0,940.0,540.0,47.5045,-122.27,1350.0,11100.0,67.0,0.0,0.0]},"out":{"variable":[267890.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2320.0,9240.0,1.0,0.0,0.0,3.0,7.0,1160.0,1160.0,47.4909,-122.257,2130.0,7320.0,55.0,1.0,55.0]},"out":{"variable":[404676.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1880.0,12150.0,1.0,0.0,0.0,3.0,7.0,1280.0,600.0,47.3272,-122.363,1980.0,9680.0,38.0,0.0,0.0]},"out":{"variable":[293560.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1785.0,779.0,2.0,0.0,0.0,3.0,7.0,1595.0,190.0,47.5959,-122.198,1780.0,794.0,39.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2590.0,9530.0,1.0,0.0,0.0,4.0,8.0,1640.0,950.0,47.7752,-122.285,2710.0,10970.0,36.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1910.0,8775.0,1.0,0.0,0.0,3.0,7.0,1210.0,700.0,47.7396,-122.247,2210.0,8778.0,59.0,0.0,0.0]},"out":{"variable":[438821.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,1900.0,7843.0,2.0,0.0,0.0,5.0,7.0,1900.0,0.0,47.6273,-122.123,1900.0,7350.0,49.0,0.0,0.0]},"out":{"variable":[563844.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2440.0,5001.0,2.0,0.0,0.0,3.0,8.0,2440.0,0.0,47.5108,-122.193,2260.0,5001.0,9.0,0.0,0.0]},"out":{"variable":[444931.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1670.0,4005.0,1.5,0.0,0.0,4.0,7.0,1170.0,500.0,47.6878,-122.38,1240.0,4005.0,75.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2810.0,6481.0,2.0,0.0,0.0,3.0,9.0,2810.0,0.0,47.333,-122.172,2660.0,6958.0,17.0,0.0,0.0]},"out":{"variable":[475271.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,2.5,2590.0,10890.0,1.0,0.0,0.0,4.0,7.0,1340.0,1250.0,47.4126,-122.165,2474.0,10454.0,44.0,0.0,0.0]},"out":{"variable":[383253.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2200.0,6967.0,2.0,0.0,0.0,3.0,8.0,2200.0,0.0,47.7355,-122.202,1970.0,7439.0,29.0,0.0,0.0]},"out":{"variable":[519346.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1520.0,1304.0,2.0,0.0,0.0,3.0,8.0,1180.0,340.0,47.5446,-122.385,1270.0,1718.0,8.0,0.0,0.0]},"out":{"variable":[530271.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1580.0,9600.0,1.0,0.0,0.0,5.0,7.0,1050.0,530.0,47.4091,-122.313,1710.0,9600.0,49.0,0.0,0.0]},"out":{"variable":[281058.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1160.0,5000.0,1.0,0.0,0.0,4.0,8.0,1160.0,0.0,47.6865,-122.399,1750.0,5000.0,77.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2770.0,6116.0,1.0,0.0,0.0,3.0,7.0,1490.0,1280.0,47.4847,-122.291,1920.0,6486.0,35.0,0.0,0.0]},"out":{"variable":[429876.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1260.0,7897.0,1.0,0.0,0.0,3.0,7.0,1260.0,0.0,47.1946,-122.003,1560.0,8285.0,35.0,0.0,0.0]},"out":{"variable":[246088.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1700.0,8481.0,2.0,0.0,0.0,3.0,7.0,1700.0,0.0,47.2623,-122.305,1830.0,6600.0,21.0,0.0,0.0]},"out":{"variable":[290323.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1890.0,6962.0,2.0,0.0,0.0,3.0,8.0,1890.0,0.0,47.3328,-122.187,2170.0,6803.0,17.0,0.0,0.0]},"out":{"variable":[293560.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2070.0,8685.0,2.0,0.0,0.0,3.0,7.0,2070.0,0.0,47.4697,-122.267,2170.0,9715.0,9.0,0.0,0.0]},"out":{"variable":[380009.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1010.0,6000.0,1.0,0.0,0.0,4.0,6.0,1010.0,0.0,47.771,-122.353,1610.0,7313.0,70.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1540.0,5920.0,1.5,0.0,0.0,5.0,7.0,1540.0,0.0,47.7148,-122.301,1630.0,6216.0,79.0,0.0,0.0]},"out":{"variable":[433900.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1553.0,1991.0,3.0,0.0,0.0,3.0,8.0,1553.0,0.0,47.7049,-122.34,1509.0,2431.0,0.0,0.0,0.0]},"out":{"variable":[449229.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1820.0,5500.0,1.5,0.0,0.0,3.0,6.0,1820.0,0.0,47.5185,-122.363,1140.0,5500.0,68.0,0.0,0.0]},"out":{"variable":[322015.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1780.0,10196.0,1.0,0.0,0.0,4.0,7.0,1270.0,510.0,47.3375,-122.291,1320.0,7875.0,48.0,0.0,0.0]},"out":{"variable":[281823.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1760.0,4000.0,2.0,0.0,0.0,3.0,8.0,1760.0,0.0,47.6401,-122.32,1760.0,4000.0,92.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1628.0,286355.0,1.0,0.0,0.0,3.0,7.0,1628.0,0.0,47.2558,-122.122,1490.0,216344.0,19.0,0.0,0.0]},"out":{"variable":[274207.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1300.0,1331.0,3.0,0.0,0.0,3.0,8.0,1300.0,0.0,47.6607,-122.352,1450.0,5270.0,8.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2180.0,7700.0,1.0,0.0,0.0,3.0,8.0,1480.0,700.0,47.7594,-122.361,2180.0,7604.0,53.0,0.0,0.0]},"out":{"variable":[516278.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1500.0,1312.0,3.0,0.0,0.0,3.0,8.0,1500.0,0.0,47.6534,-122.346,1500.0,1282.0,7.0,0.0,0.0]},"out":{"variable":[536497.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.25,1450.0,1468.0,2.0,0.0,0.0,3.0,8.0,1100.0,350.0,47.5664,-122.37,1450.0,1478.0,5.0,0.0,0.0]},"out":{"variable":[451058.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1400.0,4800.0,1.0,0.0,0.0,3.0,7.0,1200.0,200.0,47.6865,-122.379,1440.0,3840.0,93.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2009.0,5000.0,2.0,0.0,0.0,3.0,8.0,2009.0,0.0,47.2577,-122.198,2009.0,5182.0,0.0,0.0,0.0]},"out":{"variable":[320863.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,4.25,4860.0,9453.0,1.5,0.0,1.0,5.0,10.0,3100.0,1760.0,47.6196,-122.286,3150.0,8557.0,109.0,0.0,0.0]},"out":{"variable":[1910823.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1780.0,5720.0,1.0,0.0,0.0,5.0,7.0,980.0,800.0,47.6794,-122.351,1620.0,5050.0,89.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.75,2180.0,9178.0,1.0,0.0,0.0,3.0,7.0,1140.0,1040.0,47.4364,-122.28,2140.0,9261.0,51.0,0.0,0.0]},"out":{"variable":[382005.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,2980.0,9838.0,1.0,0.0,0.0,3.0,7.0,1710.0,1270.0,47.3807,-122.222,2240.0,9838.0,47.0,0.0,0.0]},"out":{"variable":[379076.34]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1520.0,12282.0,1.0,0.0,0.0,3.0,8.0,1220.0,300.0,47.7516,-122.299,1860.0,13500.0,36.0,0.0,0.0]},"out":{"variable":[424966.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2630.0,5701.0,2.0,0.0,0.0,3.0,7.0,2630.0,0.0,47.375,-122.16,2770.0,5939.0,4.0,0.0,0.0]},"out":{"variable":[368504.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2270.0,11500.0,1.0,0.0,0.0,3.0,8.0,1540.0,730.0,47.7089,-122.241,2020.0,10918.0,47.0,0.0,0.0]},"out":{"variable":[625990.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2380.0,8204.0,1.0,0.0,0.0,3.0,8.0,1540.0,840.0,47.7,-122.287,2270.0,8204.0,58.0,0.0,0.0]},"out":{"variable":[712309.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1500.0,7420.0,1.0,0.0,0.0,3.0,7.0,1000.0,500.0,47.7236,-122.174,1840.0,7272.0,42.0,0.0,0.0]},"out":{"variable":[419677.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1620.0,12825.0,1.0,0.0,0.0,3.0,8.0,1340.0,280.0,47.3321,-122.323,2076.0,11200.0,53.0,0.0,0.0]},"out":{"variable":[284081.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1580.0,5000.0,1.0,0.0,0.0,3.0,8.0,1290.0,290.0,47.687,-122.386,1570.0,4500.0,75.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1590.0,8911.0,1.0,0.0,0.0,3.0,7.0,1590.0,0.0,47.7394,-122.252,1590.0,9625.0,58.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.75,2660.0,10637.0,1.5,0.0,0.0,5.0,7.0,1670.0,990.0,47.6945,-122.292,1570.0,6825.0,92.0,0.0,0.0]},"out":{"variable":[716776.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1780.0,16000.0,1.0,0.0,0.0,2.0,7.0,1240.0,540.0,47.419,-122.322,1860.0,9775.0,54.0,0.0,0.0]},"out":{"variable":[308049.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2600.0,12860.0,1.0,0.0,0.0,3.0,7.0,1350.0,1250.0,47.695,-121.918,2260.0,12954.0,49.0,0.0,0.0]},"out":{"variable":[703282.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1460.0,2610.0,2.0,0.0,0.0,3.0,8.0,1460.0,0.0,47.6864,-122.345,1320.0,3000.0,27.0,0.0,0.0]},"out":{"variable":[498579.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2790.0,5450.0,2.0,0.0,0.0,3.0,10.0,1930.0,860.0,47.6453,-122.303,2320.0,5450.0,89.0,1.0,75.0]},"out":{"variable":[1097757.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2370.0,9619.0,1.0,0.0,0.0,4.0,8.0,1650.0,720.0,47.6366,-122.099,1960.0,9712.0,41.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2340.0,8248.0,2.0,0.0,0.0,3.0,8.0,2340.0,0.0,47.6314,-122.03,2140.0,9963.0,25.0,0.0,0.0]},"out":{"variable":[687786.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,3280.0,79279.0,1.0,0.0,0.0,3.0,10.0,3280.0,0.0,47.3207,-122.293,1860.0,24008.0,13.0,0.0,0.0]},"out":{"variable":[634865.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3260.0,5974.0,2.0,0.0,1.0,3.0,9.0,2820.0,440.0,47.6772,-122.267,2260.0,6780.0,8.0,0.0,0.0]},"out":{"variable":[947562.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2180.0,4431.0,1.5,0.0,0.0,3.0,8.0,2020.0,160.0,47.636,-122.302,1890.0,4400.0,103.0,0.0,0.0]},"out":{"variable":[675545.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.0,2110.0,7794.0,1.0,0.0,0.0,3.0,6.0,2110.0,0.0,47.4005,-122.293,1330.0,10044.0,33.0,0.0,0.0]},"out":{"variable":[349668.47]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1960.0,1585.0,2.0,0.0,0.0,3.0,7.0,1750.0,210.0,47.5414,-122.288,1760.0,1958.0,11.0,0.0,0.0]},"out":{"variable":[559453.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,3190.0,52953.0,2.0,0.0,0.0,4.0,10.0,3190.0,0.0,47.5933,-122.075,3190.0,51400.0,35.0,0.0,0.0]},"out":{"variable":[886958.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1740.0,18000.0,1.0,0.0,0.0,3.0,7.0,1230.0,510.0,47.7397,-122.242,1740.0,11250.0,25.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,2060.0,15050.0,1.5,0.0,0.0,4.0,7.0,2060.0,0.0,47.3321,-122.373,1900.0,15674.0,76.0,0.0,0.0]},"out":{"variable":[355736.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2590.0,7720.0,2.0,0.0,0.0,3.0,9.0,2590.0,0.0,47.659,-122.146,2600.0,9490.0,26.0,0.0,0.0]},"out":{"variable":[758714.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.0,1900.0,6000.0,1.5,0.0,0.0,4.0,6.0,1900.0,0.0,47.6831,-122.186,2110.0,8400.0,95.0,0.0,0.0]},"out":{"variable":[563844.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2590.0,35640.0,1.0,0.0,0.0,3.0,9.0,2590.0,0.0,47.5516,-122.03,2590.0,31200.0,28.0,0.0,0.0]},"out":{"variable":[758714.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1820.0,78408.0,1.0,0.0,0.0,3.0,6.0,1220.0,600.0,47.3364,-122.128,1340.0,78408.0,65.0,0.0,0.0]},"out":{"variable":[281823.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,2330.0,10143.0,1.0,0.0,2.0,4.0,7.0,1220.0,1110.0,47.4899,-122.359,2560.0,9750.0,61.0,0.0,0.0]},"out":{"variable":[422508.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,3520.0,4933.0,1.5,0.0,0.0,4.0,8.0,2270.0,1250.0,47.5655,-122.315,1710.0,5400.0,86.0,0.0,0.0]},"out":{"variable":[784103.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1400.0,1581.0,1.5,0.0,0.0,5.0,8.0,1400.0,0.0,47.6221,-122.314,1860.0,3861.0,105.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1940.0,6386.0,1.0,0.0,0.0,3.0,7.0,1140.0,800.0,47.5533,-122.285,1340.0,6165.0,60.0,0.0,0.0]},"out":{"variable":[558381.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3620.0,42580.0,2.0,0.0,0.0,3.0,10.0,3620.0,0.0,47.7204,-122.115,2950.0,33167.0,30.0,0.0,0.0]},"out":{"variable":[921695.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,4.0,4620.0,130208.0,2.0,0.0,0.0,3.0,10.0,4620.0,0.0,47.5885,-121.939,4620.0,131007.0,1.0,0.0,0.0]},"out":{"variable":[1164589.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1560.0,35026.0,1.0,0.0,0.0,3.0,7.0,1290.0,270.0,47.3023,-122.069,1660.0,35160.0,30.0,0.0,0.0]},"out":{"variable":[278759.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2770.0,63118.0,2.0,0.0,0.0,3.0,9.0,2770.0,0.0,47.6622,-121.961,2770.0,44224.0,17.0,0.0,0.0]},"out":{"variable":[765468.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1660.0,10763.0,2.0,0.0,0.0,3.0,7.0,1660.0,0.0,47.3812,-122.029,2010.0,7983.0,20.0,0.0,0.0]},"out":{"variable":[284845.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1070.0,8130.0,1.0,0.0,0.0,3.0,7.0,1070.0,0.0,47.697,-122.37,1360.0,7653.0,73.0,0.0,0.0]},"out":{"variable":[403520.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2420.0,4750.0,2.0,0.0,0.0,3.0,8.0,2420.0,0.0,47.3663,-122.122,2690.0,4750.0,12.0,0.0,0.0]},"out":{"variable":[350835.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,560.0,7560.0,1.0,0.0,0.0,3.0,6.0,560.0,0.0,47.5271,-122.375,990.0,7560.0,70.0,0.0,0.0]},"out":{"variable":[253679.61]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,1651.0,18200.0,1.0,0.0,0.0,3.0,6.0,1651.0,0.0,47.4621,-122.461,1510.0,89595.0,68.0,0.0,0.0]},"out":{"variable":[316231.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1000.0,16376.0,1.0,0.0,0.0,3.0,7.0,1000.0,0.0,47.4825,-122.108,1420.0,16192.0,55.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,3340.0,10422.0,2.0,0.0,0.0,3.0,10.0,3340.0,0.0,47.6515,-122.197,1770.0,9490.0,18.0,0.0,0.0]},"out":{"variable":[1103101.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,3760.0,10207.0,2.0,0.0,0.0,3.0,10.0,3150.0,610.0,47.5605,-122.225,3550.0,12118.0,46.0,0.0,0.0]},"out":{"variable":[1489624.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2020.0,3600.0,2.0,0.0,0.0,3.0,8.0,2020.0,0.0,47.6678,-122.165,2070.0,3699.0,16.0,0.0,0.0]},"out":{"variable":[583765.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1540.0,5120.0,1.0,0.0,0.0,5.0,6.0,770.0,770.0,47.5359,-122.372,1080.0,5120.0,71.0,0.0,0.0]},"out":{"variable":[538436.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2330.0,7642.0,1.0,0.0,0.0,3.0,8.0,1800.0,530.0,47.2946,-122.37,2320.0,7933.0,24.0,0.0,0.0]},"out":{"variable":[348323.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.5,2700.0,11675.0,1.5,0.0,2.0,4.0,6.0,1950.0,750.0,47.7172,-122.349,2160.0,8114.0,66.0,0.0,0.0]},"out":{"variable":[559923.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,700.0,8100.0,1.0,0.0,0.0,3.0,6.0,700.0,0.0,47.7492,-122.311,1230.0,8100.0,65.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1890.0,4500.0,1.5,0.0,0.0,3.0,7.0,1490.0,400.0,47.6684,-122.356,1640.0,4010.0,108.0,1.0,86.0]},"out":{"variable":[562676.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1061.0,2884.0,2.0,0.0,0.0,3.0,7.0,1061.0,0.0,47.346,-122.218,1481.0,2887.0,2.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2060.0,5649.0,1.0,0.0,0.0,5.0,8.0,1360.0,700.0,47.6496,-122.407,2060.0,5626.0,73.0,0.0,0.0]},"out":{"variable":[630865.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1390.0,10530.0,1.0,0.0,0.0,3.0,7.0,1390.0,0.0,47.7025,-122.196,1750.0,10530.0,54.0,0.0,0.0]},"out":{"variable":[376762.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1730.0,3600.0,2.0,0.0,0.0,3.0,8.0,1730.0,0.0,47.5014,-122.34,2030.0,3600.0,0.0,0.0,0.0]},"out":{"variable":[317132.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1550.0,7713.0,1.0,0.0,0.0,3.0,7.0,1550.0,0.0,47.7005,-122.358,1340.0,6350.0,84.0,1.0,49.0]},"out":{"variable":[465299.84]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1840.0,10125.0,1.0,0.0,0.0,4.0,8.0,1220.0,620.0,47.5607,-122.217,2320.0,10160.0,55.0,0.0,0.0]},"out":{"variable":[546632.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,630.0,6000.0,1.0,0.0,0.0,3.0,6.0,630.0,0.0,47.4973,-122.221,1470.0,6840.0,71.0,1.0,62.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1620.0,8125.0,2.0,0.0,0.0,4.0,7.0,1620.0,0.0,47.6255,-122.059,1480.0,8120.0,32.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1760.0,12874.0,1.0,0.0,0.0,4.0,7.0,1230.0,530.0,47.5906,-122.167,1950.0,10240.0,47.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1230.0,11601.0,1.0,0.0,0.0,4.0,7.0,910.0,320.0,47.1955,-121.991,1820.0,8465.0,23.0,0.0,0.0]},"out":{"variable":[253408.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1460.0,7800.0,1.0,0.0,0.0,2.0,7.0,1040.0,420.0,47.3035,-122.382,1310.0,7865.0,36.0,0.0,0.0]},"out":{"variable":[300480.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,1494.0,19271.0,2.0,1.0,4.0,3.0,7.0,1494.0,0.0,47.4728,-122.497,1494.0,43583.0,71.0,1.0,54.0]},"out":{"variable":[359947.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,3340.0,5677.0,2.0,0.0,0.0,3.0,9.0,3340.0,0.0,47.709,-122.118,3240.0,5643.0,4.0,0.0,0.0]},"out":{"variable":[857574.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2930.0,5973.0,2.0,0.0,0.0,3.0,10.0,2930.0,0.0,47.3846,-122.186,3038.0,7095.0,7.0,0.0,0.0]},"out":{"variable":[594678.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1310.0,18135.0,1.0,0.0,0.0,3.0,7.0,1310.0,0.0,47.6065,-122.113,2150.0,18135.0,67.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1260.0,5300.0,1.0,0.0,0.0,4.0,7.0,840.0,420.0,47.6809,-122.348,1280.0,3000.0,64.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1000.0,10560.0,1.0,0.0,0.0,3.0,7.0,1000.0,0.0,47.3217,-122.317,1190.0,9375.0,60.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1790.0,6800.0,1.0,0.0,0.0,4.0,7.0,1240.0,550.0,47.728,-122.339,1470.0,6800.0,51.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.5,1830.0,1988.0,2.0,0.0,0.0,3.0,9.0,1530.0,300.0,47.5779,-122.409,1800.0,2467.0,3.0,0.0,0.0]},"out":{"variable":[725184.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2240.0,8664.0,1.0,0.0,0.0,5.0,8.0,1470.0,770.0,47.6621,-122.189,2210.0,8860.0,39.0,0.0,0.0]},"out":{"variable":[682284.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1320.0,10800.0,1.0,0.0,0.0,4.0,8.0,1320.0,0.0,47.7145,-122.367,2120.0,12040.0,67.0,0.0,0.0]},"out":{"variable":[341649.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1610.0,8500.0,1.5,0.0,0.0,3.0,7.0,1610.0,0.0,47.3717,-122.297,1070.0,8750.0,56.0,0.0,0.0]},"out":{"variable":[274207.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1390.0,13200.0,2.0,0.0,0.0,3.0,7.0,1390.0,0.0,47.4429,-121.771,1430.0,10725.0,35.0,0.0,0.0]},"out":{"variable":[252539.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1430.0,3455.0,1.0,0.0,0.0,3.0,7.0,980.0,450.0,47.6873,-122.336,1450.0,4599.0,67.0,0.0,0.0]},"out":{"variable":[453195.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2350.0,7210.0,1.5,0.0,0.0,4.0,7.0,2350.0,0.0,47.7407,-122.183,1930.0,7519.0,42.0,0.0,0.0]},"out":{"variable":[529302.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1750.0,6397.0,2.0,0.0,0.0,3.0,7.0,1750.0,0.0,47.3082,-122.358,1940.0,6502.0,27.0,0.0,0.0]},"out":{"variable":[291239.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1690.0,4500.0,1.5,0.0,1.0,4.0,8.0,1690.0,0.0,47.5841,-122.383,2140.0,7200.0,86.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1260.0,8614.0,1.0,0.0,0.0,4.0,7.0,1260.0,0.0,47.3586,-122.056,1600.0,8614.0,29.0,0.0,0.0]},"out":{"variable":[246525.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1480.0,8381.0,1.0,0.0,0.0,4.0,7.0,1480.0,0.0,47.7078,-122.288,1710.0,8050.0,46.0,0.0,0.0]},"out":{"variable":[421153.03]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.5,3660.0,4903.0,2.0,0.0,0.0,3.0,9.0,2760.0,900.0,47.7184,-122.156,3630.0,4992.0,0.0,0.0,0.0]},"out":{"variable":[873848.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,2180.0,6000.0,1.5,0.0,0.0,3.0,8.0,2060.0,120.0,47.5958,-122.306,1370.0,4500.0,88.0,0.0,0.0]},"out":{"variable":[675545.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1670.0,6460.0,1.0,0.0,0.0,3.0,8.0,1670.0,0.0,47.7123,-122.027,2170.0,6254.0,10.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,970.0,7503.0,1.0,0.0,0.0,4.0,6.0,970.0,0.0,47.4688,-122.163,1230.0,9504.0,48.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1780.0,6840.0,2.0,0.0,0.0,4.0,6.0,1780.0,0.0,47.727,-122.3,1410.0,7200.0,67.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1720.0,4050.0,1.0,0.0,0.0,5.0,7.0,860.0,860.0,47.6782,-122.314,1720.0,4410.0,108.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1680.0,8100.0,1.0,0.0,2.0,3.0,8.0,1680.0,0.0,47.7212,-122.364,1880.0,7750.0,65.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2714.0,17936.0,2.0,0.0,0.0,3.0,9.0,2714.0,0.0,47.3185,-122.275,2590.0,18386.0,10.0,0.0,0.0]},"out":{"variable":[487028.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1700.0,1481.0,3.0,0.0,0.0,3.0,8.0,1700.0,0.0,47.6598,-122.349,1560.0,1350.0,12.0,0.0,0.0]},"out":{"variable":[557391.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,1870.0,6000.0,1.5,0.0,0.0,3.0,7.0,1870.0,0.0,47.7155,-122.315,1520.0,7169.0,58.0,0.0,0.0]},"out":{"variable":[442856.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2030.0,5754.0,2.0,0.0,0.0,3.0,8.0,2030.0,0.0,47.3542,-122.137,2030.0,5784.0,14.0,0.0,0.0]},"out":{"variable":[327625.28]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2420.0,10603.0,1.0,0.0,0.0,5.0,7.0,1210.0,1210.0,47.7397,-122.259,1750.0,10800.0,56.0,0.0,0.0]},"out":{"variable":[530288.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1340.0,4320.0,1.0,0.0,0.0,3.0,5.0,920.0,420.0,47.299,-122.228,980.0,6480.0,102.0,1.0,81.0]},"out":{"variable":[244380.27]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2230.0,3939.0,2.0,0.0,0.0,3.0,8.0,2230.0,0.0,47.73,-122.335,2230.0,4200.0,1.0,0.0,0.0]},"out":{"variable":[519346.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,1860.0,12197.0,1.0,0.0,0.0,3.0,7.0,1860.0,0.0,47.729,-122.235,1510.0,11761.0,50.0,0.0,0.0]},"out":{"variable":[438514.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,1120.0,881.0,3.0,0.0,0.0,3.0,8.0,1120.0,0.0,47.6914,-122.343,1120.0,1087.0,15.0,0.0,0.0]},"out":{"variable":[446768.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2340.0,5940.0,1.0,0.0,0.0,3.0,8.0,1290.0,1050.0,47.6789,-122.281,1930.0,5940.0,61.0,0.0,0.0]},"out":{"variable":[689450.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1970.0,35100.0,2.0,0.0,0.0,4.0,9.0,1970.0,0.0,47.4635,-121.991,2340.0,35100.0,37.0,0.0,0.0]},"out":{"variable":[484757.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.5,2620.0,8050.0,1.0,0.0,0.0,3.0,8.0,1520.0,1100.0,47.6919,-122.115,2030.0,7676.0,39.0,0.0,0.0]},"out":{"variable":[706407.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1960.0,7230.0,2.0,0.0,0.0,3.0,8.0,1960.0,0.0,47.2855,-122.36,1850.0,7208.0,12.0,0.0,0.0]},"out":{"variable":[317765.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1190.0,1022.0,3.0,0.0,0.0,3.0,8.0,1190.0,0.0,47.6972,-122.349,1210.0,1171.0,17.0,0.0,0.0]},"out":{"variable":[400561.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2130.0,11900.0,2.0,0.0,0.0,3.0,9.0,2130.0,0.0,47.6408,-122.058,2590.0,11900.0,38.0,0.0,0.0]},"out":{"variable":[730767.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2420.0,8400.0,1.0,0.0,0.0,5.0,7.0,1620.0,800.0,47.5017,-122.165,1660.0,8400.0,50.0,0.0,0.0]},"out":{"variable":[411000.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2230.0,8560.0,2.0,0.0,0.0,3.0,8.0,2230.0,0.0,47.4877,-122.143,2400.0,7756.0,12.0,0.0,0.0]},"out":{"variable":[429339.13]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,1690.0,1765.0,2.0,0.0,0.0,3.0,8.0,1370.0,320.0,47.6536,-122.34,1690.0,1694.0,8.0,0.0,0.0]},"out":{"variable":[558463.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,4060.0,8547.0,2.0,0.0,0.0,3.0,9.0,2790.0,1270.0,47.3694,-122.056,2810.0,8313.0,7.0,0.0,0.0]},"out":{"variable":[634262.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,1620.0,8400.0,1.0,0.0,0.0,3.0,7.0,1180.0,440.0,47.6574,-122.128,2120.0,8424.0,46.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2130.0,8499.0,1.0,0.0,0.0,4.0,7.0,1600.0,530.0,47.3657,-122.21,1890.0,11368.0,39.0,0.0,0.0]},"out":{"variable":[334257.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2100.0,4440.0,2.0,0.0,4.0,3.0,7.0,2100.0,0.0,47.5865,-122.397,2100.0,6000.0,70.0,0.0,0.0]},"out":{"variable":[672052.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.0,1460.0,11726.0,1.5,0.0,0.0,3.0,6.0,1290.0,170.0,47.5039,-122.361,1460.0,10450.0,78.0,0.0,0.0]},"out":{"variable":[266253.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1210.0,8400.0,1.0,0.0,0.0,3.0,8.0,780.0,430.0,47.6503,-122.393,1860.0,6000.0,14.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,910.0,6490.0,1.0,0.0,0.0,3.0,7.0,910.0,0.0,47.6892,-122.306,1040.0,6490.0,72.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2790.0,5423.0,2.0,0.0,0.0,3.0,9.0,2790.0,0.0,47.6085,-122.017,2450.0,6453.0,15.0,0.0,0.0]},"out":{"variable":[765468.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1810.0,1585.0,3.0,0.0,0.0,3.0,7.0,1810.0,0.0,47.6957,-122.376,1560.0,1586.0,1.0,0.0,0.0]},"out":{"variable":[502022.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,3.5,1970.0,5079.0,2.0,0.0,0.0,3.0,8.0,1680.0,290.0,47.5816,-122.296,1940.0,6000.0,7.0,0.0,0.0]},"out":{"variable":[572710.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2641.0,8615.0,2.0,0.0,0.0,3.0,7.0,2641.0,0.0,47.4038,-122.213,2641.0,8091.0,16.0,0.0,0.0]},"out":{"variable":[384215.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1150.0,3000.0,1.0,0.0,0.0,5.0,6.0,1150.0,0.0,47.6867,-122.345,1460.0,3200.0,108.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,4470.0,60373.0,2.0,0.0,0.0,3.0,11.0,4470.0,0.0,47.7289,-122.127,3210.0,40450.0,26.0,0.0,0.0]},"out":{"variable":[1208638.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1720.0,8750.0,1.0,0.0,0.0,3.0,7.0,860.0,860.0,47.726,-122.21,1790.0,8750.0,43.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2830.0,6000.0,1.0,0.0,3.0,3.0,9.0,1730.0,1100.0,47.5751,-122.378,2040.0,5300.0,60.0,0.0,0.0]},"out":{"variable":[981676.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1070.0,1236.0,2.0,0.0,0.0,3.0,8.0,1000.0,70.0,47.5619,-122.382,1170.0,1888.0,10.0,0.0,0.0]},"out":{"variable":[435628.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.5,1090.0,1183.0,3.0,0.0,0.0,3.0,8.0,1090.0,0.0,47.6974,-122.349,1110.0,1384.0,6.0,0.0,0.0]},"out":{"variable":[400561.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,3270.0,6027.0,2.0,0.0,0.0,3.0,10.0,3270.0,0.0,47.6346,-122.063,3270.0,6546.0,13.0,0.0,0.0]},"out":{"variable":[889377.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,2410.0,8284.0,1.0,0.0,0.0,5.0,7.0,1210.0,1200.0,47.7202,-122.22,2050.0,7940.0,45.0,0.0,0.0]},"out":{"variable":[532234.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2490.0,12929.0,2.0,0.0,0.0,3.0,9.0,2490.0,0.0,47.6161,-122.021,2440.0,12929.0,31.0,0.0,0.0]},"out":{"variable":[758714.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2050.0,4080.0,2.0,0.0,0.0,3.0,8.0,2050.0,0.0,47.6698,-122.325,1890.0,4080.0,23.0,0.0,0.0]},"out":{"variable":[630865.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2540.0,5237.0,2.0,0.0,0.0,3.0,8.0,2540.0,0.0,47.5492,-122.276,1800.0,4097.0,3.0,0.0,0.0]},"out":{"variable":[713978.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1850.0,8667.0,1.0,0.0,0.0,4.0,7.0,880.0,970.0,47.7025,-122.198,1450.0,10530.0,32.0,0.0,0.0]},"out":{"variable":[467484.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2960.0,8330.0,1.0,0.0,3.0,4.0,10.0,2260.0,700.0,47.7035,-122.385,2960.0,8840.0,62.0,0.0,0.0]},"out":{"variable":[1178314.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,1670.0,13125.0,1.0,0.0,0.0,5.0,8.0,1670.0,0.0,47.6315,-122.101,2360.0,12500.0,42.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2240.0,5500.0,2.0,0.0,0.0,3.0,8.0,2240.0,0.0,47.496,-122.169,700.0,5500.0,1.0,0.0,0.0]},"out":{"variable":[426066.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1850.0,7151.0,2.0,0.0,0.0,3.0,7.0,1850.0,0.0,47.2843,-122.352,1710.0,6827.0,26.0,0.0,0.0]},"out":{"variable":[285870.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1330.0,9548.0,1.0,0.0,0.0,5.0,7.0,1330.0,0.0,47.3675,-122.11,1420.0,9548.0,47.0,0.0,0.0]},"out":{"variable":[244380.27]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,870.0,3121.0,1.0,0.0,0.0,4.0,7.0,870.0,0.0,47.6659,-122.369,1570.0,1777.0,91.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1430.0,9600.0,1.0,0.0,0.0,4.0,7.0,1430.0,0.0,47.4737,-122.15,1590.0,10240.0,48.0,0.0,0.0]},"out":{"variable":[260603.86]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,5180.0,19850.0,2.0,0.0,3.0,3.0,12.0,3540.0,1640.0,47.562,-122.162,3160.0,9750.0,9.0,0.0,0.0]},"out":{"variable":[1295531.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2200.0,7000.0,1.0,0.0,0.0,4.0,7.0,1280.0,920.0,47.4574,-122.169,1670.0,7000.0,37.0,0.0,0.0]},"out":{"variable":[381737.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2430.0,7559.0,1.0,0.0,0.0,4.0,8.0,1580.0,850.0,47.7206,-122.11,1980.0,8750.0,34.0,0.0,0.0]},"out":{"variable":[538316.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,1.75,2340.0,9148.0,2.0,0.0,0.0,3.0,7.0,2340.0,0.0,47.4232,-122.324,1390.0,10019.0,57.0,0.0,0.0]},"out":{"variable":[385982.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.0,1870.0,4751.0,1.0,0.0,0.0,3.0,8.0,1870.0,0.0,47.7082,-122.015,2170.0,5580.0,8.0,0.0,0.0]},"out":{"variable":[451035.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2020.0,11935.0,1.0,0.0,0.0,4.0,9.0,2020.0,0.0,47.632,-122.092,2410.0,12350.0,38.0,0.0,0.0]},"out":{"variable":[716173.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1130.0,7920.0,1.0,0.0,0.0,3.0,7.0,1130.0,0.0,47.4852,-122.125,1390.0,8580.0,54.0,0.0,0.0]},"out":{"variable":[239033.16]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.5,2190.0,13660.0,1.0,0.0,3.0,3.0,8.0,2190.0,0.0,47.7658,-122.37,2520.0,20500.0,62.0,0.0,0.0]},"out":{"variable":[522414.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2800.0,5900.0,1.0,0.0,0.0,3.0,8.0,1660.0,1140.0,47.6809,-122.286,2580.0,5900.0,51.0,0.0,0.0]},"out":{"variable":[718445.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,650.0,5400.0,1.0,0.0,0.0,3.0,6.0,650.0,0.0,47.6185,-122.295,1310.0,4906.0,64.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,1120.0,6653.0,1.0,0.0,0.0,4.0,7.0,1120.0,0.0,47.7321,-122.334,1580.0,7355.0,78.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1340.0,10276.0,1.0,0.0,0.0,4.0,7.0,1340.0,0.0,47.7207,-122.222,2950.0,7987.0,53.0,0.0,0.0]},"out":{"variable":[342604.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1580.0,8206.0,1.0,0.0,0.0,3.0,7.0,1100.0,480.0,47.3676,-122.312,1600.0,8196.0,52.0,0.0,0.0]},"out":{"variable":[277145.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,2.5,3180.0,9375.0,1.0,0.0,0.0,4.0,8.0,1590.0,1590.0,47.5707,-122.129,2670.0,9625.0,47.0,0.0,0.0]},"out":{"variable":[725875.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2030.0,4997.0,2.0,0.0,0.0,3.0,8.0,2030.0,0.0,47.393,-122.184,2095.0,5500.0,10.0,0.0,0.0]},"out":{"variable":[332104.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1100.0,5132.0,1.0,0.0,0.0,3.0,6.0,840.0,260.0,47.7011,-122.336,1280.0,5132.0,66.0,0.0,0.0]},"out":{"variable":[392867.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,970.0,2970.0,1.0,0.0,0.0,3.0,7.0,970.0,0.0,47.6233,-122.319,1670.0,3000.0,104.0,0.0,0.0]},"out":{"variable":[449699.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1190.0,11400.0,1.0,0.0,0.0,3.0,7.0,1190.0,0.0,47.5012,-122.265,1410.0,11400.0,63.0,0.0,0.0]},"out":{"variable":[242591.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,1920.0,8910.0,1.0,0.0,0.0,4.0,8.0,1200.0,720.0,47.5897,-122.156,2250.0,8800.0,45.0,0.0,0.0]},"out":{"variable":[563844.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2250.0,13515.0,1.0,0.0,0.0,4.0,8.0,2150.0,100.0,47.3789,-122.229,2150.0,12508.0,74.0,0.0,0.0]},"out":{"variable":[348616.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1150.0,4800.0,1.5,0.0,0.0,4.0,6.0,1150.0,0.0,47.3101,-122.212,1310.0,9510.0,76.0,0.0,0.0]},"out":{"variable":[240834.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,2.25,1660.0,2128.0,2.0,0.0,0.0,4.0,8.0,1660.0,0.0,47.7528,-122.252,1640.0,2128.0,41.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.75,3770.0,4000.0,2.5,0.0,0.0,5.0,9.0,2890.0,880.0,47.6157,-122.287,2800.0,5000.0,98.0,0.0,0.0]},"out":{"variable":[1182820.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1070.0,3000.0,1.0,0.0,0.0,4.0,7.0,870.0,200.0,47.6828,-122.353,1890.0,3300.0,89.0,0.0,0.0]},"out":{"variable":[450867.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,3860.0,12786.0,2.0,0.0,0.0,4.0,10.0,3860.0,0.0,47.549,-122.141,2820.0,14636.0,30.0,0.0,0.0]},"out":{"variable":[946325.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2160.0,5298.0,2.5,0.0,0.0,4.0,9.0,2160.0,0.0,47.6106,-122.31,1720.0,2283.0,112.0,0.0,0.0]},"out":{"variable":[904378.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2120.0,9297.0,2.0,0.0,0.0,4.0,8.0,2120.0,0.0,47.5561,-122.154,2620.0,10352.0,33.0,0.0,0.0]},"out":{"variable":[657905.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,780.0,6250.0,1.0,0.0,0.0,3.0,6.0,780.0,0.0,47.5099,-122.33,1280.0,7100.0,73.0,0.0,0.0]},"out":{"variable":[236815.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.0,2160.0,4800.0,2.0,0.0,0.0,4.0,7.0,1290.0,870.0,47.4777,-122.212,1570.0,4800.0,86.0,0.0,0.0]},"out":{"variable":[384558.4]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,620.0,8261.0,1.0,0.0,0.0,3.0,5.0,620.0,0.0,47.5138,-122.364,1180.0,8244.0,75.0,0.0,0.0]},"out":{"variable":[236815.78]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[1.0,1.0,390.0,2000.0,1.0,0.0,0.0,4.0,6.0,390.0,0.0,47.6938,-122.347,1340.0,5100.0,95.0,0.0,0.0]},"out":{"variable":[442168.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1600.0,3200.0,1.5,0.0,0.0,3.0,7.0,1600.0,0.0,47.653,-122.331,1860.0,3420.0,105.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,980.0,5110.0,1.0,0.0,0.0,4.0,7.0,780.0,200.0,47.7002,-122.314,1430.0,5110.0,75.0,0.0,0.0]},"out":{"variable":[393833.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2100.0,31550.0,1.0,0.0,0.0,3.0,8.0,2100.0,0.0,47.6907,-121.917,1860.0,18452.0,4.0,0.0,0.0]},"out":{"variable":[641162.25]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,1460.0,1353.0,2.0,0.0,0.0,3.0,8.0,1050.0,410.0,47.5774,-122.412,1690.0,3776.0,2.0,0.0,0.0]},"out":{"variable":[499651.47]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1360.0,18123.0,1.0,0.0,0.0,3.0,8.0,1360.0,0.0,47.4716,-121.756,1570.0,16817.0,31.0,0.0,0.0]},"out":{"variable":[252192.89]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2110.0,7350.0,1.0,0.0,0.0,3.0,8.0,1530.0,580.0,47.3088,-122.341,2640.0,7777.0,34.0,0.0,0.0]},"out":{"variable":[333878.22]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1700.0,5750.0,1.5,0.0,2.0,5.0,7.0,1450.0,250.0,47.5643,-122.38,1700.0,5750.0,89.0,0.0,0.0]},"out":{"variable":[546632.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1820.0,3899.0,2.0,0.0,0.0,3.0,7.0,1820.0,0.0,47.735,-121.985,1820.0,3899.0,16.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1560.0,4350.0,2.0,0.0,0.0,3.0,7.0,1560.0,0.0,47.5025,-122.186,1560.0,4350.0,11.0,0.0,0.0]},"out":{"variable":[298900.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.25,2510.0,6339.0,1.5,0.0,2.0,5.0,8.0,1810.0,700.0,47.6496,-122.391,1820.0,5741.0,82.0,0.0,0.0]},"out":{"variable":[717051.75]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1640.0,5200.0,1.0,0.0,0.0,4.0,7.0,1040.0,600.0,47.6426,-122.403,1780.0,5040.0,77.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1580.0,7424.0,1.0,0.0,0.0,3.0,7.0,1010.0,570.0,47.4607,-122.171,1710.0,7772.0,52.0,0.0,0.0]},"out":{"variable":[296494.97]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.0,1190.0,7500.0,1.0,0.0,0.0,5.0,7.0,1190.0,0.0,47.3248,-122.142,1200.0,9750.0,46.0,0.0,0.0]},"out":{"variable":[241330.19]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2160.0,7000.0,2.0,0.0,0.0,4.0,9.0,2160.0,0.0,47.5659,-122.013,2300.0,7440.0,25.0,0.0,0.0]},"out":{"variable":[723867.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.5,2220.0,8994.0,1.0,0.0,0.0,4.0,8.0,1110.0,1110.0,47.5473,-122.172,2220.0,8994.0,52.0,0.0,0.0]},"out":{"variable":[680620.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[6.0,4.0,5310.0,12741.0,2.0,0.0,2.0,3.0,10.0,3600.0,1710.0,47.5696,-122.213,4190.0,12632.0,48.0,0.0,0.0]},"out":{"variable":[2016006.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.0,1330.0,2400.0,1.5,0.0,0.0,4.0,6.0,1330.0,0.0,47.65,-122.34,1330.0,4400.0,114.0,0.0,0.0]},"out":{"variable":[448627.7]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.0,3750.0,11025.0,2.0,0.0,0.0,3.0,10.0,3750.0,0.0,47.6367,-122.059,2930.0,12835.0,38.0,0.0,0.0]},"out":{"variable":[950677.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2460.0,6454.0,2.0,0.0,0.0,3.0,7.0,2460.0,0.0,47.5381,-121.89,2320.0,4578.0,9.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,1600.0,2231.0,2.0,0.0,0.0,3.0,7.0,1600.0,0.0,47.3314,-122.29,1600.0,2962.0,11.0,0.0,0.0]},"out":{"variable":[277145.72]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2370.0,5353.0,2.0,0.0,0.0,3.0,8.0,2370.0,0.0,47.7333,-121.975,2130.0,6850.0,5.0,0.0,0.0]},"out":{"variable":[536371.2]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.75,1740.0,4736.0,1.5,0.0,2.0,4.0,7.0,1040.0,700.0,47.5994,-122.287,2020.0,4215.0,107.0,0.0,0.0]},"out":{"variable":[559631.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1540.0,1044.0,3.0,0.0,0.0,3.0,8.0,1540.0,0.0,47.6765,-122.32,1580.0,3090.0,0.0,0.0,0.0]},"out":{"variable":[552992.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.0,3540.0,9970.0,2.0,0.0,3.0,3.0,9.0,3540.0,0.0,47.7108,-122.277,2280.0,7195.0,44.0,0.0,0.0]},"out":{"variable":[1085835.8]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,2.75,3230.0,13572.0,1.0,0.0,2.0,3.0,8.0,1880.0,1350.0,47.4393,-122.347,2910.0,15292.0,50.0,0.0,0.0]},"out":{"variable":[473287.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,960.0,4920.0,1.0,0.0,0.0,3.0,6.0,960.0,0.0,47.6946,-122.362,1010.0,5040.0,72.0,0.0,0.0]},"out":{"variable":[441284.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2800.0,49149.0,1.0,0.0,0.0,4.0,7.0,1400.0,1400.0,47.4649,-122.034,2560.0,61419.0,36.0,0.0,0.0]},"out":{"variable":[439212.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.25,2560.0,12100.0,1.0,0.0,0.0,4.0,8.0,1760.0,800.0,47.631,-122.108,2240.0,12100.0,38.0,0.0,0.0]},"out":{"variable":[701940.6]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2040.0,9225.0,1.0,0.0,0.0,5.0,8.0,1610.0,430.0,47.636,-122.097,1730.0,9225.0,46.0,0.0,0.0]},"out":{"variable":[627853.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2010.0,7000.0,2.0,0.0,0.0,5.0,8.0,2010.0,0.0,47.6607,-122.396,1420.0,4400.0,113.0,0.0,0.0]},"out":{"variable":[583765.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.75,2890.0,12130.0,2.0,0.0,3.0,4.0,10.0,2830.0,60.0,47.6505,-122.203,2415.0,11538.0,27.0,0.0,0.0]},"out":{"variable":[987149.56]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1170.0,7142.0,1.0,0.0,0.0,3.0,7.0,1170.0,0.0,47.7497,-122.313,1170.0,7615.0,63.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1980.0,5909.0,2.0,0.0,0.0,3.0,8.0,1980.0,0.0,47.3913,-122.185,2550.0,5487.0,11.0,0.0,0.0]},"out":{"variable":[324875.06]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1890.0,93218.0,1.0,0.0,0.0,4.0,7.0,1890.0,0.0,47.2568,-122.07,1690.0,172062.0,50.0,0.0,0.0]},"out":{"variable":[291799.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1430.0,3000.0,1.5,0.0,0.0,3.0,7.0,1300.0,130.0,47.6415,-122.303,1750.0,4000.0,85.0,0.0,0.0]},"out":{"variable":[455435.63]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,2230.0,5650.0,2.0,0.0,0.0,3.0,7.0,2230.0,0.0,47.5073,-122.168,1590.0,7241.0,3.0,0.0,0.0]},"out":{"variable":[401263.84]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,1380.0,4390.0,1.0,0.0,0.0,4.0,8.0,880.0,500.0,47.6947,-122.323,1390.0,5234.0,83.0,0.0,0.0]},"out":{"variable":[441284.0]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[5.0,3.0,2230.0,6551.0,1.0,0.0,0.0,3.0,7.0,1330.0,900.0,47.487,-122.32,2230.0,9476.0,1.0,0.0,0.0]},"out":{"variable":[399760.3]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2010.0,2287.0,2.0,0.0,0.0,3.0,8.0,1390.0,620.0,47.5517,-121.998,1690.0,1662.0,0.0,0.0,0.0]},"out":{"variable":[578362.9]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.75,2500.0,4950.0,2.0,0.0,0.0,3.0,8.0,2500.0,0.0,47.6964,-122.017,2500.0,4950.0,4.0,0.0,0.0]},"out":{"variable":[700271.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1600.0,9579.0,1.0,0.0,0.0,3.0,8.0,1180.0,420.0,47.7662,-122.159,1750.0,9829.0,38.0,0.0,0.0]},"out":{"variable":[437177.88]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[2.0,1.0,870.0,8487.0,1.0,0.0,0.0,4.0,6.0,870.0,0.0,47.4955,-122.239,1350.0,6850.0,71.0,0.0,0.0]},"out":{"variable":[236238.66]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,2.5,1690.0,7260.0,1.0,0.0,0.0,3.0,7.0,1080.0,610.0,47.3001,-122.368,1690.0,7700.0,36.0,0.0,0.0]},"out":{"variable":[284336.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2140.0,8925.0,2.0,0.0,0.0,3.0,8.0,2140.0,0.0,47.6314,-122.027,2310.0,8956.0,23.0,0.0,0.0]},"out":{"variable":[669645.44]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,1300.0,10030.0,1.0,0.0,0.0,4.0,7.0,1300.0,0.0,47.7359,-122.192,1520.0,7713.0,48.0,0.0,0.0]},"out":{"variable":[340764.53]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.5,2900.0,23550.0,1.0,0.0,0.0,3.0,10.0,1490.0,1410.0,47.5708,-122.153,2900.0,19604.0,27.0,0.0,0.0]},"out":{"variable":[827411.1]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,1.75,2700.0,7875.0,1.5,0.0,0.0,4.0,8.0,2700.0,0.0,47.454,-122.144,2220.0,7875.0,46.0,0.0,0.0]},"out":{"variable":[441960.38]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[4.0,3.25,2910.0,1880.0,2.0,0.0,3.0,5.0,9.0,1830.0,1080.0,47.616,-122.282,3100.0,8200.0,100.0,0.0,0.0]},"out":{"variable":[1060847.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,1.75,2910.0,37461.0,1.0,0.0,0.0,4.0,7.0,1530.0,1380.0,47.7015,-122.164,2520.0,18295.0,47.0,0.0,0.0]},"out":{"variable":[706823.5]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}},{"time":1702405553622,"in":{"tensor":[3.0,2.0,2005.0,7000.0,1.0,0.0,0.0,3.0,7.0,1605.0,400.0,47.6039,-122.298,1750.0,4500.0,34.0,0.0,0.0]},"out":{"variable":[581002.94]},"check_failures":[],"metadata":{"last_model":"{\"model_name\":\"housepricesagacontrol\",\"model_sha\":\"e22a0831aafd9917f3cc87a15ed267797f80e2afa12ad7d8810ca58f173b8cc6\"}","pipeline_version":"","elapsed":[5708247,1425087],"dropped":[],"partition":"house-price-edge-jch"}}]
time.sleep(10)

edge_datetime_end = datetime.datetime.now()

logs = mainpipeline.logs(start_datetime = edge_datetime_start,
                        end_datetime = edge_datetime_end,
                        dataset=['time', 'out.variable', 'metadata'])

edge_locations = [pd.unique(logs['metadata.partition']).tolist()][0]
print(edge_locations)
Warning: Pipeline log size limit exceeded. Please request logs using export_logs

['house-price-edge-jch']

Edge Observability

We can now update our assay to include separate edge locations and display the results using the wallaroo.assay_config.AssayBuilder.window_builder.add_location_filter(). We’ll start by just including our Wallaroo Ops pipeline, with the dates limited to the start of of the Ops Pipeline inferences to include the edge inference results.

assay_builder_from_numpy.add_run_until(edge_datetime_end)
assay_builder_from_numpy.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start).add_location_filter([ops_location])
assay_config_from_numpy = assay_builder_from_numpy.build()
assay_analysis_from_numpy = assay_config_from_numpy.interactive_run()
# Show how many assay windows were analyzed, then show the chart
print(f"Generated {len(assay_analysis_from_numpy)} analyses")
assay_analysis_from_numpy.chart_scores()
Generated 1 analyses

Now we’ll update with for just the edge location.

assay_builder_from_numpy.add_run_until(edge_datetime_end)
(assay_builder_from_numpy
    .window_builder()
    .add_width(minutes=1)
    .add_interval(minutes=1)
    .add_start(assay_window_start)
    .add_location_filter([edge_name]))
assay_config_from_numpy = assay_builder_from_numpy.build()
assay_analysis_from_numpy = assay_config_from_numpy.interactive_run()
# Show how many assay windows were analyzed, then show the chart
print(f"Generated {len(assay_analysis_from_numpy)} analyses")
assay_analysis_from_numpy.chart_scores()
Generated 1 analyses

And finally we will use both locations in a cumulative assay window.

assay_builder_from_numpy.add_run_until(edge_datetime_end)
(assay_builder_from_numpy
    .window_builder()
    .add_width(minutes=1)
    .add_interval(minutes=1)
    .add_start(assay_window_start)
    .add_location_filter([ops_location, edge_name]))
assay_config_from_numpy = assay_builder_from_numpy.build()
assay_analysis_from_numpy = assay_config_from_numpy.interactive_run()
# Show how many assay windows were analyzed, then show the chart
print(f"Generated {len(assay_analysis_from_numpy)} analyses")
assay_analysis_from_numpy.chart_scores()
Generated 2 analyses

11 - House Price Testing Life Cycle

A comprehensive tutorial on different testing and model comparison techniques for house price prediction.

This tutorial and the assets can be downloaded as part of the Wallaroo Tutorials repository.

House Price Testing Life Cycle Comprehensive Tutorial

This tutorial simulates using Wallaroo for testing a model for inference outliers, potential model drift, and methods to test competitive models against each other and deploy the final version to use. This demonstrates using assays to detect model or data drift, then Wallaroo Shadow Deploy to compare different models to determine which one is most fit for an organization’s needs. These features allow organizations to monitor model performance and accuracy then swap out models as needed.

  • IMPORTANT NOTE: This tutorial assumes that the House Price Model Life Cycle Preparation notebook was run before this notebook, and that the workspace, pipeline and models used are the same. This is critical for the section on Assays below. If the preparation notebook has not been run, skip the Assays section as there will be no historical data for the assays to function on.

This tutorial will demonstrate how to:

  1. Select or create a workspace, pipeline and upload the champion model.
  2. Add a pipeline step with the champion model, then deploy the pipeline and perform sample inferences.
  3. Create an assay and set a baseline, then demonstrate inferences that trigger the assay alert threshold.
  4. Swap out the pipeline step with the champion model with a shadow deploy step that compares the champion model against two competitors.
  5. Evaluate the results of the champion versus competitor models.
  6. Change the pipeline step from a shadow deploy step to an A/B testing step, and show the different results.
  7. Change the A/B testing step back to standard pipeline step with the original control model, then demonstrate hot swapping the control model with a challenger model without undeploying the pipeline.
  8. Undeploy the pipeline.

This tutorial provides the following:

  • Models:
    • models/rf_model.onnx: The champion model that has been used in this environment for some time.
    • models/xgb_model.onnx and models/gbr_model.onnx: Rival models that will be tested against the champion.
  • Data:
    • data/xtest-1.df.json and data/xtest-1k.df.json: DataFrame JSON inference inputs with 1 input and 1,000 inputs.
    • data/xtest-1k.arrow: Apache Arrow inference inputs with 1 input and 1,000 inputs.

Prerequisites

  • A deployed Wallaroo instance
  • The following Python libraries installed:
    • wallaroo: The Wallaroo SDK. Included with the Wallaroo JupyterHub service by default.
    • pandas: Pandas, mainly used for Pandas DataFrame

Initial Steps

Import libraries

The first step is to import the libraries needed for this notebook.

import wallaroo
from wallaroo.object import EntityNotFoundError
from wallaroo.framework import Framework

from IPython.display import display

# used to display DataFrame information without truncating
from IPython.display import display
import pandas as pd
pd.set_option('display.max_colwidth', None)

import datetime
import time

# used for unique connection names

import string
import random

suffix= ''.join(random.choice(string.ascii_lowercase) for i in range(4))
suffix='baselines'
import json

Connect to the Wallaroo Instance

The first step is to connect to Wallaroo through the Wallaroo client. The Python library is included in the Wallaroo install and available through the Jupyter Hub interface provided with your Wallaroo environment.

This is accomplished using the wallaroo.Client() command, which provides a URL to grant the SDK permission to your specific Wallaroo environment. When displayed, enter the URL into a browser and confirm permissions. Store the connection into a variable that can be referenced later.

If logging into the Wallaroo instance through the internal JupyterHub service, use wl = wallaroo.Client(). For more information on Wallaroo Client settings, see the Client Connection guide.

# Login through local Wallaroo instance

wl = wallaroo.Client()

Create Workspace

We will create a workspace to manage our pipeline and models. The following variables will set the name of our sample workspace then set it as the current workspace.

Workspace, pipeline, and model names should be unique to each user, so we’ll add in a randomly generated suffix so multiple people can run this tutorial in a Wallaroo instance without effecting each other.

workspace_name = f'housepricesagaworkspace{suffix}'
main_pipeline_name = f'housepricesagapipeline'
model_name_control = f'housepricesagacontrol'
model_file_name_control = './models/rf_model.onnx'
def get_workspace(name):
    workspace = None
    for ws in wl.list_workspaces():
        if ws.name() == name:
            workspace= ws
    if(workspace == None):
        workspace = wl.create_workspace(name)
    return workspace

def get_pipeline(name, workspace):
    pipelines = workspace.pipelines()
    pipe_filter = filter(lambda x: x.name() == name, pipelines)
    pipes = list(pipe_filter)
    # we can't have a pipe in the workspace with the same name, so it's always the first
    if pipes:
        pipeline = pipes[0]
    else:
        pipeline = wl.build_pipeline(name)
    return pipeline
workspace = get_workspace(workspace_name)

wl.set_current_workspace(workspace)
{'name': 'housepricesagaworkspacebaselines', 'id': 87, 'archived': False, 'created_by': 'd6a42dd8-1da9-4405-bb80-7c4b42e38b52', 'created_at': '2023-10-31T16:56:03.395454+00:00', 'models': [], 'pipelines': []}

Upload The Champion Model

For our example, we will upload the champion model that has been trained to derive house prices from a variety of inputs. The model file is rf_model.onnx, and is uploaded with the name housingcontrol.

housing_model_control = (wl.upload_model(model_name_control, 
                                        model_file_name_control, 
                                        framework=Framework.ONNX)
                                        .configure(tensor_fields=["tensor"])
                        )

Standard Pipeline Steps

Build the Pipeline

This pipeline is made to be an example of an existing situation where a model is deployed and being used for inferences in a production environment. We’ll call it housepricepipeline, set housingcontrol as a pipeline step, then run a few sample inferences.

This pipeline will be a simple one - just a single pipeline step.

mainpipeline = get_pipeline(main_pipeline_name, workspace)

# clearing from previous runs and verifying it is undeployed
mainpipeline.clear()
mainpipeline.undeploy()
mainpipeline.add_model_step(housing_model_control)

#minimum deployment config
deploy_config = wallaroo.DeploymentConfigBuilder().replica_count(1).cpus(0.5).memory("1Gi").build()
mainpipeline.deploy(deployment_config = deploy_config)
Waiting for deployment - this will take up to 45s ............. ok
namehousepricesagapipeline
created2023-10-31 16:56:07.345831+00:00
last_updated2023-10-31 16:56:07.444932+00:00
deployedTrue
tags
versions2ea0cc42-c955-4fc3-bac9-7a2c7c22ddc1, dca84ab2-274a-4391-95dd-a99bda7621e1
stepshousepricesagacontrol
publishedFalse

Testing

We’ll use two inferences as a quick sample test - one that has a house that should be determined around $700k, the other with a house determined to be around $1.5 million. We’ll also save the start and end periods for these events to for later log functionality.

normal_input = pd.DataFrame.from_records({"tensor": [[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0]]})
result = mainpipeline.infer(normal_input)
display(result)
timein.tensorout.variablecheck_failures
02023-10-31 16:57:07.307[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
large_house_input = pd.DataFrame.from_records({'tensor': [[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0]]})
large_house_result = mainpipeline.infer(large_house_input)
display(large_house_result)
timein.tensorout.variablecheck_failures
02023-10-31 16:57:07.746[4.0, 3.0, 3710.0, 20000.0, 2.0, 0.0, 2.0, 5.0, 10.0, 2760.0, 950.0, 47.6696, -122.261, 3970.0, 20000.0, 79.0, 0.0, 0.0][1514079.4]0

As one last sample, we’ll run through roughly 1,000 inferences at once and show a few of the results. For this example we’ll use an Apache Arrow table, which has a smaller file size compared to uploading a pandas DataFrame JSON file. The inference result is returned as an arrow table, which we’ll convert into a pandas DataFrame to display the first 20 results.

time.sleep(5)
control_model_start = datetime.datetime.now()
batch_inferences = mainpipeline.infer_from_file('./data/xtest-1k.arrow')

large_inference_result =  batch_inferences.to_pandas()
display(large_inference_result.head(20))
timein.tensorout.variablecheck_failures
02023-10-31 16:57:13.771[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
12023-10-31 16:57:13.771[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0, 8.0, 2170.0, 0.0, 47.7109, -122.017, 2310.0, 7419.0, 6.0, 0.0, 0.0][615094.6]0
22023-10-31 16:57:13.771[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, 8.0, 880.0, 420.0, 47.5893, -122.317, 1300.0, 824.0, 6.0, 0.0, 0.0][448627.8]0
32023-10-31 16:57:13.771[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2500.0, 0.0, 47.5759, -121.994, 2560.0, 8475.0, 24.0, 0.0, 0.0][758714.3]0
42023-10-31 16:57:13.771[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4.0, 7.0, 2200.0, 0.0, 47.7659, -122.341, 1690.0, 8038.0, 62.0, 0.0, 0.0][513264.66]0
52023-10-31 16:57:13.771[3.0, 2.0, 2140.0, 4923.0, 1.0, 0.0, 0.0, 4.0, 8.0, 1070.0, 1070.0, 47.6902, -122.339, 1470.0, 4923.0, 86.0, 0.0, 0.0][668287.94]0
62023-10-31 16:57:13.771[4.0, 3.5, 3590.0, 5334.0, 2.0, 0.0, 2.0, 3.0, 9.0, 3140.0, 450.0, 47.6763, -122.267, 2100.0, 6250.0, 9.0, 0.0, 0.0][1004846.56]0
72023-10-31 16:57:13.771[3.0, 2.0, 1280.0, 960.0, 2.0, 0.0, 0.0, 3.0, 9.0, 1040.0, 240.0, 47.602, -122.311, 1280.0, 1173.0, 0.0, 0.0, 0.0][684577.25]0
82023-10-31 16:57:13.771[4.0, 2.5, 2820.0, 15000.0, 2.0, 0.0, 0.0, 4.0, 9.0, 2820.0, 0.0, 47.7255, -122.101, 2440.0, 15000.0, 29.0, 0.0, 0.0][727898.25]0
92023-10-31 16:57:13.771[3.0, 2.25, 1790.0, 11393.0, 1.0, 0.0, 0.0, 3.0, 8.0, 1790.0, 0.0, 47.6297, -122.099, 2290.0, 11894.0, 36.0, 0.0, 0.0][559631.06]0
102023-10-31 16:57:13.771[3.0, 1.5, 1010.0, 7683.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1010.0, 0.0, 47.72, -122.318, 1550.0, 7271.0, 61.0, 0.0, 0.0][340764.53]0
112023-10-31 16:57:13.771[3.0, 2.0, 1270.0, 1323.0, 3.0, 0.0, 0.0, 3.0, 8.0, 1270.0, 0.0, 47.6934, -122.342, 1330.0, 1323.0, 8.0, 0.0, 0.0][442168.12]0
122023-10-31 16:57:13.771[4.0, 1.75, 2070.0, 9120.0, 1.0, 0.0, 0.0, 4.0, 7.0, 1250.0, 820.0, 47.6045, -122.123, 1650.0, 8400.0, 57.0, 0.0, 0.0][630865.5]0
132023-10-31 16:57:13.771[4.0, 1.0, 1620.0, 4080.0, 1.5, 0.0, 0.0, 3.0, 7.0, 1620.0, 0.0, 47.6696, -122.324, 1760.0, 4080.0, 91.0, 0.0, 0.0][559631.06]0
142023-10-31 16:57:13.771[4.0, 3.25, 3990.0, 9786.0, 2.0, 0.0, 0.0, 3.0, 9.0, 3990.0, 0.0, 47.6784, -122.026, 3920.0, 8200.0, 10.0, 0.0, 0.0][909441.25]0
152023-10-31 16:57:13.771[4.0, 2.0, 1780.0, 19843.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1780.0, 0.0, 47.4414, -122.154, 2210.0, 13500.0, 52.0, 0.0, 0.0][313096.0]0
162023-10-31 16:57:13.771[4.0, 2.5, 2130.0, 6003.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2130.0, 0.0, 47.4518, -122.12, 1940.0, 4529.0, 11.0, 0.0, 0.0][404040.78]0
172023-10-31 16:57:13.771[3.0, 1.75, 1660.0, 10440.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1040.0, 620.0, 47.4448, -121.77, 1240.0, 10380.0, 36.0, 0.0, 0.0][292859.44]0
182023-10-31 16:57:13.771[3.0, 2.5, 2110.0, 4118.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2110.0, 0.0, 47.3878, -122.153, 2110.0, 4044.0, 25.0, 0.0, 0.0][338357.88]0
192023-10-31 16:57:13.771[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1300.0, 900.0, 47.6845, -122.201, 2320.0, 10814.0, 94.0, 0.0, 0.0][682284.56]0

Graph of Prices

Here’s a distribution plot of the inferences to view the values, with the X axis being the house price in millions, and the Y axis the number of houses fitting in a bin grouping. The majority of houses are in the $250,000 to $500,000 range, with some outliers in the far end.

import matplotlib.pyplot as plt
houseprices = pd.DataFrame({'sell_price': large_inference_result['out.variable'].apply(lambda x: x[0])})

houseprices.hist(column='sell_price', bins=75, grid=False, figsize=(12,8))
plt.axvline(x=0, color='gray', ls='--')
_ = plt.title('Distribution of predicted home sales price')
time.sleep(5)
control_model_end = datetime.datetime.now()

Pipeline Logs

Pipeline logs with standard pipeline steps are retrieved either with:

  • Pipeline logs which returns either a pandas DataFrame or Apache Arrow table.
  • Pipeline export_logs which saves the logs either a pandas DataFrame JSON file or Apache Arrow table.

For full details, see the Wallaroo Documentation Pipeline Log Management guide.

Pipeline Log Methods

The Pipeline logs method accepts the following parameters.

ParameterTypeDescription
limitInt (Optional)Limits how many log records to display. Defaults to 100. If there are more pipeline logs than are being displayed, the Warning message Pipeline log record limit exceeded will be displayed. For example, if 100 log files were requested and there are a total of 1,000, the warning message will be displayed.
start_datetimert and end_datetimeDateTime (Optional)Limits logs to all logs between the start_datetime and end_datetime DateTime parameters. Both parameters must be provided. Submitting a logs() request with only start_datetime or end_datetime will generate an exception.
If start_datetime and end_datetime are provided as parameters, then the records are returned in chronological order, with the oldest record displayed first.
arrowBoolean (Optional)Defaults to False. If arrow is set to True, then the logs are returned as an Apache Arrow table. If arrow=False, then the logs are returned as a pandas DataFrame.

The following examples demonstrate displaying the logs, then displaying the logs between the control_model_start and control_model_end periods, then again retrieved as an Arrow table.

# pipeline log retrieval - reverse chronological order

display(mainpipeline.logs())

# pipeline log retrieval between two dates - chronological order

display(mainpipeline.logs(start_datetime=control_model_start, end_datetime=control_model_end))

# pipeline log retrieval limited to the last 5 an an arrow table

display(mainpipeline.logs(arrow=True))
Warning: There are more logs available. Please set a larger limit or request a file using export_logs.
timein.tensorout.variablecheck_failures
02023-10-31 16:57:13.771[3.0, 2.0, 2005.0, 7000.0, 1.0, 0.0, 0.0, 3.0, 7.0, 1605.0, 400.0, 47.6039, -122.298, 1750.0, 4500.0, 34.0, 0.0, 0.0][581002.94]0
12023-10-31 16:57:13.771[3.0, 1.75, 2910.0, 37461.0, 1.0, 0.0, 0.0, 4.0, 7.0, 1530.0, 1380.0, 47.7015, -122.164, 2520.0, 18295.0, 47.0, 0.0, 0.0][706823.6]0
22023-10-31 16:57:13.771[4.0, 3.25, 2910.0, 1880.0, 2.0, 0.0, 3.0, 5.0, 9.0, 1830.0, 1080.0, 47.616, -122.282, 3100.0, 8200.0, 100.0, 0.0, 0.0][1060847.5]0
32023-10-31 16:57:13.771[4.0, 1.75, 2700.0, 7875.0, 1.5, 0.0, 0.0, 4.0, 8.0, 2700.0, 0.0, 47.454, -122.144, 2220.0, 7875.0, 46.0, 0.0, 0.0][441960.3]0
42023-10-31 16:57:13.771[3.0, 2.5, 2900.0, 23550.0, 1.0, 0.0, 0.0, 3.0, 10.0, 1490.0, 1410.0, 47.5708, -122.153, 2900.0, 19604.0, 27.0, 0.0, 0.0][827411.25]0
...............
952023-10-31 16:57:13.771[2.0, 1.5, 1070.0, 1236.0, 2.0, 0.0, 0.0, 3.0, 8.0, 1000.0, 70.0, 47.5619, -122.382, 1170.0, 1888.0, 10.0, 0.0, 0.0][435628.72]0
962023-10-31 16:57:13.771[3.0, 2.5, 2830.0, 6000.0, 1.0, 0.0, 3.0, 3.0, 9.0, 1730.0, 1100.0, 47.5751, -122.378, 2040.0, 5300.0, 60.0, 0.0, 0.0][981676.7]0
972023-10-31 16:57:13.771[4.0, 1.75, 1720.0, 8750.0, 1.0, 0.0, 0.0, 3.0, 7.0, 860.0, 860.0, 47.726, -122.21, 1790.0, 8750.0, 43.0, 0.0, 0.0][437177.97]0
982023-10-31 16:57:13.771[4.0, 2.25, 4470.0, 60373.0, 2.0, 0.0, 0.0, 3.0, 11.0, 4470.0, 0.0, 47.7289, -122.127, 3210.0, 40450.0, 26.0, 0.0, 0.0][1208638.1]0
992023-10-31 16:57:13.771[3.0, 1.0, 1150.0, 3000.0, 1.0, 0.0, 0.0, 5.0, 6.0, 1150.0, 0.0, 47.6867, -122.345, 1460.0, 3200.0, 108.0, 0.0, 0.0][448627.8]0

100 rows × 4 columns

Warning: Pipeline log size limit exceeded. Please request logs using export_logs
timein.tensorout.variablecheck_failures
02023-10-31 16:57:13.771[4.0, 2.5, 2900.0, 5505.0, 2.0, 0.0, 0.0, 3.0, 8.0, 2900.0, 0.0, 47.6063, -122.02, 2970.0, 5251.0, 12.0, 0.0, 0.0][718013.7]0
12023-10-31 16:57:13.771[2.0, 2.5, 2170.0, 6361.0, 1.0, 0.0, 2.0, 3.0, 8.0, 2170.0, 0.0, 47.7109, -122.017, 2310.0, 7419.0, 6.0, 0.0, 0.0][615094.6]0
22023-10-31 16:57:13.771[3.0, 2.5, 1300.0, 812.0, 2.0, 0.0, 0.0, 3.0, 8.0, 880.0, 420.0, 47.5893, -122.317, 1300.0, 824.0, 6.0, 0.0, 0.0][448627.8]0
32023-10-31 16:57:13.771[4.0, 2.5, 2500.0, 8540.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2500.0, 0.0, 47.5759, -121.994, 2560.0, 8475.0, 24.0, 0.0, 0.0][758714.3]0
42023-10-31 16:57:13.771[3.0, 1.75, 2200.0, 11520.0, 1.0, 0.0, 0.0, 4.0, 7.0, 2200.0, 0.0, 47.7659, -122.341, 1690.0, 8038.0, 62.0, 0.0, 0.0][513264.66]0
...............
4952023-10-31 16:57:13.771[4.0, 2.5, 3550.0, 35689.0, 2.0, 0.0, 0.0, 4.0, 9.0, 3550.0, 0.0, 47.7503, -122.074, 3350.0, 35711.0, 23.0, 0.0, 0.0][873315.2]0
4962023-10-31 16:57:13.771[4.0, 2.5, 2510.0, 47044.0, 2.0, 0.0, 0.0, 3.0, 9.0, 2510.0, 0.0, 47.7699, -122.085, 2600.0, 42612.0, 27.0, 0.0, 0.0][721143.6]0
4972023-10-31 16:57:13.771[4.0, 2.5, 4090.0, 11225.0, 2.0, 0.0, 0.0, 3.0, 10.0, 4090.0, 0.0, 47.581, -121.971, 3510.0, 8762.0, 9.0, 0.0, 0.0][1048372.44]0
4982023-10-31 16:57:13.771[2.0, 1.0, 720.0, 5000.0, 1.0, 0.0, 0.0, 5.0, 6.0, 720.0, 0.0, 47.5195, -122.374, 810.0, 5000.0, 63.0, 0.0, 0.0][244566.39]0
4992023-10-31 16:57:13.771[4.0, 2.75, 2930.0, 22000.0, 1.0, 0.0, 3.0, 4.0, 9.0, 1580.0, 1350.0, 47.3227, -122.384, 2930.0, 9758.0, 36.0, 0.0, 0.0][518869.03]0

500 rows × 4 columns

    Warning: There are more logs available. Please set a larger limit or request a file using export_logs.

    pyarrow.Table
    time: timestamp[ms]
    in.tensor: list<item: float> not null
      child 0, item: float
    out.variable: list<inner: float not null> not null
      child 0, inner: float not null
    check_failures: int8
    ----
    time: [[2023-10-31 16:57:13.771,2023-10-31 16:57:13.771,2023-10-31 16:57:13.771,2023-10-31 16:57:13.771,2023-10-31 16:57:13.771,...,2023-10-31 16:57:13.771,2023-10-31 16:57:13.771,2023-10-31 16:57:13.771,2023-10-31 16:57:13.771,2023-10-31 16:57:13.771]]
    in.tensor: [[[3,2,2005,7000,1,...,1750,4500,34,0,0],[3,1.75,2910,37461,1,...,2520,18295,47,0,0],...,[4,2.25,4470,60373,2,...,3210,40450,26,0,0],[3,1,1150,3000,1,...,1460,3200,108,0,0]]]
    out.variable: [[[581002.94],[706823.6],...,[1208638.1],[448627.8]]]
    check_failures: [[0,0,0,0,0,...,0,0,0,0,0]]

Anomaly Detection through Validations

Anomaly detection allows organizations to set validation parameters in a pipeline. A validation is added to a pipeline to test data based on an expression, and flag any inferences where the validation failed inference result and the pipeline logs.

Validations are added through the Pipeline add_validation(name, validation) command which uses the following parameters:

ParameterTypeDescription
nameString (Required)The name of the validation.
ValidationExpression (Required)The validation test command in the format model_name.outputs][field][index] {Operation} {Value}.

For this example, we want to detect the outputs of housing_model_control and validate that values are less than 1,500,000. Any outputs greater than that will trigger a check_failure which is shown in the output.

## Add the validation to the pipeline

mainpipeline = mainpipeline.add_validation('price too high', housing_model_control.outputs[0][0] < 1500000.0)

#minimum deployment config
deploy_config = wallaroo.DeploymentConfigBuilder().replica_count(1).cpus(0.5).memory("1Gi").build()
mainpipeline.deploy(deployment_config = deploy_config)
 ok
namehousepricesagapipeline
created2023-10-31 16:56:07.345831+00:00
last_updated2023-10-31 16:57:24.026392+00:00
deployedTrue
tags
versionsf7e0deaf-63a2-491a-8ff9-e8148d3cabcb, 2ea0cc42-c955-4fc3-bac9-7a2c7c22ddc1, dca84ab2-274a-4391-95dd-a99bda7621e1
stepshousepricesagacontrol
publishedFalse

Validation Testing

Two validations will be tested:

  • One that should return a house value lower than 1,500,000. The validation will pass so check_failure will be 0.
  • The other than should return a house value greater than 1,500,000. The validation will fail, so check_failure will be 1.
validation_start = datetime.datetime.now()

# Small value home

normal_input = pd.DataFrame.from_records({
        "tensor": [[
            3.0,
            2.25,
            1620.0,
            997.0,
            2.5,
            0.0,
            0.0,
            3.0,
            8.0,
            1540.0,
            80.0,
            47.5400009155,
            -122.0260009766,
            1620.0,
            1068.0,
            4.0,
            0.0,
            0.0
        ]]
    }
)

small_result = mainpipeline.infer(normal_input)

display(small_result.loc[:,["time", "out.variable", "check_failures"]])
timeout.variablecheck_failures
02023-10-31 16:57:26.205[544392.06]0
# Big value home

big_input = pd.DataFrame.from_records({
        "tensor": [[
            4.0,
            4.5,
            5770.0,
            10050.0,
            1.0,
            0.0,
            3.0,
            5.0,
            9.0,
            3160.0,
            2610.0,
            47.6769981384,
            -122.2750015259,
            2950.0,
            6700.0,
            65.0,
            0.0,
            0.0
        ]]
    }
)

big_result = mainpipeline.infer(big_input)

display(big_result.loc[:,["time", "out.variable", "check_failures"]])
timeout.variablecheck_failures
02023-10-31 16:57:27.138[1689843.1]1

Anomaly Results

We’ll run through our previous batch, this time showing only those results outside of the validation, and a graph showing where the anomalies are against the other results.

batch_inferences = mainpipeline.infer_from_file('./data/xtest-1k.arrow')

large_inference_result =  batch_inferences.to_pandas()
# Display only the anomalous results

display(large_inference_result[large_inference_result["check_failures"] > 0].loc[:,["time", "out.variable", "check_failures"]])
timeout.variablecheck_failures
302023-10-31 16:57:28.974[1514079.4]1
2482023-10-31 16:57:28.974[1967344.1]1
2552023-10-31 16:57:28.974[2002393.6]1
5562023-10-31 16:57:28.974[1886959.2]1
6982023-10-31 16:57:28.974[1689843.1]1
7112023-10-31 16:57:28.974[1946437.8]1
7222023-10-31 16:57:28.974[2005883.1]1
7822023-10-31 16:57:28.974[1910824.0]1
9652023-10-31 16:57:28.974[2016006.1]1
import matplotlib.pyplot as plt
houseprices = pd.DataFrame({'sell_price': large_inference_result['out.variable'].apply(lambda x: x[0])})

houseprices.hist(column='sell_price', bins=75, grid=False, figsize=(12,8))
plt.axvline(x=1500000, color='red', ls='--')
_ = plt.title('Distribution of predicted home sales price')

Assays

Wallaroo assays provide a method for detecting input or model drift. These can be triggered either when unexpected input is provided for the inference, or when the model needs to be retrained from changing environment conditions.

Wallaroo assays can track either an input field and its index, or an output field and its index. For full details, see the Wallaroo Assays Management Guide.

For this example, we will:

  • Perform sample inferences based on lower priced houses.
  • Create an assay with the baseline set off those lower priced houses.
  • Generate inferences spread across all house values, plus specific set of high priced houses to trigger the assay alert.
  • Run an interactive assay to show the detection of values outside the established baseline.

Assay Generation

To start the demonstration, we’ll create a baseline of values from houses with small estimated prices and set that as our baseline. Assays are typically run on a 24 hours interval based on a 24 hour window of data, but we’ll bypass that by setting our baseline time even shorter.

small_houses_inputs = pd.read_json('./data/smallinputs.df.json')
baseline_size = 500

# Where the baseline data will start
baseline_start = datetime.datetime.now()

# These inputs will be random samples of small priced houses.  Around 30,000 is a good number
small_houses = small_houses_inputs.sample(baseline_size, replace=True).reset_index(drop=True)

small_results = mainpipeline.infer(small_houses)

# Set the baseline end

baseline_end = datetime.datetime.now()
# turn the inference results into a numpy array for the baseline

# set the results to a non-array value
small_results_baseline_df = small_results.copy()
small_results_baseline_df['variable']=small_results['out.variable'].map(lambda x: x[0])

# get the numpy values
small_results_baseline = small_results_baseline_df['variable'].to_numpy()
assay_baseline_from_numpy_name = "house price saga assay from numpy"

# assay builder by baseline
assay_builder_from_numpy = wl.build_assay(assay_name=assay_baseline_from_numpy_name, 
                               pipeline=mainpipeline, 
                               model_name=model_name_control, 
                               iopath="output variable 0", 
                               baseline_data = small_results_baseline)
# set the width from the recent results
assay_builder_from_numpy.window_builder().add_width(minutes=1)
assay_config_from_numpy = assay_builder_from_numpy.build()
assay_analysis_from_numpy = assay_config_from_numpy.interactive_run()
# get the histogram from the numpy baseline
assay_builder_from_numpy.baseline_histogram()
# show the baseline stats
assay_analysis_from_numpy[0].baseline_stats()
Baseline
count500
min236238.67
max1489624.3
mean513762.85694
median448627.8
std235726.284713
startNone
endNone

Now we’ll perform some inferences with a spread of values, then a larger set with a set of larger house values to trigger our assay alert.

Because our assay windows are 1 minutes, we’ll need to stagger our inference values to be set into the proper windows. This will take about 4 minutes.

By default, assay start date is set to 24 hours from when the assay was created. For this example, we will set the assay.window_builder.add_start to set the assay window to start at the beginning of our data, and assay.add_run_until to set the time period to stop gathering data from.

# Get a spread of house values

time.sleep(35)
# regular_houses_inputs = pd.read_json('./data/xtest-1k.df.json', orient="records")
inference_size = 1000

# regular_houses = regular_houses_inputs.sample(inference_size, replace=True).reset_index(drop=True)

# And a spread of large house values

big_houses_inputs = pd.read_json('./data/biginputs.df.json', orient="records")
big_houses = big_houses_inputs.sample(inference_size, replace=True).reset_index(drop=True)

# Set the start for our assay window period.
assay_window_start = datetime.datetime.now()

mainpipeline.infer(big_houses)

# End our assay window period
time.sleep(35)
assay_window_end = datetime.datetime.now()
assay_builder_from_numpy.add_run_until(assay_window_end)
assay_builder_from_numpy.window_builder().add_width(minutes=1).add_interval(minutes=1).add_start(assay_window_start)
assay_config_from_dates = assay_builder_from_numpy.build()
assay_analysis_from_numpy = assay_config_from_numpy.interactive_run()
# Show how many assay windows were analyzed, then show the chart
print(f"Generated {len(assay_analysis_from_numpy)} analyses")
assay_analysis_from_numpy.chart_scores()
Generated 5 analyses
# Display the results as a DataFrame - we're mainly interested in the score and whether the 
# alert threshold was triggered
display(assay_analysis_from_numpy.to_dataframe().loc[:, ["score", "start", "alert_threshold", "status"]])
scorestartalert_thresholdstatus
00.0160792023-10-31T16:56:21.399000+00:000.25Ok
10.0060422023-10-31T16:57:21.399000+00:000.25Ok
28.8688322023-10-31T16:58:21.399000+00:000.25Alert
38.8688322023-10-31T16:59:21.399000+00:000.25Alert
48.8688322023-10-31T17:00:21.399000+00:000.25Alert
assay_builder_from_numpy.upload()
18

The assay is now visible through the Wallaroo UI by selecting the workspace, then the pipeline, then Insights.

Shadow Deploy

Let’s assume that after analyzing the assay information we want to test two challenger models to our control. We do that with the Shadow Deploy pipeline step.

In Shadow Deploy, the pipeline step is added with the add_shadow_deploy method, with the champion model listed first, then an array of challenger models after. All inference data is fed to all models, with the champion results displayed in the out.variable column, and the shadow results in the format out_{model name}.variable. For example, since we named our challenger models housingchallenger01 and housingchallenger02, the columns out_housingchallenger01.variable and out_housingchallenger02.variable have the shadow deployed model results.

For this example, we will remove the previous pipeline step, then replace it with a shadow deploy step with rf_model.onnx as our champion, and models xgb_model.onnx and gbr_model.onnx as the challengers. We’ll deploy the pipeline and prepare it for sample inferences.

# Upload the challenger models

model_name_challenger01 = 'housingchallenger01'
model_file_name_challenger01 = './models/xgb_model.onnx'

model_name_challenger02 = 'housingchallenger02'
model_file_name_challenger02 = './models/gbr_model.onnx'

housing_model_challenger01 = (wl.upload_model(model_name_challenger01, 
                                              model_file_name_challenger01, 
                                              framework=Framework.ONNX)
                                              .configure(tensor_fields=["tensor"])
                            )
housing_model_challenger02 = (wl.upload_model(model_name_challenger02, 
                                              model_file_name_challenger02, 
                                              framework=Framework.ONNX)
                                              .configure(tensor_fields=["tensor"])
                            )
# Undeploy the pipeline
mainpipeline.undeploy()
mainpipeline.clear()
# Add the new shadow deploy step with our challenger models
mainpipeline.add_shadow_deploy(housing_model_control, [housing_model_challenger01, housing_model_challenger02])

# Deploy the pipeline with the new shadow step
#minimum deployment config
deploy_config = wallaroo.DeploymentConfigBuilder().replica_count(1).cpus(0.5).memory("1Gi").build()
mainpipeline.deploy(deployment_config = deploy_config)
Waiting for undeployment - this will take up to 45s ................................... ok
Waiting for deployment - this will take up to 45s ................................. ok
namehousepricesagapipeline
created2023-10-31 16:56:07.345831+00:00
last_updated2023-10-31 17:04:57.709641+00:00
deployedTrue
tags
versions44d28e3e-094f-4507-8aa1-909c1f151dd5, b9f46ba3-3f14-4e5b-989e-e0b8d166392f, f7e0deaf-63a2-491a-8ff9-e8148d3cabcb, 2ea0cc42-c955-4fc3-bac9-7a2c7c22ddc1, dca84ab2-274a-4391-95dd-a99bda7621e1
stepshousepricesagacontrol
publishedFalse

Shadow Deploy Sample Inference

We’ll now use our same sample data for an inference to our shadow deployed pipeline, then display the first 20 results with just the comparative outputs.

shadow_result = mainpipeline.infer_from_file('./data/xtest-1k.arrow')

shadow_outputs =  shadow_result.to_pandas()
display(shadow_outputs.loc[0:20,['out.variable','out_housingchallenger01.variable','out_housingchallenger02.variable']])
out.variableout_housingchallenger01.variableout_housingchallenger02.variable
0[718013.7][659806.0][704901.9]
1[615094.6][732883.5][695994.44]
2[448627.8][419508.84][416164.8]
3[758714.3][634028.75][655277.2]
4[513264.66][427209.47][426854.66]
5[668287.94][615501.9][632556.06]
6[1004846.56][1139732.4][1100465.2]
7[684577.25][498328.88][528278.06]
8[727898.25][722664.4][659439.94]
9[559631.06][525746.44][534331.44]
10[340764.53][376337.06][377187.2]
11[442168.12][382053.12][403964.3]
12[630865.5][505608.97][528991.3]
13[559631.06][603260.5][612201.75]
14[909441.25][969585.44][893874.7]
15[313096.0][313633.7][318054.94]
16[404040.78][360413.62][357816.7]
17[292859.44][316674.88][294034.62]
18[338357.88][299907.47][323254.28]
19[682284.56][811896.75][770916.6]
20[583765.94][573618.5][549141.4]

A/B Testing

A/B Testing is another method of comparing and testing models. Like shadow deploy, multiple models are compared against the champion or control models. The difference is that instead of submitting the inference data to all models, then tracking the outputs of all of the models, the inference inputs are off of a ratio and other conditions.

For this example, we’ll be using a 1:1:1 ratio with a random split between the champion model and the two challenger models. Each time an inference request is made, there is a random equal chance of any one of them being selected.

When the inference results and log entries are displayed, they include the column out._model_split which displays:

FieldTypeDescription
nameStringThe model name used for the inference.
versionStringThe version of the model.
shaStringThe sha hash of the model version.

This is used to determine which model was used for the inference request.

# remove the shadow deploy steps
mainpipeline.clear()

# Add the a/b test step to the pipeline
mainpipeline.add_random_split([(1, housing_model_control), (1, housing_model_challenger01), (1, housing_model_challenger02)], "session_id")

mainpipeline.deploy()

# Perform sample inferences of 20 rows and display the results
ab_date_start = datetime.datetime.now()
abtesting_inputs = pd.read_json('./data/xtest-1k.df.json')

df = pd.DataFrame(columns=["model", "value"])

for index, row in abtesting_inputs.sample(20).iterrows():
    result = mainpipeline.infer(row.to_frame('tensor').reset_index())
    value = result.loc[0]["out.variable"]
    model = json.loads(result.loc[0]["out._model_split"][0])['name']
    df = df.append({'model': model, 'value': value}, ignore_index=True)

display(df)
ab_date_end = datetime.datetime.now()
 ok
modelvalue
0housingchallenger01[278554.44]
1housingchallenger02[615955.3]
2housepricesagacontrol[1092273.9]
3housepricesagacontrol[683845.75]
4housepricesagacontrol[682284.56]
5housepricesagacontrol[247792.75]
6housingchallenger02[315142.44]
7housingchallenger02[530408.94]
8housepricesagacontrol[340764.53]
9housepricesagacontrol[421153.16]
10housingchallenger01[395150.63]
11housingchallenger02[544343.3]
12housingchallenger01[395284.4]
13housepricesagacontrol[701940.7]
14housepricesagacontrol[448627.8]
15housepricesagacontrol[320863.72]
16housingchallenger01[558485.3]
17housingchallenger02[236329.28]
18housepricesagacontrol[559631.06]
19housingchallenger01[281437.56]

Model Swap

Now that we’ve completed our testing, we can swap our deployed model in the original housepricingpipeline with one we feel works better.

We’ll start by removing the A/B Testing pipeline step, then going back to the single pipeline step with the champion model and perform a test inference.

When going from a testing step such as A/B Testing or Shadow Deploy, it is best to undeploy the pipeline, change the steps, then deploy the pipeline. In a production environment, there should be two pipelines: One for production, the other for testing models. Since this example uses one pipeline for simplicity, we will undeploy our main pipeline and reset it back to a one-step pipeline with the current champion model as our pipeline step.

Once done, we’ll perform the hot swap with the model gbr_model.onnx, which was labeled housing_model_challenger02 in a previous step. We’ll do an inference with the same data as used with the challenger model. Note that previously, the inference through the original model returned [718013.7].

mainpipeline.undeploy()

# remove the shadow deploy steps
mainpipeline.clear()

mainpipeline.add_model_step(housing_model_control).deploy()

# Inference test
normal_input = pd.DataFrame.from_records({"tensor": [[4.0,
            2.25,
            2200.0,
            11250.0,
            1.5,
            0.0,
            0.0,
            5.0,
            7.0,
            1300.0,
            900.0,
            47.6845,
            -122.201,
            2320.0,
            10814.0,
            94.0,
            0.0,
            0.0]]})
controlresult = mainpipeline.infer(normal_input)
display(controlresult)
 ok
Waiting for deployment - this will take up to 45s ........ ok
timein.tensorout.variablecheck_failures
02023-10-31 17:08:19.579[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1300.0, 900.0, 47.6845, -122.201, 2320.0, 10814.0, 94.0, 0.0, 0.0][682284.56]0

Now we’ll “hot swap” the control model. We don’t have to deploy the pipeline - we can just swap the model out in that pipeline step and continue with only a millisecond or two lost while the swap was performed.

# Perform hot swap

mainpipeline.replace_with_model_step(0, housing_model_challenger02).deploy()
# wait a moment for the database to be updated.  The swap is near instantaneous but database writes may take a moment
import time
time.sleep(15)

# inference after model swap
normal_input = pd.DataFrame.from_records({"tensor": [[4.0,
            2.25,
            2200.0,
            11250.0,
            1.5,
            0.0,
            0.0,
            5.0,
            7.0,
            1300.0,
            900.0,
            47.6845,
            -122.201,
            2320.0,
            10814.0,
            94.0,
            0.0,
            0.0]]})
challengerresult = mainpipeline.infer(normal_input)
display(challengerresult)
 ok
timein.tensorout.variablecheck_failures
02023-10-31 17:09:23.932[4.0, 2.25, 2200.0, 11250.0, 1.5, 0.0, 0.0, 5.0, 7.0, 1300.0, 900.0, 47.6845, -122.201, 2320.0, 10814.0, 94.0, 0.0, 0.0][770916.6]0
# Display the difference between the two

display(f'Original model output: {controlresult.loc[0]["out.variable"]}')
display(f'Hot swapped model  output: {challengerresult.loc[0]["out.variable"]}')
'Original model output: [682284.56]'

‘Hot swapped model output: [770916.6]’

Undeploy Main Pipeline

With the examples and tutorial complete, we will undeploy the main pipeline and return the resources back to the Wallaroo instance.

mainpipeline.undeploy()
Waiting for undeployment - this will take up to 45s ...................................... ok
namehousepricesagapipeline
created2023-10-31 16:56:07.345831+00:00
last_updated2023-10-31 17:09:08.758964+00:00
deployedFalse
tags
versions51034ba5-b58e-4475-908d-ec8fae069745, cd0f20e9-6923-4e6f-8114-1137676da5c5, 58274aab-0045-4557-a740-7d085af8574d, 4cf4f0dc-2c42-4f8b-975c-1f5c5d939a98, c5ae5a56-1c7f-4a94-9d4e-f08bf35e7f4f, f652a9d8-a4f6-428a-9b36-b29eec6b5198, 0e7d9d77-02d7-4c13-8062-9c77492145f8, 42b97784-fc16-43be-b89e-2d3dad20dd2b, 7d35285a-f8af-4bed-855b-60258c3435ee, 8b0dc4bb-3340-44f9-85d6-fbd091e19412, 06169fed-59e9-41f8-9dbd-0fc9f80ebb73, 44d28e3e-094f-4507-8aa1-909c1f151dd5, b9f46ba3-3f14-4e5b-989e-e0b8d166392f, f7e0deaf-63a2-491a-8ff9-e8148d3cabcb, 2ea0cc42-c955-4fc3-bac9-7a2c7c22ddc1, dca84ab2-274a-4391-95dd-a99bda7621e1
stepshousepricesagacontrol
publishedFalse