diff --git a/packages/instrumentation-openai/src/attrs.ts b/packages/instrumentation-openai/src/attrs.ts new file mode 100644 index 00000000..463237a9 --- /dev/null +++ b/packages/instrumentation-openai/src/attrs.ts @@ -0,0 +1 @@ +export const ATTR_GEN_AI_REQUEST_REASONING_EFFORT = "gen_ai.request.reasoning_effort"; diff --git a/packages/instrumentation-openai/src/instrumentation.ts b/packages/instrumentation-openai/src/instrumentation.ts index d6332372..1fe3a842 100644 --- a/packages/instrumentation-openai/src/instrumentation.ts +++ b/packages/instrumentation-openai/src/instrumentation.ts @@ -56,6 +56,7 @@ import { encodingForModel, TiktokenModel, Tiktoken } from "js-tiktoken"; type APIPromiseType = Promise & { _thenUnwrap: (onFulfilled: (value: T) => U) => APIPromiseType; }; +import { ATTR_GEN_AI_REQUEST_REASONING_EFFORT } from "./attrs"; import { wrapImageGeneration, wrapImageEdit, @@ -333,6 +334,13 @@ export class OpenAIInstrumentation extends InstrumentationBase { attributes[SpanAttributes.LLM_PRESENCE_PENALTY] = params.presence_penalty; } + if ("reasoning_effort" in params) { + if (typeof params.reasoning_effort === "string") { + attributes[ATTR_GEN_AI_REQUEST_REASONING_EFFORT] = params.reasoning_effort; + } else { + attributes[ATTR_GEN_AI_REQUEST_REASONING_EFFORT] = JSON.stringify(params.reasoning_effort); + } + } if ( params.extraAttributes !== undefined &&