Skip to content

Commit 73f2b5f

Browse files
committed
wip
1 parent 0489612 commit 73f2b5f

2 files changed

Lines changed: 44 additions & 4 deletions

File tree

examples/src/main/java/dev/braintrust/examples/OpenAIInstrumentationExample.java

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@
33
import com.openai.client.OpenAIClient;
44
import com.openai.client.okhttp.OpenAIOkHttpClient;
55
import com.openai.models.ChatModel;
6+
import com.openai.models.chat.completions.ChatCompletionContentPart;
7+
import com.openai.models.chat.completions.ChatCompletionContentPartImage;
8+
import com.openai.models.chat.completions.ChatCompletionContentPartText;
69
import com.openai.models.chat.completions.ChatCompletionCreateParams;
710
import com.openai.models.chat.completions.ChatCompletionStreamOptions;
11+
import com.openai.models.chat.completions.ChatCompletionUserMessageParam;
812
import dev.braintrust.config.BraintrustConfig;
913
import dev.braintrust.instrumentation.openai.BraintrustOpenAI;
14+
import dev.braintrust.trace.Base64Attachment;
1015
import dev.braintrust.trace.BraintrustTracing;
16+
import java.util.Arrays;
1117

1218
/** Basic OTel + OpenAI instrumentation example */
1319
public class OpenAIInstrumentationExample {
@@ -39,11 +45,44 @@ public static void main(String[] args) throws Exception {
3945
}
4046

4147
private static void chatCompletionsExample(OpenAIClient openAIClient) {
48+
// Load and encode the image using Base64Attachment helper
49+
String imageDataUrl =
50+
Base64Attachment.ofFile(
51+
Base64Attachment.ContentType.IMAGE_JPEG,
52+
"/home/ark/braintrust/java/src/test/java/dev/braintrust/instrumentation/openai/travel-paris-france-poster.jpg")
53+
.getBase64Data();
54+
55+
// Create text content part
56+
ChatCompletionContentPartText textPart =
57+
ChatCompletionContentPartText.builder()
58+
.text("What city and landmark are shown in this travel poster? Describe the image.")
59+
.build();
60+
ChatCompletionContentPart textContentPart = ChatCompletionContentPart.ofText(textPart);
61+
62+
// Create image content part with base64-encoded image
63+
ChatCompletionContentPartImage imagePart =
64+
ChatCompletionContentPartImage.builder()
65+
.imageUrl(
66+
ChatCompletionContentPartImage.ImageUrl.builder()
67+
.url(imageDataUrl)
68+
.detail(ChatCompletionContentPartImage.ImageUrl.Detail.HIGH)
69+
.build())
70+
.build();
71+
ChatCompletionContentPart imageContentPart =
72+
ChatCompletionContentPart.ofImageUrl(imagePart);
73+
74+
// Create user message with both text and image
75+
ChatCompletionUserMessageParam userMessage =
76+
ChatCompletionUserMessageParam.builder()
77+
.contentOfArrayOfContentParts(
78+
Arrays.asList(textContentPart, imageContentPart))
79+
.build();
80+
4281
var request =
4382
ChatCompletionCreateParams.builder()
44-
.model(ChatModel.GPT_4O_MINI)
45-
.addSystemMessage("You are a helpful assistant")
46-
.addUserMessage("What is the capital of France?")
83+
.model(ChatModel.GPT_4O)
84+
.addSystemMessage("You are a helpful assistant that can analyze images")
85+
.addMessage(userMessage)
4786
.temperature(0.0)
4887
.build();
4988
var response = openAIClient.chat().completions().create(request);

src/main/java/dev/braintrust/instrumentation/openai/otel/ChatCompletionEventsHelper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public static void emitPromptLogEvents(
8989
boolean captureMessageContent) {
9090
Span.current()
9191
.setAttribute(
92-
"braintrust.input_json",
92+
"gen_ai.input.messages",
9393
JSON_MAPPER.writeValueAsString(request.messages()));
9494
}
9595

@@ -177,6 +177,7 @@ public static void emitCompletionLogEvents(
177177
} else {
178178
Span.current()
179179
.setAttribute(
180+
// "gen_ai.output.messages",
180181
"braintrust.output_json",
181182
JSON_MAPPER.writeValueAsString(
182183
new ChatCompletionMessage[] {

0 commit comments

Comments
 (0)