11import { LDContext } from '@launchdarkly/js-server-sdk-common' ;
22
3+ import { name as aiSdkName , version as aiSdkVersion } from '../package.json' ;
34import { LDFeedbackKind } from '../src/api/metrics' ;
45import { LDAIConfigTrackerImpl } from '../src/LDAIConfigTrackerImpl' ;
56import { LDClientMin } from '../src/LDClientMin' ;
@@ -18,6 +19,16 @@ const version = 1;
1819const modelName = 'test-model' ;
1920const providerName = 'test-provider' ;
2021
22+ const getExpectedTrackData = ( ) => ( {
23+ configKey,
24+ variationKey,
25+ version,
26+ modelName,
27+ providerName,
28+ aiSdkName,
29+ aiSdkVersion,
30+ } ) ;
31+
2132beforeEach ( ( ) => {
2233 jest . clearAllMocks ( ) ;
2334} ) ;
@@ -37,7 +48,7 @@ it('tracks duration', () => {
3748 expect ( mockTrack ) . toHaveBeenCalledWith (
3849 '$ld:ai:duration:total' ,
3950 testContext ,
40- { configKey , variationKey , version , modelName , providerName } ,
51+ getExpectedTrackData ( ) ,
4152 1000 ,
4253 ) ;
4354} ) ;
@@ -60,7 +71,7 @@ it('tracks duration of async function', async () => {
6071 expect ( mockTrack ) . toHaveBeenCalledWith (
6172 '$ld:ai:duration:total' ,
6273 testContext ,
63- { configKey , variationKey , version , modelName , providerName } ,
74+ getExpectedTrackData ( ) ,
6475 1000 ,
6576 ) ;
6677} ) ;
@@ -80,7 +91,7 @@ it('tracks time to first token', () => {
8091 expect ( mockTrack ) . toHaveBeenCalledWith (
8192 '$ld:ai:tokens:ttf' ,
8293 testContext ,
83- { configKey , variationKey , version , modelName , providerName } ,
94+ getExpectedTrackData ( ) ,
8495 1000 ,
8596 ) ;
8697} ) ;
@@ -100,7 +111,7 @@ it('tracks positive feedback', () => {
100111 expect ( mockTrack ) . toHaveBeenCalledWith (
101112 '$ld:ai:feedback:user:positive' ,
102113 testContext ,
103- { configKey , variationKey , version , modelName , providerName } ,
114+ getExpectedTrackData ( ) ,
104115 1 ,
105116 ) ;
106117} ) ;
@@ -120,7 +131,7 @@ it('tracks negative feedback', () => {
120131 expect ( mockTrack ) . toHaveBeenCalledWith (
121132 '$ld:ai:feedback:user:negative' ,
122133 testContext ,
123- { configKey , variationKey , version , modelName , providerName } ,
134+ getExpectedTrackData ( ) ,
124135 1 ,
125136 ) ;
126137} ) ;
@@ -140,7 +151,7 @@ it('tracks success', () => {
140151 expect ( mockTrack ) . toHaveBeenCalledWith (
141152 '$ld:ai:generation:success' ,
142153 testContext ,
143- { configKey , variationKey , version , modelName , providerName } ,
154+ getExpectedTrackData ( ) ,
144155 1 ,
145156 ) ;
146157} ) ;
@@ -172,14 +183,14 @@ it('tracks OpenAI usage', async () => {
172183 expect ( mockTrack ) . toHaveBeenCalledWith (
173184 '$ld:ai:duration:total' ,
174185 testContext ,
175- { configKey , variationKey , version , modelName , providerName } ,
186+ getExpectedTrackData ( ) ,
176187 1000 ,
177188 ) ;
178189
179190 expect ( mockTrack ) . toHaveBeenCalledWith (
180191 '$ld:ai:generation:success' ,
181192 testContext ,
182- { configKey , variationKey , version , modelName , providerName } ,
193+ getExpectedTrackData ( ) ,
183194 1 ,
184195 ) ;
185196
@@ -193,21 +204,21 @@ it('tracks OpenAI usage', async () => {
193204 expect ( mockTrack ) . toHaveBeenCalledWith (
194205 '$ld:ai:tokens:total' ,
195206 testContext ,
196- { configKey , variationKey , version , modelName , providerName } ,
207+ getExpectedTrackData ( ) ,
197208 TOTAL_TOKENS ,
198209 ) ;
199210
200211 expect ( mockTrack ) . toHaveBeenCalledWith (
201212 '$ld:ai:tokens:input' ,
202213 testContext ,
203- { configKey , variationKey , version , modelName , providerName } ,
214+ getExpectedTrackData ( ) ,
204215 PROMPT_TOKENS ,
205216 ) ;
206217
207218 expect ( mockTrack ) . toHaveBeenCalledWith (
208219 '$ld:ai:tokens:output' ,
209220 testContext ,
210- { configKey , variationKey , version , modelName , providerName } ,
221+ getExpectedTrackData ( ) ,
211222 COMPLETION_TOKENS ,
212223 ) ;
213224} ) ;
@@ -234,14 +245,14 @@ it('tracks error when OpenAI metrics function throws', async () => {
234245 expect ( mockTrack ) . toHaveBeenCalledWith (
235246 '$ld:ai:duration:total' ,
236247 testContext ,
237- { configKey , variationKey , version , modelName , providerName } ,
248+ getExpectedTrackData ( ) ,
238249 1000 ,
239250 ) ;
240251
241252 expect ( mockTrack ) . toHaveBeenCalledWith (
242253 '$ld:ai:generation:error' ,
243254 testContext ,
244- { configKey , variationKey , version , modelName , providerName } ,
255+ getExpectedTrackData ( ) ,
245256 1 ,
246257 ) ;
247258
@@ -283,7 +294,7 @@ it('tracks Bedrock conversation with successful response', () => {
283294 expect ( mockTrack ) . toHaveBeenCalledWith (
284295 '$ld:ai:generation:success' ,
285296 testContext ,
286- { configKey , variationKey , version , modelName , providerName } ,
297+ getExpectedTrackData ( ) ,
287298 1 ,
288299 ) ;
289300
@@ -297,28 +308,28 @@ it('tracks Bedrock conversation with successful response', () => {
297308 expect ( mockTrack ) . toHaveBeenCalledWith (
298309 '$ld:ai:duration:total' ,
299310 testContext ,
300- { configKey , variationKey , version , modelName , providerName } ,
311+ getExpectedTrackData ( ) ,
301312 500 ,
302313 ) ;
303314
304315 expect ( mockTrack ) . toHaveBeenCalledWith (
305316 '$ld:ai:tokens:total' ,
306317 testContext ,
307- { configKey , variationKey , version , modelName , providerName } ,
318+ getExpectedTrackData ( ) ,
308319 TOTAL_TOKENS ,
309320 ) ;
310321
311322 expect ( mockTrack ) . toHaveBeenCalledWith (
312323 '$ld:ai:tokens:input' ,
313324 testContext ,
314- { configKey , variationKey , version , modelName , providerName } ,
325+ getExpectedTrackData ( ) ,
315326 PROMPT_TOKENS ,
316327 ) ;
317328
318329 expect ( mockTrack ) . toHaveBeenCalledWith (
319330 '$ld:ai:tokens:output' ,
320331 testContext ,
321- { configKey , variationKey , version , modelName , providerName } ,
332+ getExpectedTrackData ( ) ,
322333 COMPLETION_TOKENS ,
323334 ) ;
324335} ) ;
@@ -345,7 +356,7 @@ it('tracks Bedrock conversation with error response', () => {
345356 expect ( mockTrack ) . toHaveBeenCalledWith (
346357 '$ld:ai:generation:error' ,
347358 testContext ,
348- { configKey , variationKey , version , modelName , providerName } ,
359+ getExpectedTrackData ( ) ,
349360 1 ,
350361 ) ;
351362
@@ -385,14 +396,14 @@ describe('Vercel AI SDK generateText', () => {
385396 expect ( mockTrack ) . toHaveBeenCalledWith (
386397 '$ld:ai:duration:total' ,
387398 testContext ,
388- { configKey , variationKey , version , modelName , providerName } ,
399+ getExpectedTrackData ( ) ,
389400 1000 ,
390401 ) ;
391402
392403 expect ( mockTrack ) . toHaveBeenCalledWith (
393404 '$ld:ai:generation:success' ,
394405 testContext ,
395- { configKey , variationKey , version , modelName , providerName } ,
406+ getExpectedTrackData ( ) ,
396407 1 ,
397408 ) ;
398409
@@ -406,21 +417,21 @@ describe('Vercel AI SDK generateText', () => {
406417 expect ( mockTrack ) . toHaveBeenCalledWith (
407418 '$ld:ai:tokens:total' ,
408419 testContext ,
409- { configKey , variationKey , version , modelName , providerName } ,
420+ getExpectedTrackData ( ) ,
410421 TOTAL_TOKENS ,
411422 ) ;
412423
413424 expect ( mockTrack ) . toHaveBeenCalledWith (
414425 '$ld:ai:tokens:input' ,
415426 testContext ,
416- { configKey , variationKey , version , modelName , providerName } ,
427+ getExpectedTrackData ( ) ,
417428 PROMPT_TOKENS ,
418429 ) ;
419430
420431 expect ( mockTrack ) . toHaveBeenCalledWith (
421432 '$ld:ai:tokens:output' ,
422433 testContext ,
423- { configKey , variationKey , version , modelName , providerName } ,
434+ getExpectedTrackData ( ) ,
424435 COMPLETION_TOKENS ,
425436 ) ;
426437 } ) ;
@@ -447,14 +458,14 @@ describe('Vercel AI SDK generateText', () => {
447458 expect ( mockTrack ) . toHaveBeenCalledWith (
448459 '$ld:ai:duration:total' ,
449460 testContext ,
450- { configKey , variationKey , version , modelName , providerName } ,
461+ getExpectedTrackData ( ) ,
451462 1000 ,
452463 ) ;
453464
454465 expect ( mockTrack ) . toHaveBeenCalledWith (
455466 '$ld:ai:generation:error' ,
456467 testContext ,
457- { configKey , variationKey , version , modelName , providerName } ,
468+ getExpectedTrackData ( ) ,
458469 1 ,
459470 ) ;
460471
@@ -491,21 +502,21 @@ it('tracks tokens', () => {
491502 expect ( mockTrack ) . toHaveBeenCalledWith (
492503 '$ld:ai:tokens:total' ,
493504 testContext ,
494- { configKey , variationKey , version , modelName , providerName } ,
505+ getExpectedTrackData ( ) ,
495506 TOTAL_TOKENS ,
496507 ) ;
497508
498509 expect ( mockTrack ) . toHaveBeenCalledWith (
499510 '$ld:ai:tokens:input' ,
500511 testContext ,
501- { configKey , variationKey , version , modelName , providerName } ,
512+ getExpectedTrackData ( ) ,
502513 PROMPT_TOKENS ,
503514 ) ;
504515
505516 expect ( mockTrack ) . toHaveBeenCalledWith (
506517 '$ld:ai:tokens:output' ,
507518 testContext ,
508- { configKey , variationKey , version , modelName , providerName } ,
519+ getExpectedTrackData ( ) ,
509520 COMPLETION_TOKENS ,
510521 ) ;
511522} ) ;
@@ -537,7 +548,7 @@ it('only tracks non-zero token counts', () => {
537548 expect ( mockTrack ) . toHaveBeenCalledWith (
538549 '$ld:ai:tokens:input' ,
539550 testContext ,
540- { configKey , variationKey , version , modelName , providerName } ,
551+ getExpectedTrackData ( ) ,
541552 50 ,
542553 ) ;
543554
@@ -623,7 +634,7 @@ it('tracks duration when async function throws', async () => {
623634 expect ( mockTrack ) . toHaveBeenCalledWith (
624635 '$ld:ai:duration:total' ,
625636 testContext ,
626- { configKey , variationKey , version , modelName , providerName } ,
637+ getExpectedTrackData ( ) ,
627638 1000 ,
628639 ) ;
629640} ) ;
@@ -643,7 +654,7 @@ it('tracks error', () => {
643654 expect ( mockTrack ) . toHaveBeenCalledWith (
644655 '$ld:ai:generation:error' ,
645656 testContext ,
646- { configKey , variationKey , version , modelName , providerName } ,
657+ getExpectedTrackData ( ) ,
647658 1 ,
648659 ) ;
649660} ) ;
@@ -679,27 +690,27 @@ describe('trackMetricsOf', () => {
679690 expect ( mockTrack ) . toHaveBeenCalledWith (
680691 '$ld:ai:generation:success' ,
681692 testContext ,
682- { configKey , variationKey , version , modelName , providerName } ,
693+ getExpectedTrackData ( ) ,
683694 1 ,
684695 ) ;
685696
686697 // Should track token usage
687698 expect ( mockTrack ) . toHaveBeenCalledWith (
688699 '$ld:ai:tokens:total' ,
689700 testContext ,
690- { configKey , variationKey , version , modelName , providerName } ,
701+ getExpectedTrackData ( ) ,
691702 100 ,
692703 ) ;
693704 expect ( mockTrack ) . toHaveBeenCalledWith (
694705 '$ld:ai:tokens:input' ,
695706 testContext ,
696- { configKey , variationKey , version , modelName , providerName } ,
707+ getExpectedTrackData ( ) ,
697708 50 ,
698709 ) ;
699710 expect ( mockTrack ) . toHaveBeenCalledWith (
700711 '$ld:ai:tokens:output' ,
701712 testContext ,
702- { configKey , variationKey , version , modelName , providerName } ,
713+ getExpectedTrackData ( ) ,
703714 50 ,
704715 ) ;
705716 } ) ;
@@ -729,7 +740,7 @@ describe('trackMetricsOf', () => {
729740 expect ( mockTrack ) . toHaveBeenCalledWith (
730741 '$ld:ai:generation:error' ,
731742 testContext ,
732- { configKey , variationKey , version , modelName , providerName } ,
743+ getExpectedTrackData ( ) ,
733744 1 ,
734745 ) ;
735746 } ) ;
@@ -755,7 +766,7 @@ describe('trackMetricsOf', () => {
755766 expect ( mockTrack ) . toHaveBeenCalledWith (
756767 '$ld:ai:generation:error' ,
757768 testContext ,
758- { configKey , variationKey , version , modelName , providerName } ,
769+ getExpectedTrackData ( ) ,
759770 1 ,
760771 ) ;
761772
@@ -789,7 +800,7 @@ describe('trackMetricsOf', () => {
789800 expect ( mockTrack ) . toHaveBeenCalledWith (
790801 '$ld:ai:generation:success' ,
791802 testContext ,
792- { configKey , variationKey , version , modelName , providerName } ,
803+ getExpectedTrackData ( ) ,
793804 1 ,
794805 ) ;
795806
0 commit comments