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
7 changes: 7 additions & 0 deletions .changeset/breezy-baboons-crash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"braintrust": patch
"@braintrust/openai-agents": patch
"@braintrust/temporal": patch
---

fix: Add span provenance for temporal and openai agents sdk
21 changes: 9 additions & 12 deletions integrations/openai-agents-js/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -279,24 +279,20 @@ export class OpenAIAgentsTraceProcessor {
// Detect parent span from current execution context
let span: BraintrustSpan;
const current = currentSpan();
const spanArgs = {
name: trace.name,
type: SpanTypeAttribute.TASK,
[Symbol.for("braintrust.spanInstrumentationName")]: "openai-agents",
};

if (current && current !== NOOP_SPAN) {
// Create as child of current span
span = current.startSpan({
name: trace.name,
type: SpanTypeAttribute.TASK,
});
span = current.startSpan(spanArgs);
} else {
// No parent span available, create as root
span = this.logger
? this.logger.startSpan({
name: trace.name,
type: SpanTypeAttribute.TASK,
})
: startSpan({
name: trace.name,
type: SpanTypeAttribute.TASK,
});
? this.logger.startSpan(spanArgs)
: startSpan(spanArgs);
}

span.log({
Expand Down Expand Up @@ -620,6 +616,7 @@ export class OpenAIAgentsTraceProcessor {
const childSpan = parentSpan.startSpan({
name: spanNameFromAgents(span),
type: spanTypeFromAgents(span),
[Symbol.for("braintrust.spanInstrumentationName")]: "openai-agents",
});
traceData.childSpans.set(span.spanId, childSpan);
}
Expand Down
1 change: 1 addition & 0 deletions integrations/temporal-js/src/interceptors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ class BraintrustActivityInterceptor implements ActivityInboundCallsInterceptor {
}

const span = braintrust.startSpan({
[Symbol.for("braintrust.spanInstrumentationName")]: "temporal",
name: `temporal.activity.${info.activityType}`,
spanAttributes: { type: "task" },
parent,
Expand Down
1 change: 1 addition & 0 deletions integrations/temporal-js/src/sinks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ export function createBraintrustSinks(): InjectedSinks<BraintrustSinks> {
workflowSpanId?: string,
) => {
const span = braintrust.startSpan({
[Symbol.for("braintrust.spanInstrumentationName")]: "temporal",
name: `temporal.workflow.${info.workflowType}`,
spanAttributes: { type: "task" },
parent: parentContext,
Expand Down
1 change: 1 addition & 0 deletions js/src/span-origin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export const INSTRUMENTATION_NAMES = {
OPENROUTER_AGENT: "openrouter-agent",
PI_CODING_AGENT: "pi-coding-agent",
STRANDS_AGENT_SDK: "strands-agent-sdk",
TEMPORAL: "temporal",
TYPESAFE: "typesafe",
VOYAGEAI: "voyageai",
ELEVENLABS: "elevenlabs",
Expand Down
Loading