curl --request POST \
--url https://api.galtea.ai/tests/generate-config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"specificationIds": [
"spec_123",
"spec_456"
],
"automaticCreation": false,
"maxTestCases": 30,
"groundTruthUri": "<string>",
"dataCatalogUri": "<string>",
"languageCode": "es-ES"
}
'import requests
url = "https://api.galtea.ai/tests/generate-config"
payload = {
"specificationIds": ["spec_123", "spec_456"],
"automaticCreation": False,
"maxTestCases": 30,
"groundTruthUri": "<string>",
"dataCatalogUri": "<string>",
"languageCode": "es-ES"
}
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({
specificationIds: ['spec_123', 'spec_456'],
automaticCreation: false,
maxTestCases: 30,
groundTruthUri: '<string>',
dataCatalogUri: '<string>',
languageCode: 'es-ES'
})
};
fetch('https://api.galtea.ai/tests/generate-config', 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/tests/generate-config",
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([
'specificationIds' => [
'spec_123',
'spec_456'
],
'automaticCreation' => false,
'maxTestCases' => 30,
'groundTruthUri' => '<string>',
'dataCatalogUri' => '<string>',
'languageCode' => 'es-ES'
]),
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/tests/generate-config"
payload := strings.NewReader("{\n \"specificationIds\": [\n \"spec_123\",\n \"spec_456\"\n ],\n \"automaticCreation\": false,\n \"maxTestCases\": 30,\n \"groundTruthUri\": \"<string>\",\n \"dataCatalogUri\": \"<string>\",\n \"languageCode\": \"es-ES\"\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/tests/generate-config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"specificationIds\": [\n \"spec_123\",\n \"spec_456\"\n ],\n \"automaticCreation\": false,\n \"maxTestCases\": 30,\n \"groundTruthUri\": \"<string>\",\n \"dataCatalogUri\": \"<string>\",\n \"languageCode\": \"es-ES\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/tests/generate-config")
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 \"specificationIds\": [\n \"spec_123\",\n \"spec_456\"\n ],\n \"automaticCreation\": false,\n \"maxTestCases\": 30,\n \"groundTruthUri\": \"<string>\",\n \"dataCatalogUri\": \"<string>\",\n \"languageCode\": \"es-ES\"\n}"
response = http.request(request)
puts response.read_body{
"config": [
{
"name": "Scenarios for polite refusals",
"type": "SCENARIOS",
"specificationId": "spec_123",
"productId": "prod_123",
"maxTestCases": 30,
"variants": [
"custom"
],
"customVariantDescription": "<string>",
"strategies": [
"written"
],
"languageCode": "es-ES"
}
],
"tests": [
{
"id": "test_123",
"productId": "prod_123",
"userId": "user_123",
"name": "Quality Test",
"type": "QUALITY",
"models": [
"gpt-4",
"claude-3"
],
"groundTruthUri": "https://files.galtea.ai/tests/test_123/ground-truth.csv",
"uri": "https://files.galtea.ai/tests/test_123/test.csv",
"error": "<string>",
"status": "SUCCESS",
"fewShot": "Example few-shot learning data",
"languageCode": "es-MX",
"backgroundNoiseProfile": "street",
"backgroundNoiseLevel": "medium",
"variants": [
"rag",
"summarization"
],
"customVariantDescription": "Custom variant description",
"strategies": [
"original"
],
"customUserPersona": "Business analyst",
"maxTestCases": 100,
"sourceTestId": "<string>",
"dataCatalogUri": "https://files.galtea.ai/tests/test_123/data-catalog.json",
"metadata": {
"key": "value"
},
"specificationId": "spec_123",
"isExtendable": true,
"createdAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
]
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Generate dataset configuration from specifications
Derives dataset type, variant, and name from specifications (rule-based).
With automaticCreation: true this does more than return a suggestion: it creates the datasets and their test-case generation continues on the background worker, so each one comes back with status PENDING.
Accuracy (QUALITY) specifications need groundTruthUri, a knowledge base file uploaded beforehand, because an accuracy dataset grades answers against known-correct ones and a specification never states what the correct answer is.
Behavior (SCENARIOS) specifications can take dataCatalogUri, a data catalog file uploaded beforehand, so the generated scenarios use the product’s real values instead of invented ones. It is optional, one catalog covers every behavior dataset the call creates, and it is ignored for the other test types.
See Datasets.
curl --request POST \
--url https://api.galtea.ai/tests/generate-config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"specificationIds": [
"spec_123",
"spec_456"
],
"automaticCreation": false,
"maxTestCases": 30,
"groundTruthUri": "<string>",
"dataCatalogUri": "<string>",
"languageCode": "es-ES"
}
'import requests
url = "https://api.galtea.ai/tests/generate-config"
payload = {
"specificationIds": ["spec_123", "spec_456"],
"automaticCreation": False,
"maxTestCases": 30,
"groundTruthUri": "<string>",
"dataCatalogUri": "<string>",
"languageCode": "es-ES"
}
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({
specificationIds: ['spec_123', 'spec_456'],
automaticCreation: false,
maxTestCases: 30,
groundTruthUri: '<string>',
dataCatalogUri: '<string>',
languageCode: 'es-ES'
})
};
fetch('https://api.galtea.ai/tests/generate-config', 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/tests/generate-config",
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([
'specificationIds' => [
'spec_123',
'spec_456'
],
'automaticCreation' => false,
'maxTestCases' => 30,
'groundTruthUri' => '<string>',
'dataCatalogUri' => '<string>',
'languageCode' => 'es-ES'
]),
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/tests/generate-config"
payload := strings.NewReader("{\n \"specificationIds\": [\n \"spec_123\",\n \"spec_456\"\n ],\n \"automaticCreation\": false,\n \"maxTestCases\": 30,\n \"groundTruthUri\": \"<string>\",\n \"dataCatalogUri\": \"<string>\",\n \"languageCode\": \"es-ES\"\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/tests/generate-config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"specificationIds\": [\n \"spec_123\",\n \"spec_456\"\n ],\n \"automaticCreation\": false,\n \"maxTestCases\": 30,\n \"groundTruthUri\": \"<string>\",\n \"dataCatalogUri\": \"<string>\",\n \"languageCode\": \"es-ES\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/tests/generate-config")
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 \"specificationIds\": [\n \"spec_123\",\n \"spec_456\"\n ],\n \"automaticCreation\": false,\n \"maxTestCases\": 30,\n \"groundTruthUri\": \"<string>\",\n \"dataCatalogUri\": \"<string>\",\n \"languageCode\": \"es-ES\"\n}"
response = http.request(request)
puts response.read_body{
"config": [
{
"name": "Scenarios for polite refusals",
"type": "SCENARIOS",
"specificationId": "spec_123",
"productId": "prod_123",
"maxTestCases": 30,
"variants": [
"custom"
],
"customVariantDescription": "<string>",
"strategies": [
"written"
],
"languageCode": "es-ES"
}
],
"tests": [
{
"id": "test_123",
"productId": "prod_123",
"userId": "user_123",
"name": "Quality Test",
"type": "QUALITY",
"models": [
"gpt-4",
"claude-3"
],
"groundTruthUri": "https://files.galtea.ai/tests/test_123/ground-truth.csv",
"uri": "https://files.galtea.ai/tests/test_123/test.csv",
"error": "<string>",
"status": "SUCCESS",
"fewShot": "Example few-shot learning data",
"languageCode": "es-MX",
"backgroundNoiseProfile": "street",
"backgroundNoiseLevel": "medium",
"variants": [
"rag",
"summarization"
],
"customVariantDescription": "Custom variant description",
"strategies": [
"original"
],
"customUserPersona": "Business analyst",
"maxTestCases": 100,
"sourceTestId": "<string>",
"dataCatalogUri": "https://files.galtea.ai/tests/test_123/data-catalog.json",
"metadata": {
"key": "value"
},
"specificationId": "spec_123",
"isExtendable": true,
"createdAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
]
}{
"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
IDs of the specifications to generate dataset configs for
1["spec_123", "spec_456"]
When true, creates the datasets from the generated config and starts their test-case generation on the background worker.
false
How many test cases to generate per dataset. Defaults to 3. The upper limit is per test type and deployment-configured, and is enforced when the dataset is created (automaticCreation: true).
x > 030
Presigned upload URL of the knowledge base file, uploaded beforehand. Required for accuracy (QUALITY) specifications, ignored for the other test types.
Presigned upload URL of the data catalog file, uploaded beforehand. Grounds the generated scenarios in real domain values instead of invented ones. Optional for behavior (SCENARIOS) specifications, ignored for the other test types. A call whose specifications are all accuracy or security drops the file and still succeeds.
Language the generated test cases are written in, as a BCP-47 tag (es, es-ES) or a language name. The value is stored on the dataset as languageCode. Generated test text keeps the base language; the region subtag selects the regional variety in simulated user messages and voice synthesis. Optional. Omit it and the generator picks the language itself. The allowed set is the same for every test type, so one value covers every specification in the call.
"es-ES"
Response
Dataset configuration generated, and the datasets created when asked for