diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile
index 1985a379756..a6fce6cbbae 100644
--- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile
+++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile
@@ -61,11 +61,11 @@ com.google.j2objc:j2objc-annotations:2.8=annotationProcessor,latestDepTestAnnota
com.google.j2objc:j2objc-annotations:3.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
com.google.re2j:re2j:1.8=latestDepTestRuntimeClasspath,testRuntimeClasspath
com.openai:openai-java-client-okhttp:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
-com.openai:openai-java-client-okhttp:4.52.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
+com.openai:openai-java-client-okhttp:4.54.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
com.openai:openai-java-core:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
-com.openai:openai-java-core:4.52.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
+com.openai:openai-java-core:4.54.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
com.openai:openai-java:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath
-com.openai:openai-java:4.52.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
+com.openai:openai-java:4.54.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
com.squareup.moshi:moshi:1.11.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath
com.squareup.okhttp3:logging-interceptor:4.12.0=testRuntimeClasspath
@@ -118,7 +118,8 @@ org.hamcrest:hamcrest-core:1.3=latestDepTestRuntimeClasspath,testRuntimeClasspat
org.hamcrest:hamcrest:3.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jctools:jctools-core-jdk11:4.0.6=latestDepTestRuntimeClasspath,testRuntimeClasspath
org.jctools:jctools-core:4.0.6=latestDepTestRuntimeClasspath,testRuntimeClasspath
-org.jetbrains.kotlin:kotlin-reflect:1.8.10=latestDepTestRuntimeClasspath,testRuntimeClasspath
+org.jetbrains.kotlin:kotlin-reflect:1.8.10=testRuntimeClasspath
+org.jetbrains.kotlin:kotlin-reflect:1.8.20=latestDepTestRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0=compileClasspath,latestDepTestCompileClasspath,testCompileClasspath
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10=latestDepTestRuntimeClasspath,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0=compileClasspath,latestDepTestCompileClasspath,testCompileClasspath
diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/FunctionCallOutputExtractor.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/FunctionCallOutputExtractor.java
index 263e7cd9c0e..5578b54b8ef 100644
--- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/FunctionCallOutputExtractor.java
+++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/FunctionCallOutputExtractor.java
@@ -3,13 +3,19 @@
import com.openai.models.responses.ResponseInputItem;
import datadog.trace.util.MethodHandles;
import java.lang.invoke.MethodHandle;
+import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Helper class to handle FunctionCallOutput.output() method changes between openai-java versions.
+ * Helper class to handle FunctionCallOutput method changes between openai-java versions.
*
- *
In version 3.x: output() returns String In version 4.0+: output() returns Output)
+ *
+ * - Version 3.x: {@code output()} returns {@code String}.
+ *
- Version 4.0+: {@code output()} returns {@code Output}.
+ *
- Versions before 4.54: {@code callId()} returns {@code String}.
+ *
- Version 4.54+: {@code callId()} returns {@code Optional}.
+ *
*/
public class FunctionCallOutputExtractor {
private static final Logger log = LoggerFactory.getLogger(FunctionCallOutputExtractor.class);
@@ -19,11 +25,13 @@ public class FunctionCallOutputExtractor {
private static final MethodHandles METHOD_HANDLES =
new MethodHandles(FUNCTION_CALL_OUTPUT_CLASS.getClassLoader());
+ private static final MethodHandle CALL_ID_METHOD;
private static final MethodHandle OUTPUT_METHOD;
private static final MethodHandle IS_STRING_METHOD;
private static final MethodHandle AS_STRING_METHOD;
static {
+ CALL_ID_METHOD = METHOD_HANDLES.method(FUNCTION_CALL_OUTPUT_CLASS, "callId");
OUTPUT_METHOD = METHOD_HANDLES.method(FUNCTION_CALL_OUTPUT_CLASS, "output");
Class> outputClass = null;
@@ -46,6 +54,20 @@ public class FunctionCallOutputExtractor {
}
}
+ public static String getCallIdAsString(ResponseInputItem.FunctionCallOutput functionCallOutput) {
+ try {
+ Object callId = METHOD_HANDLES.invoke(CALL_ID_METHOD, functionCallOutput);
+ if (callId instanceof Optional) {
+ callId = ((Optional>) callId).orElse(null);
+ }
+ if (callId == null || callId instanceof String) {
+ return (String) callId;
+ }
+ } catch (Throwable ignored) {
+ }
+ return null;
+ }
+
public static String getOutputAsString(ResponseInputItem.FunctionCallOutput functionCallOutput) {
try {
Object output = METHOD_HANDLES.invoke(OUTPUT_METHOD, functionCallOutput);
diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java
index 3017fc8b203..bc84471eed2 100644
--- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java
+++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java
@@ -279,7 +279,7 @@ private LLMObs.LLMMessage extractInputItemMessage(ResponseInputItem item) {
Optional functionCallOutput = item.functionCallOutput();
if (functionCallOutput.isPresent()) {
ResponseInputItem.FunctionCallOutput output = functionCallOutput.get();
- String callId = output.callId();
+ String callId = FunctionCallOutputExtractor.getCallIdAsString(output);
String result = FunctionCallOutputExtractor.getOutputAsString(output);
LLMObs.ToolResult toolResult =
LLMObs.ToolResult.from("", "function_call_output", callId, result);
diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy
index 51b770f704b..43228ce9818 100644
--- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy
+++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy
@@ -216,7 +216,7 @@ class ResponseServiceTest extends OpenAiTest {
inputTags[1].toolCalls[0].arguments == [location: "San Francisco, CA"]
inputTags[2].toolResults.size() == 1
inputTags[2].toolResults[0].type == "function_call_output"
- !inputTags.isEmpty()
+ inputTags[2].toolResults[0].toolId == "call_123"
inputTags[2].toolResults[0].result == '{"temperature": "72°F", "conditions": "sunny", "humidity": "65%"}'
where:
diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/resources/http-records/responses/755d8085bf50f933+a6a6805857478a1f.POST.rec b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/resources/http-records/responses/755d8085bf50f933+a6a6805857478a1f.POST.rec
new file mode 100644
index 00000000000..dcd5496943f
--- /dev/null
+++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/resources/http-records/responses/755d8085bf50f933+a6a6805857478a1f.POST.rec
@@ -0,0 +1,153 @@
+method: POST
+path: responses
+-- begin request body --
+{"input":[{"content":[{"text":"What's the weather like in San Francisco?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\": \"San Francisco, CA\"}","call_id":"call_123","name":"get_weather","type":"function_call","id":"fc_123","status":"completed"},{"output":"{\"temperature\": \"72°F\", \"conditions\": \"sunny\", \"humidity\": \"65%\"}","type":"function_call_output","call_id":"call_123"}],"model":"gpt-4.1","temperature":0.1,"stream":true}
+-- end request body --
+status code: 200
+-- begin response headers --
+alt-svc: h3=":443"; ma=86400
+cf-cache-status: DYNAMIC
+cf-ray: 9c53e19d7c2bb9a9-SEA
+content-type: text/event-stream; charset=utf-8
+date: Wed, 28 Jan 2026 22:21:11 GMT
+openai-organization: datadog-staging
+openai-processing-ms: 69
+openai-project: proj_gt6TQZPRbZfoY2J9AQlEJMpd
+openai-version: 2020-10-01
+server: cloudflare
+strict-transport-security: max-age=31536000; includeSubDomains; preload
+x-content-type-options: nosniff
+x-request-id: req_85bffa15135e45a6b841e22ba3907f35
+-- end response headers --
+-- begin response body --
+event: response.created
+data: {"type":"response.created","response":{"id":"resp_05235bb0911aa18f01697a8bd6f31c8194a36b60c9b16f8ee8","object":"response","created_at":1769638870,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4.1-2025-04-14","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":0.1,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0}
+
+event: response.in_progress
+data: {"type":"response.in_progress","response":{"id":"resp_05235bb0911aa18f01697a8bd6f31c8194a36b60c9b16f8ee8","object":"response","created_at":1769638870,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4.1-2025-04-14","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":0.1,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1}
+
+event: response.output_item.added
+data: {"type":"response.output_item.added","item":{"id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","type":"message","status":"in_progress","content":[],"role":"assistant"},"output_index":0,"sequence_number":2}
+
+event: response.content_part.added
+data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":3}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":"The","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"JtK5H8vlsWwhZ","output_index":0,"sequence_number":4}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" current","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"SY1y6r9Y","output_index":0,"sequence_number":5}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" weather","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"KSXuXi7m","output_index":0,"sequence_number":6}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" in","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"fNQqKal1fHyqA","output_index":0,"sequence_number":7}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" San","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"E2w4qCcwSuRS","output_index":0,"sequence_number":8}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" Francisco","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"IVxCGe","output_index":0,"sequence_number":9}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" is","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"O4XJbkSpJDiLf","output_index":0,"sequence_number":10}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" sunny","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"RvZPnp0SM8","output_index":0,"sequence_number":11}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" with","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"SwocvtUx5KG","output_index":0,"sequence_number":12}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" a","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"SfnXW1sswso6vR","output_index":0,"sequence_number":13}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" temperature","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"lOCa","output_index":0,"sequence_number":14}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" of","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"w8JTYpwW24cUX","output_index":0,"sequence_number":15}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"ux6PaPerCIUrj7t","output_index":0,"sequence_number":16}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":"72","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"R88SHtA7ZOzvlD","output_index":0,"sequence_number":17}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":"°F","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"NH8QRBpSEwebq6","output_index":0,"sequence_number":18}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" and","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"pQaDV6hrTuJy","output_index":0,"sequence_number":19}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" humidity","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"c0x0ksS","output_index":0,"sequence_number":20}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" at","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"8ry7hlmK08CPi","output_index":0,"sequence_number":21}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"UX79HkPxrr8MF8T","output_index":0,"sequence_number":22}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":"65","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"cxlEteZ7uksrjR","output_index":0,"sequence_number":23}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":"%.","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"PKXTInQjLbdWsY","output_index":0,"sequence_number":24}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" Let","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"Xv0xN7d472Qw","output_index":0,"sequence_number":25}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" me","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"3o6XsOIytCqqZ","output_index":0,"sequence_number":26}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" know","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"wsLjz8w6iTD","output_index":0,"sequence_number":27}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" if","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"xOjd5WDqpP6Xf","output_index":0,"sequence_number":28}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" you","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"nc23UWQT0yiv","output_index":0,"sequence_number":29}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" need","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"g67xKiHAU91","output_index":0,"sequence_number":30}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" a","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"E54NrIMTlu44VE","output_index":0,"sequence_number":31}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" forecast","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"5DY2lGx","output_index":0,"sequence_number":32}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" for","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"hUrdW3MevPbN","output_index":0,"sequence_number":33}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" the","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"tZ9iUSyGrqjG","output_index":0,"sequence_number":34}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" next","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"pJwse3uaZFg","output_index":0,"sequence_number":35}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" few","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"yQgibv0nbv43","output_index":0,"sequence_number":36}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":" days","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"S3bo5MWT5ou","output_index":0,"sequence_number":37}
+
+event: response.output_text.delta
+data: {"type":"response.output_text.delta","content_index":0,"delta":"!","item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"obfuscation":"nizlSGS7zsoZsz6","output_index":0,"sequence_number":38}
+
+event: response.output_text.done
+data: {"type":"response.output_text.done","content_index":0,"item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","logprobs":[],"output_index":0,"sequence_number":39,"text":"The current weather in San Francisco is sunny with a temperature of 72°F and humidity at 65%. Let me know if you need a forecast for the next few days!"}
+
+event: response.content_part.done
+data: {"type":"response.content_part.done","content_index":0,"item_id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"The current weather in San Francisco is sunny with a temperature of 72°F and humidity at 65%. Let me know if you need a forecast for the next few days!"},"sequence_number":40}
+
+event: response.output_item.done
+data: {"type":"response.output_item.done","item":{"id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"The current weather in San Francisco is sunny with a temperature of 72°F and humidity at 65%. Let me know if you need a forecast for the next few days!"}],"role":"assistant"},"output_index":0,"sequence_number":41}
+
+event: response.completed
+data: {"type":"response.completed","response":{"id":"resp_05235bb0911aa18f01697a8bd6f31c8194a36b60c9b16f8ee8","object":"response","created_at":1769638870,"status":"completed","background":false,"completed_at":1769638871,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4.1-2025-04-14","output":[{"id":"msg_05235bb0911aa18f01697a8bd738c481949b38c728dec93947","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"The current weather in San Francisco is sunny with a temperature of 72°F and humidity at 65%. Let me know if you need a forecast for the next few days!"}],"role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"default","store":false,"temperature":0.1,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":60,"input_tokens_details":{"cached_tokens":0, "cache_write_tokens": 0},"output_tokens":36,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":96},"user":null,"metadata":{}},"sequence_number":42}
+
+��
+-- end response body --