66const { AiMonitoringChatSubscriber } = require ( '../ai-monitoring' )
77const { AI } = require ( '../../metrics/names' )
88const { GEMINI } = AI
9- const { LlmChatCompletionSummary, LlmChatCompletionMessage } = require ( '#agentlib/llm-events/google-genai/index.js' )
9+ const { LlmChatCompletionSummary, LlmChatCompletionMessage } = require ( '#agentlib/llm-events-new /google-genai/index.js' )
1010
1111class GoogleGenAIGenerateContentSubscriber extends AiMonitoringChatSubscriber {
1212 constructor ( { agent, logger, channelName = 'nr_generateContentInternal' } ) {
@@ -27,13 +27,26 @@ class GoogleGenAIGenerateContentSubscriber extends AiMonitoringChatSubscriber {
2727 } )
2828 }
2929
30+ /**
31+ * Gets the request/input and response messages from the
32+ * Google Gen AI request and response objects.
33+ * @param {object } params function parameters
34+ * @param {object } params.request Google Gen AI request object
35+ * @param {object } params.response Google Gen AI response object
36+ * @returns {object[] } an array of messages like { content, role }
37+ */
3038 getMessages ( { request, response } ) {
31- // Only take the first response message and append to input messages
3239 // request.contents can be a string or an array of strings
33- // response.candidates is an array of candidates (choices); we only take the first one
34- const inputMessages = Array . isArray ( request . contents ) ? request . contents : [ request . contents ]
35- const responseMessage = response ?. candidates ?. [ 0 ] ?. content
36- return responseMessage !== undefined ? [ ...inputMessages , responseMessage ] : inputMessages
40+ const contents = Array . isArray ( request . contents ) ? request . contents : [ request . contents ]
41+ const messages = contents . map ( ( item ) => {
42+ return { content : item , role : 'user' }
43+ } )
44+ const responseContent = response ?. text ?? response ?. candidates ?. [ 0 ] ?. content ?. parts ?. [ 0 ] ?. text
45+ if ( responseContent ) {
46+ // Do not push an empty response (likely from an error)
47+ messages . push ( { content : responseContent , role : 'assistant' } )
48+ }
49+ return messages
3750 }
3851
3952 createCompletionSummary ( { ctx, request, response = { } , err } ) {
@@ -44,21 +57,26 @@ class GoogleGenAIGenerateContentSubscriber extends AiMonitoringChatSubscriber {
4457 transaction,
4558 request,
4659 response,
47- withError : ! ! err
60+ error : ! ! err
4861 } )
4962 }
5063
5164 createCompletionMessage ( { ctx, request, response, index, completionId, message } ) {
5265 const { segment, transaction } = ctx
66+
67+ const isResponse = message ?. content === response ?. text
68+
5369 return new LlmChatCompletionMessage ( {
5470 agent : this . agent ,
5571 segment,
5672 transaction,
5773 request,
5874 response,
59- index,
75+ sequence : index ,
6076 completionId,
61- message
77+ content : message . content ,
78+ role : message . role ,
79+ isResponse
6280 } )
6381 }
6482}
0 commit comments