@@ -3,7 +3,6 @@ import { captureException } from '../../exports';
33import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes' ;
44import { startSpan } from '../../tracing/trace' ;
55import type { Span , SpanAttributeValue } from '../../types-hoist/span' ;
6- import { getActiveSpan , getRootSpan , spanToJSON } from '../../utils/spanUtils' ;
76import {
87 GEN_AI_OPERATION_NAME_ATTRIBUTE ,
98 GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE ,
@@ -22,13 +21,7 @@ import {
2221} from '../ai/gen-ai-attributes' ;
2322import { buildMethodPath , getFinalOperationName , getSpanOperation } from '../ai/utils' ;
2423import { isThenable } from '../is' ;
25- import {
26- CHAT_PATH ,
27- CHATS_CREATE_METHOD ,
28- GOOGLE_GENAI_INTEGRATION_NAME ,
29- GOOGLE_GENAI_SCOPE_MODEL_KEY ,
30- GOOGLE_GENAI_SYSTEM_NAME ,
31- } from './constants' ;
24+ import { CHAT_PATH , CHATS_CREATE_METHOD , GOOGLE_GENAI_INTEGRATION_NAME , GOOGLE_GENAI_SYSTEM_NAME } from './constants' ;
3225import type {
3326 Candidate ,
3427 ContentPart ,
@@ -40,35 +33,26 @@ import type {
4033import { shouldInstrument } from './utils' ;
4134
4235/**
43- * Store model information on the root span for later retrieval by chat.sendMessage
44- */
45- function storeModelOnRootSpan ( model : string ) : void {
46- const activeSpan = getActiveSpan ( ) ;
47- if ( activeSpan ) {
48- const rootSpan = getRootSpan ( activeSpan ) ;
49- rootSpan . setAttributes ( {
50- [ GOOGLE_GENAI_SCOPE_MODEL_KEY ] : model ,
51- } ) ;
52- }
53- }
54-
55- /**
56- * Extract model from parameters or root span attributes
57- * For chat instances, the model is stored on the root span during chat creation
36+ * Extract model from parameters or chat context object
37+ * For chat instances, the model is available on the chat object as 'model' (older versions) or 'modelVersion' (newer versions)
5838 */
59- export function extractModel ( params : Record < string , unknown > , _context ?: unknown ) : string {
39+ export function extractModel ( params : Record < string , unknown > , context ?: unknown ) : string {
6040 if ( 'model' in params && typeof params . model === 'string' ) {
6141 return params . model ;
6242 }
6343
64- // Try to get model from root span attributes
65- const activeSpan = getActiveSpan ( ) ;
66- if ( activeSpan ) {
67- const rootSpan = getRootSpan ( activeSpan ) ;
68- const spanData = spanToJSON ( rootSpan ) ;
69- const modelFromSpan = spanData . data ?. [ GOOGLE_GENAI_SCOPE_MODEL_KEY ] ;
70- if ( typeof modelFromSpan === 'string' ) {
71- return modelFromSpan ;
44+ // Try to get model from chat context object (chat instance has model property)
45+ if ( context && typeof context === 'object' ) {
46+ const contextObj = context as Record < string , unknown > ;
47+
48+ // Check for 'model' property (older versions, and streaming)
49+ if ( 'model' in contextObj && typeof contextObj . model === 'string' ) {
50+ return contextObj . model ;
51+ }
52+
53+ // Check for 'modelVersion' property (newer versions)
54+ if ( 'modelVersion' in contextObj && typeof contextObj . modelVersion === 'string' ) {
55+ return contextObj . modelVersion ;
7256 }
7357 }
7458
@@ -255,11 +239,6 @@ function instrumentMethod<T extends unknown[], R>(
255239 }
256240 const result = ( originalMethod as ( ...args : T ) => R ) . apply ( context , args ) ;
257241
258- if ( typeof model === 'string' && model !== 'unknown' ) {
259- // Store model information on root span for later retrieval by chat.sendMessage
260- storeModelOnRootSpan ( model ) ;
261- }
262-
263242 // No response attributes for create (returns object of chat instance, not generated content)
264243 return result ;
265244 } catch ( error ) {
0 commit comments