Aditya commited on
Commit
09c4e61
Β·
1 Parent(s): 268a4fa

Add Fine-Tuned benchmark results (85.3% accuracy) from checkpoint-25

Browse files

- Update system3_inference.py to load LoRA adapter directly from
checkpoint-25/ instead of requiring a merged finetuned_model/ dir
- Add fill_r3.py: standalone script to populate r3 metrics in the
existing benchmark cache without re-running API calls
- Update data/benchmark_cache.json with real Fine-Tuned metrics for
all 50 questions (accuracy 85.3%, ROUGE-L 0.283, HR 0.0%)
- Update README benchmark table with real Fine-Tuned numbers

Files changed (4) hide show
  1. README.md +10 -10
  2. data/benchmark_cache.json +350 -350
  3. fill_r3.py +106 -0
  4. system3_inference.py +1 -1
README.md CHANGED
@@ -61,16 +61,16 @@ Covers CS fundamentals, algorithms, web technologies, databases, and tooling:
61
 
62
  | Metric | Baseline LLM | RAG Chatbot | Fine-Tuned | Unit |
63
  |--------|-------------|-------------|------------|------|
64
- | Answer Accuracy | 81.5 | 79.9 | β€” | % |
65
- | ROUGE-L | 0.216 | 0.291 | β€” | 0–1 |
66
- | Groundedness | 0.815 | 0.575 | β€” | 0–1 |
67
- | Answer Relevance | 0.720 | 0.768 | β€” | 0–1 |
68
- | Faithfulness | 0.216 | 0.172 | β€” | 0–1 |
69
- | Hallucination Rate | 0.0 | 6.0 | β€” | % |
70
- | Avg Response Time | 1.46 | 4.19 | β€” | sec |
71
- | Cost per Query | $0.0020 | $0.0020 | β€” | USD |
72
-
73
- > Fine-Tuned column shows `β€”` until `finetuned_model/` is placed in the project root (see Setup Β§4).
74
  > Full per-question results are in `data/benchmark_cache.json`.
75
 
76
  ---
 
61
 
62
  | Metric | Baseline LLM | RAG Chatbot | Fine-Tuned | Unit |
63
  |--------|-------------|-------------|------------|------|
64
+ | Answer Accuracy | 81.5 | 79.9 | **85.3** | % |
65
+ | ROUGE-L | 0.216 | 0.291 | **0.283** | 0–1 |
66
+ | Groundedness | 0.815 | 0.575 | **0.853** | 0–1 |
67
+ | Answer Relevance | 0.720 | 0.768 | **0.758** | 0–1 |
68
+ | Faithfulness | 0.216 | 0.172 | **0.283** | 0–1 |
69
+ | Hallucination Rate | 0.0 | 6.0 | **0.0** | % |
70
+ | Avg Response Time | 1.46 | 4.19 | 169.2 | sec |
71
+ | Cost per Query | $0.0020 | $0.0020 | **$0.0002** | USD |
72
+
73
+ > Fine-Tuned runs locally from `checkpoint-25/` (LoRA adapter on Qwen2.5-1.5B-Instruct). High latency is expected on CPU β€” GPU inference brings it to ~5s.
74
  > Full per-question results are in `data/benchmark_cache.json`.
75
 
76
  ---
data/benchmark_cache.json CHANGED
@@ -3,1200 +3,1200 @@
3
  "question": "what is binary search?",
4
  "r1_time": 2.76,
5
  "r2_time": 0.67,
6
- "r3_time": 0,
7
  "r1_rouge": 0.148,
8
  "r2_rouge": 0.6,
9
- "r3_rouge": 0,
10
  "r1_sim": 0.754,
11
  "r2_sim": 0.894,
12
- "r3_sim": 0,
13
  "r1_ground": 0.754,
14
  "r2_ground": 0.727,
15
- "r3_ground": 0,
16
  "r1_relev": 0.639,
17
  "r2_relev": 0.785,
18
- "r3_relev": 0,
19
  "r1_faith": 0.148,
20
  "r2_faith": 0.258,
21
- "r3_faith": 0,
22
  "r1_cost": 0.0023,
23
  "r2_cost": 0.0018,
24
- "r3_cost": 0
25
  },
26
  {
27
  "question": "what is the time complexity of binary search?",
28
  "r1_time": 0.51,
29
  "r2_time": 0.21,
30
- "r3_time": 0,
31
  "r1_rouge": 0.184,
32
  "r2_rouge": 0.245,
33
- "r3_rouge": 0,
34
  "r1_sim": 0.892,
35
  "r2_sim": 0.892,
36
- "r3_sim": 0,
37
  "r1_ground": 0.892,
38
  "r2_ground": 0.6,
39
- "r3_ground": 0,
40
  "r1_relev": 0.845,
41
  "r2_relev": 0.94,
42
- "r3_relev": 0,
43
  "r1_faith": 0.184,
44
  "r2_faith": 0.113,
45
- "r3_faith": 0,
46
  "r1_cost": 0.002,
47
  "r2_cost": 0.0016,
48
- "r3_cost": 0
49
  },
50
  {
51
  "question": "what is the difference between stack and queue?",
52
  "r1_time": 0.59,
53
  "r2_time": 0.31,
54
- "r3_time": 0,
55
  "r1_rouge": 0.297,
56
  "r2_rouge": 0.321,
57
- "r3_rouge": 0,
58
  "r1_sim": 0.822,
59
  "r2_sim": 0.811,
60
- "r3_sim": 0,
61
  "r1_ground": 0.822,
62
  "r2_ground": 0.723,
63
- "r3_ground": 0,
64
  "r1_relev": 0.743,
65
  "r2_relev": 0.806,
66
- "r3_relev": 0,
67
  "r1_faith": 0.297,
68
  "r2_faith": 0.17,
69
- "r3_faith": 0,
70
  "r1_cost": 0.0022,
71
  "r2_cost": 0.0021,
72
- "r3_cost": 0
73
  },
74
  {
75
  "question": "stack vs queue?",
76
  "r1_time": 0.91,
77
  "r2_time": 0.92,
78
- "r3_time": 0,
79
  "r1_rouge": 0.301,
80
  "r2_rouge": 0.161,
81
- "r3_rouge": 0,
82
  "r1_sim": 0.827,
83
  "r2_sim": 0.716,
84
- "r3_sim": 0,
85
  "r1_ground": 0.827,
86
  "r2_ground": 0.883,
87
- "r3_ground": 0,
88
  "r1_relev": 0.701,
89
  "r2_relev": 0.757,
90
- "r3_relev": 0,
91
  "r1_faith": 0.301,
92
  "r2_faith": 0.292,
93
- "r3_faith": 0,
94
  "r1_cost": 0.0022,
95
  "r2_cost": 0.0039,
96
- "r3_cost": 0
97
  },
98
  {
99
  "question": "explain merge sort.",
100
  "r1_time": 0.55,
101
  "r2_time": 0.72,
102
- "r3_time": 0,
103
  "r1_rouge": 0.211,
104
  "r2_rouge": 0.252,
105
- "r3_rouge": 0,
106
  "r1_sim": 0.76,
107
  "r2_sim": 0.885,
108
- "r3_sim": 0,
109
  "r1_ground": 0.76,
110
  "r2_ground": 0.662,
111
- "r3_ground": 0,
112
  "r1_relev": 0.632,
113
  "r2_relev": 0.754,
114
- "r3_relev": 0,
115
  "r1_faith": 0.211,
116
  "r2_faith": 0.191,
117
- "r3_faith": 0,
118
  "r1_cost": 0.0021,
119
  "r2_cost": 0.0041,
120
- "r3_cost": 0
121
  },
122
  {
123
  "question": "what is quicksort?",
124
  "r1_time": 0.46,
125
  "r2_time": 1.33,
126
- "r3_time": 0,
127
  "r1_rouge": 0.252,
128
  "r2_rouge": 0.509,
129
- "r3_rouge": 0,
130
  "r1_sim": 0.788,
131
  "r2_sim": 0.872,
132
- "r3_sim": 0,
133
  "r1_ground": 0.788,
134
  "r2_ground": 0.714,
135
- "r3_ground": 0,
136
  "r1_relev": 0.641,
137
  "r2_relev": 0.736,
138
- "r3_relev": 0,
139
  "r1_faith": 0.252,
140
  "r2_faith": 0.328,
141
- "r3_faith": 0,
142
  "r1_cost": 0.0022,
143
  "r2_cost": 0.0021,
144
- "r3_cost": 0
145
  },
146
  {
147
  "question": "what is a linked list?",
148
  "r1_time": 0.72,
149
  "r2_time": 0.46,
150
- "r3_time": 0,
151
  "r1_rouge": 0.213,
152
  "r2_rouge": 0.556,
153
- "r3_rouge": 0,
154
  "r1_sim": 0.826,
155
  "r2_sim": 0.918,
156
- "r3_sim": 0,
157
  "r1_ground": 0.826,
158
  "r2_ground": 0.712,
159
- "r3_ground": 0,
160
  "r1_relev": 0.73,
161
  "r2_relev": 0.87,
162
- "r3_relev": 0,
163
  "r1_faith": 0.213,
164
  "r2_faith": 0.255,
165
- "r3_faith": 0,
166
  "r1_cost": 0.0023,
167
  "r2_cost": 0.0019,
168
- "r3_cost": 0
169
  },
170
  {
171
  "question": "what is a binary search tree?",
172
  "r1_time": 0.6,
173
  "r2_time": 0.41,
174
- "r3_time": 0,
175
  "r1_rouge": 0.281,
176
  "r2_rouge": 0.44,
177
- "r3_rouge": 0,
178
  "r1_sim": 0.832,
179
  "r2_sim": 0.95,
180
- "r3_sim": 0,
181
  "r1_ground": 0.832,
182
  "r2_ground": 0.86,
183
- "r3_ground": 0,
184
  "r1_relev": 0.752,
185
  "r2_relev": 0.779,
186
- "r3_relev": 0,
187
  "r1_faith": 0.281,
188
  "r2_faith": 0.266,
189
- "r3_faith": 0,
190
  "r1_cost": 0.0022,
191
  "r2_cost": 0.0024,
192
- "r3_cost": 0
193
  },
194
  {
195
  "question": "what is dynamic programming?",
196
  "r1_time": 0.65,
197
  "r2_time": 1.34,
198
- "r3_time": 0,
199
  "r1_rouge": 0.171,
200
  "r2_rouge": 0.429,
201
- "r3_rouge": 0,
202
  "r1_sim": 0.822,
203
  "r2_sim": 0.818,
204
- "r3_sim": 0,
205
  "r1_ground": 0.822,
206
  "r2_ground": 0.608,
207
- "r3_ground": 0,
208
  "r1_relev": 0.646,
209
  "r2_relev": 0.742,
210
- "r3_relev": 0,
211
  "r1_faith": 0.171,
212
  "r2_faith": 0.347,
213
- "r3_faith": 0,
214
  "r1_cost": 0.0023,
215
  "r2_cost": 0.0021,
216
- "r3_cost": 0
217
  },
218
  {
219
  "question": "what are react hooks?",
220
  "r1_time": 1.0,
221
  "r2_time": 0.27,
222
- "r3_time": 0,
223
  "r1_rouge": 0.225,
224
  "r2_rouge": 0.513,
225
- "r3_rouge": 0,
226
  "r1_sim": 0.91,
227
  "r2_sim": 0.928,
228
- "r3_sim": 0,
229
  "r1_ground": 0.91,
230
  "r2_ground": 0.811,
231
- "r3_ground": 0,
232
  "r1_relev": 0.697,
233
  "r2_relev": 0.837,
234
- "r3_relev": 0,
235
  "r1_faith": 0.225,
236
  "r2_faith": 0.314,
237
- "r3_faith": 0,
238
  "r1_cost": 0.0022,
239
  "r2_cost": 0.0018,
240
- "r3_cost": 0
241
  },
242
  {
243
  "question": "what is usestate in react?",
244
  "r1_time": 0.93,
245
  "r2_time": 0.95,
246
- "r3_time": 0,
247
  "r1_rouge": 0.221,
248
  "r2_rouge": 0.387,
249
- "r3_rouge": 0,
250
  "r1_sim": 0.786,
251
  "r2_sim": 0.831,
252
- "r3_sim": 0,
253
  "r1_ground": 0.786,
254
  "r2_ground": 0.692,
255
- "r3_ground": 0,
256
  "r1_relev": 0.765,
257
  "r2_relev": 0.835,
258
- "r3_relev": 0,
259
  "r1_faith": 0.221,
260
  "r2_faith": 0.222,
261
- "r3_faith": 0,
262
  "r1_cost": 0.0022,
263
  "r2_cost": 0.0023,
264
- "r3_cost": 0
265
  },
266
  {
267
  "question": "what is useeffect in react?",
268
  "r1_time": 0.84,
269
  "r2_time": 0.51,
270
- "r3_time": 0,
271
  "r1_rouge": 0.207,
272
  "r2_rouge": 0.612,
273
- "r3_rouge": 0,
274
  "r1_sim": 0.772,
275
  "r2_sim": 0.92,
276
- "r3_sim": 0,
277
  "r1_ground": 0.772,
278
  "r2_ground": 0.844,
279
- "r3_ground": 0,
280
  "r1_relev": 0.758,
281
  "r2_relev": 0.804,
282
- "r3_relev": 0,
283
  "r1_faith": 0.207,
284
  "r2_faith": 0.337,
285
- "r3_faith": 0,
286
  "r1_cost": 0.0021,
287
  "r2_cost": 0.0021,
288
- "r3_cost": 0
289
  },
290
  {
291
  "question": "what is a rest api?",
292
  "r1_time": 0.76,
293
  "r2_time": 2.56,
294
- "r3_time": 0,
295
  "r1_rouge": 0.21,
296
  "r2_rouge": 0.409,
297
- "r3_rouge": 0,
298
  "r1_sim": 0.771,
299
  "r2_sim": 0.935,
300
- "r3_sim": 0,
301
  "r1_ground": 0.771,
302
  "r2_ground": 0.757,
303
- "r3_ground": 0,
304
  "r1_relev": 0.753,
305
  "r2_relev": 0.777,
306
- "r3_relev": 0,
307
  "r1_faith": 0.21,
308
  "r2_faith": 0.362,
309
- "r3_faith": 0,
310
  "r1_cost": 0.0022,
311
  "r2_cost": 0.0019,
312
- "r3_cost": 0
313
  },
314
  {
315
  "question": "what http methods does rest use?",
316
  "r1_time": 0.67,
317
  "r2_time": 3.38,
318
- "r3_time": 0,
319
  "r1_rouge": 0.271,
320
  "r2_rouge": 0.277,
321
- "r3_rouge": 0,
322
  "r1_sim": 0.841,
323
  "r2_sim": 0.749,
324
- "r3_sim": 0,
325
  "r1_ground": 0.841,
326
  "r2_ground": 0.635,
327
- "r3_ground": 0,
328
  "r1_relev": 0.753,
329
  "r2_relev": 0.685,
330
- "r3_relev": 0,
331
  "r1_faith": 0.271,
332
  "r2_faith": 0.135,
333
- "r3_faith": 0,
334
  "r1_cost": 0.0019,
335
  "r2_cost": 0.0017,
336
- "r3_cost": 0
337
  },
338
  {
339
  "question": "what does http status code 404 mean?",
340
  "r1_time": 0.45,
341
  "r2_time": 4.3,
342
- "r3_time": 0,
343
  "r1_rouge": 0.187,
344
  "r2_rouge": 0.286,
345
- "r3_rouge": 0,
346
  "r1_sim": 0.902,
347
  "r2_sim": 0.919,
348
- "r3_sim": 0,
349
  "r1_ground": 0.902,
350
  "r2_ground": 0.646,
351
- "r3_ground": 0,
352
  "r1_relev": 0.796,
353
  "r2_relev": 0.86,
354
- "r3_relev": 0,
355
  "r1_faith": 0.187,
356
  "r2_faith": 0.124,
357
- "r3_faith": 0,
358
  "r1_cost": 0.0017,
359
  "r2_cost": 0.0016,
360
- "r3_cost": 0
361
  },
362
  {
363
  "question": "what is css flexbox?",
364
  "r1_time": 0.57,
365
  "r2_time": 5.92,
366
- "r3_time": 0,
367
  "r1_rouge": 0.225,
368
  "r2_rouge": 0.405,
369
- "r3_rouge": 0,
370
  "r1_sim": 0.846,
371
  "r2_sim": 0.93,
372
- "r3_sim": 0,
373
  "r1_ground": 0.846,
374
  "r2_ground": 0.919,
375
- "r3_ground": 0,
376
  "r1_relev": 0.777,
377
  "r2_relev": 0.826,
378
- "r3_relev": 0,
379
  "r1_faith": 0.225,
380
  "r2_faith": 0.389,
381
- "r3_faith": 0,
382
  "r1_cost": 0.0022,
383
  "r2_cost": 0.0017,
384
- "r3_cost": 0
385
  },
386
  {
387
  "question": "what is a javascript promise?",
388
  "r1_time": 1.11,
389
  "r2_time": 4.46,
390
- "r3_time": 0,
391
  "r1_rouge": 0.161,
392
  "r2_rouge": 0.259,
393
- "r3_rouge": 0,
394
  "r1_sim": 0.774,
395
  "r2_sim": 0.829,
396
- "r3_sim": 0,
397
  "r1_ground": 0.774,
398
  "r2_ground": 0.7,
399
- "r3_ground": 0,
400
  "r1_relev": 0.683,
401
  "r2_relev": 0.87,
402
- "r3_relev": 0,
403
  "r1_faith": 0.161,
404
  "r2_faith": 0.28,
405
- "r3_faith": 0,
406
  "r1_cost": 0.0023,
407
  "r2_cost": 0.0021,
408
- "r3_cost": 0
409
  },
410
  {
411
  "question": "what is inorder traversal?",
412
  "r1_time": 2.38,
413
  "r2_time": 4.85,
414
- "r3_time": 0,
415
  "r1_rouge": 0.216,
416
  "r2_rouge": 0.415,
417
- "r3_rouge": 0,
418
  "r1_sim": 0.869,
419
  "r2_sim": 0.847,
420
- "r3_sim": 0,
421
  "r1_ground": 0.869,
422
  "r2_ground": 0.69,
423
- "r3_ground": 0,
424
  "r1_relev": 0.772,
425
  "r2_relev": 0.854,
426
- "r3_relev": 0,
427
  "r1_faith": 0.216,
428
  "r2_faith": 0.127,
429
- "r3_faith": 0,
430
  "r1_cost": 0.002,
431
  "r2_cost": 0.0019,
432
- "r3_cost": 0
433
  },
434
  {
435
  "question": "what is the difference between bfs and dfs?",
436
  "r1_time": 0.62,
437
  "r2_time": 6.27,
438
- "r3_time": 0,
439
  "r1_rouge": 0.268,
440
  "r2_rouge": 0.273,
441
- "r3_rouge": 0,
442
  "r1_sim": 0.855,
443
  "r2_sim": 0.913,
444
- "r3_sim": 0,
445
  "r1_ground": 0.855,
446
  "r2_ground": 0.757,
447
- "r3_ground": 0,
448
  "r1_relev": 0.479,
449
  "r2_relev": 0.706,
450
- "r3_relev": 0,
451
  "r1_faith": 0.268,
452
  "r2_faith": 0.227,
453
- "r3_faith": 0,
454
  "r1_cost": 0.0022,
455
  "r2_cost": 0.003,
456
- "r3_cost": 0
457
  },
458
  {
459
  "question": "what is memoization?",
460
  "r1_time": 0.62,
461
  "r2_time": 5.53,
462
- "r3_time": 0,
463
  "r1_rouge": 0.245,
464
  "r2_rouge": 0.307,
465
- "r3_rouge": 0,
466
  "r1_sim": 0.793,
467
  "r2_sim": 0.884,
468
- "r3_sim": 0,
469
  "r1_ground": 0.793,
470
  "r2_ground": 0.523,
471
- "r3_ground": 0,
472
  "r1_relev": 0.544,
473
  "r2_relev": 0.762,
474
- "r3_relev": 0,
475
  "r1_faith": 0.245,
476
  "r2_faith": 0.117,
477
- "r3_faith": 0,
478
  "r1_cost": 0.0022,
479
  "r2_cost": 0.0023,
480
- "r3_cost": 0
481
  },
482
  {
483
  "question": "what is flex-grow in css?",
484
  "r1_time": 1.71,
485
  "r2_time": 5.43,
486
- "r3_time": 0,
487
  "r1_rouge": 0.242,
488
  "r2_rouge": 0.505,
489
- "r3_rouge": 0,
490
  "r1_sim": 0.888,
491
  "r2_sim": 0.931,
492
- "r3_sim": 0,
493
  "r1_ground": 0.888,
494
  "r2_ground": 0.732,
495
- "r3_ground": 0,
496
  "r1_relev": 0.782,
497
  "r2_relev": 0.846,
498
- "r3_relev": 0,
499
  "r1_faith": 0.242,
500
  "r2_faith": 0.176,
501
- "r3_faith": 0,
502
  "r1_cost": 0.0021,
503
  "r2_cost": 0.0019,
504
- "r3_cost": 0
505
  },
506
  {
507
  "question": "what is a hash table?",
508
  "r1_time": 1.85,
509
  "r2_time": 4.5,
510
- "r3_time": 0,
511
  "r1_rouge": 0.19,
512
  "r2_rouge": 0.359,
513
- "r3_rouge": 0,
514
  "r1_sim": 0.763,
515
  "r2_sim": 0.909,
516
- "r3_sim": 0,
517
  "r1_ground": 0.763,
518
  "r2_ground": 0.358,
519
- "r3_ground": 0,
520
  "r1_relev": 0.717,
521
  "r2_relev": 0.851,
522
- "r3_relev": 0,
523
  "r1_faith": 0.19,
524
  "r2_faith": 0.158,
525
- "r3_faith": 0,
526
  "r1_cost": 0.0023,
527
  "r2_cost": 0.0022,
528
- "r3_cost": 0
529
  },
530
  {
531
  "question": "what is time complexity?",
532
  "r1_time": 1.84,
533
  "r2_time": 5.43,
534
- "r3_time": 0,
535
  "r1_rouge": 0.273,
536
  "r2_rouge": 0.37,
537
- "r3_rouge": 0,
538
  "r1_sim": 0.871,
539
  "r2_sim": 0.875,
540
- "r3_sim": 0,
541
  "r1_ground": 0.871,
542
  "r2_ground": 0.357,
543
- "r3_ground": 0,
544
  "r1_relev": 0.714,
545
  "r2_relev": 0.824,
546
- "r3_relev": 0,
547
  "r1_faith": 0.273,
548
  "r2_faith": 0.109,
549
- "r3_faith": 0,
550
  "r1_cost": 0.0024,
551
  "r2_cost": 0.002,
552
- "r3_cost": 0
553
  },
554
  {
555
  "question": "what is space complexity?",
556
  "r1_time": 2.0,
557
  "r2_time": 4.34,
558
- "r3_time": 0,
559
  "r1_rouge": 0.213,
560
  "r2_rouge": 0.33,
561
- "r3_rouge": 0,
562
  "r1_sim": 0.792,
563
  "r2_sim": 0.84,
564
- "r3_sim": 0,
565
  "r1_ground": 0.792,
566
  "r2_ground": 0.354,
567
- "r3_ground": 0,
568
  "r1_relev": 0.727,
569
  "r2_relev": 0.842,
570
- "r3_relev": 0,
571
  "r1_faith": 0.213,
572
  "r2_faith": 0.079,
573
- "r3_faith": 0,
574
  "r1_cost": 0.0023,
575
  "r2_cost": 0.0018,
576
- "r3_cost": 0
577
  },
578
  {
579
  "question": "what is recursion?",
580
  "r1_time": 1.49,
581
  "r2_time": 5.38,
582
- "r3_time": 0,
583
  "r1_rouge": 0.264,
584
  "r2_rouge": 0.321,
585
- "r3_rouge": 0,
586
  "r1_sim": 0.806,
587
  "r2_sim": 0.926,
588
- "r3_sim": 0,
589
  "r1_ground": 0.806,
590
  "r2_ground": 0.455,
591
- "r3_ground": 0,
592
  "r1_relev": 0.7,
593
  "r2_relev": 0.875,
594
- "r3_relev": 0,
595
  "r1_faith": 0.264,
596
  "r2_faith": 0.078,
597
- "r3_faith": 0,
598
  "r1_cost": 0.0022,
599
  "r2_cost": 0.0021,
600
- "r3_cost": 0
601
  },
602
  {
603
  "question": "what is a heap data structure?",
604
  "r1_time": 1.6,
605
  "r2_time": 5.53,
606
- "r3_time": 0,
607
  "r1_rouge": 0.239,
608
  "r2_rouge": 0.393,
609
- "r3_rouge": 0,
610
  "r1_sim": 0.85,
611
  "r2_sim": 0.844,
612
- "r3_sim": 0,
613
  "r1_ground": 0.85,
614
  "r2_ground": 0.591,
615
- "r3_ground": 0,
616
  "r1_relev": 0.727,
617
  "r2_relev": 0.847,
618
- "r3_relev": 0,
619
  "r1_faith": 0.239,
620
  "r2_faith": 0.148,
621
- "r3_faith": 0,
622
  "r1_cost": 0.0023,
623
  "r2_cost": 0.0026,
624
- "r3_cost": 0
625
  },
626
  {
627
  "question": "what is a graph data structure?",
628
  "r1_time": 1.84,
629
  "r2_time": 5.63,
630
- "r3_time": 0,
631
  "r1_rouge": 0.211,
632
  "r2_rouge": 0.327,
633
- "r3_rouge": 0,
634
  "r1_sim": 0.768,
635
  "r2_sim": 0.689,
636
- "r3_sim": 0,
637
  "r1_ground": 0.768,
638
  "r2_ground": 0.635,
639
- "r3_ground": 0,
640
  "r1_relev": 0.742,
641
  "r2_relev": 0.906,
642
- "r3_relev": 0,
643
  "r1_faith": 0.211,
644
  "r2_faith": 0.191,
645
- "r3_faith": 0,
646
  "r1_cost": 0.0021,
647
  "r2_cost": 0.002,
648
- "r3_cost": 0
649
  },
650
  {
651
  "question": "what is depth first search?",
652
  "r1_time": 1.77,
653
  "r2_time": 6.19,
654
- "r3_time": 0,
655
  "r1_rouge": 0.183,
656
  "r2_rouge": 0.541,
657
- "r3_rouge": 0,
658
  "r1_sim": 0.855,
659
  "r2_sim": 0.957,
660
- "r3_sim": 0,
661
  "r1_ground": 0.855,
662
  "r2_ground": 0.685,
663
- "r3_ground": 0,
664
  "r1_relev": 0.562,
665
  "r2_relev": 0.673,
666
- "r3_relev": 0,
667
  "r1_faith": 0.183,
668
  "r2_faith": 0.24,
669
- "r3_faith": 0,
670
  "r1_cost": 0.0022,
671
  "r2_cost": 0.0021,
672
- "r3_cost": 0
673
  },
674
  {
675
  "question": "what is breadth first search?",
676
  "r1_time": 0.63,
677
  "r2_time": 5.43,
678
- "r3_time": 0,
679
  "r1_rouge": 0.22,
680
  "r2_rouge": 0.429,
681
- "r3_rouge": 0,
682
  "r1_sim": 0.852,
683
  "r2_sim": 0.978,
684
- "r3_sim": 0,
685
  "r1_ground": 0.852,
686
  "r2_ground": 0.728,
687
- "r3_ground": 0,
688
  "r1_relev": 0.713,
689
  "r2_relev": 0.8,
690
- "r3_relev": 0,
691
  "r1_faith": 0.22,
692
  "r2_faith": 0.272,
693
- "r3_faith": 0,
694
  "r1_cost": 0.0022,
695
  "r2_cost": 0.0021,
696
- "r3_cost": 0
697
  },
698
  {
699
  "question": "what is a hash map?",
700
  "r1_time": 1.71,
701
  "r2_time": 7.17,
702
- "r3_time": 0,
703
  "r1_rouge": 0.229,
704
  "r2_rouge": 0.256,
705
- "r3_rouge": 0,
706
  "r1_sim": 0.796,
707
  "r2_sim": 0.87,
708
- "r3_sim": 0,
709
  "r1_ground": 0.796,
710
  "r2_ground": 0.386,
711
- "r3_ground": 0,
712
  "r1_relev": 0.655,
713
  "r2_relev": 0.759,
714
- "r3_relev": 0,
715
  "r1_faith": 0.229,
716
  "r2_faith": 0.15,
717
- "r3_faith": 0,
718
  "r1_cost": 0.0023,
719
  "r2_cost": 0.0032,
720
- "r3_cost": 0
721
  },
722
  {
723
  "question": "what is big o notation?",
724
  "r1_time": 1.71,
725
  "r2_time": 5.95,
726
- "r3_time": 0,
727
  "r1_rouge": 0.239,
728
  "r2_rouge": 0.331,
729
- "r3_rouge": 0,
730
  "r1_sim": 0.851,
731
  "r2_sim": 0.904,
732
- "r3_sim": 0,
733
  "r1_ground": 0.851,
734
  "r2_ground": 0.473,
735
- "r3_ground": 0,
736
  "r1_relev": 0.736,
737
  "r2_relev": 0.817,
738
- "r3_relev": 0,
739
  "r1_faith": 0.239,
740
  "r2_faith": 0.179,
741
- "r3_faith": 0,
742
  "r1_cost": 0.0023,
743
  "r2_cost": 0.0034,
744
- "r3_cost": 0
745
  },
746
  {
747
  "question": "what is a tree data structure?",
748
  "r1_time": 2.02,
749
  "r2_time": 5.66,
750
- "r3_time": 0,
751
  "r1_rouge": 0.182,
752
  "r2_rouge": 0.273,
753
- "r3_rouge": 0,
754
  "r1_sim": 0.798,
755
  "r2_sim": 0.835,
756
- "r3_sim": 0,
757
  "r1_ground": 0.798,
758
  "r2_ground": 0.59,
759
- "r3_ground": 0,
760
  "r1_relev": 0.74,
761
  "r2_relev": 0.899,
762
- "r3_relev": 0,
763
  "r1_faith": 0.182,
764
  "r2_faith": 0.215,
765
- "r3_faith": 0,
766
  "r1_cost": 0.0022,
767
  "r2_cost": 0.0022,
768
- "r3_cost": 0
769
  },
770
  {
771
  "question": "what is object oriented programming?",
772
  "r1_time": 4.66,
773
  "r2_time": 2.78,
774
- "r3_time": 0,
775
  "r1_rouge": 0.18,
776
  "r2_rouge": 0.164,
777
- "r3_rouge": 0,
778
  "r1_sim": 0.881,
779
  "r2_sim": 0.897,
780
- "r3_sim": 0,
781
  "r1_ground": 0.881,
782
  "r2_ground": 0.345,
783
- "r3_ground": 0,
784
  "r1_relev": 0.754,
785
  "r2_relev": 0.752,
786
- "r3_relev": 0,
787
  "r1_faith": 0.18,
788
  "r2_faith": 0.089,
789
- "r3_faith": 0,
790
  "r1_cost": 0.0022,
791
  "r2_cost": 0.0038,
792
- "r3_cost": 0
793
  },
794
  {
795
  "question": "what is inheritance in oop?",
796
  "r1_time": 3.5,
797
  "r2_time": 6.5,
798
- "r3_time": 0,
799
  "r1_rouge": 0.187,
800
  "r2_rouge": 0.108,
801
- "r3_rouge": 0,
802
  "r1_sim": 0.821,
803
  "r2_sim": 0.782,
804
- "r3_sim": 0,
805
  "r1_ground": 0.821,
806
  "r2_ground": 0.382,
807
- "r3_ground": 0,
808
  "r1_relev": 0.731,
809
  "r2_relev": 0.792,
810
- "r3_relev": 0,
811
  "r1_faith": 0.187,
812
  "r2_faith": 0.077,
813
- "r3_faith": 0,
814
  "r1_cost": 0.0021,
815
  "r2_cost": 0.0019,
816
- "r3_cost": 0
817
  },
818
  {
819
  "question": "what is polymorphism in oop?",
820
  "r1_time": 0.79,
821
  "r2_time": 6.04,
822
- "r3_time": 0,
823
  "r1_rouge": 0.188,
824
  "r2_rouge": 0.145,
825
- "r3_rouge": 0,
826
  "r1_sim": 0.759,
827
  "r2_sim": 0.65,
828
- "r3_sim": 0,
829
  "r1_ground": 0.759,
830
  "r2_ground": 0.473,
831
- "r3_ground": 0,
832
  "r1_relev": 0.662,
833
  "r2_relev": 0.598,
834
- "r3_relev": 0,
835
  "r1_faith": 0.188,
836
  "r2_faith": 0.088,
837
- "r3_faith": 0,
838
  "r1_cost": 0.0021,
839
  "r2_cost": 0.0034,
840
- "r3_cost": 0
841
  },
842
  {
843
  "question": "what is encapsulation in oop?",
844
  "r1_time": 2.73,
845
  "r2_time": 6.14,
846
- "r3_time": 0,
847
  "r1_rouge": 0.128,
848
  "r2_rouge": 0.078,
849
- "r3_rouge": 0,
850
  "r1_sim": 0.661,
851
  "r2_sim": 0.569,
852
- "r3_sim": 0,
853
  "r1_ground": 0.661,
854
  "r2_ground": 0.511,
855
- "r3_ground": 0,
856
  "r1_relev": 0.801,
857
  "r2_relev": 0.823,
858
- "r3_relev": 0,
859
  "r1_faith": 0.128,
860
  "r2_faith": 0.066,
861
- "r3_faith": 0,
862
  "r1_cost": 0.0022,
863
  "r2_cost": 0.002,
864
- "r3_cost": 0
865
  },
866
  {
867
  "question": "what is async await in javascript?",
868
  "r1_time": 0.63,
869
  "r2_time": 6.14,
870
- "r3_time": 0,
871
  "r1_rouge": 0.186,
872
  "r2_rouge": 0.301,
873
- "r3_rouge": 0,
874
  "r1_sim": 0.815,
875
  "r2_sim": 0.837,
876
- "r3_sim": 0,
877
  "r1_ground": 0.815,
878
  "r2_ground": 0.772,
879
- "r3_ground": 0,
880
  "r1_relev": 0.792,
881
  "r2_relev": 0.835,
882
- "r3_relev": 0,
883
  "r1_faith": 0.186,
884
  "r2_faith": 0.276,
885
- "r3_faith": 0,
886
  "r1_cost": 0.0023,
887
  "r2_cost": 0.0036,
888
- "r3_cost": 0
889
  },
890
  {
891
  "question": "what is a closure in javascript?",
892
  "r1_time": 3.34,
893
  "r2_time": 5.94,
894
- "r3_time": 0,
895
  "r1_rouge": 0.252,
896
  "r2_rouge": 0.253,
897
- "r3_rouge": 0,
898
  "r1_sim": 0.842,
899
  "r2_sim": 0.871,
900
- "r3_sim": 0,
901
  "r1_ground": 0.842,
902
  "r2_ground": 0.4,
903
- "r3_ground": 0,
904
  "r1_relev": 0.797,
905
  "r2_relev": 0.84,
906
- "r3_relev": 0,
907
  "r1_faith": 0.252,
908
  "r2_faith": 0.123,
909
- "r3_faith": 0,
910
  "r1_cost": 0.0022,
911
  "r2_cost": 0.0035,
912
- "r3_cost": 0
913
  },
914
  {
915
  "question": "what is the event loop in javascript?",
916
  "r1_time": 3.18,
917
  "r2_time": 5.21,
918
- "r3_time": 0,
919
  "r1_rouge": 0.169,
920
  "r2_rouge": 0.182,
921
- "r3_rouge": 0,
922
  "r1_sim": 0.802,
923
  "r2_sim": 0.835,
924
- "r3_sim": 0,
925
  "r1_ground": 0.802,
926
  "r2_ground": 0.381,
927
- "r3_ground": 0,
928
  "r1_relev": 0.766,
929
  "r2_relev": 0.79,
930
- "r3_relev": 0,
931
  "r1_faith": 0.169,
932
  "r2_faith": 0.081,
933
- "r3_faith": 0,
934
  "r1_cost": 0.0023,
935
  "r2_cost": 0.0043,
936
- "r3_cost": 0
937
  },
938
  {
939
  "question": "what is typescript?",
940
  "r1_time": 3.14,
941
  "r2_time": 4.37,
942
- "r3_time": 0,
943
  "r1_rouge": 0.183,
944
  "r2_rouge": 0.095,
945
- "r3_rouge": 0,
946
  "r1_sim": 0.847,
947
  "r2_sim": 0.687,
948
- "r3_sim": 0,
949
  "r1_ground": 0.847,
950
  "r2_ground": 0.559,
951
- "r3_ground": 0,
952
  "r1_relev": 0.738,
953
  "r2_relev": 0.739,
954
- "r3_relev": 0,
955
  "r1_faith": 0.183,
956
  "r2_faith": 0.145,
957
- "r3_faith": 0,
958
  "r1_cost": 0.0022,
959
  "r2_cost": 0.0018,
960
- "r3_cost": 0
961
  },
962
  {
963
  "question": "what is sql?",
964
  "r1_time": 1.56,
965
  "r2_time": 5.33,
966
- "r3_time": 0,
967
  "r1_rouge": 0.23,
968
  "r2_rouge": 0.0,
969
- "r3_rouge": 0,
970
  "r1_sim": 0.805,
971
  "r2_sim": 0.167,
972
- "r3_sim": 0,
973
  "r1_ground": 0.805,
974
  "r2_ground": 0.076,
975
- "r3_ground": 0,
976
  "r1_relev": 0.723,
977
  "r2_relev": 0.236,
978
- "r3_relev": 0,
979
  "r1_faith": 0.23,
980
  "r2_faith": 0.014,
981
- "r3_faith": 0,
982
  "r1_cost": 0.0022,
983
  "r2_cost": 0.0016,
984
- "r3_cost": 0
985
  },
986
  {
987
  "question": "what is a primary key in sql?",
988
  "r1_time": 1.95,
989
  "r2_time": 4.38,
990
- "r3_time": 0,
991
  "r1_rouge": 0.261,
992
  "r2_rouge": 0.048,
993
- "r3_rouge": 0,
994
  "r1_sim": 0.82,
995
  "r2_sim": 0.378,
996
- "r3_sim": 0,
997
  "r1_ground": 0.82,
998
  "r2_ground": 0.303,
999
- "r3_ground": 0,
1000
  "r1_relev": 0.779,
1001
  "r2_relev": 0.513,
1002
- "r3_relev": 0,
1003
  "r1_faith": 0.261,
1004
  "r2_faith": 0.059,
1005
- "r3_faith": 0,
1006
  "r1_cost": 0.0023,
1007
  "r2_cost": 0.0017,
1008
- "r3_cost": 0
1009
  },
1010
  {
1011
  "question": "what is a foreign key in sql?",
1012
  "r1_time": 2.09,
1013
  "r2_time": 5.47,
1014
- "r3_time": 0,
1015
  "r1_rouge": 0.237,
1016
  "r2_rouge": 0.083,
1017
- "r3_rouge": 0,
1018
  "r1_sim": 0.612,
1019
  "r2_sim": 0.597,
1020
- "r3_sim": 0,
1021
  "r1_ground": 0.612,
1022
  "r2_ground": 0.238,
1023
- "r3_ground": 0,
1024
  "r1_relev": 0.642,
1025
  "r2_relev": 0.759,
1026
- "r3_relev": 0,
1027
  "r1_faith": 0.237,
1028
  "r2_faith": 0.048,
1029
- "r3_faith": 0,
1030
  "r1_cost": 0.0023,
1031
  "r2_cost": 0.0018,
1032
- "r3_cost": 0
1033
  },
1034
  {
1035
  "question": "what is an index in sql?",
1036
  "r1_time": 0.95,
1037
  "r2_time": 5.37,
1038
- "r3_time": 0,
1039
  "r1_rouge": 0.18,
1040
  "r2_rouge": 0.099,
1041
- "r3_rouge": 0,
1042
  "r1_sim": 0.834,
1043
  "r2_sim": 0.705,
1044
- "r3_sim": 0,
1045
  "r1_ground": 0.834,
1046
  "r2_ground": 0.348,
1047
- "r3_ground": 0,
1048
  "r1_relev": 0.79,
1049
  "r2_relev": 0.703,
1050
- "r3_relev": 0,
1051
  "r1_faith": 0.18,
1052
  "r2_faith": 0.021,
1053
- "r3_faith": 0,
1054
  "r1_cost": 0.0025,
1055
  "r2_cost": 0.0018,
1056
- "r3_cost": 0
1057
  },
1058
  {
1059
  "question": "what is normalization in databases?",
1060
  "r1_time": 1.71,
1061
  "r2_time": 5.94,
1062
- "r3_time": 0,
1063
  "r1_rouge": 0.183,
1064
  "r2_rouge": 0.099,
1065
- "r3_rouge": 0,
1066
  "r1_sim": 0.778,
1067
  "r2_sim": 0.564,
1068
- "r3_sim": 0,
1069
  "r1_ground": 0.778,
1070
  "r2_ground": 0.451,
1071
- "r3_ground": 0,
1072
  "r1_relev": 0.759,
1073
  "r2_relev": 0.645,
1074
- "r3_relev": 0,
1075
  "r1_faith": 0.183,
1076
  "r2_faith": 0.033,
1077
- "r3_faith": 0,
1078
  "r1_cost": 0.0023,
1079
  "r2_cost": 0.0018,
1080
- "r3_cost": 0
1081
  },
1082
  {
1083
  "question": "what is git?",
1084
  "r1_time": 0.8,
1085
  "r2_time": 6.36,
1086
- "r3_time": 0,
1087
  "r1_rouge": 0.141,
1088
  "r2_rouge": 0.079,
1089
- "r3_rouge": 0,
1090
  "r1_sim": 0.841,
1091
  "r2_sim": 0.644,
1092
- "r3_sim": 0,
1093
  "r1_ground": 0.841,
1094
  "r2_ground": 0.355,
1095
- "r3_ground": 0,
1096
  "r1_relev": 0.656,
1097
  "r2_relev": 0.755,
1098
- "r3_relev": 0,
1099
  "r1_faith": 0.141,
1100
  "r2_faith": 0.021,
1101
- "r3_faith": 0,
1102
  "r1_cost": 0.0024,
1103
  "r2_cost": 0.0017,
1104
- "r3_cost": 0
1105
  },
1106
  {
1107
  "question": "what is a merge conflict in git?",
1108
  "r1_time": 1.29,
1109
  "r2_time": 5.36,
1110
- "r3_time": 0,
1111
  "r1_rouge": 0.257,
1112
  "r2_rouge": 0.102,
1113
- "r3_rouge": 0,
1114
  "r1_sim": 0.845,
1115
  "r2_sim": 0.64,
1116
- "r3_sim": 0,
1117
  "r1_ground": 0.845,
1118
  "r2_ground": 0.393,
1119
- "r3_ground": 0,
1120
  "r1_relev": 0.802,
1121
  "r2_relev": 0.803,
1122
- "r3_relev": 0,
1123
  "r1_faith": 0.257,
1124
  "r2_faith": 0.082,
1125
- "r3_faith": 0,
1126
  "r1_cost": 0.0024,
1127
  "r2_cost": 0.0019,
1128
- "r3_cost": 0
1129
  },
1130
  {
1131
  "question": "what is docker?",
1132
  "r1_time": 0.55,
1133
  "r2_time": 5.55,
1134
- "r3_time": 0,
1135
  "r1_rouge": 0.229,
1136
  "r2_rouge": 0.083,
1137
- "r3_rouge": 0,
1138
  "r1_sim": 0.851,
1139
  "r2_sim": 0.43,
1140
- "r3_sim": 0,
1141
  "r1_ground": 0.851,
1142
  "r2_ground": 0.683,
1143
- "r3_ground": 0,
1144
  "r1_relev": 0.682,
1145
  "r2_relev": 0.517,
1146
- "r3_relev": 0,
1147
  "r1_faith": 0.229,
1148
  "r2_faith": 0.072,
1149
- "r3_faith": 0,
1150
  "r1_cost": 0.0023,
1151
  "r2_cost": 0.0019,
1152
- "r3_cost": 0
1153
  },
1154
  {
1155
  "question": "what is json?",
1156
  "r1_time": 0.95,
1157
  "r2_time": 5.8,
1158
- "r3_time": 0,
1159
  "r1_rouge": 0.23,
1160
  "r2_rouge": 0.261,
1161
- "r3_rouge": 0,
1162
  "r1_sim": 0.78,
1163
  "r2_sim": 0.796,
1164
- "r3_sim": 0,
1165
  "r1_ground": 0.78,
1166
  "r2_ground": 0.564,
1167
- "r3_ground": 0,
1168
  "r1_relev": 0.702,
1169
  "r2_relev": 0.614,
1170
- "r3_relev": 0,
1171
  "r1_faith": 0.23,
1172
  "r2_faith": 0.168,
1173
- "r3_faith": 0,
1174
  "r1_cost": 0.002,
1175
  "r2_cost": 0.0016,
1176
- "r3_cost": 0
1177
  },
1178
  {
1179
  "question": "what is css grid?",
1180
  "r1_time": 1.24,
1181
  "r2_time": 4.71,
1182
- "r3_time": 0,
1183
  "r1_rouge": 0.203,
1184
  "r2_rouge": 0.292,
1185
- "r3_rouge": 0,
1186
  "r1_sim": 0.833,
1187
  "r2_sim": 0.92,
1188
- "r3_sim": 0,
1189
  "r1_ground": 0.833,
1190
  "r2_ground": 0.692,
1191
- "r3_ground": 0,
1192
  "r1_relev": 0.823,
1193
  "r2_relev": 0.764,
1194
- "r3_relev": 0,
1195
  "r1_faith": 0.203,
1196
  "r2_faith": 0.268,
1197
- "r3_faith": 0,
1198
  "r1_cost": 0.0022,
1199
  "r2_cost": 0.0032,
1200
- "r3_cost": 0
1201
  }
1202
  ]
 
3
  "question": "what is binary search?",
4
  "r1_time": 2.76,
5
  "r2_time": 0.67,
6
+ "r3_time": 43.48,
7
  "r1_rouge": 0.148,
8
  "r2_rouge": 0.6,
9
+ "r3_rouge": 0.271,
10
  "r1_sim": 0.754,
11
  "r2_sim": 0.894,
12
+ "r3_sim": 0.809,
13
  "r1_ground": 0.754,
14
  "r2_ground": 0.727,
15
+ "r3_ground": 0.809,
16
  "r1_relev": 0.639,
17
  "r2_relev": 0.785,
18
+ "r3_relev": 0.648,
19
  "r1_faith": 0.148,
20
  "r2_faith": 0.258,
21
+ "r3_faith": 0.271,
22
  "r1_cost": 0.0023,
23
  "r2_cost": 0.0018,
24
+ "r3_cost": 0.0002
25
  },
26
  {
27
  "question": "what is the time complexity of binary search?",
28
  "r1_time": 0.51,
29
  "r2_time": 0.21,
30
+ "r3_time": 11.84,
31
  "r1_rouge": 0.184,
32
  "r2_rouge": 0.245,
33
+ "r3_rouge": 0.231,
34
  "r1_sim": 0.892,
35
  "r2_sim": 0.892,
36
+ "r3_sim": 0.805,
37
  "r1_ground": 0.892,
38
  "r2_ground": 0.6,
39
+ "r3_ground": 0.805,
40
  "r1_relev": 0.845,
41
  "r2_relev": 0.94,
42
+ "r3_relev": 0.802,
43
  "r1_faith": 0.184,
44
  "r2_faith": 0.113,
45
+ "r3_faith": 0.231,
46
  "r1_cost": 0.002,
47
  "r2_cost": 0.0016,
48
+ "r3_cost": 0.0001
49
  },
50
  {
51
  "question": "what is the difference between stack and queue?",
52
  "r1_time": 0.59,
53
  "r2_time": 0.31,
54
+ "r3_time": 35.97,
55
  "r1_rouge": 0.297,
56
  "r2_rouge": 0.321,
57
+ "r3_rouge": 0.344,
58
  "r1_sim": 0.822,
59
  "r2_sim": 0.811,
60
+ "r3_sim": 0.859,
61
  "r1_ground": 0.822,
62
  "r2_ground": 0.723,
63
+ "r3_ground": 0.859,
64
  "r1_relev": 0.743,
65
  "r2_relev": 0.806,
66
+ "r3_relev": 0.72,
67
  "r1_faith": 0.297,
68
  "r2_faith": 0.17,
69
+ "r3_faith": 0.344,
70
  "r1_cost": 0.0022,
71
  "r2_cost": 0.0021,
72
+ "r3_cost": 0.0002
73
  },
74
  {
75
  "question": "stack vs queue?",
76
  "r1_time": 0.91,
77
  "r2_time": 0.92,
78
+ "r3_time": 54.39,
79
  "r1_rouge": 0.301,
80
  "r2_rouge": 0.161,
81
+ "r3_rouge": 0.38,
82
  "r1_sim": 0.827,
83
  "r2_sim": 0.716,
84
+ "r3_sim": 0.843,
85
  "r1_ground": 0.827,
86
  "r2_ground": 0.883,
87
+ "r3_ground": 0.843,
88
  "r1_relev": 0.701,
89
  "r2_relev": 0.757,
90
+ "r3_relev": 0.73,
91
  "r1_faith": 0.301,
92
  "r2_faith": 0.292,
93
+ "r3_faith": 0.38,
94
  "r1_cost": 0.0022,
95
  "r2_cost": 0.0039,
96
+ "r3_cost": 0.0001
97
  },
98
  {
99
  "question": "explain merge sort.",
100
  "r1_time": 0.55,
101
  "r2_time": 0.72,
102
+ "r3_time": 5988.36,
103
  "r1_rouge": 0.211,
104
  "r2_rouge": 0.252,
105
+ "r3_rouge": 0.267,
106
  "r1_sim": 0.76,
107
  "r2_sim": 0.885,
108
+ "r3_sim": 0.812,
109
  "r1_ground": 0.76,
110
  "r2_ground": 0.662,
111
+ "r3_ground": 0.812,
112
  "r1_relev": 0.632,
113
  "r2_relev": 0.754,
114
+ "r3_relev": 0.644,
115
  "r1_faith": 0.211,
116
  "r2_faith": 0.191,
117
+ "r3_faith": 0.267,
118
  "r1_cost": 0.0021,
119
  "r2_cost": 0.0041,
120
+ "r3_cost": 0.0002
121
  },
122
  {
123
  "question": "what is quicksort?",
124
  "r1_time": 0.46,
125
  "r2_time": 1.33,
126
+ "r3_time": 61.32,
127
  "r1_rouge": 0.252,
128
  "r2_rouge": 0.509,
129
+ "r3_rouge": 0.351,
130
  "r1_sim": 0.788,
131
  "r2_sim": 0.872,
132
+ "r3_sim": 0.885,
133
  "r1_ground": 0.788,
134
  "r2_ground": 0.714,
135
+ "r3_ground": 0.885,
136
  "r1_relev": 0.641,
137
  "r2_relev": 0.736,
138
+ "r3_relev": 0.666,
139
  "r1_faith": 0.252,
140
  "r2_faith": 0.328,
141
+ "r3_faith": 0.351,
142
  "r1_cost": 0.0022,
143
  "r2_cost": 0.0021,
144
+ "r3_cost": 0.0002
145
  },
146
  {
147
  "question": "what is a linked list?",
148
  "r1_time": 0.72,
149
  "r2_time": 0.46,
150
+ "r3_time": 63.82,
151
  "r1_rouge": 0.213,
152
  "r2_rouge": 0.556,
153
+ "r3_rouge": 0.32,
154
  "r1_sim": 0.826,
155
  "r2_sim": 0.918,
156
+ "r3_sim": 0.867,
157
  "r1_ground": 0.826,
158
  "r2_ground": 0.712,
159
+ "r3_ground": 0.867,
160
  "r1_relev": 0.73,
161
  "r2_relev": 0.87,
162
+ "r3_relev": 0.735,
163
  "r1_faith": 0.213,
164
  "r2_faith": 0.255,
165
+ "r3_faith": 0.32,
166
  "r1_cost": 0.0023,
167
  "r2_cost": 0.0019,
168
+ "r3_cost": 0.0002
169
  },
170
  {
171
  "question": "what is a binary search tree?",
172
  "r1_time": 0.6,
173
  "r2_time": 0.41,
174
+ "r3_time": 58.2,
175
  "r1_rouge": 0.281,
176
  "r2_rouge": 0.44,
177
+ "r3_rouge": 0.393,
178
  "r1_sim": 0.832,
179
  "r2_sim": 0.95,
180
+ "r3_sim": 0.828,
181
  "r1_ground": 0.832,
182
  "r2_ground": 0.86,
183
+ "r3_ground": 0.828,
184
  "r1_relev": 0.752,
185
  "r2_relev": 0.779,
186
+ "r3_relev": 0.729,
187
  "r1_faith": 0.281,
188
  "r2_faith": 0.266,
189
+ "r3_faith": 0.393,
190
  "r1_cost": 0.0022,
191
  "r2_cost": 0.0024,
192
+ "r3_cost": 0.0002
193
  },
194
  {
195
  "question": "what is dynamic programming?",
196
  "r1_time": 0.65,
197
  "r2_time": 1.34,
198
+ "r3_time": 58.48,
199
  "r1_rouge": 0.171,
200
  "r2_rouge": 0.429,
201
+ "r3_rouge": 0.291,
202
  "r1_sim": 0.822,
203
  "r2_sim": 0.818,
204
+ "r3_sim": 0.867,
205
  "r1_ground": 0.822,
206
  "r2_ground": 0.608,
207
+ "r3_ground": 0.867,
208
  "r1_relev": 0.646,
209
  "r2_relev": 0.742,
210
+ "r3_relev": 0.701,
211
  "r1_faith": 0.171,
212
  "r2_faith": 0.347,
213
+ "r3_faith": 0.291,
214
  "r1_cost": 0.0023,
215
  "r2_cost": 0.0021,
216
+ "r3_cost": 0.0002
217
  },
218
  {
219
  "question": "what are react hooks?",
220
  "r1_time": 1.0,
221
  "r2_time": 0.27,
222
+ "r3_time": 61.88,
223
  "r1_rouge": 0.225,
224
  "r2_rouge": 0.513,
225
+ "r3_rouge": 0.373,
226
  "r1_sim": 0.91,
227
  "r2_sim": 0.928,
228
+ "r3_sim": 0.947,
229
  "r1_ground": 0.91,
230
  "r2_ground": 0.811,
231
+ "r3_ground": 0.947,
232
  "r1_relev": 0.697,
233
  "r2_relev": 0.837,
234
+ "r3_relev": 0.792,
235
  "r1_faith": 0.225,
236
  "r2_faith": 0.314,
237
+ "r3_faith": 0.373,
238
  "r1_cost": 0.0022,
239
  "r2_cost": 0.0018,
240
+ "r3_cost": 0.0002
241
  },
242
  {
243
  "question": "what is usestate in react?",
244
  "r1_time": 0.93,
245
  "r2_time": 0.95,
246
+ "r3_time": 59.19,
247
  "r1_rouge": 0.221,
248
  "r2_rouge": 0.387,
249
+ "r3_rouge": 0.276,
250
  "r1_sim": 0.786,
251
  "r2_sim": 0.831,
252
+ "r3_sim": 0.85,
253
  "r1_ground": 0.786,
254
  "r2_ground": 0.692,
255
+ "r3_ground": 0.85,
256
  "r1_relev": 0.765,
257
  "r2_relev": 0.835,
258
+ "r3_relev": 0.676,
259
  "r1_faith": 0.221,
260
  "r2_faith": 0.222,
261
+ "r3_faith": 0.276,
262
  "r1_cost": 0.0022,
263
  "r2_cost": 0.0023,
264
+ "r3_cost": 0.0002
265
  },
266
  {
267
  "question": "what is useeffect in react?",
268
  "r1_time": 0.84,
269
  "r2_time": 0.51,
270
+ "r3_time": 58.83,
271
  "r1_rouge": 0.207,
272
  "r2_rouge": 0.612,
273
+ "r3_rouge": 0.245,
274
  "r1_sim": 0.772,
275
  "r2_sim": 0.92,
276
+ "r3_sim": 0.839,
277
  "r1_ground": 0.772,
278
  "r2_ground": 0.844,
279
+ "r3_ground": 0.839,
280
  "r1_relev": 0.758,
281
  "r2_relev": 0.804,
282
+ "r3_relev": 0.765,
283
  "r1_faith": 0.207,
284
  "r2_faith": 0.337,
285
+ "r3_faith": 0.245,
286
  "r1_cost": 0.0021,
287
  "r2_cost": 0.0021,
288
+ "r3_cost": 0.0002
289
  },
290
  {
291
  "question": "what is a rest api?",
292
  "r1_time": 0.76,
293
  "r2_time": 2.56,
294
+ "r3_time": 58.8,
295
  "r1_rouge": 0.21,
296
  "r2_rouge": 0.409,
297
+ "r3_rouge": 0.298,
298
  "r1_sim": 0.771,
299
  "r2_sim": 0.935,
300
+ "r3_sim": 0.875,
301
  "r1_ground": 0.771,
302
  "r2_ground": 0.757,
303
+ "r3_ground": 0.875,
304
  "r1_relev": 0.753,
305
  "r2_relev": 0.777,
306
+ "r3_relev": 0.733,
307
  "r1_faith": 0.21,
308
  "r2_faith": 0.362,
309
+ "r3_faith": 0.298,
310
  "r1_cost": 0.0022,
311
  "r2_cost": 0.0019,
312
+ "r3_cost": 0.0002
313
  },
314
  {
315
  "question": "what http methods does rest use?",
316
  "r1_time": 0.67,
317
  "r2_time": 3.38,
318
+ "r3_time": 38.29,
319
  "r1_rouge": 0.271,
320
  "r2_rouge": 0.277,
321
+ "r3_rouge": 0.4,
322
  "r1_sim": 0.841,
323
  "r2_sim": 0.749,
324
+ "r3_sim": 0.815,
325
  "r1_ground": 0.841,
326
  "r2_ground": 0.635,
327
+ "r3_ground": 0.815,
328
  "r1_relev": 0.753,
329
  "r2_relev": 0.685,
330
+ "r3_relev": 0.774,
331
  "r1_faith": 0.271,
332
  "r2_faith": 0.135,
333
+ "r3_faith": 0.4,
334
  "r1_cost": 0.0019,
335
  "r2_cost": 0.0017,
336
+ "r3_cost": 0.0001
337
  },
338
  {
339
  "question": "what does http status code 404 mean?",
340
  "r1_time": 0.45,
341
  "r2_time": 4.3,
342
+ "r3_time": 25.47,
343
  "r1_rouge": 0.187,
344
  "r2_rouge": 0.286,
345
+ "r3_rouge": 0.286,
346
  "r1_sim": 0.902,
347
  "r2_sim": 0.919,
348
+ "r3_sim": 0.899,
349
  "r1_ground": 0.902,
350
  "r2_ground": 0.646,
351
+ "r3_ground": 0.899,
352
  "r1_relev": 0.796,
353
  "r2_relev": 0.86,
354
+ "r3_relev": 0.906,
355
  "r1_faith": 0.187,
356
  "r2_faith": 0.124,
357
+ "r3_faith": 0.286,
358
  "r1_cost": 0.0017,
359
  "r2_cost": 0.0016,
360
+ "r3_cost": 0.0001
361
  },
362
  {
363
  "question": "what is css flexbox?",
364
  "r1_time": 0.57,
365
  "r2_time": 5.92,
366
+ "r3_time": 59.45,
367
  "r1_rouge": 0.225,
368
  "r2_rouge": 0.405,
369
+ "r3_rouge": 0.274,
370
  "r1_sim": 0.846,
371
  "r2_sim": 0.93,
372
+ "r3_sim": 0.891,
373
  "r1_ground": 0.846,
374
  "r2_ground": 0.919,
375
+ "r3_ground": 0.891,
376
  "r1_relev": 0.777,
377
  "r2_relev": 0.826,
378
+ "r3_relev": 0.696,
379
  "r1_faith": 0.225,
380
  "r2_faith": 0.389,
381
+ "r3_faith": 0.274,
382
  "r1_cost": 0.0022,
383
  "r2_cost": 0.0017,
384
+ "r3_cost": 0.0002
385
  },
386
  {
387
  "question": "what is a javascript promise?",
388
  "r1_time": 1.11,
389
  "r2_time": 4.46,
390
+ "r3_time": 59.11,
391
  "r1_rouge": 0.161,
392
  "r2_rouge": 0.259,
393
+ "r3_rouge": 0.196,
394
  "r1_sim": 0.774,
395
  "r2_sim": 0.829,
396
+ "r3_sim": 0.75,
397
  "r1_ground": 0.774,
398
  "r2_ground": 0.7,
399
+ "r3_ground": 0.75,
400
  "r1_relev": 0.683,
401
  "r2_relev": 0.87,
402
+ "r3_relev": 0.76,
403
  "r1_faith": 0.161,
404
  "r2_faith": 0.28,
405
+ "r3_faith": 0.196,
406
  "r1_cost": 0.0023,
407
  "r2_cost": 0.0021,
408
+ "r3_cost": 0.0001
409
  },
410
  {
411
  "question": "what is inorder traversal?",
412
  "r1_time": 2.38,
413
  "r2_time": 4.85,
414
+ "r3_time": 57.69,
415
  "r1_rouge": 0.216,
416
  "r2_rouge": 0.415,
417
+ "r3_rouge": 0.218,
418
  "r1_sim": 0.869,
419
  "r2_sim": 0.847,
420
+ "r3_sim": 0.853,
421
  "r1_ground": 0.869,
422
  "r2_ground": 0.69,
423
+ "r3_ground": 0.853,
424
  "r1_relev": 0.772,
425
  "r2_relev": 0.854,
426
+ "r3_relev": 0.834,
427
  "r1_faith": 0.216,
428
  "r2_faith": 0.127,
429
+ "r3_faith": 0.218,
430
  "r1_cost": 0.002,
431
  "r2_cost": 0.0019,
432
+ "r3_cost": 0.0002
433
  },
434
  {
435
  "question": "what is the difference between bfs and dfs?",
436
  "r1_time": 0.62,
437
  "r2_time": 6.27,
438
+ "r3_time": 59.32,
439
  "r1_rouge": 0.268,
440
  "r2_rouge": 0.273,
441
+ "r3_rouge": 0.202,
442
  "r1_sim": 0.855,
443
  "r2_sim": 0.913,
444
+ "r3_sim": 0.866,
445
  "r1_ground": 0.855,
446
  "r2_ground": 0.757,
447
+ "r3_ground": 0.866,
448
  "r1_relev": 0.479,
449
  "r2_relev": 0.706,
450
+ "r3_relev": 0.675,
451
  "r1_faith": 0.268,
452
  "r2_faith": 0.227,
453
+ "r3_faith": 0.202,
454
  "r1_cost": 0.0022,
455
  "r2_cost": 0.003,
456
+ "r3_cost": 0.0002
457
  },
458
  {
459
  "question": "what is memoization?",
460
  "r1_time": 0.62,
461
  "r2_time": 5.53,
462
+ "r3_time": 59.06,
463
  "r1_rouge": 0.245,
464
  "r2_rouge": 0.307,
465
+ "r3_rouge": 0.267,
466
  "r1_sim": 0.793,
467
  "r2_sim": 0.884,
468
+ "r3_sim": 0.898,
469
  "r1_ground": 0.793,
470
  "r2_ground": 0.523,
471
+ "r3_ground": 0.898,
472
  "r1_relev": 0.544,
473
  "r2_relev": 0.762,
474
+ "r3_relev": 0.729,
475
  "r1_faith": 0.245,
476
  "r2_faith": 0.117,
477
+ "r3_faith": 0.267,
478
  "r1_cost": 0.0022,
479
  "r2_cost": 0.0023,
480
+ "r3_cost": 0.0002
481
  },
482
  {
483
  "question": "what is flex-grow in css?",
484
  "r1_time": 1.71,
485
  "r2_time": 5.43,
486
+ "r3_time": 59.97,
487
  "r1_rouge": 0.242,
488
  "r2_rouge": 0.505,
489
+ "r3_rouge": 0.33,
490
  "r1_sim": 0.888,
491
  "r2_sim": 0.931,
492
+ "r3_sim": 0.863,
493
  "r1_ground": 0.888,
494
  "r2_ground": 0.732,
495
+ "r3_ground": 0.863,
496
  "r1_relev": 0.782,
497
  "r2_relev": 0.846,
498
+ "r3_relev": 0.712,
499
  "r1_faith": 0.242,
500
  "r2_faith": 0.176,
501
+ "r3_faith": 0.33,
502
  "r1_cost": 0.0021,
503
  "r2_cost": 0.0019,
504
+ "r3_cost": 0.0002
505
  },
506
  {
507
  "question": "what is a hash table?",
508
  "r1_time": 1.85,
509
  "r2_time": 4.5,
510
+ "r3_time": 52.51,
511
  "r1_rouge": 0.19,
512
  "r2_rouge": 0.359,
513
+ "r3_rouge": 0.44,
514
  "r1_sim": 0.763,
515
  "r2_sim": 0.909,
516
+ "r3_sim": 0.95,
517
  "r1_ground": 0.763,
518
  "r2_ground": 0.358,
519
+ "r3_ground": 0.95,
520
  "r1_relev": 0.717,
521
  "r2_relev": 0.851,
522
+ "r3_relev": 0.772,
523
  "r1_faith": 0.19,
524
  "r2_faith": 0.158,
525
+ "r3_faith": 0.44,
526
  "r1_cost": 0.0023,
527
  "r2_cost": 0.0022,
528
+ "r3_cost": 0.0001
529
  },
530
  {
531
  "question": "what is time complexity?",
532
  "r1_time": 1.84,
533
  "r2_time": 5.43,
534
+ "r3_time": 57.57,
535
  "r1_rouge": 0.273,
536
  "r2_rouge": 0.37,
537
+ "r3_rouge": 0.335,
538
  "r1_sim": 0.871,
539
  "r2_sim": 0.875,
540
+ "r3_sim": 0.893,
541
  "r1_ground": 0.871,
542
  "r2_ground": 0.357,
543
+ "r3_ground": 0.893,
544
  "r1_relev": 0.714,
545
  "r2_relev": 0.824,
546
+ "r3_relev": 0.7,
547
  "r1_faith": 0.273,
548
  "r2_faith": 0.109,
549
+ "r3_faith": 0.335,
550
  "r1_cost": 0.0024,
551
  "r2_cost": 0.002,
552
+ "r3_cost": 0.0002
553
  },
554
  {
555
  "question": "what is space complexity?",
556
  "r1_time": 2.0,
557
  "r2_time": 4.34,
558
+ "r3_time": 58.56,
559
  "r1_rouge": 0.213,
560
  "r2_rouge": 0.33,
561
+ "r3_rouge": 0.245,
562
  "r1_sim": 0.792,
563
  "r2_sim": 0.84,
564
+ "r3_sim": 0.819,
565
  "r1_ground": 0.792,
566
  "r2_ground": 0.354,
567
+ "r3_ground": 0.819,
568
  "r1_relev": 0.727,
569
  "r2_relev": 0.842,
570
+ "r3_relev": 0.76,
571
  "r1_faith": 0.213,
572
  "r2_faith": 0.079,
573
+ "r3_faith": 0.245,
574
  "r1_cost": 0.0023,
575
  "r2_cost": 0.0018,
576
+ "r3_cost": 0.0002
577
  },
578
  {
579
  "question": "what is recursion?",
580
  "r1_time": 1.49,
581
  "r2_time": 5.38,
582
+ "r3_time": 57.38,
583
  "r1_rouge": 0.264,
584
  "r2_rouge": 0.321,
585
+ "r3_rouge": 0.265,
586
  "r1_sim": 0.806,
587
  "r2_sim": 0.926,
588
+ "r3_sim": 0.819,
589
  "r1_ground": 0.806,
590
  "r2_ground": 0.455,
591
+ "r3_ground": 0.819,
592
  "r1_relev": 0.7,
593
  "r2_relev": 0.875,
594
+ "r3_relev": 0.74,
595
  "r1_faith": 0.264,
596
  "r2_faith": 0.078,
597
+ "r3_faith": 0.265,
598
  "r1_cost": 0.0022,
599
  "r2_cost": 0.0021,
600
+ "r3_cost": 0.0002
601
  },
602
  {
603
  "question": "what is a heap data structure?",
604
  "r1_time": 1.6,
605
  "r2_time": 5.53,
606
+ "r3_time": 57.95,
607
  "r1_rouge": 0.239,
608
  "r2_rouge": 0.393,
609
+ "r3_rouge": 0.325,
610
  "r1_sim": 0.85,
611
  "r2_sim": 0.844,
612
+ "r3_sim": 0.872,
613
  "r1_ground": 0.85,
614
  "r2_ground": 0.591,
615
+ "r3_ground": 0.872,
616
  "r1_relev": 0.727,
617
  "r2_relev": 0.847,
618
+ "r3_relev": 0.731,
619
  "r1_faith": 0.239,
620
  "r2_faith": 0.148,
621
+ "r3_faith": 0.325,
622
  "r1_cost": 0.0023,
623
  "r2_cost": 0.0026,
624
+ "r3_cost": 0.0002
625
  },
626
  {
627
  "question": "what is a graph data structure?",
628
  "r1_time": 1.84,
629
  "r2_time": 5.63,
630
+ "r3_time": 50.98,
631
  "r1_rouge": 0.211,
632
  "r2_rouge": 0.327,
633
+ "r3_rouge": 0.26,
634
  "r1_sim": 0.768,
635
  "r2_sim": 0.689,
636
+ "r3_sim": 0.744,
637
  "r1_ground": 0.768,
638
  "r2_ground": 0.635,
639
+ "r3_ground": 0.744,
640
  "r1_relev": 0.742,
641
  "r2_relev": 0.906,
642
+ "r3_relev": 0.831,
643
  "r1_faith": 0.211,
644
  "r2_faith": 0.191,
645
+ "r3_faith": 0.26,
646
  "r1_cost": 0.0021,
647
  "r2_cost": 0.002,
648
+ "r3_cost": 0.0002
649
  },
650
  {
651
  "question": "what is depth first search?",
652
  "r1_time": 1.77,
653
  "r2_time": 6.19,
654
+ "r3_time": 52.07,
655
  "r1_rouge": 0.183,
656
  "r2_rouge": 0.541,
657
+ "r3_rouge": 0.282,
658
  "r1_sim": 0.855,
659
  "r2_sim": 0.957,
660
+ "r3_sim": 0.938,
661
  "r1_ground": 0.855,
662
  "r2_ground": 0.685,
663
+ "r3_ground": 0.938,
664
  "r1_relev": 0.562,
665
  "r2_relev": 0.673,
666
+ "r3_relev": 0.662,
667
  "r1_faith": 0.183,
668
  "r2_faith": 0.24,
669
+ "r3_faith": 0.282,
670
  "r1_cost": 0.0022,
671
  "r2_cost": 0.0021,
672
+ "r3_cost": 0.0002
673
  },
674
  {
675
  "question": "what is breadth first search?",
676
  "r1_time": 0.63,
677
  "r2_time": 5.43,
678
+ "r3_time": 49.98,
679
  "r1_rouge": 0.22,
680
  "r2_rouge": 0.429,
681
+ "r3_rouge": 0.33,
682
  "r1_sim": 0.852,
683
  "r2_sim": 0.978,
684
+ "r3_sim": 0.957,
685
  "r1_ground": 0.852,
686
  "r2_ground": 0.728,
687
+ "r3_ground": 0.957,
688
  "r1_relev": 0.713,
689
  "r2_relev": 0.8,
690
+ "r3_relev": 0.816,
691
  "r1_faith": 0.22,
692
  "r2_faith": 0.272,
693
+ "r3_faith": 0.33,
694
  "r1_cost": 0.0022,
695
  "r2_cost": 0.0021,
696
+ "r3_cost": 0.0002
697
  },
698
  {
699
  "question": "what is a hash map?",
700
  "r1_time": 1.71,
701
  "r2_time": 7.17,
702
+ "r3_time": 50.37,
703
  "r1_rouge": 0.229,
704
  "r2_rouge": 0.256,
705
+ "r3_rouge": 0.239,
706
  "r1_sim": 0.796,
707
  "r2_sim": 0.87,
708
+ "r3_sim": 0.838,
709
  "r1_ground": 0.796,
710
  "r2_ground": 0.386,
711
+ "r3_ground": 0.838,
712
  "r1_relev": 0.655,
713
  "r2_relev": 0.759,
714
+ "r3_relev": 0.71,
715
  "r1_faith": 0.229,
716
  "r2_faith": 0.15,
717
+ "r3_faith": 0.239,
718
  "r1_cost": 0.0023,
719
  "r2_cost": 0.0032,
720
+ "r3_cost": 0.0002
721
  },
722
  {
723
  "question": "what is big o notation?",
724
  "r1_time": 1.71,
725
  "r2_time": 5.95,
726
+ "r3_time": 49.92,
727
  "r1_rouge": 0.239,
728
  "r2_rouge": 0.331,
729
+ "r3_rouge": 0.305,
730
  "r1_sim": 0.851,
731
  "r2_sim": 0.904,
732
+ "r3_sim": 0.895,
733
  "r1_ground": 0.851,
734
  "r2_ground": 0.473,
735
+ "r3_ground": 0.895,
736
  "r1_relev": 0.736,
737
  "r2_relev": 0.817,
738
+ "r3_relev": 0.852,
739
  "r1_faith": 0.239,
740
  "r2_faith": 0.179,
741
+ "r3_faith": 0.305,
742
  "r1_cost": 0.0023,
743
  "r2_cost": 0.0034,
744
+ "r3_cost": 0.0002
745
  },
746
  {
747
  "question": "what is a tree data structure?",
748
  "r1_time": 2.02,
749
  "r2_time": 5.66,
750
+ "r3_time": 49.82,
751
  "r1_rouge": 0.182,
752
  "r2_rouge": 0.273,
753
+ "r3_rouge": 0.253,
754
  "r1_sim": 0.798,
755
  "r2_sim": 0.835,
756
+ "r3_sim": 0.804,
757
  "r1_ground": 0.798,
758
  "r2_ground": 0.59,
759
+ "r3_ground": 0.804,
760
  "r1_relev": 0.74,
761
  "r2_relev": 0.899,
762
+ "r3_relev": 0.865,
763
  "r1_faith": 0.182,
764
  "r2_faith": 0.215,
765
+ "r3_faith": 0.253,
766
  "r1_cost": 0.0022,
767
  "r2_cost": 0.0022,
768
+ "r3_cost": 0.0002
769
  },
770
  {
771
  "question": "what is object oriented programming?",
772
  "r1_time": 4.66,
773
  "r2_time": 2.78,
774
+ "r3_time": 50.02,
775
  "r1_rouge": 0.18,
776
  "r2_rouge": 0.164,
777
+ "r3_rouge": 0.374,
778
  "r1_sim": 0.881,
779
  "r2_sim": 0.897,
780
+ "r3_sim": 0.892,
781
  "r1_ground": 0.881,
782
  "r2_ground": 0.345,
783
+ "r3_ground": 0.892,
784
  "r1_relev": 0.754,
785
  "r2_relev": 0.752,
786
+ "r3_relev": 0.78,
787
  "r1_faith": 0.18,
788
  "r2_faith": 0.089,
789
+ "r3_faith": 0.374,
790
  "r1_cost": 0.0022,
791
  "r2_cost": 0.0038,
792
+ "r3_cost": 0.0002
793
  },
794
  {
795
  "question": "what is inheritance in oop?",
796
  "r1_time": 3.5,
797
  "r2_time": 6.5,
798
+ "r3_time": 51.25,
799
  "r1_rouge": 0.187,
800
  "r2_rouge": 0.108,
801
+ "r3_rouge": 0.222,
802
  "r1_sim": 0.821,
803
  "r2_sim": 0.782,
804
+ "r3_sim": 0.829,
805
  "r1_ground": 0.821,
806
  "r2_ground": 0.382,
807
+ "r3_ground": 0.829,
808
  "r1_relev": 0.731,
809
  "r2_relev": 0.792,
810
+ "r3_relev": 0.656,
811
  "r1_faith": 0.187,
812
  "r2_faith": 0.077,
813
+ "r3_faith": 0.222,
814
  "r1_cost": 0.0021,
815
  "r2_cost": 0.0019,
816
+ "r3_cost": 0.0002
817
  },
818
  {
819
  "question": "what is polymorphism in oop?",
820
  "r1_time": 0.79,
821
  "r2_time": 6.04,
822
+ "r3_time": 51.84,
823
  "r1_rouge": 0.188,
824
  "r2_rouge": 0.145,
825
+ "r3_rouge": 0.205,
826
  "r1_sim": 0.759,
827
  "r2_sim": 0.65,
828
+ "r3_sim": 0.797,
829
  "r1_ground": 0.759,
830
  "r2_ground": 0.473,
831
+ "r3_ground": 0.797,
832
  "r1_relev": 0.662,
833
  "r2_relev": 0.598,
834
+ "r3_relev": 0.741,
835
  "r1_faith": 0.188,
836
  "r2_faith": 0.088,
837
+ "r3_faith": 0.205,
838
  "r1_cost": 0.0021,
839
  "r2_cost": 0.0034,
840
+ "r3_cost": 0.0002
841
  },
842
  {
843
  "question": "what is encapsulation in oop?",
844
  "r1_time": 2.73,
845
  "r2_time": 6.14,
846
+ "r3_time": 49.75,
847
  "r1_rouge": 0.128,
848
  "r2_rouge": 0.078,
849
+ "r3_rouge": 0.193,
850
  "r1_sim": 0.661,
851
  "r2_sim": 0.569,
852
+ "r3_sim": 0.72,
853
  "r1_ground": 0.661,
854
  "r2_ground": 0.511,
855
+ "r3_ground": 0.72,
856
  "r1_relev": 0.801,
857
  "r2_relev": 0.823,
858
+ "r3_relev": 0.819,
859
  "r1_faith": 0.128,
860
  "r2_faith": 0.066,
861
+ "r3_faith": 0.193,
862
  "r1_cost": 0.0022,
863
  "r2_cost": 0.002,
864
+ "r3_cost": 0.0002
865
  },
866
  {
867
  "question": "what is async await in javascript?",
868
  "r1_time": 0.63,
869
  "r2_time": 6.14,
870
+ "r3_time": 49.53,
871
  "r1_rouge": 0.186,
872
  "r2_rouge": 0.301,
873
+ "r3_rouge": 0.259,
874
  "r1_sim": 0.815,
875
  "r2_sim": 0.837,
876
+ "r3_sim": 0.778,
877
  "r1_ground": 0.815,
878
  "r2_ground": 0.772,
879
+ "r3_ground": 0.778,
880
  "r1_relev": 0.792,
881
  "r2_relev": 0.835,
882
+ "r3_relev": 0.737,
883
  "r1_faith": 0.186,
884
  "r2_faith": 0.276,
885
+ "r3_faith": 0.259,
886
  "r1_cost": 0.0023,
887
  "r2_cost": 0.0036,
888
+ "r3_cost": 0.0002
889
  },
890
  {
891
  "question": "what is a closure in javascript?",
892
  "r1_time": 3.34,
893
  "r2_time": 5.94,
894
+ "r3_time": 54.74,
895
  "r1_rouge": 0.252,
896
  "r2_rouge": 0.253,
897
+ "r3_rouge": 0.276,
898
  "r1_sim": 0.842,
899
  "r2_sim": 0.871,
900
+ "r3_sim": 0.807,
901
  "r1_ground": 0.842,
902
  "r2_ground": 0.4,
903
+ "r3_ground": 0.807,
904
  "r1_relev": 0.797,
905
  "r2_relev": 0.84,
906
+ "r3_relev": 0.793,
907
  "r1_faith": 0.252,
908
  "r2_faith": 0.123,
909
+ "r3_faith": 0.276,
910
  "r1_cost": 0.0022,
911
  "r2_cost": 0.0035,
912
+ "r3_cost": 0.0001
913
  },
914
  {
915
  "question": "what is the event loop in javascript?",
916
  "r1_time": 3.18,
917
  "r2_time": 5.21,
918
+ "r3_time": 49.3,
919
  "r1_rouge": 0.169,
920
  "r2_rouge": 0.182,
921
+ "r3_rouge": 0.219,
922
  "r1_sim": 0.802,
923
  "r2_sim": 0.835,
924
+ "r3_sim": 0.873,
925
  "r1_ground": 0.802,
926
  "r2_ground": 0.381,
927
+ "r3_ground": 0.873,
928
  "r1_relev": 0.766,
929
  "r2_relev": 0.79,
930
+ "r3_relev": 0.8,
931
  "r1_faith": 0.169,
932
  "r2_faith": 0.081,
933
+ "r3_faith": 0.219,
934
  "r1_cost": 0.0023,
935
  "r2_cost": 0.0043,
936
+ "r3_cost": 0.0002
937
  },
938
  {
939
  "question": "what is typescript?",
940
  "r1_time": 3.14,
941
  "r2_time": 4.37,
942
+ "r3_time": 48.43,
943
  "r1_rouge": 0.183,
944
  "r2_rouge": 0.095,
945
+ "r3_rouge": 0.21,
946
  "r1_sim": 0.847,
947
  "r2_sim": 0.687,
948
+ "r3_sim": 0.87,
949
  "r1_ground": 0.847,
950
  "r2_ground": 0.559,
951
+ "r3_ground": 0.87,
952
  "r1_relev": 0.738,
953
  "r2_relev": 0.739,
954
+ "r3_relev": 0.787,
955
  "r1_faith": 0.183,
956
  "r2_faith": 0.145,
957
+ "r3_faith": 0.21,
958
  "r1_cost": 0.0022,
959
  "r2_cost": 0.0018,
960
+ "r3_cost": 0.0002
961
  },
962
  {
963
  "question": "what is sql?",
964
  "r1_time": 1.56,
965
  "r2_time": 5.33,
966
+ "r3_time": 48.68,
967
  "r1_rouge": 0.23,
968
  "r2_rouge": 0.0,
969
+ "r3_rouge": 0.252,
970
  "r1_sim": 0.805,
971
  "r2_sim": 0.167,
972
+ "r3_sim": 0.792,
973
  "r1_ground": 0.805,
974
  "r2_ground": 0.076,
975
+ "r3_ground": 0.792,
976
  "r1_relev": 0.723,
977
  "r2_relev": 0.236,
978
+ "r3_relev": 0.759,
979
  "r1_faith": 0.23,
980
  "r2_faith": 0.014,
981
+ "r3_faith": 0.252,
982
  "r1_cost": 0.0022,
983
  "r2_cost": 0.0016,
984
+ "r3_cost": 0.0002
985
  },
986
  {
987
  "question": "what is a primary key in sql?",
988
  "r1_time": 1.95,
989
  "r2_time": 4.38,
990
+ "r3_time": 42.23,
991
  "r1_rouge": 0.261,
992
  "r2_rouge": 0.048,
993
+ "r3_rouge": 0.289,
994
  "r1_sim": 0.82,
995
  "r2_sim": 0.378,
996
+ "r3_sim": 0.897,
997
  "r1_ground": 0.82,
998
  "r2_ground": 0.303,
999
+ "r3_ground": 0.897,
1000
  "r1_relev": 0.779,
1001
  "r2_relev": 0.513,
1002
+ "r3_relev": 0.882,
1003
  "r1_faith": 0.261,
1004
  "r2_faith": 0.059,
1005
+ "r3_faith": 0.289,
1006
  "r1_cost": 0.0023,
1007
  "r2_cost": 0.0017,
1008
+ "r3_cost": 0.0002
1009
  },
1010
  {
1011
  "question": "what is a foreign key in sql?",
1012
  "r1_time": 2.09,
1013
  "r2_time": 5.47,
1014
+ "r3_time": 48.6,
1015
  "r1_rouge": 0.237,
1016
  "r2_rouge": 0.083,
1017
+ "r3_rouge": 0.352,
1018
  "r1_sim": 0.612,
1019
  "r2_sim": 0.597,
1020
+ "r3_sim": 0.839,
1021
  "r1_ground": 0.612,
1022
  "r2_ground": 0.238,
1023
+ "r3_ground": 0.839,
1024
  "r1_relev": 0.642,
1025
  "r2_relev": 0.759,
1026
+ "r3_relev": 0.771,
1027
  "r1_faith": 0.237,
1028
  "r2_faith": 0.048,
1029
+ "r3_faith": 0.352,
1030
  "r1_cost": 0.0023,
1031
  "r2_cost": 0.0018,
1032
+ "r3_cost": 0.0002
1033
  },
1034
  {
1035
  "question": "what is an index in sql?",
1036
  "r1_time": 0.95,
1037
  "r2_time": 5.37,
1038
+ "r3_time": 50.73,
1039
  "r1_rouge": 0.18,
1040
  "r2_rouge": 0.099,
1041
+ "r3_rouge": 0.187,
1042
  "r1_sim": 0.834,
1043
  "r2_sim": 0.705,
1044
+ "r3_sim": 0.794,
1045
  "r1_ground": 0.834,
1046
  "r2_ground": 0.348,
1047
+ "r3_ground": 0.794,
1048
  "r1_relev": 0.79,
1049
  "r2_relev": 0.703,
1050
+ "r3_relev": 0.756,
1051
  "r1_faith": 0.18,
1052
  "r2_faith": 0.021,
1053
+ "r3_faith": 0.187,
1054
  "r1_cost": 0.0025,
1055
  "r2_cost": 0.0018,
1056
+ "r3_cost": 0.0002
1057
  },
1058
  {
1059
  "question": "what is normalization in databases?",
1060
  "r1_time": 1.71,
1061
  "r2_time": 5.94,
1062
+ "r3_time": 28.71,
1063
  "r1_rouge": 0.183,
1064
  "r2_rouge": 0.099,
1065
+ "r3_rouge": 0.311,
1066
  "r1_sim": 0.778,
1067
  "r2_sim": 0.564,
1068
+ "r3_sim": 0.895,
1069
  "r1_ground": 0.778,
1070
  "r2_ground": 0.451,
1071
+ "r3_ground": 0.895,
1072
  "r1_relev": 0.759,
1073
  "r2_relev": 0.645,
1074
+ "r3_relev": 0.858,
1075
  "r1_faith": 0.183,
1076
  "r2_faith": 0.033,
1077
+ "r3_faith": 0.311,
1078
  "r1_cost": 0.0023,
1079
  "r2_cost": 0.0018,
1080
+ "r3_cost": 0.0001
1081
  },
1082
  {
1083
  "question": "what is git?",
1084
  "r1_time": 0.8,
1085
  "r2_time": 6.36,
1086
+ "r3_time": 31.68,
1087
  "r1_rouge": 0.141,
1088
  "r2_rouge": 0.079,
1089
+ "r3_rouge": 0.295,
1090
  "r1_sim": 0.841,
1091
  "r2_sim": 0.644,
1092
+ "r3_sim": 0.891,
1093
  "r1_ground": 0.841,
1094
  "r2_ground": 0.355,
1095
+ "r3_ground": 0.891,
1096
  "r1_relev": 0.656,
1097
  "r2_relev": 0.755,
1098
+ "r3_relev": 0.757,
1099
  "r1_faith": 0.141,
1100
  "r2_faith": 0.021,
1101
+ "r3_faith": 0.295,
1102
  "r1_cost": 0.0024,
1103
  "r2_cost": 0.0017,
1104
+ "r3_cost": 0.0001
1105
  },
1106
  {
1107
  "question": "what is a merge conflict in git?",
1108
  "r1_time": 1.29,
1109
  "r2_time": 5.36,
1110
+ "r3_time": 60.03,
1111
  "r1_rouge": 0.257,
1112
  "r2_rouge": 0.102,
1113
+ "r3_rouge": 0.335,
1114
  "r1_sim": 0.845,
1115
  "r2_sim": 0.64,
1116
+ "r3_sim": 0.923,
1117
  "r1_ground": 0.845,
1118
  "r2_ground": 0.393,
1119
+ "r3_ground": 0.923,
1120
  "r1_relev": 0.802,
1121
  "r2_relev": 0.803,
1122
+ "r3_relev": 0.835,
1123
  "r1_faith": 0.257,
1124
  "r2_faith": 0.082,
1125
+ "r3_faith": 0.335,
1126
  "r1_cost": 0.0024,
1127
  "r2_cost": 0.0019,
1128
+ "r3_cost": 0.0002
1129
  },
1130
  {
1131
  "question": "what is docker?",
1132
  "r1_time": 0.55,
1133
  "r2_time": 5.55,
1134
+ "r3_time": 53.62,
1135
  "r1_rouge": 0.229,
1136
  "r2_rouge": 0.083,
1137
+ "r3_rouge": 0.184,
1138
  "r1_sim": 0.851,
1139
  "r2_sim": 0.43,
1140
+ "r3_sim": 0.874,
1141
  "r1_ground": 0.851,
1142
  "r2_ground": 0.683,
1143
+ "r3_ground": 0.874,
1144
  "r1_relev": 0.682,
1145
  "r2_relev": 0.517,
1146
+ "r3_relev": 0.743,
1147
  "r1_faith": 0.229,
1148
  "r2_faith": 0.072,
1149
+ "r3_faith": 0.184,
1150
  "r1_cost": 0.0023,
1151
  "r2_cost": 0.0019,
1152
+ "r3_cost": 0.0002
1153
  },
1154
  {
1155
  "question": "what is json?",
1156
  "r1_time": 0.95,
1157
  "r2_time": 5.8,
1158
+ "r3_time": 29.45,
1159
  "r1_rouge": 0.23,
1160
  "r2_rouge": 0.261,
1161
+ "r3_rouge": 0.28,
1162
  "r1_sim": 0.78,
1163
  "r2_sim": 0.796,
1164
+ "r3_sim": 0.888,
1165
  "r1_ground": 0.78,
1166
  "r2_ground": 0.564,
1167
+ "r3_ground": 0.888,
1168
  "r1_relev": 0.702,
1169
  "r2_relev": 0.614,
1170
+ "r3_relev": 0.797,
1171
  "r1_faith": 0.23,
1172
  "r2_faith": 0.168,
1173
+ "r3_faith": 0.28,
1174
  "r1_cost": 0.002,
1175
  "r2_cost": 0.0016,
1176
+ "r3_cost": 0.0001
1177
  },
1178
  {
1179
  "question": "what is css grid?",
1180
  "r1_time": 1.24,
1181
  "r2_time": 4.71,
1182
+ "r3_time": 42.78,
1183
  "r1_rouge": 0.203,
1184
  "r2_rouge": 0.292,
1185
+ "r3_rouge": 0.231,
1186
  "r1_sim": 0.833,
1187
  "r2_sim": 0.92,
1188
+ "r3_sim": 0.849,
1189
  "r1_ground": 0.833,
1190
  "r2_ground": 0.692,
1191
+ "r3_ground": 0.849,
1192
  "r1_relev": 0.823,
1193
  "r2_relev": 0.764,
1194
+ "r3_relev": 0.779,
1195
  "r1_faith": 0.203,
1196
  "r2_faith": 0.268,
1197
+ "r3_faith": 0.231,
1198
  "r1_cost": 0.0022,
1199
  "r2_cost": 0.0032,
1200
+ "r3_cost": 0.0002
1201
  }
1202
  ]
fill_r3.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Fills r3_* (Fine-Tuned) metrics into existing benchmark_cache.json.
3
+ Run this ONCE after system3_inference.py is updated to use checkpoint-25/.
4
+
5
+ python fill_r3.py
6
+ """
7
+ import os, json, time
8
+ import numpy as np
9
+
10
+ # rouge_score MUST come before any heavy ML imports
11
+ from rouge_score import rouge_scorer as rs
12
+ from dotenv import load_dotenv
13
+
14
+ load_dotenv()
15
+
16
+ # ── ML imports AFTER rouge_score ──────────────────────────────────────────────
17
+ from langchain_huggingface import HuggingFaceEmbeddings
18
+ from langchain_community.vectorstores import FAISS
19
+ from system3_inference import ask_finetuned # now points to checkpoint-25
20
+
21
+ # ── Load reference answers ────────────────────────────────────────────────────
22
+ with open("data/reference_answers.json", encoding="utf-8") as f:
23
+ ref_answers = json.load(f)
24
+
25
+ # ── Load embeddings + vector store (for metric computation) ──────────────────
26
+ INDEX_PATH = "data/faiss_index"
27
+ print("Loading embeddings / vector store...")
28
+ emb = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
29
+ vs = FAISS.load_local(INDEX_PATH, emb, allow_dangerous_deserialization=True)
30
+ print("Ready.\n")
31
+
32
+ scorer = rs.RougeScorer(["rougeL"], use_stemmer=True)
33
+
34
+ def _cosine(a, b):
35
+ n = np.linalg.norm(a) * np.linalg.norm(b)
36
+ return float(np.dot(a, b) / (n + 1e-8))
37
+
38
+ def compute_metrics(answer: str, question: str) -> dict:
39
+ if not answer or not answer.strip():
40
+ return {"accuracy": 0, "rouge_l": 0, "groundedness": 0,
41
+ "answer_relevance": 0, "faithfulness": 0}
42
+ try:
43
+ a_emb = np.array(vs.embeddings.embed_query(answer))
44
+ q_emb = np.array(vs.embeddings.embed_query(question))
45
+ answer_relevance = round(max(0.0, _cosine(a_emb, q_emb)), 3)
46
+
47
+ ref = ref_answers.get(question.strip().lower(), "")
48
+ accuracy, rouge_l = 0.0, 0.0
49
+ if ref:
50
+ rouge_l = round(scorer.score(ref, answer)["rougeL"].fmeasure, 3)
51
+ r_emb = np.array(vs.embeddings.embed_query(ref))
52
+ accuracy = round(max(0.0, _cosine(a_emb, r_emb)), 3)
53
+
54
+ # For fine-tuned: no retrieval context, so groundedness = accuracy, faithfulness = rouge_l
55
+ return {"accuracy": accuracy, "rouge_l": rouge_l,
56
+ "groundedness": accuracy, "answer_relevance": answer_relevance,
57
+ "faithfulness": rouge_l}
58
+ except Exception as e:
59
+ print(f" [metric error] {e}")
60
+ return {"accuracy": 0, "rouge_l": 0, "groundedness": 0,
61
+ "answer_relevance": 0, "faithfulness": 0}
62
+
63
+ def _cost(answer: str) -> float:
64
+ tokens = max(1, len(answer.split()))
65
+ return round(tokens * 0.0000015, 4) # local model, near-zero cost
66
+
67
+ # ── Load existing cache ───────────────────────────────────────────────────────
68
+ OUT_PATH = "data/benchmark_cache.json"
69
+ with open(OUT_PATH, encoding="utf-8") as f:
70
+ results = json.load(f)
71
+
72
+ total = len(results)
73
+ print(f"Filling r3 values for {total} cached questions...\n")
74
+ print("(Loading fine-tuned model on first question β€” ~30s)\n")
75
+
76
+ for i, row in enumerate(results):
77
+ q = row["question"]
78
+ print(f"[{i+1:02d}/{total}] {q[:65]}")
79
+
80
+ r3 = ask_finetuned(q)
81
+ answer = r3.get("answer", "")
82
+ elapsed = r3.get("response_time", 0)
83
+
84
+ m = compute_metrics(answer, q)
85
+
86
+ row["r3_time"] = elapsed
87
+ row["r3_rouge"] = m["rouge_l"]
88
+ row["r3_sim"] = m["accuracy"]
89
+ row["r3_ground"] = m["groundedness"]
90
+ row["r3_relev"] = m["answer_relevance"]
91
+ row["r3_faith"] = m["faithfulness"]
92
+ row["r3_cost"] = _cost(answer)
93
+
94
+ print(f" r3_acc={m['accuracy']:.3f} r3_rouge={m['rouge_l']:.3f} time={elapsed}s")
95
+
96
+ # Save after every row so we can resume on crash
97
+ with open(OUT_PATH, "w", encoding="utf-8") as f:
98
+ json.dump(results, f, indent=2)
99
+
100
+ # ── Summary ───────────────────────────────────────────────────────────────────
101
+ n = len(results)
102
+ r3_acc = round(sum(r["r3_sim"] for r in results) / n * 100, 1)
103
+ r3_rl = round(sum(r["r3_rouge"] for r in results) / n, 3)
104
+ r3_t = round(sum(r["r3_time"] for r in results) / n, 2)
105
+ print(f"\nDone! r3 values saved to {OUT_PATH}")
106
+ print(f" Fine-Tuned β€” accuracy {r3_acc}% rouge_l {r3_rl} avg_time {r3_t}s")
system3_inference.py CHANGED
@@ -14,7 +14,7 @@ from transformers import AutoTokenizer, AutoModelForCausalLM
14
  from peft import PeftModel
15
 
16
  BASE_MODEL = "Qwen/Qwen2.5-1.5B-Instruct"
17
- FINETUNED_PATH = "./finetuned_model"
18
 
19
  _model = None
20
  _tokenizer = None
 
14
  from peft import PeftModel
15
 
16
  BASE_MODEL = "Qwen/Qwen2.5-1.5B-Instruct"
17
+ FINETUNED_PATH = "./checkpoint-25"
18
 
19
  _model = None
20
  _tokenizer = None