curl --request POST \
--url https://api.galtea.ai/runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
'import requests
url = "https://api.galtea.ai/runs"
payload = {
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
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({
productId: 'product_123',
versionId: 'version_123',
customId: 'nightly-regression'
})
};
fetch('https://api.galtea.ai/runs', 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.galtea.ai/runs",
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([
'productId' => 'product_123',
'versionId' => 'version_123',
'customId' => 'nightly-regression'
]),
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.galtea.ai/runs"
payload := strings.NewReader("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\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.galtea.ai/runs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/runs")
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 \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}"
response = http.request(request)
puts response.read_body{
"id": "run_123",
"productId": "product_123",
"versionId": "version_123",
"userId": "user_123",
"ordinal": 42,
"customId": "nightly-regression",
"relaunchedFromRunId": "run_122",
"openedBy": "LAUNCH",
"status": "COMPLETED",
"evaluationCount": 120,
"sessionCount": 30,
"kind": "GENERATE_INFERENCES",
"jobId": "<string>",
"error": "<string>",
"request": {},
"resolvedInputs": {},
"finishedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Create run
Opens an empty run you can attribute your own evaluations to, by passing its id as runId. A run you create this way is never closed automatically: close it yourself when the last evaluation is in.
curl --request POST \
--url https://api.galtea.ai/runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
'import requests
url = "https://api.galtea.ai/runs"
payload = {
"productId": "product_123",
"versionId": "version_123",
"customId": "nightly-regression"
}
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({
productId: 'product_123',
versionId: 'version_123',
customId: 'nightly-regression'
})
};
fetch('https://api.galtea.ai/runs', 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.galtea.ai/runs",
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([
'productId' => 'product_123',
'versionId' => 'version_123',
'customId' => 'nightly-regression'
]),
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.galtea.ai/runs"
payload := strings.NewReader("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\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.galtea.ai/runs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/runs")
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 \"productId\": \"product_123\",\n \"versionId\": \"version_123\",\n \"customId\": \"nightly-regression\"\n}"
response = http.request(request)
puts response.read_body{
"id": "run_123",
"productId": "product_123",
"versionId": "version_123",
"userId": "user_123",
"ordinal": 42,
"customId": "nightly-regression",
"relaunchedFromRunId": "run_122",
"openedBy": "LAUNCH",
"status": "COMPLETED",
"evaluationCount": 120,
"sessionCount": 30,
"kind": "GENERATE_INFERENCES",
"jobId": "<string>",
"error": "<string>",
"request": {},
"resolvedInputs": {},
"finishedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Authorizations
API key authorization. Pass your API key in the Authorization header as a Bearer token. Both new (gsk_*) and legacy (gsk-) API keys are accepted, e.g. Authorization: Bearer gsk_... or Authorization: Bearer gsk-....
Body
Product this launch belongs to
1"product_123"
Version under test, when the launch targets one
1"version_123"
Your own label, unique per product
1"nightly-regression"
Response
Run created successfully
"run_123"
"product_123"
"version_123"
"user_123"
Per-product launch number, starting at 1 and never reused
42
Caller-supplied label
"nightly-regression"
The run this one repeats, when POST /runs/{id}/relaunch minted it
"run_122"
LAUNCH when a launch endpoint opened the run, which then closes when that launch ends. CALLER when POST /runs opened it, which only POST /runs/{id}/close ends.
LAUNCH, CALLER "LAUNCH"
RUNNING, COMPLETED, FAILED, CANCELLED "COMPLETED"
Evaluations this run launched
120
Distinct sessions covered by the evaluations of this run
30
The shape of work the platform performed. Null on a run the caller opened, and on one several scoring calls filled.
GENERATE_INFERENCES, EVALUATE_SESSION, EVALUATE_SESSION_BATCH, REPLAY_METRIC, null "GENERATE_INFERENCES"
Queue job the run dispatched, when it queued one. Null on a run the caller opened, and on one several scoring calls filled.
Why the run failed, when it did
The launch request as the platform received it. Null on a run the caller opened, and on one several scoring calls filled.
Show child attributes
Show child attributes
What the request resolved to at dispatch: test cases, sessions and metrics. Keys depend on kind. Null on a run the caller opened, and on one several scoring calls filled.
Show child attributes
Show child attributes