From 6dde42e72b6f8a09c5c0387adff949f8a87bc234 Mon Sep 17 00:00:00 2001 From: Travis Dent Date: Wed, 11 Jun 2025 10:40:54 -0700 Subject: [PATCH 1/3] Export OpenAI Response object on ResponseSpanData. --- packages/agents-core/src/tracing/spans.ts | 2 ++ packages/agents-core/test/tracing.test.ts | 31 ++++++++++++++++++- .../agents-openai/src/openaiResponsesModel.ts | 8 ++--- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/packages/agents-core/src/tracing/spans.ts b/packages/agents-core/src/tracing/spans.ts index 6e39b168..bb043387 100644 --- a/packages/agents-core/src/tracing/spans.ts +++ b/packages/agents-core/src/tracing/spans.ts @@ -1,3 +1,4 @@ +import OpenAI from 'openai'; import logger from '../logger'; import { TracingProcessor } from './processor'; import { generateSpanId, removePrivateFields, timeIso } from './utils'; @@ -38,6 +39,7 @@ export type ResponseSpanData = SpanDataBase & { * Not used by the OpenAI tracing provider but helpful for other tracing providers. */ _input?: string | Record[]; + _response?: OpenAI.Responses.Response; }; export type HandoffSpanData = SpanDataBase & { diff --git a/packages/agents-core/test/tracing.test.ts b/packages/agents-core/test/tracing.test.ts index 624679bf..32ef1fdb 100644 --- a/packages/agents-core/test/tracing.test.ts +++ b/packages/agents-core/test/tracing.test.ts @@ -10,7 +10,12 @@ import { import { Trace, NoopTrace } from '../src/tracing/traces'; -import { Span, CustomSpanData, NoopSpan } from '../src/tracing/spans'; +import { + Span, + CustomSpanData, + ResponseSpanData, + NoopSpan, +} from '../src/tracing/spans'; import { BatchTraceProcessor, @@ -301,3 +306,27 @@ describe('TraceProvider disabled behaviour', () => { expect(span).toBeInstanceOf(NoopSpan); }); }); + +// ----------------------------------------------------------------------------------------- +// Tests for ResponseSpanData serialization +// ----------------------------------------------------------------------------------------- + +describe('ResponseSpanData serialization', () => { + it('removes private fields _input and _response from JSON output', () => { + const data: ResponseSpanData = { + type: 'response', + response_id: 'resp_123', + _input: 'private input data', + _response: { id: 'response_obj' } as any, + }; + + const span = new Span({ traceId: 'trace_123', data }, new TestProcessor()); + + const json = span.toJSON() as any; + + expect(json.span_data.type).toBe('response'); + expect(json.span_data.response_id).toBe('resp_123'); + expect(json.span_data).not.toHaveProperty('_input'); + expect(json.span_data).not.toHaveProperty('_response'); + }); +}); diff --git a/packages/agents-openai/src/openaiResponsesModel.ts b/packages/agents-openai/src/openaiResponsesModel.ts index c544ad10..26756efa 100644 --- a/packages/agents-openai/src/openaiResponsesModel.ts +++ b/packages/agents-openai/src/openaiResponsesModel.ts @@ -837,9 +837,8 @@ export class OpenAIResponsesModel implements Model { if (request.tracing) { span.spanData.response_id = response.id; - if (request.tracing === true) { - span.spanData._input = request.input; - } + span.spanData._input = request.input; + span.spanData._response = response; } return response; @@ -931,8 +930,9 @@ export class OpenAIResponsesModel implements Model { }; } - if (span && finalResponse && request.tracing) { + if (request.tracing && span && finalResponse) { span.spanData.response_id = finalResponse.id; + span.spanData._response = finalResponse; } } catch (error) { if (span) { From 07252582fdc532e9481ba9c3b402641f674bcde3 Mon Sep 17 00:00:00 2001 From: Travis Dent Date: Wed, 11 Jun 2025 11:07:28 -0700 Subject: [PATCH 2/3] Remove dependency on OpenAI types. --- packages/agents-core/src/tracing/spans.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/agents-core/src/tracing/spans.ts b/packages/agents-core/src/tracing/spans.ts index bb043387..850178cc 100644 --- a/packages/agents-core/src/tracing/spans.ts +++ b/packages/agents-core/src/tracing/spans.ts @@ -1,4 +1,3 @@ -import OpenAI from 'openai'; import logger from '../logger'; import { TracingProcessor } from './processor'; import { generateSpanId, removePrivateFields, timeIso } from './utils'; @@ -39,7 +38,7 @@ export type ResponseSpanData = SpanDataBase & { * Not used by the OpenAI tracing provider but helpful for other tracing providers. */ _input?: string | Record[]; - _response?: OpenAI.Responses.Response; + _response?: Record; }; export type HandoffSpanData = SpanDataBase & { From 666306c4b00da2017583b645f19771e32c0b35c2 Mon Sep 17 00:00:00 2001 From: Dominik Kundel Date: Wed, 11 Jun 2025 11:31:05 -0700 Subject: [PATCH 3/3] Create clever-needles-flow.md --- .changeset/clever-needles-flow.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/clever-needles-flow.md diff --git a/.changeset/clever-needles-flow.md b/.changeset/clever-needles-flow.md new file mode 100644 index 00000000..127f3a6d --- /dev/null +++ b/.changeset/clever-needles-flow.md @@ -0,0 +1,6 @@ +--- +"@openai/agents-core": patch +"@openai/agents-openai": patch +--- + +Add OpenAI Response object on ResponseSpanData for other exporters.