Compare experiments
curl --request POST \
--url https://api.sidenet.ai/v1/datasets/{id}/compare \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"experimentIds": [
"exp_7f31a9c2",
"exp_a02c4d11"
],
"baselineId": "exp_7f31a9c2"
}
'import requests
url = "https://api.sidenet.ai/v1/datasets/{id}/compare"
payload = {
"experimentIds": ["exp_7f31a9c2", "exp_a02c4d11"],
"baselineId": "exp_7f31a9c2"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({experimentIds: ['exp_7f31a9c2', 'exp_a02c4d11'], baselineId: 'exp_7f31a9c2'})
};
fetch('https://api.sidenet.ai/v1/datasets/{id}/compare', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sidenet.ai/v1/datasets/{id}/compare",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'experimentIds' => [
'exp_7f31a9c2',
'exp_a02c4d11'
],
'baselineId' => 'exp_7f31a9c2'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sidenet.ai/v1/datasets/{id}/compare"
payload := strings.NewReader("{\n \"experimentIds\": [\n \"exp_7f31a9c2\",\n \"exp_a02c4d11\"\n ],\n \"baselineId\": \"exp_7f31a9c2\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sidenet.ai/v1/datasets/{id}/compare")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"experimentIds\": [\n \"exp_7f31a9c2\",\n \"exp_a02c4d11\"\n ],\n \"baselineId\": \"exp_7f31a9c2\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sidenet.ai/v1/datasets/{id}/compare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"experimentIds\": [\n \"exp_7f31a9c2\",\n \"exp_a02c4d11\"\n ],\n \"baselineId\": \"exp_7f31a9c2\"\n}"
response = http.request(request)
puts response.read_body{
"baselineId": "exp_7f31a9c2",
"experiments": [
{
"id": "exp_7f31a9c2",
"name": "Refund tone — August",
"status": "completed",
"agentVersionId": "ver_a1"
},
{
"id": "exp_a02c4d11",
"name": "Refund tone — shorter prompt",
"status": "completed",
"agentVersionId": "ver_b7"
}
],
"items": [
{
"itemId": "dsi_2c7e91b4",
"input": "Can I get a refund on an order I placed yesterday?",
"groundTruth": "Yes — orders can be refunded within 14 days. Ask for the order number.",
"results": {
"exp_7f31a9c2": {
"output": {
"text": "Yes — within 14 days; what is the order number?"
},
"scores": {
"tone-scorer": 0.92
}
},
"exp_a02c4d11": {
"output": {
"text": "Yes. Order number?"
},
"scores": {
"tone-scorer": 0.61
}
}
}
}
]
}{
"error": "<string>",
"details": "<string>"
}{
"error": "<string>",
"details": "<string>"
}Scoring & Experiments
Compare experiments
Compare two or more runs of this dataset item by item: for every item, the input, the ground truth, and per run the answer and its scores (per scorer id). Runs of two agent versions, or of the same version before and after a prompt change, read side by side. baselineId names the run the others are compared against (default: the first id).
POST
/
v1
/
datasets
/
{id}
/
compare
Compare experiments
curl --request POST \
--url https://api.sidenet.ai/v1/datasets/{id}/compare \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"experimentIds": [
"exp_7f31a9c2",
"exp_a02c4d11"
],
"baselineId": "exp_7f31a9c2"
}
'import requests
url = "https://api.sidenet.ai/v1/datasets/{id}/compare"
payload = {
"experimentIds": ["exp_7f31a9c2", "exp_a02c4d11"],
"baselineId": "exp_7f31a9c2"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({experimentIds: ['exp_7f31a9c2', 'exp_a02c4d11'], baselineId: 'exp_7f31a9c2'})
};
fetch('https://api.sidenet.ai/v1/datasets/{id}/compare', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sidenet.ai/v1/datasets/{id}/compare",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'experimentIds' => [
'exp_7f31a9c2',
'exp_a02c4d11'
],
'baselineId' => 'exp_7f31a9c2'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sidenet.ai/v1/datasets/{id}/compare"
payload := strings.NewReader("{\n \"experimentIds\": [\n \"exp_7f31a9c2\",\n \"exp_a02c4d11\"\n ],\n \"baselineId\": \"exp_7f31a9c2\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sidenet.ai/v1/datasets/{id}/compare")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"experimentIds\": [\n \"exp_7f31a9c2\",\n \"exp_a02c4d11\"\n ],\n \"baselineId\": \"exp_7f31a9c2\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sidenet.ai/v1/datasets/{id}/compare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"experimentIds\": [\n \"exp_7f31a9c2\",\n \"exp_a02c4d11\"\n ],\n \"baselineId\": \"exp_7f31a9c2\"\n}"
response = http.request(request)
puts response.read_body{
"baselineId": "exp_7f31a9c2",
"experiments": [
{
"id": "exp_7f31a9c2",
"name": "Refund tone — August",
"status": "completed",
"agentVersionId": "ver_a1"
},
{
"id": "exp_a02c4d11",
"name": "Refund tone — shorter prompt",
"status": "completed",
"agentVersionId": "ver_b7"
}
],
"items": [
{
"itemId": "dsi_2c7e91b4",
"input": "Can I get a refund on an order I placed yesterday?",
"groundTruth": "Yes — orders can be refunded within 14 days. Ask for the order number.",
"results": {
"exp_7f31a9c2": {
"output": {
"text": "Yes — within 14 days; what is the order number?"
},
"scores": {
"tone-scorer": 0.92
}
},
"exp_a02c4d11": {
"output": {
"text": "Yes. Order number?"
},
"scores": {
"tone-scorer": 0.61
}
}
}
}
]
}{
"error": "<string>",
"details": "<string>"
}{
"error": "<string>",
"details": "<string>"
}Authorizations
Organization API key, generated in studio.sidenet.ai. Backend only — never in a browser.
Path Parameters
Dataset id.
Example:
"ds_orders_v3"
Body
application/json