1+ /*
2+ * Copyright 2025 New Relic Corporation. All rights reserved.
3+ * SPDX-License-Identifier: Apache-2.0
4+ */
5+
6+ 'use strict'
7+
8+ const BaseEvent = require ( '../event' )
9+ const { makeId } = require ( '../../util/hashes' )
10+
11+ module . exports = class LlmEvent extends BaseEvent {
12+ constructor ( { agent, segment, request, response, responseAttrs = false , transaction } ) {
13+ super ( )
14+
15+ this . id = makeId ( 36 )
16+ this . appName = agent . config . applications ( ) [ 0 ]
17+ this . request_id = response ?. headers ?. [ 'x-request-id' ]
18+ this . trace_id = transaction ?. traceId
19+ this . span_id = segment ?. id
20+ this [ 'response.model' ] = response . model // TODO: request.model?
21+ this . vendor = 'gemini'
22+ this . ingest_source = 'Node'
23+ this . metadata = agent
24+
25+ /**
26+ * Used in embedding, and chat completion summary.
27+ * The flag will include response attributes but also
28+ * other attributes from request like model, and api key.
29+ * Lastly, it includes the active span's duration.
30+ */
31+ if ( responseAttrs ) {
32+ this [ 'request.model' ] = request . model || request . engine
33+ this . duration = segment ?. getDurationInMillis ( )
34+ this . responseAttrs ( response )
35+ }
36+ }
37+
38+ responseAttrs ( response ) {
39+ this [ 'response.organization' ] = response ?. headers ?. [ 'google-organization' ]
40+ this [ 'response.headers.llmVersion' ] = response ?. headers ?. [ 'gemini-version' ]
41+ this [ 'response.headers.ratelimitLimitRequests' ] =
42+ response ?. headers ?. [ 'x-ratelimit-limit-requests' ]
43+ this [ 'response.headers.ratelimitLimitTokens' ] = response ?. headers ?. [ 'x-ratelimit-limit-tokens' ]
44+ this [ 'response.headers.ratelimitResetTokens' ] = response ?. headers ?. [ 'x-ratelimit-reset-tokens' ]
45+ this [ 'response.headers.ratelimitRemainingTokens' ] =
46+ response ?. headers ?. [ 'x-ratelimit-remaining-tokens' ]
47+ this [ 'response.headers.ratelimitRemainingRequests' ] =
48+ response ?. headers ?. [ 'x-ratelimit-remaining-requests' ]
49+ }
50+ }
0 commit comments