Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -10,6 +10,7 @@ import random
|
|
10 |
import nltk
|
11 |
from nltk.tokenize import sent_tokenize
|
12 |
import PyPDF2
|
|
|
13 |
from joblib import dump, load
|
14 |
|
15 |
from transformers import AutoTokenizer, AutoModelForCausalLM
|
@@ -29,7 +30,11 @@ logging.basicConfig(
|
|
29 |
)
|
30 |
logger = logging.getLogger(__name__)
|
31 |
|
32 |
-
|
|
|
|
|
|
|
|
|
33 |
|
34 |
class Config:
|
35 |
MODEL_NAME = "microsoft/DialoGPT-medium"
|
@@ -38,8 +43,11 @@ class Config:
|
|
38 |
REQUEST_TIMEOUT = 10
|
39 |
MAX_DEPTH = 1
|
40 |
SIMILARITY_THRESHOLD = 0.5
|
41 |
-
# INDEXED_URLS = {"https://calendar.google.com/calendar/ical/south.spencer%40sspencer.k12.in.us/public/basic.ics", "https://calendar.google.com/calendar/ical/hs.spencer%40sspencer.k12.in.us/public/basic.ics", "https://calendar.google.com/calendar/ical/le.spencer%40sspencer.k12.in.us/public/basic.ics", "https://calendar.google.com/calendar/ical/re.spencer%40sspencer.k12.in.us/public/basic.ics", "https://drive.google.com/file/d/1gNTdzCSRG8h-GY21zMsmuyQEv_16eiq_/view?usp=drive_link", "https://drive.google.com/file/d/1wxQKZuI77-3cPceJ8mKbREQDSgEKXCFX/view?usp=drive_link", "https://drive.google.com/file/d/1vDix0a2shD7U46IVOprqnNWMzC7D01vl/view?usp=drive_link", "https://drive.google.com/file/d/1ShYZl7re5cdNoORTCJ-6vVp2rKM9xa_d/view?usp=drive_link", "https://drive.google.com/file/d/1Gky4kY1KGt6P4wxx7OPatmfSc_VZGx6v/view?usp=drive_link", "https://drive.google.com/file/d/1aoK7oA45je8Tkl7v2dEnYseHXFaisJ-W/view?usp=drive_link", "https://drive.google.com/file/d/1NG3ak3YqLtNEbYwT5U52tnmgyTK_6NMo/view?usp=drive_link", "https://drive.google.com/file/d/1FH8r8JeOEXhS7BUIWKM-FyrLN8Nu3oHm/view?usp=drive_link", "https://drive.google.com/file/d/1YZ4dushzkbmQPI98rnUJqfmDQJoVfvpn/view?usp=drive_link", "https://drive.google.com/file/d/1PJj23lAF45N0sBg6PknJLHl-OYsF0QWU/view?usp=drive_link", "https://drive.google.com/file/d/1DeJ3fTy61I7n86ofmrZUg6jzAqOsg-w-/view?usp=drive_link", "https://drive.google.com/file/d/1aunHxceGluv4l9cWWEKadWzNwnpEeFX2/view?usp=drive_link", "https://drive.google.com/file/d/1FBhLaXc1To-I21eqhVMzneDnmsZSfi3r/view?usp=drive_link", "https://drive.google.com/file/d/1Kvjpiq9Y_zUviyxYN9SERJ8dHxco_br8/view?usp=drive_link", "https://drive.google.com/file/d/18YN4uX8o108FpYqiWHbOqynnMT-w7fIe/view?usp=drive_link", "https://drive.google.com/file/d/1ju5O6J_3w5ffjWJcIfzQmTa2JFiK4rG_/view?usp=drive_link", "https://drive.google.com/file/d/1awbYPSnxSIx2Gb08DSJgUyx-dGDkgmHH/view?usp=drive_link", "https://drive.google.com/file/d/1ciKJS5HuDO2KR9wG9pqcf39mFa5gVw3A/view?usp=drive_link", "https://drive.google.com/file/d/1mt8qWowJnzd9O-RPX39cWg_w8wn6IDCn/view?usp=drive_link", "https://drive.google.com/file/d/1GFc7aKVLGFl23OxMiIGZZczx_D48C-hL/view?usp=drive_link", "https://drive.google.com/file/d/1_1mQn2ika8MypPfUbW5o3jMjZXaqFcXj/view?usp=drive_link", "https://drive.google.com/file/d/1UOyDdf5PPEguLdA7pr8N6biUtre0WrAc/view?usp=drive_link", "https://drive.google.com/file/d/1uvBJs6EUwYfGEoK-9YMmG65gEm1XKXOB/view?usp=drive_link", "https://drive.google.com/file/d/1t00WkdwoVR5GjPOLG0mP41uhraG8U7Yv/view?usp=drive_link", "https://drive.google.com/file/d/15s_b_79QvnMC3vz2phJawILiPL3S8A9U/view?usp=drive_link", "https://drive.google.com/file/d/1nClSEZE42T6hsDQ_mn7Y_BOkoFoV8I56/view?usp=drive_link", "https://drive.google.com/file/d/1JBM0pQvCWoFhr1ALWDmgrFNeYqSm7UTI/view?usp=drive_link", "https://drive.google.com/file/d/14eCiz8u12VnMrBDD7T-ow0re6eCF5Pzk/view?usp=drive_link", "https://drive.google.com/file/d/1ZbyVweQrbRc2pFRkRz_kF7Q6LYkGu3MV/view?usp=drive_link", "https://drive.google.com/file/d/167rFgOViNzNMhbXmlf9cHgc6efomzHab/view?usp=drive_link", "https://drive.google.com/file/d/1uR7RyujbSkLz4k8zQzzbrf-JKOYG5-Bh/view?usp=drive_link", "https://drive.google.com/file/d/1GdNQ8j7S1kOpxmIQ4rPKn3antkkXd2OT/view?usp=drive_link", "https://drive.google.com/file/d/146nf7ZFYX4ypMGRHTd2Z1WJtFWnp8_YL/view?usp=drive_link", "https://drive.google.com/file/d/10rKZhq2RV9QEYEV3h1NgeWngHu_NGDeC/view?usp=drive_link", "https://drive.google.com/file/d/1Oh4QpMMApcm-9GKsqd-hALJyGGedsaIK/view?usp=drive_link", "https://drive.google.com/file/d/1Aol_v7n-9XHZBGHyM_NGbkf25m07T3Wl/view?usp=drive_link", "https://drive.google.com/file/d/169HBRiDEqRrnbzSBgaLT3npcc7vRBu4G/view?usp=drive_link", "https://drive.google.com/file/d/1UL6e35UtcYxSh8aonFOFmSeBw6_jonZl/view?usp=drive_link", "https://drive.google.com/file/d/1U1mx9vFLyUx-1Ej1gSto76urTTHwoUAN/view?usp=drive_link", "https://drive.google.com/file/d/12e_FI7UZJl3BjJSsQ5RbMsQq6jw3V7ZC/view?usp=drive_link", "https://drive.google.com/file/d/1ov9J5PXyedvDD1XRO44DczdUsSzrzaS8/view?usp=drive_link", "https://drive.google.com/file/d/1MFX4dw6575Wp_uNSw3OdS4ebi2-ebW9m/view?usp=drive_link", "https://drive.google.com/file/d/1hck2cZzzsWlPbdv85JmqKbSQov_vtAfe/view?usp=drive_link", "https://drive.google.com/file/d/1mk27rjFx8Yvzlps9TZ1GYMFm4EKMJnMZ/view?usp=drive_link", "https://drive.google.com/file/d/1LSiDDpLfvcDlX8edksvb28TP7LQP0ceg/view?usp=drive_link", "https://drive.google.com/file/d/1ztlp8vwK6PFiVz5mHxWtxifNt2oBds-Q/view?usp=drive_link", "https://drive.google.com/file/d/1Qzyea19kdfqyyFD_msR5BO_AnAtble0y/view?usp=drive_link", "https://drive.google.com/file/d/142kP6zJKLQ9E9U-KJLms82jXrfrB7lsN/view?usp=drive_link", "https://drive.google.com/file/d/1_0uMOJaEpE0hrzD6umPivf7ZrJ_B7Awc/view?usp=drive_link", "https://drive.google.com/file/d/1T4i9bNUoQ6uqPH8EB8rNceprl7h4DA2L/view?usp=drive_link", "https://drive.google.com/file/d/1t-vyEMvEtFqe0h-Xssuquo7-4kOTNGvs/view?usp=drive_link", "https://drive.google.com/file/d/1LSuqga7MgIojRBlDzv788JbhqD1GmdxV/view?usp=drive_link", "https://drive.google.com/file/d/1gCvqWEvCQ8oBWBw4uphYX7zTGrYNNWXF/view?usp=drive_link", "https://drive.google.com/file/d/1IxNuk1jav-TjVvwYerB0lZAKNyHS0dUk/view?usp=drive_link", "https://drive.google.com/file/d/11cdVMs1YRw3MXmd04JLiuusx8nMJLjSH/view?usp=drive_link", "https://drive.google.com/file/d/19yLDRf4wzapEP0PLOShGPLJhrnt9TvJu/view?usp=drive_link", "https://drive.google.com/file/d/1xgh11TYt1e5pYE5N9mUARjg-D5Y0m7qg/view?usp=drive_link", "https://drive.google.com/file/d/1OXmntrhZ_2z-KftU07R-SHCcUKMPWBRQ/view?usp=drive_link", "https://drive.google.com/file/d/1aLs_gQjX1SHfIsREg7KdG2JbYioSfXpe/view?usp=drive_link", "https://drive.google.com/file/d/1V42lLs7xo65WhGKYm0WzYdGvDPIF_Bkb/view?usp=drive_link", "https://drive.google.com/file/d/1mxj-eGId_xZEXteJoFxVLZg701dqfJ7K/view?usp=drive_link", "https://drive.google.com/file/d/1yKHDHcSUDrtDsOIrsJsVlEKkxySsUcgj/view?usp=drive_link", "https://drive.google.com/file/d/10yTEBlfCRZ7f8A_Tx3RkYXdFvXfcK1xz/view?usp=drive_link", "https://drive.google.com/file/d/1LZcSI-QnAcw0aqlADHi7Rcs4RgqQfMjX/view?usp=drive_link", "https://drive.google.com/file/d/1z2AZQvDCZVu7GLK0mXJq55ObWsxfWMgs/view?usp=drive_link", "https://drive.google.com/file/d/1q35GQFTd6dFWj1vZDmYHEjyw5r171f0q/view?usp=drive_link", "https://drive.google.com/file/d/1Yjbun_-9Z2akhK0Izv0vrK7frX5uiVxe/view?usp=drive_link", "https://drive.google.com/file/d/1qkEJKU-73AoevioFk5roTPRADE1hiJyO/view?usp=drive_link", "https://drive.google.com/file/d/1XqbFbyoD1hts8Sq5vBLA40u4csHDOTM2/view?usp=drive_link", "https://drive.google.com/file/d/1jc52u2dLRGJkllLzGWlHnYuAGCoYwHvX/view?usp=drive_link", "https://drive.google.com/file/d/1DvSAe52A9GUu85dpJizJSw7bh3cXphW5/view?usp=drive_link", "https://drive.google.com/file/d/1y7MqM_SDLrzZbaSKZLBDhaiWqSynG50v/view?usp=drive_link", "https://drive.google.com/file/d/1PxtA_l0Ntcz0ZZy1ut8a1GHIisAscJBS/view?usp=drive_link", "https://drive.google.com/file/d/1mAcHJ0t4uQtzdwo6ibbyCsojjLM8FqHK/view?usp=drive_link", "https://drive.google.com/file/d/1xcdOoTVesjIpyU5Mmb_zD6WxHzxG7h_e/view?usp=drive_link", "https://drive.google.com/file/d/11OEmiHOgQBBmTSsfs2yv7Dwbx4H1gArE/view?usp=drive_link", "https://drive.google.com/file/d/1VKkofGegA3vOUoaS0NMP8EgwaNLkdvQa/view?usp=drive_link", "https://drive.google.com/file/d/18JnQZhelSIbUZ2uJRGW5ZOQ4RPYxLIr6/view?usp=drive_link", "https://drive.google.com/file/d/1UBEA00RATwDKptG5mp7idhotLlv0Ehm9/view?usp=drive_link", "https://drive.google.com/file/d/1hL80abacnLCWSO1nTEav0rTeY515TCoS/view?usp=drive_link", "https://drive.google.com/file/d/1HVHckJUJOYyOm43_TCJP7N3IFx7noVyz/view?usp=drive_link", "https://drive.google.com/file/d/1f1s-x50XKgkpcF5-5_PJGgI35JEzwjYF/view?usp=drive_link", "https://drive.google.com/file/d/1Nb8W9SHyBmfOQ9Y9_PFuz8V6oJpDTku3/view?usp=drive_link", "https://drive.google.com/file/d/1oUxu9zJ8EspLY9w84e1X9TztX4VNGuin/view?usp=drive_link", "https://drive.google.com/file/d/1s-zM8dukhe9S0-eu8A86I6LzcDWvFoJs/view?usp=drive_link", "https://drive.google.com/file/d/1QBU_t9cmNq8tKXh8XRMf1zVh5c0W9Eiu/view?usp=drive_link", "https://drive.google.com/file/d/1OpedffzPAVD3H1ij6aXKskhyLELAsceP/view?usp=drive_link", "https://drive.google.com/file/d/1VMn6Afhs02Ed_dW0XK-WNDGxX1NGc0t-/view?usp=drive_link", "https://drive.google.com/file/d/1eCv9OzrJnea28oBOV_qOwmuzvfWMmrSr/view?usp=drive_link", "https://drive.google.com/file/d/1ZBEhYvuhXnMHdTcVkyMgo7x8944ot7d3/view?usp=drive_link", "https://drive.google.com/file/d/1X5ukI9Qc4QfNaGr1O-eMzpwNnqTGSZnj/view?usp=drive_link", "https://drive.google.com/file/d/1BzxqDN2QmR15lf9d0dpXxEPeJ-jpiI4b/view?usp=drive_link", "https://drive.google.com/file/d/1BVkrM1kG86Ltq9m3XjAXIn7qtiIRS1HG/view?usp=drive_link", "https://drive.google.com/file/d/1tUiW__swsp4cSk21oZPTXKQg4NQqeq3S/view?usp=drive_link", "https://drive.google.com/file/d/1s_8xwkDOdmU6KnFIe0VnuBxLNHfF3Xe5/view?usp=drive_link", "https://drive.google.com/file/d/1OqqA6_cbYTcYJet1BEli27dB1EM8I4Cd/view?usp=drive_link", "https://drive.google.com/file/d/1fPnac9zSXAY9tIBG4YVsoXbTetrNICQe/view?usp=drive_link", "https://drive.google.com/file/d/1l2Ry3bJz7bGVXb8G2q0-Jr5OXE-l_Ym1/view?usp=drive_link", "https://drive.google.com/file/d/1f1ofvoKlX0Mpw0o2HBLm17oUo8Xaz-Tg/view?usp=drive_link", "https://drive.google.com/file/d/1bOB9Jt0Ep44ujY1uxh7i4vOH8jofgoBZ/view?usp=drive_link", "https://drive.google.com/file/d/1j7nsBCOr6MaTLAG0wClra_d9yXPoDQkU/view?usp=drive_link", "https://drive.google.com/file/d/1jhLwkXDif2hd74huSaRotVkvtdSH5-z0/view?usp=drive_link", "https://drive.google.com/file/d/1pmkHlFRDOZUe1OWv3YxnUk_ff77MhRFl/view?usp=drive_link", "https://drive.google.com/file/d/1jqToolNY0ifi3G6NBB39glgALUbQm3pv/view?usp=drive_link", "https://drive.google.com/file/d/1jIPONsKKAExCEfJkgoJYjC3w40EAe7d8/view?usp=drive_link", "https://drive.google.com/file/d/1189eS4KD83hXEjyX3geAEAQkbNkjDMD_/view?usp=drive_link", "https://drive.google.com/file/d/1Rk9RSfCXdbxN6Nn0kFJ6O08zWyOHSGA4/view?usp=drive_link", "https://drive.google.com/file/d/1BXNfM3dHD4sda8Z-lRSBGYHPZTZLiG26/view?usp=drive_link", "https://drive.google.com/file/d/1IW_CeflQTNjOIjytJ5-gVlJWbZk7ZIaN/view?usp=drive_link", "https://drive.google.com/file/d/1rxHGeFl1KgPL_6gLQDxmfdsBZqg9a4QV/view?usp=drive_link", "https://drive.google.com/file/d/1AwmXzNsNpe0qezhB7QbN9xOBdVcztRvn/view?usp=drive_link", "https://drive.google.com/file/d/1VyaSHUxwceZEqa_i2-MT63J9KF2L8VS3/view?usp=drive_link", "https://drive.google.com/file/d/1vK-bqDQ60hXzDjjXLAu_P1IAcvgRBf6g/view?usp=drive_link", "https://drive.google.com/file/d/1hiLQhXS0QJ-C61rb39Xo5pWf1kzpSrae/view?usp=drive_link", "https://drive.google.com/file/d/1CYja6-FL2LFRgjPeWCxY3PGO0tJR6PPA/view?usp=drive_link", "https://drive.google.com/file/d/1GRCIbV-NnvqmmvKglqI9arKQPp5sFM6_/view?usp=drive_link", "https://drive.google.com/file/d/1l6kx0wC4cvGmxRZ5W-AxRusF8geDk1yu/view?usp=drive_link", "https://drive.google.com/file/d/1b7_GkMcbNDjstiD8uBVq8egV52fJhZ91/view?usp=drive_link", "https://drive.google.com/file/d/1d56Ec-37accWw88a3PskQ3OqPntQQ0l0/view?usp=drive_link", "https://drive.google.com/file/d/11DIA9vh8MzFcJHvImXv8OuWP9q_Vem2b/view?usp=drive_link", "https://drive.google.com/file/d/112vn1b6dkq3GNVK32Qz3m5K59yHDlTID/view?usp=drive_link", "https://drive.google.com/file/d/1iWyGZoEUoHdM_4aYz0VTQX2Xk2Ya2eX_/view?usp=drive_link", "https://drive.google.com/file/d/1hRTPKoAWbNCFRd1fCELn_msQjbDL9Eix/view?usp=drive_link", "https://drive.google.com/file/d/1Ag1jv3CNSYOWr_dXxa2OtYG9bTpZs2BO/view?usp=drive_link", "https://drive.google.com/file/d/1VwZSiVyzzuptaNfgsUyHHETjuRqnG1ie/view?usp=drive_link", "https://drive.google.com/file/d/1IVWyQncV_-rOfkpoek9hitrlM2Kj7NrK/view?usp=drive_link", "https://drive.google.com/file/d/1_5gj8EbKzgNSJsOzGs_hv9fhpB8L-uNL/view?usp=drive_link", "https://drive.google.com/file/d/1zkZI-3Jp0p2UzruxIAKnRNZpthBQpokD/view?usp=drive_link", "https://drive.google.com/file/d/1oadonMtvXFb26CgK7SOvplzeviNY9itX/view?usp=drive_link", "https://drive.google.com/file/d/1L6CosuCoABXZyki2XPcjko6nY8BbUnsV/view?usp=drive_link", "https://drive.google.com/file/d/1UlVs22XeL8Kw6OzqYgFUNRW7J75E__mQ/view?usp=drive_link", "https://drive.google.com/file/d/1BZADq3P3dYrE3U9s3xHP1DTrZKGodXRQ/view?usp=drive_link", "https://drive.google.com/file/d/1wMly7a_w2IQmOYEo6-ddctYc5SAVbbbc/view?usp=drive_link", "https://drive.google.com/file/d/1JxuincHH79SJrG12ce6iZCoY7r0AG-zL/view?usp=drive_link", "https://drive.google.com/file/d/1IO2ENlNJkZtWCRt4UWZT85V29bDGL_m-/view?usp=drive_link", "https://drive.google.com/file/d/1Ph60H1JcsTQujeTeGwkj836tnqckjV5m/view?usp=drive_link", "https://drive.google.com/file/d/1UNLut1x6_kZf8ZbE8uWnmfNFzh1mkq0U/view?usp=drive_link", "https://drive.google.com/file/d/1IZpe_vlg1KbiDv_vwyCPdSC2TSpAxh3P/view?usp=drive_link", "https://drive.google.com/file/d/1O-lgr1AN9RlcZjMQS1jp-rXfdf7Ed-UU/view?usp=drive_link", "https://drive.google.com/file/d/1dmgr5K0XzOO5C43P6r16dvjz4qBkgEEK/view?usp=drive_link", "https://drive.google.com/file/d/1hWARs3wQnLE2YIobhpp1Xc1hoI2IYRN9/view?usp=drive_link", "https://drive.google.com/file/d/169VF86oxIjGpoTWrqnETXzoD5agHQRp4/view?usp=drive_link", "https://drive.google.com/file/d/1TgDrR5vGeG1Q8wYL6insSc8Dv8B0JJs-/view?usp=drive_link", "https://drive.google.com/file/d/1hY0v57gVUdfFo329DR9AFYpQuwLBBvyL/view?usp=drive_link", "https://drive.google.com/file/d/1M7H8Ni_gt_tz5QLL_WiHy19jGRWmdENj/view?usp=drive_link", "https://drive.google.com/file/d/1HRZxPQ066JLkplsZoM5tEn7F8S8zN_2e/view?usp=drive_link", "https://drive.google.com/file/d/1Eo-Zu7DGv1smiTbahTjkmeuSRkMLvANA/view?usp=drive_link", "https://drive.google.com/file/d/1SBDEXtzIwRTzAMSprM3_tOfGLLTFN7Ye/view?usp=drive_link", "https://drive.google.com/file/d/1IqFYSNeFV0l3Lv3lnZgUrB6OsKGkfEBm/view?usp=drive_link", "https://drive.google.com/file/d/1hHBnyqFu7DAz0CVhzWib_MjpqqNk5WZ1/view?usp=drive_link", "https://drive.google.com/file/d/1zGBHK0dDWNvSBEXwH_jtqEWSYj_P3ixa/view?usp=drive_link", "https://drive.google.com/file/d/1xz-4oSS6wbIM3rFXDsPRVFqs4zgtTVQ3/view?usp=drive_link", "https://drive.google.com/file/d/1oQjoZuETmaP2yvKSwpTwxbjGMxi5i_V5/view?usp=drive_link", "https://drive.google.com/file/d/1rd7je1LWi2Rc4KyFBGMfogb0CqodWIRL/view?usp=drive_link", "https://drive.google.com/file/d/1UXVIOF_yOlFSrN-zCNBs2J07Q3cIgs22/view?usp=drive_link", "https://drive.google.com/file/d/1aud7OsJD_VgcjR4tl-0NTsdByhOXcYYl/view?usp=drive_link", "https://drive.google.com/file/d/1gIkxwItUR37rqJgZu6u-D55hod1QkumS/view?usp=drive_link", "https://drive.google.com/file/d/1oPZmRoy27ByKyyYEvBQ2YfZGJ3edDlN2/view?usp=drive_link", "https://drive.google.com/file/d/1KCtwS-bcIL98ZoetZTS4m4csM9DTuyhq/view?usp=drive_link", "https://drive.google.com/file/d/1N12sUN1PBc2DnXydCd_o1LjJpUphdnqU/view?usp=drive_link", "https://drive.google.com/file/d/17cNEoZiNCYoURA3b4Pzq78PIXTsoDtxc/view?usp=drive_link", "https://drive.google.com/file/d/1qslE0JGtznx-pvkSTaPfwCxPD84oQNfz/view?usp=drive_link", "https://drive.google.com/file/d/1mzBFkep7GBqI-rfaPGemK6elrZRNW7m2/view?usp=drive_link", "https://drive.google.com/file/d/15mJpLzoRCTSSz9iRBq6JPwFrLCgNwqEz/view?usp=drive_link", "https://drive.google.com/file/d/1RE92vh9UgQS7PKIq4wHQGnE3sWOX8cE2/view?usp=drive_link", "https://drive.google.com/file/d/1h9a6bLZdtmiXk7yPmmI2rUpEO2VgTVvL/view?usp=drive_link", "https://drive.google.com/file/d/1IQuCps5-pITTD_vFHTMdCZoezluEfxcR/view?usp=drive_link", "https://drive.google.com/file/d/1A7_UEv9J53TSHjcrWMHQNB9jsagKVkRX/view?usp=drive_link", "https://drive.google.com/file/d/1kdXV0J7shf5WjlI7Mt_-DE2ip1Z_wYhF/view?usp=drive_link", "https://drive.google.com/file/d/1B1UX-w7Ojbx-e11SKlG46gbfaKDsHCyT/view?usp=drive_link", "https://drive.google.com/file/d/1qr3ZWvuyuUrxIm3WKvqsTD4YpxEokM7w/view?usp=drive_link", "https://drive.google.com/file/d/1DuIeunbj6W4a-ee0LnGJYuwO7M46XjUZ/view?usp=drive_link", "https://drive.google.com/file/d/1CjezA-zsak5lu7Btxo61HkkLKGMSF72v/view?usp=drive_link", "https://drive.google.com/file/d/1uqK02_naxpCo948DMp0dVZv3TZ4bs31A/view?usp=drive_link", "https://drive.google.com/file/d/1ghwf8m2X6pshvwsZVH0pTUNWePWBnvip/view?usp=drive_link", "https://drive.google.com/file/d/1keYR-IAXq9PYDTrHkp_BukSeHEzyn-oK/view?usp=drive_link", "https://drive.google.com/file/d/15fk8p5HQ07uusd7YcspfipMIMlEvhuQk/view?usp=drive_link", "https://drive.google.com/file/d/12g0J4OO1fTG_n8_i9VcOpJGyYqnPuqZY/view?usp=drive_link", "https://drive.google.com/file/d/18IsrwezCN0SfJ6iWqjGvzYnATs2ytLAu/view?usp=drive_link", "https://drive.google.com/file/d/1g0m_bKXHUGv1bJEmXmCZ89OnNQex5hmQ/view?usp=drive_link", "https://drive.google.com/file/d/1Q5qkM5KHc3smlBF4b-C1M0LL1mlltMcU/view?usp=drive_link", "https://drive.google.com/file/d/1BVstKY7rCSN-gvsidCNc-e9c0NzXH3yN/view?usp=drive_link", "https://drive.google.com/file/d/1EWEsnBa35F0k2_amfXc5VY7ky6VNAzPG/view?usp=drive_link", "https://drive.google.com/file/d/15Yj2mPbGFBuiFqxuX9KLT7U2MikyuVKn/view?usp=drive_link", "https://drive.google.com/file/d/1BPl4XMvqYuA7N7q008XsshJetj2quk2Q/view?usp=drive_link", "https://drive.google.com/file/d/1cZnPsQyS_RbnDymdaNfB1kyA3VlHuKUo/view?usp=drive_link", "https://drive.google.com/file/d/1FEqcABToTL0ZQoQpB0rtnT3blx3HI9hN/view?usp=drive_link", "https://drive.google.com/file/d/1nblVUiZF6g9R5ZU-qof8ERViRWZfKsyZ/view?usp=drive_link", "https://drive.google.com/file/d/1ej14G6a3cdSNzbjc96IFGGeJwLojAsab/view?usp=drive_link", "https://drive.google.com/file/d/1qOW6dZfmsYiz3A8TFUHeJ-xeUODSK_ZQ/view?usp=drive_link", "https://drive.google.com/file/d/197pz7gmKtuQ8cc7EINjlJes5iGnwooGf/view?usp=drive_link", "https://drive.google.com/file/d/1PNWK_AM-XtrOdHiQTb3LdXrIO9sMg_YP/view?usp=drive_link", "https://drive.google.com/file/d/1gNa9Wm1yXINLOIkGFw6LGetgFL_2kL-F/view?usp=drive_link", "https://drive.google.com/file/d/12lwVb_hYd4RH6azzVCt_np-2nNQhdfzS/view?usp=drive_link", "https://drive.google.com/file/d/11nxk8D2I55NPwu1_UTCnmKJ1atu__kug/view?usp=drive_link", "https://drive.google.com/file/d/1geXEsVtMPS5YevYtT3jt2cAjhNjQ52LC/view?usp=drive_link", "https://drive.google.com/file/d/1IZzX6Hxpx2PCGP_FBrsng8Nl-pPC7ldY/view?usp=drive_link", "https://drive.google.com/file/d/1hCAme9PrM5bsFJW8Gt4BbW8XgR84Jfiw/view?usp=drive_link", "https://drive.google.com/file/d/16U-KkN0XVUxvxpEQUT1qaZZrk4-2kv8p/view?usp=drive_link", "https://drive.google.com/file/d/1AlEM3aZCdRKr-CwA_NqXr6x2uyFN6SDO/view?usp=drive_link", "https://drive.google.com/file/d/1O_oNsWwxT7GmaZzEXXQ_UZgiTwD9Ckp0/view?usp=drive_link", "https://drive.google.com/file/d/1RgETErHkP1qEZnFhm14a5ROZD1LwTtQ-/view?usp=drive_link", "https://drive.google.com/file/d/1hBT9WBQrEyJr8TpMHndDTJXZmZVpgFxm/view?usp=drive_link", "https://drive.google.com/file/d/1nkkEt6F2GlNozy9MMxZOMdPNXe1BgO8X/view?usp=drive_link", "https://drive.google.com/file/d/1CXWbaxxIrVT0fHDlRStWoJxouWdSttf-/view?usp=drive_link", "https://drive.google.com/file/d/1Vv0ZWB8MbYSo-uFgLHiqwEqn1kUvC1Br/view?usp=drive_link", "https://drive.google.com/file/d/1HdQCwpDyfBx5QhmgiqC-CboH2SdGsoCv/view?usp=drive_link", "https://drive.google.com/file/d/1agxdZShCFGULCL4U7fNhQuXnK3zREDAI/view?usp=drive_link", "https://drive.google.com/file/d/1442L6uMT9ylpPs2C--dmR_ko8wLMJwZc/view?usp=drive_link", "https://drive.google.com/file/d/1Ic5K11CSy0-_gvqNv0qCJq_NFet7--9I/view?usp=drive_link", "https://drive.google.com/file/d/1Cb-LpyeFmjyalDz5BPaTI9A6ZfO-XEjN/view?usp=drive_link", "https://drive.google.com/file/d/1929Eo134JgwNHjPM9y1kqgs5f2R4P3Po/view?usp=drive_link", "https://drive.google.com/file/d/1KI0rgqmhECtlev6z2DKRRFeYvp0z4sn7/view?usp=drive_link", "https://drive.google.com/file/d/1NxwBOct24nFbwl2_5rLXv6oqtr7Og99I/view?usp=drive_link", "https://drive.google.com/file/d/1lrPQIK4k8M5iH9G4UfB2AsC_47AThhID/view?usp=drive_link", "https://drive.google.com/file/d/1s8xX7KN2OuhDUIcbidnES_5sl58N54ss/view?usp=drive_link", "https://drive.google.com/file/d/1b_Hwb3dxR-S-4iCAv8X1lG305pubhT7D/view?usp=drive_link", "https://drive.google.com/file/d/1vZ3U-cZY5pqKypHnIAfj5DpciN65nuIg/view?usp=drive_link", "https://drive.google.com/file/d/1PDN7_Jd6-jk4cFqqDbn1EHnhctmdvXty/view?usp=drive_link", "https://drive.google.com/file/d/1E1V35w4nHLijvB7CE-FhRJe5FmUNi8ra/view?usp=drive_link", "https://drive.google.com/file/d/1RVFHercH2erHC2qFGOopRuKihtBIQmg7/view?usp=drive_link", "https://drive.google.com/file/d/1_ZqIw-7D7eZz3kAkUyhWgZsyVMhUpESJ/view?usp=drive_link", "https://drive.google.com/file/d/17BiPlp_5GhKj4ZMqtd6Gk4-lec0ueOCd/view?usp=drive_link", "https://drive.google.com/file/d/14cvo3K1FT64lmnSwplWEpue9QEbN3uNW/view?usp=drive_link", "https://drive.google.com/file/d/1c7xvCrdYlFa7TYEcfDsF8lxnTd3peb5u/view?usp=drive_link", "https://drive.google.com/file/d/1bxl_t9C-SHkR-7UanK4C84-xwWoEdlZ8/view?usp=drive_link", "https://drive.google.com/file/d/1_DBCnQqJ-T7jS-cLiTatwT3f7KCYQLxg/view?usp=drive_link", "https://drive.google.com/file/d/14mE65Bete1r85buqOuHDv-jXgFWxiwvb/view?usp=drive_link", "https://drive.google.com/file/d/1Ljd2zliG5oHZ-SJ3rTtNFHUOuwYCnLHC/view?usp=drive_link", "https://drive.google.com/file/d/1x7FTY1wUVdalLR5vfPSkJZy-h5yVdHiU/view?usp=drive_link", "https://drive.google.com/file/d/1KYs9Sgchi5I0KBbsT-uttj_2Z9M0SokC/view?usp=drive_link", "https://drive.google.com/file/d/1NyUxWhgwZA0fSoihDkYd-Ft7GHTn8siw/view?usp=drive_link", "https://drive.google.com/file/d/1zcxuSoa6UhSi3zDc6lTbYbyuCl3zD21L/view?usp=drive_link", "https://drive.google.com/file/d/1GG3zccd6ggj5u7viykPM33dFMN6iRbFM/view?usp=drive_link", "https://drive.google.com/file/d/1Y2sPyCetJFlBrjKJml1BqOactRP7kqn6/view?usp=drive_link", "https://drive.google.com/file/d/1fRZv4jbT5i9vLPCLRc5mmfzbS87IArkD/view?usp=drive_link", "https://drive.google.com/file/d/148ExCpM2NURVryAyexopagSvtrr72rce/view?usp=drive_link", "https://drive.google.com/file/d/1r58b7Vm7yiZGqvkTCUZ9bdl5nQyp0MAz/view?usp=drive_link", "https://drive.google.com/file/d/1pBD6ILHHLJ1078tmV_78HoY4o76ze73P/view?usp=drive_link", "https://drive.google.com/file/d/1T7Pl6CE8W7LntUtDdM5BceQh9A-y0H8z/view?usp=drive_link", "https://drive.google.com/file/d/1js3syP7gpcYV2g68lp8txcFb4LkTymcu/view?usp=drive_link", "https://drive.google.com/file/d/1bL6fu36cuklapV7UKNmvnGX_vONTdaDh/view?usp=drive_link", "https://drive.google.com/file/d/17FialEwjWtd4_y-09JVsY_e0RFlAB0Mg/view?usp=drive_link", "https://drive.google.com/file/d/14bFHwzQGs5W0srWMXWmTwqvgkk_x3_Dx/view?usp=drive_link", "https://drive.google.com/file/d/1AUqVhjpShGCjFuB4-XHcPtBY6ZEbSx_V/view?usp=drive_link", "https://drive.google.com/file/d/1ZZJzErEmm9Y5FBaOafh8lIRufcfLlraN/view?usp=drive_link", "https://drive.google.com/file/d/1sGsapDQ_Nw-yOEKK-i5KjNRrSO8cirMb/view?usp=drive_link", "https://drive.google.com/file/d/1Mfp7SjyqKE5Z02Z8yg_3T5Tr8z3lyA19/view?usp=drive_link", "https://drive.google.com/file/d/1Fts-V4wRDeuUH8S4xDbwa5qip3JxL6lz/view?usp=drive_link", "https://drive.google.com/file/d/1t0IQl11w4myNr1h_20iVQePZKbdaC_y4/view?usp=drive_link", "https://drive.google.com/file/d/17oDFopvbJ7pYSQj6z2mm16fpzbiEvOGd/view?usp=drive_link", "https://drive.google.com/file/d/1crsNKWeYD4kSscbB8ZQd_9uHGhDu5eS9/view?usp=drive_link", "https://drive.google.com/file/d/1AA-tbaOy_ajmq1zKwQBaSZnCuOz34p-f/view?usp=drive_link", "https://drive.google.com/file/d/1Bef7xaRPWB7idW2VriBi5Pqwi88Y9vd9/view?usp=drive_link", "https://drive.google.com/file/d/1Iwc9UJdp2xfRBQBdksnCyCoufhSBGF_L/view?usp=drive_link", "https://drive.google.com/file/d/1Ky7oC_vEdfD8BiFfSpDRsxwR4-38pkY2/view?usp=drive_link", "https://drive.google.com/file/d/1Dj3y4BfeFKfRL2v2T6EBnsYR5nKqsysj/view?usp=drive_link", "https://drive.google.com/file/d/10euyk7WvOhCwXY8wZFe4Jj0oqHTi7PPP/view?usp=drive_link", "https://drive.google.com/file/d/1Ky8U3kpD4rjgGLZYhGNov6Sqys7_IkG3/view?usp=drive_link", "https://drive.google.com/file/d/1Bnlj6DY0zv3fmu9jxPqxrpE9aG-Yapkx/view?usp=drive_link", "https://drive.google.com/file/d/1vMMy282pvbb_FT5ifca84vVXvVQVdnx5/view?usp=drive_link", "https://drive.google.com/file/d/1Z7l_M5f8lVWF0MiZq9Sc6P5cpocHPs6O/view?usp=drive_link", "https://drive.google.com/file/d/1BvrmsacYCxJbI6pieajDq648sBM6x_8o/view?usp=drive_link", "https://drive.google.com/file/d/1rCNZwXfc_Lo9yC-_C2ymNCWuFdqwSylR/view?usp=drive_link", "https://drive.google.com/file/d/1-4aqTJiUf0Y8_1S5M69mdV_9ICD-YXgE/view?usp=drive_link", "https://drive.google.com/file/d/1Me11-RwFhevlP2CmscGMCbtCUXkq3EWO/view?usp=drive_link", "https://drive.google.com/file/d/1x1HpjBUbOYpVh2296pVKKddoCSvBYRmd/view?usp=drive_link", "https://drive.google.com/file/d/1t42CJPpdWS6B7n3b3yiZUJNl14ZcAOT3/view?usp=drive_link", "https://drive.google.com/file/d/1M0Z5CL338MIWUIsF71YeSK_aoVyNcCQj/view?usp=drive_link", "https://drive.google.com/file/d/1_i0DalURKz2qGhUI4x1QL_B_vAXYEijG/view?usp=drive_link", "https://drive.google.com/file/d/1Ue0-LSdDvjpDg2dzS4GXYAPafo-5n0N0/view?usp=drive_link", "https://drive.google.com/file/d/1T77sH-_WKFL2wVAufxHNth3qPH7erbQF/view?usp=drive_link", "https://drive.google.com/file/d/1EmC7xOoj5FrsLVgNXF4Y3DhJDilkfb7Z/view?usp=drive_link", "https://drive.google.com/file/d/1kD7i0EtZJh5Qg7HQrxxxA0e8SC7abm47/view?usp=drive_link", "https://drive.google.com/file/d/1LtIOuqxxNkmf5JnHbr7MeiNmfNs_ULXo/view?usp=drive_link", "https://drive.google.com/file/d/11X-T4QnTawOQXWS0NznRgYrTKooEQ6Pf/view?usp=drive_link", "https://drive.google.com/file/d/1XNAXDKyx93XYixMJl_Tc2JcZ6QwWqnRZ/view?usp=drive_link", "https://drive.google.com/file/d/1VpGKt4_kcRCoJdlStZqfMfU4YrkRCF29/view?usp=drive_link", "https://drive.google.com/file/d/1wdZU12eD5YqITEP0i7THTT239SIYq_xR/view?usp=drive_link", "https://drive.google.com/file/d/1mFTmRpiAM5B-LbFM9gS9lycc751GMQUL/view?usp=drive_link", "https://drive.google.com/file/d/1hp7LXVc82jKNOxWz7RA8YLX71MYukacr/view?usp=drive_link", "https://drive.google.com/file/d/1QDWra8jYp--LNBkhAUA9iMACgktRBqz4/view?usp=drive_link", "https://drive.google.com/file/d/1US_YJlCH7rt0aFQCX24-5XLdpGteL0UX/view?usp=drive_link", "https://drive.google.com/file/d/1GrtrjSjWrtcDKhu8aBbGEUUw0LVWTIJy/view?usp=drive_link", "https://drive.google.com/file/d/1y4Ogg3BRUIqU67gWAhnQjOfxepjAN2FI/view?usp=drive_link", "https://drive.google.com/file/d/1AZT_RcZaOfkkWQQR8IfIICprGQUqro5N/view?usp=drive_link", "https://drive.google.com/file/d/1Lgh9nu1s0iMJysXed9Z-Dbt3eG3Bvlu0/view?usp=drive_link", "https://drive.google.com/file/d/1h7ft8gbf4CyCPHJc-0FQ9yeYeLDjQOF1/view?usp=drive_link", "https://drive.google.com/file/d/1jqggJ3gkDVcV4F5JX-E8eGKzVToT2nRH/view?usp=drive_link", "https://drive.google.com/file/d/1kNdZtb9TAziQ3DXTluoCOlgrRMs1cp4c/view?usp=drive_link", "https://drive.google.com/file/d/1LlTUTmYLUXksIF_tfogjXfbFmRJfgaZs/view?usp=drive_link", "https://drive.google.com/file/d/1mxtDeIYMRv9_IzWIJrHxzTadDlkJaQFI/view?usp=drive_link", "https://drive.google.com/file/d/1c2LggHQeq_205CCZA8N4fOTffUb1SQ7i/view?usp=drive_link", "https://drive.google.com/file/d/16Z8uJ2SXCaf0MNL9PMJ4oVldFcv1cLwa/view?usp=drive_link", "https://drive.google.com/file/d/1eRmIFuxg0LWnk3lzzwCO1xZgxLApCLna/view?usp=drive_link", "https://drive.google.com/file/d/1UGOJJjHzRVi350iE-8Llv_j4S-HXfCM7/view?usp=drive_link", "https://drive.google.com/file/d/1KjhEnseQVGpmf8G9mLhSEkAK8k_Q88sx/view?usp=drive_link", "https://drive.google.com/file/d/1vbRAZgGUHM6Q1IbddMOxrRENWb0wjjYV/view?usp=drive_link", "https://drive.google.com/file/d/11wSrybzqac_NIsPnH1L-7mS370CxxBw0/view?usp=drive_link", "https://drive.google.com/file/d/1-CZZ6cFUZGw494b0rU7d8HU8GBnoiNNg/view?usp=drive_link", "https://drive.google.com/file/d/1OzyW0EkSxptIbZkT0EC3rASFV5QrnRjN/view?usp=drive_link", "https://drive.google.com/file/d/12kDJ6VMvvI6Sy3Tr5pchQh4LQqQnk9dX/view?usp=drive_link", "https://drive.google.com/file/d/110DG70VHsSEA7yhrXJ8wL439nlsU9cV5/view?usp=drive_link", "https://drive.google.com/file/d/10iheQHkqYqgpZJWMZItH9rsuZzXQR0RA/view?usp=drive_link", "https://drive.google.com/file/d/17X2zyEFlujAmkebAUuNiHI-l_K2t9jZW/view?usp=drive_link", "https://drive.google.com/file/d/1nuZgmEdqjAuGN9CJzd3vkGumSF-RrwQS/view?usp=drive_link", "https://drive.google.com/file/d/1GmdPkiVv7YfwZao_uw6B2DJb3fuAzEIy/view?usp=drive_link", "https://drive.google.com/file/d/1-5z0UEDmpAeReaGxN9kRrxm5KSjoIeSD/view?usp=drive_link", "https://drive.google.com/file/d/1zHzrcfNl6vDfjElu8wiTMd2CBpYsLaUj/view?usp=drive_link", "https://drive.google.com/file/d/19mQJ1bPzE6kTslGtNCr79lRgWVOFJ1Xc/view?usp=drive_link", "https://drive.google.com/file/d/1WSenbnykCaQ78RiQCg5LWkKYiqvsFJim/view?usp=drive_link", "https://drive.google.com/file/d/1ZBah5r4EcMGNeflQ_l5RPNcyfVX0CRhw/view?usp=drive_link", "https://drive.google.com/file/d/1WbZhBA-vXiGoBy48xvVwM_c5x8KaAjKA/view?usp=drive_link", "https://drive.google.com/file/d/1BPE6GbfZ4qAOonwX51gFyxopcmGR2y4g/view?usp=drive_link", "https://drive.google.com/file/d/1WESg82w2F15TX03wAIIApNQf42MsBMLV/view?usp=drive_link", "https://drive.google.com/file/d/1urc7dkxLCCU72gmRKHoJ784y_5wL_UUl/view?usp=drive_link", "https://drive.google.com/file/d/10jfiURE4BgRZ1aLN9WH_sw3DNhJ9gR84/view?usp=drive_link", "https://drive.google.com/file/d/172e_Pe_hBX4s-PJCqQkhoVdALSuvb2_q/view?usp=drive_link", "https://drive.google.com/file/d/1Y4C3A8NWP4qI57JbOG6kTb4kdm-xzPWU/view?usp=drive_link", "https://drive.google.com/file/d/1NtsZKRjrh1ZUVe866pAT2skYEMK8O4xe/view?usp=drive_link", "https://drive.google.com/file/d/1ABsrn2OSsKoH7SKBsepsq5IgQAwubcBZ/view?usp=drive_link", "https://drive.google.com/file/d/1VKIY9ZM3ZqmH90v-4PLCmaNC3G6y5V7c/view?usp=drive_link", "https://drive.google.com/file/d/19qI_KBqQvta1vjKRhlydsKWILe3PRjGX/view?usp=drive_link", "https://drive.google.com/file/d/1HyowzSLbytIeiYeihec3zwxsT1RBApvK/view?usp=drive_link", "https://drive.google.com/file/d/1U18sbKJALHsqOcUb2FhQUswcAcEdp0AT/view?usp=drive_link", "https://drive.google.com/file/d/16a44liQcgChQK6oKl_p8Y_tfZIEvaonk/view?usp=drive_link", "https://drive.google.com/file/d/1b8ktz8CAeI_QBy_EbhxIzfoBflxsxME5/view?usp=drive_link", "https://drive.google.com/file/d/1l3q259-GjfWrdaswrAI1gvUZkjuQsPRM/view?usp=drive_link", "https://drive.google.com/file/d/1jf-N-kVWy6JPPTJQ-22tkYP1OFE6Z4Sf/view?usp=drive_link", "https://drive.google.com/file/d/1NGyqpsesI7EDCzdDKjhLhvv-b4C_N-X-/view?usp=drive_link", "https://drive.google.com/file/d/1XVJuggKW9W3pN4wKQd2xi24Kk0-tLXvI/view?usp=drive_link", "https://drive.google.com/file/d/1bu-Va5teeRI3KxMjWoFl77uthtVHJx1O/view?usp=drive_link", "https://drive.google.com/file/d/1T1sh0g2dZTysHOWsMQ-NokDins_9CybJ/view?usp=drive_link", "https://drive.google.com/file/d/1ogozL-alz20N9-lx564-nV6kUxRDj41X/view?usp=drive_link", "https://drive.google.com/file/d/1AKTN3B29KnBO8WbVSCQHamIm5m9i25X6/view?usp=drive_link", "https://drive.google.com/file/d/14oCQuzDcOYsNx1FNMb9q2_mouK_KTyS6/view?usp=drive_link", "https://drive.google.com/file/d/1Dz6SBJgX4LewZV0WOqIoeICvqncMjvvF/view?usp=drive_link", "https://drive.google.com/file/d/1kJWKxyLPN9WxJQEMD00h8b0neXbBv6o7/view?usp=drive_link", "https://drive.google.com/file/d/1PkDlBO1bARtzT_FPaOWCWP6XsLZWr0oE/view?usp=drive_link", "https://drive.google.com/file/d/1X8daLhr40-ao00JfYuwmUi0KY1QQOgIZ/view?usp=drive_link", "https://drive.google.com/file/d/10EgIIldSkKy8afpQncF0KVYpITIGWnYg/view?usp=drive_link", "https://drive.google.com/file/d/17t2kErmlh3GtoYrjxk8ZDL5d_KJpb3e6/view?usp=drive_link", "https://drive.google.com/file/d/1EsFp52la0th0YE3MOz0QQdj1SuaMvsim/view?usp=drive_link", "https://drive.google.com/file/d/1-k2G3wpXVPdRnXy789sySvKEqfHkasqY/view?usp=drive_link", "https://drive.google.com/file/d/1p1SWYAg3H7qyyv8YrKSKdBhSzOFndFk5/view?usp=drive_link", "https://drive.google.com/file/d/1UiXosBzbKxSFn4z4rQTLXLupGO-f9uEA/view?usp=drive_link", "https://drive.google.com/file/d/1Kry_9eabuK2jH-GrAeSWu8xqU-dWAL02/view?usp=drive_link", "https://drive.google.com/file/d/1spnl0OHQmj_oTFl9pX5w8lGCXihNePAM/view?usp=drive_link", "https://drive.google.com/file/d/1J1yHTEgNocaldV7O2Zf7oqwUG6sR0Nrq/view?usp=drive_link", "https://drive.google.com/file/d/1VbDKwkbG2AO6y4NYxh_IEwBk3Dcw763s/view?usp=drive_link", "https://drive.google.com/file/d/1uDXS-huDRGk63Os2oSBJ-vzYgPVYTdV0/view?usp=drive_link", "https://drive.google.com/file/d/1n32Vxdk8YWDSpHR6tKRqyrnnuXPjQMkM/view?usp=drive_link", "https://drive.google.com/file/d/15c_VDKDYW4HEEf_ETUjwVQntrjE_YDl9/view?usp=drive_link", "https://drive.google.com/file/d/1OVnthzHItRQd3K31c_WAxllsMP7dR7Vr/view?usp=drive_link", "https://drive.google.com/file/d/1t3dCRf5KVZD-ABx--lFsZ2v-frg-2Mrv/view?usp=drive_link", "https://drive.google.com/file/d/17aEsMzaiNUu983UzEErkDEWitSdahykD/view?usp=drive_link", "https://drive.google.com/file/d/1PXqfJJC7OqIhRHZwrq72nQJ_DtYvqh8k/view?usp=drive_link", "https://drive.google.com/file/d/1e3o6AWNmyJ2GqmzgAjdOpZTnII8lrmnf/view?usp=drive_link", "https://drive.google.com/file/d/1k6waLUxAjWXYPUga7VO84V73m23JUHO3/view?usp=drive_link", "https://drive.google.com/file/d/1zigcZM8Dg-BiZEn4D0mQADesi_nxTQBe/view?usp=drive_link", "https://drive.google.com/file/d/1SoQPMl2fKvCEFgU0k6JDSuauSJ-HII2z/view?usp=drive_link", "https://drive.google.com/file/d/1NxH5TFAlLX0TD3IsNw0DKj6G2bwYx5M-/view?usp=drive_link", "https://drive.google.com/file/d/19nly3A2xR2-5kBLcuf3uoA7Be2CvvgwT/view?usp=drive_link", "https://drive.google.com/file/d/1NbDIRF2KOdn4dWEISsJBWi8VCJuMHetM/view?usp=drive_link", "https://drive.google.com/file/d/1CrsV4tsva-M3164CU_lyrGEQoh_LVGh-/view?usp=drive_link", "https://drive.google.com/file/d/1ae08dTuYZjPKageTdVmGWMjXVlTkQtzV/view?usp=drive_link", "https://drive.google.com/file/d/1ECRDa1LgN7Hb9G5stVZ_mQ2_eg46IBSk/view?usp=drive_link", "https://drive.google.com/file/d/1aFX_7aC7TCIX2STYw5waa-XP4-1DGkik/view?usp=drive_link", "https://drive.google.com/file/d/12fbLnxlryzFvjUQTYr-wgHXqXvL2S438/view?usp=drive_link", "https://drive.google.com/file/d/1x7a0MUEaWnQVj141jdN3lTUX-u0_po-w/view?usp=drive_link", "https://drive.google.com/file/d/1RjPIKHMxvrSE4VzA-UClUgJyfBFu8Oia/view?usp=drive_link", "https://drive.google.com/file/d/1AUCVA9OtQDB1qpAZdpWtaZHIRLd_1WF7/view?usp=drive_link", "https://drive.google.com/file/d/19rCTyzTORnMlP1wKOVt4C0LeGO3loxfi/view?usp=drive_link", "https://drive.google.com/file/d/1KjjMS2GvuXnhplugR6e0Kn_Ul6WWcSwg/view?usp=drive_link", "https://drive.google.com/file/d/1xgYIB7Jc8DrgsD-4SJKDyFrFVhVDrd6j/view?usp=drive_link", "https://drive.google.com/file/d/1hhX5G3bHWJaZhQJjIHgNgjlCzZU1-EXw/view?usp=drive_link", "https://drive.google.com/file/d/1Ta-ZI1Sw0W37DWOPi26OxZVczqa47FoK/view?usp=drive_link", "https://drive.google.com/file/d/1Xz-OzgDzVqQdWtQtVanpmZDLdAGzbIFZ/view?usp=drive_link", "https://drive.google.com/file/d/1apsjYKt1YNPB-wlYM2uHLBc4g3gwxZUQ/view?usp=drive_link", "https://drive.google.com/file/d/1muwYZDIw2_Bfgwhwo969Cz0vp-1Kbceq/view?usp=drive_link", "https://drive.google.com/file/d/1VFDtXiibR7OzJG8V2PtQH-LGDECJv5DY/view?usp=drive_link", "https://drive.google.com/file/d/1LiuJEAPMC9nSFk0raYMA1o-Amiif95uM/view?usp=drive_link", "https://drive.google.com/file/d/1dWHtOB5ANkkfSjy4gpE7sCjpKEDI-ybf/view?usp=drive_link", "https://drive.google.com/file/d/1oAIYU6WaonP-FPzSwOYJWxlOpN7GT-Ki/view?usp=drive_link", "https://drive.google.com/file/d/1G0J5Sb8x2mx0omWS_ZUgSBgq2k7S2aGn/view?usp=drive_link", "https://drive.google.com/file/d/1uCpQzBfTPxNOmrvg5OknvbFQSDcmmWq1/view?usp=drive_link", "https://drive.google.com/file/d/1B3jzvzdISxV3zfydn6S1-P_256F8I5zg/view?usp=drive_link", "https://drive.google.com/file/d/1JQ1N5CJABYslaNpPXVxJgOGKT1k8zYDs/view?usp=drive_link", "https://drive.google.com/file/d/1X98Iiy3VQ8ImWs1SDxHJ2oqP58T5TtX9/view?usp=drive_link", "https://drive.google.com/file/d/1McUWXKMenPbkDrN9o6w7m9w_stN-yxUP/view?usp=drive_link", "https://drive.google.com/file/d/1EodELbT3H8GDgPqDqKy9f_YbHT4DRcAf/view?usp=drive_link", "https://drive.google.com/file/d/1_sKVOs4gXIiYHXCoe2oc5rMwPJgrMd9V/view?usp=drive_link", "https://drive.google.com/file/d/1zfu8KIFTO13fQ-QiFzQz9eSh5S-19pXt/view?usp=drive_link", "https://drive.google.com/file/d/1-NXU_wPnMmbh5YjJ_zHic9mufs_cfTPn/view?usp=drive_link", "https://drive.google.com/file/d/1kJ575uGSgJ6ilnwXYqN9LgKnm_Pk7eA-/view?usp=drive_link", "https://drive.google.com/file/d/15b2NWUT1HwT0VVqmpdh8qfm0kbEW3Jd_/view?usp=drive_link", "https://drive.google.com/file/d/1ntSLnWFyvDeb6ryaqLxfZTN6zAYVWGM7/view?usp=drive_link", "https://drive.google.com/file/d/14b4TdyjgSRglEnfdKvgm208-4M12DlIp/view?usp=drive_link", "https://drive.google.com/file/d/1dZSKc3L1dtCZt6K_TEaYHiNl9W3z8LLi/view?usp=drive_link", "https://drive.google.com/file/d/1Go9VgUhpeE1ddFwjJUBxEj-EOJC_lnQU/view?usp=drive_link", "https://drive.google.com/file/d/1hFjsX9P7c1_mtGmfXtR5Av_vtLGqrrWq/view?usp=drive_link", "https://drive.google.com/file/d/1OQvs8juu5cKyiggR_MfEeZVG9OpOdLJt/view?usp=drive_link", "https://drive.google.com/file/d/1Ty_oJYCeGrV0-b9p2ic14upoCWuK_Pfb/view?usp=drive_link", "https://drive.google.com/file/d/183TUO8DqW1EZWHDSEmRI1RWQRE6qZHBL/view?usp=drive_link", "https://drive.google.com/file/d/1n-eGQM2d5XA0NXiR7lEDARv1y8fJ9ihl/view?usp=drive_link", "https://drive.google.com/file/d/1H2nJgIXXtutJlIv_K5KZEdH9oWnjGlR5/view?usp=drive_link", "https://drive.google.com/file/d/1Ip4SROBCqBdqzYoHgz4KPWY8vJ8rgz9v/view?usp=drive_link", "https://drive.google.com/file/d/1amseoRi83BZpnXTwXEAMPU_fJIqlpStD/view?usp=drive_link", "https://drive.google.com/file/d/1Vc3ZWYhxxLTef1nPutAm3n6k5XOEENDT/view?usp=drive_link", "https://drive.google.com/file/d/17tJZ5JchRcBAKBcJL2HGf7wgbZcv21ja/view?usp=drive_link", "https://drive.google.com/file/d/1XRBmFbs7M3-rpCKvCNzlM4p4U9u49b5B/view?usp=drive_link", "https://drive.google.com/file/d/1x8Z_PlP0ddY4ZcnJAdUnWCA2rW3zK-0p/view?usp=drive_link", "https://drive.google.com/file/d/1Bg-xOu3e97C0uKO1ugROhvUOudmpLE2r/view?usp=drive_link", "https://drive.google.com/file/d/1yWjOutrcqyNLkLmWtN-PLtAIaAsYPP3A/view?usp=drive_link", "https://drive.google.com/file/d/1st-ghmZs7tPx2xEseiiuuUNwvkywaOz3/view?usp=drive_link", "https://drive.google.com/file/d/1A7-n-hY8byCmVWvSMxfXeCh3j12IENud/view?usp=drive_link", "https://drive.google.com/file/d/1vs51D12NJCDz5rO8d0sQaN6sQdeD4o6-/view?usp=drive_link", "https://drive.google.com/file/d/1l0QDi0tmlCCrKEa8lbEBWrMMWYF7OxZI/view?usp=drive_link", "https://drive.google.com/file/d/1hsxeBtwXFrGS_kp5_XT9wOSU3WF4DakU/view?usp=drive_link", "https://drive.google.com/file/d/1tvJjKo7C-ZJfkeGzCk62wAPksTzoDqGP/view?usp=drive_link", "https://drive.google.com/file/d/17Vq1H64-I9a7FmGoPNlwZO-TlNZtaevQ/view?usp=drive_link", "https://drive.google.com/file/d/15D2RxQT4wN2Hzrq-uhhkpAxQbVbujVBE/view?usp=drive_link", "https://drive.google.com/file/d/1Brl9dxxx50K3njju8BeQU1iHNWhf6cHR/view?usp=drive_link", "https://drive.google.com/file/d/13lvwO_k3H2IQVydTiTnKUJx9Lv5XLgu3/view?usp=drive_link", "https://drive.google.com/file/d/1AaLJ5bSiFDX8g-DW_YVCbhFpphF8GXxs/view?usp=drive_link", "https://drive.google.com/file/d/1AVqxpztNGwRVovIaH671WuZ0AinVU4tM/view?usp=drive_link", "https://drive.google.com/file/d/1iBu6eJ-m0UgIqXGLsYN1auBv9SMulT6m/view?usp=drive_link", "https://drive.google.com/file/d/1XdMOHaRAa6yXR5y46DIaXNteSLtbQ_q6/view?usp=drive_link", "https://drive.google.com/file/d/1z1QZAoxojhRztOPF4UjVRVLG0Wj5NK9K/view?usp=drive_link", "https://drive.google.com/file/d/17kF6fxIktn1lV-B1fylpgRB29TKsrk_r/view?usp=drive_link", "https://drive.google.com/file/d/1jafwBRl4UhLVa3Gi00qSRHV5jbJwm9IO/view?usp=drive_link", "https://drive.google.com/file/d/1zmExCwKMqy_YdZHEUAzE1TTcdZ1oMGLr/view?usp=drive_link", "https://drive.google.com/file/d/1z3go7j7KR3_TIlY7y49wNTIn-romRSjy/view?usp=drive_link", "https://drive.google.com/file/d/1CIO5s_dX7yk7OGgIOR_qARJxEuMzkZrC/view?usp=drive_link", "https://drive.google.com/file/d/14OzGOsN3P8dcN9hbyeqxnMAEZQN-0VaV/view?usp=drive_link", "https://drive.google.com/file/d/1mKD1Rbiy8d18YVIm5NZ6dFtN9kuHqlJD/view?usp=drive_link", "https://drive.google.com/file/d/1EAxfitMsJLu3FapQoW7CMhpNBwZOfZO6/view?usp=drive_link", "https://drive.google.com/file/d/1zILQ7pzz-FbteqQMA66IXaULNnie5Hp9/view?usp=drive_link", "https://drive.google.com/file/d/1WgKfxxII7KyktbzMPqdccJyiKk2Bs2KS/view?usp=drive_link", "https://drive.google.com/file/d/1wuUoeoavNe1GtZAxV9MkwML5Adolu5Gg/view?usp=drive_link", "https://drive.google.com/file/d/110YSBRU19KmdqpXZaazVeb8TcVx3t1AN/view?usp=drive_link", "https://drive.google.com/file/d/1x9X6rBQLvgOUlWXgtetuiDBoUmgfvHUW/view?usp=drive_link", "https://drive.google.com/file/d/13PI4zf3UozO71GJ2Wydm1foL4gT31ZNF/view?usp=drive_link", "https://drive.google.com/file/d/1F8XV4Pcwu6FA-6nnoYVhgo8Un0hxL6nM/view?usp=drive_link", "https://drive.google.com/file/d/1xqb_RTt1nKIqPlO2RMdT8pRLqFK_dPBH/view?usp=drive_link", "https://drive.google.com/file/d/1tFgSB79xJyi-ICISPqSk1oUjyvo-_Zcb/view?usp=drive_link", "https://drive.google.com/file/d/1t9e-Y4bqTtZzfh8mN-2gIMhobDZXggMX/view?usp=drive_link", "https://drive.google.com/file/d/14BUpTs-ujb9fpeoBrO1VTQpbSFFQkjaT/view?usp=drive_link", "https://drive.google.com/file/d/1sUGVR68JpoyNnQN6CDRyqghhawRO_UXg/view?usp=drive_link", "https://drive.google.com/file/d/1OMb8ZSDfN1TmEwXSMCylwCQapNyxJPyb/view?usp=drive_link", "https://drive.google.com/file/d/1y8DCLY3ZewMdCFOD8iEMui8bs1CJsDrW/view?usp=drive_link", "https://drive.google.com/file/d/1vTAfmkJ6bBGpFZfVMZwAe1t9R6MfBcrt/view?usp=drive_link", "https://drive.google.com/file/d/12os7F0QvPP2K_qZattQGVQSZ6ED_Kwcv/view?usp=drive_link", "https://drive.google.com/file/d/1WsG1NqAUO3x9U-Rja2AZFn_lnCg5ZOTx/view?usp=drive_link", "https://drive.google.com/file/d/14adZ6n3QoadbN638UM5Ok-BZOqdSTm47/view?usp=drive_link", "https://drive.google.com/file/d/14FSfVSSdIlvaHAFSaZArjF0APNQi6tlN/view?usp=drive_link", "https://drive.google.com/file/d/15CjwDwEddTJd9Q_MU3bIkMqVQmeAh-iE/view?usp=drive_link", "https://drive.google.com/file/d/1UCqOLchTBZNK7YC--kSXo5I7hjO-D4Di/view?usp=drive_link", "https://drive.google.com/file/d/1UYr8z6au6EtrveugJS_h_nclh5hHmLWY/view?usp=drive_link", "https://drive.google.com/file/d/16ivs7JgfXVJm-fI1fMZQE7z__MSNPweH/view?usp=drive_link", "https://drive.google.com/file/d/1nNtFliRydIA_w3yq9O0NnaTdItdX6wVI/view?usp=drive_link", "https://drive.google.com/file/d/18dYuFM2elxu8opRcwIBzdEsoLAowtGos/view?usp=drive_link", "https://drive.google.com/file/d/1paoz0hphsLMvqaLVNbdAu5WSYNxAEtzK/view?usp=drive_link", "https://drive.google.com/file/d/1ZkX8YSbBBZb2x8BA7B-NLyBibrW0X8ip/view?usp=drive_link", "https://drive.google.com/file/d/1lU9XH2imegfS1t5G67ZMW9gKke49IxBH/view?usp=drive_link", "https://drive.google.com/file/d/1n3VN4Ym3yCDkHSXWZpn4D0CwXUogF9Dm/view?usp=drive_link", "https://drive.google.com/file/d/1C8e4RP18kCVLUV729X3x4JtXiyursgJm/view?usp=drive_link", "https://drive.google.com/file/d/1uDTuzMwvvZ-b4LimmsLD1lRvwA2_PwbP/view?usp=drive_link", "https://drive.google.com/file/d/1paiuNFoVAG8r0QSR3NAny110YevS6IpY/view?usp=drive_link", "https://drive.google.com/file/d/10FeSaLOLXiH-NM-g_oiEdQ9RmA8a7cji/view?usp=drive_link", "https://drive.google.com/file/d/1TtOBcdF4Y6L1xcHUFkOH8OA9tpS1KQOD/view?usp=drive_link", "https://drive.google.com/file/d/18UqLeFcpkBHxx9c3r7LDEwVWLk48qeoV/view?usp=drive_link", "https://drive.google.com/file/d/1E6PaPT8jdL4QqE360G0nI8UJjvBfSCO6/view?usp=drive_link", "https://drive.google.com/file/d/1LJOO7qFXuto2E6DS0SJtwOynyfCLlL2C/view?usp=drive_link", "https://drive.google.com/file/d/1bbXIBn7eyHHqm7wGybKLH8Yyt_aTwjYt/view?usp=drive_link", "https://drive.google.com/file/d/1TNeEZ9AfeHAPloc8z3nm8JcBXBWk_9dP/view?usp=drive_link", "https://drive.google.com/file/d/1Xnnl6xGBTPg5uSl-hmQY5OZWmB6dj9n2/view?usp=drive_link", "https://drive.google.com/file/d/1nEloxH4soDxgIlZ3k2RSisrDXd12E2TX/view?usp=drive_link", "https://drive.google.com/file/d/1oh2UDgxRCCr4IUlHPVRZ03nISd2_390v/view?usp=drive_link", "https://drive.google.com/file/d/18jtX6042QaC3LUt6NIGmjtU7GyZZM2AY/view?usp=drive_link", "https://drive.google.com/file/d/1n_slGz7GoI1Jw6Oos4HAjEOYKTRnwbaP/view?usp=drive_link", "https://drive.google.com/file/d/1-8JSFm3P9e38ayoha6hq9oZH1ncVVCw-/view?usp=drive_link", "https://drive.google.com/file/d/1doZxFysJhsk8BFS5HRqmFBC5-2QYlAnk/view?usp=drive_link", "https://drive.google.com/file/d/1C0y_DAJDLEA1v61nAWqGJa8I1LxrJ4aM/view?usp=drive_link", "https://drive.google.com/file/d/1MsJe-hQ5rnx-_0WgrDO-bc-vDp5lffnM/view?usp=drive_link", "https://drive.google.com/file/d/1dItAoCJPDm2YTAQVvsW2MYEfhvQVKUiH/view?usp=drive_link", "https://drive.google.com/file/d/1nVvROHtI4AYWw9Q_KEcRgRcK6J-X_d-x/view?usp=drive_link", "https://drive.google.com/file/d/1ffuYuHYqdVprt4ticasFZzPlhrJ4-77-/view?usp=drive_link", "https://drive.google.com/file/d/1tSSN1Hxk31PbfP404YF1o-W4MJ2T20aP/view?usp=drive_link", "https://drive.google.com/file/d/1sOYFXWrDmNgCmSd9Md6g63Vc3mKAc7hT/view?usp=drive_link", "https://drive.google.com/file/d/1TnFndwlKbgj1OLOqQF33ZIe4MXCt1L6y/view?usp=drive_link", "https://drive.google.com/file/d/16DX9Y6aaGN_v8FCl99vsoTOqJp160ng0/view?usp=drive_link", "https://drive.google.com/file/d/1SnVPJBEMiL8oPgaXiQpPy5VFg7ouO_j_/view?usp=drive_link", "https://drive.google.com/file/d/1WXSOh7huL_YmAq-73Yottb8dqsOa29VB/view?usp=drive_link", "https://drive.google.com/file/d/1ROwZwX9DwgDAg8adZCTzFwfW9bjfZktt/view?usp=drive_link", "https://drive.google.com/file/d/1jxvhwbXroy9ggs6K5e-UREmKbZyCvuW9/view?usp=drive_link", "https://drive.google.com/file/d/1anZfxOKnGzdMJInoqSvR-dyrFRWE9ix_/view?usp=drive_link", "https://drive.google.com/file/d/1pYDbWUf2KXRYu3MBcWLUVLFh5--cPrUp/view?usp=drive_link", "https://drive.google.com/file/d/1wPO20BPkBaE3aTEO7yRqkOC-UTAZkshs/view?usp=drive_link", "https://drive.google.com/file/d/1FlUM5kKltGrOJVI53x6zY2CP9qm5WIPA/view?usp=drive_link", "https://drive.google.com/file/d/1QFWkE_cPO7soOep7LrV32nO0wkQ74Duk/view?usp=drive_link", "https://drive.google.com/file/d/1q10kNmiL5SCp_w9HiaQ7ypm7BZhCzylC/view?usp=drive_link", "https://drive.google.com/file/d/1BMyu2sShBsWMqWFZb__dyrSnE5G3C2oU/view?usp=drive_link", "https://drive.google.com/file/d/1OuRsPHvbdqXkHZbPG_jjBlzAPloc7vDH/view?usp=drive_link", "https://drive.google.com/file/d/1pubaESCv_Bf7MxWK0_gKnRUuPqiNHujd/view?usp=drive_link", "https://drive.google.com/file/d/1wPscn8mM2xY3pDNxYLUIoNzcXVEA38SV/view?usp=drive_link", "https://drive.google.com/file/d/16RRFmYTuusAworkYOFcFHwmkp-sejcj0/view?usp=drive_link", "https://drive.google.com/file/d/1hyWCRH8VcZJ6TAuYeZtZswMNKt9lxYMd/view?usp=drive_link", "https://drive.google.com/file/d/1g5utUZH7E3uJpkrsWwfvioW13K-8B2ei/view?usp=drive_link", "https://drive.google.com/file/d/1zPaK6x-VaEiKyrDRLowKP-oXNnd7mgKY/view?usp=drive_link", "https://drive.google.com/file/d/1NZHgrMIXU0EOXFVzYhBE6Oaz4x1UTxeQ/view?usp=drive_link", "https://drive.google.com/file/d/1EarvOry4ozquje2M2XMcs_vK726anzqA/view?usp=drive_link", "https://drive.google.com/file/d/15D-RBXnsztOsbgCzrVG0i3Ux_OTrH4Tq/view?usp=drive_link", "https://drive.google.com/file/d/1SXaX83XP3G-6uKnuuYUs6THAS__xSGA5/view?usp=drive_link", "https://drive.google.com/file/d/1frw6w-FkxH3tCmKIqTZF9DtJc85FxydY/view?usp=drive_link", "https://drive.google.com/file/d/1P_b0lWwGf2xAk9fi7z1k7hhQNzWo3GL2/view?usp=drive_link", "https://drive.google.com/file/d/1A1flKI97v_n3jMKIRz2v6zz0lVeJ9nP_/view?usp=drive_link", "https://drive.google.com/file/d/1u2-qlZSF7i01AtzEnJTBZj4SZlElga1V/view?usp=drive_link", "https://drive.google.com/file/d/1se_q_DKYg1uj3RgnyAKX6hrdEOAsWSSg/view?usp=drive_link", "https://drive.google.com/file/d/1Ova1ZWf91uiOTSjSZGanv6TJznZO4Tsx/view?usp=drive_link", "https://drive.google.com/file/d/16Eb1N6kLeTqL3u_op7bw561Z3TO94_za/view?usp=drive_link", "https://drive.google.com/file/d/1x5kNe0wozlXRGM3CumWz8g1xhM2cKyoo/view?usp=drive_link", "https://drive.google.com/file/d/1mgK2G7VS4BmO5w845WV_PD1hkQKzld-i/view?usp=drive_link", "https://drive.google.com/file/d/1Fga67xxcG8kAKPDwDL9QqL4dw-HU-3tE/view?usp=drive_link", "https://drive.google.com/file/d/19Ih5OrMRcp4mJXtuYEWDaXwV078gWvBn/view?usp=drive_link", "https://drive.google.com/file/d/1dCQxH85kCYWjZySPR6hmPlC343KV66ZZ/view?usp=drive_link", "https://drive.google.com/file/d/1NMafc4x0exTCRX69w-gF3aL2FC_yE2Tu/view?usp=drive_link", "https://drive.google.com/file/d/1i-6XtZIsiThF3GtxOXyPLAgLr5wQPiy8/view?usp=drive_link", "https://drive.google.com/file/d/1FvXbxJFr7cNQYTiV6lkHXvZVRRR4sruX/view?usp=drive_link", "https://drive.google.com/file/d/1NZqWOHIXanK3xwEGuMbQldgBRvDwPSbP/view?usp=drive_link", "https://drive.google.com/file/d/1nmfQjvLjZbC-YuHeJNXYpKhfCJoniCS6/view?usp=drive_link", "https://drive.google.com/file/d/1sR8iwKYiDYeDuKZYhGXnoNakwuXl4O-r/view?usp=drive_link", "https://drive.google.com/file/d/1NvIAPRRfRVhRXCrKYOFDv8dwMhsYv1M5/view?usp=drive_link", "https://drive.google.com/file/d/1mHfeg106Fc8C-hdjpBDsorxGK5QLrqZi/view?usp=drive_link", "https://drive.google.com/file/d/1TTQCGFDvijf8G3ltYbJMHoNkSMPMdSRw/view?usp=drive_link", "https://drive.google.com/file/d/1LsNlUNxhWBacILiezcJwxHircN_L57YC/view?usp=drive_link", "https://drive.google.com/file/d/1OqJXCrORN00y4ue8WqZP63rh52E5XPO8/view?usp=drive_link", "https://drive.google.com/file/d/1eMecS-HKWQPOLnS6pbI_HohPwZZIMlHl/view?usp=drive_link", "https://drive.google.com/file/d/1ASNKNNDAMQoHo3kCKxzpaskYSwqfLAGH/view?usp=drive_link", "https://drive.google.com/file/d/1eU7iAv9f6KT_GM1_9R0dBxon91PuPMBa/view?usp=drive_link", "https://drive.google.com/file/d/1BfJxXVaehHsKfkzq0xQ2eksLh1AdG7gJ/view?usp=drive_link", "https://drive.google.com/file/d/1slMjqAuNzyKK2N6WP1sD44DHgd_LLt4K/view?usp=drive_link", "https://drive.google.com/file/d/1FSoZ00Xcc5XeCtQD9Nk0h6Nbd9uFBYUp/view?usp=drive_link", "https://drive.google.com/file/d/1xXtfZ_Q8FC3F-KUeWfXLIQnlgFOU-i1z/view?usp=drive_link", "https://drive.google.com/file/d/1jHzvAm1w8tsOHT0GDa3_Fs1Pi2LJSz1r/view?usp=drive_link", "https://drive.google.com/file/d/1E9LQaZccaYfO431nHi6zXPRTMfaBfU-M/view?usp=drive_link", "https://drive.google.com/file/d/1i31y5kGaZjvtma241FYZ46ofRf8J5PMi/view?usp=drive_link", "https://drive.google.com/file/d/15q_2hnJxj_dJqfnnazp4FePN7utWXs1M/view?usp=drive_link", "https://drive.google.com/file/d/1ou4yT9ThJJAiPBwJgMd94pv2K02z19Qx/view?usp=drive_link", "https://drive.google.com/file/d/1toco-eOiVyeQEskWAs9bUDuYq2-Kfxxw/view?usp=drive_link", "https://drive.google.com/file/d/10iDkDAP9_1Q4XJwzBmycXRt7nhyn1VvL/view?usp=drive_link", "https://drive.google.com/file/d/1fkvmaJuQKst99MD93SsDGErCmzPUsy0s/view?usp=drive_link", "https://drive.google.com/file/d/1Z__pNrqjv3B-XhB3Uek_sj8vRAW-ZXVq/view?usp=drive_link", "https://drive.google.com/file/d/1u6zUoHM5HLxwBdYloKeUNOJA9ZKdVfHf/view?usp=drive_link", "https://drive.google.com/file/d/1docUJ21VPjeS9rIQObY_DnVLBPmRwCdH/view?usp=drive_link", "https://drive.google.com/file/d/1h9eEm0oj0a1xHiWUh9iUxpxFQigAN3Br/view?usp=drive_link", "https://drive.google.com/file/d/1usIPwcqYCrWDYN4kT4boE5kGucceWaB7/view?usp=drive_link", "https://drive.google.com/file/d/1YnybX_PlzqA3EODHbrXc4ylSv_dMWsuM/view?usp=drive_link", "https://drive.google.com/file/d/1Y4S_JzNp1txpPw-aJ3dclw4AOg2HUSAp/view?usp=drive_link", "https://drive.google.com/file/d/1EyYa75sSPe-babGJMG4kS8ORGQ-3H8Dn/view?usp=drive_link", "https://drive.google.com/file/d/1cJqABLlkXNROqq8nqV3W6Td224k_AQbx/view?usp=drive_link", "https://drive.google.com/file/d/15WOfwdB3AM5z7kSioboBt0BgKb9cAOl5/view?usp=drive_link", "https://drive.google.com/file/d/1z9lP1RSm7fFj1SrIpIyaF_JxWhZn6vm1/view?usp=drive_link", "https://drive.google.com/file/d/1JIH1Z6t10Y72Q1FcxMsIjTla3Vk4JKHc/view?usp=drive_link", "https://drive.google.com/file/d/1m9abkKdvC5E-QM32KFA0v7PE-kFib81R/view?usp=drive_link", "https://drive.google.com/file/d/1Iyq3cELDqC-UeODisEQaYkE9lCyeBd6w/view?usp=drive_link", "https://drive.google.com/file/d/1GCbdFF0pfuMc9_O07fLLp-yRZ1D1mkQ4/view?usp=drive_link", "https://drive.google.com/file/d/172lJEJzjhCdsSzNUjic1ScSv4-yHWZ4Z/view?usp=drive_link", "https://drive.google.com/file/d/1WuYV94zyY5JcBHC95yAdQ8Fv0VW2kCi4/view?usp=drive_link", "https://drive.google.com/file/d/1tbH4SbyxnPgBVywkl0ly-4Qes6pVR4VS/view?usp=drive_link", "https://drive.google.com/file/d/15rIIb-gLoSzxWH9qbBl1KFg9pEYPmrqb/view?usp=drive_link", "https://drive.google.com/file/d/1obuQsljm6X2oghShpL-Ly52VOSyhoUz7/view?usp=drive_link", "https://drive.google.com/file/d/1vXpzgINbmwZE7otwbAJ1jBB8-UoJHsry/view?usp=drive_link", "https://drive.google.com/file/d/1YfwW9vmslG5CmU8fBt2GEk9m_Y8DpXKN/view?usp=drive_link", "https://drive.google.com/file/d/1Sgy4DA8BZ22e4Zkl2FutGGVedlSTgHaR/view?usp=drive_link", "https://drive.google.com/file/d/1GR5ex2fMX3F3plPsH9p0rkmeFsdp5b0K/view?usp=drive_link", "https://drive.google.com/file/d/1nqUYxeBpf5mwJOsdEv5OyFy6XLMGZwbO/view?usp=drive_link", "https://drive.google.com/file/d/1WZCvU3v3lyVOCJGXKCbimXmpJOky_P2P/view?usp=drive_link", "https://drive.google.com/file/d/1RjhAayWxG8hLP9oZDg1tog32NHKz5UKj/view?usp=drive_link", "https://drive.google.com/file/d/1RYGVM4oTZt-HVK9DwBKOg83y5wfV8PnI/view?usp=drive_link", "https://drive.google.com/file/d/1KdkKRIIin2Ln3ujaJ9asKvg4-9TLI2gi/view?usp=drive_link", "https://drive.google.com/file/d/1cYVsnF1TbY2k4ckLtLJmVHefcowbjq-R/view?usp=drive_link", "https://drive.google.com/file/d/11aWOII5XoJgOL7Pli_90_LCDHViaB70L/view?usp=drive_link", "https://drive.google.com/file/d/1Pn-F8BTEaxr-cf-ojzMfPzZvIC7w8_RI/view?usp=drive_link", "https://drive.google.com/file/d/1ejMZ0L7bQ6rBaq7o8Ro4iN65M_0lBThi/view?usp=drive_link", "https://drive.google.com/file/d/1br2hHrrFbqosI2kTZhHm39RISe-a9UQe/view?usp=drive_link", "https://drive.google.com/file/d/1Su3sJMvTWgc_Tl2JHInMjrKva6iMKflI/view?usp=drive_link", "https://drive.google.com/file/d/1NNH5N0hkWyveQlTbHVoBWiKBUOcc8i7a/view?usp=drive_link", "https://drive.google.com/file/d/1BPuandHpG0L0rMjaIQtO5v-reUZz3faW/view?usp=drive_link", "https://drive.google.com/file/d/1lOxe6wXipNrVlaKSnnsJbIONL6Uy-d8g/view?usp=drive_link", "https://drive.google.com/file/d/1kUQbdlun7envlUdoPUceRkj6I8ZgKeMp/view?usp=drive_link", "https://drive.google.com/file/d/1gSqgQ2l0rH2jnVz-ARSUw4-U3XantMkO/view?usp=drive_link", "https://drive.google.com/file/d/1V7dd-6XDNFMEIbN3VD22piZh9WZCcaOB/view?usp=drive_link", "https://drive.google.com/file/d/1IzgGN5rJeg3OsVRJ6hUAhuU71hxka7Ar/view?usp=drive_link", "https://drive.google.com/file/d/1BRnPEbTxmngMrcIrXo281IZxUd8nXZA9/view?usp=drive_link", "https://drive.google.com/file/d/1Zjw8UUng_K-HCUn7PL1yEeAdB-cmIbV6/view?usp=drive_link", "https://drive.google.com/file/d/12yTbrvBGzw8-oOsGB1lg9sNIQShEcWa8/view?usp=drive_link", "https://drive.google.com/file/d/1U-SXNthDWWouZTZOJs9goQi56K3JgnjB/view?usp=drive_link", "https://drive.google.com/file/d/1I94yYVlrFw-8tEdn2MDu2rq_HEVdwy-9/view?usp=drive_link", "https://drive.google.com/file/d/1ix0dXN-mrIL8j6rVcd74x-XnLiBt5QJp/view?usp=drive_link", "https://drive.google.com/file/d/1QKwTKws8-Z2LT6LmMTxf_Cwhpr5H-2-M/view?usp=drive_link", "https://drive.google.com/file/d/1deyrvKHB3NiJLIbOgKTMk8lzYjrMaiVS/view?usp=drive_link", "https://drive.google.com/file/d/1yEhbB1zHfjzcyYPL2nc0cG-M1YrT0nQY/view?usp=drive_link", "https://drive.google.com/file/d/1CbiHM6uDIPs4NcUo9URevEH2t-1UO2Iv/view?usp=drive_link", "https://drive.google.com/file/d/1n5ZfeLQMl6S4ioCLrxuuDZgIxAELba6S/view?usp=drive_link", "https://drive.google.com/file/d/1twK-7ijaK-lEbaO1ASaM4cqCaS-a8Lzx/view?usp=drive_link", "https://drive.google.com/file/d/1GjzScaq_hyUinN9F-_2HiwqsbkZuAmxv/view?usp=drive_link", "https://drive.google.com/file/d/17hEDmpHAMOH1W0TlbhYP-xEVCO2FZ_Dv/view?usp=drive_link", "https://drive.google.com/file/d/1nH55ggPRX9IAey6BTEpIt-tXGfFquCmO/view?usp=drive_link”}
|
42 |
-
|
|
|
|
|
|
|
43 |
|
44 |
class ResourceItem:
|
45 |
def __init__(self, url: str, content: str, resource_type: str):
|
@@ -47,14 +55,25 @@ class ResourceItem:
|
|
47 |
self.content = content
|
48 |
self.type = resource_type
|
49 |
self.embedding = None
|
|
|
|
|
50 |
|
51 |
def __str__(self):
|
52 |
return f"ResourceItem(type={self.type}, url={self.url}, content_length={len(self.content)})"
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
class RobustCrawler:
|
55 |
-
def __init__(self, max_retries=3, backoff_factor=0.3
|
56 |
self.ua = UserAgent()
|
57 |
-
self.proxies = proxies or {}
|
58 |
self.session = self._create_robust_session(max_retries, backoff_factor)
|
59 |
|
60 |
def _create_robust_session(self, max_retries, backoff_factor):
|
@@ -82,7 +101,7 @@ class RobustCrawler:
|
|
82 |
"Upgrade-Insecure-Requests": "1"
|
83 |
}
|
84 |
|
85 |
-
def crawl_with_exponential_backoff(self, url, timeout=
|
86 |
try:
|
87 |
time.sleep(random.uniform(0.5, 2.0))
|
88 |
response = self.session.get(
|
@@ -98,52 +117,57 @@ class RobustCrawler:
|
|
98 |
|
99 |
class SchoolChatbot:
|
100 |
def __init__(self):
|
101 |
-
|
102 |
self.setup_models()
|
103 |
self.resources = []
|
104 |
self.visited_urls = set()
|
105 |
self.crawl_and_index_resources()
|
106 |
|
107 |
def setup_models(self):
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
|
|
|
|
|
|
|
|
113 |
|
114 |
def crawl_and_index_resources(self):
|
115 |
logger.info("Starting to crawl and index resources...")
|
116 |
-
with ThreadPoolExecutor(max_workers=
|
117 |
-
for url in Config.INDEXED_URLS
|
118 |
-
|
119 |
-
|
|
|
|
|
|
|
|
|
120 |
|
121 |
def crawl_url(self, url, depth):
|
122 |
if depth > Config.MAX_DEPTH or url in self.visited_urls:
|
123 |
return
|
124 |
self.visited_urls.add(url)
|
|
|
125 |
crawler = RobustCrawler()
|
126 |
response = crawler.crawl_with_exponential_backoff(url)
|
127 |
if not response:
|
128 |
-
logger.warning(f"Failed to retrieve {url}")
|
129 |
return
|
|
|
130 |
content_type = response.headers.get("Content-Type", "").lower()
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
self.extract_pdf_content(url, response.content)
|
144 |
-
else:
|
145 |
-
logger.warning(f"Unrecognized content-type ({content_type}). Storing as raw.")
|
146 |
-
self.store_resource(url, response.text, 'unknown')
|
147 |
|
148 |
def extract_ics_content(self, url, ics_text):
|
149 |
try:
|
@@ -151,117 +175,225 @@ class SchoolChatbot:
|
|
151 |
events = []
|
152 |
for component in cal.walk():
|
153 |
if component.name == "VEVENT":
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
event_str = f"{summary} from {dtstart} to {dtend}"
|
158 |
-
events.append(event_str)
|
159 |
if events:
|
160 |
-
|
161 |
-
self.store_resource(url, combined_text, 'calendar')
|
162 |
except Exception as e:
|
163 |
logger.error(f"Error parsing ICS from {url}: {e}")
|
164 |
|
165 |
-
def
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
|
183 |
def extract_pdf_content(self, url, pdf_content):
|
184 |
try:
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
except Exception as e:
|
192 |
logger.error(f"Error extracting PDF content from {url}: {e}")
|
193 |
|
194 |
def store_resource(self, url, text_data, resource_type):
|
195 |
try:
|
196 |
-
|
197 |
-
embeddings = [self.embedding_model.encode(chunk) for chunk in text_chunks]
|
198 |
-
average_embedding = np.mean(embeddings, axis=0)
|
199 |
item = ResourceItem(url, text_data, resource_type)
|
200 |
-
item.
|
201 |
-
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
except Exception as e:
|
204 |
logger.error(f"Error storing resource {url}: {e}")
|
205 |
|
206 |
def is_valid_url(self, url):
|
207 |
-
|
208 |
-
|
|
|
|
|
|
|
209 |
|
210 |
-
def
|
211 |
if not self.resources:
|
212 |
-
return
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
snippet = ' '.join(sentences[start_idx:end_idx])
|
232 |
-
return snippet
|
233 |
|
234 |
def generate_response(self, user_input):
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
|
245 |
def create_gradio_interface(chatbot):
|
246 |
def respond(user_input):
|
247 |
return chatbot.generate_response(user_input)
|
|
|
248 |
interface = gr.Interface(
|
249 |
fn=respond,
|
250 |
-
inputs=gr.Textbox(
|
251 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
252 |
title="School Information Chatbot",
|
253 |
-
description="Ask about school events,
|
254 |
examples=[
|
255 |
["What events are happening this week?"],
|
256 |
["When is the next board meeting?"],
|
257 |
-
["
|
258 |
],
|
259 |
-
theme=gr.themes.
|
260 |
-
flagging_mode="never"
|
261 |
)
|
262 |
return interface
|
263 |
|
264 |
if __name__ == "__main__":
|
265 |
-
|
266 |
-
|
267 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
import nltk
|
11 |
from nltk.tokenize import sent_tokenize
|
12 |
import PyPDF2
|
13 |
+
import io
|
14 |
from joblib import dump, load
|
15 |
|
16 |
from transformers import AutoTokenizer, AutoModelForCausalLM
|
|
|
30 |
)
|
31 |
logger = logging.getLogger(__name__)
|
32 |
|
33 |
+
# Download NLTK data
|
34 |
+
try:
|
35 |
+
nltk.download('punkt', quiet=True)
|
36 |
+
except Exception as e:
|
37 |
+
logger.warning(f"Failed to download NLTK data: {e}")
|
38 |
|
39 |
class Config:
|
40 |
MODEL_NAME = "microsoft/DialoGPT-medium"
|
|
|
43 |
REQUEST_TIMEOUT = 10
|
44 |
MAX_DEPTH = 1
|
45 |
SIMILARITY_THRESHOLD = 0.5
|
46 |
+
CHUNK_SIZE = 512
|
47 |
+
MAX_WORKERS = 5
|
48 |
+
INDEXED_URLS = {
|
49 |
+
"https://drive.google.com/file/d/1d5kkqaQkdiA2SwJ0JFrTuKO9zauiUtFz/**/view?usp=sharing"
|
50 |
+
}
|
51 |
|
52 |
class ResourceItem:
|
53 |
def __init__(self, url: str, content: str, resource_type: str):
|
|
|
55 |
self.content = content
|
56 |
self.type = resource_type
|
57 |
self.embedding = None
|
58 |
+
self.chunks = []
|
59 |
+
self.chunk_embeddings = []
|
60 |
|
61 |
def __str__(self):
|
62 |
return f"ResourceItem(type={self.type}, url={self.url}, content_length={len(self.content)})"
|
63 |
|
64 |
+
def create_chunks(self, chunk_size=Config.CHUNK_SIZE):
|
65 |
+
"""Split content into overlapping chunks for better context preservation"""
|
66 |
+
words = self.content.split()
|
67 |
+
overlap = chunk_size // 4 # 25% overlap
|
68 |
+
|
69 |
+
for i in range(0, len(words), chunk_size - overlap):
|
70 |
+
chunk = ' '.join(words[i:i + chunk_size])
|
71 |
+
if chunk:
|
72 |
+
self.chunks.append(chunk)
|
73 |
+
|
74 |
class RobustCrawler:
|
75 |
+
def __init__(self, max_retries=3, backoff_factor=0.3):
|
76 |
self.ua = UserAgent()
|
|
|
77 |
self.session = self._create_robust_session(max_retries, backoff_factor)
|
78 |
|
79 |
def _create_robust_session(self, max_retries, backoff_factor):
|
|
|
101 |
"Upgrade-Insecure-Requests": "1"
|
102 |
}
|
103 |
|
104 |
+
def crawl_with_exponential_backoff(self, url, timeout=Config.REQUEST_TIMEOUT):
|
105 |
try:
|
106 |
time.sleep(random.uniform(0.5, 2.0))
|
107 |
response = self.session.get(
|
|
|
117 |
|
118 |
class SchoolChatbot:
|
119 |
def __init__(self):
|
120 |
+
logger.info("Initializing SchoolChatbot...")
|
121 |
self.setup_models()
|
122 |
self.resources = []
|
123 |
self.visited_urls = set()
|
124 |
self.crawl_and_index_resources()
|
125 |
|
126 |
def setup_models(self):
|
127 |
+
try:
|
128 |
+
logger.info("Setting up models...")
|
129 |
+
self.tokenizer = AutoTokenizer.from_pretrained(Config.MODEL_NAME)
|
130 |
+
self.model = AutoModelForCausalLM.from_pretrained(Config.MODEL_NAME)
|
131 |
+
self.embedding_model = SentenceTransformer(Config.EMBEDDING_MODEL)
|
132 |
+
logger.info("Models setup completed successfully.")
|
133 |
+
except Exception as e:
|
134 |
+
logger.error(f"Failed to setup models: {e}")
|
135 |
+
raise RuntimeError("Failed to initialize required models")
|
136 |
|
137 |
def crawl_and_index_resources(self):
|
138 |
logger.info("Starting to crawl and index resources...")
|
139 |
+
with ThreadPoolExecutor(max_workers=Config.MAX_WORKERS) as executor:
|
140 |
+
futures = [executor.submit(self.crawl_url, url, 0) for url in Config.INDEXED_URLS]
|
141 |
+
for future in futures:
|
142 |
+
try:
|
143 |
+
future.result()
|
144 |
+
except Exception as e:
|
145 |
+
logger.error(f"Error in crawling thread: {e}")
|
146 |
+
logger.info(f"Crawling completed. Indexed {len(self.resources)} resources.")
|
147 |
|
148 |
def crawl_url(self, url, depth):
|
149 |
if depth > Config.MAX_DEPTH or url in self.visited_urls:
|
150 |
return
|
151 |
self.visited_urls.add(url)
|
152 |
+
|
153 |
crawler = RobustCrawler()
|
154 |
response = crawler.crawl_with_exponential_backoff(url)
|
155 |
if not response:
|
|
|
156 |
return
|
157 |
+
|
158 |
content_type = response.headers.get("Content-Type", "").lower()
|
159 |
+
|
160 |
+
try:
|
161 |
+
if "text/calendar" in content_type or url.endswith(".ics"):
|
162 |
+
self.extract_ics_content(url, response.text)
|
163 |
+
elif "text/html" in content_type:
|
164 |
+
self.extract_html_content(url, response)
|
165 |
+
elif "application/pdf" in content_type:
|
166 |
+
self.extract_pdf_content(url, response.content)
|
167 |
+
else:
|
168 |
+
self.store_resource(url, response.text, 'unknown')
|
169 |
+
except Exception as e:
|
170 |
+
logger.error(f"Error processing {url}: {e}")
|
|
|
|
|
|
|
|
|
171 |
|
172 |
def extract_ics_content(self, url, ics_text):
|
173 |
try:
|
|
|
175 |
events = []
|
176 |
for component in cal.walk():
|
177 |
if component.name == "VEVENT":
|
178 |
+
event = self._format_calendar_event(component)
|
179 |
+
if event:
|
180 |
+
events.append(event)
|
|
|
|
|
181 |
if events:
|
182 |
+
self.store_resource(url, "\n".join(events), 'calendar')
|
|
|
183 |
except Exception as e:
|
184 |
logger.error(f"Error parsing ICS from {url}: {e}")
|
185 |
|
186 |
+
def _format_calendar_event(self, event):
|
187 |
+
try:
|
188 |
+
summary = event.get("SUMMARY", "No Summary")
|
189 |
+
start = event.get("DTSTART", "").dt
|
190 |
+
end = event.get("DTEND", "").dt
|
191 |
+
description = event.get("DESCRIPTION", "")
|
192 |
+
location = event.get("LOCATION", "")
|
193 |
+
|
194 |
+
event_details = [f"Event: {summary}"]
|
195 |
+
if start:
|
196 |
+
event_details.append(f"Start: {start}")
|
197 |
+
if end:
|
198 |
+
event_details.append(f"End: {end}")
|
199 |
+
if location:
|
200 |
+
event_details.append(f"Location: {location}")
|
201 |
+
if description:
|
202 |
+
event_details.append(f"Description: {description}")
|
203 |
+
|
204 |
+
return " | ".join(event_details)
|
205 |
+
except Exception:
|
206 |
+
return None
|
207 |
+
|
208 |
+
def extract_html_content(self, url, response):
|
209 |
+
try:
|
210 |
+
soup = BeautifulSoup(response.content, 'html.parser')
|
211 |
+
|
212 |
+
# Remove unwanted elements
|
213 |
+
for element in soup.find_all(['script', 'style', 'nav', 'footer']):
|
214 |
+
element.decompose()
|
215 |
+
|
216 |
+
content_sections = []
|
217 |
+
|
218 |
+
# Extract main content
|
219 |
+
main_content = soup.find(['main', 'article', 'div'], class_=['content', 'main-content'])
|
220 |
+
if main_content:
|
221 |
+
content_sections.append(main_content.get_text(strip=True, separator=' '))
|
222 |
+
|
223 |
+
# Extract headings and their associated content
|
224 |
+
for heading in soup.find_all(['h1', 'h2', 'h3']):
|
225 |
+
section = [heading.get_text(strip=True)]
|
226 |
+
next_elem = heading.find_next_sibling()
|
227 |
+
while next_elem and next_elem.name in ['p', 'ul', 'ol', 'div']:
|
228 |
+
section.append(next_elem.get_text(strip=True))
|
229 |
+
next_elem = next_elem.find_next_sibling()
|
230 |
+
content_sections.append(' '.join(section))
|
231 |
+
|
232 |
+
if content_sections:
|
233 |
+
self.store_resource(url, ' '.join(content_sections), 'webpage')
|
234 |
+
|
235 |
+
# Process links if within depth limit
|
236 |
+
if len(self.visited_urls) < Config.MAX_DEPTH:
|
237 |
+
self._process_links(soup, url)
|
238 |
+
|
239 |
+
except Exception as e:
|
240 |
+
logger.error(f"Error extracting HTML content from {url}: {e}")
|
241 |
+
|
242 |
+
def _process_links(self, soup, base_url):
|
243 |
+
try:
|
244 |
+
for link in soup.find_all('a', href=True):
|
245 |
+
full_url = urljoin(base_url, link['href'])
|
246 |
+
if self.is_valid_url(full_url) and full_url not in self.visited_urls:
|
247 |
+
time.sleep(random.uniform(0.5, 2.0))
|
248 |
+
self.crawl_url(full_url, len(self.visited_urls))
|
249 |
+
except Exception as e:
|
250 |
+
logger.error(f"Error processing links from {base_url}: {e}")
|
251 |
|
252 |
def extract_pdf_content(self, url, pdf_content):
|
253 |
try:
|
254 |
+
pdf_file = io.BytesIO(pdf_content)
|
255 |
+
pdf_reader = PyPDF2.PdfReader(pdf_file)
|
256 |
+
text_content = []
|
257 |
+
|
258 |
+
for page in pdf_reader.pages:
|
259 |
+
try:
|
260 |
+
text_content.append(page.extract_text())
|
261 |
+
except Exception as e:
|
262 |
+
logger.error(f"Error extracting text from PDF page: {e}")
|
263 |
+
continue
|
264 |
+
|
265 |
+
if text_content:
|
266 |
+
self.store_resource(url, ' '.join(text_content), 'pdf')
|
267 |
except Exception as e:
|
268 |
logger.error(f"Error extracting PDF content from {url}: {e}")
|
269 |
|
270 |
def store_resource(self, url, text_data, resource_type):
|
271 |
try:
|
272 |
+
# Create resource item and split into chunks
|
|
|
|
|
273 |
item = ResourceItem(url, text_data, resource_type)
|
274 |
+
item.create_chunks()
|
275 |
+
|
276 |
+
# Generate embeddings for chunks
|
277 |
+
item.chunk_embeddings = [
|
278 |
+
self.embedding_model.encode(chunk)
|
279 |
+
for chunk in item.chunks
|
280 |
+
]
|
281 |
+
|
282 |
+
# Calculate average embedding
|
283 |
+
if item.chunk_embeddings:
|
284 |
+
item.embedding = np.mean(item.chunk_embeddings, axis=0)
|
285 |
+
self.resources.append(item)
|
286 |
+
logger.debug(f"Stored resource: {url} (type={resource_type})")
|
287 |
+
|
288 |
except Exception as e:
|
289 |
logger.error(f"Error storing resource {url}: {e}")
|
290 |
|
291 |
def is_valid_url(self, url):
|
292 |
+
try:
|
293 |
+
parsed = urlparse(url)
|
294 |
+
return bool(parsed.scheme) and bool(parsed.netloc)
|
295 |
+
except Exception:
|
296 |
+
return False
|
297 |
|
298 |
+
def find_best_matching_chunks(self, query, n_chunks=3):
|
299 |
if not self.resources:
|
300 |
+
return []
|
301 |
+
|
302 |
+
try:
|
303 |
+
query_embedding = self.embedding_model.encode(query)
|
304 |
+
all_chunks = []
|
305 |
+
|
306 |
+
for resource in self.resources:
|
307 |
+
for chunk, embedding in zip(resource.chunks, resource.chunk_embeddings):
|
308 |
+
score = cosine_similarity([query_embedding], [embedding])[0][0]
|
309 |
+
if score > Config.SIMILARITY_THRESHOLD:
|
310 |
+
all_chunks.append((chunk, score, resource.url))
|
311 |
+
|
312 |
+
# Sort by similarity score and get top n chunks
|
313 |
+
all_chunks.sort(key=lambda x: x[1], reverse=True)
|
314 |
+
return all_chunks[:n_chunks]
|
315 |
+
|
316 |
+
except Exception as e:
|
317 |
+
logger.error(f"Error finding matching chunks: {e}")
|
318 |
+
return []
|
|
|
|
|
319 |
|
320 |
def generate_response(self, user_input):
|
321 |
+
try:
|
322 |
+
# Find best matching chunks
|
323 |
+
best_chunks = self.find_best_matching_chunks(user_input)
|
324 |
+
|
325 |
+
if not best_chunks:
|
326 |
+
return "I apologize, but I couldn't find any relevant information in my knowledge base. Could you please rephrase your question or ask about something else?"
|
327 |
+
|
328 |
+
# Prepare context from best matching chunks
|
329 |
+
context = "\n".join([chunk[0] for chunk in best_chunks])
|
330 |
+
|
331 |
+
# Prepare conversation history
|
332 |
+
conversation = f"Context: {context}\nUser: {user_input}\nAssistant:"
|
333 |
+
|
334 |
+
# Generate response
|
335 |
+
input_ids = self.tokenizer.encode(conversation, return_tensors='pt')
|
336 |
+
response_ids = self.model.generate(
|
337 |
+
input_ids,
|
338 |
+
max_length=Config.MAX_TOKENS,
|
339 |
+
pad_token_id=self.tokenizer.eos_token_id,
|
340 |
+
temperature=0.7,
|
341 |
+
top_p=0.9,
|
342 |
+
do_sample=True
|
343 |
+
)
|
344 |
+
|
345 |
+
response = self.tokenizer.decode(
|
346 |
+
response_ids[:, input_ids.shape[-1]:][0],
|
347 |
+
skip_special_tokens=True
|
348 |
+
)
|
349 |
+
|
350 |
+
# Format response with source
|
351 |
+
source_urls = list(set(chunk[2] for chunk in best_chunks))
|
352 |
+
sources = "\n\nSources:\n" + "\n".join(source_urls)
|
353 |
+
|
354 |
+
return response + sources
|
355 |
+
|
356 |
+
except Exception as e:
|
357 |
+
logger.error(f"Error generating response: {e}")
|
358 |
+
return "I apologize, but I encountered an error while processing your question. Please try again."
|
359 |
|
360 |
def create_gradio_interface(chatbot):
|
361 |
def respond(user_input):
|
362 |
return chatbot.generate_response(user_input)
|
363 |
+
|
364 |
interface = gr.Interface(
|
365 |
fn=respond,
|
366 |
+
inputs=gr.Textbox(
|
367 |
+
label="Ask a Question",
|
368 |
+
placeholder="Type your question here...",
|
369 |
+
lines=2
|
370 |
+
),
|
371 |
+
outputs=gr.Textbox(
|
372 |
+
label="Answer",
|
373 |
+
placeholder="Response will appear here...",
|
374 |
+
lines=5
|
375 |
+
),
|
376 |
title="School Information Chatbot",
|
377 |
+
description="Ask about school events, policies, or other information. The chatbot will provide answers based on available school documents and resources.",
|
378 |
examples=[
|
379 |
["What events are happening this week?"],
|
380 |
["When is the next board meeting?"],
|
381 |
+
["What is the school's attendance policy?"]
|
382 |
],
|
383 |
+
theme=gr.themes.Soft(),
|
384 |
+
flagging_mode="never"
|
385 |
)
|
386 |
return interface
|
387 |
|
388 |
if __name__ == "__main__":
|
389 |
+
try:
|
390 |
+
chatbot = SchoolChatbot()
|
391 |
+
interface = create_gradio_interface(chatbot)
|
392 |
+
interface.launch(
|
393 |
+
server_name="0.0.0.0",
|
394 |
+
server_port=7860,
|
395 |
+
share=False,
|
396 |
+
debug=True
|
397 |
+
)
|
398 |
+
except Exception as e:
|
399 |
+
logger.error(f"Failed to start application: {e}")
|