curl --request POST \
--url https://api.getbluejay.ai/v1/create-custom-metric \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <x-api-key>' \
--data '
{
"name": "<string>",
"bluejay_as_code_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_id": 123,
"agent_ids": [
123
],
"prompt": "<string>",
"summary": "<string>",
"metric_type": "llm_judge",
"settings": {},
"eval_segment": "all",
"scope": "all",
"min_value": 123,
"max_value": 123,
"category": "<string>",
"tags": [
"<string>"
],
"scoring_guidance": "<string>",
"eval_modality": "AUTO",
"model": "<string>",
"audio_model": "<string>",
"temperature": 123,
"enum_options": [
"<string>"
],
"tool_names": [
"<string>"
],
"json_schema": {},
"allow_not_applicable": false,
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.getbluejay.ai/v1/create-custom-metric"
payload = {
"name": "<string>",
"bluejay_as_code_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_id": 123,
"agent_ids": [123],
"prompt": "<string>",
"summary": "<string>",
"metric_type": "llm_judge",
"settings": {},
"eval_segment": "all",
"scope": "all",
"min_value": 123,
"max_value": 123,
"category": "<string>",
"tags": ["<string>"],
"scoring_guidance": "<string>",
"eval_modality": "AUTO",
"model": "<string>",
"audio_model": "<string>",
"temperature": 123,
"enum_options": ["<string>"],
"tool_names": ["<string>"],
"json_schema": {},
"allow_not_applicable": False,
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-API-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
bluejay_as_code_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agent_id: 123,
agent_ids: [123],
prompt: '<string>',
summary: '<string>',
metric_type: 'llm_judge',
settings: {},
eval_segment: 'all',
scope: 'all',
min_value: 123,
max_value: 123,
category: '<string>',
tags: ['<string>'],
scoring_guidance: '<string>',
eval_modality: 'AUTO',
model: '<string>',
audio_model: '<string>',
temperature: 123,
enum_options: ['<string>'],
tool_names: ['<string>'],
json_schema: {},
allow_not_applicable: false,
template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.getbluejay.ai/v1/create-custom-metric', 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.getbluejay.ai/v1/create-custom-metric",
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([
'name' => '<string>',
'bluejay_as_code_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agent_id' => 123,
'agent_ids' => [
123
],
'prompt' => '<string>',
'summary' => '<string>',
'metric_type' => 'llm_judge',
'settings' => [
],
'eval_segment' => 'all',
'scope' => 'all',
'min_value' => 123,
'max_value' => 123,
'category' => '<string>',
'tags' => [
'<string>'
],
'scoring_guidance' => '<string>',
'eval_modality' => 'AUTO',
'model' => '<string>',
'audio_model' => '<string>',
'temperature' => 123,
'enum_options' => [
'<string>'
],
'tool_names' => [
'<string>'
],
'json_schema' => [
],
'allow_not_applicable' => false,
'template_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <x-api-key>"
],
]);
$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.getbluejay.ai/v1/create-custom-metric"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"bluejay_as_code_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_id\": 123,\n \"agent_ids\": [\n 123\n ],\n \"prompt\": \"<string>\",\n \"summary\": \"<string>\",\n \"metric_type\": \"llm_judge\",\n \"settings\": {},\n \"eval_segment\": \"all\",\n \"scope\": \"all\",\n \"min_value\": 123,\n \"max_value\": 123,\n \"category\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scoring_guidance\": \"<string>\",\n \"eval_modality\": \"AUTO\",\n \"model\": \"<string>\",\n \"audio_model\": \"<string>\",\n \"temperature\": 123,\n \"enum_options\": [\n \"<string>\"\n ],\n \"tool_names\": [\n \"<string>\"\n ],\n \"json_schema\": {},\n \"allow_not_applicable\": false,\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<x-api-key>")
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.getbluejay.ai/v1/create-custom-metric")
.header("X-API-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"bluejay_as_code_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_id\": 123,\n \"agent_ids\": [\n 123\n ],\n \"prompt\": \"<string>\",\n \"summary\": \"<string>\",\n \"metric_type\": \"llm_judge\",\n \"settings\": {},\n \"eval_segment\": \"all\",\n \"scope\": \"all\",\n \"min_value\": 123,\n \"max_value\": 123,\n \"category\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scoring_guidance\": \"<string>\",\n \"eval_modality\": \"AUTO\",\n \"model\": \"<string>\",\n \"audio_model\": \"<string>\",\n \"temperature\": 123,\n \"enum_options\": [\n \"<string>\"\n ],\n \"tool_names\": [\n \"<string>\"\n ],\n \"json_schema\": {},\n \"allow_not_applicable\": false,\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/create-custom-metric")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"bluejay_as_code_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_id\": 123,\n \"agent_ids\": [\n 123\n ],\n \"prompt\": \"<string>\",\n \"summary\": \"<string>\",\n \"metric_type\": \"llm_judge\",\n \"settings\": {},\n \"eval_segment\": \"all\",\n \"scope\": \"all\",\n \"min_value\": 123,\n \"max_value\": 123,\n \"category\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scoring_guidance\": \"<string>\",\n \"eval_modality\": \"AUTO\",\n \"model\": \"<string>\",\n \"audio_model\": \"<string>\",\n \"temperature\": 123,\n \"enum_options\": [\n \"<string>\"\n ],\n \"tool_names\": [\n \"<string>\"\n ],\n \"json_schema\": {},\n \"allow_not_applicable\": false,\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"response_type": "pass_fail",
"created_at": "2023-11-07T05:31:56Z",
"bluejay_as_code_id": "<string>",
"prompt": "<string>",
"description": "<string>",
"summary": "<string>",
"metric_type": "llm_judge",
"eval_method": "llm_judge",
"settings": {},
"eval_segment": "all",
"scope": "all",
"agent_ids": [
123
],
"min_value": 123,
"max_value": 123,
"category": "<string>",
"tags": [
"<string>"
],
"scoring_guidance": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"updated_by": "<string>",
"created_by": "<string>",
"eval_modality": "AUDIO",
"model": "<string>",
"audio_model": "<string>",
"temperature": 123,
"enum_options": [
"<string>"
],
"tool_names": [
"<string>"
],
"json_schema": {},
"allow_not_applicable": false,
"eval_modality_auto_selected": false,
"template_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Create Custom Metric
Create a new custom metric.
curl --request POST \
--url https://api.getbluejay.ai/v1/create-custom-metric \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <x-api-key>' \
--data '
{
"name": "<string>",
"bluejay_as_code_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_id": 123,
"agent_ids": [
123
],
"prompt": "<string>",
"summary": "<string>",
"metric_type": "llm_judge",
"settings": {},
"eval_segment": "all",
"scope": "all",
"min_value": 123,
"max_value": 123,
"category": "<string>",
"tags": [
"<string>"
],
"scoring_guidance": "<string>",
"eval_modality": "AUTO",
"model": "<string>",
"audio_model": "<string>",
"temperature": 123,
"enum_options": [
"<string>"
],
"tool_names": [
"<string>"
],
"json_schema": {},
"allow_not_applicable": false,
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.getbluejay.ai/v1/create-custom-metric"
payload = {
"name": "<string>",
"bluejay_as_code_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_id": 123,
"agent_ids": [123],
"prompt": "<string>",
"summary": "<string>",
"metric_type": "llm_judge",
"settings": {},
"eval_segment": "all",
"scope": "all",
"min_value": 123,
"max_value": 123,
"category": "<string>",
"tags": ["<string>"],
"scoring_guidance": "<string>",
"eval_modality": "AUTO",
"model": "<string>",
"audio_model": "<string>",
"temperature": 123,
"enum_options": ["<string>"],
"tool_names": ["<string>"],
"json_schema": {},
"allow_not_applicable": False,
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-API-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
bluejay_as_code_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agent_id: 123,
agent_ids: [123],
prompt: '<string>',
summary: '<string>',
metric_type: 'llm_judge',
settings: {},
eval_segment: 'all',
scope: 'all',
min_value: 123,
max_value: 123,
category: '<string>',
tags: ['<string>'],
scoring_guidance: '<string>',
eval_modality: 'AUTO',
model: '<string>',
audio_model: '<string>',
temperature: 123,
enum_options: ['<string>'],
tool_names: ['<string>'],
json_schema: {},
allow_not_applicable: false,
template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.getbluejay.ai/v1/create-custom-metric', 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.getbluejay.ai/v1/create-custom-metric",
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([
'name' => '<string>',
'bluejay_as_code_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agent_id' => 123,
'agent_ids' => [
123
],
'prompt' => '<string>',
'summary' => '<string>',
'metric_type' => 'llm_judge',
'settings' => [
],
'eval_segment' => 'all',
'scope' => 'all',
'min_value' => 123,
'max_value' => 123,
'category' => '<string>',
'tags' => [
'<string>'
],
'scoring_guidance' => '<string>',
'eval_modality' => 'AUTO',
'model' => '<string>',
'audio_model' => '<string>',
'temperature' => 123,
'enum_options' => [
'<string>'
],
'tool_names' => [
'<string>'
],
'json_schema' => [
],
'allow_not_applicable' => false,
'template_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <x-api-key>"
],
]);
$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.getbluejay.ai/v1/create-custom-metric"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"bluejay_as_code_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_id\": 123,\n \"agent_ids\": [\n 123\n ],\n \"prompt\": \"<string>\",\n \"summary\": \"<string>\",\n \"metric_type\": \"llm_judge\",\n \"settings\": {},\n \"eval_segment\": \"all\",\n \"scope\": \"all\",\n \"min_value\": 123,\n \"max_value\": 123,\n \"category\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scoring_guidance\": \"<string>\",\n \"eval_modality\": \"AUTO\",\n \"model\": \"<string>\",\n \"audio_model\": \"<string>\",\n \"temperature\": 123,\n \"enum_options\": [\n \"<string>\"\n ],\n \"tool_names\": [\n \"<string>\"\n ],\n \"json_schema\": {},\n \"allow_not_applicable\": false,\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<x-api-key>")
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.getbluejay.ai/v1/create-custom-metric")
.header("X-API-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"bluejay_as_code_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_id\": 123,\n \"agent_ids\": [\n 123\n ],\n \"prompt\": \"<string>\",\n \"summary\": \"<string>\",\n \"metric_type\": \"llm_judge\",\n \"settings\": {},\n \"eval_segment\": \"all\",\n \"scope\": \"all\",\n \"min_value\": 123,\n \"max_value\": 123,\n \"category\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scoring_guidance\": \"<string>\",\n \"eval_modality\": \"AUTO\",\n \"model\": \"<string>\",\n \"audio_model\": \"<string>\",\n \"temperature\": 123,\n \"enum_options\": [\n \"<string>\"\n ],\n \"tool_names\": [\n \"<string>\"\n ],\n \"json_schema\": {},\n \"allow_not_applicable\": false,\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/create-custom-metric")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"bluejay_as_code_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_id\": 123,\n \"agent_ids\": [\n 123\n ],\n \"prompt\": \"<string>\",\n \"summary\": \"<string>\",\n \"metric_type\": \"llm_judge\",\n \"settings\": {},\n \"eval_segment\": \"all\",\n \"scope\": \"all\",\n \"min_value\": 123,\n \"max_value\": 123,\n \"category\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"scoring_guidance\": \"<string>\",\n \"eval_modality\": \"AUTO\",\n \"model\": \"<string>\",\n \"audio_model\": \"<string>\",\n \"temperature\": 123,\n \"enum_options\": [\n \"<string>\"\n ],\n \"tool_names\": [\n \"<string>\"\n ],\n \"json_schema\": {},\n \"allow_not_applicable\": false,\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"response_type": "pass_fail",
"created_at": "2023-11-07T05:31:56Z",
"bluejay_as_code_id": "<string>",
"prompt": "<string>",
"description": "<string>",
"summary": "<string>",
"metric_type": "llm_judge",
"eval_method": "llm_judge",
"settings": {},
"eval_segment": "all",
"scope": "all",
"agent_ids": [
123
],
"min_value": 123,
"max_value": 123,
"category": "<string>",
"tags": [
"<string>"
],
"scoring_guidance": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"updated_by": "<string>",
"created_by": "<string>",
"eval_modality": "AUDIO",
"model": "<string>",
"audio_model": "<string>",
"temperature": 123,
"enum_options": [
"<string>"
],
"tool_names": [
"<string>"
],
"json_schema": {},
"allow_not_applicable": false,
"eval_modality_auto_selected": false,
"template_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}# Bluejay — Testing & Monitoring Platform for Conversational AI Agents
You are a senior backend engineer integrating the Bluejay API. Think step-by-step: first understand the endpoint, then plan the integration, then implement with minimal changes.
## Create Custom Metric — POST /v1/create-custom-metric
> **What this endpoint does:** Create a new custom metric.
**Endpoint:** POST `https://api.getbluejay.ai/v1/create-custom-metric`
**Auth:** `X-API-Key` header
**Content-Type:** application/json
### Required Parameters
| Name | Type | Description |
|------|------|-------------|
| X-API-Key | string | API key required to authenticate requests. |
| name | string | Name of the custom metric |
| description | string | Description of what this metric measures |
| response_type | string (enum: pass_fail, yes_no, qualitative, quantitative, json, enum) | Enum representing the possible response types for custom metrics. |
Review the full parameter list at https://docs.getbluejay.ai/api-reference/endpoint/create-custom-metric and include any optional parameters (e.g., `agent_id`, `agent_ids`, `min_value`, `max_value`, `category`, `tags`) that serve your integration's use case and align with Bluejay's testing and monitoring capabilities.
### Request Body (required fields)
```json
{
"name": "example_name",
"description": "string",
"response_type": "pass_fail"
}
```
Refer to the full schema at https://docs.getbluejay.ai/api-reference/endpoint/create-custom-metric. Include optional fields that serve the goal of setting up for testing and monitoring on Bluejay.
### Example
**POST with body:**
```python
import requests
def create_custom_metric(payload: dict, api_key: str) -> dict:
url = "https://api.getbluejay.ai/v1/create-custom-metric"
headers = {"X-API-Key": api_key}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
return response.json()
```
### Constraints
- Minimal changes — only add/change files needed for this integration.
- Match existing codebase patterns (naming, file structure, error handling).
- Include error handling for 422: Validation Error.
### Integration Checklist
Before writing code, verify:
1. Which module/service owns this API domain in the codebase?
2. What HTTP client and error-handling patterns does the project use?
3. Are there existing types/interfaces to extend?
Then implement the integration, export it, and confirm it compiles/passes lint.
Body
Request model for creating a custom metric
Name of the custom metric
Type of response expected
pass_fail, yes_no, qualitative, quantitative, json, enum, int, float, boolean, tool_call Stable code-addressable identifier
ID of the agent this metric belongs to (deprecated, use agent_ids instead)
List of agent IDs to associate this metric with
LLM-judge system prompt (required for llm_judge; null for other types)
Short plain-English description of the metric (LLM-generated)
Specific metric kind (llm_judge, tool_call, audio_*, vocal_fry); legacy alias: type
Type-specific config (e.g. tool_call: {tool_names: [...]})
Which side of the conversation is evaluated
agent, user, all Which pipeline runs this metric
observability, simulations, all Minimum value for quantitative metrics
Maximum value for quantitative metrics
Category for organizing metrics
Tags for categorizing the metric
Guidance on how to score this metric
Evaluation modality AUTO/TEXT/AUDIO; legacy alias: eval_route
AUDIO, TEXT, AUTO Model to use for text evaluation of the metric
Model to use for audio evaluation of the metric
Temperature for evaluating the metric
Options for enum metrics
Expected tool names for tool_call metrics
JSON Schema describing the object the judge must return (required for json metrics)
Whether this metric allows 'not applicable' responses.
Library template this metric was created from
Response
Successful Response
Response model for custom metric operations
Unique identifier for the custom metric
Name of the custom metric
Type of response expected
pass_fail, yes_no, qualitative, quantitative, json, enum, int, float, boolean, tool_call When this metric was created
Stable code-addressable identifier (same as id for custom metrics)
LLM-judge system prompt for this metric (null for non-judge types)
Deprecated: same value as prompt
Short plain-English description of the metric (LLM-generated)
Specific metric kind
Evaluation category (llm_judge|statistical|ml_model|deterministic)
Type-specific config
Which side of the conversation is evaluated (agent|user|all)
Which pipeline runs this metric (observability|simulations|all)
List of agent IDs this metric belongs to
Minimum value for quantitative metrics
Maximum value for quantitative metrics
Category for organizing metrics
Tags for categorizing the metric
Guidance on how to score this metric
When this metric was last updated
User who last updated this metric
User who created this metric
Evaluation modality AUTO/TEXT/AUDIO
AUDIO, TEXT, AUTO Model to use for text evaluation of the metric
Model to use for audio evaluation of the metric
Temperature for evaluating the metric
Options for enum metrics
Deprecated: mirror of settings.tool_names for tool_call metrics
JSON Schema describing the object the judge must return (json metrics only)
Whether this metric allows 'not applicable' responses.
Deprecated: always false (column removed).
Library template this metric was created from