@@ -31,6 +31,18 @@ import {
3131 CONTEXT_KEY_ALLOW_TRACE_CONTENT ,
3232 SpanAttributes ,
3333} from "@traceloop/ai-semantic-conventions" ;
34+ import {
35+ ATTR_GEN_AI_COMPLETION ,
36+ ATTR_GEN_AI_PROMPT ,
37+ ATTR_GEN_AI_REQUEST_MAX_TOKENS ,
38+ ATTR_GEN_AI_REQUEST_MODEL ,
39+ ATTR_GEN_AI_REQUEST_TEMPERATURE ,
40+ ATTR_GEN_AI_REQUEST_TOP_P ,
41+ ATTR_GEN_AI_RESPONSE_MODEL ,
42+ ATTR_GEN_AI_SYSTEM ,
43+ ATTR_GEN_AI_USAGE_COMPLETION_TOKENS ,
44+ ATTR_GEN_AI_USAGE_PROMPT_TOKENS ,
45+ } from "@opentelemetry/semantic-conventions/incubating" ;
3446import { AnthropicInstrumentationConfig } from "./types" ;
3547import { version } from "../package.json" ;
3648import type * as anthropic from "@anthropic-ai/sdk" ;
@@ -204,15 +216,14 @@ export class AnthropicInstrumentation extends InstrumentationBase {
204216 } ;
205217 } ) : Span {
206218 const attributes : Attributes = {
207- [ SpanAttributes . ATTR_GEN_AI_SYSTEM ] : "Anthropic" ,
219+ [ ATTR_GEN_AI_SYSTEM ] : "Anthropic" ,
208220 [ SpanAttributes . LLM_REQUEST_TYPE ] : type ,
209221 } ;
210222
211223 try {
212- attributes [ SpanAttributes . ATTR_GEN_AI_REQUEST_MODEL ] = params . model ;
213- attributes [ SpanAttributes . ATTR_GEN_AI_REQUEST_TEMPERATURE ] =
214- params . temperature ;
215- attributes [ SpanAttributes . ATTR_GEN_AI_REQUEST_TOP_P ] = params . top_p ;
224+ attributes [ ATTR_GEN_AI_REQUEST_MODEL ] = params . model ;
225+ attributes [ ATTR_GEN_AI_REQUEST_TEMPERATURE ] = params . temperature ;
226+ attributes [ ATTR_GEN_AI_REQUEST_TOP_P ] = params . top_p ;
216227 attributes [ SpanAttributes . LLM_TOP_K ] = params . top_k ;
217228
218229 // Handle thinking parameters (for beta messages)
@@ -224,11 +235,10 @@ export class AnthropicInstrumentation extends InstrumentationBase {
224235 }
225236
226237 if ( type === "completion" ) {
227- attributes [ SpanAttributes . ATTR_GEN_AI_REQUEST_MAX_TOKENS ] =
238+ attributes [ ATTR_GEN_AI_REQUEST_MAX_TOKENS ] =
228239 params . max_tokens_to_sample ;
229240 } else {
230- attributes [ SpanAttributes . ATTR_GEN_AI_REQUEST_MAX_TOKENS ] =
231- params . max_tokens ;
241+ attributes [ ATTR_GEN_AI_REQUEST_MAX_TOKENS ] = params . max_tokens ;
232242 }
233243
234244 if (
@@ -246,9 +256,8 @@ export class AnthropicInstrumentation extends InstrumentationBase {
246256
247257 // If a system prompt is provided, it should always be first
248258 if ( "system" in params && params . system !== undefined ) {
249- attributes [ `${ SpanAttributes . ATTR_GEN_AI_PROMPT } .0.role` ] =
250- "system" ;
251- attributes [ `${ SpanAttributes . ATTR_GEN_AI_PROMPT } .0.content` ] =
259+ attributes [ `${ ATTR_GEN_AI_PROMPT } .0.role` ] = "system" ;
260+ attributes [ `${ ATTR_GEN_AI_PROMPT } .0.content` ] =
252261 typeof params . system === "string"
253262 ? params . system
254263 : JSON . stringify ( params . system ) ;
@@ -257,23 +266,19 @@ export class AnthropicInstrumentation extends InstrumentationBase {
257266
258267 params . messages . forEach ( ( message , index ) => {
259268 const currentIndex = index + promptIndex ;
260- attributes [
261- `${ SpanAttributes . ATTR_GEN_AI_PROMPT } .${ currentIndex } .role`
262- ] = message . role ;
269+ attributes [ `${ ATTR_GEN_AI_PROMPT } .${ currentIndex } .role` ] =
270+ message . role ;
263271 if ( typeof message . content === "string" ) {
264- attributes [
265- `${ SpanAttributes . ATTR_GEN_AI_PROMPT } .${ currentIndex } .content`
266- ] = ( message . content as string ) || "" ;
272+ attributes [ `${ ATTR_GEN_AI_PROMPT } .${ currentIndex } .content` ] =
273+ ( message . content as string ) || "" ;
267274 } else {
268- attributes [
269- `${ SpanAttributes . ATTR_GEN_AI_PROMPT } .${ currentIndex } .content`
270- ] = JSON . stringify ( message . content ) ;
275+ attributes [ `${ ATTR_GEN_AI_PROMPT } .${ currentIndex } .content` ] =
276+ JSON . stringify ( message . content ) ;
271277 }
272278 } ) ;
273279 } else {
274- attributes [ `${ SpanAttributes . ATTR_GEN_AI_PROMPT } .0.role` ] = "user" ;
275- attributes [ `${ SpanAttributes . ATTR_GEN_AI_PROMPT } .0.content` ] =
276- params . prompt ;
280+ attributes [ `${ ATTR_GEN_AI_PROMPT } .0.role` ] = "user" ;
281+ attributes [ `${ ATTR_GEN_AI_PROMPT } .0.content` ] = params . prompt ;
277282 }
278283 }
279284 } catch ( e ) {
@@ -482,49 +487,40 @@ export class AnthropicInstrumentation extends InstrumentationBase {
482487 result : Completion ;
483488 } ) {
484489 try {
485- span . setAttribute (
486- SpanAttributes . ATTR_GEN_AI_RESPONSE_MODEL ,
487- result . model ,
488- ) ;
490+ span . setAttribute ( ATTR_GEN_AI_RESPONSE_MODEL , result . model ) ;
489491 if ( type === "chat" && result . usage ) {
490492 span . setAttribute (
491493 SpanAttributes . LLM_USAGE_TOTAL_TOKENS ,
492494 result . usage ?. input_tokens + result . usage ?. output_tokens ,
493495 ) ;
494496 span . setAttribute (
495- SpanAttributes . ATTR_GEN_AI_USAGE_COMPLETION_TOKENS ,
497+ ATTR_GEN_AI_USAGE_COMPLETION_TOKENS ,
496498 result . usage ?. output_tokens ,
497499 ) ;
498500 span . setAttribute (
499- SpanAttributes . ATTR_GEN_AI_USAGE_PROMPT_TOKENS ,
501+ ATTR_GEN_AI_USAGE_PROMPT_TOKENS ,
500502 result . usage ?. input_tokens ,
501503 ) ;
502504 }
503505
504506 if ( result . stop_reason ) {
505507 span . setAttribute (
506- `${ SpanAttributes . ATTR_GEN_AI_COMPLETION } .0.finish_reason` ,
508+ `${ ATTR_GEN_AI_COMPLETION } .0.finish_reason` ,
507509 result . stop_reason ,
508510 ) ;
509511 }
510512
511513 if ( this . _shouldSendPrompts ( ) ) {
512514 if ( type === "chat" ) {
515+ span . setAttribute ( `${ ATTR_GEN_AI_COMPLETION } .0.role` , "assistant" ) ;
513516 span . setAttribute (
514- `${ SpanAttributes . ATTR_GEN_AI_COMPLETION } .0.role` ,
515- "assistant" ,
516- ) ;
517- span . setAttribute (
518- `${ SpanAttributes . ATTR_GEN_AI_COMPLETION } .0.content` ,
517+ `${ ATTR_GEN_AI_COMPLETION } .0.content` ,
519518 JSON . stringify ( result . content ) ,
520519 ) ;
521520 } else {
521+ span . setAttribute ( `${ ATTR_GEN_AI_COMPLETION } .0.role` , "assistant" ) ;
522522 span . setAttribute (
523- `${ SpanAttributes . ATTR_GEN_AI_COMPLETION } .0.role` ,
524- "assistant" ,
525- ) ;
526- span . setAttribute (
527- `${ SpanAttributes . ATTR_GEN_AI_COMPLETION } .0.content` ,
523+ `${ ATTR_GEN_AI_COMPLETION } .0.content` ,
528524 result . completion ,
529525 ) ;
530526 }
0 commit comments