Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.junit.jupiter.api.Test;

public class BraintrustGenAITest {
private static final String MODEL_ID = "gemini-3.1-flash-lite-preview";
private static final ObjectMapper JSON_MAPPER = new ObjectMapper();

@BeforeAll
Expand Down Expand Up @@ -47,7 +48,7 @@ void testWrapGemini() {

var response =
geminiClient.models.generateContent(
"gemini-2.0-flash-lite", "What is the capital of France?", config);
MODEL_ID, "What is the capital of France?", config);

// Verify the response
assertNotNull(response);
Expand All @@ -67,7 +68,7 @@ void testWrapGemini() {
assertNotNull(metadataJson, "braintrust.metadata should be set");
var metadata = JSON_MAPPER.readTree(metadataJson);
assertEquals("gemini", metadata.get("provider").asText());
assertEquals("gemini-2.0-flash-lite", metadata.get("model").asText());
assertEquals(MODEL_ID, metadata.get("model").asText());
assertEquals(0.0, metadata.get("temperature").asDouble());
assertEquals(50, metadata.get("maxOutputTokens").asInt());

Expand All @@ -91,7 +92,7 @@ void testWrapGemini() {
span.getAttributes().get(AttributeKey.stringKey("braintrust.input_json"));
assertNotNull(inputJson, "braintrust.input_json should be set");
var input = JSON_MAPPER.readTree(inputJson);
assertEquals("gemini-2.0-flash-lite", input.get("model").asText());
assertEquals(MODEL_ID, input.get("model").asText());
assertTrue(input.has("contents"), "input should have contents");
assertTrue(input.has("config"), "input should have config");

Expand Down Expand Up @@ -123,7 +124,7 @@ void testWrapGeminiAsync() {
// Call async method and wait for completion
var responseFuture =
geminiClient.async.models.generateContent(
"gemini-2.0-flash-lite", "What is the capital of Germany?", config);
MODEL_ID, "What is the capital of Germany?", config);

var response = responseFuture.get(); // Wait for completion

Expand All @@ -145,7 +146,7 @@ void testWrapGeminiAsync() {
assertNotNull(metadataJson, "braintrust.metadata should be set");
var metadata = JSON_MAPPER.readTree(metadataJson);
assertEquals("gemini", metadata.get("provider").asText());
assertEquals("gemini-2.0-flash-lite", metadata.get("model").asText());
assertEquals(MODEL_ID, metadata.get("model").asText());
assertEquals(0.0, metadata.get("temperature").asDouble());
assertEquals(50, metadata.get("maxOutputTokens").asInt());

Expand All @@ -169,7 +170,7 @@ void testWrapGeminiAsync() {
span.getAttributes().get(AttributeKey.stringKey("braintrust.input_json"));
assertNotNull(inputJson, "braintrust.input_json should be set");
var input = JSON_MAPPER.readTree(inputJson);
assertEquals("gemini-2.0-flash-lite", input.get("model").asText());
assertEquals(MODEL_ID, input.get("model").asText());
assertTrue(input.has("contents"), "input should have contents");
assertTrue(input.has("config"), "input should have config");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"id" : "29a53860-e392-4587-ba18-bba1d2e1b581",
"name" : "otel_v1_traces",
"request" : {
"url" : "/otel/v1/traces",
"method" : "POST",
"headers" : {
"Content-Type" : {
"equalTo" : "application/x-protobuf"
}
},
"bodyPatterns" : [ {
"binaryEqualTo" : "CogKCrgBCiAKDHNlcnZpY2UubmFtZRIQCg5icmFpbnRydXN0LWFwcAooCg9zZXJ2aWNlLnZlcnNpb24SFQoTMC4zLjQtNjgyMGIwYi1ESVJUWQogChZ0ZWxlbWV0cnkuc2RrLmxhbmd1YWdlEgYKBGphdmEKJQoSdGVsZW1ldHJ5LnNkay5uYW1lEg8KDW9wZW50ZWxlbWV0cnkKIQoVdGVsZW1ldHJ5LnNkay52ZXJzaW9uEggKBjEuNTkuMBLKCAoRCg9icmFpbnRydXN0LWphdmEStAgKEHxZUUtff/x0GmdwpB715GASCAq8fihaIP7WKhBnZW5lcmF0ZV9jb250ZW50MAM5gNthbbYKqxhBkHCyqbYKqxhKygEKFWJyYWludHJ1c3QuaW5wdXRfanNvbhKwAQqtAXsiY29udGVudHMiOlt7InBhcnRzIjpbeyJ0ZXh0IjoiV2hhdCBpcyB0aGUgY2FwaXRhbCBvZiBHZXJtYW55PyJ9XSwicm9sZSI6InVzZXIifV0sIm1vZGVsIjoiZ2VtaW5pLTMuMS1mbGFzaC1saXRlLXByZXZpZXciLCJjb25maWciOnsidGVtcGVyYXR1cmUiOjAuMCwibWF4T3V0cHV0VG9rZW5zIjo1MH19Sk0KEmJyYWludHJ1c3QubWV0cmljcxI3CjV7ImNvbXBsZXRpb25fdG9rZW5zIjo3LCJwcm9tcHRfdG9rZW5zIjo4LCJ0b2tlbnMiOjE1fUouChpicmFpbnRydXN0LnNwYW5fYXR0cmlidXRlcxIQCg57InR5cGUiOiJsbG0ifUoyChFicmFpbnRydXN0LnBhcmVudBIdChtwcm9qZWN0X25hbWU6amF2YS11bml0LXRlc3RK5gMKFmJyYWludHJ1c3Qub3V0cHV0X2pzb24SywMKyAN7ImNhbmRpZGF0ZXMiOlt7ImNvbnRlbnQiOnsicGFydHMiOlt7InRleHQiOiJUaGUgY2FwaXRhbCBvZiBHZXJtYW55IGlzIEJlcmxpbi4iLCJ0aG91Z2h0U2lnbmF0dXJlIjoiRWpRS01nRU1PZGJIK21KSzB4VnhXb25QOWV6WklhL1FhU1BKeTJ1U0FiMFdlUEdsRi9tVFVDRVJRczc1dE14NDZnUzlVeHNEIn1dLCJyb2xlIjoibW9kZWwifSwiZmluaXNoUmVhc29uIjoiU1RPUCIsImluZGV4IjowfV0sInVzYWdlTWV0YWRhdGEiOnsicHJvbXB0VG9rZW5Db3VudCI6OCwiY2FuZGlkYXRlc1Rva2VuQ291bnQiOjcsInRvdGFsVG9rZW5Db3VudCI6MTUsInByb21wdFRva2Vuc0RldGFpbHMiOlt7Im1vZGFsaXR5IjoiVEVYVCIsInRva2VuQ291bnQiOjh9XX0sIm1vZGVsVmVyc2lvbiI6ImdlbWluaS0zLjEtZmxhc2gtbGl0ZS1wcmV2aWV3IiwicmVzcG9uc2VJZCI6IjhlWHlhZGo0SU1UaXF0c1BwN2JpOFFNIn1KfQoTYnJhaW50cnVzdC5tZXRhZGF0YRJmCmR7InByb3ZpZGVyIjoiZ2VtaW5pIiwidGVtcGVyYXR1cmUiOjAuMCwibW9kZWwiOiJnZW1pbmktMy4xLWZsYXNoLWxpdGUtcHJldmlldyIsIm1heE91dHB1dFRva2VucyI6NTB9egIYAYUBAQEAAA=="
} ]
},
"response" : {
"status" : 200,
"headers" : {
"X-Cache" : "Miss from cloudfront",
"x-amz-apigw-id" : "cnjd2HUEoAMEduQ=",
"vary" : "Origin",
"x-amzn-Remapped-content-length" : "0",
"X-Amz-Cf-Pop" : [ "SEA900-P1", "SEA900-P10" ],
"X-Amzn-Trace-Id" : "Root=1-69f2e5f1-6e22bcc6160c24fd03aed954;Parent=0bc473e98f7d08ec;Sampled=0;Lineage=1:24be3d11:0",
"Date" : "Thu, 30 Apr 2026 05:17:38 GMT",
"Via" : "1.1 8022fb6dd967fd5734dda3b51415b460.cloudfront.net (CloudFront), 1.1 65f2e9f7f1475de54aa452d3ceb9bcf6.cloudfront.net (CloudFront)",
"access-control-expose-headers" : "x-bt-cursor,x-bt-found-existing,x-bt-query-plan,x-bt-api-duration-ms,x-bt-brainstore-duration-ms,x-bt-internal-trace-id",
"access-control-allow-credentials" : "true",
"x-bt-internal-trace-id" : "69f2e5f100000000169650fc41b6cab8",
"x-amzn-RequestId" : "16496122-d01d-4764-bf5b-9326d91755c4",
"X-Amz-Cf-Id" : "-Vzypmbtmq6NjThWrP5oJLxtZKHPT7JaWI_uf0kRU3N_wpXK7q6UfQ==",
"etag" : "W/\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"",
"Content-Type" : "application/x-protobuf"
}
},
"uuid" : "29a53860-e392-4587-ba18-bba1d2e1b581",
"persistent" : true,
"insertionIndex" : 237
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"id" : "3c47c7ba-8cf2-43e1-a9cc-a1e8aa985f65",
"name" : "otel_v1_traces",
"request" : {
"url" : "/otel/v1/traces",
"method" : "POST",
"headers" : {
"Content-Type" : {
"equalTo" : "application/x-protobuf"
}
},
"bodyPatterns" : [ {
"binaryEqualTo" : "CoUKCrgBCiAKDHNlcnZpY2UubmFtZRIQCg5icmFpbnRydXN0LWFwcAooCg9zZXJ2aWNlLnZlcnNpb24SFQoTMC4zLjQtNjgyMGIwYi1ESVJUWQogChZ0ZWxlbWV0cnkuc2RrLmxhbmd1YWdlEgYKBGphdmEKJQoSdGVsZW1ldHJ5LnNkay5uYW1lEg8KDW9wZW50ZWxlbWV0cnkKIQoVdGVsZW1ldHJ5LnNkay52ZXJzaW9uEggKBjEuNTkuMBLHCAoRCg9icmFpbnRydXN0LWphdmESsQgKEIJtWjsd38UI78ctbaGWXloSCPxHOTwfRWs9KhBnZW5lcmF0ZV9jb250ZW50MAM5ID7b17YKqxhB5yBjFLcKqxhKyQEKFWJyYWludHJ1c3QuaW5wdXRfanNvbhKvAQqsAXsiY29udGVudHMiOlt7InBhcnRzIjpbeyJ0ZXh0IjoiV2hhdCBpcyB0aGUgY2FwaXRhbCBvZiBGcmFuY2U/In1dLCJyb2xlIjoidXNlciJ9XSwibW9kZWwiOiJnZW1pbmktMy4xLWZsYXNoLWxpdGUtcHJldmlldyIsImNvbmZpZyI6eyJ0ZW1wZXJhdHVyZSI6MC4wLCJtYXhPdXRwdXRUb2tlbnMiOjUwfX1KTQoSYnJhaW50cnVzdC5tZXRyaWNzEjcKNXsiY29tcGxldGlvbl90b2tlbnMiOjcsInByb21wdF90b2tlbnMiOjgsInRva2VucyI6MTV9Si4KGmJyYWludHJ1c3Quc3Bhbl9hdHRyaWJ1dGVzEhAKDnsidHlwZSI6ImxsbSJ9SjIKEWJyYWludHJ1c3QucGFyZW50Eh0KG3Byb2plY3RfbmFtZTpqYXZhLXVuaXQtdGVzdErkAwoWYnJhaW50cnVzdC5vdXRwdXRfanNvbhLJAwrGA3siY2FuZGlkYXRlcyI6W3siY29udGVudCI6eyJwYXJ0cyI6W3sidGV4dCI6IlRoZSBjYXBpdGFsIG9mIEZyYW5jZSBpcyBQYXJpcy4iLCJ0aG91Z2h0U2lnbmF0dXJlIjoiRWpRS01nRU1PZGJIWSttM0NETkJLUU05ZEN4VVptUXh6ZUJRNVp4aWcvS2wzdTljVE1IMDNnQUx4ZXFIaHlLdm9QV21OTlFmIn1dLCJyb2xlIjoibW9kZWwifSwiZmluaXNoUmVhc29uIjoiU1RPUCIsImluZGV4IjowfV0sInVzYWdlTWV0YWRhdGEiOnsicHJvbXB0VG9rZW5Db3VudCI6OCwiY2FuZGlkYXRlc1Rva2VuQ291bnQiOjcsInRvdGFsVG9rZW5Db3VudCI6MTUsInByb21wdFRva2Vuc0RldGFpbHMiOlt7Im1vZGFsaXR5IjoiVEVYVCIsInRva2VuQ291bnQiOjh9XX0sIm1vZGVsVmVyc2lvbiI6ImdlbWluaS0zLjEtZmxhc2gtbGl0ZS1wcmV2aWV3IiwicmVzcG9uc2VJZCI6IjgtWHlhY19hRnItaHF0c1B5ZnVaeVFNIn1KfQoTYnJhaW50cnVzdC5tZXRhZGF0YRJmCmR7InByb3ZpZGVyIjoiZ2VtaW5pIiwidGVtcGVyYXR1cmUiOjAuMCwibW9kZWwiOiJnZW1pbmktMy4xLWZsYXNoLWxpdGUtcHJldmlldyIsIm1heE91dHB1dFRva2VucyI6NTB9egIYAYUBAQEAAA=="
} ]
},
"response" : {
"status" : 200,
"headers" : {
"X-Cache" : "Miss from cloudfront",
"x-amz-apigw-id" : "cnjeHF1tIAMEQhQ=",
"vary" : "Origin",
"x-amzn-Remapped-content-length" : "0",
"X-Amz-Cf-Pop" : [ "SEA900-P1", "SEA900-P10" ],
"X-Amzn-Trace-Id" : "Root=1-69f2e5f3-53624e1730f79ca622013814;Parent=54812060e0a57d2a;Sampled=0;Lineage=1:24be3d11:0",
"Date" : "Thu, 30 Apr 2026 05:17:39 GMT",
"Via" : "1.1 49e28fce48b0172be48e0ceea533547e.cloudfront.net (CloudFront), 1.1 65f2e9f7f1475de54aa452d3ceb9bcf6.cloudfront.net (CloudFront)",
"access-control-expose-headers" : "x-bt-cursor,x-bt-found-existing,x-bt-query-plan,x-bt-api-duration-ms,x-bt-brainstore-duration-ms,x-bt-internal-trace-id",
"access-control-allow-credentials" : "true",
"x-bt-internal-trace-id" : "69f2e5f3000000003f51a2c2be3233fb",
"x-amzn-RequestId" : "62d09c75-ba6c-4a34-82ae-12031fa4a209",
"X-Amz-Cf-Id" : "pNZQyH3g86Fgrataim4KqzWlvl__0CeZGVfsiVIbQeHWDApkQpmSyA==",
"etag" : "W/\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"",
"Content-Type" : "application/x-protobuf"
}
},
"uuid" : "3c47c7ba-8cf2-43e1-a9cc-a1e8aa985f65",
"persistent" : true,
"insertionIndex" : 236
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"candidates": [
{
"content": {
"parts": [
{
"text": "The capital of France is Paris.",
"thoughtSignature": "EjQKMgEMOdbHY+m3CDNBKQM9dCxUZmQxzeBQ5Zxig/Kl3u9cTMH03gALxeqHhyKvoPWmNNQf"
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0
}
],
"usageMetadata": {
"promptTokenCount": 8,
"candidatesTokenCount": 7,
"totalTokenCount": 15,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 8
}
]
},
"modelVersion": "gemini-3.1-flash-lite-preview",
"responseId": "8-Xyac_aFr-hqtsPyfuZyQM"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"candidates": [
{
"content": {
"parts": [
{
"text": "The capital of Germany is Berlin.",
"thoughtSignature": "EjQKMgEMOdbH+mJK0xVxWonP9ezZIa/QaSPJy2uSAb0WePGlF/mTUCERQs75tMx46gS9UxsD"
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0
}
],
"usageMetadata": {
"promptTokenCount": 8,
"candidatesTokenCount": 7,
"totalTokenCount": 15,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 8
}
]
},
"modelVersion": "gemini-3.1-flash-lite-preview",
"responseId": "8eXyadj4IMTiqtsPp7bi8QM"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"id" : "75f513a5-d5e4-4ff9-82de-d76ee3cb63a1",
"name" : "v1beta_models_gemini-3.1-flash-lite-previewgeneratecontent",
"request" : {
"url" : "/v1beta/models/gemini-3.1-flash-lite-preview:generateContent",
"method" : "POST",
"headers" : {
"Content-Type" : {
"equalTo" : "application/json; charset=UTF-8"
}
},
"bodyPatterns" : [ {
"equalToJson" : "{\"contents\":[{\"parts\":[{\"text\":\"What is the capital of France?\"}],\"role\":\"user\"}],\"generationConfig\":{\"temperature\":0.0,\"maxOutputTokens\":50}}",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : false
} ]
},
"response" : {
"status" : 200,
"bodyFileName" : "v1beta_models_gemini-3.1-flash-lite-previewgeneratecontent-75f513a5-d5e4-4ff9-82de-d76ee3cb63a1.json",
"headers" : {
"X-Frame-Options" : "SAMEORIGIN",
"Alt-Svc" : "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
"Server" : "scaffolding on HTTPServer2",
"X-Content-Type-Options" : "nosniff",
"Server-Timing" : "gfet4t7; dur=903",
"Vary" : [ "Origin", "X-Origin", "Referer" ],
"X-Gemini-Service-Tier" : "standard",
"X-XSS-Protection" : "0",
"Date" : "Thu, 30 Apr 2026 05:17:39 GMT",
"Content-Type" : "application/json; charset=UTF-8"
}
},
"uuid" : "75f513a5-d5e4-4ff9-82de-d76ee3cb63a1",
"persistent" : true,
"insertionIndex" : 9
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"id" : "a70e7b53-f06e-46fb-9071-2bb08b8090b7",
"name" : "v1beta_models_gemini-3.1-flash-lite-previewgeneratecontent",
"request" : {
"url" : "/v1beta/models/gemini-3.1-flash-lite-preview:generateContent",
"method" : "POST",
"headers" : {
"Content-Type" : {
"equalTo" : "application/json; charset=UTF-8"
}
},
"bodyPatterns" : [ {
"equalToJson" : "{\"contents\":[{\"parts\":[{\"text\":\"What is the capital of Germany?\"}],\"role\":\"user\"}],\"generationConfig\":{\"temperature\":0.0,\"maxOutputTokens\":50}}",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : false
} ]
},
"response" : {
"status" : 200,
"bodyFileName" : "v1beta_models_gemini-3.1-flash-lite-previewgeneratecontent-a70e7b53-f06e-46fb-9071-2bb08b8090b7.json",
"headers" : {
"X-Frame-Options" : "SAMEORIGIN",
"Alt-Svc" : "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
"Server" : "scaffolding on HTTPServer2",
"X-Content-Type-Options" : "nosniff",
"Server-Timing" : "gfet4t7; dur=714",
"Vary" : [ "Origin", "X-Origin", "Referer" ],
"X-Gemini-Service-Tier" : "standard",
"X-XSS-Protection" : "0",
"Date" : "Thu, 30 Apr 2026 05:17:37 GMT",
"Content-Type" : "application/json; charset=UTF-8"
}
},
"uuid" : "a70e7b53-f06e-46fb-9071-2bb08b8090b7",
"persistent" : true,
"insertionIndex" : 10
}
Loading