From be7fa29a5b9ca18962f33f90065a24fcf13555d3 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Tue, 17 Dec 2024 21:42:31 +0530 Subject: [PATCH 01/11] updated the notebook. --- .../misc/Degradation_Analysis_Test.ipynb | 1397 ++++++++++++++--- 1 file changed, 1204 insertions(+), 193 deletions(-) diff --git a/demo/tutorials/misc/Degradation_Analysis_Test.ipynb b/demo/tutorials/misc/Degradation_Analysis_Test.ipynb index 6663eecc0..bbe16ef13 100644 --- a/demo/tutorials/misc/Degradation_Analysis_Test.ipynb +++ b/demo/tutorials/misc/Degradation_Analysis_Test.ipynb @@ -50,7 +50,7 @@ }, "outputs": [], "source": [ - "!pip install langtest[transformers]==2.5.0" + "!pip install langtest[llms]==2.5.0" ] }, { @@ -148,6 +148,18 @@ { "cell_type": "code", "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = {\n", + " \"data_source\": \"BoolQ\",\n", + " \"split\": \"dev-tiny\",\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -264,9 +276,14 @@ ], "source": [ "harness = Harness(\n", - " task=\"ner\", \n", - " model={\"model\": \"dslim/bert-base-NER\", \"hub\": \"huggingface\"},\n", - " config=test_config\n", + " task=\"question-answering\", \n", + " model={\n", + " \"model\": \"llama3.1:latest\", \n", + " \"hub\": \"ollama\",\n", + " \"type\": \"chat\",\n", + " },\n", + " config=test_config,\n", + " data=data\n", ")" ] }, @@ -406,14 +423,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Generating testcases...: 100%|██████████| 2/2 [00:00\n", " category\n", " test_type\n", - " original\n", - " test_case\n", + " original_context\n", + " original_question\n", + " perturbed_context\n", + " perturbed_question\n", " \n", " \n", " \n", @@ -482,36 +494,46 @@ " 0\n", " robustness\n", " uppercase\n", - " Nadim Ladki\n", - " NADIM LADKI\n", + " All biomass goes through at least some of thes...\n", + " does ethanol take more energy make that produces\n", + " ALL BIOMASS GOES THROUGH AT LEAST SOME OF THES...\n", + " DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCES\n", " \n", " \n", " 1\n", " robustness\n", " uppercase\n", - " AL-AIN , United Arab Emirates 1996-12-06\n", - " AL-AIN , UNITED ARAB EMIRATES 1996-12-06\n", + " Property tax or 'house tax' is a local tax on ...\n", + " is house tax and property tax are same\n", + " PROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ...\n", + " IS HOUSE TAX AND PROPERTY TAX ARE SAME\n", " \n", " \n", " 2\n", " robustness\n", " uppercase\n", - " Japan began the defence of their Asian Cup tit...\n", - " JAPAN BEGAN THE DEFENCE OF THEIR ASIAN CUP TIT...\n", + " Phantom pain sensations are described as perce...\n", + " is pain experienced in a missing body part or ...\n", + " PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE...\n", + " IS PAIN EXPERIENCED IN A MISSING BODY PART OR ...\n", " \n", " \n", " 3\n", " robustness\n", " uppercase\n", - " But China saw their luck desert them in the se...\n", - " BUT CHINA SAW THEIR LUCK DESERT THEM IN THE SE...\n", + " Harry Potter and the Escape from Gringotts is ...\n", + " is harry potter and the escape from gringotts ...\n", + " HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ...\n", + " IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ...\n", " \n", " \n", " 4\n", " robustness\n", " uppercase\n", - " China controlled most of the match and saw sev...\n", - " CHINA CONTROLLED MOST OF THE MATCH AND SAW SEV...\n", + " Hydroxyzine preparations require a doctor's pr...\n", + " is there a difference between hydroxyzine hcl ...\n", + " HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR...\n", + " IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ...\n", " \n", " \n", " ...\n", @@ -519,75 +541,113 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 693\n", + " 236\n", " robustness\n", " titlecase\n", - " Results of Brazilian\n", - " Results Of Brazilian\n", + " Tipping Point is a British television game sho...\n", + " does only the winner get money on tipping point\n", + " Tipping Point Is A British Television Game Sho...\n", + " Does Only The Winner Get Money On Tipping Point\n", " \n", " \n", - " 694\n", + " 237\n", " robustness\n", " titlecase\n", - " soccer championship semifinal , first leg matc...\n", - " Soccer Championship Semifinal , First Leg Matc...\n", + " The turkey vulture (Cathartes aura), also know...\n", + " is there such a thing as a turkey vulture\n", + " The Turkey Vulture (Cathartes Aura), Also Know...\n", + " Is There Such A Thing As A Turkey Vulture\n", " \n", " \n", - " 695\n", + " 238\n", " robustness\n", " titlecase\n", - " CRICKET - LARA ENDURES ANOTHER MISERABLE DAY .\n", - " Cricket - Lara Endures Another Miserable Day .\n", + " As of October 2008, a condor (four under par) ...\n", + " has anyone hit a hole in one on a par 5\n", + " As Of October 2008, A Condor (Four Under Par) ...\n", + " Has Anyone Hit A Hole In One On A Par 5\n", " \n", " \n", - " 696\n", + " 239\n", " robustness\n", " titlecase\n", - " MELBOURNE 1996-12-06\n", - " Melbourne 1996-12-06\n", + " MetLife Stadium is an American sports stadium ...\n", + " do the jets and giants share a stadium\n", + " Metlife Stadium Is An American Sports Stadium ...\n", + " Do The Jets And Giants Share A Stadium\n", " \n", " \n", - " 697\n", + " 240\n", " robustness\n", " titlecase\n", - " Australia gave Brian Lara another reason to be...\n", - " Australia Gave Brian Lara Another Reason To Be...\n", + " After the defeat in the 2016 Olympics, the USW...\n", + " is the us womens soccer team in the world cup\n", + " After The Defeat In The 2016 Olympics, The Usw...\n", + " Is The Us Womens Soccer Team In The World Cup\n", " \n", " \n", "\n", - "

698 rows × 4 columns

\n", + "

241 rows × 6 columns

\n", "" ], "text/plain": [ - " category test_type original \\\n", - "0 robustness uppercase Nadim Ladki \n", - "1 robustness uppercase AL-AIN , United Arab Emirates 1996-12-06 \n", - "2 robustness uppercase Japan began the defence of their Asian Cup tit... \n", - "3 robustness uppercase But China saw their luck desert them in the se... \n", - "4 robustness uppercase China controlled most of the match and saw sev... \n", + " category test_type original_context \\\n", + "0 robustness uppercase All biomass goes through at least some of thes... \n", + "1 robustness uppercase Property tax or 'house tax' is a local tax on ... \n", + "2 robustness uppercase Phantom pain sensations are described as perce... \n", + "3 robustness uppercase Harry Potter and the Escape from Gringotts is ... \n", + "4 robustness uppercase Hydroxyzine preparations require a doctor's pr... \n", ".. ... ... ... \n", - "693 robustness titlecase Results of Brazilian \n", - "694 robustness titlecase soccer championship semifinal , first leg matc... \n", - "695 robustness titlecase CRICKET - LARA ENDURES ANOTHER MISERABLE DAY . \n", - "696 robustness titlecase MELBOURNE 1996-12-06 \n", - "697 robustness titlecase Australia gave Brian Lara another reason to be... \n", + "236 robustness titlecase Tipping Point is a British television game sho... \n", + "237 robustness titlecase The turkey vulture (Cathartes aura), also know... \n", + "238 robustness titlecase As of October 2008, a condor (four under par) ... \n", + "239 robustness titlecase MetLife Stadium is an American sports stadium ... \n", + "240 robustness titlecase After the defeat in the 2016 Olympics, the USW... \n", + "\n", + " original_question \\\n", + "0 does ethanol take more energy make that produces \n", + "1 is house tax and property tax are same \n", + "2 is pain experienced in a missing body part or ... \n", + "3 is harry potter and the escape from gringotts ... \n", + "4 is there a difference between hydroxyzine hcl ... \n", + ".. ... \n", + "236 does only the winner get money on tipping point \n", + "237 is there such a thing as a turkey vulture \n", + "238 has anyone hit a hole in one on a par 5 \n", + "239 do the jets and giants share a stadium \n", + "240 is the us womens soccer team in the world cup \n", "\n", - " test_case \n", - "0 NADIM LADKI \n", - "1 AL-AIN , UNITED ARAB EMIRATES 1996-12-06 \n", - "2 JAPAN BEGAN THE DEFENCE OF THEIR ASIAN CUP TIT... \n", - "3 BUT CHINA SAW THEIR LUCK DESERT THEM IN THE SE... \n", - "4 CHINA CONTROLLED MOST OF THE MATCH AND SAW SEV... \n", + " perturbed_context \\\n", + "0 ALL BIOMASS GOES THROUGH AT LEAST SOME OF THES... \n", + "1 PROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ... \n", + "2 PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE... \n", + "3 HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ... \n", + "4 HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR... \n", + ".. ... \n", + "236 Tipping Point Is A British Television Game Sho... \n", + "237 The Turkey Vulture (Cathartes Aura), Also Know... \n", + "238 As Of October 2008, A Condor (Four Under Par) ... \n", + "239 Metlife Stadium Is An American Sports Stadium ... \n", + "240 After The Defeat In The 2016 Olympics, The Usw... \n", + "\n", + " perturbed_question \n", + "0 DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCES \n", + "1 IS HOUSE TAX AND PROPERTY TAX ARE SAME \n", + "2 IS PAIN EXPERIENCED IN A MISSING BODY PART OR ... \n", + "3 IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ... \n", + "4 IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ... \n", ".. ... \n", - "693 Results Of Brazilian \n", - "694 Soccer Championship Semifinal , First Leg Matc... \n", - "695 Cricket - Lara Endures Another Miserable Day . \n", - "696 Melbourne 1996-12-06 \n", - "697 Australia Gave Brian Lara Another Reason To Be... \n", + "236 Does Only The Winner Get Money On Tipping Point \n", + "237 Is There Such A Thing As A Turkey Vulture \n", + "238 Has Anyone Hit A Hole In One On A Par 5 \n", + "239 Do The Jets And Giants Share A Stadium \n", + "240 Is The Us Womens Soccer Team In The World Cup \n", "\n", - "[698 rows x 4 columns]" + "[241 rows x 6 columns]" ] }, "execution_count": 6, @@ -632,7 +692,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Running testcases... : 100%|██████████| 699/699 [00:22<00:00, 30.40it/s]\n" + "Running testcases... : 100%|██████████| 242/242 [17:28<00:00, 4.33s/it] \n" ] }, { @@ -692,8 +752,10 @@ " \n", " category\n", " test_type\n", - " original\n", - " test_case\n", + " original_context\n", + " original_question\n", + " perturbed_context\n", + " perturbed_question\n", " expected_result\n", " actual_result\n", " pass\n", @@ -704,50 +766,60 @@ " 0\n", " robustness\n", " uppercase\n", - " Nadim Ladki\n", - " NADIM LADKI\n", - " Nadim Ladki: PER\n", - " NADIM LADKI: ORG\n", + " All biomass goes through at least some of thes...\n", + " does ethanol take more energy make that produces\n", + " ALL BIOMASS GOES THROUGH AT LEAST SOME OF THES...\n", + " DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCES\n", + " False\\n)\n", + " False\n", " False\n", " \n", " \n", " 1\n", " robustness\n", " uppercase\n", - " AL-AIN , United Arab Emirates 1996-12-06\n", - " AL-AIN , UNITED ARAB EMIRATES 1996-12-06\n", - " AL-AIN: LOC, United Arab Emirates: LOC\n", - " AL-AIN: ORG, UNITED ARAB: ORG, EMIRATES: LOC\n", + " Property tax or 'house tax' is a local tax on ...\n", + " is house tax and property tax are same\n", + " PROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ...\n", + " IS HOUSE TAX AND PROPERTY TAX ARE SAME\n", " False\n", + " False\n", + " True\n", " \n", " \n", " 2\n", " robustness\n", " uppercase\n", - " Japan began the defence of their Asian Cup tit...\n", - " JAPAN BEGAN THE DEFENCE OF THEIR ASIAN CUP TIT...\n", - " Japan: LOC, Asian Cup: MISC, Syria: LOC, Group...\n", - " JAPAN: MISC, ASIAN CUP: MISC, SYRIA: LOC, GROU...\n", - " False\n", + " Phantom pain sensations are described as perce...\n", + " is pain experienced in a missing body part or ...\n", + " PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE...\n", + " IS PAIN EXPERIENCED IN A MISSING BODY PART OR ...\n", + " True\n", + " True\n", + " True\n", " \n", " \n", " 3\n", " robustness\n", " uppercase\n", - " But China saw their luck desert them in the se...\n", - " BUT CHINA SAW THEIR LUCK DESERT THEM IN THE SE...\n", - " China: LOC, Uzbekistan: LOC\n", - " CHINA: ORG, GROUP: MISC, UZBEKISTAN: LOC\n", - " False\n", + " Harry Potter and the Escape from Gringotts is ...\n", + " is harry potter and the escape from gringotts ...\n", + " HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ...\n", + " IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ...\n", + " True\n", + " True\n", + " True\n", " \n", " \n", " 4\n", " robustness\n", " uppercase\n", - " China controlled most of the match and saw sev...\n", - " CHINA CONTROLLED MOST OF THE MATCH AND SAW SEV...\n", - " China: LOC, Uzbek: MISC, Igor Shkvyrin: PER, C...\n", - " CHINA: ORG, UZBEK: PER, IGOR SHKVYRIN: ORG, EM...\n", + " Hydroxyzine preparations require a doctor's pr...\n", + " is there a difference between hydroxyzine hcl ...\n", + " HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR...\n", + " IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ...\n", + " True\n", + " False\n", " False\n", " \n", " \n", @@ -759,116 +831,141 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 693\n", + " 236\n", " robustness\n", " titlecase\n", - " Results of Brazilian\n", - " Results Of Brazilian\n", - " Brazilian: MISC\n", - " Brazilian: MISC\n", + " Tipping Point is a British television game sho...\n", + " does only the winner get money on tipping point\n", + " Tipping Point Is A British Television Game Sho...\n", + " Does Only The Winner Get Money On Tipping Point\n", + " True\n", + " True\n", " True\n", " \n", " \n", - " 694\n", + " 237\n", " robustness\n", " titlecase\n", - " soccer championship semifinal , first leg matc...\n", - " Soccer Championship Semifinal , First Leg Matc...\n", - " \n", - " Soccer Championship: MISC\n", - " False\n", + " The turkey vulture (Cathartes aura), also know...\n", + " is there such a thing as a turkey vulture\n", + " The Turkey Vulture (Cathartes Aura), Also Know...\n", + " Is There Such A Thing As A Turkey Vulture\n", + " True\n", + " True\n", + " True\n", " \n", " \n", - " 695\n", + " 238\n", " robustness\n", " titlecase\n", - " CRICKET - LARA ENDURES ANOTHER MISERABLE DAY .\n", - " Cricket - Lara Endures Another Miserable Day .\n", - " LARA: LOC, MISERABLE: PER\n", - " Lara: PER\n", + " As of October 2008, a condor (four under par) ...\n", + " has anyone hit a hole in one on a par 5\n", + " As Of October 2008, A Condor (Four Under Par) ...\n", + " Has Anyone Hit A Hole In One On A Par 5\n", + " True\n", + " True.\n", " False\n", " \n", " \n", - " 696\n", + " 239\n", " robustness\n", " titlecase\n", - " MELBOURNE 1996-12-06\n", - " Melbourne 1996-12-06\n", - " MELBOURNE: LOC\n", - " Melbourne: LOC\n", + " MetLife Stadium is an American sports stadium ...\n", + " do the jets and giants share a stadium\n", + " Metlife Stadium Is An American Sports Stadium ...\n", + " Do The Jets And Giants Share A Stadium\n", + " True\n", + " True\n", " True\n", " \n", " \n", - " 697\n", + " 240\n", " robustness\n", " titlecase\n", - " Australia gave Brian Lara another reason to be...\n", - " Australia Gave Brian Lara Another Reason To Be...\n", - " Australia: LOC, Brian Lara: PER, West Indies: ...\n", - " Australia: LOC, Brian Lara: PER, West Indies: ...\n", - " False\n", + " After the defeat in the 2016 Olympics, the USW...\n", + " is the us womens soccer team in the world cup\n", + " After The Defeat In The 2016 Olympics, The Usw...\n", + " Is The Us Womens Soccer Team In The World Cup\n", + " True\n", + " True\n", + " True\n", " \n", " \n", "\n", - "

698 rows × 7 columns

\n", + "

241 rows × 9 columns

\n", "" ], "text/plain": [ - " category test_type original \\\n", - "0 robustness uppercase Nadim Ladki \n", - "1 robustness uppercase AL-AIN , United Arab Emirates 1996-12-06 \n", - "2 robustness uppercase Japan began the defence of their Asian Cup tit... \n", - "3 robustness uppercase But China saw their luck desert them in the se... \n", - "4 robustness uppercase China controlled most of the match and saw sev... \n", + " category test_type original_context \\\n", + "0 robustness uppercase All biomass goes through at least some of thes... \n", + "1 robustness uppercase Property tax or 'house tax' is a local tax on ... \n", + "2 robustness uppercase Phantom pain sensations are described as perce... \n", + "3 robustness uppercase Harry Potter and the Escape from Gringotts is ... \n", + "4 robustness uppercase Hydroxyzine preparations require a doctor's pr... \n", ".. ... ... ... \n", - "693 robustness titlecase Results of Brazilian \n", - "694 robustness titlecase soccer championship semifinal , first leg matc... \n", - "695 robustness titlecase CRICKET - LARA ENDURES ANOTHER MISERABLE DAY . \n", - "696 robustness titlecase MELBOURNE 1996-12-06 \n", - "697 robustness titlecase Australia gave Brian Lara another reason to be... \n", + "236 robustness titlecase Tipping Point is a British television game sho... \n", + "237 robustness titlecase The turkey vulture (Cathartes aura), also know... \n", + "238 robustness titlecase As of October 2008, a condor (four under par) ... \n", + "239 robustness titlecase MetLife Stadium is an American sports stadium ... \n", + "240 robustness titlecase After the defeat in the 2016 Olympics, the USW... \n", "\n", - " test_case \\\n", - "0 NADIM LADKI \n", - "1 AL-AIN , UNITED ARAB EMIRATES 1996-12-06 \n", - "2 JAPAN BEGAN THE DEFENCE OF THEIR ASIAN CUP TIT... \n", - "3 BUT CHINA SAW THEIR LUCK DESERT THEM IN THE SE... \n", - "4 CHINA CONTROLLED MOST OF THE MATCH AND SAW SEV... \n", + " original_question \\\n", + "0 does ethanol take more energy make that produces \n", + "1 is house tax and property tax are same \n", + "2 is pain experienced in a missing body part or ... \n", + "3 is harry potter and the escape from gringotts ... \n", + "4 is there a difference between hydroxyzine hcl ... \n", ".. ... \n", - "693 Results Of Brazilian \n", - "694 Soccer Championship Semifinal , First Leg Matc... \n", - "695 Cricket - Lara Endures Another Miserable Day . \n", - "696 Melbourne 1996-12-06 \n", - "697 Australia Gave Brian Lara Another Reason To Be... \n", + "236 does only the winner get money on tipping point \n", + "237 is there such a thing as a turkey vulture \n", + "238 has anyone hit a hole in one on a par 5 \n", + "239 do the jets and giants share a stadium \n", + "240 is the us womens soccer team in the world cup \n", "\n", - " expected_result \\\n", - "0 Nadim Ladki: PER \n", - "1 AL-AIN: LOC, United Arab Emirates: LOC \n", - "2 Japan: LOC, Asian Cup: MISC, Syria: LOC, Group... \n", - "3 China: LOC, Uzbekistan: LOC \n", - "4 China: LOC, Uzbek: MISC, Igor Shkvyrin: PER, C... \n", + " perturbed_context \\\n", + "0 ALL BIOMASS GOES THROUGH AT LEAST SOME OF THES... \n", + "1 PROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ... \n", + "2 PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE... \n", + "3 HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ... \n", + "4 HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR... \n", ".. ... \n", - "693 Brazilian: MISC \n", - "694 \n", - "695 LARA: LOC, MISERABLE: PER \n", - "696 MELBOURNE: LOC \n", - "697 Australia: LOC, Brian Lara: PER, West Indies: ... \n", + "236 Tipping Point Is A British Television Game Sho... \n", + "237 The Turkey Vulture (Cathartes Aura), Also Know... \n", + "238 As Of October 2008, A Condor (Four Under Par) ... \n", + "239 Metlife Stadium Is An American Sports Stadium ... \n", + "240 After The Defeat In The 2016 Olympics, The Usw... \n", + "\n", + " perturbed_question expected_result \\\n", + "0 DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCES False\\n) \n", + "1 IS HOUSE TAX AND PROPERTY TAX ARE SAME False \n", + "2 IS PAIN EXPERIENCED IN A MISSING BODY PART OR ... True \n", + "3 IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ... True \n", + "4 IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ... True \n", + ".. ... ... \n", + "236 Does Only The Winner Get Money On Tipping Point True \n", + "237 Is There Such A Thing As A Turkey Vulture True \n", + "238 Has Anyone Hit A Hole In One On A Par 5 True \n", + "239 Do The Jets And Giants Share A Stadium True \n", + "240 Is The Us Womens Soccer Team In The World Cup True \n", "\n", - " actual_result pass \n", - "0 NADIM LADKI: ORG False \n", - "1 AL-AIN: ORG, UNITED ARAB: ORG, EMIRATES: LOC False \n", - "2 JAPAN: MISC, ASIAN CUP: MISC, SYRIA: LOC, GROU... False \n", - "3 CHINA: ORG, GROUP: MISC, UZBEKISTAN: LOC False \n", - "4 CHINA: ORG, UZBEK: PER, IGOR SHKVYRIN: ORG, EM... False \n", - ".. ... ... \n", - "693 Brazilian: MISC True \n", - "694 Soccer Championship: MISC False \n", - "695 Lara: PER False \n", - "696 Melbourne: LOC True \n", - "697 Australia: LOC, Brian Lara: PER, West Indies: ... False \n", + " actual_result pass \n", + "0 False False \n", + "1 False True \n", + "2 True True \n", + "3 True True \n", + "4 False False \n", + ".. ... ... \n", + "236 True True \n", + "237 True True \n", + "238 True. False \n", + "239 True True \n", + "240 True True \n", "\n", - "[698 rows x 7 columns]" + "[241 rows x 9 columns]" ] }, "execution_count": 8, @@ -880,6 +977,920 @@ "harness.generated_results()" ] }, + { + "cell_type": "code", + "execution_count": 10, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
categorytest_typeoriginal_contextoriginal_questionperturbed_contextperturbed_questionexpected_resultactual_resultpass
0robustnessuppercaseAll biomass goes through at least some of thes...does ethanol take more energy make that producesALL BIOMASS GOES THROUGH AT LEAST SOME OF THES...DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCESFalse\\n)FalseFalse
1robustnessuppercaseProperty tax or 'house tax' is a local tax on ...is house tax and property tax are samePROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ...IS HOUSE TAX AND PROPERTY TAX ARE SAMEFalseFalseTrue
2robustnessuppercasePhantom pain sensations are described as perce...is pain experienced in a missing body part or ...PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE...IS PAIN EXPERIENCED IN A MISSING BODY PART OR ...TrueTrueTrue
3robustnessuppercaseHarry Potter and the Escape from Gringotts is ...is harry potter and the escape from gringotts ...HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ...IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ...TrueTrueTrue
4robustnessuppercaseHydroxyzine preparations require a doctor's pr...is there a difference between hydroxyzine hcl ...HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR...IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ...TrueFalseFalse
5robustnessuppercaseBarq's /ˈbɑːrks/ is an American soft drink. It...is barq's root beer a pepsi productBARQ'S /ˈBⱭːRKS/ IS AN AMERICAN SOFT DRINK. IT...IS BARQ'S ROOT BEER A PEPSI PRODUCTFalseFalseTrue
6robustnessuppercaseIn mathematics, parity is the property of an i...can an odd number be divided by an even numberIN MATHEMATICS, PARITY IS THE PROPERTY OF AN I...CAN AN ODD NUMBER BE DIVIDED BY AN EVEN NUMBERFalseTrueFalse
7robustnessuppercaseOf the 71 words in this list, 67 are nouns, an...is there a word with q without uOF THE 71 WORDS IN THIS LIST, 67 ARE NOUNS, AN...IS THERE A WORD WITH Q WITHOUT UTrueFalseFalse
8robustnessuppercasePersons driving into Canada must have their ve...can u drive in canada with us licensePERSONS DRIVING INTO CANADA MUST HAVE THEIR VE...CAN U DRIVE IN CANADA WITH US LICENSEFalseTrueFalse
9robustnessuppercaseThe knockout stage of the 2018 FIFA World Cup ...is there a play off for third place in the wor...THE KNOCKOUT STAGE OF THE 2018 FIFA WORLD CUP ...IS THERE A PLAY OFF FOR THIRD PLACE IN THE WOR...TrueTrueTrue
10robustnessuppercaseIn response to the National Minimum Drinking A...can minors drink with parents in new yorkIN RESPONSE TO THE NATIONAL MINIMUM DRINKING A...CAN MINORS DRINK WITH PARENTS IN NEW YORKTrueTrueTrue
11robustnessuppercaseBloodline was announced in October 2014 as par...is the show bloodline based on a true storyBLOODLINE WAS ANNOUNCED IN OCTOBER 2014 AS PAR...IS THE SHOW BLOODLINE BASED ON A TRUE STORYFalseFalseTrue
12robustnessuppercaseShower gels for men may contain the ingredient...is it bad to wash your hair with shower gelSHOWER GELS FOR MEN MAY CONTAIN THE INGREDIENT...IS IT BAD TO WASH YOUR HAIR WITH SHOWER GELFalseassistant\\n\\nThat's correct! Shower gels ...FalseFalse
13robustnessuppercaseThe liver detoxifies and breaks down chemicals...is the liver part of the excretory systemTHE LIVER DETOXIFIES AND BREAKS DOWN CHEMICALS...IS THE LIVER PART OF THE EXCRETORY SYSTEMTrueTrueTrue
14robustnessuppercaseFantastic Beasts and Where to Find Them is a 2...is fantastic beasts and where to find them a p...FANTASTIC BEASTS AND WHERE TO FIND THEM IS A 2...IS FANTASTIC BEASTS AND WHERE TO FIND THEM A P...TrueTrueTrue
15robustnessuppercaseThe Vampire Diaries, an American supernatural ...will there be a season 8 of vampire diariesTHE VAMPIRE DIARIES, AN AMERICAN SUPERNATURAL ...WILL THERE BE A SEASON 8 OF VAMPIRE DIARIESTrueTrueTrue
16robustnessuppercaseThe Strangers is a 2008 American slasher film ...was the movie strangers based on a true storyTHE STRANGERS IS A 2008 AMERICAN SLASHER FILM ...WAS THE MOVIE STRANGERS BASED ON A TRUE STORYTrue.TrueTrue
17robustnessuppercaseIn March 2012 it was announced that four unive...is durham university part of the russell groupIN MARCH 2012 IT WAS ANNOUNCED THAT FOUR UNIVE...IS DURHAM UNIVERSITY PART OF THE RUSSELL GROUPTrueTrueTrue
18robustnessuppercaseThe Resident is an American medical drama tele...is the tv show the resident over for the seasonTHE RESIDENT IS AN AMERICAN MEDICAL DRAMA TELE...IS THE TV SHOW THE RESIDENT OVER FOR THE SEASONFalseFalseTrue
19robustnessuppercaseMagnesium citrate is a magnesium preparation i...does magnesium citrate have citric acid in itMAGNESIUM CITRATE IS A MAGNESIUM PREPARATION I...DOES MAGNESIUM CITRATE HAVE CITRIC ACID IN ITTrueTrueTrue
20robustnessuppercaseStreet Addressing will have the same street ad...does p o box come before street addressSTREET ADDRESSING WILL HAVE THE SAME STREET AD...DOES P O BOX COME BEFORE STREET ADDRESSFalseFalseTrue
21robustnessuppercaseA spark plug (sometimes, in British English, a...does a spark plug keep an engine runningA SPARK PLUG (SOMETIMES, IN BRITISH ENGLISH, A...DOES A SPARK PLUG KEEP AN ENGINE RUNNINGTrueTrueTrue
22robustnessuppercaseLadies may wear a long (over the shoulders or ...is a cape and a cloak the sameLADIES MAY WEAR A LONG (OVER THE SHOULDERS OR ...IS A CAPE AND A CLOAK THE SAMEFalseFalseTrue
23robustnessuppercaseRenunciation of U.S. citizenship was free unti...does it cost money to renounce us citizenshipRENUNCIATION OF U.S. CITIZENSHIP WAS FREE UNTI...DOES IT COST MONEY TO RENOUNCE US CITIZENSHIPFalseTrueFalse
24robustnessuppercaseThe Fire Tablet, formerly called the Kindle Fi...is a fire 7 the same as a kindleTHE FIRE TABLET, FORMERLY CALLED THE KINDLE FI...IS A FIRE 7 THE SAME AS A KINDLETrueFalseFalse
25robustnessuppercaseThe drinking age in Wisconsin is 21. Those und...can you drink alcohol with your parents in wis...THE DRINKING AGE IN WISCONSIN IS 21. THOSE UND...CAN YOU DRINK ALCOHOL WITH YOUR PARENTS IN WIS...TrueTrueTrue
26robustnessuppercaseContour feathers are not uniformly distributed...do penguins have feathers arising from the epi...CONTOUR FEATHERS ARE NOT UNIFORMLY DISTRIBUTED...DO PENGUINS HAVE FEATHERS ARISING FROM THE EPI...TrueTrueTrue
27robustnessuppercaseA new engine is broken in by following specifi...do you need to break in a carA NEW ENGINE IS BROKEN IN BY FOLLOWING SPECIFI...DO YOU NEED TO BREAK IN A CARFalseFalseTrue
28robustnessuppercaseThe Enchanted Forest is an amusement park loca...is the enchanted forest in oregon still openTHE ENCHANTED FOREST IS AN AMUSEMENT PARK LOCA...IS THE ENCHANTED FOREST IN OREGON STILL OPENTrueTrueTrue
29robustnessuppercaseOn the grounds of the speedway is the Indianap...is there a golf course at the indy 500ON THE GROUNDS OF THE SPEEDWAY IS THE INDIANAP...IS THERE A GOLF COURSE AT THE INDY 500TrueTrueTrue
30robustnessuppercaseAs part of Marvel's Marvel NOW! initiative a n...does deadpool have a kid in the comicsAS PART OF MARVEL'S MARVEL NOW! INITIATIVE A N...DOES DEADPOOL HAVE A KID IN THE COMICSTrueTrueTrue
31robustnessuppercaseBenson & Hedges is a British brand of cigarett...do they still make benson & hedges cigarettesBENSON & HEDGES IS A BRITISH BRAND OF CIGARETT...DO THEY STILL MAKE BENSON & HEDGES CIGARETTESTrueTrueTrue
32robustnessuppercaseThe Commonwealth government has its own tax la...is federal income tax the same as social securityTHE COMMONWEALTH GOVERNMENT HAS ITS OWN TAX LA...IS FEDERAL INCOME TAX THE SAME AS SOCIAL SECURITYFalseFalseTrue
33robustnessuppercaseThe crank sensor can be used in combination wi...is an engine speed sensor the same as a cranks...THE CRANK SENSOR CAN BE USED IN COMBINATION WI...IS AN ENGINE SPEED SENSOR THE SAME AS A CRANKS...Falseassistant\\n\\nThe engine speed sensor and ...FalseFalse
34robustnessuppercaseIndiana Jones and the Temple of Doom is a 1984...is indiana jones temple of doom a prequelINDIANA JONES AND THE TEMPLE OF DOOM IS A 1984...IS INDIANA JONES TEMPLE OF DOOM A PREQUELTrueTrueTrue
35robustnessuppercaseThe untitled Avengers film, colloquially refer...is there any next part of avengers infinity warTHE UNTITLED AVENGERS FILM, COLLOQUIALLY REFER...IS THERE ANY NEXT PART OF AVENGERS INFINITY WARTrueFalseFalse
36robustnessuppercaseAnnounced in April 2000 at the New York Auto S...is the toyota highlander on a truck frameANNOUNCED IN APRIL 2000 AT THE NEW YORK AUTO S...IS THE TOYOTA HIGHLANDER ON A TRUCK FRAMEFalseFalseTrue
37robustnessuppercaseSince the Copyright Act of 1909, United States...is it legal to do a cover of a songSINCE THE COPYRIGHT ACT OF 1909, UNITED STATES...IS IT LEGAL TO DO A COVER OF A SONGTrueTrueTrue
38robustnessuppercaseThe carbon-hydrogen bond (C--H bond) is a bond...can carbon form polar covalent bonds with hydr...THE CARBON-HYDROGEN BOND (C--H BOND) IS A BOND...CAN CARBON FORM POLAR COVALENT BONDS WITH HYDR...Falseassistant\\n\\nContext: The carbon-hydrogen...FalseFalse
39robustnessuppercaseIn 2011, Philip Pullman remarked at the Britis...is there a sequel to the movie the golden compassIN 2011, PHILIP PULLMAN REMARKED AT THE BRITIS...IS THERE A SEQUEL TO THE MOVIE THE GOLDEN COMPASSFalseFalseTrue
40robustnessuppercaseColumbus Day is a national holiday in many cou...is columbus day a national holiday in the unit...COLUMBUS DAY IS A NATIONAL HOLIDAY IN MANY COU...IS COLUMBUS DAY A NATIONAL HOLIDAY IN THE UNIT...TrueTrueTrue
41robustnessuppercaseNew Balance maintains a manufacturing presence...are new balance and nike the same companyNEW BALANCE MAINTAINS A MANUFACTURING PRESENCE...ARE NEW BALANCE AND NIKE THE SAME COMPANYFalseFalseTrue
42robustnessuppercaseU.S. Highway 20 (US 20) is an east--west Unite...is there an interstate that goes coast to coastU.S. HIGHWAY 20 (US 20) IS AN EAST--WEST UNITE...IS THERE AN INTERSTATE THAT GOES COAST TO COASTFalseFalseTrue
43robustnessuppercaseTomato purée is a thick liquid made by cooking...is pureed tomatoes the same as tomato sauceTOMATO PURÉE IS A THICK LIQUID MADE BY COOKING...IS PUREED TOMATOES THE SAME AS TOMATO SAUCEFalseFalseTrue
44robustnessuppercaseEnglish orthography typically represents vowel...can there be a word without a vowelENGLISH ORTHOGRAPHY TYPICALLY REPRESENTS VOWEL...CAN THERE BE A WORD WITHOUT A VOWELFalseTrueFalse
45robustnessuppercaseTipping Point is a British television game sho...does only the winner get money on tipping pointTIPPING POINT IS A BRITISH TELEVISION GAME SHO...DOES ONLY THE WINNER GET MONEY ON TIPPING POINTTrueTrueTrue
46robustnessuppercaseThe turkey vulture (Cathartes aura), also know...is there such a thing as a turkey vultureTHE TURKEY VULTURE (CATHARTES AURA), ALSO KNOW...IS THERE SUCH A THING AS A TURKEY VULTURETrueTrueTrue
47robustnessuppercaseAs of October 2008, a condor (four under par) ...has anyone hit a hole in one on a par 5AS OF OCTOBER 2008, A CONDOR (FOUR UNDER PAR) ...HAS ANYONE HIT A HOLE IN ONE ON A PAR 5TrueTrue.False
48robustnessuppercaseMetLife Stadium is an American sports stadium ...do the jets and giants share a stadiumMETLIFE STADIUM IS AN AMERICAN SPORTS STADIUM ...DO THE JETS AND GIANTS SHARE A STADIUMTrueTrueTrue
49robustnessuppercaseAfter the defeat in the 2016 Olympics, the USW...is the us womens soccer team in the world cupAFTER THE DEFEAT IN THE 2016 OLYMPICS, THE USW...IS THE US WOMENS SOCCER TEAM IN THE WORLD CUPTrueTrueTrue
\n", + "
" + ], + "text/plain": [ + " category test_type original_context \\\n", + "0 robustness uppercase All biomass goes through at least some of thes... \n", + "1 robustness uppercase Property tax or 'house tax' is a local tax on ... \n", + "2 robustness uppercase Phantom pain sensations are described as perce... \n", + "3 robustness uppercase Harry Potter and the Escape from Gringotts is ... \n", + "4 robustness uppercase Hydroxyzine preparations require a doctor's pr... \n", + "5 robustness uppercase Barq's /ˈbɑːrks/ is an American soft drink. It... \n", + "6 robustness uppercase In mathematics, parity is the property of an i... \n", + "7 robustness uppercase Of the 71 words in this list, 67 are nouns, an... \n", + "8 robustness uppercase Persons driving into Canada must have their ve... \n", + "9 robustness uppercase The knockout stage of the 2018 FIFA World Cup ... \n", + "10 robustness uppercase In response to the National Minimum Drinking A... \n", + "11 robustness uppercase Bloodline was announced in October 2014 as par... \n", + "12 robustness uppercase Shower gels for men may contain the ingredient... \n", + "13 robustness uppercase The liver detoxifies and breaks down chemicals... \n", + "14 robustness uppercase Fantastic Beasts and Where to Find Them is a 2... \n", + "15 robustness uppercase The Vampire Diaries, an American supernatural ... \n", + "16 robustness uppercase The Strangers is a 2008 American slasher film ... \n", + "17 robustness uppercase In March 2012 it was announced that four unive... \n", + "18 robustness uppercase The Resident is an American medical drama tele... \n", + "19 robustness uppercase Magnesium citrate is a magnesium preparation i... \n", + "20 robustness uppercase Street Addressing will have the same street ad... \n", + "21 robustness uppercase A spark plug (sometimes, in British English, a... \n", + "22 robustness uppercase Ladies may wear a long (over the shoulders or ... \n", + "23 robustness uppercase Renunciation of U.S. citizenship was free unti... \n", + "24 robustness uppercase The Fire Tablet, formerly called the Kindle Fi... \n", + "25 robustness uppercase The drinking age in Wisconsin is 21. Those und... \n", + "26 robustness uppercase Contour feathers are not uniformly distributed... \n", + "27 robustness uppercase A new engine is broken in by following specifi... \n", + "28 robustness uppercase The Enchanted Forest is an amusement park loca... \n", + "29 robustness uppercase On the grounds of the speedway is the Indianap... \n", + "30 robustness uppercase As part of Marvel's Marvel NOW! initiative a n... \n", + "31 robustness uppercase Benson & Hedges is a British brand of cigarett... \n", + "32 robustness uppercase The Commonwealth government has its own tax la... \n", + "33 robustness uppercase The crank sensor can be used in combination wi... \n", + "34 robustness uppercase Indiana Jones and the Temple of Doom is a 1984... \n", + "35 robustness uppercase The untitled Avengers film, colloquially refer... \n", + "36 robustness uppercase Announced in April 2000 at the New York Auto S... \n", + "37 robustness uppercase Since the Copyright Act of 1909, United States... \n", + "38 robustness uppercase The carbon-hydrogen bond (C--H bond) is a bond... \n", + "39 robustness uppercase In 2011, Philip Pullman remarked at the Britis... \n", + "40 robustness uppercase Columbus Day is a national holiday in many cou... \n", + "41 robustness uppercase New Balance maintains a manufacturing presence... \n", + "42 robustness uppercase U.S. Highway 20 (US 20) is an east--west Unite... \n", + "43 robustness uppercase Tomato purée is a thick liquid made by cooking... \n", + "44 robustness uppercase English orthography typically represents vowel... \n", + "45 robustness uppercase Tipping Point is a British television game sho... \n", + "46 robustness uppercase The turkey vulture (Cathartes aura), also know... \n", + "47 robustness uppercase As of October 2008, a condor (four under par) ... \n", + "48 robustness uppercase MetLife Stadium is an American sports stadium ... \n", + "49 robustness uppercase After the defeat in the 2016 Olympics, the USW... \n", + "\n", + " original_question \\\n", + "0 does ethanol take more energy make that produces \n", + "1 is house tax and property tax are same \n", + "2 is pain experienced in a missing body part or ... \n", + "3 is harry potter and the escape from gringotts ... \n", + "4 is there a difference between hydroxyzine hcl ... \n", + "5 is barq's root beer a pepsi product \n", + "6 can an odd number be divided by an even number \n", + "7 is there a word with q without u \n", + "8 can u drive in canada with us license \n", + "9 is there a play off for third place in the wor... \n", + "10 can minors drink with parents in new york \n", + "11 is the show bloodline based on a true story \n", + "12 is it bad to wash your hair with shower gel \n", + "13 is the liver part of the excretory system \n", + "14 is fantastic beasts and where to find them a p... \n", + "15 will there be a season 8 of vampire diaries \n", + "16 was the movie strangers based on a true story \n", + "17 is durham university part of the russell group \n", + "18 is the tv show the resident over for the season \n", + "19 does magnesium citrate have citric acid in it \n", + "20 does p o box come before street address \n", + "21 does a spark plug keep an engine running \n", + "22 is a cape and a cloak the same \n", + "23 does it cost money to renounce us citizenship \n", + "24 is a fire 7 the same as a kindle \n", + "25 can you drink alcohol with your parents in wis... \n", + "26 do penguins have feathers arising from the epi... \n", + "27 do you need to break in a car \n", + "28 is the enchanted forest in oregon still open \n", + "29 is there a golf course at the indy 500 \n", + "30 does deadpool have a kid in the comics \n", + "31 do they still make benson & hedges cigarettes \n", + "32 is federal income tax the same as social security \n", + "33 is an engine speed sensor the same as a cranks... \n", + "34 is indiana jones temple of doom a prequel \n", + "35 is there any next part of avengers infinity war \n", + "36 is the toyota highlander on a truck frame \n", + "37 is it legal to do a cover of a song \n", + "38 can carbon form polar covalent bonds with hydr... \n", + "39 is there a sequel to the movie the golden compass \n", + "40 is columbus day a national holiday in the unit... \n", + "41 are new balance and nike the same company \n", + "42 is there an interstate that goes coast to coast \n", + "43 is pureed tomatoes the same as tomato sauce \n", + "44 can there be a word without a vowel \n", + "45 does only the winner get money on tipping point \n", + "46 is there such a thing as a turkey vulture \n", + "47 has anyone hit a hole in one on a par 5 \n", + "48 do the jets and giants share a stadium \n", + "49 is the us womens soccer team in the world cup \n", + "\n", + " perturbed_context \\\n", + "0 ALL BIOMASS GOES THROUGH AT LEAST SOME OF THES... \n", + "1 PROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ... \n", + "2 PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE... \n", + "3 HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ... \n", + "4 HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR... \n", + "5 BARQ'S /ˈBⱭːRKS/ IS AN AMERICAN SOFT DRINK. IT... \n", + "6 IN MATHEMATICS, PARITY IS THE PROPERTY OF AN I... \n", + "7 OF THE 71 WORDS IN THIS LIST, 67 ARE NOUNS, AN... \n", + "8 PERSONS DRIVING INTO CANADA MUST HAVE THEIR VE... \n", + "9 THE KNOCKOUT STAGE OF THE 2018 FIFA WORLD CUP ... \n", + "10 IN RESPONSE TO THE NATIONAL MINIMUM DRINKING A... \n", + "11 BLOODLINE WAS ANNOUNCED IN OCTOBER 2014 AS PAR... \n", + "12 SHOWER GELS FOR MEN MAY CONTAIN THE INGREDIENT... \n", + "13 THE LIVER DETOXIFIES AND BREAKS DOWN CHEMICALS... \n", + "14 FANTASTIC BEASTS AND WHERE TO FIND THEM IS A 2... \n", + "15 THE VAMPIRE DIARIES, AN AMERICAN SUPERNATURAL ... \n", + "16 THE STRANGERS IS A 2008 AMERICAN SLASHER FILM ... \n", + "17 IN MARCH 2012 IT WAS ANNOUNCED THAT FOUR UNIVE... \n", + "18 THE RESIDENT IS AN AMERICAN MEDICAL DRAMA TELE... \n", + "19 MAGNESIUM CITRATE IS A MAGNESIUM PREPARATION I... \n", + "20 STREET ADDRESSING WILL HAVE THE SAME STREET AD... \n", + "21 A SPARK PLUG (SOMETIMES, IN BRITISH ENGLISH, A... \n", + "22 LADIES MAY WEAR A LONG (OVER THE SHOULDERS OR ... \n", + "23 RENUNCIATION OF U.S. CITIZENSHIP WAS FREE UNTI... \n", + "24 THE FIRE TABLET, FORMERLY CALLED THE KINDLE FI... \n", + "25 THE DRINKING AGE IN WISCONSIN IS 21. THOSE UND... \n", + "26 CONTOUR FEATHERS ARE NOT UNIFORMLY DISTRIBUTED... \n", + "27 A NEW ENGINE IS BROKEN IN BY FOLLOWING SPECIFI... \n", + "28 THE ENCHANTED FOREST IS AN AMUSEMENT PARK LOCA... \n", + "29 ON THE GROUNDS OF THE SPEEDWAY IS THE INDIANAP... \n", + "30 AS PART OF MARVEL'S MARVEL NOW! INITIATIVE A N... \n", + "31 BENSON & HEDGES IS A BRITISH BRAND OF CIGARETT... \n", + "32 THE COMMONWEALTH GOVERNMENT HAS ITS OWN TAX LA... \n", + "33 THE CRANK SENSOR CAN BE USED IN COMBINATION WI... \n", + "34 INDIANA JONES AND THE TEMPLE OF DOOM IS A 1984... \n", + "35 THE UNTITLED AVENGERS FILM, COLLOQUIALLY REFER... \n", + "36 ANNOUNCED IN APRIL 2000 AT THE NEW YORK AUTO S... \n", + "37 SINCE THE COPYRIGHT ACT OF 1909, UNITED STATES... \n", + "38 THE CARBON-HYDROGEN BOND (C--H BOND) IS A BOND... \n", + "39 IN 2011, PHILIP PULLMAN REMARKED AT THE BRITIS... \n", + "40 COLUMBUS DAY IS A NATIONAL HOLIDAY IN MANY COU... \n", + "41 NEW BALANCE MAINTAINS A MANUFACTURING PRESENCE... \n", + "42 U.S. HIGHWAY 20 (US 20) IS AN EAST--WEST UNITE... \n", + "43 TOMATO PURÉE IS A THICK LIQUID MADE BY COOKING... \n", + "44 ENGLISH ORTHOGRAPHY TYPICALLY REPRESENTS VOWEL... \n", + "45 TIPPING POINT IS A BRITISH TELEVISION GAME SHO... \n", + "46 THE TURKEY VULTURE (CATHARTES AURA), ALSO KNOW... \n", + "47 AS OF OCTOBER 2008, A CONDOR (FOUR UNDER PAR) ... \n", + "48 METLIFE STADIUM IS AN AMERICAN SPORTS STADIUM ... \n", + "49 AFTER THE DEFEAT IN THE 2016 OLYMPICS, THE USW... \n", + "\n", + " perturbed_question \\\n", + "0 DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCES \n", + "1 IS HOUSE TAX AND PROPERTY TAX ARE SAME \n", + "2 IS PAIN EXPERIENCED IN A MISSING BODY PART OR ... \n", + "3 IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ... \n", + "4 IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ... \n", + "5 IS BARQ'S ROOT BEER A PEPSI PRODUCT \n", + "6 CAN AN ODD NUMBER BE DIVIDED BY AN EVEN NUMBER \n", + "7 IS THERE A WORD WITH Q WITHOUT U \n", + "8 CAN U DRIVE IN CANADA WITH US LICENSE \n", + "9 IS THERE A PLAY OFF FOR THIRD PLACE IN THE WOR... \n", + "10 CAN MINORS DRINK WITH PARENTS IN NEW YORK \n", + "11 IS THE SHOW BLOODLINE BASED ON A TRUE STORY \n", + "12 IS IT BAD TO WASH YOUR HAIR WITH SHOWER GEL \n", + "13 IS THE LIVER PART OF THE EXCRETORY SYSTEM \n", + "14 IS FANTASTIC BEASTS AND WHERE TO FIND THEM A P... \n", + "15 WILL THERE BE A SEASON 8 OF VAMPIRE DIARIES \n", + "16 WAS THE MOVIE STRANGERS BASED ON A TRUE STORY \n", + "17 IS DURHAM UNIVERSITY PART OF THE RUSSELL GROUP \n", + "18 IS THE TV SHOW THE RESIDENT OVER FOR THE SEASON \n", + "19 DOES MAGNESIUM CITRATE HAVE CITRIC ACID IN IT \n", + "20 DOES P O BOX COME BEFORE STREET ADDRESS \n", + "21 DOES A SPARK PLUG KEEP AN ENGINE RUNNING \n", + "22 IS A CAPE AND A CLOAK THE SAME \n", + "23 DOES IT COST MONEY TO RENOUNCE US CITIZENSHIP \n", + "24 IS A FIRE 7 THE SAME AS A KINDLE \n", + "25 CAN YOU DRINK ALCOHOL WITH YOUR PARENTS IN WIS... \n", + "26 DO PENGUINS HAVE FEATHERS ARISING FROM THE EPI... \n", + "27 DO YOU NEED TO BREAK IN A CAR \n", + "28 IS THE ENCHANTED FOREST IN OREGON STILL OPEN \n", + "29 IS THERE A GOLF COURSE AT THE INDY 500 \n", + "30 DOES DEADPOOL HAVE A KID IN THE COMICS \n", + "31 DO THEY STILL MAKE BENSON & HEDGES CIGARETTES \n", + "32 IS FEDERAL INCOME TAX THE SAME AS SOCIAL SECURITY \n", + "33 IS AN ENGINE SPEED SENSOR THE SAME AS A CRANKS... \n", + "34 IS INDIANA JONES TEMPLE OF DOOM A PREQUEL \n", + "35 IS THERE ANY NEXT PART OF AVENGERS INFINITY WAR \n", + "36 IS THE TOYOTA HIGHLANDER ON A TRUCK FRAME \n", + "37 IS IT LEGAL TO DO A COVER OF A SONG \n", + "38 CAN CARBON FORM POLAR COVALENT BONDS WITH HYDR... \n", + "39 IS THERE A SEQUEL TO THE MOVIE THE GOLDEN COMPASS \n", + "40 IS COLUMBUS DAY A NATIONAL HOLIDAY IN THE UNIT... \n", + "41 ARE NEW BALANCE AND NIKE THE SAME COMPANY \n", + "42 IS THERE AN INTERSTATE THAT GOES COAST TO COAST \n", + "43 IS PUREED TOMATOES THE SAME AS TOMATO SAUCE \n", + "44 CAN THERE BE A WORD WITHOUT A VOWEL \n", + "45 DOES ONLY THE WINNER GET MONEY ON TIPPING POINT \n", + "46 IS THERE SUCH A THING AS A TURKEY VULTURE \n", + "47 HAS ANYONE HIT A HOLE IN ONE ON A PAR 5 \n", + "48 DO THE JETS AND GIANTS SHARE A STADIUM \n", + "49 IS THE US WOMENS SOCCER TEAM IN THE WORLD CUP \n", + "\n", + " expected_result actual_result pass \n", + "0 False\\n) False False \n", + "1 False False True \n", + "2 True True True \n", + "3 True True True \n", + "4 True False False \n", + "5 False False True \n", + "6 False True False \n", + "7 True False False \n", + "8 False True False \n", + "9 True True True \n", + "10 True True True \n", + "11 False False True \n", + "12 Falseassistant\\n\\nThat's correct! Shower gels ... False False \n", + "13 True True True \n", + "14 True True True \n", + "15 True True True \n", + "16 True. True True \n", + "17 True True True \n", + "18 False False True \n", + "19 True True True \n", + "20 False False True \n", + "21 True True True \n", + "22 False False True \n", + "23 False True False \n", + "24 True False False \n", + "25 True True True \n", + "26 True True True \n", + "27 False False True \n", + "28 True True True \n", + "29 True True True \n", + "30 True True True \n", + "31 True True True \n", + "32 False False True \n", + "33 Falseassistant\\n\\nThe engine speed sensor and ... False False \n", + "34 True True True \n", + "35 True False False \n", + "36 False False True \n", + "37 True True True \n", + "38 Falseassistant\\n\\nContext: The carbon-hydrogen... False False \n", + "39 False False True \n", + "40 True True True \n", + "41 False False True \n", + "42 False False True \n", + "43 False False True \n", + "44 False True False \n", + "45 True True True \n", + "46 True True True \n", + "47 True True. False \n", + "48 True True True \n", + "49 True True True " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = harness.generated_results()\n", + "df[df['test_type'] == 'uppercase']" + ] + }, { "cell_type": "markdown", "metadata": { @@ -921,7 +1932,7 @@ "outputs": [ { "data": { - "image/png": "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d28VLVpUNptNISEhatu2reO9Gh4erj///FM//PCD415ljirLvAcbNmzQ0KFDFRAQIG9vb7Vv315nz57NUvfKlSvVoEEDeXt7q0CBAmrVqpX+/PNPpz63qkeStm7dqujoaBUpUkSenp4qWbKknnzyyRve+5w6ceKEnnzySQUFBclms6lixYr68MMPs/R75513VLFiRXl5ealgwYKKiorSJ598IkkaO3ashg8fLkkqWbKk455l1r969WrVr19f/v7+8vHxUdmyZR2fbwBwv2CEFADglr788ktFRESobt26Oerfp08fffTRR3rsscf0wgsvaPPmzZowYYJ2796tpUuXOvXdv3+//vWvf6lfv356/PHH9dZbb6lNmzZ677339NJLL+nZZ5+VJE2YMEGdO3fWnj17nEYJZGRkqHnz5nrggQf05ptvatWqVRozZozS09M1fvx4R79p06bp0UcfVffu3ZWamqoFCxaoU6dO+uqrr9SqVSunmtauXauFCxdq4MCBKlKkyA3XC3nmmWe0aNEiDRw4UBUqVND58+e1fv167d69WzVq1JB09Rex3r17q1atWpowYYLOnDmjadOmacOGDdq+fbvTaIyMjAxFR0erTp06euutt/Tdd99p8uTJioyMVP/+/W96z8eOHatx48apadOm6t+/v/bs2aOZM2fql19+0YYNG+Tm5qapU6fq//7v/7R06VLNnDlTPj4+qlKlyk2Pm5KSosWLF+uFF16QJHXr1k29e/fW6dOnFRwc7Oh38uRJ1a5dW/Hx8Xr66adVrlw5nThxQosWLdLly5fl7u6uxMRENWjQQLt379aTTz6pGjVq6Ny5c1q+fLmOHz+uIkWK3LSW7Jw/f14tWrRQ165d9fjjjysoKMhx3318fDR06FD5+Pho7dq1Gj16tBISEjRp0iTH/qtXr1br1q0VEhKiwYMHKzg4WLt379ZXX32lwYMH67HHHtOAAQMUExOj6tWrO507JiZGjRs3VlhY2C3rvHjxos6dOyfDMBQbG6t33nlHiYmJWUZd9OvXz/GaGTRokA4dOqTp06dr+/btjudx/vz5ev/997VlyxbNmTNHkhzvzdy89/bs2aNu3bqpX79+6tu3r8qWLavLly+rUaNGOnHihPr166fixYtr48aNGjVqlE6dOqWpU6fe9Dpzet8lKS4uTs2bN1eHDh3UuXNnLVq0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FAAAAAAAAEx1VwdShw8flsVi0Y4dO27YZ926dbJYLIqPj/9b58qr4wAAAAAAgHvD/206rHpvrFWZl1eq7bsbtONY/A37pmXYNe27fSrVbrDc/IPk4mZT+ao1tGXLFkefd7/fr0enr1fF0atU89XVeurDnzXkxZcVGRkpDw8PVa1aVatWrXI67o8//qg2bdooNDRUFotFy5Ytu0NXe3e5qwMpAAAAAACAO+HLnSf1n692a3DT0vr6ufqqEFJAPT7YrHOJKdn2f+vbPXpnzkc6uuI9TXh1nF77v691yhqkpo88otjYWEnS5kMX9MQDJbR0QD3Nf6qOtiyaoZnvvadJU6Zq165deuaZZ9S+fXtt377dcdykpCRVrVpV7777rinXfbdwze8CAAAAAAAAzDZn/SF1rV1MnaOKSZJea1dZa/+K1cKtx/Rs41JZ+i/99YSM37/S00/31bDnnpEkHUr1U8zzrfThhx9q5MiR+r8nazvtc3b7d/Kp00lhlesqIqKw+vfvr++++06TJ0/Wxx9/LElq0aKFWrRocYev9u5j6gipVatWqX79+vL391fhwoXVunVrHThwwLF9y5Ytql69ujw8PBQVFeWUGGZasWKFypQpI09PTz300EM6fPhwjs9/5MgRtWnTRgULFpS3t7cqVqyoFStWZNv3/Pnz6tatm8LCwuTl5aXKlSvr008/derTuHFjDRo0SCNGjFChQoUUHByssWPHOvX566+/VL9+fXl4eKhChQr67rvvnIbgpaamauDAgQoJCZGHh4dKlCihCRMm5PiaAAAAAABA7qSm2/XHiYuqV6qIo81qtaheqSL69Uh8tvskp6To8J4/1LRpU0ebp81VXuHVtGnTpmz3SUlJkVzc5e/l/r99PD21fv36vLmQe5ipI6SSkpI0dOhQValSRYmJiRo9erTat2+vHTt26PLly2rdurWaNWumjz/+WIcOHdLgwYOd9j927Jg6dOigAQMG6Omnn9bWrVv1wgsv5Pj8AwYMUGpqqn788Ud5e3tr165d8vHxybZvcnKyatasqRdffFG+vr76+uuv9cQTTygyMlK1a/8v8fzoo480dOhQbd68WZs2bVKvXr1Ur149NWvWTBkZGWrXrp2KFy+uzZs369KlS1nq/e9//6vly5dr4cKFKl68uI4dO6Zjx47l4q4CAAAAAIDciLucqgy7oSI+Nqf2AB+bDpxNynafqGA3/Z6RoQybr+x2QxsOnNOqP08r3ear06ez/h5vtxsqVCZKZ3cul/XSQNkDvbVmzRotWbJEGRkZd+S67iWmBlIdO3Z0+vnDDz9UQECAdu3apY0bN8put+uDDz6Qh4eHKlasqOPHj6t///6O/jNnzlRkZKQmT54sSSpbtqx+//13TZw4MUfnP3r0qDp27KjKlStLkiIiIm7YNywsTMOGDXP8/Nxzz+mbb77RwoULnQKpKlWqaMyYMZKk0qVLa/r06VqzZo2aNWum1atX68CBA1q3bp2Cg4MlSa+99pqaNWvmVFPp0qVVv359WSwWlShR4qbXkJKScjVh/f8SEhJydO0AAAAAAOD2DW1WWnMlPffprxrxU7JKFPJSp5rF9O532fd/5Ys/VLhpP5XePlflypWTxWJRZGSkevfurQ8//NDU2u9Gpk7Z27dvn7p166aIiAj5+voqPDxc0tVQZvfu3apSpYo8PDwc/R988EGn/Xfv3q06deo4tV3f52YGDRqk//znP6pXr57GjBmj33777YZ9MzIy9Oqrr6py5coqVKiQfHx89M033+jo0aNO/apUqeL0c0hIiGMxsz179qhYsWKOMEqSU5glSb169dKOHTtUtmxZDRo0SN9+++1Nr2HChAny8/NzPIoVK5ajawcAAAAAAFcV9HKXi9WSZQHzs4kpCrhu1FSmMiXC5OLioqmPRmjDiw9rzQuN5GVzkUd6otPv/ZI0+os/tPavWC0e2lyrvv5SSUlJOnLkiP766y/5+PjcdIDMP4WpgVSbNm104cIFzZ49W5s3b9bmzZslXV1HyQx9+vTRwYMH9cQTT+j3339XVFSU3nnnnWz7Tpo0SdOmTdOLL76o77//Xjt27FB0dHSWWt3c3Jx+tlgsstvtOa6pRo0aOnTokF599VVduXJFnTt31mOPPXbD/qNGjdLFixcdD6b3AQAAAACQO+6uVlUK89PG/eccbXa7oY37z6tGCf/s93F3V82aNfXTD98r2M9D6XZDK387qaRDOxyDZQzD0Ogv/tA3f57WJ30fULFCXpIkDw8PhYWFKT09XYsXL1bbtm3v+DXe7Uybsnf+/Hnt2bNHs2fPVoMGDSTJaRGv8uXLa/78+UpOTnaMkvr555+djlG+fHktX77cqe36PrdSrFgxPfPMM3rmmWc0atQozZ49W88991yWfhs2bFDbtm31+OOPS5Lsdrv27t2rChUq5PhcZcuW1bFjx3TmzBkFBQVJkn755Zcs/Xx9fdWlSxd16dJFjz32mJo3b64LFy6oUKFCWfrabDbZbNmntQAAAAAAIGf61C+pFz7fqcpF/VWtmJ8+WH9Yl1PT1anm1ZlIQz/boSA/D73YvJwkafvROD3cqbfefnmICpUop62XC2vf1x/LkpGi3r17S5KqPvyoTqV56cv/myFvm4tWrv1Rp0+d1ANRNXUu9rTGjh0ru92uESNGOOpITEzU/v37HT8fOnRIO3bsUKFChVS8eHET74i5TAukChYsqMKFC+v9999XSEiIjh49qpEjRzq2/+tf/9K///1v9e3bV6NGjdLhw4f11ltvOR3jmWee0eTJkzV8+HD16dNH27Zt07x583Jcw5AhQ9SiRQuVKVNGcXFx+v7771W+fPls+5YuXVqLFi3Sxo0bVbBgQU2ZMkVnzpzJVSDVrFkzRUZGqmfPnnrzzTd16dIlvfzyy5KujqSSpClTpigkJETVq1eX1WrV559/ruDgYPn7++f4PAAAAAAAIHfaVA3VhaRUvb16r85eSlH5UF999GRtBRS4OgjkRPwVx+/ukpSSbtcv1vLybfSkJvxnvOxJcapStapmrlrlGISy98BhufoFqev7VwfPJB/9XRe+nSFdipVvAR+1bNlS8+fPd/qdf+vWrXrooYccPw8dOlSS1LNnz1xlHvca0wIpq9WqBQsWaNCgQapUqZLKli2r//73v2rcuLEkycfHR19++aWeeeYZVa9eXRUqVNDEiROdFkIvXry4Fi9erOeff17vvPOOateurddff11PPvlkjmrIyMjQgAEDdPz4cfn6+qp58+Z6++23s+378ssv6+DBg4qOjpaXl5eefvpptWvXThcvXszxNbu4uGjZsmXq06ePatWqpYiICE2aNElt2rRxjAIrUKCA3nzzTe3bt08uLi6qVauWVqxYIavV1NmUAAAAAAD84/SsG66edcOz3fZZP+c1qx+IKKzvhjaShjaSNCPbfZKP/n5dSytJI7Pr6tC4cWMZhpGzgu8jFuOfeNX5aMOGDapfv77279+vyMjIv328hISEq4ubD1koq80rDyoEAAAAAODe9NVz9VUpzC+/y7hnZWYMFy9elK+v7x09l2kjpP6pli5dKh8fH5UuXVr79+/X4MGD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flg7d+509B87dqyqVaumOXPmqGTJko4nLz4+Xv369VNQUJA8PDxUqVIlffXVV5Kk8+fPq1u3bgoLC5OXl5cqV66sTz/91Ok6Fi1apMqVK8vT01OFCxdW06ZNlZSU5Ng+Z84clS9fXh4eHipXrpxmzJiRx3cSAAAg/ySkZMhuKMvUPH8PF8Vdych2nzBfNw1+sLBeaRSoF+oVkd2Qhn9zWuduMPopNcPQ3O3xahjuJS/3u/aftwAA5Nq5c+eUkZGhoKAgp/agoCCdPn06232io6M1ZcoU7du3T3a7XatXr9aSJUt06tQpR5+DBw9q5syZKl26tL755hv1799fgwYN0ieffHJHr+dad9UaUtfq1auX9u3bp+XLl8vX11cvvviiWrZsqV27dsnNzU0NGzbUunXr9NhjjykuLk67d++Wp6en/vrrL5UrV04//PCDatWqJS8vL0lSp06d5OnpqZUrV8rPz0+zZs1SkyZNtHfvXhUqVEiStH//fi1evFhLliyRi4uL7Ha7WrRooUuXLunjjz9WZGSkdu3aJReXq/+gSk5OVs2aNfXiiy/K19dXX3/9tZ544glFRkaqdu3aOnXqlLp166Y333xT7du316VLl/TTTz/JMAxJUkxMjEaPHq3p06erevXq2r59u/r27Stvb2/17Nkz2/uSkpKilJT//W9iQkLCnXwaAAAATFc+wKbyATann/svP6mV+xL1RDV/p77pdkNv/HhWMqQBtQubXCkAAHefadOmqW/fvipXrpwsFosiIyPVu3dvpyl+drtdUVFRev311yVJ1atX1x9//HHDaYB3wl0ZSGUGURs2bFDdunUlXQ1vihUrpmXLlqlTp05q3LixZs2aJUn68ccfVb16dQUHB2vdunUqV66c1q1bp0aNGkm6Olpqy5Ytio2Nlc129R83b731lpYtW6ZFixbp6aeflnR1KNz//d//KSAgQJL07bffasuWLdq9e7fKlCkjSU7zKcPCwjRs2DDHz88995y++eYbLVy40BFIpaenq0OHDipRooQkqXLlyo7+Y8aM0eTJk9WhQwdJUsmSJbVr1y7NmjXrhoHUhAkTNG7cuL95hwEAAMzha3OR1SLFJzuPhopPznBaF+pmXK0WRRRy16lLaU7t6XZDb/x0VrFJ6Xq9WRCjowAA950iRYrIxcVFZ86ccWo/c+aMgoODs90nICBA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hQsX6sEHH1SPHj00Z86c09osWbJEV111lYKCglSzZk3dcsstrn1HjhxRUlKSIiIiFBgYqOjoaKWlpUmS5syZo6pVq7qd66233pLD4XC9HzdunGJjY/XKK6+ofv36CgoKkiRlZmbq6quvVtWqVVWjRg317NlTubm5buf67rvv1KdPH1WvXl0hISFq27at1q9fr/z8fPn4+GjDhg1u7adOnarIyEgdP378tGv88ssvlZubqxkzZqh9+/aKjIxUx44dNXHiRLVv3/6sfZ7w0ksvqWHDhgoICFDjxo31+uuvu/XjcDj00ksv6eabb1ZISIieeuopSdJ//vMftW7dWkFBQWrQoIHGjx+vY8eOnVbnCU888YR++OEHrVq1St27d9fll1+ua6+9Vu+88478/f01ePBgSdLMmTMVHh5+2jX36tVLAwYMcL0/W/+l1X2qqKgopaSk6J577lFYWJgGDRokSUpPT1ezZs0UGBioqKgoTZky5bRjDxw4oD59+igkJET16tXT9OnTXftKmuG0f/9+ORwOrVmzRpK0b98+9e3bV7Vq1VJwcLCuuOIKzZ49W5JUv359SVKrVq3kcDh0/fXXS5LuvfdeJSQkaPLkyXI6napRo4YGDx6so0ePuvo5cuSIHn30UdWrV08hISFq166dq09J2rFjh+Lj41WtWjWFhISoWbNmWr58+VlrOlXdunVdrypVqsjhcLhtW7BggWJiYhQUFKQmTZpoxowZrmOLioo0ZMgQOZ1OBQUFKTIyUk8//bTr70SSbrnlFjkcDtf7zZs3q1OnTgoNDVVYWJjatGlz2pgBAMArDAAAXPLS0tKsbdu2Zma2ZMkSa9iwoR0/fty1f+nSpebr62tjx461r776yrKysmzSpEmu/b1797aIiAjLyMiw3NxcW7VqlS1YsMDMzGbPnm1VqlRx62/x4sV28o8ZycnJFhISYt26dbPPPvvMNm/ebGZmb775pqWnp9vWrVtt06ZNFh8fb82bN7fi4mIzMztw4IA1aNDArrnmGvvwww9t69attnDhQvv444/NzKxr16720EMPufXdokULGzt2bImfw3fffWc+Pj42efJkO3bsWIltztZnRkaG+fv72/Tp0y0nJ8emTJlivr6+9u6777rOIclq165tr776quXm5tqOHTvsgw8+sLCwMJszZ47l5ubaihUrLCoqysaNG1diHcXFxVa1alUbNGhQifufeuopczgctmfPHtu7d68FBATYqlWrXPv37Nnjtu1c+i+p7pJERkZaWFiYTZ482bZt22bbtm2zDRs2mI+Pj02YMMFycnJs9uzZFhwcbLNnz3Y7LjQ01J5++mnLycmxF154wXx9fW3FihVmZrZ9+3aTZJs2bXIds2/fPpNk7733npmZDR482GJjY+3TTz+17du328qVK+3tt982M7NPPvnEJNmqVats165dtmfPHjMz69+/v4WFhdkDDzxg2dnZtmTJEqtUqZLNnDnT1c/AgQOtQ4cO9sEHH9i2bdvs2WeftcDAQPvmm2/MzKxHjx7WtWtX+/zzzy03N9eWLFli77///llrOpNTx84bb7xhTqfT0tPTLS8vz9LT06169eo2Z84cMzN79tlnLSIiwj744APLz8+3Dz/80ObNm2dmZoWFhSbJZs+ebbt27bLCwkIzM2vWrJndfffdlp2dbd988439+9//tqysrLPWBgDAhUYgBQDAn0CHDh1s6tSpZmZ29OhRq1mzpusXfDOzuLg469u3b4nH5uTkmCRbuXJlifvPNZDy9/d3/ZJcmt27d5sk27Jli5mZ/etf/7LQ0FBXsHCqhQsXWrVq1ey3334zM7ONGzeaw+Gw7du3l9rHtGnTrFKlShYaGmqdOnWyCRMmWG5urmv/2frs0KGD3X///W7b7rjjDrvppptc7yXZ8OHD3dp07tzZLeQzM3v99dfN6XSW2E9BQYFJsn/+858l7s/IyDBJtn79ejMz69Wrlw0YMMDtOsLDw13h3rn0X1LdJYmMjLSEhAS3bXfddZd17drVbduoUaOsadOmbsd169bNrU1iYqJ1797dzM4tkIqPj7e//e1vJdZV0vFmvwdSkZGRbiHkHXfcYYmJiWZmtmPHDvP19bXvv//e7bjOnTvbY489ZmZmzZs3LzU8PFNNZ3Lq2GnYsKErYDohJSXF4uLizMxs6NCh9te//tUtTD6ZJFu8eLHbttDQUFegBQBARcItewAAXOJycnL0ySefqE+fPpIkPz8/JSYmum65k6SsrCx17ty5xOOzsrLk6+ur6667rlx1REZGqlatWm7btm7dqj59+qhBgwYKCwtz3WZ0YsHurKwstWrVStWrVy/xnAkJCfL19dXixYsl/X77YKdOnVznKcngwYNVUFCguXPnKi4uTosWLVKzZs20cuXKc+ozOztbHTt2dNvWsWNHZWdnu21r27at2/vNmzdrwoQJqly5sut1//33a9euXfr1119LrdfMSt13sr59+yo9PV1HjhyRJM2dO1d33nmnfHx8ytT/qXWX5tR2pX0uW7duVXFxsWtbXFycW5u4uLjTPrszefDBB7VgwQLFxsbqH//4hz7++ONzOq5Zs2by9fV1vXc6nSosLJQkbdmyRcXFxWrUqJHb5/P++++7biEdNmyYJk6cqI4dOyo5OVmff/55uWs62aFDh5Sbm6v77rvPrYaJEye6arj33nuVlZWlxo0ba9iwYVqxYsVZzzty5EgNHDhQXbp0UWpq6mm3xAIA4C0EUgAAXOLS0tJ07NgxhYeHy8/PT35+fnrppZeUnp6un3/+WZIUHBxc6vFn2idJPj4+p4UmJ6/Nc0JISMhp2+Lj47V3717NmjVL69evd63TVFRUdE59BwQE6J577tHs2bNVVFSkefPmua2ZVJrQ0FDFx8frqaee0ubNm3XNNddo4sSJ59TnuTr1eg8ePKjx48crKyvL9dqyZYu2bt3qWlPrZLVq1VLVqlVLDWuys7PlcDgUHR0t6ffP0sy0bNkyffvtt/rwww/Vt2/fMvdf0t/TuVzfH+FEeHby19OpX0vdu3fXjh07NGLECP3www/q3LmzHn300bOe+9TF2R0Oh2vNrYMHD8rX11cbN250+3yys7P1/PPPS5IGDhyovLw89evXT1u2bFHbtm314osvlqumkx08eFCSNGvWLLcavvjiC/3vf/+TJLVu3Vrbt29XSkqKDh8+rN69e+v2228/43nHjRunL7/8Uj169NC7776rpk2bugJcAAC8iUAKAIBL2LFjx/Taa69pypQpbr/kbt68WeHh4Zo/f74kqUWLFlq9enWJ52jevLmOHz+u999/v8T9tWrV0oEDB3To0CHXtpMXpS7Nnj17lJOTozFjxqhz586KiYnRvn373Nq0aNFCWVlZ2rt3b6nnGThwoFatWqUZM2bo2LFjuvXWW8/a98kcDoeaNGniqv9sfcbExGjt2rVu29auXaumTZuesZ/WrVsrJydH0dHRp71OBDEn8/HxUe/evTVv3jwVFBS47Tt8+LBmzJihG2+80TWTKygoSLfeeqvmzp2r+fPnq3HjxmrduvV5919WpX0ujRo1cpuZdCJcOfl9TEyMJLlm0J38JLqSvpZq1aql/v3764033tDUqVM1c+ZMSXI96e/kGVnnolWrViouLlZhYeFpn03dunVd7SIiIvTAAw8oIyNDjzzyiGbNmnXWms5VnTp1FB4erry8vNNqOLFYuySFhYUpMTFRs2bN0sKFC5Wenu76WvX39y/x2hs1aqQRI0ZoxYoVuvXWW0tdcB0AAE/y83YBAADgwlm6dKn27dun++67T1WqVHHbd9tttyktLU0PPPCAkpOT1blzZzVs2FB33nmnjh07puXLlyspKUlRUVHq37+/BgwYoBdeeEEtW7bUjh07VFhYqN69e6tdu3aqVKmSHn/8cQ0bNkzr168v8Sl+p6pWrZpq1KihmTNnyul0aufOnRo9erRbmz59+mjSpElKSEjQ008/LafTqU2bNik8PNx161dMTIzat2+vpKQkDRgw4IwznLKyspScnKx+/fqpadOmCggI0Pvvv69XX31VSUlJ59TnqFGj1Lt3b7Vq1UpdunTRkiVLlJGRoVWrVp3xeseOHauePXvq8ssv1+233y4fHx9t3rxZX3zxhWt21qkmTZqk1atXq2vXrnrmmWd05ZVXavv27RozZoyOHj3q9oQ66ffb9nr27Kkvv/xSd999d7n7L4tHHnlEV111lVJSUpSYmKh169Zp2rRpbk+Jk34PqZ555hklJCRo5cqVWrRokZYtWybp99lp7du3V2pqqurXr6/CwkKNGTPmtOto06aNmjVrpiNHjmjp0qWuQKt27doKDg5WZmamLrvsMgUFBZ32dV+SRo0aqW/fvrrnnns0ZcoUtWrVSrt379bq1avVokUL9ejRQ8OHD1f37t3VqFEj7du3T++9956r3zPVVBbjx4/XsGHDVKVKFXXr1k1HjhzRhg0btG/fPo0cOVLPPfecnE6nWrVqJR8fHy1atEh169Z1PeUyKipKq1evVseOHRUYGKigoCCNGjVKt99+u+rXr6/vvvtOn376qW677bYy1wYAwB/Ou0tYAQCAC6lnz55ui22fbP369SbJ9cS79PR0i42NtYCAAKtZs6bdeuutrraHDx+2ESNGmNPptICAAIuOjrZXX33VtX/x4sUWHR1twcHB1rNnT5s5c+Zpi5q3bNnytBpWrlxpMTExFhgYaC1atLA1a9actjBzfn6+3XbbbRYWFmaVKlWytm3buhbyPiEtLc0k2SeffHLGz2P37t02bNgwu/LKK61y5coWGhpqzZs3t8mTJ7sW/z6XPmfMmGENGjQwf39/a9Sokb322mtu/Zx6DSdkZmZahw4dLDg42MLCwuwvf/mL25PeSqt56NChFhERYf7+/lanTh279957S3wCXnFxsTmdTpPktlD7ufZfWt2nioyMLHGx9TfffNOaNm1q/v7+dvnll9uzzz572nHjx4+3O+64wypVqmR169a1559/3q3NV199ZXFxcRYcHGyxsbG2YsUKt0XNU1JSLCYmxoKDg6169erWq1cvy8vLcx0/a9Ysi4iIMB8fH7vuuuvM7PdFzXv16uXWz8MPP+zab2ZWVFRkY8eOtaioKPP39zen02m33HKLff7552ZmNmTIEGvYsKEFBgZarVq1rF+/fvbTTz+dU02lKemBAHPnznWNw2rVqtm1115rGRkZZmY2c+ZMi42NtZCQEAsLC7POnTvbZ5995jr27bfftujoaPPz87PIyEg7cuSI3XnnnRYREWEBAQEWHh5uQ4YMscOHD5+1NgAALjSH2TmulAkAAFBBpaSkaNGiRW4LTQMAAKDiYg0pAABw0Tp48KC++OILTZs2TUOHDvV2OQAAADhHBFIAAOCiNWTIELVp00bXX3/9OT1dDwAAABUDt+wBAAAAAADAo5ghBQAAAAAAAI8ikAIAAAAAAIBHEUgBAAAAAADAowikAAAAAAAA4FEEUgAAAAAAAPAoAikAAAAAAAB4FIEUAAAAAAAAPIpACgAAAAAAAB5FIAUAAAAAAACP+n+LwqzPASX/dQAAAABJRU5ErkJggg==", + "image/png": "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2bbHx8frwQcfzPO4WefywgsvZJttluXv4WBen2xojych5uXzNnToULVr106ff/65Vq1apZdfflmvvfaa1q1bl229tZu53e8867p+/PHHNmvWZbnxwQC3q8dkMmnRokX64Ycf9NVXX2nVqlV64oknNGXKFP3www/y8vLKVc03yqrv8ccfv+kTSLPWHCtfvrz279+vZcuWaeXKlVq8eLFmzJihMWPG3PZ7093dXd99952+/fZbLV++XCtXrtT8+fP1wAMPaPXq1QXufysAIC8IpQAAeda2bVu9//772rJli82tdjkpUaKEMjMzdeDAAZUvX97afubMGV24cEElSpTI19oyMzP1xx9/2PyxnDWDJ2tB3MWLF8vNzU2rVq2SxWKx9pszZ84/Pn5oaKieffZZPfvss0pISFCNGjX0yiuvqHXr1tZz3b9/vx544AGb/fbv359v1+LG49w4MyI9PV2HDx+2znLJq/j4eFWqVMk68+NGs2bN0qeffqrx48crMDBQPj4+tw0uo6Kibtsna+bEjU8NlJSn2V7r16/X+fPntWTJEjVp0sTafvjw4Wz1SNKePXtue4169eqlKVOm6KuvvtKKFSsUGBh40zAit65duyZJSklJsdbzzTffqGHDhncUSOTHZy8qKkopKSl39J7J7XXPixIlSmjPnj0yDMMmQNm/f3+u9o+Pj1dQUJDefffdbNuWLFmipUuX6r333rvp9b5ZaJP1OXNxcbnjz1de5fX7JDffjXn9vEVFRWn48OEaPny4Dhw4oGrVqmnKlCn65JNPJN35bbg3ji9JQUFBubqut6tHkurVq6d69erplVde0aeffqrHHntM8+bNU79+/fJcX2BgoLy9vZWRkZGr+jw9PdWtWzd169ZN6enp6tSpk1555RWNHj1abm5ut7xeZrNZzZs3V/PmzfXWW2/p1Vdf1UsvvaRvv/3Wbu85ALgbuH0PAJBnI0eOlKenp/r166czZ85k237o0CFNmzZNkvTQQw9JUrandL311luSlO1Jd/lh+vTp1v82DEPTp0+Xi4uLmjdvLun6v86bTCabf/0/cuSIPv/88zs+ZkZGRrbbkYKCghQWFma9PaRWrVoKCgrSe++9Z3PLyIoVK7Rv3758uxYtWrSQq6ur/u///s9mlklcXJySkpLu6DjHjx/Xd999p65du+qRRx7J9urbt68OHjyorVu3ymw2q0OHDvrqq6+0ffv2bGNl1dS5c2ft3r0721PgbuyT9UfpjWsXZWRk6P3338917VmzCG68Funp6ZoxY4ZNvxo1aqhkyZKaOnVqtj/K/z5bp0qVKqpSpYo++OADLV68WN27d7eZtZFXV69e1erVq+Xq6moNkLp27aqMjAxNnDgxW/9r165lq/Hv8uOz17VrV23ZskWrVq3Ktu3ChQvWIC0nub3uefHQQw/p5MmTWrRokbXt0qVLuXo/XL58WUuWLFHbtm1zfA8PGjRIFy9e1JdffnnTMTw8PCRlD22CgoIUExOjWbNm6dSpU9n2O3v2bC7PMPfu5Pvkdt+NJUqUkJOTU7a1wv7+O7t06ZKuXLli0xYVFSVvb2+bWjw9PW/7Pr2V2NhY+fj46NVXX81xHais65qbehITE7N9jqtVqyZJd3wLn5OTkzp37qzFixfnGLDf+Hs/f/68zTZXV1dVqFBBhmFYz83T01NS9vfXX3/9lW3sf1o7ABQUzJQCAORZVFSUPv30U3Xr1k3ly5dXr169VKlSJaWnp2vz5s1auHCh+vTpI0mqWrWqevfurffff996O8+2bdv00UcfqUOHDtbFhvOLm5ubVq5cqd69e6tu3bpasWKFli9frn/961/W253atGmjt956S61atdKjjz6qhIQEvfvuuypdurR+/vnnOzruxYsXVaxYMT3yyCOqWrWqvLy89M033+jHH3+03urm4uKiN954Q3379lXTpk3Vo0cP6yPcIyMj9fzzz+fLNQgMDNTo0aM1fvx4tWrVSg8//LD279+vGTNmqHbt2nd0m9mnn34qwzD08MMP57j9oYcekrOzs+Lj41W3bl29+uqrWr16tZo2baqnnnpK5cuX16lTp7Rw4UJt3LhRfn5+GjFihBYtWqQuXbroiSeeUM2aNfXXX3/pyy+/1HvvvaeqVauqYsWKqlevnkaPHq2//vpLRYoU0bx5824ZhvxdgwYN5O/vr969e2vIkCEymUz6+OOPs/2BajabNXPmTLVr107VqlVT3759FRoaqt9++02//vprtmCmV69eeuGFFyQpz9d0xYoV1oW+ExIS9Omnn+rAgQMaNWqUdd22pk2basCAAXrttde0a9cuPfjgg3JxcdGBAwe0cOFCTZs2zWbB77/Lj8/eiBEj9OWXX6pt27bq06ePatasqdTUVP3yyy9atGiRjhw5Yn10/d/l9rrnRf/+/TV9+nT16tVLO3bsUGhoqD7++GNrWHQrX375pS5evHjT93C9evUUGBio+Ph4devWLcc+7u7uqlChgubPn68yZcqoSJEiqlSpkipVqqR3331XjRo1UuXKldW/f3+VKlVKZ86c0ZYtW/Tnn39q9+7dd3zeOcnr90luvht9fX3VpUsXvfPOOzKZTIqKitKyZcuyrYf1+++/q3nz5uratasqVKggZ2dnLV26VGfOnFH37t2t/WrWrKmZM2fqP//5j0qXLq2goKBss7puxcfHRzNnzlTPnj1Vo0YNde/eXYGBgTp27JiWL1+uhg0bavr06bmq56OPPtKMGTPUsWNHRUVF6eLFi5o9e7Z8fHysAe6deP311/Xtt9+qbt266t+/vypUqKC//vpLO3fu1DfffGMNlB588EGFhISoYcOGCg4O1r59+zR9+nS1adPGuhZdzZo1JUkvvfSSunfvLhcXF7Vr104TJkzQd999pzZt2qhEiRJKSEjQjBkzVKxYMTVq1OiOaweAAsG+D/sDANxLfv/9d6N///5GZGSk4erqanh7exsNGzY03nnnHZvHol+9etUYP368UbJkScPFxcWIiIgwRo8ebdPHMK4/lr5NmzbZjiPJGDhwoE1b1iPKb3wEeO/evQ1PT0/j0KFDxoMPPmh4eHgYwcHBxtixY42MjAyb/ePi4ozo6GjDYrEY5cqVM+bMmWN9BPztjn3jtqxHw6elpRkjRowwqlatanh7exuenp5G1apVjRkzZmTbb/78+Ub16tUNi8ViFClSxHjssceMP//806ZP1rn8XU413sz06dONcuXKGS4uLkZwcLDxzDPPGImJiTmOd7tHjVeuXNkoXrz4LfvExMQYQUFBxtWrVw3DMIyjR48avXr1MgIDAw2LxWKUKlXKGDhwoJGWlmbd5/z588agQYOM8PBww9XV1ShWrJjRu3dvm8erHzp0yGjRooVhsViM4OBg41//+pexZs2abI+ub9q06U0fub5p0yajXr16hru7uxEWFmaMHDnSWLVqVbYxDMMwNm7caLRs2dL6e6xSpYrxzjvvZBvz1KlThpOTk1GmTJlbXpcbzZkzx5Bk83JzczOqVatmzJw508jMzMy2z/vvv2/UrFnTcHd3N7y9vY3KlSsbI0eONE6ePGntc7P3yz/97BmGYVy8eNEY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7ty5euKJJ9S2bVubvlevXlVQUJD1WDExMRo0aJAGDRokX19fFS1aVC+//LJuXMYrMTFRvXr1kr+/vzw8PNS6dWsdOHAgT9cDAAAAAACgsMnz0/dSU1M1bNgwValSRSkpKRozZow6duyoXbt26dKlS2rbtq1atmypTz75RIcPH9Zzzz1ns//x48fVqVMnDRw4UE899ZS2b9+u4cOH5/r4O3bsUNeuXTVu3Dh169ZNmzdv1rPPPquAgAD16dNH0vXHiG7ZskX/93//p6pVq+rw4cM6d+6czTijRo3S5MmTVapUKfn7+9/0eN26ddOePXu0cuVKffPNN5IkX19flSlTRk2aNNGpU6cUGhoqSVq2bJkuXbqkbt26Wff/6KOP9OSTT2rbtm3avn27nnrqKRUvXlz9+/eXJPXp00cHDhzQl19+KR8fH7344ot66KGHtHfvXrm4uGSrJy0tTWlpadafk5OTc33tAAAAAAAACoo8h1KdO3e2+fnDDz9UYGCg9u7dq82bNyszM1NxcXFyc3NTxYoV9eeff+qZZ56x9p85c6aioqKss5vKli2rX375RW+88Uaujv/WW2+pefPmevnllyVJZcqU0d69ezVp0iT16dNHv//+uxYsWKA1a9aoRYsWkqRSpUplG2fChAlq2bLlbY/n7u4uLy8vOTs7KyQkxNreoEEDlS1bVh9//LFGjhwpSZozZ466dOkiLy8va7+IiAi9/fbbMplM1nN9++231b9/f2sYtWnTJjVo0ECSFB8fr4iICH3++efq0qVLtnpee+01jR8/PlfXCgAAAAAAoKDK8+17Bw4cUI8ePVSqVCn5+PgoMjJSknTs2DHt27dPVapUkZubm7V//fr1bfbft2+f6tata9P29z63sm/fPjVs2NCmrWHDhjpw4IAyMjK0a9cuOTk5qWnTprccp1atWrk+5s3069dPc+bMkSSdOXNGK1as0BNPPGHTp169ejKZTNaf69evb6113759cnZ2trkeAQEBKlu2rPbt25fjMUePHq2kpCTr6/jx4//4PAAAAAAAAOwtzzOl2rVrpxIlSmj27NkKCwtTZmamKlWqpPT09LtRX565u7vnqp+np+c/PlavXr00atQobdmyRZs3b1bJkiXVuHHjfzzurVgsFlkslrt6DAAAAAAAgLstTzOlzp8/r/379+vf//63mjdvrvLlyysx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EhMTJUmpqak6dOiQnnzySZua/vOf/9jU9HejR49WUlKS9XX8+PE7u8gAAAAAAAAOVCBnSuVGVhC0YcMGbdiwQa+88opCQkL0xhtv6Mcff9TVq1ets6xSUlIUGhqq9evXZxvHz8/P+t+enp422273uNRJkyZp2rRpmjp1qipXrixPT08NHTrUuki6k5OT1qxZo82bN2v16tV655139NJLL2nr1q3W2wpnz55tE75l7XczFovFOtsLAAAAAACgsCqQoVT58uV17do1bd261RosnT9/Xvv371eFChUkSSaTSY0bN9YXX3yhX3/9VY0aNZKHh4fS0tI0a9Ys1apVyxoy1ahRQ6dPn5azs7MiIyNzXUeVKlX0559/6vfff89xttSmTZvUvn17Pf7445KkzMxM/f7779Yas+ps2LChGjZsqDFjxqhEiRJaunSphg0bprCwMP3xxx967LHH7vRSAQAAAAAAFEoFMpSKjo5W+/bt1b9/f82aNUve3t4aNWqUwsPD1b59e2u/mJgYDR8+XLVq1ZKXl5ckqUmTJoqPj9eIESOs/Vq0aKH69eurQ4cOevPNN1WmTBmdPHlSy5cvV8eOHVWrVq0c62jatKmaNGmizp0766233lLp0qX122+/yWQyqVWrVoqOjtaiRYu0efNm+fv766233tKZM2esodTWrVu1du1aPfjggwoKCtLWrVt19uxZlS9fXpI0fvx4DRkyRL6+vmrVqpXS0tK0fft2JSYmatiwYXfr8gIAAABwsGX7L2rJ3iQlXs5QSX9XDahdRGWL5nxHxKjVp7UnIS1be60wd417IEjS9SeUx/+cpFUHUpR6NVPlAy16tk4Rhfu43NXzAIB/okCuKSVJc+bMUc2aNdW2bVvVr19fhmHo66+/lovL/75UmzZtqoyMDOvaUdL1oOrvbSaTSV9//bWaNGmivn37qkyZMurevbuOHj2q4ODgW9axePFi1a5dWz169FCFChU0cuRIZWRkSJL+/e9/q0aNGoqNjVVMTIxCQkLUoUMH674+Pj767rvv9NBDD6lMmTL697//rSlTpqh169aSpH79+umDDz7QnDlzVLlyZTVt2lRz585VyZIl//kFBAAAAFAgfXckVR/s+Es9qvhp2kOhKunvqjHrEnThSkaO/V9qGqiPOxezvt5tGyqzSWpUwsPaZ/HeZH31W7IG1i2iKa1C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yTczi4qKsh49euS4b1pamkmytWvX5rg+r6GUt7e38xfl3Bw/ftwk2Z49e8zM7F//+pcFBgY6w4VrLVq0yEqVKmW//vqrmZnt2LHDHA6HHThwINcxZsyYYcWKFbPAwEBr1aqVjR8/3tLT053rbzZm8+bN7ZlnnnFZ9sQTT9gjjzzifC/Jhg4d6rJN69atXYI+M7N3333XgoODcxzn6NGjJsn+8Y9/5Lg+OTnZJNnWrVvNzKxTp07Wp08fl/MICQlxBnx5GT+nunMSFhZmMTExLsuefPJJa9u2rcuyESNGWK1atVz2e/jhh122iY2Ntfbt25tZ3kKp6Oho++tf/5pjXTntb/ZbKBUWFuYSRD7xxBMWGxtrZmYHDx40T09P++6771z2a926tf397383M7O6devmGiDeqKYbubZ3qlat6gyZroiPj7eoqCgzMxs8eLD9+c9/dgmUrybJli5d6rIsMDDQGWoBAFAUcPseAAB3kbS0NG3btk3du3eXJHl5eSk2NtZ5+50kpaSkqHXr1jnun5KSIk9PTz344IO/q46wsDCVLVvWZdm+ffvUvXt3ValSRUFBQc5bjq5M4p2SkqIGDRqodOnSOR4zJiZGnp6eWrp0qaTfbiVs1aqV8zg5GThwoI4ePar58+crKipKixcvVu3atbV27do8jZmamqoWLVq4LGvRooVSU1NdljVu3Njl/e7duzV+/HgVL17c+XrmmWd05MgR/fLLL7nWa2a5rrtajx49lJSUpAsXLkiS5s+fr27dusnDwyNf419bd26u3S63z2Xfvn3Kzs52LouKinLZJioq6rrP7kaeffZZLVy4UJGRkfrb3/6mzz77LE/71a5dW56ens73wcHBOnbsmCRpz549ys7OVvXq1V0+n40bNzpvJx0yZIgmTJigFi1aKC4uTl988cXvrulq586dU3p6uvr27etSw4QJE5w1PP3000pJSVGNGjU0ZMgQrVmz5qbHHT58uPr166c2bdpo8uTJ190eCwCAuxFKAQBwF0lMTNSlS5cUEhIiLy8veXl5afbs2UpKStJPP/0kSfL39891/xutkyQPD4/rgpOr5+q5IiAg4Lpl0dHROnnypBISErR161bnvE1ZWVl5GtvHx0e9evXS3LlzlZWVpQULFrjMoZSbwMBARUdHa+LEidq9e7datmypCRMm5GnMvLr2fM+ePatx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", "text/plain": [ "
" ] @@ -964,29 +1975,29 @@ " 0\n", " robustness\n", " uppercase\n", - " 156\n", - " 42\n", - " 21%\n", + " 13\n", + " 37\n", + " 74%\n", " 70%\n", - " False\n", + " True\n", " \n", " \n", " 1\n", " robustness\n", " lowercase\n", - " 182\n", - " 41\n", - " 18%\n", + " 10\n", + " 40\n", + " 80%\n", " 70%\n", - " False\n", + " True\n", " \n", " \n", " 2\n", " robustness\n", " add_slangs\n", - " 6\n", - " 30\n", - " 83%\n", + " 9\n", + " 32\n", + " 78%\n", " 70%\n", " True\n", " \n", @@ -994,21 +2005,21 @@ " 3\n", " robustness\n", " add_ocr_typo\n", - " 33\n", - " 58\n", - " 64%\n", + " 14\n", + " 36\n", + " 72%\n", " 70%\n", - " False\n", + " True\n", " \n", " \n", " 4\n", " robustness\n", " titlecase\n", - " 66\n", - " 84\n", - " 56%\n", + " 10\n", + " 40\n", + " 80%\n", " 70%\n", - " False\n", + " True\n", " \n", " \n", "\n", @@ -1016,18 +2027,18 @@ ], "text/plain": [ " category test_type fail_count pass_count pass_rate \\\n", - "0 robustness uppercase 156 42 21% \n", - "1 robustness lowercase 182 41 18% \n", - "2 robustness add_slangs 6 30 83% \n", - "3 robustness add_ocr_typo 33 58 64% \n", - "4 robustness titlecase 66 84 56% \n", + "0 robustness uppercase 13 37 74% \n", + "1 robustness lowercase 10 40 80% \n", + "2 robustness add_slangs 9 32 78% \n", + "3 robustness add_ocr_typo 14 36 72% \n", + "4 robustness titlecase 10 40 80% \n", "\n", - " minimum_pass_rate pass \n", - "0 70% False \n", - "1 70% False \n", - "2 70% True \n", - "3 70% False \n", - "4 70% False " + " minimum_pass_rate pass \n", + "0 70% True \n", + "1 70% True \n", + "2 70% True \n", + "3 70% True \n", + "4 70% True " ] }, "execution_count": 9, From 2620c4d53ea690d9b7f401963fee4b29a17913d6 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Tue, 17 Dec 2024 21:42:53 +0530 Subject: [PATCH 02/11] feat: add langchain-openai to databricks dependencies and create llms group --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a84828c2c..31fec72d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -99,7 +99,8 @@ metaflow = ["metaflow"] mlflow = ["mlflow"] datasets = ["datasets"] matplotlib = ["matplotlib"] -databricks = ["langchain", "langchain-databricks", "langchain-community"] +databricks = ["langchain", "langchain-databricks", "langchain-community", "langchain-openai"] +llms = ["langchain", "langchain-community", "langchain-openai", "langchain-databricks"] [tool.poetry.group.dev.dependencies] ipdb = "^0.13.13" From f5619b9f26581bda72e7af7281f00d47c5488191 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Wed, 18 Dec 2024 17:11:55 +0530 Subject: [PATCH 03/11] feat: updated the poetry.lock file for add langchain-openai to databricks and llms dependencies --- poetry.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5476007df..b1a82f966 100644 --- a/poetry.lock +++ b/poetry.lock @@ -6403,11 +6403,12 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [extras] ai21 = ["ai21", "langchain", "langchain-community"] cohere = ["cohere", "langchain", "langchain-community"] -databricks = ["langchain", "langchain-community", "langchain-databricks"] +databricks = ["langchain", "langchain-community", "langchain-databricks", "langchain-openai"] datasets = ["datasets"] evaluate = ["evaluate", "rouge-score", "seqeval"] huggingface-hub = ["huggingface_hub", "langchain"] johnsnowlabs = ["johnsnowlabs"] +llms = ["langchain", "langchain-community", "langchain-databricks", "langchain-openai"] matplotlib = ["matplotlib"] metaflow = ["metaflow"] mlflow = ["mlflow"] @@ -6418,4 +6419,4 @@ transformers = ["accelerate", "datasets", "torch", "transformers"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "6f47f0b23683e7502e51311dbcaf8f885fdac23871486ea6be621f26a4ba7038" +content-hash = "e10302866d8f3668f995e865bd97cfc951f0daaad22f63742c676d19c1e5e373" From a41f5845ffa7a4abc5ce9714a2f3cddce23d0b0c Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Wed, 18 Dec 2024 21:59:54 +0530 Subject: [PATCH 04/11] feat: handle dictionary input for prompt formatting in PretrainedModelForQA --- langtest/modelhandler/transformers_modelhandler.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/langtest/modelhandler/transformers_modelhandler.py b/langtest/modelhandler/transformers_modelhandler.py index e78bd9810..22addc81b 100644 --- a/langtest/modelhandler/transformers_modelhandler.py +++ b/langtest/modelhandler/transformers_modelhandler.py @@ -810,6 +810,9 @@ def predict(self, text: Union[str, dict], prompt: dict, **kwargs) -> str: text = prompt_template.format(**text) messages = [*examples, {"role": "user", "content": text}] else: + if isinstance(text, dict): + prompt_template = SimplePromptTemplate(**prompt) + text = prompt_template.format(**text) messages = [{"role": "user", "content": text}] output = self.model._generate([messages]) return output[0].strip() From 596d9875e74ce49d13c551966a923ae8978d64ab Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Wed, 18 Dec 2024 22:03:17 +0530 Subject: [PATCH 05/11] feat: update prompt handling to support 'instruct' and 'completion' types in PromptConfig --- langtest/prompts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/langtest/prompts.py b/langtest/prompts.py index 9a9e3c9c9..ae2bdb653 100644 --- a/langtest/prompts.py +++ b/langtest/prompts.py @@ -131,7 +131,7 @@ def get_input_variables(self): def prompt_style(self): """Generate a prompt based on the prompt type.""" - if self.prompt_type == "chat": + if self.prompt_type in ["chat", "instruct"]: from langchain.prompts import ( ChatPromptTemplate, FewShotChatMessagePromptTemplate, @@ -154,7 +154,7 @@ def prompt_style(self): ) return final_prompt - elif self.prompt_type == "instruct": + elif self.prompt_type == "completion": from langchain.prompts import FewShotPromptTemplate, PromptTemplate template = "".join(v for _, v in self.get_template) From 0dc2a6d6895f4ceaf24906743921c39abf2c360f Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Fri, 20 Dec 2024 20:43:51 +0530 Subject: [PATCH 06/11] update notebook with new features and improvements --- .../LangTest_With_Databricks.ipynb | 1637 +++++++++++++++++ .../misc/Degradation_Analysis_Test.ipynb | 914 --------- 2 files changed, 1637 insertions(+), 914 deletions(-) create mode 100644 demo/tutorials/llm_notebooks/LangTest_With_Databricks.ipynb diff --git a/demo/tutorials/llm_notebooks/LangTest_With_Databricks.ipynb b/demo/tutorials/llm_notebooks/LangTest_With_Databricks.ipynb new file mode 100644 index 000000000..0e625bb97 --- /dev/null +++ b/demo/tutorials/llm_notebooks/LangTest_With_Databricks.ipynb @@ -0,0 +1,1637 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "b8bb28d1-3004-4d37-b95b-a6fb5450f5d2", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUgAAABcCAYAAAAMJCwKAAAgAElEQVR4nOy9f5gcZ3Xn+znnra5pjcfKZCyNfqDIQgghZMdxZMfGxpbbwhjM2g4h2Ak/Nol3Aw5xEsLu5eHh8vCofNl9uFluLhiwhUi4zib3ZomcZBMgARsjt4RxbGIritcSsiyE0GpleSQLMYxHPd1V59w/qnq6Z6ZnNJJG/Ej6+zw9PW911fueeqvq1Pn9CucASZJokkzZaudirC666KKLcwWZ+y4TveyWJeW4/lKZYYD5mI2m8+YdH61Wk3Tux+uiiy66ODeYYwaZaKUysNSI7xSVtfj4MCPi9t8WLhzY+sADt9fndswuuuiii3ODaO66ShQSM7lvvYj8B6A8/pMIiM4/evToTuDI3I3ZRRdddHHuMIcMMocgC9ysFwx3DBzVyFzCQBpF8VyP10UXXXRxrjDnDBJygdFyl4wiTS3egJPnYrguuuiii3MCPRedem57NHBk3A6pwLxzMVwXXXTRxTnBnEmQSZJ/xP2gaDjhrv00vTSigB12tVqSJNrcf/p+uiFBXXTRxY8ec+7Fvuqq+f1RT/ktgl40PogwbKn/XQgv7KhUsJwBJjNIr10G2UUXXfzocU7iICsV9AfnL4k5nG85//zYKpXv1pMksStv+uT8eKy0RtyWqU9U8U1cU5e9Mb17qtU7anNPWxdddNHF7HEOGOTUTJpKBa1UsC271kYLjh79zyL6bnefP3F4b5JzxLEPvrhw4Z/v7sZMdtFFFz9CnBMGORW5On1V5YLVsUT/CNJrlnXcUzXg+JfU7c5K5ehQ1x7ZRRdd/KhwTsJ8JqMpTW7dzlJc+swykBZ3HpcdAfcMkVAGLVerKHl8UBdddNHFDx3nJMxn2sHMFYrEmrbtPyQxtosuuujitPBDlSDXbwgqDo4grUTtCRJkF1100cWPC+aIQc4uZMdMLAhtzDH/lo7KdhdddNHFjxZzwCATXbuWCNZO8/sWBgdfUvhuCh75hN8mM8P2djfKp4suuvjR4iwYZKLXvq7/YrGeD7jbIBxF3NskyZZ/JTc9LkyBBdP5XNxBwETV8OwwcKJSwarVM6ewiy666OJscEb6bJIkWq0uXOkS/ptqaZ1ZSqsoxQxwU/f28J7Jxzil6LwnG/aDD2zf+rtbz4S2Lrrooou5whlLkCa+LmjP8ix9KXUkEloWxBm+TaTwnDsmok+L6iHcIxcxaBzP0h98bnvlxe1szetLnu0JdtFFF12cKc6YQbprjLgiolKECzXlwVN9Fz2kmdumyPyhNLhGmRhEI9XqnceongFzLIpg0A0s76KLLuYILQaZJAobIZFZMphsgnQ4W7g7ICaAqp2oXHfs4K5dREePthsnZ2BySdPOWS2+K5bTvLG5rcsgu+iiizlBziCTRyIWDpY5ursO5PnPic8QunM3ofgvZ46T2eSp2tB04iRJYkmSpDOmFCau44x77e6II3GZ0s+U0bEyvq+PTc/2Ic8tw5fGJL5l9ky+iy666GJ65AxyydJVuN7OYh/lM88OIQwjz42QygjKMJ6OYlajhzqhd5Q7qFPJO/Ai7Lv5fx7VOHO7CfdZZPJsPtwLe9fxmb2D4H286IuJWYTqAvS8BbgsRmwAGCTL9gFb5mhuuuiii3/lyBlkqsuZN+8OsvogIaqhOgqhRikbJUtHca2TpaM0pE5afzBJNn5m/bb7VGkP8p74/3TtcSapBhODIjvDvj9I+fy7kbCGtF7GrBfPYtwUc8vXd3AIEdC5AEYXXXTRxZkgZ5Alt9yg6BH1sX5gfsHbNOdnriBQ7jVOvpRWqH72rHVYY3bGSytFNBqLkXSQrFFInN70hBffbmiYZYdddNFFF7NDIUECJcgZjytNxtiEA7iRpYqQTu2mubPMsi2AIGKz5LMCmOKmHeMtu3yxiy66OAeI2v6eIthbirVlRGGyq3imlMHJ7bbM60ICzMuatSrsTlmXRrFZqeNddNFFF3OIXEXtIBNOz5CauvfZQ0TqANXqRH47qyK5XYbZRRddnGNMlCDbMUWY7MyR2r3Ys4XjiKC4r61UPnMQsrJpi0lm+olDpfTE4Wo16cS6p6Gviy666GJuMZE1+mTD4/RcyFWsGcRzOpCWAKogHzGyjwATdPbg8QF06d2Vyv2fn75WRbc0WhdddHFuMclJAy3GM7lG4xSHSwp5QLa7W3uwT4t1easHkem1cqHVrWMi0XIXeY9Qa/LHtmOno+cnH801wydt6wa9d9HFjwgdVOxTOVya8N2W1YdE4wXi2YxH5BFERidm5u75/sVPDmAZIEsta/QC9YnHdex9GhrPHJ2YVbH9HDCsRG+6aaCvWg29k3+pVDanlcrzx//lMMr2eW2d08SVMP+lnOuPEdoz485Vptnk7LvTHSdxhbvJ04anw91nXm+hSV87XaeYl4kqdrsXe4oGOy7iWZWKVbJtu2HwfZlnG8VZPC1RCuLgbgMg/ePVfMaHLAZpfakI5gBxTOvHSUzwHGrY0zHHczXWU08tKZ8YyX4f918uwt5VwAwipfF0tbrkvUmS/EQzyZwBJkYClSo6NFRELly0FtjNll1Q1P+05vz/JJ9vF2eARGxqrYV2VIqaC8nE9ONT9lvUmWj2u2VXG9/bDbuHLO+bKf1Ob4OcUqpxIiOrVLAk+e2HIdl62WVLykuXTkfd8wCcGB78UAjRfzCrRyAzVBGapTR4jpjjbbdtiavVY+sybIUIRhaADIJHiB4DHprrMYeGxqK4HF6uIbrYLVMpXgiRBixr1EulenzKTn5skWilglarS/qvrty7LFTlNSby6gWLfJkg/Rw7rrB4FOG4kR1av97/6aGq7CXWw5VKcnxGR10Xs8Omb61A9l0OGXhQPv2tnfzOq/fOWf/JIxFLll2CPbsq3yCK6yj3f2c7d7z8xCmP37Ir5lhpGZEuxp5dCroAedl8JJQR78ElxTmJ7x0G389nnjuI7B0i8eP5+DMwysSVnzown/i5FaitI7rwSk74UpA+xFPcj7P0woPw3C42P/c0YfcBEj/R7HN6RuU+KS6yybgKKRVyzpwk9tRTjD711LQUKsC111nqba6Yyd7vZnvWPvEp9J09KpUkOjR8qC/WeXeKh7fnGToOLghR5GZPcg4Y5Lx5wTL31C2z3BSRM0jLR09H53rAHwKaUmC1urA3w25Q4ZYS4Ro3WyUiKqJ4YcMW0DyyIeBqtZLqARq+AwY/BTz+Iz2Rn2Q0JSd/7mpCuAejTKlkYB8C5oZBJolywZJBotIHSeVW8BSIEB2hkd4BfKHJJzof78rRby9nXvmjZI31CPNxi0GLpBAthCEDF0PCMCE6hNsOFu39Mg39exIfmZZJLn52HRq/DS29kbSxGhFFFEQUHBzDHUxSotJBTP+SZbs/1mSSE+MgRVpSZJP5TG5PqEp2ahWoZVcquivY38QCFq32KVleJ/rm0ATZM3aeQkCQCCd2J3aIEVVkJsn37CCtOyEPgZrgiPrJxBe/uKScuX44aM/HwX8NfBU47hlmDSyr5x+r45ZinoEQ46zGeKuJLYcfrsnjXxaaaqUoqhEiMVEMOoPD9ExQ0lVIuJjcfFYGIkLUj+hNwKn5hKS9qCwDGaD5rIWIfBGWDDzL81OiHiWEftzW4PZOeno/TmQbedm+pR2rj21+9hqi8iZEfhv31WgUIZr32RiDtFgJQRVEIpxVGOsIvdOo2DBVahxvnzkXShL42rai+0nGw9MNE+pM31w7aQzM8WbON27F2+aHgJ9873zTrnre+endIfT8dpaNxTiKoHnWapvtuWi3NRRxQ+WAethd9Ne1RZ4NJrAOn7uKqYkra3dHHLN1pPXlxeJTxRgZmN/A//vcfN75yuHpO7kb5J2FFJfm6cRwgKzxNwj/E6eGiaLWh6SvxFmPllbgBo2xBcQ9v0Wj3s/CAx8i8aFxO+aSfZcS9XycrL4OMyOUFLLDGF/CfRduI0BMlr4c90twW8d5fQsYPvY1vvuq4dxZNNmL3ZTOxnmYTGqfBQwIs+lqMmMYyw+cvEs7fXMNV/WiMlBLqJbTZ+b/SrFlF9HCkfR3Qii/O01PxiIStU+d5Kq1tiWdGoKKY/nLCEXYWS8xVKkkUdcOORdwxl/ycyk/vhAW0Ft+HZmVUVXS9CuUoktxHyREqxitryfxvwdmthU26z3kmtROTD7KC684NuWY+7/TT73+a2j0XsxXkDViSvHtZNn/4MIDnyHxlEXfHsDlA5hdipmhoY5nW8jC3bzn5QemjJ24sujAcn7w4luw7AtTnTQT4iCZJtJnbpjDqXtpqdo5q+yZ0OrYyU+usNUBk+M8f7JQLOi2lhDdlqVjfcJEdU5EUxE9CLbHPT3miKlIHxIGUF2M23KgTJb+c2znDXdXtpwrTHSyzgkSMe57bjlZdmmxxRC/n6h0F5ktQAOkfhNUv0Jy/Wm85DwizSKuQ0naH+674bsrhlny/B+TvZQSlT5CI+1HrZcQ3sBIbQtUh5CfWUccX06jDhqBsJVG9hGGXnFw2kLgL6w4SCL/9+TNp1Gs4sxQVAxXhe+rBMuQIrB8qoMGwAUTFBEZcer5pJ6qNNo5oHvSALPeczycZdK24vuslZvJ/Z+q79kEn7diECfHJZ4+vdUqmrpfEcxX57p06zeRAOJfERu7B0r76uXGcM+YGMRlPOuzLBuUwKVo6UqX8Pj1679bb94/pzqHs6F5ch/5N0yOx5yu/5lspDPRM/m4TmOeaozZn2+bdjgXKnYzHCYK1yC6ODdLZUOkPEpmr8eya8hSRaPXMPiy5SR+4LTjIrdhU45JNirPL6mx8MBfo+k7CKXX5GdkawjxAi5ccZyxxsWk9aW4QVwe4eTI3zH0qoP58dPQMA3j7BzmM9lDfJYe4yRJ7NprP/Gwp/V3hKh86cyKtqu51zJPv9DosSPAYO5JnkRnRw/73KEps+aUztx/O5NKinbTNzXl+5QPcbOo8ERUq2iSJIz3P8n5Nf3DO3176kOXKLPstxOSJNEvPzHQW66Fi9ysb9zmSG6gcLNhj/QDgeN7Ad5wVf6oVquMAMe2b0/23XbbliePHv3eFqE80hw3/y5oSzoO3U7EeJhFqyrU7BaBa55ra15a85Mk01/D6embpRNz/LgZmanl3uDmhsljnQpzrJWMMxq/CRUgMpxvsqh+jO/V/wcS1fAsJu5dRnbychLZf0rypqDDGlOJ5PNwdOMQS57bQ6nnNaR1cPqwrJ8fSMw8/Rncy+ApwgjoPujAbDuez0RMVLHbvdhNJjQeG3l2TOjrX//9pyuVe/+NWe0t7lZkjDTvvxZt4sFcbU9w2f7El39vhJvfNJinNLbR1ZG+uUXrwW6Xb6dWLE+SRLfsWhsNHj0yuH7Dp1bLtvCaRwivuA4WQBY/4jricOhasn/m2vt2fPnL6QFg+HSlnaEh9KuP9i+9Juu5YSty5XUbfCnmPLJN9nuWfSPL0scrleRwXhkp77dS2bQiwy/11FJVVVOxrdsye+3rP7Xz9a998UheZm7higy9/LrruQp0BdssAj3yCPbPlcq926vV3j1JktRnS2vISmURHURzb7XguIuJBpzs4Ne/dmRPMXPtqvN43xddtDtNkuRYs33ZZZt7zz+/foUZ860qputVATz69KEXLxh8ZvDobhsbmz9fe3rWbt2u16x3+XnB5rNBRrZW/cA1lU8+GNGzE5ITM9kyK5UkeuihRQPr19+76pFtevl118urcJaSe2VrW6scuZb0Wat86tFqNT5QqeT9VSr3l2H0cjMbaNJnKqbmCvcc2779vY91GqvOwou3bpPl11TMqIKuV0313oOPVe/aOXX/+8uZ1i6Rbb6Y9cWEVc2iikZZ+OTer3/t93af+so0X/fMnQ3yvj2X4H4NaUMRMdz/jtsvqrP52R2E6ABuq0nTAcRfxyef+wrHV00fjnMmj7Fbffx/kTpRGOWkKm5Riy+IgkzJUJstpqYaTpYUJ4f7nAWq1buOAPedar9WDF2HHzvSdy6NkNImQU50FiVJol/9av+yhfHRm116flHcLgcGkOZNEEAEcVdcUonCgbLKX1+74dN/Ua0e250kSZ0OaB9RALFQvmBwwVvUone523rRkN/iWkjiwm9GpWg7LL4HfusrkEuYW7dlG5Tojzx4DUHVzUTiUW003l+tLvxLM26UEL1PsHUQehGseY754pPRPhi9p1rt2wIc60DqjBhfkUhcPU9HXXbttYMXv+51Q8/kNHZUVydsmzcvW+we/YEIl6q4oYCLikd/0//9F38XLlhe6gn/HuRmcVla1CzNRxZXNfl3HvE3kl2wqVJJdnZikle94Y8HsrGxDaUe/SWMG9xYIKoTGEkeiqcaiR5w2Oos+KvLLttchXqvubwHid6q5PSpuEnQ2C3aWakkV7WPmSSJfvUbFwyW0ujDbtnNiqSIqASNStjDwE3ttFUqj0Rp2LU8ePRRd7+6SZO6mmsoq/EeYBYMsg1z5cVWuYFSOSIdM5BDYE8CUPf9SGMvImuwFOLyJdjoCrj7mbkZeCMs291PI1pNVoTqiB7ETx6j96U6dv4xJKQgkGXzwS7jwgMPkST1001TnL4e5GScczvfRJyWLekcO2m8k/yfJFqtXrA6RPGnIPrP4De4eb+54Vkzxq+BZ3XcU8AjsJUov68S3Zux4M1ffGpJOZfiOp9MMeWxpPZOJXwUZL27q2f1vN+sgWcNwMuOvxENH69U7nvNuBqdaU01KEgZJ0aIVUOs7ksz+A2Nev4Q/Grce90LWpv9muFuKyF8xCj/1k03fXL+bOIR43qtbm7H3a3wSkPLbCD9ov7Rr1YHr9iya+2kJYc7I4rE0JCiGmHEOLEEjZQwX+q22qV0r4j+O5ylbpm25iWPrQTvF5O3u0QfzbKB1ZP7r1TuXRzX7UMq0cfBf9VhgWOYNcav43if7ubmy8F/TSW+5/zz7feGFv70sKg+JSKG5/RhRSygyKpG44LBibdNYpr5MlFdKSqtawORO5dWKpsXTKRvm6mzGMIyEYnHx4AyeE1cpkioM6KIvT4rJIly/3f6gdcXy6AoIjtI64dJXHnx+SHcniCKR4EU95WIrJ05x7oN0wljSaLjtsK0VKHUs5YsNZAU9ypmx3j+sjruu4ii44hAWu8lKr2Z2tjVrL0tym2ns4+rzXecHObzI8aPX9zb1HmpVC9YnRE2icrNbul890wR0yYrLbJFtJ25upu6W+yZXy4e/vC8kcbNUyWacS++uhuOrBb0P7r7cstSLVxammcESB5bKK7uZu7Zmgzf+NBDixbkc+i1PI7eQUxx1KwRu8htKuH95o1lZinuZjjmbX2Cq3umjs8XLb3rByd1PcwmaPv7I0L2zyI6MjHeFXAzRG6MNHzugqGhjZXKp9aQd2rkJocpfTcaYybjBUscxNUtU7N0tbr/IcgVbhYVvNha8yKKgONq1oiRaL2WSu+f2HuirtHHReTd7tni/HwzBVcBXFAR1bbzUMSa46+QEH9w4dDQ73iWPSOqRxAMseJ6ZIjo/FJJV7aGK87RwnJ3W+qeX5e2/QfNGmsLm2lrPlJdhtsCt2J/DNEA5nvghT0zX49JmCsnTb1+MaXyGiw1oEaWfoOFHM+LSVyfYjwOHMctIksHiEpXMbCvb+blpAtMJ4s1+cLi564h6vkAWTqAqqL6NHbyAY4+MAoYFu3A/BmcCDMQ1hJKH+NY/MbChpnHSs6Clok7zCgl/ngwz444x8JtK+snI0kSrVQ2rXDCx1R0vecXILeL5a/nVELphIjsNfc9IcRDImEiE/RMRWWxEG2+9nX3XXLyZKaTw2HGz0noBe/L/1VUo1SQnKG17SqCmmdpFHpeE+L0LUmSqKnXJ3QoqHtWBrnULFuGmZL3aaKKeMs+JCKIiLplkWe2LEjpjmp14eBkp087kiSxSgUT9+2CPi46yd6UF0lWz7I1IcT/u0v0j9dtuO/Prq3c9+bXfnXJsi1b1kaTmWSppOZNHWe80ImD+EoRvcIsNQRVVUSDFT/bhIQrcfWsHrn7r61ff+/VkOhll23uXV8Z/AOV8KtZNtYLFo2fN2IaolGVsB9nt4TosGioC0W/goJFWVbrDaXeD6Csc2cvIupe3C3uphppBs0QGBLy1Etcf8GzbAGeL4ZXVLMy1aAeqOQ25MSqVbRaXdiL+s+6Zf15VpxAca+4yN9Xq0n6Q800ShKF65RM14MMgqRE8X5UHmf32nSciVn9ScZGnyaKQQKIVuixaSs2FCgW4ZMyJZayaPEyNn1rBfftXcnmZ9fw2b03sOQ7mwjRf8fSy9EIgj6O1d/LnWt35IxPjLtW7SPLPkb5vL2okku5cimBv+Wz+/8rn917Awt3D0JVT8UoO8dBdsT0XChx1yLwfE6QnKtyTKeBiT5yz62CrrlDRl+8WQjXFA/nuKoooiaqO71R36QavknGaCb1derhXaJhvVsWk8cwqVlmqqV+Se0DIZTeZ3gqjk728I8nZmrY75buMOe4qi4vJKeBPPOkuZdHZo35SrjuoccW/XUkmRVse1IuRe52EpW6oI+aNQ4gUtYQXeKWXTJZzc+7tyvAlkFy5NRe4Rf3Zb7gc0HjNe4sds90vB6ooI5hWcMQ6ROJ3i6kb45i/+bCRcf/qlod+AJwqOmpbzTESrGk3kZ38yxwN5HIVGSve7bTzU5I0NWIrMOy/lawQ26nVonVqN8CyWPnnffpimjp7WluP8sZjjuCGnAo8+xz5tnfSxSOq9sKcf6tiLzV3fpaHmGP0sbYAkF/CU+HNET1jCxu7w+4qDlfCfDahs0v9ZTWuhvuaZt06nlMs8vP33LL5t4vfvH5WrWKXX2j9pbSsAo3xX2cRvdsGPWvz3wXT4OzYqcb4WX7FuPhKtJ6nKuxjd00xiZ6qe+6aIRNzz6I6M1kYyC6CgmXksie6SvxCGCgcjla2gyhmTgQgffhtpigfWQpwGG88RUyPs6RVROl6MSVIzzEon0fpjzvD2iMrSgkXSPSd5Lpmyj1PsqSpV9G9lQ5fGR/EfIwTbmzM1GxN26EJOETu04ul2dH3+S/IhHuhoQzn37PDAKf+NWxR39/Tc/TZ9zPHKAV4tPGpAQbPHpk0CX+JfD5tN9qriYiJ9wb/3HDhmOPNjfv2rX20JEXXzyo5veAXOHuxUPratYwDfE1sTQuMbfc09tWetidIutEdpqnH80auj2ObbQRxgaiLHqnavR+t6y/RbXg5mgUrQhZulhdzCfFIgKIYwh1N/usRX5P5DIE9ahhsiYS+SOQi/OiGQV7dVPQxYJeDDyZJFPDh5oowmSoVuVLnjUGRMNHRaI+LyQ9mhlJuRqf21CFPjeviMrlaPn69Rs+/alq9dhjlQo0GuDixaJtE9ITTTQC829CfaNQ3yk6r4bbYkPuFA3vxrK+1jUS3DMQW1epbF7gkv0i7oMTcyDERMOwe/qpejn77BNfPj5S/HCgUhnYax56VUu3uzVyVb4ZDKa6yiwbVbeaIHFz3twzcF9dqfzU/GolGSZJrFTZNGDua5quxXH2KCi5mr36e99rLAP2QWKa3dcHvpKiDB5Cs97CHjLfe0axn2cjfiRibPrWKuKe1aR1I4pr1Eef4OjQMZKLWiXDAHTvw2SNEZBeNJSx7A3A508dD6n9aLSu+D9/EIpsXxr1lHweTiD+jwhD42M2+22mG76w6i9Z8u06qncRxVcDZRpjIKEfsVuReAORfpNFS/8W+/W/hOTI5MIas3fStIjPaSharqzE5f0CH0T0g4h/UNo+p9NG9QOi9gF3W3c6FJ17FGxSvJYSLnbzy3MnRpukpaqI/7Xasceq1evG4yIvumh3uviCC3YiPCAhGqG4PXMV1k1hIHO7HogmhDMB4KYhOu6SbQr0fimOXzherRwd/cbDJw6JN+7DssdEI9zb46QwdwZClg20r/Mz3qNDblPXrZbJPVE2dLBaPToK3x95fWXom5h/yt1TL9TUNptqZMgrZjNbuap9dHRkJPoTJ/tdYK+GWIubfeI5NhklmbpZn3t2q0rPPSkL3ghAb/uuzZNonoupB7sbjldh5ESlcnQUjh5Q5L+CPENbFXvH86ElLDUdW6caX+JmOm4eaaq41tiRxvqnN13ZZI5JEat5/DCBexxLc2bbJMrVzfpBBtzTWq5mA1DYFcNSiBZX8pU71Sxbi2XL3QxcwN3cyRMn3Ey1NKAlXdOkO8p8qbstd2tZs91NPfUdUDsx1ck3C5ypCJO4cv93yki4nLS+vAinOU4WHodKEaeZaDOPmedX78PZQVTKGZzZhsK5MzM8HSUdO0ha309aP0BaP0jWOIGIUe6NCAFCWM28+R/B5HMsfnbdxFqStOIan/+fX6KR3oll7ydLdxL1KFFJMQNPe0nTDcTzPkKJTWzad3F+bMtkMdFJMytPdfHMFXMgSorIqED+cUZo+0xoU7RpfSb9PuowKh3X3v7hYrKKXbzv64peJyrz80IWkjNJF3PLhh17II+N22btQc4PPLA7bbhvxX1IhOYDhLtoljV6Bb8cvJ/2cnCOiahmWX3Ig26tVr9br1aTwsaTWLX6vhMmfFk1dApk70uRPjWxKdIjmCg1cftiFA0drFQo+kvSJEksy6wqovtVWyFN7m6ImogOMkskSWK33PJ8bfsjd/1pGuQNZul/EtHdGnpG8WAgaev9InnxCnE1y2K37OJI40/Bomva+2wG0DuF9CiyY/vWux6qVpO0SX+lgp1/vu53T3eIaJ2mKNw80r2XNLrW8pTGCVCNMOVvH3voPUNF8HdxbP7/9q13PYbzpIQSTAjeFVWVsjsHRQPgzegzk1CanyKrxvcN4ToJIXYc1Qjwb6roweZS9OY+X+DSSmWccV+C+4LcOQOCpqLhmEn29Wrl+8OTVwSdHs2XPGcnQY6MDRDF16MaUeqBsZM7iE7sbDk/ig9AIinIA2SZkaVQ6lnOWHrD9J27FXRuh3Ataf3nSMd+lpPRzxHkZ2nUr4lUAr8AACAASURBVOXkS/8HIjuAlNEf9FMq3Uyp9//js/tvnVJkNxEjuT5l6JUHOLzyM8ThtaT1X6Y+9nlK8UE0GGZG/eR8gt5KpA+y6G2Xw8ZxJjnNu8QnqduT2y2IuYGnhtfBUnJ5tPPH2769rQ0pWNGWVPxUl3ASPefAf9SxSyNCfDWiJmBN+5yoIqqHTfwAdPbC+1jPQbf0cBFnaOMrO4orooOO9I+rn+MQBEZcs1pnlVYONetHTiyI45GgEaRtFq6m1wIDHcnwY3n17ok9RlGoC+SFSGWCGwiE0yrc25yHbzx858Ht1aGN4v4rno19VFQeEo0Oi2hK4RgaL3snglmmDstd+DCjcVSYGZjw2hJBjCPFSBPu48sue76myAtISPPzLc5B8nMQZRVu88enq/g2S8F9GtNOPoaITPrdEcFAyiqyF3dEirAmwRR6BVlRrWJr1xLltlyMgkE6uh2V/VLEznrWKLv5RbCkH8Al/KxoZDhWOHNURA+QsTe/dKeTauhn96wkYvREK/BsXe5gQlGG8f71fGbPGyd8Fu99I5959k14I8ZtBFFDxBC/iS27TnEfSUqqdY6uHeWui0Z438tP8K5XHuLoXzzO0OGP4GPvIEv/BNE6acOwdDUiG1my7JKOITxNafKOl9c48ud/g/a9i3r9DtLGnxLFJ9AI6jXQsJhS+WMs3bOqGZI0UcX2JuMZt8xPbY+jzSvj1BCpC1ITpCZyZh+EGlBDfHoJshN959SLPSFPPHZncOJdVgwucjzKQsfAb0isp+fQMHBMVWkvC+wO4tILEkNhMyzGbf2djjKvNfdoUz+104RMYbyGTX64kiTRRqTmkp9H03c/V2+gavWF3SLH/ou4v8fTsd8F+WNURmj6porxRFDPUhC9JoR0DWitKfw0YwUACFNfpM30wsyzurTJSs1XiLur4QvcPPY2ppFL9lkaEXUMiG97kRwZZw5FzwV6Ef8ndxsZZ+aOmmW94K+47JYl5YGBwWU4a1pFkQ1RnkD0ADC+sJ1GpeVZyJYmSaK4r83PurjOKlia7g2hdPA0pr5F55nGQTbVV/cKyCCWKY0xQ/RWouiPCD2fm/iJ/yj/lN6PWx9uSqMGGl/B96KVM4fYOJTHtPOyC9uMw2v2kcUfAdtCFEd5LCSXIvqOZsjYVPrb7J53Lh3lhVXbKcfvx+obCeEQGnImKXI5pu/gwgMxietEFRumMsJTqN2ipDmDo+ZCzdXqLlZ3L75ltm3qAjXwus2kBHSi7xxGII0/jrnEGkkeqNuyXTVvXJd6o6EdCysAVKuYIB0YqBgaVCZyiVlh5uq92Sn3mA06BsmfEZqmgSStVF44uGHDi19qjI1+yN3vEuFA4T0eH89xVKLY1K91UqWI5/TCwTPZMz89/cW3FDpsXso8br2AJrhL0jRk07zkmpCxcRW6SamBO+UU9uCyVzQycTcH3LNYkRXn/yCdLxGXiJb6MENENEsbdXWextLv5jZJDMHcWCoNX/zEE6v6EFbiha3U3VTDCGL/dGYLuZ3FszLOYPQNSGFL1qBEpQFgGSJLO390MSGKgNzuV4oW4375zI4agU5l9NvV96MrhsjsHiwbHY+Qc7uVe3f1zZgt01L/jRUHRvDz/gRr3IOEEUQhrZcpla9mNFsGc/AEpSmIWj2gGJh625uh+aKcZdudVHBcT9MGOUfPcLWKVSpphER9orlHeFzykkLddclVhZz28ZqGDr2lkk3jUUy0Urkwdk72NVlqy/nh6m41F6nLhBqJZ4hxlTLMvN8s0KJzbkX05hxVKsnw0MJlWwaODcVBo4+5Wb9IW9FVHHHWgMduTRUcaIsBPRXG59llvOakC3VEwFrsMZckJY4yZszbdbfzRbStXsr4CGnJ5TBBtnor9lFxjBAPYukCsNeqKJm4iUQK2d5K5ej+rdsu2Ccan3DL+t1dRWxQRFaMjIwckuCL3VtXwtyPoZxe9kzz/Jrc8UxtkPfuvRT8NWSN3K5kthfP9mAetdJrOw3tA2i4FKxMo94P0ev4+D99ie+fGMkXy/r26dHRYq5P80f7dhNK64qCFSuQsJIkyVMaT/UCuf76lOQRWPgzX6As/waXDQgpqsvRxjIS2TdRxT6ddMKNG4tDPBWRmkNNoO5IzZGaS/E5jTbqNReti4fTu4RzJEHmapSWaa7SKC0lU3Nj4xFROdQ+Ty0Hji2uYx09dEkCjdLIgIsvNjOgXfoUHDuheYXjlq3wNJhS59PPOM3whNPs/9Q4VQBztZqkg0d3W+S6WzU6RFtgeZ6P7gAxPiGb5bTombCvkJfTcx8SpD6+zEfBdTVEajbVeVOcSxF9wEpErKm+53lNggjHwWrm2T+4pXVENF9SRUxF+qGxGPe1ZllhRwSQJ5MkMXU9KKJDCCaCOl520VeGYKtVS3mWkGOiQS2r71Orn17udfPkzxYRNxKXI/KMpRouG3n+lb+Enn8bPaXpP0HuIpSeyV9KppTii+ntWwnbjLMNoHbJFwVzz71sQeaf4ohJqBiMHaFeP4Bqmj/O3otob37Krb9nhsjNTWuKmEEuR07Rfjrxu6nPjpF7XSU79xLkxLp/UKmgSZKk69dvWolk42EW446/nA8edOGo5OEhxc+Cu6mIDqpwCbBzciB1ksD6DaxRiRabp4wvN5BXuUnF0n2GRHqGrOicmmDPoP9OZdSa8zxRwk40l9qzMnh5siMwd1n5CYR+0dzHebr0tDQANHegaOruB1TCCcda0qKTB4wrVyVJ8qVOmkClcm+fua+T9vvZx42jB8BHXMMeNfYDa8wzlTy4e74RLhVhZV60Q3C31Mi+AZAGORwsPYSzGjBRAdFV7vYDFaWotI5IhEj69Wr1fSfOrIiwnNnNkiTKsn/fT+Pk68kaoAFE9yAndwDw/JJa5wML5jfwjv301J9Gw7p8jRlbidvFcN0cxDrnWWb5v2ago62c71nWg4t+2vAf1HKeZNY+SR1Y48RMjqntAm2MXyH1fGU6y4qU2BwtBaa1TSe1WxARyzNWbAYJshN9p4/JD0ClklCpJLr1Eb9LVPvNsjw+zwsmaKkiPEua7XMNI7j0uuQ5u7ntSGNxfxvwp8UImveLwoVRaiOvV2WBu1vTGC+CqZaGU8+eELefZ8JbY/bnNc0V4mwtKGf2LCVarS5a7mK3O/5MpXL/1mr1jmm88HDllQN9mcstkqYrEJ9EsIDotwS5zJuhQPlmbb+zZsbE2VEJqWm6C5FDIEvHexHUrAGU3vjwwwvur1SS/fnSxq2eTLhRJVpheXC7FhRansrOznovwyHzuro+jdvaptfZ3frEea2jA4ghqoAcDsiTAFHmQ+bZXtFSxTyFzFXUVpl5LJKNu/TMGmTIGdZXPxsv9kZo7LuEnvJqxk6ChgjsSYLlDq0Z6ywmyvFVIyx69h+Ie9/C2EvzcesnlK/ip1Z8gUsPjHB62eQth9GSvQO4ryJLc6btNkw9O3L65/eDXlwGsbQo2yajICMwOdVwfIXA5k0jrfY0T4umpRTSmqOWhzugrcfcaQmUxcbJAmZ72y0X1CSawYvdib7ZY+3aJB4cXHS1iS/1NN3nrieiKMRbt/pKUb9DVG81y3TcvuS5ucXhYObp0yX1Iy6lRxG/Ec8lcgTFUtMQ3bi+cu//1hjr+X96eg4VMWoLyyYnbw3S83bL0phchcpVJtHIspMHAjxs8PNeLHrkM7C8TpjgZsgdSLTbICevHHk6aB07OyRJYus33Ls60vPuzGxsmVntmfWVz2zH7B9V2Z8GhqJMLAvSGzJfaeLvwv1N7lY4UYq5QcnS2qiKPezwC+30nO55tJ+/4+oi+ywd+6ZoWGd56FbO7NxNlLUhkg/Coru3bHnhcJKQVqsXxnnNR/+ISRp5U5b1XMbVEO03sr+76crjI7t2ra0NHRv6Bwi34pTzQPJ0PrABsd7WlZKdwJE8E+aukfXXf/op1WjY0rQ/L4jhqwVZbtbIox60hFu2uyRHnzytk++E5vM203KsTSSee5Nl6XqcBagaGp2g0djG80PD8MDMYyWJkWxULNpO/eRhRPoRNczWMy9dyrZte1j0zkkHzeKhXvJ8GdffptSzgEbNiGIwHuPFVUdy73el5c2eaclZqkr2skvp6bmYRj1Pa/TsAMYhEtepSy6cUT1IrUsza2Py8ZM16RnahhgK0YTg3kk4i3qQuXTzU72m4VfE7TcJ0Ql1GTUhQhlAQtkss0lDGGAisr3k8QGIR8xH/0IlrMN1QdOp4DmTBJcPx3Hj1akt3HbttYxmLlep6O2epUvBtWlbaxaeyCz9XP1kOtRT1gjBcLS9HuRsMZVlZMW8hDNijNB8lGdPS5IkumULkWSsymx00N0jCdGlAusMUhOGg8mwo6mYlc19UDXEmRW1KNqcHqKKW/b5RoPDUezllg9b8NNw0sCkF4N7/gIJ/ldCuFHUV7lleYiNoG5ZJITbHR+8YHDwi1+r+rGgtVWWydtEdY2bjWsADiaqdcuyh+aVSzvzEKPd6QvbFz0j6BHwFYVwoUBuG3Mxx8zddo6OlIab8/a17faMWXZCkCKHXGKYGHcqKtXqI8k06uypZ2EqNkIyUzTARqCqLBlcisZXktbLedSF7CewO2dC15/aX5CIkTxygMVLHyOetzZP99OVqFxBkuxm0+3ka08V8OKZvo4iYHsjucpaqM6Lvr0Az94KelcRagRuJzC7H6rK4LLL0W/3k922k7suOjI1pKjoKxHj3r2XEOR3SRurwYxo3ijpS9tYYIcY6iRBTodpHDgaxtLM4xqSV0M5mzx4AcMhUzk9G+RpPC31uBzHKQs89zAOoDIghSrtZHnwdrPb3GZlInoos/pfBV48AZDFi/5eG/yChNJveFYvN1W+/CR8vov8RkDfCpK6WX9epqrlnRUXE1V1S78QGPt8Z4/zGbpG5Ix9lB26On0MDv5Ur6Gvxr0XUMtSy/3FROLaj0o/4uNOmMzSybdWKqqK2ZMe/F5ixnn9mUnAHc6jAcdeHHx84cKhTaLh4+QRNCYi6oJC1gv6JhWtAKPu3gfEZqZ5EXsHxDSUEOdxs9q9Dz74nuMA1eojkbL7oIscQFg5ZXwRUwnHzPyfb7nl+RrkNuqr3pDuK9X0gGi0sjBUNZlwbj7FasC2fP8zWXvHARRLI5yL2LT3ZngO/Fe1df81K+Y3289C9DLDWIPIxUVoD2SN3YTy1NUBZ0Jyfcpn9j6IZe/GHUKIsfQm4E8mO+EQYsT72D04zIW/njK6OyJ6Wxn2LiCTdZTC67HoTbgtAIworuPp54nqW7lwRR+mb0PCrdT9m2za8yD+rd2kpUMMMMxL56WE28qk+xZz395LifRdIFdjmVEqK86TpKUt7H5FSlIwtdmZqjo/sHWLLcJriMbkthhMMHVTkyh32bppvq1gPqKFimJKsX+zPwXIZggU74RZPjdJkthrX7u5TMziwnsMnqdw5fbrdkkjV/5D6BnNvPG5gD7ctpzB0A03fOIPGo3yAo3i2y2tNyWaXDV3U3fpQ9wQz+v3FZKPoIiqmttXAvLhavX7w5XKwl6bUUL/yUA+v5+YX4rDxS5mZm0vnPwFpLl0MEntzf/Ns0tCrJ6lzxD8w4svGHzm8IkXFnQebXbocGtYCKndfvvu9IknBv7kpZPyStHwW+T1N1NBiqfBcJMyeWFammuku+dZPSGU1PG9Da+//xtfP76nybSq1W122WVLDp/Xlz4jGq5xyyLaXroI6iIHVdnfnDOAN1yVnPhadeGOoGFDXui3FWCV2yzZL954uv2Y00I+x0paLxNKt1OK3zTrl3CWlUkb/eBQikcYe+kJDi87cdqLcIlvJ02PoNFg7qxhPZv2DY4vP49ofhvI5YSwGWSYWqNOiCKM+USlBZRKg2SNATzLmWpcTmmMfYGGf5yja0+waM9yovJrEF+KyFuJz9uAZ8fRxnFG/BiM1ElLfYQwSFxaSv1kwWR7FPchxkY/xNE1+5vnNlHgG1dX2yeu2e7MhcolTOCkZz7q4qPuPiomNXcZFfOamNda2/Lf3bzmxfb8t3w/cR91l9FsxjjITvTNHqVSvdexQciZFS4mxSdPe5O0CKlINcRDDat/eNEFA/8lL4TQujGvuebEIZEjv25p/ZOi4VirTmOzVqNT2NVM0BTHVCOTEB9yz/6vQPquavU9z7Q7AYq0RcPF2p+pjkGzraMoDMtN+ovtgbT15kvHf5dgrRTCTjjJeICqF7RIUQl4Fo9DVupRkFS1NKIarIitMRFJBTWcPG3O1fJ2HjKjoZRq6DnmWf2PLbLbtq8/+vBFF+1uuw/yfvL9i3Oc1eOpNK9JM60xyyIFuPLK4yPnzcs+hGXvFaI9QeNiPClSIL2Nkef0qqppKJ2wrLElqzdu+Ub1xR2txcEAEnvqqedruD2hWjohzb5a18c8G9sD9XEJrOn1D/A1MwMN7fsX9gd/cmysMTQ5rXLWEPL7BAHL+qifXEy9NrtPkzlqgLQxhPmjpx2ek7hy56uOoeEhQpQ7Yks9g3h6I9Rb9ImmqPQTQoWo52ZKpbcQ4lsJ0QbMLqZRGwSUuHcUZD+1l95Pze7k6CtypqZaJkQpUZybIhq1ftJ0JSJXEKI3EUpvRsONWHYJjbEBRCGeN4LZwzTGfpGjax5vJ7tDPcjJjHBm8axu5BWfFdP8T4H266gdtnVoN3OwZ7JBdqLvtKSvKBL0sKiWTaQPtzJ54QkDqSMyjPsQlu0Usb94tPrbDwM8MMkWXTwQtUrl/g+kfvKL6nabhJ5LgWW49UlegFVB6yI6jNgRS9OnTep/dnxo0WO33747bYZqnH9+ZN//QXZYNX7aMFQL35UEGo2TB0qlUsfsjgaMlDXeIRN0VDFERyRNR4AR1Z4draI2CrghOuI6Ntxxek6GNJSj/aj0mQYTXB1MpaSucqjt3Dvi8eoLB6+5ZvBOVasgvFajaK0QBtyZD152L7SWfC2WuiDH3bMhz+o7UR5UOfbQhmuxR5PEEhK9+sYoVQ0HBN1pmk2gJ5NakW43MaQqSUA0OhZC/DRCLG03mkjpsPjJ0eYSq0mSjFSrfLbuCx8LJreFKGxwD0vzXG0rjpVUJIwAx9zGnvEs+++qjYe2P/q+E52X+YVqlR0i4fEQlZY1tzuYalxv1EYeqX69FarTCpy/d6e7PR6intjVinPNXyBpdvJrPT3DwzOVmpsWlg0T9T4DVj4jI5ijBUNTRr/3GPN69p7u2i7jCPwVIaxFepSe82Cs9mpMHqdU3oPQh3kZiPHm85NnF0GooTJKo3GcNN2PNZ5ArMp7Xr13Qmrh86v3snTPHWR6IyLXEc9bBT6AWR9mEZiimiLRKBKOU39pH7XRv0PCF3jPq4YmO67yJ+uze2+g1LuZdGw5WTadwp3r6I3aX/Kq//W2ZFvFkkTs4986uQLxN6vPQV5b4eixzKvvW3teHmN1775V9ER/i9uaYvW0Dge6EfVAlj3N83922UwXr1K5v5yFk6s9s+UqMmDIAnWPwVLxMOyeHVHVg8C+SuXo6GzVmZtu+uT8kZFohUS+SmCxYX3iquJ+3NWPqLf6hElMJkn0tV/tX1YqlQbaOWFQVxdGouzY/k6LTV150yfnxyO6KgstVScGsiAWsrGDJ08Gi+Ppf69W33dicp+33bYlfv740Apx+jJrHRfU1cZKx77xjTtPmQPcZBqVyr19WQjLQ9YYNNEBy7yfQF4d3RkVYVjdh0APQe+havWOGsWSuW3ZNhEsXJGpz59MTzAZrlbv2teJhqtv3DQY123p1DeLpmPn6/6nvnjnuFzelOB27VobHTl+fJVYusKdpYL3g0YOI2I+BHJo3ryePQ8++JvHTzUHt922JT569IWVmUpvO90A3jN28B8e/A8d+kj06spPrw1ZiJvX7FTXa1b4410D1MMymqnFTWGoUXzP1G7/PxJljCF+75WHzogOgHt39SHzVhIKPpPKML3hEA1bTqO+gCjqwzxGPcI9ArW8iogWoTc+hDeGOLo2v36d1PymY2fZoX7Sl1biuhjxAdA+3CPUR3E5TqZH0Jf28Z6fG5qO3JzbbNqzgZ6+zaS1FTmX7Yj8DdKo/w090duS766oJ4nYJ58bXeaZ3+yEGMfOyktjBqpIJtX3ru3J04U2P7sGjf8WfNW0DNLdKPWAZzt41yt+YeoOE9G+/nG+ZOtLOjT0Xbv9dtL2dZFP19bTYgxJBBcW8/jdZimufK3safucSXWa/phKBW0vedUsk9XcNt3veYzf6fU78zEdeimqgrevTz15/NYa3zP1e/r05BELE49p+3WasI8Wc06SRHftIjp69EJtv4ZF37Ocg6nX9NTzOPGY2V2vU5Exi3VgZoWqwjY7Y+lxCj3NcJxpajlOe9wM+0zYv2CUrf4Vqkwc8+4ZUxJzbrP52Wso9W6mMbYan4FBaqRY+ijiv8Tzq4+TiG1+1hec9Nobxa0X1bP0oBpmmhJk+/f//P88kCSJsenZKwjRF4EFZOn0EmRpHmTpdt698vrZj9fK8ICm6jIXC4ZN7vfHbRGyHxXaM2pgbub63GFittWPN61dzAKniovsACFxZelzl1Cat5n62OXj3qGOfhkB1b1kY7/MC6/eTSJ27y7vS8NL17iEQU5Zx/HUUPfR1OZVhx/gRJKIsXnv2xG9H/N4gkNmAn1uxL2QNv6ad6+8bVYBsF100UUXp0CzWMUwaTact8fTuXJMKExrRqmnHymtgbtJ3PXoEDVTjoh7TfC647Uz/Yh4aipDw0O0ORDCL6AhHndZji9X10afA5aBUtjHZrn+bhdddNHFDMgZZNw4QTZ2pChZNFHymqzSZul84Cou/PU4AZLrJY0bHBHXE47XBK1LpnWh7XPKttcFr5tRH3Pbz7a7cxru/04ZYUPhYe6cqSPFtiyFzJ6d+ynqoosu/rUiZ5CH1p7A2UUUj+YS2jRhMyJKlsbEPeupp2uboVBHh847JioH1b2mntZUqam3fU7ZDjXB63h04OSreo/AxrwOx8n6G9FwMWld8WncP05RXUSOIeSOnblcg7aLLrr4V4vWUonC0+CdY+Pa4Q5ZuhbRm1m4u5ck0eR6SV+M4wOWlo5khLq518y9ZqH4tP/f3m7bniHHYi/tTUQsgTzfslS6sxhzyuJTEyGgYTcuh7r2xy666GKu0JLKgj5NOnaIEGkH70wbXHEvA/8WDVfkbnTX5OVSmzcW71NPjyleV3wio/S2Txtz1NTrkqbH5WR939G1jJK4suSpMpK9EwmvIa3TvnznFIgYuGHZDsbsBFw3RyENXXTRxb92FG5vMf7XoSNktpWoB5gpk4XcIQIr///27ifEruoO4Pj3d869972ZvsQYnTCRYEIYUpmFRBoGXdVAd13ZVpe1QWiKWVYLUkrvUIrYLooUq6YuFARtCy5aKaWbDLRKrS66KLY0dkwlZpKZMB3j+ObNfef+jov73sub/2/GSSPl94FhOMx973Bn8eOce3/n98P5H7L/vapgZR7d6RPS/O++xrRGuaROm1LGIJIUErQQ6fsJWlR/06IUuVxvNqY/Or7vWt7dGWvjXlz2CGW7AVvkcImAS66i5RvMjy2Sn7zpLWONMf8fVi4Vf/HPu3H+LYQM7ZSFiquu7tWHFCWtKaF4lVA8ztzs1W4CZh6jOzhDPSx/spdm0mg5XHSFYxnqaaaFoknQlk+GFubGaeYiSn4ugfuVQ++fILpniXo3ZTtZVeVj1ePRCN4r4v9AaJ3hyl0fbPsAvTHGbGDtXvr5f7+C9w91muC4zXfbUcnqBWX7t8TiKW6Nf+fd8dAfpPJzMeEIyUhzLoER5marPtj5SQnXM+MnYeTBYZyfIKs/g8a7KNsbTLpq/trwAq3mE8wee2GrrHhjjNmO6+Gv+3Lj7L++giQvEXWUUjcPkFW2tuLTgJbvoPpL2vIa82OLOZOdjhAb5CT2H/85cP5OvDyE84+AHKVsb/0cMaIkCSBTEB7mw7FLtno0xuymleEvzx2HH95LO/wY5Nuods4vbkkRgbQ2S2vpjzh+Ra35JqfuWVj3HGg3kD3z/ii++Bo++zqRE8Sy0TvJM8iczjtUH+Ty2GsrvtcYY3bB2kiUR8fBfxwn3fNzQjGBbljdp09nJQmQZAqySFieBvkLTt6mHS+RyiKxdJRxP94fBb5EZILa0CHay/XqxU/cOjjG7vPPuqLlr/mweQpWbuuNMWY3rB8gc1GeO/8NstrPCMVoFSQHLNsdY7Wa9KnDewgBNFR9dKvVaB2fgnMQ2lAG3TSNZ+0EikuA+FdieYqZV3Zem84YYzax/vY3jw75wu9pffIsiEOcDlyUVsQRoyMUyvKSom065wHrIBkxQnsZlpd08ODYPd0TOw165AKqP2UmTG/jXo0xZls2Xhbm0XHLhb0Mhadx8k1Uldh5ntjrM9qp5r3huG+K6+lBdBqUDPD5vjFU5eLTbJ6y/AHt1svMjTdta22MuVE2Xr3lonx05Bqe76O8iEsCzmkv6PWauMsm41U5jL1CE4N+vvsVUq0c01qL0H6C1L3I3G8sOBpjbqitHyzm0THy7gF88jhJ7Vto2IeuetPcW+XJjRgr3iuRi8T4JKfHzu74bo0xZhu2fv6XizI3PovwJGUxSZJdxGdVWbQYtfNWmV7zrN0aRxSRquct7k20/C4Mv3xD/xvGGNNnsLfHuSgzx+bJ0rOE9hkiUyRZwCeuU0OyIn1b452Pq+CbZHRSh14gLJ1hf/t1Zg62dnSXxhizA37gK6cmI/fcqnz8wHka8+dQvQJ6lNrQHlQFYlldGGVNy4beKrFroz7bUqXwJGmLMryDxu8RWs8xO36JuRG1Z47GmP+lwQMkwNRU5H4RFh+4xmO3vcFXH/0dZXsJn9ZIa/Wqx7QH5yIinf1ylPWDo4A4xbkqenrfojZ0haL1JzT8BIk/4jvH3mbiQCA/qUxNbqf5tTHGfGYDZn+vo9eshxRnXwAAALtJREFU+8uOO0aPojIBch/p8HGkPEQobyfGYbzXNdNEdagqIk18chHVC4Tib0TewvNnTn/xam8OSwI3xtwkOw+QcD2Adc9b73+vQcYhXLyDUu9E/GHSZBTxDaJmAGhs4uICoZyB+AGlTEOcxV+7zMzrrV4fW2OMuck+W4Bcrb8Rd34u4fCRhI9Dxp7EsdC5xgfFF8rwcOA/RwK5hF4tSAuMxpjPkd0NkP16W3BYWfJssjPu/LagaIz5nPoUBSp4D1AF9yMAAAAASUVORK5CYII=)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "9716d793-1e9b-4cf3-8bad-62df0a85f467", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/langtest/blob/main/demo/tutorials/llm_notebooks/LangTest_with_DataBricks.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "297ad708-f5c1-4109-9ef4-80f5cc986995", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "# Introduction to LangTest with Databricks Integration\n", + "\n", + "**LangTest** is an open-source Python library designed to help developers deliver safe, robust, and effective Natural Language Processing (NLP) models. In today's rapidly evolving AI landscape, ensuring the quality and reliability of your NLP solutions is critical. LangTest streamlines this process by offering a comprehensive suite of tools to test and validate various NLP models and tasks. Whether you're working with models from **John Snow Labs, Hugging Face, Spacy**, or utilizing cutting-edge large language models (LLMs) from **OpenAI, Cohere, AI21, Hugging Face Inference API, and Azure-OpenAI**, LangTest provides an intuitive and powerful framework for evaluation.\n", + "\n", + "The library supports testing for a diverse range of tasks, including:\n", + "\n", + "- **Named Entity Recognition (NER)**: Evaluate how well your model can identify specific entities, such as names, dates, or locations, in text.\n", + "- **Text Classification**: Validate your model's ability to categorize text into predefined labels.\n", + "- **Fill-mask**: Test how accurately your model can predict masked words in a sentence.\n", + "- **Translation**: Assess the quality of translations produced by your model for various language pairs.\n", + "\n", + "LangTest also shines in its support for LLM-specific tasks, enabling developers to evaluate foundational models for:\n", + "\n", + "- **Question Answering**: Test a model's ability to provide accurate and contextually relevant answers to questions.\n", + "- **Visual Question Answering**: Combine image understanding and textual reasoning for multi-modal models.\n", + "- **Summarization**: Validate how effectively your model can generate concise summaries of longer texts.\n", + "- **Text Generation**: Test the fluency, coherence, and creativity of the text generated by your model.\n", + "\n", + "One of the standout features of LangTest is its comprehensive library of over **100 pre-built tests**, covering everything from data quality checks to bias detection and adversarial robustness testing. These tests help you identify weaknesses and ensure your models perform reliably in real-world scenarios. For a complete list of supported test categories, please visit the [LangTest documentation](http://langtest.org/docs/pages/docs/test_categories).\n", + "\n", + "## Why Integrate LangTest with Databricks?\n", + "\n", + "**Databricks** is a powerful platform for big data analytics and machine learning, offering seamless integration with Apache Spark for distributed computing. By combining LangTest with Databricks, you can scale your model evaluations across large datasets and distributed environments. This integration allows you to:\n", + "\n", + "1. **Efficiently handle large-scale datasets**: Use the parallel processing capabilities of Databricks to run tests on massive datasets without performance bottlenecks.\n", + "2. **Collaborate seamlessly**: Databricks' collaborative notebooks make it easy for teams to work together on evaluating and improving NLP models.\n", + "3. **Automate testing workflows**: Leverage Databricks' pipeline capabilities to integrate LangTest into your CI/CD workflows for continuous evaluation.\n", + "\n", + "## What Will We Cover in This Tutorial?\n", + "\n", + "In this notebook, we will demonstrate how to use **LangTest** with **Databricks** to test foundational NLP models for the **Question Answering** task using the **MedQA** dataset. The MedQA dataset is specifically designed for evaluating models in the healthcare domain, making it a great benchmark for testing domain-specific question-answering capabilities.\n", + "\n", + "By the end of this tutorial, you will learn how to:\n", + "\n", + "1. Set up LangTest in a Databricks environment.\n", + "2. Load and preprocess the MedQA dataset for testing.\n", + "3. Configure and run LangTest evaluations for question-answering models.\n", + "4. Interpret the results to identify areas for improvement in your models.\n", + "\n", + "Whether you're building state-of-the-art NLP solutions for general applications or tackling domain-specific challenges, this tutorial will equip you with the tools and knowledge to deliver more reliable and impactful models. Let's get started!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "a111b827-a496-47d9-86e2-8e1793905809", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "### Step 1: Set Up LangTest in a Databricks Environment\n", + "\n", + "To set up **LangTest** in your Databricks environment, follow these steps:\n", + "\n", + "#### 1.1: Launch Databricks Workspace\n", + "1. Log in to your **Databricks** account.\n", + "2. Navigate to your workspace and open a new or existing notebook.\n", + "\n", + "#### 1.2: Install LangTest\n", + "You need to install the **LangTest** library in your Databricks cluster. Use the following commands in a notebook cell to install the library." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "05a2467e-f203-4f27-8e10-8740a1efb5ec", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[43mNote: you may need to restart the kernel using dbutils.library.restartPython() to use updated packages.\u001b[0m\n", + "\u001b[43mNote: you may need to restart the kernel using dbutils.library.restartPython() to use updated packages.\u001b[0m\n" + ] + } + ], + "source": [ + "%pip install -q langtest[databricks]==2.5.0rc5 # Langtest version >= 2.5.0 is required for databricks support" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "d9e5ffc2-0014-49dd-b84d-babc4c6076f4", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[43mNote: you may need to restart the kernel using dbutils.library.restartPython() to use updated packages.\u001b[0m\n", + "\u001b[43mNote: you may need to restart the kernel using dbutils.library.restartPython() to use updated packages.\u001b[0m\n" + ] + } + ], + "source": [ + "%pip install -q langchain_openai==0.2.5\n", + "dbutils.library.restartPython()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "cdd2a1c7-c9db-48bb-a007-c428108156cb", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "#### 1.3: Verify Installation\n", + "To confirm that LangTest is installed correctly, run the following code to check the version of the library:\n", + "\n", + "```bash\n", + "!pip show langtest\n", + "```\n", + "\n", + "#### 1.4: Set Up Databricks Cluster (Optional)\n", + "If you don’t have a cluster running yet:\n", + "1. Go to the **Clusters** tab in your Databricks workspace.\n", + "2. Click **Create Cluster** and configure it according to your project’s requirements (e.g., Python version, worker nodes).\n", + "3. Attach your notebook to the cluster once it's running.\n", + "\n", + "#### 1.5: Import Necessary Libraries\n", + "To get started with LangTest, you'll need to import the required libraries in your notebook:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "8e369dd7-e9ca-43a5-9e88-5688415b3640", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "# from langtest import Harness\n", + "import os \n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "d9d2007b-9133-4754-8194-305ad239704a", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "# %pip show langtest" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "348996f3-6f53-4d52-b327-887223146853", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "from langtest import Harness" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "1573decc-6dde-4471-a268-07baf62e016a", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "

SparkSession - hive

\n", + " \n", + "
\n", + "

SparkContext

\n", + "\n", + "

Spark UI

\n", + "\n", + "
\n", + "
Version
\n", + "
v3.5.0
\n", + "
Master
\n", + "
local[*, 4]
\n", + "
AppName
\n", + "
Databricks Shell
\n", + "
\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pyspark.sql import SparkSession\n", + "\n", + "spark: SparkSession = SparkSession.builder.appName(\"Langtest\").getOrCreate()\n", + "spark" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "ca37b21d-cdbc-4dbe-89ee-9e58a8885300", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "### Step 2: Load and Explore the MedQA Dataset\n", + "\n", + "We will now load the **MedQA** dataset, which is specifically designed for question-answering tasks in the medical domain. This dataset includes a set of challenging questions, correct answers, and multiple-choice options.\n", + "\n", + "#### 2.1: Load the MedQA Dataset\n", + "\n", + "The dataset is in JSON Lines format (`.jsonl`), where each line represents a record in JSON format. Use Spark to load it into a DataFrame.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "855e48e7-0773-4fe8-abda-ab1ef1d3ae4b", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " % Total % Received % Xferd Average Speed Time Time Time Current\r\n", + " Dload Upload Total Spent Left Speed\r\n", + "\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 48418 100 48418 0 0 139k 0 --:--:-- --:--:-- --:--:-- 139k\r\n" + ] + } + ], + "source": [ + "%python\n", + "!mkdir -p /dbfs/MedQA/\n", + "!curl -o /dbfs/MedQA/test-tiny.jsonl https://raw.githubusercontent.com/JohnSnowLabs/langtest/refs/heads/main/langtest/data/MedQA/test-tiny.jsonl" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "b1d4e1b7-b454-4579-a7c8-26170d468c6d", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "langtest_report langtest_results langtest_testcases test-tiny.jsonl\r\n" + ] + } + ], + "source": [ + "%python\n", + "!ls /dbfs/MedQA/" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "848dd40d-fc3b-4c3f-8ce9-76c75e7f3e9d", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "from pyspark.sql import DataFrame\n", + "\n", + "# Load the dataset into a Spark DataFrame\n", + "MedQA_df: DataFrame = spark.read.json(\"dbfs:/MedQA/test-tiny.jsonl\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "35fa79e4-cb91-4224-9733-96b8e9d5befc", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "#### 2.2: Dataset Overview\n", + "\n", + "The **MedQA** dataset includes the following fields:\n", + "- **question**: The medical scenario or problem statement being asked.\n", + "- **answer**: The correct answer to the question (e.g., multiple-choice option like \"C\").\n", + "- **options**: The possible answer choices provided for the question.\n", + "\n", + "#### 2.3: Explore the Dataset\n", + "\n", + "Let’s inspect the dataset to confirm its structure and understand its content:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "1387818d-55e6-4e35-bb9c-ebb2ae5d83c6", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DataFrame[summary: string, answer: string, options: string, question: string]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "MedQA_df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "52e6981d-3b7b-4972-bfc7-e83f1e7f1fb8", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "root\n", + " |-- answer: string (nullable = true)\n", + " |-- options: string (nullable = true)\n", + " |-- question: string (nullable = true)\n", + "\n" + ] + } + ], + "source": [ + "MedQA_df.printSchema()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "717af98a-9c4b-4be4-9f4f-81d90379f012", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Dataset Count: 50'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f\"Dataset Count: {MedQA_df.count()}\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "5ac4152e-481c-43ff-92dc-4758c1bbd37a", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+--------------------+--------------------+\n", + "| answer| options| question|\n", + "+--------------------+--------------------+--------------------+\n", + "|C. Tell the atten...|A. Disclose the e...|A junior orthopae...|\n", + "|E. Cross-linking ...|A. Inhibition of ...|A 67-year-old man...|\n", + "|C. Cholesterol em...|A. Renal papillar...|Two weeks after u...|\n", + "|D. Lactose-fermen...|A. Coagulase-posi...|A 39-year-old wom...|\n", + "|B. Ketotifen eye ...|A. Erythromycin o...|A 35-year-old man...|\n", + "+--------------------+--------------------+--------------------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "MedQA_df.show(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "ba583a35-1144-48ac-b0d3-0cf5b55881f9", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "#### 2.4: Next Steps\n", + "\n", + "With the dataset loaded and explored, we are now ready to preprocess it (if necessary) and use it with **LangTest** for evaluating the performance of a question-answering model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "bb257c76-7c02-4fcb-8b07-a75ad82d459c", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "### Step 3: Set Up LangTest Harness and Run Test Cases\n", + "\n", + "In this step, we’ll configure the **LangTest** harness to evaluate a question-answering model using the **MedQA** dataset. We'll use a custom test configuration and define specific robustness tests to assess the model's reliability.\n", + "\n", + "#### 3.1: Define the Test Configuration\n", + "\n", + "The test configuration includes the following:\n", + "- **Model parameters**: Specifies the temperature and maximum token limit for generating responses.\n", + "- **Test types**:\n", + " - **Defaults**: Basic functional tests to ensure the model meets a minimum pass rate.\n", + " - **Robustness**: Tests that simulate common challenges such as typos and text case variations.\n", + "\n", + "Here is the test configuration:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "954613ca-b377-4349-aadc-1c4a3f522ea3", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "prompt_template = \"\"\"\n", + "You are an AI bot specializing in providing accurate and concise answers to questions. You will be presented with a medical question and multiple-choice answer options. Your task is to choose the correct answer.\\nQuestion: {question}\\nOptions: {options}\\n Answer:\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "77013c3f-24cc-41b6-a6f3-664c76c44a8d", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "from langtest.types import HarnessConfig\n", + "\n", + "test_config: HarnessConfig = {\n", + " \"evaluation\": {\n", + " \"metric\": \"llm_eval\",\n", + " \"model\": \"gpt-4o\", # for evaluation\n", + " \"hub\": \"openai\",\n", + " },\n", + " \"tests\": {\n", + " \"defaults\": {\n", + " \"min_pass_rate\": 1.0,\n", + " \"user_prompt\": prompt_template,\n", + " },\n", + " \"robustness\": {\n", + " \"add_typo\": {\"min_pass_rate\": 0.8},\n", + " \"add_ocr_typo\": {\"min_pass_rate\": 0.8},\n", + " \"add_speech_to_text_typo\":{\"min_pass_rate\": 0.8},\n", + " \"add_slangs\": {\"min_pass_rate\": 0.8},\n", + " \"uppercase\": {\"min_pass_rate\": 0.8},\n", + " },\n", + " },\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "73c91695-9a59-4354-94f3-da0d2b718c1b", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "input_data = {\n", + " \"data_source\": MedQA_df,\n", + " \"source\": \"spark\",\n", + " \"spark_session\": spark\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "0ef9de10-9a60-4b4f-94fa-a6169d0b6f21", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "model_config = {\n", + " \"model\": {\n", + " # ChatDatabricks or Databricks Class params from the langchain-databricks\n", + " \"endpoint\": \"databricks-meta-llama-3-1-70b-instruct\",\n", + " \"max_tokens\": 20,\n", + " },\n", + " \"hub\": \"databricks\",\n", + " \"type\": \"chat\"\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "1bf5a9ab-d615-4cb4-8785-58e33845c1ee", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "#### 3.2: Set Up the LangTest Harness\n", + "\n", + "Initialize the LangTest harness with the MedQA dataset and the test configuration." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "64c0e733-ee03-4339-b765-6edc6169aed6", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Configuration : \n", + " {\n", + " \"evaluation\": {\n", + " \"metric\": \"llm_eval\",\n", + " \"model\": \"gpt-4o\",\n", + " \"hub\": \"openai\"\n", + " },\n", + " \"tests\": {\n", + " \"defaults\": {\n", + " \"min_pass_rate\": 1.0,\n", + " \"user_prompt\": \"\\nYou are an AI bot specializing in providing accurate and concise answers to questions. You will be presented with a medical question and multiple-choice answer options. Your task is to choose the correct answer.\\nQuestion: {question}\\nOptions: {options}\\n Answer:\\n\"\n", + " },\n", + " \"robustness\": {\n", + " \"add_typo\": {\n", + " \"min_pass_rate\": 0.8\n", + " },\n", + " \"add_ocr_typo\": {\n", + " \"min_pass_rate\": 0.8\n", + " },\n", + " \"add_speech_to_text_typo\": {\n", + " \"min_pass_rate\": 0.8\n", + " },\n", + " \"add_slangs\": {\n", + " \"min_pass_rate\": 0.8\n", + " },\n", + " \"uppercase\": {\n", + " \"min_pass_rate\": 0.8\n", + " }\n", + " }\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "harness = Harness(\n", + " task=\"question-answering\",\n", + " model=model_config,\n", + " data=input_data,\n", + " config=test_config\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "a1573e83-7bb3-4b21-894b-4b34a4309017", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "harness.data = harness.data[:1]" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "3fcaa081-8daf-487e-bec8-3b5dd3225959", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\rGenerating testcases...: 0%| | 0/1 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
categorytest_typeoriginal_questionperturbed_questionoptions
0robustnessadd_typoA junior orthopaedic surgery resident is compl...A junior orthopaedic surgery residsnt is compl...A. Disclose the error to the patient but leave...
1robustnessadd_typoA 67-year-old man with transitional cell carci...A 67-year-old man with transitional cell carci...A. Inhibition of thymidine synthesis\\nB. Inhib...
2robustnessadd_typoTwo weeks after undergoing an emergency cardia...Two weeks after undergoing an emergency cardia...A. Renal papillary necrosis\\nB. Allergic inter...
3robustnessadd_typoA 39-year-old woman is brought to the emergenc...A 39-year-old woman is brought to the emergenc...A. Coagulase-positive, gram-positive cocci for...
4robustnessadd_typoA 35-year-old man comes to the physician becau...A 35-year-old man comes to the physician becau...A. Erythromycin ointment\\nB. Ketotifen eye dro...
..................
240robustnessuppercaseA man is brought into the emergency department...A MAN IS BROUGHT INTO THE EMERGENCY DEPARTMENT...A. Ethanol\\nB. Naltrexone\\nC. Naloxone\\nD. Flu...
241robustnessuppercaseA medical research study is evaluating an inve...A MEDICAL RESEARCH STUDY IS EVALUATING AN INVE...A. 5\\nB. 16\\nC. 20\\nD. 30\\nE. 50
242robustnessuppercaseA 55-year-old man comes to the physician becau...A 55-YEAR-OLD MAN COMES TO THE PHYSICIAN BECAU...A. Femoropopliteal artery stenosis\\nB. Vasculi...
243robustnessuppercaseA 29-year-old primigravid woman at 35 weeks' g...A 29-YEAR-OLD PRIMIGRAVID WOMAN AT 35 WEEKS' G...A. Perform karyotyping of amniotic fluid\\nB. R...
244robustnessuppercaseA 67-year-old man is hospitalized after severa...A 67-YEAR-OLD MAN IS HOSPITALIZED AFTER SEVERA...A. Squamous cell proliferation\\nB. Sweeping of...
\n", + "

245 rows × 5 columns

\n", + "" + ], + "text/plain": [ + " category ... options\n", + "0 robustness ... A. Disclose the error to the patient but leave...\n", + "1 robustness ... A. Inhibition of thymidine synthesis\\nB. Inhib...\n", + "2 robustness ... A. Renal papillary necrosis\\nB. Allergic inter...\n", + "3 robustness ... A. Coagulase-positive, gram-positive cocci for...\n", + "4 robustness ... A. Erythromycin ointment\\nB. Ketotifen eye dro...\n", + ".. ... ... ...\n", + "240 robustness ... A. Ethanol\\nB. Naltrexone\\nC. Naloxone\\nD. Flu...\n", + "241 robustness ... A. 5\\nB. 16\\nC. 20\\nD. 30\\nE. 50\n", + "242 robustness ... A. Femoropopliteal artery stenosis\\nB. Vasculi...\n", + "243 robustness ... A. Perform karyotyping of amniotic fluid\\nB. R...\n", + "244 robustness ... A. Squamous cell proliferation\\nB. Sweeping of...\n", + "\n", + "[245 rows x 5 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "testcases = harness.testcases()\n", + "testcases" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "a1c47112-fe9d-4b96-8a9c-3c1c03e903f0", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "testcases_dlt_df = spark.createDataFrame(testcases)\n", + "\n", + "testcases_dlt_df.write.format(\"delta\").mode(\"overwrite\").save(\"dbfs:/MedQA/langtest_testcases\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "447ef88d-a529-44bb-89b8-760769531a95", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "source": [ + "#### 3.3: Run the Test Cases\n", + "\n", + "Run the tests defined in the configuration. The output will include test results for each test case and their respective pass/fail status." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "6a2e77a7-ac67-4270-8653-cd5b3388c428", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\rRunning testcases... : 0%| | 0/245 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
categorytest_typeoriginal_questionperturbed_questionoptionsexpected_resultactual_resultpass
0robustnessadd_typoA junior orthopaedic surgery resident is compl...A junior orthopaedic surgery residsnt is compl...A. Disclose the error to the patient but leave...The correct answer is B. Disclose the error to...The correct answer is B. Disclose the error to...True
1robustnessadd_typoA 67-year-old man with transitional cell carci...A 67-year-old man with transitional cell carci...A. Inhibition of thymidine synthesis\\nB. Inhib...To solve this question, let's break it down st...To solve this question, let's break it down st...True
2robustnessadd_typoTwo weeks after undergoing an emergency cardia...Two weeks after undergoing an emergency cardia...A. Renal papillary necrosis\\nB. Allergic inter...To determine the most likely cause of this pat...To determine the most likely cause of this pat...True
3robustnessadd_typoA 39-year-old woman is brought to the emergenc...A 39-year-old woman is brought to the emergenc...A. Coagulase-positive, gram-positive cocci for...To solve this question, let's break down the k...To solve this question, let's break down the k...True
4robustnessadd_typoA 35-year-old man comes to the physician becau...A 35-year-old man comes to the physician becau...A. Erythromycin ointment\\nB. Ketotifen eye dro...To determine the most appropriate treatment, l...To determine the most appropriate treatment, l...True
...........................
240robustnessuppercaseA man is brought into the emergency department...A MAN IS BROUGHT INTO THE EMERGENCY DEPARTMENT...A. Ethanol\\nB. Naltrexone\\nC. Naloxone\\nD. Flu...To address this patient's condition, let's bre...To address this patient's condition, we need t...False
241robustnessuppercaseA medical research study is evaluating an inve...A MEDICAL RESEARCH STUDY IS EVALUATING AN INVE...A. 5\\nB. 16\\nC. 20\\nD. 30\\nE. 50To calculate the Number Needed to Treat (NNT) ...To calculate the Number Needed to Treat (NNT) ...True
242robustnessuppercaseA 55-year-old man comes to the physician becau...A 55-YEAR-OLD MAN COMES TO THE PHYSICIAN BECAU...A. Femoropopliteal artery stenosis\\nB. Vasculi...The correct answer is A. Femoropopliteal arter...The correct answer is A. Femoropopliteal arter...True
243robustnessuppercaseA 29-year-old primigravid woman at 35 weeks' g...A 29-YEAR-OLD PRIMIGRAVID WOMAN AT 35 WEEKS' G...A. Perform karyotyping of amniotic fluid\\nB. R...The correct answer is B. Recommend autopsy of ...The correct answer is B. Recommend autopsy of ...True
244robustnessuppercaseA 67-year-old man is hospitalized after severa...A 67-YEAR-OLD MAN IS HOSPITALIZED AFTER SEVERA...A. Squamous cell proliferation\\nB. Sweeping of...The correct answer is D. Proliferation of surf...The correct answer is D. Proliferation of surf...True
\n", + "

245 rows × 8 columns

\n", + "" + ], + "text/plain": [ + " category ... pass\n", + "0 robustness ... True\n", + "1 robustness ... True\n", + "2 robustness ... True\n", + "3 robustness ... True\n", + "4 robustness ... True\n", + ".. ... ... ...\n", + "240 robustness ... False\n", + "241 robustness ... True\n", + "242 robustness ... True\n", + "243 robustness ... True\n", + "244 robustness ... True\n", + "\n", + "[245 rows x 8 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generated_results = harness.generated_results()\n", + "generated_results" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "c9295d77-287b-4df5-8af9-7f3516c82625", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "results_dlt_df = spark.createDataFrame(generated_results)\n", + "\n", + "results_dlt_df.write.format(\"delta\").mode(\"overwrite\").save(\"dbfs:/MedQA/langtest_results\")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "42431a2a-087c-4efc-8244-dc39992eb78d", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "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", + "
categorytest_typefail_countpass_countpass_rateminimum_pass_ratepass
0robustnessadd_typo143370%80%False
1robustnessadd_ocr_typo222856%80%False
2robustnessadd_speech_to_text_typo94182%80%True
3robustnessadd_slangs222654%80%False
4robustnessuppercase193162%80%False
\n", + "
" + ], + "text/plain": [ + " category test_type ... minimum_pass_rate pass\n", + "0 robustness add_typo ... 80% False\n", + "1 robustness add_ocr_typo ... 80% False\n", + "2 robustness add_speech_to_text_typo ... 80% True\n", + "3 robustness add_slangs ... 80% False\n", + "4 robustness uppercase ... 80% False\n", + "\n", + "[5 rows x 7 columns]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "report = harness.report()\n", + "report" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "178a026d-3332-4458-9b6a-e33d07c6f785", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "report_dlt_df = spark.createDataFrame(report)\n", + "\n", + "report_dlt_df.write.format(\"delta\").mode(\"overwrite\").save(\"dbfs:/MedQA/langtest_report\")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "4b0046ab-7da9-416f-9d99-bfa0791e9ab3", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "application/vnd.databricks.v1+notebook": { + "computePreferences": null, + "dashboards": [], + "environmentMetadata": { + "base_environment": "", + "client": "1" + }, + "language": "python", + "notebookMetadata": { + "pythonIndentUnit": 4 + }, + "notebookName": "LangTest With Databricks", + "widgets": {} + }, + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/demo/tutorials/misc/Degradation_Analysis_Test.ipynb b/demo/tutorials/misc/Degradation_Analysis_Test.ipynb index bbe16ef13..2747b2710 100644 --- a/demo/tutorials/misc/Degradation_Analysis_Test.ipynb +++ b/demo/tutorials/misc/Degradation_Analysis_Test.ipynb @@ -977,920 +977,6 @@ "harness.generated_results()" ] }, - { - "cell_type": "code", - "execution_count": 10, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
categorytest_typeoriginal_contextoriginal_questionperturbed_contextperturbed_questionexpected_resultactual_resultpass
0robustnessuppercaseAll biomass goes through at least some of thes...does ethanol take more energy make that producesALL BIOMASS GOES THROUGH AT LEAST SOME OF THES...DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCESFalse\\n)FalseFalse
1robustnessuppercaseProperty tax or 'house tax' is a local tax on ...is house tax and property tax are samePROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ...IS HOUSE TAX AND PROPERTY TAX ARE SAMEFalseFalseTrue
2robustnessuppercasePhantom pain sensations are described as perce...is pain experienced in a missing body part or ...PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE...IS PAIN EXPERIENCED IN A MISSING BODY PART OR ...TrueTrueTrue
3robustnessuppercaseHarry Potter and the Escape from Gringotts is ...is harry potter and the escape from gringotts ...HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ...IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ...TrueTrueTrue
4robustnessuppercaseHydroxyzine preparations require a doctor's pr...is there a difference between hydroxyzine hcl ...HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR...IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ...TrueFalseFalse
5robustnessuppercaseBarq's /ˈbɑːrks/ is an American soft drink. It...is barq's root beer a pepsi productBARQ'S /ˈBⱭːRKS/ IS AN AMERICAN SOFT DRINK. IT...IS BARQ'S ROOT BEER A PEPSI PRODUCTFalseFalseTrue
6robustnessuppercaseIn mathematics, parity is the property of an i...can an odd number be divided by an even numberIN MATHEMATICS, PARITY IS THE PROPERTY OF AN I...CAN AN ODD NUMBER BE DIVIDED BY AN EVEN NUMBERFalseTrueFalse
7robustnessuppercaseOf the 71 words in this list, 67 are nouns, an...is there a word with q without uOF THE 71 WORDS IN THIS LIST, 67 ARE NOUNS, AN...IS THERE A WORD WITH Q WITHOUT UTrueFalseFalse
8robustnessuppercasePersons driving into Canada must have their ve...can u drive in canada with us licensePERSONS DRIVING INTO CANADA MUST HAVE THEIR VE...CAN U DRIVE IN CANADA WITH US LICENSEFalseTrueFalse
9robustnessuppercaseThe knockout stage of the 2018 FIFA World Cup ...is there a play off for third place in the wor...THE KNOCKOUT STAGE OF THE 2018 FIFA WORLD CUP ...IS THERE A PLAY OFF FOR THIRD PLACE IN THE WOR...TrueTrueTrue
10robustnessuppercaseIn response to the National Minimum Drinking A...can minors drink with parents in new yorkIN RESPONSE TO THE NATIONAL MINIMUM DRINKING A...CAN MINORS DRINK WITH PARENTS IN NEW YORKTrueTrueTrue
11robustnessuppercaseBloodline was announced in October 2014 as par...is the show bloodline based on a true storyBLOODLINE WAS ANNOUNCED IN OCTOBER 2014 AS PAR...IS THE SHOW BLOODLINE BASED ON A TRUE STORYFalseFalseTrue
12robustnessuppercaseShower gels for men may contain the ingredient...is it bad to wash your hair with shower gelSHOWER GELS FOR MEN MAY CONTAIN THE INGREDIENT...IS IT BAD TO WASH YOUR HAIR WITH SHOWER GELFalseassistant\\n\\nThat's correct! Shower gels ...FalseFalse
13robustnessuppercaseThe liver detoxifies and breaks down chemicals...is the liver part of the excretory systemTHE LIVER DETOXIFIES AND BREAKS DOWN CHEMICALS...IS THE LIVER PART OF THE EXCRETORY SYSTEMTrueTrueTrue
14robustnessuppercaseFantastic Beasts and Where to Find Them is a 2...is fantastic beasts and where to find them a p...FANTASTIC BEASTS AND WHERE TO FIND THEM IS A 2...IS FANTASTIC BEASTS AND WHERE TO FIND THEM A P...TrueTrueTrue
15robustnessuppercaseThe Vampire Diaries, an American supernatural ...will there be a season 8 of vampire diariesTHE VAMPIRE DIARIES, AN AMERICAN SUPERNATURAL ...WILL THERE BE A SEASON 8 OF VAMPIRE DIARIESTrueTrueTrue
16robustnessuppercaseThe Strangers is a 2008 American slasher film ...was the movie strangers based on a true storyTHE STRANGERS IS A 2008 AMERICAN SLASHER FILM ...WAS THE MOVIE STRANGERS BASED ON A TRUE STORYTrue.TrueTrue
17robustnessuppercaseIn March 2012 it was announced that four unive...is durham university part of the russell groupIN MARCH 2012 IT WAS ANNOUNCED THAT FOUR UNIVE...IS DURHAM UNIVERSITY PART OF THE RUSSELL GROUPTrueTrueTrue
18robustnessuppercaseThe Resident is an American medical drama tele...is the tv show the resident over for the seasonTHE RESIDENT IS AN AMERICAN MEDICAL DRAMA TELE...IS THE TV SHOW THE RESIDENT OVER FOR THE SEASONFalseFalseTrue
19robustnessuppercaseMagnesium citrate is a magnesium preparation i...does magnesium citrate have citric acid in itMAGNESIUM CITRATE IS A MAGNESIUM PREPARATION I...DOES MAGNESIUM CITRATE HAVE CITRIC ACID IN ITTrueTrueTrue
20robustnessuppercaseStreet Addressing will have the same street ad...does p o box come before street addressSTREET ADDRESSING WILL HAVE THE SAME STREET AD...DOES P O BOX COME BEFORE STREET ADDRESSFalseFalseTrue
21robustnessuppercaseA spark plug (sometimes, in British English, a...does a spark plug keep an engine runningA SPARK PLUG (SOMETIMES, IN BRITISH ENGLISH, A...DOES A SPARK PLUG KEEP AN ENGINE RUNNINGTrueTrueTrue
22robustnessuppercaseLadies may wear a long (over the shoulders or ...is a cape and a cloak the sameLADIES MAY WEAR A LONG (OVER THE SHOULDERS OR ...IS A CAPE AND A CLOAK THE SAMEFalseFalseTrue
23robustnessuppercaseRenunciation of U.S. citizenship was free unti...does it cost money to renounce us citizenshipRENUNCIATION OF U.S. CITIZENSHIP WAS FREE UNTI...DOES IT COST MONEY TO RENOUNCE US CITIZENSHIPFalseTrueFalse
24robustnessuppercaseThe Fire Tablet, formerly called the Kindle Fi...is a fire 7 the same as a kindleTHE FIRE TABLET, FORMERLY CALLED THE KINDLE FI...IS A FIRE 7 THE SAME AS A KINDLETrueFalseFalse
25robustnessuppercaseThe drinking age in Wisconsin is 21. Those und...can you drink alcohol with your parents in wis...THE DRINKING AGE IN WISCONSIN IS 21. THOSE UND...CAN YOU DRINK ALCOHOL WITH YOUR PARENTS IN WIS...TrueTrueTrue
26robustnessuppercaseContour feathers are not uniformly distributed...do penguins have feathers arising from the epi...CONTOUR FEATHERS ARE NOT UNIFORMLY DISTRIBUTED...DO PENGUINS HAVE FEATHERS ARISING FROM THE EPI...TrueTrueTrue
27robustnessuppercaseA new engine is broken in by following specifi...do you need to break in a carA NEW ENGINE IS BROKEN IN BY FOLLOWING SPECIFI...DO YOU NEED TO BREAK IN A CARFalseFalseTrue
28robustnessuppercaseThe Enchanted Forest is an amusement park loca...is the enchanted forest in oregon still openTHE ENCHANTED FOREST IS AN AMUSEMENT PARK LOCA...IS THE ENCHANTED FOREST IN OREGON STILL OPENTrueTrueTrue
29robustnessuppercaseOn the grounds of the speedway is the Indianap...is there a golf course at the indy 500ON THE GROUNDS OF THE SPEEDWAY IS THE INDIANAP...IS THERE A GOLF COURSE AT THE INDY 500TrueTrueTrue
30robustnessuppercaseAs part of Marvel's Marvel NOW! initiative a n...does deadpool have a kid in the comicsAS PART OF MARVEL'S MARVEL NOW! INITIATIVE A N...DOES DEADPOOL HAVE A KID IN THE COMICSTrueTrueTrue
31robustnessuppercaseBenson & Hedges is a British brand of cigarett...do they still make benson & hedges cigarettesBENSON & HEDGES IS A BRITISH BRAND OF CIGARETT...DO THEY STILL MAKE BENSON & HEDGES CIGARETTESTrueTrueTrue
32robustnessuppercaseThe Commonwealth government has its own tax la...is federal income tax the same as social securityTHE COMMONWEALTH GOVERNMENT HAS ITS OWN TAX LA...IS FEDERAL INCOME TAX THE SAME AS SOCIAL SECURITYFalseFalseTrue
33robustnessuppercaseThe crank sensor can be used in combination wi...is an engine speed sensor the same as a cranks...THE CRANK SENSOR CAN BE USED IN COMBINATION WI...IS AN ENGINE SPEED SENSOR THE SAME AS A CRANKS...Falseassistant\\n\\nThe engine speed sensor and ...FalseFalse
34robustnessuppercaseIndiana Jones and the Temple of Doom is a 1984...is indiana jones temple of doom a prequelINDIANA JONES AND THE TEMPLE OF DOOM IS A 1984...IS INDIANA JONES TEMPLE OF DOOM A PREQUELTrueTrueTrue
35robustnessuppercaseThe untitled Avengers film, colloquially refer...is there any next part of avengers infinity warTHE UNTITLED AVENGERS FILM, COLLOQUIALLY REFER...IS THERE ANY NEXT PART OF AVENGERS INFINITY WARTrueFalseFalse
36robustnessuppercaseAnnounced in April 2000 at the New York Auto S...is the toyota highlander on a truck frameANNOUNCED IN APRIL 2000 AT THE NEW YORK AUTO S...IS THE TOYOTA HIGHLANDER ON A TRUCK FRAMEFalseFalseTrue
37robustnessuppercaseSince the Copyright Act of 1909, United States...is it legal to do a cover of a songSINCE THE COPYRIGHT ACT OF 1909, UNITED STATES...IS IT LEGAL TO DO A COVER OF A SONGTrueTrueTrue
38robustnessuppercaseThe carbon-hydrogen bond (C--H bond) is a bond...can carbon form polar covalent bonds with hydr...THE CARBON-HYDROGEN BOND (C--H BOND) IS A BOND...CAN CARBON FORM POLAR COVALENT BONDS WITH HYDR...Falseassistant\\n\\nContext: The carbon-hydrogen...FalseFalse
39robustnessuppercaseIn 2011, Philip Pullman remarked at the Britis...is there a sequel to the movie the golden compassIN 2011, PHILIP PULLMAN REMARKED AT THE BRITIS...IS THERE A SEQUEL TO THE MOVIE THE GOLDEN COMPASSFalseFalseTrue
40robustnessuppercaseColumbus Day is a national holiday in many cou...is columbus day a national holiday in the unit...COLUMBUS DAY IS A NATIONAL HOLIDAY IN MANY COU...IS COLUMBUS DAY A NATIONAL HOLIDAY IN THE UNIT...TrueTrueTrue
41robustnessuppercaseNew Balance maintains a manufacturing presence...are new balance and nike the same companyNEW BALANCE MAINTAINS A MANUFACTURING PRESENCE...ARE NEW BALANCE AND NIKE THE SAME COMPANYFalseFalseTrue
42robustnessuppercaseU.S. Highway 20 (US 20) is an east--west Unite...is there an interstate that goes coast to coastU.S. HIGHWAY 20 (US 20) IS AN EAST--WEST UNITE...IS THERE AN INTERSTATE THAT GOES COAST TO COASTFalseFalseTrue
43robustnessuppercaseTomato purée is a thick liquid made by cooking...is pureed tomatoes the same as tomato sauceTOMATO PURÉE IS A THICK LIQUID MADE BY COOKING...IS PUREED TOMATOES THE SAME AS TOMATO SAUCEFalseFalseTrue
44robustnessuppercaseEnglish orthography typically represents vowel...can there be a word without a vowelENGLISH ORTHOGRAPHY TYPICALLY REPRESENTS VOWEL...CAN THERE BE A WORD WITHOUT A VOWELFalseTrueFalse
45robustnessuppercaseTipping Point is a British television game sho...does only the winner get money on tipping pointTIPPING POINT IS A BRITISH TELEVISION GAME SHO...DOES ONLY THE WINNER GET MONEY ON TIPPING POINTTrueTrueTrue
46robustnessuppercaseThe turkey vulture (Cathartes aura), also know...is there such a thing as a turkey vultureTHE TURKEY VULTURE (CATHARTES AURA), ALSO KNOW...IS THERE SUCH A THING AS A TURKEY VULTURETrueTrueTrue
47robustnessuppercaseAs of October 2008, a condor (four under par) ...has anyone hit a hole in one on a par 5AS OF OCTOBER 2008, A CONDOR (FOUR UNDER PAR) ...HAS ANYONE HIT A HOLE IN ONE ON A PAR 5TrueTrue.False
48robustnessuppercaseMetLife Stadium is an American sports stadium ...do the jets and giants share a stadiumMETLIFE STADIUM IS AN AMERICAN SPORTS STADIUM ...DO THE JETS AND GIANTS SHARE A STADIUMTrueTrueTrue
49robustnessuppercaseAfter the defeat in the 2016 Olympics, the USW...is the us womens soccer team in the world cupAFTER THE DEFEAT IN THE 2016 OLYMPICS, THE USW...IS THE US WOMENS SOCCER TEAM IN THE WORLD CUPTrueTrueTrue
\n", - "
" - ], - "text/plain": [ - " category test_type original_context \\\n", - "0 robustness uppercase All biomass goes through at least some of thes... \n", - "1 robustness uppercase Property tax or 'house tax' is a local tax on ... \n", - "2 robustness uppercase Phantom pain sensations are described as perce... \n", - "3 robustness uppercase Harry Potter and the Escape from Gringotts is ... \n", - "4 robustness uppercase Hydroxyzine preparations require a doctor's pr... \n", - "5 robustness uppercase Barq's /ˈbɑːrks/ is an American soft drink. It... \n", - "6 robustness uppercase In mathematics, parity is the property of an i... \n", - "7 robustness uppercase Of the 71 words in this list, 67 are nouns, an... \n", - "8 robustness uppercase Persons driving into Canada must have their ve... \n", - "9 robustness uppercase The knockout stage of the 2018 FIFA World Cup ... \n", - "10 robustness uppercase In response to the National Minimum Drinking A... \n", - "11 robustness uppercase Bloodline was announced in October 2014 as par... \n", - "12 robustness uppercase Shower gels for men may contain the ingredient... \n", - "13 robustness uppercase The liver detoxifies and breaks down chemicals... \n", - "14 robustness uppercase Fantastic Beasts and Where to Find Them is a 2... \n", - "15 robustness uppercase The Vampire Diaries, an American supernatural ... \n", - "16 robustness uppercase The Strangers is a 2008 American slasher film ... \n", - "17 robustness uppercase In March 2012 it was announced that four unive... \n", - "18 robustness uppercase The Resident is an American medical drama tele... \n", - "19 robustness uppercase Magnesium citrate is a magnesium preparation i... \n", - "20 robustness uppercase Street Addressing will have the same street ad... \n", - "21 robustness uppercase A spark plug (sometimes, in British English, a... \n", - "22 robustness uppercase Ladies may wear a long (over the shoulders or ... \n", - "23 robustness uppercase Renunciation of U.S. citizenship was free unti... \n", - "24 robustness uppercase The Fire Tablet, formerly called the Kindle Fi... \n", - "25 robustness uppercase The drinking age in Wisconsin is 21. Those und... \n", - "26 robustness uppercase Contour feathers are not uniformly distributed... \n", - "27 robustness uppercase A new engine is broken in by following specifi... \n", - "28 robustness uppercase The Enchanted Forest is an amusement park loca... \n", - "29 robustness uppercase On the grounds of the speedway is the Indianap... \n", - "30 robustness uppercase As part of Marvel's Marvel NOW! initiative a n... \n", - "31 robustness uppercase Benson & Hedges is a British brand of cigarett... \n", - "32 robustness uppercase The Commonwealth government has its own tax la... \n", - "33 robustness uppercase The crank sensor can be used in combination wi... \n", - "34 robustness uppercase Indiana Jones and the Temple of Doom is a 1984... \n", - "35 robustness uppercase The untitled Avengers film, colloquially refer... \n", - "36 robustness uppercase Announced in April 2000 at the New York Auto S... \n", - "37 robustness uppercase Since the Copyright Act of 1909, United States... \n", - "38 robustness uppercase The carbon-hydrogen bond (C--H bond) is a bond... \n", - "39 robustness uppercase In 2011, Philip Pullman remarked at the Britis... \n", - "40 robustness uppercase Columbus Day is a national holiday in many cou... \n", - "41 robustness uppercase New Balance maintains a manufacturing presence... \n", - "42 robustness uppercase U.S. Highway 20 (US 20) is an east--west Unite... \n", - "43 robustness uppercase Tomato purée is a thick liquid made by cooking... \n", - "44 robustness uppercase English orthography typically represents vowel... \n", - "45 robustness uppercase Tipping Point is a British television game sho... \n", - "46 robustness uppercase The turkey vulture (Cathartes aura), also know... \n", - "47 robustness uppercase As of October 2008, a condor (four under par) ... \n", - "48 robustness uppercase MetLife Stadium is an American sports stadium ... \n", - "49 robustness uppercase After the defeat in the 2016 Olympics, the USW... \n", - "\n", - " original_question \\\n", - "0 does ethanol take more energy make that produces \n", - "1 is house tax and property tax are same \n", - "2 is pain experienced in a missing body part or ... \n", - "3 is harry potter and the escape from gringotts ... \n", - "4 is there a difference between hydroxyzine hcl ... \n", - "5 is barq's root beer a pepsi product \n", - "6 can an odd number be divided by an even number \n", - "7 is there a word with q without u \n", - "8 can u drive in canada with us license \n", - "9 is there a play off for third place in the wor... \n", - "10 can minors drink with parents in new york \n", - "11 is the show bloodline based on a true story \n", - "12 is it bad to wash your hair with shower gel \n", - "13 is the liver part of the excretory system \n", - "14 is fantastic beasts and where to find them a p... \n", - "15 will there be a season 8 of vampire diaries \n", - "16 was the movie strangers based on a true story \n", - "17 is durham university part of the russell group \n", - "18 is the tv show the resident over for the season \n", - "19 does magnesium citrate have citric acid in it \n", - "20 does p o box come before street address \n", - "21 does a spark plug keep an engine running \n", - "22 is a cape and a cloak the same \n", - "23 does it cost money to renounce us citizenship \n", - "24 is a fire 7 the same as a kindle \n", - "25 can you drink alcohol with your parents in wis... \n", - "26 do penguins have feathers arising from the epi... \n", - "27 do you need to break in a car \n", - "28 is the enchanted forest in oregon still open \n", - "29 is there a golf course at the indy 500 \n", - "30 does deadpool have a kid in the comics \n", - "31 do they still make benson & hedges cigarettes \n", - "32 is federal income tax the same as social security \n", - "33 is an engine speed sensor the same as a cranks... \n", - "34 is indiana jones temple of doom a prequel \n", - "35 is there any next part of avengers infinity war \n", - "36 is the toyota highlander on a truck frame \n", - "37 is it legal to do a cover of a song \n", - "38 can carbon form polar covalent bonds with hydr... \n", - "39 is there a sequel to the movie the golden compass \n", - "40 is columbus day a national holiday in the unit... \n", - "41 are new balance and nike the same company \n", - "42 is there an interstate that goes coast to coast \n", - "43 is pureed tomatoes the same as tomato sauce \n", - "44 can there be a word without a vowel \n", - "45 does only the winner get money on tipping point \n", - "46 is there such a thing as a turkey vulture \n", - "47 has anyone hit a hole in one on a par 5 \n", - "48 do the jets and giants share a stadium \n", - "49 is the us womens soccer team in the world cup \n", - "\n", - " perturbed_context \\\n", - "0 ALL BIOMASS GOES THROUGH AT LEAST SOME OF THES... \n", - "1 PROPERTY TAX OR 'HOUSE TAX' IS A LOCAL TAX ON ... \n", - "2 PHANTOM PAIN SENSATIONS ARE DESCRIBED AS PERCE... \n", - "3 HARRY POTTER AND THE ESCAPE FROM GRINGOTTS IS ... \n", - "4 HYDROXYZINE PREPARATIONS REQUIRE A DOCTOR'S PR... \n", - "5 BARQ'S /ˈBⱭːRKS/ IS AN AMERICAN SOFT DRINK. IT... \n", - "6 IN MATHEMATICS, PARITY IS THE PROPERTY OF AN I... \n", - "7 OF THE 71 WORDS IN THIS LIST, 67 ARE NOUNS, AN... \n", - "8 PERSONS DRIVING INTO CANADA MUST HAVE THEIR VE... \n", - "9 THE KNOCKOUT STAGE OF THE 2018 FIFA WORLD CUP ... \n", - "10 IN RESPONSE TO THE NATIONAL MINIMUM DRINKING A... \n", - "11 BLOODLINE WAS ANNOUNCED IN OCTOBER 2014 AS PAR... \n", - "12 SHOWER GELS FOR MEN MAY CONTAIN THE INGREDIENT... \n", - "13 THE LIVER DETOXIFIES AND BREAKS DOWN CHEMICALS... \n", - "14 FANTASTIC BEASTS AND WHERE TO FIND THEM IS A 2... \n", - "15 THE VAMPIRE DIARIES, AN AMERICAN SUPERNATURAL ... \n", - "16 THE STRANGERS IS A 2008 AMERICAN SLASHER FILM ... \n", - "17 IN MARCH 2012 IT WAS ANNOUNCED THAT FOUR UNIVE... \n", - "18 THE RESIDENT IS AN AMERICAN MEDICAL DRAMA TELE... \n", - "19 MAGNESIUM CITRATE IS A MAGNESIUM PREPARATION I... \n", - "20 STREET ADDRESSING WILL HAVE THE SAME STREET AD... \n", - "21 A SPARK PLUG (SOMETIMES, IN BRITISH ENGLISH, A... \n", - "22 LADIES MAY WEAR A LONG (OVER THE SHOULDERS OR ... \n", - "23 RENUNCIATION OF U.S. CITIZENSHIP WAS FREE UNTI... \n", - "24 THE FIRE TABLET, FORMERLY CALLED THE KINDLE FI... \n", - "25 THE DRINKING AGE IN WISCONSIN IS 21. THOSE UND... \n", - "26 CONTOUR FEATHERS ARE NOT UNIFORMLY DISTRIBUTED... \n", - "27 A NEW ENGINE IS BROKEN IN BY FOLLOWING SPECIFI... \n", - "28 THE ENCHANTED FOREST IS AN AMUSEMENT PARK LOCA... \n", - "29 ON THE GROUNDS OF THE SPEEDWAY IS THE INDIANAP... \n", - "30 AS PART OF MARVEL'S MARVEL NOW! INITIATIVE A N... \n", - "31 BENSON & HEDGES IS A BRITISH BRAND OF CIGARETT... \n", - "32 THE COMMONWEALTH GOVERNMENT HAS ITS OWN TAX LA... \n", - "33 THE CRANK SENSOR CAN BE USED IN COMBINATION WI... \n", - "34 INDIANA JONES AND THE TEMPLE OF DOOM IS A 1984... \n", - "35 THE UNTITLED AVENGERS FILM, COLLOQUIALLY REFER... \n", - "36 ANNOUNCED IN APRIL 2000 AT THE NEW YORK AUTO S... \n", - "37 SINCE THE COPYRIGHT ACT OF 1909, UNITED STATES... \n", - "38 THE CARBON-HYDROGEN BOND (C--H BOND) IS A BOND... \n", - "39 IN 2011, PHILIP PULLMAN REMARKED AT THE BRITIS... \n", - "40 COLUMBUS DAY IS A NATIONAL HOLIDAY IN MANY COU... \n", - "41 NEW BALANCE MAINTAINS A MANUFACTURING PRESENCE... \n", - "42 U.S. HIGHWAY 20 (US 20) IS AN EAST--WEST UNITE... \n", - "43 TOMATO PURÉE IS A THICK LIQUID MADE BY COOKING... \n", - "44 ENGLISH ORTHOGRAPHY TYPICALLY REPRESENTS VOWEL... \n", - "45 TIPPING POINT IS A BRITISH TELEVISION GAME SHO... \n", - "46 THE TURKEY VULTURE (CATHARTES AURA), ALSO KNOW... \n", - "47 AS OF OCTOBER 2008, A CONDOR (FOUR UNDER PAR) ... \n", - "48 METLIFE STADIUM IS AN AMERICAN SPORTS STADIUM ... \n", - "49 AFTER THE DEFEAT IN THE 2016 OLYMPICS, THE USW... \n", - "\n", - " perturbed_question \\\n", - "0 DOES ETHANOL TAKE MORE ENERGY MAKE THAT PRODUCES \n", - "1 IS HOUSE TAX AND PROPERTY TAX ARE SAME \n", - "2 IS PAIN EXPERIENCED IN A MISSING BODY PART OR ... \n", - "3 IS HARRY POTTER AND THE ESCAPE FROM GRINGOTTS ... \n", - "4 IS THERE A DIFFERENCE BETWEEN HYDROXYZINE HCL ... \n", - "5 IS BARQ'S ROOT BEER A PEPSI PRODUCT \n", - "6 CAN AN ODD NUMBER BE DIVIDED BY AN EVEN NUMBER \n", - "7 IS THERE A WORD WITH Q WITHOUT U \n", - "8 CAN U DRIVE IN CANADA WITH US LICENSE \n", - "9 IS THERE A PLAY OFF FOR THIRD PLACE IN THE WOR... \n", - "10 CAN MINORS DRINK WITH PARENTS IN NEW YORK \n", - "11 IS THE SHOW BLOODLINE BASED ON A TRUE STORY \n", - "12 IS IT BAD TO WASH YOUR HAIR WITH SHOWER GEL \n", - "13 IS THE LIVER PART OF THE EXCRETORY SYSTEM \n", - "14 IS FANTASTIC BEASTS AND WHERE TO FIND THEM A P... \n", - "15 WILL THERE BE A SEASON 8 OF VAMPIRE DIARIES \n", - "16 WAS THE MOVIE STRANGERS BASED ON A TRUE STORY \n", - "17 IS DURHAM UNIVERSITY PART OF THE RUSSELL GROUP \n", - "18 IS THE TV SHOW THE RESIDENT OVER FOR THE SEASON \n", - "19 DOES MAGNESIUM CITRATE HAVE CITRIC ACID IN IT \n", - "20 DOES P O BOX COME BEFORE STREET ADDRESS \n", - "21 DOES A SPARK PLUG KEEP AN ENGINE RUNNING \n", - "22 IS A CAPE AND A CLOAK THE SAME \n", - "23 DOES IT COST MONEY TO RENOUNCE US CITIZENSHIP \n", - "24 IS A FIRE 7 THE SAME AS A KINDLE \n", - "25 CAN YOU DRINK ALCOHOL WITH YOUR PARENTS IN WIS... \n", - "26 DO PENGUINS HAVE FEATHERS ARISING FROM THE EPI... \n", - "27 DO YOU NEED TO BREAK IN A CAR \n", - "28 IS THE ENCHANTED FOREST IN OREGON STILL OPEN \n", - "29 IS THERE A GOLF COURSE AT THE INDY 500 \n", - "30 DOES DEADPOOL HAVE A KID IN THE COMICS \n", - "31 DO THEY STILL MAKE BENSON & HEDGES CIGARETTES \n", - "32 IS FEDERAL INCOME TAX THE SAME AS SOCIAL SECURITY \n", - "33 IS AN ENGINE SPEED SENSOR THE SAME AS A CRANKS... \n", - "34 IS INDIANA JONES TEMPLE OF DOOM A PREQUEL \n", - "35 IS THERE ANY NEXT PART OF AVENGERS INFINITY WAR \n", - "36 IS THE TOYOTA HIGHLANDER ON A TRUCK FRAME \n", - "37 IS IT LEGAL TO DO A COVER OF A SONG \n", - "38 CAN CARBON FORM POLAR COVALENT BONDS WITH HYDR... \n", - "39 IS THERE A SEQUEL TO THE MOVIE THE GOLDEN COMPASS \n", - "40 IS COLUMBUS DAY A NATIONAL HOLIDAY IN THE UNIT... \n", - "41 ARE NEW BALANCE AND NIKE THE SAME COMPANY \n", - "42 IS THERE AN INTERSTATE THAT GOES COAST TO COAST \n", - "43 IS PUREED TOMATOES THE SAME AS TOMATO SAUCE \n", - "44 CAN THERE BE A WORD WITHOUT A VOWEL \n", - "45 DOES ONLY THE WINNER GET MONEY ON TIPPING POINT \n", - "46 IS THERE SUCH A THING AS A TURKEY VULTURE \n", - "47 HAS ANYONE HIT A HOLE IN ONE ON A PAR 5 \n", - "48 DO THE JETS AND GIANTS SHARE A STADIUM \n", - "49 IS THE US WOMENS SOCCER TEAM IN THE WORLD CUP \n", - "\n", - " expected_result actual_result pass \n", - "0 False\\n) False False \n", - "1 False False True \n", - "2 True True True \n", - "3 True True True \n", - "4 True False False \n", - "5 False False True \n", - "6 False True False \n", - "7 True False False \n", - "8 False True False \n", - "9 True True True \n", - "10 True True True \n", - "11 False False True \n", - "12 Falseassistant\\n\\nThat's correct! Shower gels ... False False \n", - "13 True True True \n", - "14 True True True \n", - "15 True True True \n", - "16 True. True True \n", - "17 True True True \n", - "18 False False True \n", - "19 True True True \n", - "20 False False True \n", - "21 True True True \n", - "22 False False True \n", - "23 False True False \n", - "24 True False False \n", - "25 True True True \n", - "26 True True True \n", - "27 False False True \n", - "28 True True True \n", - "29 True True True \n", - "30 True True True \n", - "31 True True True \n", - "32 False False True \n", - "33 Falseassistant\\n\\nThe engine speed sensor and ... False False \n", - "34 True True True \n", - "35 True False False \n", - "36 False False True \n", - "37 True True True \n", - "38 Falseassistant\\n\\nContext: The carbon-hydrogen... False False \n", - "39 False False True \n", - "40 True True True \n", - "41 False False True \n", - "42 False False True \n", - "43 False False True \n", - "44 False True False \n", - "45 True True True \n", - "46 True True True \n", - "47 True True. False \n", - "48 True True True \n", - "49 True True True " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = harness.generated_results()\n", - "df[df['test_type'] == 'uppercase']" - ] - }, { "cell_type": "markdown", "metadata": { From 58d4715bfc8ab08b43f007c1d8cd8ab5df6e6157 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Fri, 20 Dec 2024 20:59:09 +0530 Subject: [PATCH 07/11] added new Visual_QA_II.ipynb --- .../llm_notebooks/Visual_QA_II.ipynb | 936 ++++++++++++++++++ 1 file changed, 936 insertions(+) create mode 100644 demo/tutorials/llm_notebooks/Visual_QA_II.ipynb diff --git a/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb b/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb new file mode 100644 index 000000000..1835b88a2 --- /dev/null +++ b/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb @@ -0,0 +1,936 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "D285OP467TeS" + }, + "source": [ + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_8dMBi8UNtg1" + }, + "source": [ + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/langtest/blob/main/demo/tutorials/llm_notebooks/Visual_QA.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_EzC6SKhjdk7" + }, + "source": [ + "**LangTest** is an open-source python library designed to help developers deliver safe and effective Natural Language Processing (NLP) models. Whether you are using **John Snow Labs, Hugging Face, Spacy** models or **OpenAI, Cohere, AI21, Hugging Face Inference API and Azure-OpenAI** based LLMs, it has got you covered. You can test any Named Entity Recognition (NER), Text Classification, fill-mask, Translation model using the library. We also support testing LLMS for Question-Answering, Visual question-answering, Summarization and text-generation tasks on benchmark datasets. The library supports 60+ out of the box tests. For a complete list of supported test categories, please refer to the [documentation](http://langtest.org/docs/pages/docs/test_categories).\n", + "\n", + "Metrics are calculated by comparing the model's extractions in the original list of sentences against the extractions carried out in the noisy list of sentences. The original annotated labels are not used at any point, we are simply comparing the model against itself in a 2 settings." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "v9Yd7KhpZOTF" + }, + "source": [ + "# Getting started with LangTest" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "kJ-dxTWu7bcA" + }, + "outputs": [], + "source": [ + "!pip install langtest==2.5.0" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cXOI5kBFlO6w" + }, + "source": [ + "# Harness and its Parameters\n", + "\n", + "The Harness class is a testing class for Natural Language Processing (NLP) models. It evaluates the performance of a NLP model on a given task using test data and generates a report with test results.Harness can be imported from the LangTest library in the following way." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "executionInfo": { + "elapsed": 4291, + "status": "ok", + "timestamp": 1692340616139, + "user": { + "displayName": "Prikshit sharma", + "userId": "07819241395213139913" + }, + "user_tz": -330 + }, + "id": "w1g27-uxl1AA" + }, + "outputs": [], + "source": [ + "#Import Harness from the LangTest library\n", + "from langtest import Harness" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PXBMpFHIl7n9" + }, + "source": [ + "It imports the Harness class from within the module, that is designed to provide a blueprint or framework for conducting NLP testing, and that instances of the Harness class can be customized or configured for different testing scenarios or environments.\n", + "\n", + "Here is a list of the different parameters that can be passed to the Harness function:\n", + "\n", + "
\n", + "\n", + "\n", + "\n", + "| Parameter | Description |\n", + "| - | - |\n", + "| **task** | Task for which the model is to be evaluated (Visual Question Answering) |\n", + "| **model** | Specifies the model(s) to be evaluated. This parameter can be provided as either a dictionary or a list of dictionaries. Each dictionary should contain the following keys:
  • model (mandatory): \tPipelineModel or path to a saved model or pretrained LLM pipeline/model from hub.
  • hub (mandatory): Hub (library) to use in back-end for loading model from public models hub or from path
|\n", + "| **data** | The data to be used for evaluation. A dictionary providing flexibility and options for data sources. It should include the following keys:
  • data_source (mandatory): The source of the data.
  • subset (optional): The subset of the data.
  • feature_column (optional): The column containing the features.
  • target_column (optional): The column containing the target labels.
  • split (optional): The data split to be used.
  • source (optional): Set to 'huggingface' when loading Hugging Face dataset.
|\n", + "| **config** | Configuration for the tests to be performed, specified in the form of a YAML file. |\n", + "\n", + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KLC_lBv09ZuN" + }, + "source": [ + "# Robustness Testing\n", + "\n", + "Model robustness can be described as the ability of a model to maintain similar levels of accuracy, precision, and recall when perturbations are made to the data it is predicting on. For example, In the case of images, the goal is to understand how modifications such as resizing, rotation, noise addition, or color adjustments affect the model's performance compared to the original images it was trained on.\n", + "\n", + "\n", + "**`Supported Robustness tests :`**
\n", + "\n", + "### Text\n", + "\n", + "| **Test Name** | **Short Description** |\n", + "|-------------------------------|----------------------------------------------------------------------------------------|\n", + "| **`uppercase`** | Capitalization of the text set is turned into uppercase |\n", + "| **`lowercase`** | Capitalization of the text set is turned into lowercase |\n", + "| **`titlecase`** | Capitalization of the text set is turned into title case |\n", + "| **`add_punctuation`** | Adds punctuation to the text set |\n", + "| **`strip_punctuation`** | Removes punctuation from the text set |\n", + "| **`add_typo`** | Introduces typographical errors into the text |\n", + "| **`swap_entities`** | Swaps named entities in the text |\n", + "| **`american_to_british`** | Converts American English spellings to British English |\n", + "| **`british_to_american`** | Converts British English spellings to American English |\n", + "| **`add_context`** | Adds additional context to the text set |\n", + "| **`add_contraction`** | Introduces contractions (e.g., do not → don't) |\n", + "| **`dyslexia_word_swap`** | Swaps words in a way that mimics dyslexic reading errors |\n", + "| **`number_to_word`** | Converts numbers to words in the text set (e.g., 1 → one) |\n", + "| **`add_ocr_typo`** | Adds optical character recognition (OCR) specific typos to the text |\n", + "| **`add_abbreviation`** | Replaces certain words with their abbreviations |\n", + "| **`add_speech_to_text_typo`** | Adds speech-to-text transcription errors |\n", + "| **`add_slangs`** | Introduces slang terms into the text |\n", + "| **`multiple_perturbations`** | Applies multiple perturbations to the text at once |\n", + "| **`adjective_synonym_swap`** | Swaps adjectives in the text with their synonyms |\n", + "| **`adjective_antonym_swap`** | Swaps adjectives in the text with their antonyms |\n", + "| **`strip_all_punctuation`** | Removes all punctuation from the text |\n", + "| **`randomize_age`** | Randomizes the age mentioned in the text |\n", + "| **`add_new_lines`** | Inserts new lines into the text set |\n", + "| **`add_tabs`** | Inserts tab characters into the text set |\n", + "\n", + "### Images\n", + "\n", + "| **Test Name** | **Short Description** |\n", + "|----------------------|--------------------------------------------------------|\n", + "| **`image_resize`** | Resizes the image to a different dimension |\n", + "| **`image_rotate`** | Rotates the image by a specified angle |\n", + "| **`image_blur`** | Applies a blur filter to the image |\n", + "| **`image_noise`** | Adds random noise to the image |\n", + "| **`image_contrast`** | Adjusts the contrast of the image |\n", + "| **`image_brightness`**| Adjusts the brightness of the image |\n", + "| **`image_sharpness`** | Adjusts the sharpness of the image |\n", + "| **`image_color`** | Adjusts the color balance of the image |\n", + "| **`image_flip`** | Flips the image either horizontally or vertically |\n", + "| **`image_crop`** | Crops a portion of the image |\n", + "|`image_translate` | Shifts the image horizontally or vertically to evaluate model robustness against translations.|\n", + "|`image_shear` | Applies a shearing transformation to test how the model handles distortions in perspective.|\n", + "|`image_black_spots` | Introduces random black spots to simulate damaged or obscured image regions.|\n", + "|`image_layered_mask` | Adds layers of masking to obscure parts of the image, testing recognition under occlusion.|\n", + "|`image_text_overlay` | Places text on the image to evaluate the model's resilience to textual interference.|\n", + "|`image_watermark` | Adds a watermark to test how the model performs with watermarked images.|\n", + "|`image_random_text_overlay` | Randomly places text at varying positions and sizes, testing model robustness to overlays.|\n", + "|`image_random_line_overlay` | Draws random lines over the image to check the model's tolerance for line obstructions.|\n", + "|`image_random_polygon_overlay` | Adds random polygons to the image, simulating graphical interference or shapes.|\n", + "\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cVIzXdGMjX47" + }, + "source": [ + "## Testing robustness of a pretrained LLM models\n", + "\n", + "Testing a LLM model's robustness gives us an idea on how our data may need to be modified to make the model more robust. We can use a pretrained model/pipeline or define our own custom pipeline or load a saved pre trained model to test.\n", + "\n", + "Here we are directly passing a pretrained model/pipeline from hub as the model parameter in harness and running the tests." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "78THAZm3cRu7" + }, + "source": [ + "### Test Configuration\n", + "\n", + "Test configuration can be passed in the form of a YAML file as shown below or using .configure() method\n", + "\n", + "\n", + "**Config YAML format** :\n", + "```\n", + "tests: \n", + " {\n", + " \"defaults\": {\n", + " \"min_pass_rate\": 0.5,\n", + " },\n", + " \"robustness\": {\n", + " \"image_noise\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"parameters\": {\n", + " \"noise_level\": 0.5\n", + " }\n", + "\n", + " },\n", + " \"image_rotate\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"parameters\": {\n", + " \"angle\": 45\n", + " }\n", + " },\n", + " \"image_blur\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"parameters\": {\n", + " \"radius\": 5\n", + " }\n", + " },\n", + " \"image_resize\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"parameters\": {\n", + " \"resize\": 0.5 # 0.01 to 1.0 means 1% to 100% of the original size\n", + " }\n", + " },\n", + " }\n", + " }\n", + " \n", + "```\n", + "\n", + "If config file is not present, we can also use the **.configure()** method to manually configure the harness to perform the needed tests.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "os.environ['OPENAI_API_KEY'] = \"sk-XXXXXXXX\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visual Question Answering (VQA)\n", + "\n", + "This notebook demonstrates how to perform a Visual Question Answering (VQA) using the `PIL` library to load images and a harness for running the task. The model being used is `gpt-4o-mini` from the OpenAI hub, and the data comes from the MMMU dataset, specifically the `Clinical_Medicine` subset." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from langtest.types import HarnessConfig\n", + "\n", + "test_config : HarnessConfig = {\n", + " \"evaluation\": {\"metric\":\"llm_eval\",\"model\":\"gpt-4o-mini\",\"hub\":\"openai\"},\n", + " \"tests\": {\n", + " \"defaults\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"user_prompt\": \"{question}?\\n {options}\\n\",\n", + " },\n", + " \"robustness\": {\n", + " \"image_random_line_overlay\": {\n", + " \"min_pass_rate\": 0.5,\n", + " },\n", + " \"image_random_polygon_overlay\": {\n", + " \"min_pass_rate\": 0.5,\n", + " },\n", + " \"image_random_text_overlay\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"parameters\": {\n", + " \"color\": [123, 144, 123],\n", + " \"opacity\": 0.8\n", + " }\n", + " },\n", + " \"image_watermark\": {\n", + " \"min_pass_rate\": 0.5,\n", + " },\n", + " }\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Resolving data files: 100%|██████████| 60/60 [00:03<00:00, 18.17it/s]\n", + "Resolving data files: 100%|██████████| 32/32 [00:01<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Configuration : \n", + " {\n", + " \"evaluation\": {\n", + " \"metric\": \"llm_eval\",\n", + " \"model\": \"gpt-4o-mini\",\n", + " \"hub\": \"openai\"\n", + " },\n", + " \"tests\": {\n", + " \"defaults\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"user_prompt\": \"{question}?\\n {options}\\n\"\n", + " },\n", + " \"robustness\": {\n", + " \"image_random_line_overlay\": {\n", + " \"min_pass_rate\": 0.5\n", + " },\n", + " \"image_random_polygon_overlay\": {\n", + " \"min_pass_rate\": 0.5\n", + " },\n", + " \"image_random_text_overlay\": {\n", + " \"min_pass_rate\": 0.5,\n", + " \"parameters\": {\n", + " \"color\": [\n", + " 123,\n", + " 144,\n", + " 123\n", + " ],\n", + " \"opacity\": 0.8\n", + " }\n", + " },\n", + " \"image_watermark\": {\n", + " \"min_pass_rate\": 0.5\n", + " }\n", + " }\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "from langtest import Harness\n", + "\n", + "harness = Harness(\n", + " task=\"visualqa\",\n", + " model={\n", + " \"model\": \"gpt-4o-mini\",\n", + " \"hub\": \"openai\"\n", + " },\n", + " data={\"data_source\": 'MMMU/MMMU',\n", + " \"subset\": \"Art\",\n", + " \"split\": \"dev\",\n", + " \"source\": \"huggingface\"\n", + " },\n", + " config=test_config\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jGEN7Q0Ric8H" + }, + "source": [ + "We can use the .configure() method to manually define our test configuration for the robustness tests." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 'image_shear',\n", + "# 'image_black_spots',\n", + "# 'image_layered_mask',\n", + "# 'image_text_overlay',\n", + "# 'image_watermark',\n", + "# 'image_random_text_overlay',\n", + "# 'image_random_line_overlay',\n", + "# 'image_random_polygon_overlay'" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FLLzeE_Pix2W" + }, + "source": [ + "Here we have configured the harness to perform image robustness tests (image_blur, image_resize, image_rotate, and image_noise) and defined the minimum pass rate for each test." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To ensure we work with a smaller subset of data, we'll limit the dataset to the first 50 entries. This is useful for faster prototyping and testing without needing to process the entire dataset.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "harness.data = harness.data[:1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this section, we will reset the test cases in the `Harness` object by setting `harness._testcases` to `None`. This can be useful if you want to clear any previously loaded test cases or start fresh without any predefined cases.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "harness._testcases = None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MomLlmTwjpzU" + }, + "source": [ + "\n", + "### Generating the test cases.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 23034, + "status": "ok", + "timestamp": 1692340496325, + "user": { + "displayName": "Prikshit sharma", + "userId": "07819241395213139913" + }, + "user_tz": -330 + }, + "id": "njyA7h_tfMVo", + "outputId": "481382ae-630d-4c62-d6d8-c8108982df89" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating testcases...: 100%|██████████| 1/1 [00:00\n", + " \n", + " \n", + " \n", + " category\n", + " test_type\n", + " original_image\n", + " perturbed_image\n", + " question\n", + " options\n", + " \n", + " \n", + " \n", + " \n", + " 8\n", + " robustness\n", + " image_random_polygon_overlay\n", + " \n", + " \n", + " This William Lamb bronze sculpture of is of Angus poet Violet Jacob. Which of her poems was set to music by Jim Reid and performed and recorded by various other musicians, including Battlefield Band, Malinky, and Frightened Rabbit with Lau and Jim Malcolm?\n", + " A. Glory\\nB. The Wild Geese\\nC. The Field by the Lirk o' the Hill\\nD. The Rowan\n", + " \n", + " \n", + " 19\n", + " robustness\n", + " image_watermark\n", + " \n", + " \n", + " Who created ?\n", + " A. MICHELANGELO BUONARROTI\\nB. TITIAN\\nC. LUCAS VAN LEYDEN\\nD. LEONARDO DA VINCI\n", + " \n", + " \n", + " 5\n", + " robustness\n", + " image_random_polygon_overlay\n", + " \n", + " \n", + " by Mark Gertler can be found in the Touchstones Rochdale museum. Which artist belonging to the Bloomsbury group was Gertler in a relationship with?\n", + " A. Vanessa Bell\\nB. Eileen Agar\\nC. Dora Carrington\\nD. Leonora Carrington\n", + " \n", + " \n", + " 2\n", + " robustness\n", + " image_random_line_overlay\n", + " \n", + " \n", + " was coined?\n", + " A. Agnew Clinic\\nB. I and the Village\\nC. Five Bathing Women at a Lake\\nD. Skull with Burning Cigarette\n", + " \n", + " \n", + " 10\n", + " robustness\n", + " image_random_text_overlay\n", + " \n", + " \n", + " by Mark Gertler can be found in the Touchstones Rochdale museum. Which artist belonging to the Bloomsbury group was Gertler in a relationship with?\n", + " A. Vanessa Bell\\nB. Eileen Agar\\nC. Dora Carrington\\nD. Leonora Carrington\n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display, HTML\n", + "\n", + "\n", + "df = harness.testcases()\n", + "html=df.sample(5).to_html(escape=False)\n", + "\n", + "display(HTML(html))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fRyNPRBokXNZ" + }, + "source": [ + "### Running the tests." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 68268, + "status": "ok", + "timestamp": 1692340564519, + "user": { + "displayName": "Prikshit sharma", + "userId": "07819241395213139913" + }, + "user_tz": -330 + }, + "id": "3kUPTsNvjkgr", + "outputId": "4c4815e4-4cab-4dbf-99ba-1a231656f1e3" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Running testcases... : 100%|██████████| 20/20 [00:47<00:00, 2.37s/it]\n" + ] + }, + { + "data": { + "text/plain": [] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "harness.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "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", + "
categorytest_typeoriginal_imageperturbed_imagequestionoptionsexpected_resultactual_resultpass
17robustnessimage_watermark was coined?A. Agnew Clinic\\nB. I and the Village\\nC. Five Bathing Women at a Lake\\nD. Skull with Burning CigaretteAnswer: A. Agnew Clinic.Answer: A. Agnew Clinic.True
15robustnessimage_watermark by Mark Gertler can be found in the Touchstones Rochdale museum. Which artist belonging to the Bloomsbury group was Gertler in a relationship with?A. Vanessa Bell\\nB. Eileen Agar\\nC. Dora Carrington\\nD. Leonora CarringtonAnswer: C. Dora Carrington.Answer: C. Dora Carrington.True
4robustnessimage_random_line_overlayWho created ?A. MICHELANGELO BUONARROTI\\nB. TITIAN\\nC. LUCAS VAN LEYDEN\\nD. LEONARDO DA VINCIAnswer: C. LUCAS VAN LEYDEN.Answer: UnRecognizable.False
16robustnessimage_watermarkWhich image was generated by AI on ?A. The left one.\\nB. The right one.\\nC. Both images\\nD. Neither imageAnswer: UnRecognizable.Answer: UnRecognizable.True
14robustnessimage_random_text_overlayWho created ?A. MICHELANGELO BUONARROTI\\nB. TITIAN\\nC. LUCAS VAN LEYDEN\\nD. LEONARDO DA VINCIAnswer: C. LUCAS VAN LEYDEN.Answer: B. TITIAN.False
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display, HTML\n", + "\n", + "\n", + "df = harness.generated_results()\n", + "html=df.sample(5).to_html(escape=False)\n", + "\n", + "display(HTML(html))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Called after harness.generate() and is to used to run all the tests. Returns a pass/fail flag for each test." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "106TE41ffw43" + }, + "source": [ + "This method returns the generated results in the form of a pandas dataframe, which provides a convenient and easy-to-use format for working with the test results. You can use this method to quickly identify the test cases that failed and to determine where fixes are needed." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_0gnozMlkoF0" + }, + "source": [ + "### Report of the tests" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 112 + }, + "executionInfo": { + "elapsed": 22, + "status": "ok", + "timestamp": 1692340564522, + "user": { + "displayName": "Prikshit sharma", + "userId": "07819241395213139913" + }, + "user_tz": -330 + }, + "id": "YKFvMs0RGHO7", + "outputId": "3a0ed33b-aa59-4e98-86d0-8d407391b0e4" + }, + "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", + "
categorytest_typefail_countpass_countpass_rateminimum_pass_ratepass
0robustnessimage_random_line_overlay1480%50%True
1robustnessimage_random_polygon_overlay1480%50%True
2robustnessimage_random_text_overlay1480%50%True
3robustnessimage_watermark1480%50%True
\n", + "
" + ], + "text/plain": [ + " category test_type fail_count pass_count pass_rate \\\n", + "0 robustness image_random_line_overlay 1 4 80% \n", + "1 robustness image_random_polygon_overlay 1 4 80% \n", + "2 robustness image_random_text_overlay 1 4 80% \n", + "3 robustness image_watermark 1 4 80% \n", + "\n", + " minimum_pass_rate pass \n", + "0 50% True \n", + "1 50% True \n", + "2 50% True \n", + "3 50% True " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "harness.report()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bSP2QL6agTH_" + }, + "source": [ + "Called after harness.run() and it summarizes the results giving information about pass and fail counts and overall test pass/fail flag." + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "machine_shape": "hm", + "provenance": [], + "toc_visible": true + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": ".venv", + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 9911e8b63a8ad55398aafdd813226b99a45e40d5 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Fri, 20 Dec 2024 21:00:18 +0530 Subject: [PATCH 08/11] fix: update Colab link in Visual_QA_II notebook to point to the correct file --- demo/tutorials/llm_notebooks/Visual_QA_II.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb b/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb index 1835b88a2..63db075c3 100644 --- a/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb +++ b/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb @@ -15,7 +15,7 @@ "id": "_8dMBi8UNtg1" }, "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/langtest/blob/main/demo/tutorials/llm_notebooks/Visual_QA.ipynb)" + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/langtest/blob/main/demo/tutorials/llm_notebooks/Visual_QA_II.ipynb)" ] }, { From 417615fde2b5cf30fee5be7e755eeb4e88e34318 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Mon, 23 Dec 2024 16:12:54 +0530 Subject: [PATCH 09/11] added the nb for custom chat template config. --- .../misc/Custom_Chat_Template_Config.ipynb | 5628 +++++++++++++++++ 1 file changed, 5628 insertions(+) create mode 100644 demo/tutorials/misc/Custom_Chat_Template_Config.ipynb diff --git a/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb b/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb new file mode 100644 index 000000000..98cabca51 --- /dev/null +++ b/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb @@ -0,0 +1,5628 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "RjtA1DX7JRu0" + }, + "source": [ + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qWojNqYdJRu1" + }, + "source": [ + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/langtest/blob/main/demo/tutorials/misc/Evaluation_with_Prometheus_Eval.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QcwSBeldJRu1" + }, + "source": [ + "**LangTest** is an open-source python library designed to help developers deliver safe and effective Natural Language Processing (NLP) models. Whether you are using **John Snow Labs, Hugging Face, Spacy** models or **OpenAI, Cohere, AI21, Hugging Face Inference API and Azure-OpenAI** based LLMs, it has got you covered. You can test any Named Entity Recognition (NER), Text Classification, fill-mask, Translation model using the library. We also support testing LLMS for Question-Answering, Summarization and text-generation tasks on benchmark datasets. The library supports 100+ out of the box tests. For a complete list of supported test categories, please refer to the [documentation](http://langtest.org/docs/pages/docs/test_categories).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XraTGbPIJRu1" + }, + "source": [ + "# Getting started with LangTest" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sqKQ_oqsJRu1", + "outputId": "5d4ef3f6-4f34-4c5f-c31f-226451c824b7" + }, + "outputs": [], + "source": [ + "!pip install \"langtest[openai,transformers]==2.5.0\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ya7HhnfkJRu2" + }, + "source": [ + "# Harness and Its Parameters\n", + "\n", + "The Harness class is a testing class for Natural Language Processing (NLP) models. It evaluates the performance of a NLP model on a given task using test data and generates a report with test results.Harness can be imported from the LangTest library in the following way." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "ykYY6xRkJRu2" + }, + "outputs": [], + "source": [ + "# Import Harness from the LangTest library\n", + "from langtest import Harness" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vp2S8oz6JRu2" + }, + "source": [ + "It imports the Harness class from within the module, that is designed to provide a blueprint or framework for conducting NLP testing, and that instances of the Harness class can be customized or configured for different testing scenarios or environments.\n", + "\n", + "Here is a list of the different parameters that can be passed to the Harness function:\n", + "\n", + "
\n", + "\n", + "\n", + "| Parameter | Description | \n", + "| - | - |\n", + "|**task** |Task for which the model is to be evaluated (question-answering or summarization)|\n", + "| **model** | Specifies the model(s) to be evaluated. This parameter can be provided as either a dictionary or a list of dictionaries. Each dictionary should contain the following keys:
  • model (mandatory): \tPipelineModel or path to a saved model or pretrained pipeline/model from hub.
  • hub (mandatory): Hub (library) to use in back-end for loading model from public models hub or from path
|\n", + "| **data** | The data to be used for evaluation. A dictionary providing flexibility and options for data sources. It should include the following keys:
  • data_source (mandatory): The source of the data.
  • subset (optional): The subset of the data.
  • feature_column (optional): The column containing the features.
  • target_column (optional): The column containing the target labels.
  • split (optional): The data split to be used.
  • source (optional): Set to 'huggingface' when loading Hugging Face dataset.
|\n", + "| **config** | Configuration for the tests to be performed, specified in the form of a YAML file. |\n", + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rWiVRiGoJRu2" + }, + "source": [ + "## Robustness testing of LLMs with LangTest\n", + "\n", + "Robustness testing aims to evaluate the ability of a model to maintain consistent performance when faced with various perturbations or modifications in the input data. For LLMs, this involves understanding how changes in capitalization, punctuation, typos, contractions, and contextual information affect their prediction performance.\n", + "\n", + "For our evaluation metric, we employ a two-layer method where the comparison between the expected_result and actual_result is conducted" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4LAtLTMMJRu2" + }, + "source": [ + "## Configuration of Custom Chat Template\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lWpVaP1cKMJq" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "\n", + "os.environ[\"HUGGINGFACE_API_KEY\"] = \"\"\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "meta_template = \"\"\"\n", + "{{- bos_token }}\\n\n", + "\n", + "{%- if messages[0]['role'] == 'system' %} \n", + " {%- set system_message = messages[0]['content']|trim %} \n", + " {%- set messages = messages[1:] %} \n", + "{%- else %} \n", + " {%- set system_message = \"You are a helpful assistant. Provide a short answer based on the given context and question in plain text.\" %} \n", + "{%- endif %}\n", + "\n", + "{#- System message #}\n", + "{{- \"<|start_header_id|>system<|end_header_id|>\\\\n\" }}\n", + "{{- system_message }}\n", + "{{- \"<|eot_id|>\" }}\n", + "\n", + "{%- for message in messages %} \n", + " {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n' + message['content'] | trim + '<|eot_id|>' }} \n", + "{%- endfor %} \n", + "{{- '<|start_header_id|>assistant<|end_header_id|>\\\\n' }}\n", + "\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "prompt_config = {\n", + " \"NQ-open\": {\n", + " \"prompt_type\": \"chat\",\n", + " \"instructions\": \"Write a short answer based on the given context and question in plain text.\",\n", + " \"user_prompt\": \"You are a helpful assistant. Provide a short answer based on the given context and question.\\n {question}\",\n", + " \"examples\": [{\n", + " \"user\": {\n", + " \"question\": \"What is the capital of France?\",\n", + " \"context\": \"France is a country in Europe.\"\n", + " },\n", + " \"ai\": {\n", + " \"answer\": \"Paris\"\n", + " }\n", + " }]\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from langtest.types import HarnessConfig\n", + "\n", + "\n", + "test_config: HarnessConfig = {\n", + " \"evaluation\": {\n", + " \"metric\": \"llm_eval\",\n", + " \"model\": \"gpt-4o\",\n", + " \"hub\": \"openai\",\n", + " },\n", + " \"prompt_config\": prompt_config,\n", + " \"model_parameters\": {\n", + " \"chat_template\": meta_template,\n", + " \"max_tokens\": 50,\n", + " \"task\": \"text-generation\",\n", + " \"device\": 0, # Use GPU 0\n", + " },\n", + " \"tests\": {\n", + " \"defaults\": {\n", + " \"min_pass_rate\": 0.6,\n", + " },\n", + " \"robustness\": {\n", + " \"uppercase\": {\n", + " \"min_pass_rate\": 0.7,\n", + " },\n", + " \"add_slangs\": {\n", + " \"min_pass_rate\": 0.7,\n", + " },\n", + " \"add_ocr_typo\": {\n", + " \"min_pass_rate\": 0.7,\n", + " },\n", + " },\n", + " }\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f468Jkz6JRu2" + }, + "source": [ + "### Harness setup" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZXPvqFjtJRu2", + "outputId": "fc789a2d-4a7f-4961-a3e6-03c0cd0e513d" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading checkpoint shards: 100%|██████████| 2/2 [00:05<00:00, 2.90s/it]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Configuration : \n", + " {\n", + " \"evaluation\": {\n", + " \"metric\": \"llm_eval\",\n", + " \"model\": \"gpt-4o\",\n", + " \"hub\": \"openai\"\n", + " },\n", + " \"prompt_config\": {\n", + " \"NQ-open\": {\n", + " \"prompt_type\": \"chat\",\n", + " \"instructions\": \"Write a short answer based on the given context and question in plain text.\",\n", + " \"user_prompt\": \"You are a helpful assistant. Provide a short answer based on the given context and question.\\n {question}\",\n", + " \"examples\": [\n", + " {\n", + " \"user\": {\n", + " \"question\": \"What is the capital of France?\",\n", + " \"context\": \"France is a country in Europe.\"\n", + " },\n", + " \"ai\": {\n", + " \"answer\": \"Paris\"\n", + " }\n", + " }\n", + " ]\n", + " }\n", + " },\n", + " \"model_parameters\": {\n", + " \"chat_template\": \"\\n{{- bos_token }}\\n\\n\\n{%- if messages[0]['role'] == 'system' %} \\n {%- set system_message = messages[0]['content']|trim %} \\n {%- set messages = messages[1:] %} \\n{%- else %} \\n {%- set system_message = \\\"You are a helpful assistant. Provide a short answer based on the given context and question in plain text.\\\" %} \\n{%- endif %}\\n\\n{#- System message #}\\n{{- \\\"<|start_header_id|>system<|end_header_id|>\\\\n\\\" }}\\n{{- system_message }}\\n{{- \\\"<|eot_id|>\\\" }}\\n\\n{%- for message in messages %} \\n {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n' + message['content'] | trim + '<|eot_id|>' }} \\n{%- endfor %} \\n{{- '<|start_header_id|>assistant<|end_header_id|>\\\\n' }}\\n\\n\",\n", + " \"max_tokens\": 50,\n", + " \"task\": \"text-generation\",\n", + " \"device\": 0\n", + " },\n", + " \"tests\": {\n", + " \"defaults\": {\n", + " \"min_pass_rate\": 0.6\n", + " },\n", + " \"robustness\": {\n", + " \"uppercase\": {\n", + " \"min_pass_rate\": 0.7\n", + " },\n", + " \"add_slangs\": {\n", + " \"min_pass_rate\": 0.7\n", + " },\n", + " \"add_ocr_typo\": {\n", + " \"min_pass_rate\": 0.7\n", + " }\n", + " }\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "from langtest import Harness\n", + "\n", + "harness = Harness(\n", + " task=\"question-answering\",\n", + " model={\n", + " \"model\": \"meta-llama/Llama-3.2-3B-Instruct\", \n", + " \"hub\": \"huggingface\",\n", + " \"type\": \"chat\",\n", + " },\n", + " data={\"data_source\": \"NQ-open\",\n", + " \"split\": \"test-tiny\"},\n", + " config=test_config,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ECj0-NG6JRu3" + }, + "source": [ + "**Note**\n", + "- you can change the metric in the `config.yaml` file that is saved in the `saved_model_reponse` folder or you can change the configiration using `harness.configure()` method like shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "harness._testcases = None" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LVTsGNkWJRu3", + "outputId": "b45b2f62-2837-4663-ae8b-549632ff2748" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generating testcases...: 100%|██████████| 1/1 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
categorytest_typeoriginal_questionperturbed_question
0robustnessuppercaseon the 6th day of christmas my true love sent ...ON THE 6TH DAY OF CHRISTMAS MY TRUE LOVE SENT ...
1robustnessuppercasehow many 5 star generals are there in the usHOW MANY 5 STAR GENERALS ARE THERE IN THE US
2robustnessuppercasewho killed natalie and ann in sharp objectsWHO KILLED NATALIE AND ANN IN SHARP OBJECTS
3robustnessuppercasehow many costco locations are there in the usHOW MANY COSTCO LOCATIONS ARE THERE IN THE US
4robustnessuppercasewho played grand moff tarkin in rogue oneWHO PLAYED GRAND MOFF TARKIN IN ROGUE ONE
...............
104robustnessadd_ocr_typowho has the most followers on the twitterivho has tlie moft followers on the twitter
105robustnessadd_ocr_typowho said it's not what your country can do for...avho said it's n^ot vhat y0ur couutry c^an do ...
106robustnessadd_ocr_typowhen does lil wayne new album drop 2018ivhen does lil wayne n^ew album drop 2018
107robustnessadd_ocr_typothe khajuraho temples are especially well know...tbe khajuraho temples are efpecially w^ell kno...
108robustnessadd_ocr_typowhen does the regular nba basketball season startv\\hen does tlic regular nba basketball scason ...
\n", + "

109 rows × 4 columns

\n", + "" + ], + "text/plain": [ + " category test_type \\\n", + "0 robustness uppercase \n", + "1 robustness uppercase \n", + "2 robustness uppercase \n", + "3 robustness uppercase \n", + "4 robustness uppercase \n", + ".. ... ... \n", + "104 robustness add_ocr_typo \n", + "105 robustness add_ocr_typo \n", + "106 robustness add_ocr_typo \n", + "107 robustness add_ocr_typo \n", + "108 robustness add_ocr_typo \n", + "\n", + " original_question \\\n", + "0 on the 6th day of christmas my true love sent ... \n", + "1 how many 5 star generals are there in the us \n", + "2 who killed natalie and ann in sharp objects \n", + "3 how many costco locations are there in the us \n", + "4 who played grand moff tarkin in rogue one \n", + ".. ... \n", + "104 who has the most followers on the twitter \n", + "105 who said it's not what your country can do for... \n", + "106 when does lil wayne new album drop 2018 \n", + "107 the khajuraho temples are especially well know... \n", + "108 when does the regular nba basketball season start \n", + "\n", + " perturbed_question \n", + "0 ON THE 6TH DAY OF CHRISTMAS MY TRUE LOVE SENT ... \n", + "1 HOW MANY 5 STAR GENERALS ARE THERE IN THE US \n", + "2 WHO KILLED NATALIE AND ANN IN SHARP OBJECTS \n", + "3 HOW MANY COSTCO LOCATIONS ARE THERE IN THE US \n", + "4 WHO PLAYED GRAND MOFF TARKIN IN ROGUE ONE \n", + ".. ... \n", + "104 ivho has tlie moft followers on the twitter \n", + "105 avho said it's n^ot vhat y0ur couutry c^an do ... \n", + "106 ivhen does lil wayne n^ew album drop 2018 \n", + "107 tbe khajuraho temples are efpecially w^ell kno... \n", + "108 v\\hen does tlic regular nba basketball scason ... \n", + "\n", + "[109 rows x 4 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "harness.testcases()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_b2JmoWcJRu3" + }, + "source": [ + "### Run the tests on the Model" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "svVdBzCpJRu3", + "outputId": "1912712b-bc95-450b-c2b6-c5354fcec6fb" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Running testcases... : 100%|██████████| 109/109 [04:56<00:00, 2.72s/it]\n" + ] + }, + { + "data": { + "text/plain": [] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "harness.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2djcUZhzJRu3" + }, + "source": [ + "### Generated Results\n", + "we can observe the feedback from prometheus eval model for why it was false or true." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 433, + "referenced_widgets": [ + "b4a0a06478044fea82d3f672aa460bf1", + "58f652b3eedf4c05b60a2758610ee662", + "b3bb46a8c95b47f8a0867fe99f97a81b", + "fac656358df943699cfab99689cbfbbd", + "4ae6653eea094cbb8469435ff89c252e", + "aeba8e97c56549c1ac5a1d6244f6d311", + "0b34499bce77483d8107decaa2ec142d", + "da58f3e813ff4cc6ae11159e52f6260c", + "d9c0e1b3a97448db9e395020ba3e1fd2", + "1d7418cdcff143c7a9b43208c5b96a2d", + "ded30e826d2147e691c0c27c2ff456e9", + "b6501e26637047eeb547edff1196312f", + "6cd105e598014944854550ac1973799b", + "ba0c40cb5bf34fb7a84ffb12fc760ffd", + "64bdea28f82048bd82b01d5321aee5e5", + "62bc0a0429ea477597ddcbc155ccb654", + "6db91b4a4a9846bcb46850f80169abcd", + "193264b54f744b849ff5a542ea41feac", + "c90972602f0f43d5aa6bb274bfa262f3", + "9adbe348bf8c4f53a1496e68d9813c60", + "ff77447e32304b29851f12ca765c46cf", + "8119d15e2f984243bc1bef3dd5a24dea", + "fd3954fc66f943b28ad5760ce59cd8d0", + "4ade8cf94e4a4214bebd1073277d6bdb", + "507faae4873e4962a31bbc8cd92c8c06", + "5db42c7fb58b4a8ba4833914e90abdc3", + "49d89b68a5774b5599528ed28c720a59", + "55ea157f8b3e43088796779b9656422d", + "79d01435cba3480ca51d5499b97ef9a4", + "27cff070f15f42429e47a5eb9ae3ef72", + "ebd563795bf94fc4a132a2acf33e79ca", + "dc7312ead64e403696e762ac626536bf", + "20fa9a255dc5462ab4d50709d2947bfc", + "77c378929d524e1ebeb93f6aab439d5e", + "7b0c1201e42d43cca95e42a3c8cf14e4", + "2248a37e0cda46339125b85d72d9a4b5", + "32e1603d273844979831b74fad446f8f", + "9bac0192a83e4800b134f89859094ee4", + "26789a7ec9474dfda0b4432f6cdfa631", + "b0ba7646d1f2487fa40a68389d2c2bcf", + "ae4be4b9f72c49e5acf3c63cd2c515c3", + "a5beda6d192a42388b535e720b725cf3", + "0b196a443d00448bbdd7fefb7ae6437f", + "dd7b05718e0742eb85677a7397fa03fe", + "2105d75daabe4c3e8b198f829578cb53", + "16f70fa48041481fa3334717aa51d537", + "50aeaeaa1ec84ab09787007ba80f5d8a", + "be3bdd84d931413a8408d8915b82901e", + "38a936bb93484847b5b4c525034da8b5", + "cbdd0480a9d44b91b01ee5fe78255b62", + "c3d44dc2ec394fdcbb0afd52f54ab296", + "9319fd287c0a42c78152288cb9b27cae", + "8137c77c49b34d06ad9394ca09fc0478", + "18287963bb124e24af1ec8299e09daba", + "8cca65d00167431bafd929a404efdb42", + "ac54c7d7e6bd47b9bf4137c662f81c80", + "64cd88dac2c54098862ae1c47641548a", + "e80035a019be44f1a0056d4ad6387ecf", + "0acdcae865f3467fbb52ad8d2515f41d", + "7c3280254b524cf788da90b8ce3e3d39", + "b6c747a7b36341ab85de8f7c24ed54e4", + "da80f2f2ebed45cdb9ea497305273e45", + "7b0b1baba4f7456f823c8ae6f75081ec", + "d2b391e1b63147839ae4e8934ae6bbbc", + "4603f0bdd40f4e83b6a9d30b5ab9c2e5", + "f990262e9a2c400ba2fdad56bcf3221c", + "b83580b34ef0421ab8ed9eab044dc041", + "79eb7ae890be495aa1348418576ff1d6", + "00202d18bc0f44918541e34224e9fd87", + "92bc54b1ce6e4579ab7db9edda9615d5", + "ca83ff2aa6c54380af3a236ddb5eb0cd", + "a7d66918b5894de89159dc4aa54f164f", + "40646acea22c493b92e958db37475450", + "5ada7d91204b4f23898b5559778b9ab4", + "bf84f275bcd54e2bb9f83eeae5246325", + "432e9d196f7e4d6fbb02321abf199493", + "57e6e7ba744e44cabbf82c58c402e71b", + "9714c566b95b4a3bbd6c17437c249d67", + "b43e74c5ac1d4894ae96152fb188c405", + "a298510418864a8db3d816afb39d41f5", + "a80c25cf86a34b218edb2fae4bf79b20", + "2f46f71b15ca4afc980d8654adf3588e", + "504c042607a64075b5e47b9bdd2376ce", + "69ade43873bf4acdb2473e4036092d80", + "b87fdc4a034e4feea83b7a6bfae45bb6", + "3427ce38ba4a437cae8ef5cfb6532efe", + "97a7cfe2b0a640b7a97b319ca2a5c519", + "a8b18bd1b2f04eae88d92aedfe38a2c5", + "dd2684f210f647dca2629243d388531b", + "f7f1239379af425da5c6f124ff50e72d", + "048e50c201384cf5b12c96f279d34b08", + "a6393621a71d4caea0d8bc5527649fb1", + "c0c66adb276d45daabc8527cd675bc3f", + "169514c5f44b4be8a8ea2398d857570e", + "710267f29675425b826a22f19702b2ea", + "c69b69dcdc564574b793e47dc981394c", + "cdd4abf349df42eca1cc366eddc3014f", + "daaa645104d64fbcb15b7994097fd143", + "3058e15058a7476087de686f2b1ef694", + "16d67a195b004a47b6dc6284bceef4d3", + "92e1e8f40d544ded9946973fbe1cc043", + "23536bdcf46f456e93c2477ef8e6ed57", + "c784848a7b9e40238a59b71d57ac83e9", + "953b0c2177ec49c088c9699b426a79b2", + "ac6851c2c9d94239a2ffc5df9ef4a412", + "ab9edb0fc72b444cb0f86dba7a52c493", + "d13c99e9cbb143d58db03128f862a4a9", + "9e427e1da40b4be0acb876f8c1be8148", + "83b1a890bb6e40b29cb9842a0a75ddd6", + "ed7a7df5be87428b9e62c4f62f1678d6", + "2521c2bcf7b5458c8870623fc98a7715", + "b5f0c1244a7542de8b9ded413961fd8a", + "200a46790dd24d6893e2a7e42f2ec527", + "a8fd5cc5333840cba1ed31987acc5c16", + "a002ef506d55402aaa8db082c0d50416", + "53296baccc904481b48035ffdca0fea3", + "ecfd9bcb5c894f52929de3df9a172873", + "f53befa0aae3484780af259d9b0ea42e", + "4a2b367ad0494b8cb6acbfe7904a183b", + "1642508b77434cd4aa5c8791c4db51bc", + "af036aca77844d5ab3ef35dfb57f8453", + "104e213aacd24543b296122838d01d2f", + "bdc94ba640d94c758877329f0e8997fd", + "40c0b6f8bc3048a7a42f83548734855b", + "af22a07c72c74159b199741a37c773ca", + "42ce5b7625014dc48f85ea9c381b675e", + "d5df230d943343208754df65295dd442", + "e378472bc2a54402b00d26531cff1755", + "0b488bd1f3144ebdab8102730caada65", + "e20b3b106373472c80c1905bb8341f41", + "2120a823551848c5a44ddadf881c42c2", + "03b7b0a5f60442a3b7f738859993cd4b", + "6c7446f8623645ea8b236e4f025ea178", + "88db08fd4f7f4b0b9c7e751419dc8378", + "94b3a2393a5d458486a13be2b36f83fe", + "fbfa67af178b41a78cfb9f7ca893575a", + "596356b148fc4d3b8976160dc918f897", + "43ab6cf5f4b24b208086ed8f11e599e9", + "8bd88d7d6adf4ab3822bf5c9f5c27faa", + "04e350601e33431eb3de0171c62a38f6", + "8cf75dbcbb3f449fb0e5b8c20ccc0197", + "33cea102c7524835a4088913e0687d2d", + "ab46c90f8ac3499ab18ee45ff0c4d0dc" + ] + }, + "id": "hwYYNGoYJRu3", + "outputId": "0cbdde42-a661-4003-edfb-c2b240e0de45" + }, + "outputs": [], + "source": [ + "df = harness.generated_results()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "pd.set_option('display.max_colwidth', None)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 320 + }, + "id": "ySEqGMcNRvW-", + "outputId": "7e23152c-3652-4e6a-8c5e-4c107a63d8ea" + }, + "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", + "
categorytest_typeoriginal_questionperturbed_questionexpected_resultactual_resultpass
0robustnessuppercaseon the 6th day of christmas my true love sent to meON THE 6TH DAY OF CHRISTMAS MY TRUE LOVE SENT TO MESix geese a-layingSix geese a-layingTrue
1robustnessuppercasehow many 5 star generals are there in the usHOW MANY 5 STAR GENERALS ARE THERE IN THE USI couldn't find any official information on the number of 5-star generals in the US military. The rank of General of the Army (5-star general) is a rare and exceptional honor, typically reserved for wartime leaders or those who have made significantI couldn't find any information on a specific list of \"5-star generals\" in the US. However, I can tell you that in the US military, a 5-star general is the highest rank, equivalent to a general of the army.True
2robustnessuppercasewho killed natalie and ann in sharp objectsWHO KILLED NATALIE AND ANN IN SHARP OBJECTSThe killer of Natalie and Ann in the HBO miniseries \"Sharp Objects\" is Amma Crellin.The killer of Natalie and Ann in the Netflix series Sharp Objects is Amma Crellin, played by Eliza Scanlen, however, the main antagonist and the one who committed the murders is actually Amma's mother, Adora CrellinFalse
3robustnessuppercasehow many costco locations are there in the usHOW MANY COSTCO LOCATIONS ARE THERE IN THE USI don't have real-time information, but as of my knowledge cutoff in 2023, there were over 540 Costco warehouse locations in the United States. However, please note that this number may have changed since my knowledge cutoff date.I don't have real-time information, but as of my knowledge cutoff in 2023, there were over 540 Costco locations in the United States. However, please note that this number may have changed since then.True
4robustnessuppercasewho played grand moff tarkin in rogue oneWHO PLAYED GRAND MOFF TARKIN IN ROGUE ONEGuy Henry played Grand Moff Tarkin in Rogue One: A Star Wars Story.Ben MendelsohnFalse
........................
104robustnessadd_ocr_typowho has the most followers on the twitterivho has tlie moft followers on the twitterI don't have real-time information, but as of my knowledge cutoff in 2023, the top 5 most followed people on Twitter are:\\n\\n1. Barack Obama - over 134 million followers\\n2. Elon Musk - over 128 millionI'm not sure what you're referring to, but as of my knowledge cutoff, the top 5 users with the most followers on Twitter are:\\n\\n1. Barack Obama\\n2. Elon Musk\\n3. Justin Bieber\\n4. Cristiano RonaldoFalse
105robustnessadd_ocr_typowho said it's not what your country can do for you but what you can do for your countryavho said it's n^ot vhat y0ur couutry c^an do f^or y^ou b^ut vhat you can do for y0ur couutryThe quote is attributed to Winston Churchill.It seems like you're quoting Nelson Mandela. The quote is:\\n\\n\"Whoever says that the country cannot do something for you, but what you can do for your country is a thief.\"\\n\\nIn essence, Mandela is saying that if someone is trying toFalse
106robustnessadd_ocr_typowhen does lil wayne new album drop 2018ivhen does lil wayne n^ew album drop 2018Lil Wayne's album \"Tha Carter V\" was released on August 7, 2018.I couldn't find any information about Lil Wayne releasing a new album in 2018. However, I can tell you that Lil Wayne did release the album \"Tha Carter V\" on September 6, 2018.False
107robustnessadd_ocr_typothe khajuraho temples are especially well known for theirtbe khajuraho temples are efpecially w^ell known f^or lheirvivid and intricate carvings and sculptures of erotic scenes.intricate carvings and sculptures, particularly in the depiction of erotic scenes, which are considered some of the finest examples of ancient Indian art.True
108robustnessadd_ocr_typowhen does the regular nba basketball season startv\\hen does tlic regular nba basketball scason ftartThe regular NBA basketball season typically starts in mid-to-late October.I'm assuming you meant \"When does the regular NBA basketball season start?\"\\n\\nThe regular NBA basketball season typically starts in late October and early November.True
\n", + "

109 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " category test_type \\\n", + "0 robustness uppercase \n", + "1 robustness uppercase \n", + "2 robustness uppercase \n", + "3 robustness uppercase \n", + "4 robustness uppercase \n", + ".. ... ... \n", + "104 robustness add_ocr_typo \n", + "105 robustness add_ocr_typo \n", + "106 robustness add_ocr_typo \n", + "107 robustness add_ocr_typo \n", + "108 robustness add_ocr_typo \n", + "\n", + " original_question \\\n", + "0 on the 6th day of christmas my true love sent to me \n", + "1 how many 5 star generals are there in the us \n", + "2 who killed natalie and ann in sharp objects \n", + "3 how many costco locations are there in the us \n", + "4 who played grand moff tarkin in rogue one \n", + ".. ... \n", + "104 who has the most followers on the twitter \n", + "105 who said it's not what your country can do for you but what you can do for your country \n", + "106 when does lil wayne new album drop 2018 \n", + "107 the khajuraho temples are especially well known for their \n", + "108 when does the regular nba basketball season start \n", + "\n", + " perturbed_question \\\n", + "0 ON THE 6TH DAY OF CHRISTMAS MY TRUE LOVE SENT TO ME \n", + "1 HOW MANY 5 STAR GENERALS ARE THERE IN THE US \n", + "2 WHO KILLED NATALIE AND ANN IN SHARP OBJECTS \n", + "3 HOW MANY COSTCO LOCATIONS ARE THERE IN THE US \n", + "4 WHO PLAYED GRAND MOFF TARKIN IN ROGUE ONE \n", + ".. ... \n", + "104 ivho has tlie moft followers on the twitter \n", + "105 avho said it's n^ot vhat y0ur couutry c^an do f^or y^ou b^ut vhat you can do for y0ur couutry \n", + "106 ivhen does lil wayne n^ew album drop 2018 \n", + "107 tbe khajuraho temples are efpecially w^ell known f^or lheir \n", + "108 v\\hen does tlic regular nba basketball scason ftart \n", + "\n", + " expected_result \\\n", + "0 Six geese a-laying \n", + "1 I couldn't find any official information on the number of 5-star generals in the US military. The rank of General of the Army (5-star general) is a rare and exceptional honor, typically reserved for wartime leaders or those who have made significant \n", + "2 The killer of Natalie and Ann in the HBO miniseries \"Sharp Objects\" is Amma Crellin. \n", + "3 I don't have real-time information, but as of my knowledge cutoff in 2023, there were over 540 Costco warehouse locations in the United States. However, please note that this number may have changed since my knowledge cutoff date. \n", + "4 Guy Henry played Grand Moff Tarkin in Rogue One: A Star Wars Story. \n", + ".. ... \n", + "104 I don't have real-time information, but as of my knowledge cutoff in 2023, the top 5 most followed people on Twitter are:\\n\\n1. Barack Obama - over 134 million followers\\n2. Elon Musk - over 128 million \n", + "105 The quote is attributed to Winston Churchill. \n", + "106 Lil Wayne's album \"Tha Carter V\" was released on August 7, 2018. \n", + "107 vivid and intricate carvings and sculptures of erotic scenes. \n", + "108 The regular NBA basketball season typically starts in mid-to-late October. \n", + "\n", + " actual_result \\\n", + "0 Six geese a-laying \n", + "1 I couldn't find any information on a specific list of \"5-star generals\" in the US. However, I can tell you that in the US military, a 5-star general is the highest rank, equivalent to a general of the army. \n", + "2 The killer of Natalie and Ann in the Netflix series Sharp Objects is Amma Crellin, played by Eliza Scanlen, however, the main antagonist and the one who committed the murders is actually Amma's mother, Adora Crellin \n", + "3 I don't have real-time information, but as of my knowledge cutoff in 2023, there were over 540 Costco locations in the United States. However, please note that this number may have changed since then. \n", + "4 Ben Mendelsohn \n", + ".. ... \n", + "104 I'm not sure what you're referring to, but as of my knowledge cutoff, the top 5 users with the most followers on Twitter are:\\n\\n1. Barack Obama\\n2. Elon Musk\\n3. Justin Bieber\\n4. Cristiano Ronaldo \n", + "105 It seems like you're quoting Nelson Mandela. The quote is:\\n\\n\"Whoever says that the country cannot do something for you, but what you can do for your country is a thief.\"\\n\\nIn essence, Mandela is saying that if someone is trying to \n", + "106 I couldn't find any information about Lil Wayne releasing a new album in 2018. However, I can tell you that Lil Wayne did release the album \"Tha Carter V\" on September 6, 2018. \n", + "107 intricate carvings and sculptures, particularly in the depiction of erotic scenes, which are considered some of the finest examples of ancient Indian art. \n", + "108 I'm assuming you meant \"When does the regular NBA basketball season start?\"\\n\\nThe regular NBA basketball season typically starts in late October and early November. \n", + "\n", + " pass \n", + "0 True \n", + "1 True \n", + "2 False \n", + "3 True \n", + "4 False \n", + ".. ... \n", + "104 False \n", + "105 False \n", + "106 False \n", + "107 True \n", + "108 True \n", + "\n", + "[109 rows x 7 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# df[df['pass'] == 'False']\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SPaC26PQJRu3" + }, + "source": [ + "### Final Results" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 112 + }, + "id": "KIF4YFY3JRu3", + "outputId": "13deb0cd-5f7b-4a15-e678-7d448fdddaae" + }, + "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", + "
categorytest_typefail_countpass_countpass_rateminimum_pass_ratepass
0robustnessuppercase232754%70%False
1robustnessadd_slangs7222%70%False
2robustnessadd_ocr_typo311938%70%False
\n", + "
" + ], + "text/plain": [ + " category test_type fail_count pass_count pass_rate \\\n", + "0 robustness uppercase 23 27 54% \n", + "1 robustness add_slangs 7 2 22% \n", + "2 robustness add_ocr_typo 31 19 38% \n", + "\n", + " minimum_pass_rate pass \n", + "0 70% False \n", + "1 70% False \n", + "2 70% False " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "harness.report()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "L4", + "machine_shape": "hm", + "provenance": [] + }, + "kernelspec": { + "display_name": ".venv", + "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.9.13" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "00202d18bc0f44918541e34224e9fd87": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5ada7d91204b4f23898b5559778b9ab4", + "max": 1946243984, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_bf84f275bcd54e2bb9f83eeae5246325", + "value": 1946243984 + } + }, + "03b7b0a5f60442a3b7f738859993cd4b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "048e50c201384cf5b12c96f279d34b08": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c69b69dcdc564574b793e47dc981394c", + "max": 8, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_cdd4abf349df42eca1cc366eddc3014f", + "value": 8 + } + }, + "04e350601e33431eb3de0171c62a38f6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0acdcae865f3467fbb52ad8d2515f41d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4603f0bdd40f4e83b6a9d30b5ab9c2e5", + "placeholder": "​", + "style": "IPY_MODEL_f990262e9a2c400ba2fdad56bcf3221c", + "value": " 1.92G/1.92G [01:18<00:00, 25.3MB/s]" + } + }, + "0b196a443d00448bbdd7fefb7ae6437f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0b34499bce77483d8107decaa2ec142d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0b488bd1f3144ebdab8102730caada65": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "104e213aacd24543b296122838d01d2f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_bdc94ba640d94c758877329f0e8997fd", + "IPY_MODEL_40c0b6f8bc3048a7a42f83548734855b", + "IPY_MODEL_af22a07c72c74159b199741a37c773ca" + ], + "layout": "IPY_MODEL_42ce5b7625014dc48f85ea9c381b675e" + } + }, + "1642508b77434cd4aa5c8791c4db51bc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "169514c5f44b4be8a8ea2398d857570e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "16d67a195b004a47b6dc6284bceef4d3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_92e1e8f40d544ded9946973fbe1cc043", + "IPY_MODEL_23536bdcf46f456e93c2477ef8e6ed57", + "IPY_MODEL_c784848a7b9e40238a59b71d57ac83e9" + ], + "layout": "IPY_MODEL_953b0c2177ec49c088c9699b426a79b2" + } + }, + "16f70fa48041481fa3334717aa51d537": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cbdd0480a9d44b91b01ee5fe78255b62", + "placeholder": "​", + "style": "IPY_MODEL_c3d44dc2ec394fdcbb0afd52f54ab296", + "value": "model-00005-of-00008.safetensors: 100%" + } + }, + "18287963bb124e24af1ec8299e09daba": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "193264b54f744b849ff5a542ea41feac": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "1d7418cdcff143c7a9b43208c5b96a2d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "200a46790dd24d6893e2a7e42f2ec527": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f53befa0aae3484780af259d9b0ea42e", + "max": 493443, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_4a2b367ad0494b8cb6acbfe7904a183b", + "value": 493443 + } + }, + "20fa9a255dc5462ab4d50709d2947bfc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2105d75daabe4c3e8b198f829578cb53": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_16f70fa48041481fa3334717aa51d537", + "IPY_MODEL_50aeaeaa1ec84ab09787007ba80f5d8a", + "IPY_MODEL_be3bdd84d931413a8408d8915b82901e" + ], + "layout": "IPY_MODEL_38a936bb93484847b5b4c525034da8b5" + } + }, + "2120a823551848c5a44ddadf881c42c2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2248a37e0cda46339125b85d72d9a4b5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ae4be4b9f72c49e5acf3c63cd2c515c3", + "max": 1979781464, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_a5beda6d192a42388b535e720b725cf3", + "value": 1979781464 + } + }, + "23536bdcf46f456e93c2477ef8e6ed57": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d13c99e9cbb143d58db03128f862a4a9", + "max": 1520, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_9e427e1da40b4be0acb876f8c1be8148", + "value": 1520 + } + }, + "2521c2bcf7b5458c8870623fc98a7715": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b5f0c1244a7542de8b9ded413961fd8a", + "IPY_MODEL_200a46790dd24d6893e2a7e42f2ec527", + "IPY_MODEL_a8fd5cc5333840cba1ed31987acc5c16" + ], + "layout": "IPY_MODEL_a002ef506d55402aaa8db082c0d50416" + } + }, + "26789a7ec9474dfda0b4432f6cdfa631": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "27cff070f15f42429e47a5eb9ae3ef72": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2f46f71b15ca4afc980d8654adf3588e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3058e15058a7476087de686f2b1ef694": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "32e1603d273844979831b74fad446f8f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0b196a443d00448bbdd7fefb7ae6437f", + "placeholder": "​", + "style": "IPY_MODEL_dd7b05718e0742eb85677a7397fa03fe", + "value": " 1.98G/1.98G [00:05<00:00, 308MB/s]" + } + }, + "33cea102c7524835a4088913e0687d2d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3427ce38ba4a437cae8ef5cfb6532efe": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "38a936bb93484847b5b4c525034da8b5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "40646acea22c493b92e958db37475450": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "40c0b6f8bc3048a7a42f83548734855b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0b488bd1f3144ebdab8102730caada65", + "max": 1795402, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e20b3b106373472c80c1905bb8341f41", + "value": 1795402 + } + }, + "42ce5b7625014dc48f85ea9c381b675e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "432e9d196f7e4d6fbb02321abf199493": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "43ab6cf5f4b24b208086ed8f11e599e9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4603f0bdd40f4e83b6a9d30b5ab9c2e5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "49d89b68a5774b5599528ed28c720a59": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4a2b367ad0494b8cb6acbfe7904a183b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "4ade8cf94e4a4214bebd1073277d6bdb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_55ea157f8b3e43088796779b9656422d", + "placeholder": "​", + "style": "IPY_MODEL_79d01435cba3480ca51d5499b97ef9a4", + "value": "model-00003-of-00008.safetensors: 100%" + } + }, + "4ae6653eea094cbb8469435ff89c252e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "504c042607a64075b5e47b9bdd2376ce": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "507faae4873e4962a31bbc8cd92c8c06": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_27cff070f15f42429e47a5eb9ae3ef72", + "max": 1973490216, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_ebd563795bf94fc4a132a2acf33e79ca", + "value": 1973490216 + } + }, + "50aeaeaa1ec84ab09787007ba80f5d8a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9319fd287c0a42c78152288cb9b27cae", + "max": 1946243984, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_8137c77c49b34d06ad9394ca09fc0478", + "value": 1946243984 + } + }, + "53296baccc904481b48035ffdca0fea3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "55ea157f8b3e43088796779b9656422d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "57e6e7ba744e44cabbf82c58c402e71b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "58f652b3eedf4c05b60a2758610ee662": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_aeba8e97c56549c1ac5a1d6244f6d311", + "placeholder": "​", + "style": "IPY_MODEL_0b34499bce77483d8107decaa2ec142d", + "value": "Downloading shards: 100%" + } + }, + "596356b148fc4d3b8976160dc918f897": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5ada7d91204b4f23898b5559778b9ab4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5db42c7fb58b4a8ba4833914e90abdc3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dc7312ead64e403696e762ac626536bf", + "placeholder": "​", + "style": "IPY_MODEL_20fa9a255dc5462ab4d50709d2947bfc", + "value": " 1.97G/1.97G [00:04<00:00, 412MB/s]" + } + }, + "62bc0a0429ea477597ddcbc155ccb654": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "64bdea28f82048bd82b01d5321aee5e5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ff77447e32304b29851f12ca765c46cf", + "placeholder": "​", + "style": "IPY_MODEL_8119d15e2f984243bc1bef3dd5a24dea", + "value": " 1.95G/1.95G [00:00<00:00, 491MB/s]" + } + }, + "64cd88dac2c54098862ae1c47641548a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b6c747a7b36341ab85de8f7c24ed54e4", + "placeholder": "​", + "style": "IPY_MODEL_da80f2f2ebed45cdb9ea497305273e45", + "value": "model-00006-of-00008.safetensors: 100%" + } + }, + "69ade43873bf4acdb2473e4036092d80": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "6c7446f8623645ea8b236e4f025ea178": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_88db08fd4f7f4b0b9c7e751419dc8378", + "IPY_MODEL_94b3a2393a5d458486a13be2b36f83fe", + "IPY_MODEL_fbfa67af178b41a78cfb9f7ca893575a" + ], + "layout": "IPY_MODEL_596356b148fc4d3b8976160dc918f897" + } + }, + "6cd105e598014944854550ac1973799b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6db91b4a4a9846bcb46850f80169abcd", + "placeholder": "​", + "style": "IPY_MODEL_193264b54f744b849ff5a542ea41feac", + "value": "model-00002-of-00008.safetensors: 100%" + } + }, + "6db91b4a4a9846bcb46850f80169abcd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "710267f29675425b826a22f19702b2ea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "77c378929d524e1ebeb93f6aab439d5e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_7b0c1201e42d43cca95e42a3c8cf14e4", + "IPY_MODEL_2248a37e0cda46339125b85d72d9a4b5", + "IPY_MODEL_32e1603d273844979831b74fad446f8f" + ], + "layout": "IPY_MODEL_9bac0192a83e4800b134f89859094ee4" + } + }, + "79d01435cba3480ca51d5499b97ef9a4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "79eb7ae890be495aa1348418576ff1d6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a7d66918b5894de89159dc4aa54f164f", + "placeholder": "​", + "style": "IPY_MODEL_40646acea22c493b92e958db37475450", + "value": "model-00007-of-00008.safetensors: 100%" + } + }, + "7b0b1baba4f7456f823c8ae6f75081ec": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7b0c1201e42d43cca95e42a3c8cf14e4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_26789a7ec9474dfda0b4432f6cdfa631", + "placeholder": "​", + "style": "IPY_MODEL_b0ba7646d1f2487fa40a68389d2c2bcf", + "value": "model-00004-of-00008.safetensors: 100%" + } + }, + "7c3280254b524cf788da90b8ce3e3d39": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8119d15e2f984243bc1bef3dd5a24dea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8137c77c49b34d06ad9394ca09fc0478": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "83b1a890bb6e40b29cb9842a0a75ddd6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "88db08fd4f7f4b0b9c7e751419dc8378": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_43ab6cf5f4b24b208086ed8f11e599e9", + "placeholder": "​", + "style": "IPY_MODEL_8bd88d7d6adf4ab3822bf5c9f5c27faa", + "value": "special_tokens_map.json: 100%" + } + }, + "8bd88d7d6adf4ab3822bf5c9f5c27faa": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8cca65d00167431bafd929a404efdb42": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8cf75dbcbb3f449fb0e5b8c20ccc0197": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "92bc54b1ce6e4579ab7db9edda9615d5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_432e9d196f7e4d6fbb02321abf199493", + "placeholder": "​", + "style": "IPY_MODEL_57e6e7ba744e44cabbf82c58c402e71b", + "value": " 1.95G/1.95G [00:09<00:00, 346MB/s]" + } + }, + "92e1e8f40d544ded9946973fbe1cc043": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ac6851c2c9d94239a2ffc5df9ef4a412", + "placeholder": "​", + "style": "IPY_MODEL_ab9edb0fc72b444cb0f86dba7a52c493", + "value": "tokenizer_config.json: 100%" + } + }, + "9319fd287c0a42c78152288cb9b27cae": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "94b3a2393a5d458486a13be2b36f83fe": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_04e350601e33431eb3de0171c62a38f6", + "max": 551, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_8cf75dbcbb3f449fb0e5b8c20ccc0197", + "value": 551 + } + }, + "953b0c2177ec49c088c9699b426a79b2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9714c566b95b4a3bbd6c17437c249d67": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b43e74c5ac1d4894ae96152fb188c405", + "IPY_MODEL_a298510418864a8db3d816afb39d41f5", + "IPY_MODEL_a80c25cf86a34b218edb2fae4bf79b20" + ], + "layout": "IPY_MODEL_2f46f71b15ca4afc980d8654adf3588e" + } + }, + "97a7cfe2b0a640b7a97b319ca2a5c519": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9adbe348bf8c4f53a1496e68d9813c60": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "9bac0192a83e4800b134f89859094ee4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9e427e1da40b4be0acb876f8c1be8148": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "a002ef506d55402aaa8db082c0d50416": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a298510418864a8db3d816afb39d41f5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b87fdc4a034e4feea83b7a6bfae45bb6", + "max": 788563544, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_3427ce38ba4a437cae8ef5cfb6532efe", + "value": 788563544 + } + }, + "a5beda6d192a42388b535e720b725cf3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "a6393621a71d4caea0d8bc5527649fb1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_daaa645104d64fbcb15b7994097fd143", + "placeholder": "​", + "style": "IPY_MODEL_3058e15058a7476087de686f2b1ef694", + "value": " 8/8 [00:07<00:00,  1.16it/s]" + } + }, + "a7d66918b5894de89159dc4aa54f164f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a80c25cf86a34b218edb2fae4bf79b20": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_97a7cfe2b0a640b7a97b319ca2a5c519", + "placeholder": "​", + "style": "IPY_MODEL_a8b18bd1b2f04eae88d92aedfe38a2c5", + "value": " 789M/789M [01:23<00:00, 6.46MB/s]" + } + }, + "a8b18bd1b2f04eae88d92aedfe38a2c5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a8fd5cc5333840cba1ed31987acc5c16": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1642508b77434cd4aa5c8791c4db51bc", + "placeholder": "​", + "style": "IPY_MODEL_af036aca77844d5ab3ef35dfb57f8453", + "value": " 493k/493k [00:00<00:00, 36.7MB/s]" + } + }, + "ab46c90f8ac3499ab18ee45ff0c4d0dc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ab9edb0fc72b444cb0f86dba7a52c493": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ac54c7d7e6bd47b9bf4137c662f81c80": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_64cd88dac2c54098862ae1c47641548a", + "IPY_MODEL_e80035a019be44f1a0056d4ad6387ecf", + "IPY_MODEL_0acdcae865f3467fbb52ad8d2515f41d" + ], + "layout": "IPY_MODEL_7c3280254b524cf788da90b8ce3e3d39" + } + }, + "ac6851c2c9d94239a2ffc5df9ef4a412": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ae4be4b9f72c49e5acf3c63cd2c515c3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "aeba8e97c56549c1ac5a1d6244f6d311": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "af036aca77844d5ab3ef35dfb57f8453": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "af22a07c72c74159b199741a37c773ca": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2120a823551848c5a44ddadf881c42c2", + "placeholder": "​", + "style": "IPY_MODEL_03b7b0a5f60442a3b7f738859993cd4b", + "value": " 1.80M/1.80M [00:00<00:00, 4.16MB/s]" + } + }, + "b0ba7646d1f2487fa40a68389d2c2bcf": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b3bb46a8c95b47f8a0867fe99f97a81b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_da58f3e813ff4cc6ae11159e52f6260c", + "max": 8, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_d9c0e1b3a97448db9e395020ba3e1fd2", + "value": 8 + } + }, + "b43e74c5ac1d4894ae96152fb188c405": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_504c042607a64075b5e47b9bdd2376ce", + "placeholder": "​", + "style": "IPY_MODEL_69ade43873bf4acdb2473e4036092d80", + "value": "model-00008-of-00008.safetensors: 100%" + } + }, + "b4a0a06478044fea82d3f672aa460bf1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_58f652b3eedf4c05b60a2758610ee662", + "IPY_MODEL_b3bb46a8c95b47f8a0867fe99f97a81b", + "IPY_MODEL_fac656358df943699cfab99689cbfbbd" + ], + "layout": "IPY_MODEL_4ae6653eea094cbb8469435ff89c252e" + } + }, + "b5f0c1244a7542de8b9ded413961fd8a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_53296baccc904481b48035ffdca0fea3", + "placeholder": "​", + "style": "IPY_MODEL_ecfd9bcb5c894f52929de3df9a172873", + "value": "tokenizer.model: 100%" + } + }, + "b6501e26637047eeb547edff1196312f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_6cd105e598014944854550ac1973799b", + "IPY_MODEL_ba0c40cb5bf34fb7a84ffb12fc760ffd", + "IPY_MODEL_64bdea28f82048bd82b01d5321aee5e5" + ], + "layout": "IPY_MODEL_62bc0a0429ea477597ddcbc155ccb654" + } + }, + "b6c747a7b36341ab85de8f7c24ed54e4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b83580b34ef0421ab8ed9eab044dc041": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_79eb7ae890be495aa1348418576ff1d6", + "IPY_MODEL_00202d18bc0f44918541e34224e9fd87", + "IPY_MODEL_92bc54b1ce6e4579ab7db9edda9615d5" + ], + "layout": "IPY_MODEL_ca83ff2aa6c54380af3a236ddb5eb0cd" + } + }, + "b87fdc4a034e4feea83b7a6bfae45bb6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ba0c40cb5bf34fb7a84ffb12fc760ffd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c90972602f0f43d5aa6bb274bfa262f3", + "max": 1946235640, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_9adbe348bf8c4f53a1496e68d9813c60", + "value": 1946235640 + } + }, + "bdc94ba640d94c758877329f0e8997fd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d5df230d943343208754df65295dd442", + "placeholder": "​", + "style": "IPY_MODEL_e378472bc2a54402b00d26531cff1755", + "value": "tokenizer.json: 100%" + } + }, + "be3bdd84d931413a8408d8915b82901e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_18287963bb124e24af1ec8299e09daba", + "placeholder": "​", + "style": "IPY_MODEL_8cca65d00167431bafd929a404efdb42", + "value": " 1.95G/1.95G [00:04<00:00, 361MB/s]" + } + }, + "bf84f275bcd54e2bb9f83eeae5246325": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "c0c66adb276d45daabc8527cd675bc3f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c3d44dc2ec394fdcbb0afd52f54ab296": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c69b69dcdc564574b793e47dc981394c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c784848a7b9e40238a59b71d57ac83e9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_83b1a890bb6e40b29cb9842a0a75ddd6", + "placeholder": "​", + "style": "IPY_MODEL_ed7a7df5be87428b9e62c4f62f1678d6", + "value": " 1.52k/1.52k [00:00<00:00, 130kB/s]" + } + }, + "c90972602f0f43d5aa6bb274bfa262f3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ca83ff2aa6c54380af3a236ddb5eb0cd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cbdd0480a9d44b91b01ee5fe78255b62": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cdd4abf349df42eca1cc366eddc3014f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "d13c99e9cbb143d58db03128f862a4a9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d2b391e1b63147839ae4e8934ae6bbbc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "d5df230d943343208754df65295dd442": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d9c0e1b3a97448db9e395020ba3e1fd2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "da58f3e813ff4cc6ae11159e52f6260c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "da80f2f2ebed45cdb9ea497305273e45": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "daaa645104d64fbcb15b7994097fd143": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "dc7312ead64e403696e762ac626536bf": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "dd2684f210f647dca2629243d388531b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_f7f1239379af425da5c6f124ff50e72d", + "IPY_MODEL_048e50c201384cf5b12c96f279d34b08", + "IPY_MODEL_a6393621a71d4caea0d8bc5527649fb1" + ], + "layout": "IPY_MODEL_c0c66adb276d45daabc8527cd675bc3f" + } + }, + "dd7b05718e0742eb85677a7397fa03fe": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ded30e826d2147e691c0c27c2ff456e9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e20b3b106373472c80c1905bb8341f41": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "e378472bc2a54402b00d26531cff1755": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e80035a019be44f1a0056d4ad6387ecf": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7b0b1baba4f7456f823c8ae6f75081ec", + "max": 1923166040, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_d2b391e1b63147839ae4e8934ae6bbbc", + "value": 1923166040 + } + }, + "ebd563795bf94fc4a132a2acf33e79ca": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "ecfd9bcb5c894f52929de3df9a172873": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ed7a7df5be87428b9e62c4f62f1678d6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f53befa0aae3484780af259d9b0ea42e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f7f1239379af425da5c6f124ff50e72d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_169514c5f44b4be8a8ea2398d857570e", + "placeholder": "​", + "style": "IPY_MODEL_710267f29675425b826a22f19702b2ea", + "value": "Loading checkpoint shards: 100%" + } + }, + "f990262e9a2c400ba2fdad56bcf3221c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "fac656358df943699cfab99689cbfbbd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1d7418cdcff143c7a9b43208c5b96a2d", + "placeholder": "​", + "style": "IPY_MODEL_ded30e826d2147e691c0c27c2ff456e9", + "value": " 8/8 [03:09<00:00, 42.11s/it]" + } + }, + "fbfa67af178b41a78cfb9f7ca893575a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_33cea102c7524835a4088913e0687d2d", + "placeholder": "​", + "style": "IPY_MODEL_ab46c90f8ac3499ab18ee45ff0c4d0dc", + "value": " 551/551 [00:00<00:00, 42.3kB/s]" + } + }, + "fd3954fc66f943b28ad5760ce59cd8d0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_4ade8cf94e4a4214bebd1073277d6bdb", + "IPY_MODEL_507faae4873e4962a31bbc8cd92c8c06", + "IPY_MODEL_5db42c7fb58b4a8ba4833914e90abdc3" + ], + "layout": "IPY_MODEL_49d89b68a5774b5599528ed28c720a59" + } + }, + "ff77447e32304b29851f12ca765c46cf": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 7b28f9129902b6d284dd901d2cb43dcf588becc0 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Mon, 23 Dec 2024 16:13:15 +0530 Subject: [PATCH 10/11] refactor: remove unnecessary import statements from Custom_Chat_Template_Config notebook --- demo/tutorials/misc/Custom_Chat_Template_Config.ipynb | 2 -- 1 file changed, 2 deletions(-) diff --git a/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb b/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb index 98cabca51..51b9f9ff9 100644 --- a/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb +++ b/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb @@ -313,8 +313,6 @@ } ], "source": [ - "from langtest import Harness\n", - "\n", "harness = Harness(\n", " task=\"question-answering\",\n", " model={\n", From 300d7e10f193b2b64c3bb58c59f0ed56ac1578d5 Mon Sep 17 00:00:00 2001 From: Kalyan Chakravarthy Date: Mon, 23 Dec 2024 16:19:55 +0530 Subject: [PATCH 11/11] updated nb with gpt-4o llm evaluation --- demo/tutorials/misc/Custom_Chat_Template_Config.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb b/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb index 51b9f9ff9..9c71189d2 100644 --- a/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb +++ b/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb @@ -15,7 +15,7 @@ "id": "qWojNqYdJRu1" }, "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/langtest/blob/main/demo/tutorials/misc/Evaluation_with_Prometheus_Eval.ipynb)" + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/JohnSnowLabs/langtest/blob/main/demo/tutorials/misc/Custom_Chat_Template_Config.ipynb)" ] }, {