File size: 127,670 Bytes
a1af241
 
 
 
 
 
 
 
 
 
 
1900ecf
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
296f448
 
 
 
 
 
 
 
 
 
 
 
 
 
1900ecf
 
a1af241
 
 
 
 
 
296f448
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1af241
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
296f448
a1af241
 
296f448
 
 
 
 
 
1900ecf
 
a1af241
 
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
14ece86
a1af241
 
 
 
 
 
 
 
14ece86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14ece86
 
 
a1af241
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
1900ecf
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
 
b4abf11
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
 
b4abf11
a1af241
b4abf11
a1af241
b4abf11
a1af241
b4abf11
a1af241
 
 
 
 
 
 
 
 
 
 
 
296f448
a1af241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "workding dir: /Users/inflaton/code/engd/papers/orca-2/Evaluation-of-Orca-2-Models-for-RAG\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import sys\n",
    "from pathlib import Path\n",
    "\n",
    "workding_dir = str(Path.cwd().parent)\n",
    "os.chdir(workding_dir)\n",
    "sys.path.append(workding_dir)\n",
    "print(\"workding dir:\", workding_dir)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "perf_pd1 = pd.read_excel(\"./results/perf_data.xlsx\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Results from Nvidia GeForce RTX 4090"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>model_name</th>\n",
       "      <th>repetition_penalty</th>\n",
       "      <th>faithfulness</th>\n",
       "      <th>answer_relevancy</th>\n",
       "      <th>overall_score</th>\n",
       "      <th>total_time_used</th>\n",
       "      <th>num_tokens_generated</th>\n",
       "      <th>token_per_second</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>orca-2-7b</td>\n",
       "      <td>1.05</td>\n",
       "      <td>0.830357</td>\n",
       "      <td>0.978324</td>\n",
       "      <td>0.898288</td>\n",
       "      <td>46.121</td>\n",
       "      <td>536</td>\n",
       "      <td>11.622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>orca-2-7b</td>\n",
       "      <td>1.10</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.974817</td>\n",
       "      <td>0.847757</td>\n",
       "      <td>20.195</td>\n",
       "      <td>652</td>\n",
       "      <td>32.286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>orca-2-7b</td>\n",
       "      <td>1.15</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.973278</td>\n",
       "      <td>0.986458</td>\n",
       "      <td>13.672</td>\n",
       "      <td>454</td>\n",
       "      <td>33.208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>llama-2-7b</td>\n",
       "      <td>1.05</td>\n",
       "      <td>0.875000</td>\n",
       "      <td>0.715099</td>\n",
       "      <td>0.787010</td>\n",
       "      <td>19.468</td>\n",
       "      <td>679</td>\n",
       "      <td>34.878</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>llama-2-7b</td>\n",
       "      <td>1.10</td>\n",
       "      <td>0.879630</td>\n",
       "      <td>0.731304</td>\n",
       "      <td>0.798638</td>\n",
       "      <td>21.670</td>\n",
       "      <td>759</td>\n",
       "      <td>35.026</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>llama-2-7b</td>\n",
       "      <td>1.15</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.711172</td>\n",
       "      <td>0.831210</td>\n",
       "      <td>22.604</td>\n",
       "      <td>803</td>\n",
       "      <td>35.524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>orca-2-13b</td>\n",
       "      <td>1.05</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.987592</td>\n",
       "      <td>0.993757</td>\n",
       "      <td>397.548</td>\n",
       "      <td>641</td>\n",
       "      <td>1.612</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>orca-2-13b</td>\n",
       "      <td>1.10</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.960806</td>\n",
       "      <td>0.980011</td>\n",
       "      <td>272.891</td>\n",
       "      <td>478</td>\n",
       "      <td>1.752</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>orca-2-13b</td>\n",
       "      <td>1.15</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>0.961115</td>\n",
       "      <td>0.955525</td>\n",
       "      <td>291.610</td>\n",
       "      <td>514</td>\n",
       "      <td>1.763</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>llama-2-13b</td>\n",
       "      <td>1.05</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.962428</td>\n",
       "      <td>0.930168</td>\n",
       "      <td>369.084</td>\n",
       "      <td>677</td>\n",
       "      <td>1.834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>llama-2-13b</td>\n",
       "      <td>1.10</td>\n",
       "      <td>0.875000</td>\n",
       "      <td>0.967267</td>\n",
       "      <td>0.918823</td>\n",
       "      <td>505.816</td>\n",
       "      <td>881</td>\n",
       "      <td>1.742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>llama-2-13b</td>\n",
       "      <td>1.15</td>\n",
       "      <td>0.944444</td>\n",
       "      <td>0.964647</td>\n",
       "      <td>0.954439</td>\n",
       "      <td>435.429</td>\n",
       "      <td>777</td>\n",
       "      <td>1.784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>gpt-3.5-turbo</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.958333</td>\n",
       "      <td>0.483574</td>\n",
       "      <td>0.642795</td>\n",
       "      <td>13.232</td>\n",
       "      <td>425</td>\n",
       "      <td>32.119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>gpt-4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.701869</td>\n",
       "      <td>0.824822</td>\n",
       "      <td>42.257</td>\n",
       "      <td>670</td>\n",
       "      <td>15.855</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       model_name  repetition_penalty  faithfulness  answer_relevancy  \\\n",
       "0       orca-2-7b                1.05      0.830357          0.978324   \n",
       "1       orca-2-7b                1.10      0.750000          0.974817   \n",
       "2       orca-2-7b                1.15      1.000000          0.973278   \n",
       "3      llama-2-7b                1.05      0.875000          0.715099   \n",
       "4      llama-2-7b                1.10      0.879630          0.731304   \n",
       "5      llama-2-7b                1.15      1.000000          0.711172   \n",
       "6      orca-2-13b                1.05      1.000000          0.987592   \n",
       "7      orca-2-13b                1.10      1.000000          0.960806   \n",
       "8      orca-2-13b                1.15      0.950000          0.961115   \n",
       "9     llama-2-13b                1.05      0.900000          0.962428   \n",
       "10    llama-2-13b                1.10      0.875000          0.967267   \n",
       "11    llama-2-13b                1.15      0.944444          0.964647   \n",
       "12  gpt-3.5-turbo                 NaN      0.958333          0.483574   \n",
       "14          gpt-4                 NaN      1.000000          0.701869   \n",
       "\n",
       "    overall_score  total_time_used  num_tokens_generated  token_per_second  \n",
       "0        0.898288           46.121                   536            11.622  \n",
       "1        0.847757           20.195                   652            32.286  \n",
       "2        0.986458           13.672                   454            33.208  \n",
       "3        0.787010           19.468                   679            34.878  \n",
       "4        0.798638           21.670                   759            35.026  \n",
       "5        0.831210           22.604                   803            35.524  \n",
       "6        0.993757          397.548                   641             1.612  \n",
       "7        0.980011          272.891                   478             1.752  \n",
       "8        0.955525          291.610                   514             1.763  \n",
       "9        0.930168          369.084                   677             1.834  \n",
       "10       0.918823          505.816                   881             1.742  \n",
       "11       0.954439          435.429                   777             1.784  \n",
       "12       0.642795           13.232                   425            32.119  \n",
       "14       0.824822           42.257                   670            15.855  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perf_pd1 = perf_pd1.drop(13)  # gpt-3.5-turbo-instruct\n",
    "perf_pd1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>model_name</th>\n",
       "      <th>repetition_penalty</th>\n",
       "      <th>faithfulness</th>\n",
       "      <th>answer_relevancy</th>\n",
       "      <th>overall_score</th>\n",
       "      <th>total_time_used</th>\n",
       "      <th>num_tokens_generated</th>\n",
       "      <th>token_per_second</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>gpt-4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.701869</td>\n",
       "      <td>0.824822</td>\n",
       "      <td>42.257</td>\n",
       "      <td>670</td>\n",
       "      <td>15.855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>gpt-3.5-turbo</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.958333</td>\n",
       "      <td>0.483574</td>\n",
       "      <td>0.642795</td>\n",
       "      <td>13.232</td>\n",
       "      <td>425</td>\n",
       "      <td>32.119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>llama-2-13b</td>\n",
       "      <td>1.15</td>\n",
       "      <td>0.944444</td>\n",
       "      <td>0.964647</td>\n",
       "      <td>0.954439</td>\n",
       "      <td>435.429</td>\n",
       "      <td>777</td>\n",
       "      <td>1.784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>orca-2-13b</td>\n",
       "      <td>1.05</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.987592</td>\n",
       "      <td>0.993757</td>\n",
       "      <td>397.548</td>\n",
       "      <td>641</td>\n",
       "      <td>1.612</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>llama-2-7b</td>\n",
       "      <td>1.15</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.711172</td>\n",
       "      <td>0.831210</td>\n",
       "      <td>22.604</td>\n",
       "      <td>803</td>\n",
       "      <td>35.524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>orca-2-7b</td>\n",
       "      <td>1.15</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.973278</td>\n",
       "      <td>0.986458</td>\n",
       "      <td>13.672</td>\n",
       "      <td>454</td>\n",
       "      <td>33.208</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       model_name  repetition_penalty  faithfulness  answer_relevancy  \\\n",
       "14          gpt-4                 NaN      1.000000          0.701869   \n",
       "12  gpt-3.5-turbo                 NaN      0.958333          0.483574   \n",
       "11    llama-2-13b                1.15      0.944444          0.964647   \n",
       "6      orca-2-13b                1.05      1.000000          0.987592   \n",
       "5      llama-2-7b                1.15      1.000000          0.711172   \n",
       "2       orca-2-7b                1.15      1.000000          0.973278   \n",
       "\n",
       "    overall_score  total_time_used  num_tokens_generated  token_per_second  \n",
       "14       0.824822           42.257                   670            15.855  \n",
       "12       0.642795           13.232                   425            32.119  \n",
       "11       0.954439          435.429                   777             1.784  \n",
       "6        0.993757          397.548                   641             1.612  \n",
       "5        0.831210           22.604                   803            35.524  \n",
       "2        0.986458           13.672                   454            33.208  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx = perf_pd1.groupby(\"model_name\")[\"overall_score\"].idxmax()\n",
    "df = perf_pd1.loc[idx].sort_index(ascending=False)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>model_name</th>\n",
       "      <th>faithfulness</th>\n",
       "      <th>answer_relevancy</th>\n",
       "      <th>overall_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>gpt-4</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.701869</td>\n",
       "      <td>0.824822</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>gpt-3.5-turbo</td>\n",
       "      <td>0.958333</td>\n",
       "      <td>0.483574</td>\n",
       "      <td>0.642795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>llama-2-13b</td>\n",
       "      <td>0.944444</td>\n",
       "      <td>0.964647</td>\n",
       "      <td>0.954439</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>orca-2-13b</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.987592</td>\n",
       "      <td>0.993757</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>llama-2-7b</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.711172</td>\n",
       "      <td>0.831210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>orca-2-7b</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.973278</td>\n",
       "      <td>0.986458</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       model_name  faithfulness  answer_relevancy  overall_score\n",
       "14          gpt-4      1.000000          0.701869       0.824822\n",
       "12  gpt-3.5-turbo      0.958333          0.483574       0.642795\n",
       "11    llama-2-13b      0.944444          0.964647       0.954439\n",
       "6      orca-2-13b      1.000000          0.987592       0.993757\n",
       "5      llama-2-7b      1.000000          0.711172       0.831210\n",
       "2       orca-2-7b      1.000000          0.973278       0.986458"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores = df.loc[:, [\"model_name\", \"faithfulness\", \"answer_relevancy\", \"overall_score\"]]\n",
    "scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Model Name</th>\n",
       "      <th>Faithfulness</th>\n",
       "      <th>Answer Relevancy</th>\n",
       "      <th>Overall Score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>GPT-4</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.701869</td>\n",
       "      <td>0.824822</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>GPT-3.5-Turbo</td>\n",
       "      <td>0.958333</td>\n",
       "      <td>0.483574</td>\n",
       "      <td>0.642795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Llama-2-13b</td>\n",
       "      <td>0.944444</td>\n",
       "      <td>0.964647</td>\n",
       "      <td>0.954439</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Orca-2-13b</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.987592</td>\n",
       "      <td>0.993757</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Llama-2-7b</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.711172</td>\n",
       "      <td>0.831210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Orca-2-7b</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.973278</td>\n",
       "      <td>0.986458</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Model Name  Faithfulness  Answer Relevancy  Overall Score\n",
       "14          GPT-4      1.000000          0.701869       0.824822\n",
       "12  GPT-3.5-Turbo      0.958333          0.483574       0.642795\n",
       "11    Llama-2-13b      0.944444          0.964647       0.954439\n",
       "6      Orca-2-13b      1.000000          0.987592       0.993757\n",
       "5      Llama-2-7b      1.000000          0.711172       0.831210\n",
       "2       Orca-2-7b      1.000000          0.973278       0.986458"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gpt_model_names = {\n",
    "    \"gpt-4\": \"GPT-4\",\n",
    "    \"gpt-3.5-turbo\": \"GPT-3.5-Turbo\",\n",
    "}\n",
    "scores[\"model_name\"] = scores[\"model_name\"].apply(\n",
    "    lambda x: gpt_model_names[x] if x in gpt_model_names else x.capitalize()\n",
    ")\n",
    "scores.rename(columns=lambda x: x.replace(\"_\", \" \").title(), inplace=True)\n",
    "scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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gAAADh8+XODxDRs26D2DPXjwIAcOHKBdu3Z6+TIyMjh37hyNGzcu8nzffvstWVlZDB8+nDfeeCPf1rFjR7755huys7NLdR03b97Ml1avXj0AvbqaNm1KdnY2MTExNGnSRB2qb9q0KV988QV//PGH+gwVwMHBgRYtWvDZZ59x5cqVfOe4du1aqdpZEhUqVOCdd95h06ZNpKSkAA9HH/bt28emTZvy5b99+zYPHjwosC5jY2O6devGN998U+BrdY+3v0KFCgQHB7N27Vri4+MxNTWlS5cu+ep8vDe8bt26J349qn79+ri5uRETE6P3mhzk73XXrVuXunXr8vnnn/PNN9/Qq1cvTEykv2bo5CckxFNwd3endu3abN26ldDQ0HzHPT09adKkCe+++64a4GxtbfMNwW7duhVFUejcuXOR51u9ejW2traFBvROnTqxdOlSNm7cqPdctDhTpkxh586ddOjQgerVq3P16lUWLlxI1apV1efN8PAPExMTE06fPs2QIUPU9GbNmqlfMPJooAaIjY2lSZMm1KlTh8GDB+Pu7k56ejr79u3j999/z/f+8LMwYsQIYmJimDFjBvHx8YwePZrvvvuOjh07MmDAABo0aEBWVhZHjx7l66+/5sKFC4X2ZmfMmMG2bdvw9/dn8ODB+Pj4cPPmTY4cOcLWrVvz/ZHTs2dP+vbty8KFCwkODs43watjx45MmTKFgQMH0rhxY44ePcrq1avV0YfSMjIyYtGiRYSEhFCvXj0GDhxI5cqVOXXqFMePH8/3x0m/fv344IMPAGTY+2VRZvPNhXhFREdHK1qtVn1NR1H+fnXok08+UebMmaO4uLgoZmZmStOmTZVffvklXx09e/ZUmjRpUuR50tPTFRMTE+Wtt94qNM+ff/6plC9fXunatauiKH+/nvX4a1d5r0KdP39eURRFSUxMVDp37qxUqVJFMTU1VapUqaL07t073+tMiqKorz8dOHBATfv9998VQHFxcSmwXefOnVP69eunODk5KeXKlVOcnZ2Vjh07Kl9//XW+Nh06dKjI+5Dn0XtckAEDBijGxsbK2bNnFUVRlDt37igRERGKp6enYmpqqtjZ2SmNGzdWZs+ereTk5KjleOz1LEV5eO+HDx+uuLi4KOXKlVOcnJyU1q1bK0uWLMl33szMTMXCwkIBlFWrVuU7fu/ePeX9999XKleu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",
      "text/plain": [
       "<Figure size 500x600 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(figsize=(5, 6), nrows=3, ncols=1)\n",
    "index = 0\n",
    "titles = [\"(a) Faithfulness\", \"(b) Answer Relevancy\", \"(c) Overall Score\"]\n",
    "for col in scores.columns[1:]:\n",
    "    ax = axes[index]\n",
    "    bars = ax.barh(scores[\"Model Name\"], scores[col])\n",
    "    for bars in ax.containers:\n",
    "        ax.bar_label(bars, fmt=\"%.2f\")\n",
    "    ax.set_title(titles[index])\n",
    "    ax.margins(x=0.1)\n",
    "    index += 1\n",
    "\n",
    "fig.tight_layout()\n",
    "\n",
    "plt.savefig(\"./results/figures/perf_scores.eps\")\n",
    "plt.savefig(\"./results/figures/perf_scores.svg\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'speed' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mspeed\u001b[49m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'speed' is not defined"
     ]
    }
   ],
   "source": [
    "speed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x200 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(\n",
    "    figsize=(5, 2),\n",
    ")\n",
    "bars = ax.barh(speed[\"model_name\"], speed[\"token_per_second\"])\n",
    "for bars in ax.containers:\n",
    "    ax.bar_label(bars, fmt=\"%.1f\")\n",
    "\n",
    "ax.margins(x=0.1)\n",
    "\n",
    "plt.savefig(\"./results/figures/inference_speed.eps\")\n",
    "plt.savefig(\"./results/figures/inference_speed.svg\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "selected = []\n",
    "NUM_QUESTIONS = 4\n",
    "for j in range(NUM_QUESTIONS):\n",
    "    for i in idx.values:\n",
    "        selected.append(i * NUM_QUESTIONS + j)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compare Answers from Different Models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4, 6)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "raw_data = pd.read_excel(\"./results/raw_data.xlsx\")\n",
    "df = raw_data.loc[selected]\n",
    "\n",
    "questions = df[\"user_question\"].unique()\n",
    "NUM_QUESTIONS = len(questions)\n",
    "\n",
    "models = df[\"model_name\"].unique()\n",
    "NUM_MODELS = len(models)\n",
    "\n",
    "NUM_QUESTIONS, NUM_MODELS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Model Name</th>\n",
       "      <th>LLM Generated Content</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>GPT-3.5-Turbo</td>\n",
       "      <td>PCI DSS stands for Payment Card Industry Data ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>GPT-4</td>\n",
       "      <td>The PCI Data Security Standard (PCI DSS) is a ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Llama-2-13b</td>\n",
       "      <td>PCI DSS stands for Payment Card Industry Data ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Llama-2-7b</td>\n",
       "      <td>According to the given quick reference guide, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Orca-2-13b</td>\n",
       "      <td>PCI DSS is a global standard that provides a b...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Orca-2-7b</td>\n",
       "      <td>PCI DSS stands for Payment Card Industry Data ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>GPT-3.5-Turbo</td>\n",
       "      <td>**What are the differences between PCI DSS ver...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>GPT-4</td>\n",
       "      <td>**Can you provide a summary of the changes tha...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Llama-2-13b</td>\n",
       "      <td>**What are the key changes between PCI DSS ver...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Llama-2-7b</td>\n",
       "      <td>**What are the key changes between PCI DSS ver...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Orca-2-13b</td>\n",
       "      <td>**¿Puedes resumir los cambios realizados desde...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Orca-2-7b</td>\n",
       "      <td>**How has the latest version of PCI DSS, versi...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>GPT-3.5-Turbo</td>\n",
       "      <td>**What are the new requirements for vulnerabil...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>GPT-4</td>\n",
       "      <td>**What are the new requirements for vulnerabil...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Llama-2-13b</td>\n",
       "      <td>**What are the new requirements for vulnerabil...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Llama-2-7b</td>\n",
       "      <td>**What are some of the new requirements for vu...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Orca-2-13b</td>\n",
       "      <td>**¿Cuáles son las nuevas requisitos para las e...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Orca-2-7b</td>\n",
       "      <td>**What are some new requirements for vulnerabi...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>GPT-3.5-Turbo</td>\n",
       "      <td>**Can you provide more information about the c...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>GPT-4</td>\n",
       "      <td>**Can you provide more information on penetrat...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Llama-2-13b</td>\n",
       "      <td>**What are the new requirements for penetratio...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>Llama-2-7b</td>\n",
       "      <td>**Could you explain what penetration testing e...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>Orca-2-13b</td>\n",
       "      <td>**¿Puedes dar más detalles sobre las prácticas...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Orca-2-7b</td>\n",
       "      <td>**What are some best practices for conducting ...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Model Name                              LLM Generated Content\n",
       "0   GPT-3.5-Turbo  PCI DSS stands for Payment Card Industry Data ...\n",
       "1           GPT-4  The PCI Data Security Standard (PCI DSS) is a ...\n",
       "2     Llama-2-13b  PCI DSS stands for Payment Card Industry Data ...\n",
       "3      Llama-2-7b  According to the given quick reference guide, ...\n",
       "4      Orca-2-13b  PCI DSS is a global standard that provides a b...\n",
       "5       Orca-2-7b  PCI DSS stands for Payment Card Industry Data ...\n",
       "6   GPT-3.5-Turbo  **What are the differences between PCI DSS ver...\n",
       "7           GPT-4  **Can you provide a summary of the changes tha...\n",
       "8     Llama-2-13b  **What are the key changes between PCI DSS ver...\n",
       "9      Llama-2-7b  **What are the key changes between PCI DSS ver...\n",
       "10     Orca-2-13b  **¿Puedes resumir los cambios realizados desde...\n",
       "11      Orca-2-7b  **How has the latest version of PCI DSS, versi...\n",
       "12  GPT-3.5-Turbo  **What are the new requirements for vulnerabil...\n",
       "13          GPT-4  **What are the new requirements for vulnerabil...\n",
       "14    Llama-2-13b  **What are the new requirements for vulnerabil...\n",
       "15     Llama-2-7b  **What are some of the new requirements for vu...\n",
       "16     Orca-2-13b  **¿Cuáles son las nuevas requisitos para las e...\n",
       "17      Orca-2-7b  **What are some new requirements for vulnerabi...\n",
       "18  GPT-3.5-Turbo  **Can you provide more information about the c...\n",
       "19          GPT-4  **Can you provide more information on penetrat...\n",
       "20    Llama-2-13b  **What are the new requirements for penetratio...\n",
       "21     Llama-2-7b  **Could you explain what penetration testing e...\n",
       "22     Orca-2-13b  **¿Puedes dar más detalles sobre las prácticas...\n",
       "23      Orca-2-7b  **What are some best practices for conducting ..."
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.drop([\"repetition_penalty\", \"contexts\"], axis=1)\n",
    "df = df.fillna(\"\")\n",
    "df[df.columns] = df.apply(lambda x: x.str.strip())\n",
    "df[\"standalone_question\"] = df[\"standalone_question\"].str.replace(\"\\n\", \"**\\n**\")\n",
    "df[\"standalone_question\"] = df[\"standalone_question\"].apply(\n",
    "    lambda x: \"{}{}{}\".format(\"**\", x, \"**\") if len(x) > 0 else x\n",
    ")\n",
    "df[\"standalone_question\"] = df[\"standalone_question\"].str.replace(\"****\", \"\")\n",
    "df[\"LLM Generated Content\"] = (\n",
    "    df[\"standalone_question\"].str.cat(df[\"answer\"], sep=\"\\n\").str.strip()\n",
    ")\n",
    "df[\"model_name\"] = df[\"model_name\"].apply(\n",
    "    lambda x: gpt_model_names[x] if x in gpt_model_names else x.capitalize()\n",
    ")\n",
    "df = df.rename(columns={\"model_name\": \"Model Name\"})\n",
    "df = df.drop(columns=[\"answer\", \"standalone_question\", \"user_question\"])\n",
    "df[df.columns] = df.apply(lambda x: x.str.strip())\n",
    "df.reset_index(drop=True, inplace=True)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "conversations = []\n",
    "for i in range(NUM_QUESTIONS):\n",
    "    conversations.append(df[i * NUM_MODELS : i * NUM_MODELS + NUM_MODELS])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading env vars from: /Users/inflaton/code/engd/papers/orca-2/Evaluation-of-Orca-2-Models-for-RAG/.env\n"
     ]
    }
   ],
   "source": [
    "import vertopal\n",
    "from dotenv import find_dotenv, load_dotenv\n",
    "\n",
    "found_dotenv = find_dotenv(\".env\")\n",
    "\n",
    "if len(found_dotenv) == 0:\n",
    "    found_dotenv = find_dotenv(\".env.example\")\n",
    "print(f\"loading env vars from: {found_dotenv}\")\n",
    "load_dotenv(found_dotenv, override=False)\n",
    "\n",
    "\n",
    "def convert_md_to_eps(filename):\n",
    "    converter = vertopal.Converter(\n",
    "        filename,\n",
    "        app=os.environ.get(\"VERTOPAL_APP_ID\"),\n",
    "        token=os.environ.get(\"VERTOPAL_TOKEN\"),\n",
    "    )\n",
    "    converter.convert(\"eps\")\n",
    "    converter.wait()\n",
    "    if converter.is_converted():\n",
    "        converter.download()\n",
    "    else:\n",
    "        print(f\"failed to convert {filename}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import hashlib\n",
    "\n",
    "\n",
    "def save_conversation(index):\n",
    "    filename = f\"./results/markdowns/question_{index + 1}.md\"\n",
    "    print(f\"filename: {filename}\")\n",
    "    with open(filename, \"w\") as f:\n",
    "        f.write(f\"### User Question ({index + 1}): {questions[index]}\\n\")\n",
    "        f.write(conversations[index].to_markdown(index=False))\n",
    "\n",
    "    with open(filename, \"rb\") as file_obj:\n",
    "        file_contents = file_obj.read()\n",
    "\n",
    "        md5_hash = hashlib.md5(file_contents).hexdigest()\n",
    "\n",
    "        # 👇️ cfd2db7dd4ffe42ce26e0b57e7e8b342\n",
    "        print(md5_hash)\n",
    "\n",
    "    return filename\n",
    "    # convert_md_to_eps(filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "filename: ./results/markdowns/question_1.md\n",
      "5ada4e765d2b001fd037e1ef9ddbb685\n",
      "filename: ./results/markdowns/question_2.md\n",
      "27d1d4fc4ef8c8d94552b85839a106cc\n",
      "filename: ./results/markdowns/question_3.md\n",
      "3cf9447131e05abb4d5d3576bc5bc61b\n",
      "filename: ./results/markdowns/question_4.md\n",
      "315d9b8017e4ec753dd7dbc492af2b88\n"
     ]
    }
   ],
   "source": [
    "filenames = []\n",
    "for i in range(len(questions)):\n",
    "    filename = save_conversation(i)\n",
    "    filenames.append(filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# convert_md_to_eps(filenames[0])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}