diff --git "a/results/5_generate-figures.ipynb" "b/results/5_generate-figures.ipynb" new file mode 100644--- /dev/null +++ "b/results/5_generate-figures.ipynb" @@ -0,0 +1,1080 @@ +{ + "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-Conversational-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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namerepetition_penaltyfaithfulnessanswer_relevancyoverall_scoretotal_time_usednum_tokens_generatedtoken_per_second
0orca-2-7b1.050.8303570.9783240.89828846.12153611.622
1orca-2-7b1.100.7500000.9748170.84775720.19565232.286
2orca-2-7b1.151.0000000.9732780.98645813.67245433.208
3llama-2-7b1.050.8750000.7150990.78701019.46867934.878
4llama-2-7b1.100.8796300.7313040.79863821.67075935.026
5llama-2-7b1.151.0000000.7111720.83121022.60480335.524
6orca-2-13b1.051.0000000.9875920.993757397.5486411.612
7orca-2-13b1.101.0000000.9608060.980011272.8914781.752
8orca-2-13b1.150.9500000.9611150.955525291.6105141.763
9llama-2-13b1.050.9000000.9624280.930168369.0846771.834
10llama-2-13b1.100.8750000.9672670.918823505.8168811.742
11llama-2-13b1.150.9444440.9646470.954439435.4297771.784
12gpt-3.5-turboNaN0.9583330.4835740.64279513.23242532.119
14gpt-4NaN1.0000000.7018690.82482242.25767015.855
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namerepetition_penaltyfaithfulnessanswer_relevancyoverall_scoretotal_time_usednum_tokens_generatedtoken_per_second
14gpt-4NaN1.0000000.7018690.82482242.25767015.855
12gpt-3.5-turboNaN0.9583330.4835740.64279513.23242532.119
11llama-2-13b1.150.9444440.9646470.954439435.4297771.784
6orca-2-13b1.051.0000000.9875920.993757397.5486411.612
5llama-2-7b1.151.0000000.7111720.83121022.60480335.524
2orca-2-7b1.151.0000000.9732780.98645813.67245433.208
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_namefaithfulnessanswer_relevancyoverall_score
14gpt-41.0000000.7018690.824822
12gpt-3.5-turbo0.9583330.4835740.642795
11llama-2-13b0.9444440.9646470.954439
6orca-2-13b1.0000000.9875920.993757
5llama-2-7b1.0000000.7111720.831210
2orca-2-7b1.0000000.9732780.986458
\n", + "
" + ], + "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": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Model NameFaithfulnessAnswer RelevancyOverall Score
14GPT-41.0000000.7018690.824822
12GPT-3.5-Turbo0.9583330.4835740.642795
11Llama-2-13b0.9444440.9646470.954439
6Orca-2-13b1.0000000.9875920.993757
5Llama-2-7b1.0000000.7111720.831210
2Orca-2-7b1.0000000.9732780.986458
\n", + "
" + ], + "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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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "scores.plot.barh(\n", + " x=\"Model Name\",\n", + " ylabel=\"\",\n", + " rot=0,\n", + " figsize=(5, 6),\n", + " subplots=True,\n", + " title=[\"(a) Faithfulness\", \"(b) Answer Relevancy\", \"(c) Overall Score\"],\n", + " legend=False,\n", + ")\n", + "plt.savefig(\"./results/figures/perf_scores.eps\", format=\"eps\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "speed = df.loc[:, [\"model_name\", \"token_per_second\"]]\n", + "speed[\"model_name\"] = speed[\"model_name\"].apply(\n", + " lambda x: gpt_model_names[x] if x in gpt_model_names else x.capitalize()\n", + ")\n", + "\n", + "speed.plot.barh(\n", + " x=\"model_name\",\n", + " ylabel=\"\",\n", + " rot=0,\n", + " figsize=(5, 2),\n", + " legend=False,\n", + " title=\"Generation speed (tokens/s)\",\n", + ")\n", + "plt.savefig(\"./results/figures/inference_speed.eps\", format=\"eps\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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": 10, + "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": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Model NameLLM Generated Content
0gpt-3.5-turboPCI DSS stands for Payment Card Industry Data ...
1gpt-4The PCI Data Security Standard (PCI DSS) is a ...
2llama-2-13bPCI DSS stands for Payment Card Industry Data ...
3llama-2-7bAccording to the given quick reference guide, ...
4orca-2-13bPCI DSS is a global standard that provides a b...
5orca-2-7bPCI DSS stands for Payment Card Industry Data ...
6gpt-3.5-turbo**What are the differences between PCI DSS ver...
7gpt-4**Can you provide a summary of the changes tha...
8llama-2-13b**What are the key changes between PCI DSS ver...
9llama-2-7b**What are the key changes between PCI DSS ver...
10orca-2-13b**¿Puedes resumir los cambios realizados desde...
11orca-2-7b**How has the latest version of PCI DSS, versi...
12gpt-3.5-turbo**What are the new requirements for vulnerabil...
13gpt-4**What are the new requirements for vulnerabil...
14llama-2-13b**What are the new requirements for vulnerabil...
15llama-2-7b**What are some of the new requirements for vu...
16orca-2-13b**¿Cuáles son las nuevas requisitos para las e...
17orca-2-7b**What are some new requirements for vulnerabi...
18gpt-3.5-turbo**Can you provide more information about the c...
19gpt-4**Can you provide more information on penetrat...
20llama-2-13b**What are the new requirements for penetratio...
21llama-2-7b**Could you explain what penetration testing e...
22orca-2-13b**¿Puedes dar más detalles sobre las prácticas...
23orca-2-7b**What are some best practices for conducting ...
\n", + "
" + ], + "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 = 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": 12, + "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": 13, + "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-Conversational-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": 14, + "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\"### {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": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "filename: ./results/markdowns/question_1.md\n", + "61eb5921f63c817dae95c13dc99a9771\n", + "filename: ./results/markdowns/question_2.md\n", + "46dc9a582ef1c2ca6d3132715051809b\n", + "filename: ./results/markdowns/question_3.md\n", + "ca7794142dff5a01a86d4aa234ac3841\n", + "filename: ./results/markdowns/question_4.md\n", + "978625ddfb8f21ed5a510b0aa7686edd\n" + ] + } + ], + "source": [ + "filenames = []\n", + "for i in range(len(questions)):\n", + " filename = save_conversation(i)\n", + " filenames.append(filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "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 +}