dlsmallw commited on
Commit
b72f4a5
·
1 Parent(s): 946f92f

Task-315 Added tab for viewing the datasets used for training the models and reworked the layout of the UI

Browse files
Files changed (8) hide show
  1. Pipfile +3 -1
  2. Pipfile.lock +290 -114
  3. app.py +186 -67
  4. config.py +0 -23
  5. config.toml +4 -0
  6. scripts/__init__.py +1 -1
  7. scripts/config.py +76 -0
  8. setup.sh +32 -0
Pipfile CHANGED
@@ -10,13 +10,15 @@ numpy = "*"
10
  st-annotated-text = "*"
11
  transformers = "*"
12
  torch = "*"
13
- huggingface-hub = "*"
14
  joblib = "*"
15
  nltk = "*"
16
  htbuilder = "*"
17
  nest-asyncio = "*"
18
  mkdocs = "*"
19
  mkdocstrings-python = "*"
 
 
 
20
 
21
  [dev-packages]
22
 
 
10
  st-annotated-text = "*"
11
  transformers = "*"
12
  torch = "*"
 
13
  joblib = "*"
14
  nltk = "*"
15
  htbuilder = "*"
16
  nest-asyncio = "*"
17
  mkdocs = "*"
18
  mkdocstrings-python = "*"
19
+ typer = "*"
20
+ huggingface-hub = "*"
21
+ loguru = "*"
22
 
23
  [dev-packages]
24
 
Pipfile.lock CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "_meta": {
3
  "hash": {
4
- "sha256": "011a0284b34b98265fb35b5b99964b701b6a30f703a45de6b092a7d7c631032d"
5
  },
6
  "pipfile-spec": 6,
7
  "requires": {
@@ -211,11 +211,11 @@
211
  },
212
  "griffe": {
213
  "hashes": [
214
- "sha256:3a46fa7bd83280909b63c12b9a975732a927dd97809efe5b7972290b606c5d91",
215
- "sha256:6399f7e663150e4278a312a8e8a14d2f3d7bd86e2ef2f8056a1058e38579c2ee"
216
  ],
217
  "markers": "python_version >= '3.9'",
218
- "version": "==1.6.2"
219
  },
220
  "htbuilder": {
221
  "hashes": [
@@ -275,6 +275,22 @@
275
  "markers": "python_version >= '3.9'",
276
  "version": "==2024.10.1"
277
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  "markdown": {
279
  "hashes": [
280
  "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2",
@@ -283,6 +299,14 @@
283
  "markers": "python_version >= '3.8'",
284
  "version": "==3.7"
285
  },
 
 
 
 
 
 
 
 
286
  "markupsafe": {
287
  "hashes": [
288
  "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4",
@@ -350,6 +374,14 @@
350
  "markers": "python_version >= '3.9'",
351
  "version": "==3.0.2"
352
  },
 
 
 
 
 
 
 
 
353
  "mergedeep": {
354
  "hashes": [
355
  "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8",
@@ -726,6 +758,14 @@
726
  "markers": "python_version >= '3.8'",
727
  "version": "==0.9.1"
728
  },
 
 
 
 
 
 
 
 
729
  "pymdown-extensions": {
730
  "hashes": [
731
  "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9",
@@ -826,8 +866,100 @@
826
  },
827
  "regex": {
828
  "hashes": [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
829
  "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519",
830
- "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
831
  ],
832
  "markers": "python_version >= '3.8'",
833
  "version": "==2024.11.6"
@@ -840,114 +972,133 @@
840
  "markers": "python_version >= '3.8'",
841
  "version": "==2.32.3"
842
  },
 
 
 
 
 
 
 
 
843
  "rpds-py": {
844
  "hashes": [
845
- "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19",
846
- "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c",
847
- "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522",
848
- "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31",
849
- "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf",
850
- "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4",
851
- "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d",
852
- "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b",
853
- "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e",
854
- "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6",
855
- "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6",
856
- "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec",
857
- "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122",
858
- "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf",
859
- "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5",
860
- "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93",
861
- "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed",
862
- "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2",
863
- "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd",
864
- "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5",
865
- "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac",
866
- "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c",
867
- "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70",
868
- "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3",
869
- "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b",
870
- "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5",
871
- "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246",
872
- "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495",
873
- "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace",
874
- "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f",
875
- "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935",
876
- "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64",
877
- "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad",
878
- "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957",
879
- "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a",
880
- "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a",
881
- "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6",
882
- "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef",
883
- "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba",
884
- "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722",
885
- "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10",
886
- "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee",
887
- "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da",
888
- "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b",
889
- "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a",
890
- "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731",
891
- "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce",
892
- "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4",
893
- "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b",
894
- "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707",
895
- "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9",
896
- "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3",
897
- "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa",
898
- "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa",
899
- "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a",
900
- "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57",
901
- "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00",
902
- "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f",
903
- "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f",
904
- "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8",
905
- "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057",
906
- "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017",
907
- "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e",
908
- "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165",
909
- "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428",
910
- "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c",
911
- "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590",
912
- "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4",
913
- "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447",
914
- "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e",
915
- "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc",
916
- "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1",
917
- "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c",
918
- "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6",
919
- "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597",
920
- "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a",
921
- "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d",
922
- "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8",
923
- "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4",
924
- "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35",
925
- "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5",
926
- "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5",
927
- "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc",
928
- "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966",
929
- "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d",
930
- "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef",
931
- "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12",
932
- "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d",
933
- "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4",
934
- "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149",
935
- "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35",
936
- "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae",
937
- "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580",
938
- "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07",
939
- "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219",
940
- "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7",
941
- "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda",
942
- "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013",
943
- "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15",
944
- "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd",
945
- "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06",
946
- "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4",
947
- "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8"
 
 
 
 
 
 
 
 
 
 
 
948
  ],
949
  "markers": "python_version >= '3.9'",
950
- "version": "==0.23.1"
951
  },
952
  "safetensors": {
953
  "hashes": [
@@ -975,9 +1126,17 @@
975
  "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54",
976
  "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8"
977
  ],
978
- "markers": "python_version >= '3.12'",
979
  "version": "==78.1.0"
980
  },
 
 
 
 
 
 
 
 
981
  "six": {
982
  "hashes": [
983
  "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
@@ -1017,7 +1176,7 @@
1017
  "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f",
1018
  "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"
1019
  ],
1020
- "markers": "python_version >= '3.9'",
1021
  "version": "==1.13.1"
1022
  },
1023
  "tenacity": {
@@ -1111,12 +1270,21 @@
1111
  },
1112
  "transformers": {
1113
  "hashes": [
1114
- "sha256:6ee542d2cce7e1b6a06ae350599c27ddf2e6e45ec9d0cb42915b37fca3d6399a",
1115
- "sha256:e9b9bd274518150528c1d745c7ebba72d27e4e52f2deffaa1fddebad6912da5d"
1116
  ],
1117
  "index": "pypi",
1118
  "markers": "python_full_version >= '3.9.0'",
1119
- "version": "==4.50.1"
 
 
 
 
 
 
 
 
 
1120
  },
1121
  "typing-extensions": {
1122
  "hashes": [
@@ -1177,6 +1345,14 @@
1177
  ],
1178
  "markers": "python_version >= '3.9'",
1179
  "version": "==6.0.0"
 
 
 
 
 
 
 
 
1180
  }
1181
  },
1182
  "develop": {}
 
1
  {
2
  "_meta": {
3
  "hash": {
4
+ "sha256": "6dce351ecab86056ef14cdf56db27855a804f8a6f1ccef00bffcd1cf3d7686c2"
5
  },
6
  "pipfile-spec": 6,
7
  "requires": {
 
211
  },
212
  "griffe": {
213
  "hashes": [
214
+ "sha256:6b44efc53a3f290d42c4da521f42235177b3bd107877dd55955318a37930c572",
215
+ "sha256:72e9c1593c7af92a387906293fc4a318c2e8e8aef501c64678c809794b4bdca4"
216
  ],
217
  "markers": "python_version >= '3.9'",
218
+ "version": "==1.7.0"
219
  },
220
  "htbuilder": {
221
  "hashes": [
 
275
  "markers": "python_version >= '3.9'",
276
  "version": "==2024.10.1"
277
  },
278
+ "logger": {
279
+ "hashes": [
280
+ "sha256:4ecac57133c6376fa215f0fe6b4dc4d60e4d1ad8be005cab4e8a702df682f8b3"
281
+ ],
282
+ "index": "pypi",
283
+ "version": "==1.4"
284
+ },
285
+ "loguru": {
286
+ "hashes": [
287
+ "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6",
288
+ "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"
289
+ ],
290
+ "index": "pypi",
291
+ "markers": "python_version >= '3.5' and python_version < '4.0'",
292
+ "version": "==0.7.3"
293
+ },
294
  "markdown": {
295
  "hashes": [
296
  "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2",
 
299
  "markers": "python_version >= '3.8'",
300
  "version": "==3.7"
301
  },
302
+ "markdown-it-py": {
303
+ "hashes": [
304
+ "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1",
305
+ "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"
306
+ ],
307
+ "markers": "python_version >= '3.8'",
308
+ "version": "==3.0.0"
309
+ },
310
  "markupsafe": {
311
  "hashes": [
312
  "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4",
 
374
  "markers": "python_version >= '3.9'",
375
  "version": "==3.0.2"
376
  },
377
+ "mdurl": {
378
+ "hashes": [
379
+ "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8",
380
+ "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"
381
+ ],
382
+ "markers": "python_version >= '3.7'",
383
+ "version": "==0.1.2"
384
+ },
385
  "mergedeep": {
386
  "hashes": [
387
  "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8",
 
758
  "markers": "python_version >= '3.8'",
759
  "version": "==0.9.1"
760
  },
761
+ "pygments": {
762
+ "hashes": [
763
+ "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f",
764
+ "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"
765
+ ],
766
+ "markers": "python_version >= '3.8'",
767
+ "version": "==2.19.1"
768
+ },
769
  "pymdown-extensions": {
770
  "hashes": [
771
  "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9",
 
866
  },
867
  "regex": {
868
  "hashes": [
869
+ "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c",
870
+ "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60",
871
+ "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d",
872
+ "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d",
873
+ "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67",
874
+ "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773",
875
+ "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0",
876
+ "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef",
877
+ "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad",
878
+ "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe",
879
+ "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3",
880
+ "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114",
881
+ "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4",
882
+ "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39",
883
+ "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e",
884
+ "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3",
885
+ "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7",
886
+ "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d",
887
+ "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e",
888
+ "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a",
889
+ "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7",
890
+ "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f",
891
+ "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0",
892
+ "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54",
893
+ "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b",
894
+ "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c",
895
+ "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd",
896
+ "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57",
897
+ "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34",
898
+ "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d",
899
+ "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f",
900
+ "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b",
901
+ "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519",
902
+ "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4",
903
+ "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a",
904
+ "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638",
905
+ "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b",
906
+ "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839",
907
+ "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07",
908
+ "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf",
909
+ "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff",
910
+ "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0",
911
+ "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f",
912
+ "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95",
913
+ "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4",
914
+ "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e",
915
+ "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13",
916
  "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519",
917
+ "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2",
918
+ "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008",
919
+ "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9",
920
+ "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc",
921
+ "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48",
922
+ "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20",
923
+ "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89",
924
+ "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e",
925
+ "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf",
926
+ "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b",
927
+ "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd",
928
+ "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84",
929
+ "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29",
930
+ "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b",
931
+ "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3",
932
+ "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45",
933
+ "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3",
934
+ "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983",
935
+ "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e",
936
+ "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7",
937
+ "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4",
938
+ "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e",
939
+ "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467",
940
+ "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577",
941
+ "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001",
942
+ "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0",
943
+ "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55",
944
+ "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9",
945
+ "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf",
946
+ "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6",
947
+ "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e",
948
+ "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde",
949
+ "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62",
950
+ "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df",
951
+ "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51",
952
+ "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5",
953
+ "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86",
954
+ "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2",
955
+ "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2",
956
+ "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0",
957
+ "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c",
958
+ "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f",
959
+ "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6",
960
+ "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2",
961
+ "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9",
962
+ "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"
963
  ],
964
  "markers": "python_version >= '3.8'",
965
  "version": "==2024.11.6"
 
972
  "markers": "python_version >= '3.8'",
973
  "version": "==2.32.3"
974
  },
975
+ "rich": {
976
+ "hashes": [
977
+ "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098",
978
+ "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"
979
+ ],
980
+ "markers": "python_full_version >= '3.8.0'",
981
+ "version": "==13.9.4"
982
+ },
983
  "rpds-py": {
984
  "hashes": [
985
+ "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046",
986
+ "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724",
987
+ "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33",
988
+ "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc",
989
+ "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032",
990
+ "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a",
991
+ "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7",
992
+ "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c",
993
+ "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718",
994
+ "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc",
995
+ "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d",
996
+ "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272",
997
+ "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f",
998
+ "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d",
999
+ "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b",
1000
+ "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb",
1001
+ "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef",
1002
+ "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b",
1003
+ "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45",
1004
+ "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4",
1005
+ "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796",
1006
+ "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3",
1007
+ "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c",
1008
+ "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9",
1009
+ "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f",
1010
+ "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029",
1011
+ "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9",
1012
+ "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399",
1013
+ "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586",
1014
+ "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda",
1015
+ "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91",
1016
+ "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b",
1017
+ "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a",
1018
+ "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c",
1019
+ "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405",
1020
+ "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5",
1021
+ "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143",
1022
+ "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a",
1023
+ "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c",
1024
+ "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78",
1025
+ "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0",
1026
+ "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350",
1027
+ "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7",
1028
+ "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba",
1029
+ "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664",
1030
+ "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a",
1031
+ "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56",
1032
+ "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e",
1033
+ "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d",
1034
+ "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1",
1035
+ "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964",
1036
+ "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791",
1037
+ "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124",
1038
+ "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e",
1039
+ "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120",
1040
+ "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad",
1041
+ "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc",
1042
+ "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c",
1043
+ "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e",
1044
+ "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba",
1045
+ "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797",
1046
+ "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149",
1047
+ "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5",
1048
+ "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240",
1049
+ "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034",
1050
+ "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25",
1051
+ "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7",
1052
+ "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d",
1053
+ "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793",
1054
+ "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba",
1055
+ "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d",
1056
+ "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d",
1057
+ "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391",
1058
+ "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e",
1059
+ "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f",
1060
+ "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7",
1061
+ "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd",
1062
+ "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f",
1063
+ "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb",
1064
+ "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea",
1065
+ "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e",
1066
+ "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052",
1067
+ "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd",
1068
+ "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47",
1069
+ "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d",
1070
+ "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9",
1071
+ "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8",
1072
+ "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875",
1073
+ "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65",
1074
+ "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e",
1075
+ "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114",
1076
+ "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44",
1077
+ "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9",
1078
+ "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a",
1079
+ "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205",
1080
+ "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164",
1081
+ "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58",
1082
+ "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3",
1083
+ "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6",
1084
+ "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97",
1085
+ "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6",
1086
+ "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae",
1087
+ "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727",
1088
+ "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098",
1089
+ "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c",
1090
+ "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1",
1091
+ "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8",
1092
+ "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d",
1093
+ "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103",
1094
+ "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30",
1095
+ "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d",
1096
+ "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5",
1097
+ "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07",
1098
+ "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83"
1099
  ],
1100
  "markers": "python_version >= '3.9'",
1101
+ "version": "==0.24.0"
1102
  },
1103
  "safetensors": {
1104
  "hashes": [
 
1126
  "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54",
1127
  "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8"
1128
  ],
1129
+ "markers": "python_version >= '3.9'",
1130
  "version": "==78.1.0"
1131
  },
1132
+ "shellingham": {
1133
+ "hashes": [
1134
+ "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686",
1135
+ "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"
1136
+ ],
1137
+ "markers": "python_version >= '3.7'",
1138
+ "version": "==1.5.4"
1139
+ },
1140
  "six": {
1141
  "hashes": [
1142
  "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
 
1176
  "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f",
1177
  "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"
1178
  ],
1179
+ "markers": "python_version >= '3.8'",
1180
  "version": "==1.13.1"
1181
  },
1182
  "tenacity": {
 
1270
  },
1271
  "transformers": {
1272
  "hashes": [
1273
+ "sha256:99bbcddd6570f080aee81f67844f4b46c8025bbdbdb86eafb82cc7d6aaafb190",
1274
+ "sha256:dac6cef0e2698fb25b57edbc0b9af3732e4ca148ed008d3e3118203c4dd25055"
1275
  ],
1276
  "index": "pypi",
1277
  "markers": "python_full_version >= '3.9.0'",
1278
+ "version": "==4.50.2"
1279
+ },
1280
+ "typer": {
1281
+ "hashes": [
1282
+ "sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc",
1283
+ "sha256:ab2fab47533a813c49fe1f16b1a370fd5819099c00b119e0633df65f22144ba5"
1284
+ ],
1285
+ "index": "pypi",
1286
+ "markers": "python_version >= '3.7'",
1287
+ "version": "==0.15.2"
1288
  },
1289
  "typing-extensions": {
1290
  "hashes": [
 
1345
  ],
1346
  "markers": "python_version >= '3.9'",
1347
  "version": "==6.0.0"
1348
+ },
1349
+ "win32-setctime": {
1350
+ "hashes": [
1351
+ "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390",
1352
+ "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"
1353
+ ],
1354
+ "markers": "python_version >= '3.5'",
1355
+ "version": "==1.2.0"
1356
  }
1357
  },
1358
  "develop": {}
app.py CHANGED
@@ -1,73 +1,101 @@
1
  import streamlit as st
2
  import nest_asyncio
3
  import pandas as pd
 
 
 
 
4
  from annotated_text import annotation
5
  from scripts.predict import InferenceHandler
6
- from htbuilder import span, div
7
 
8
- nest_asyncio.apply()
9
 
 
 
10
  rc = None
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  @st.cache_data
13
- def load_inference_handler(api_token):
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  try:
15
  return InferenceHandler(api_token)
16
  except:
17
  return None
18
 
19
- @st.cache_data
20
- def extract_data(json_obj):
21
- row_data = []
22
-
23
- row_data.append(json_obj['text_input'])
24
- row_data.append(json_obj['text_sentiment'])
25
- cat_dict = json_obj['category_sentiments']
26
- for cat in cat_dict.keys():
27
- raw_val = cat_dict[cat]
28
- val = f'{raw_val * 100: .2f}%' if raw_val is not None else 'N/A'
29
- row_data.append(val)
30
-
31
- return row_data
32
-
33
- def load_history(parent_elem):
34
- with parent_elem:
35
- for idx, result in enumerate(st.session_state.results):
36
- text = result['text_input']
37
- discriminatory = False
38
-
39
- data = []
40
- for sent_item in result['results']:
41
- sentence = sent_item['sentence']
42
- bin_class = sent_item['binary_classification']['classification']
43
- pred_class = sent_item['binary_classification']['prediction_class']
44
- ml_regr = sent_item['multilabel_regression']
45
-
46
- row_data = [sentence, bin_class]
47
- if pred_class == 1:
48
- discriminatory = True
49
- for cat in ml_regr.keys():
50
- perc = ml_regr[cat] * 100
51
- row_data.append(f'{perc:.2f}%')
52
- else:
53
- for i in range(6):
54
- row_data.append(None)
55
-
56
- data.append(row_data)
57
- df = pd.DataFrame(data=data, columns=['Sentence', 'Binary Classification', 'Gender', 'Race', 'Sexuality', 'Disability', 'Religion', 'Unspecified'])
58
-
59
- with st.expander(label=f'Entry #{idx+1}', icon='🔴' if discriminatory else '🟢'):
60
- st.markdown('<hr style="margin: 0.5em 0 0 0;">', unsafe_allow_html=True)
61
- st.markdown(
62
- f"<p style='text-align: center; font-weight: bold; font-style: italic; font-size: medium;'>\"{text}\"</p>",
63
- unsafe_allow_html=True
64
- )
65
- st.markdown('<hr style="margin: 0 0 0.5em 0;">', unsafe_allow_html=True)
66
- st.markdown('##### Sentence Breakdown:')
67
- st.dataframe(df)
68
 
 
 
 
 
 
 
 
69
 
70
- def build_result_tree(parent_elem, results):
71
  label_dict = {
72
  'Gender': '#4A90E2',
73
  'Race': '#E67E22',
@@ -125,7 +153,7 @@ def build_result_tree(parent_elem, results):
125
  unsafe_allow_html=True
126
  )
127
  st.markdown('<hr style="margin: 0 0 0.5em 0;">', unsafe_allow_html=True)
128
-
129
  classification = sent['classification']
130
  st.markdown(f'##### Classification - {classification}')
131
 
@@ -140,6 +168,7 @@ def build_result_tree(parent_elem, results):
140
  )
141
  st.markdown('\n')
142
  else:
 
143
  st.markdown(f"#### Classification - {sent['classification']}")
144
  if len(sent['annotated_categories']) > 0:
145
  st.markdown(
@@ -153,19 +182,80 @@ def build_result_tree(parent_elem, results):
153
  st.markdown('\n')
154
 
155
  @st.cache_data
156
- def analyze_text(text):
 
 
 
 
 
 
 
157
  if ih:
158
  res = None
159
  with rc:
160
  with st.spinner("Processing...", show_time=True) as spnr:
161
  # time.sleep(5)
162
- res = ih.classify_text(text)
163
  del spnr
164
 
165
  if res is not None:
166
  st.session_state.results.append(res)
167
  build_result_tree(rc, res)
168
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  st.title('NLPinitiative Text Classifier')
170
 
171
  st.sidebar.write("")
@@ -178,9 +268,10 @@ ih = load_inference_handler(API_KEY)
178
 
179
  tab1 = st.empty()
180
  tab2 = st.empty()
 
181
  tab3 = st.empty()
182
 
183
- tab1, tab2, tab3 = st.tabs(['Classifier', 'Input History', 'About This App'])
184
 
185
  if "results" not in st.session_state:
186
  st.session_state.results = []
@@ -198,16 +289,44 @@ with tab1:
198
  analyze_text(text_area)
199
 
200
  with tab2:
201
- load_history(tab2)
 
 
 
 
 
 
 
202
 
203
  with tab3:
 
 
 
 
 
 
 
 
 
 
 
204
  st.markdown(
205
- """The NLPinitiative Discriminatory Text Classifier is an advanced
206
- natural language processing tool designed to detect and flag potentially
207
- discriminatory or harmful language. By analyzing text for biased, offensive,
208
- or exclusionary content, this classifier helps promote more inclusive and
209
- respectful communication. Simply enter your text below, and the model will
210
- assess it based on linguistic patterns and context. While the tool provides
211
- valuable insights, we encourage users to review flagged content thoughtfully
212
- and consider context when interpreting results."""
213
- )
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import nest_asyncio
3
  import pandas as pd
4
+ import os
5
+
6
+ from htbuilder import span, div
7
+ from loguru import logger
8
  from annotated_text import annotation
9
  from scripts.predict import InferenceHandler
10
+ from huggingface_hub import snapshot_download
11
 
12
+ from scripts.config import DATASET_REPO
13
 
14
+ nest_asyncio.apply()
15
+ st.set_page_config(layout='wide')
16
  rc = None
17
 
18
+ def load_history(parent_elem):
19
+ """Loads the history of results from inference for previous inputs made by the user.
20
+
21
+ Parameters
22
+ ----------
23
+ parent_elem : DeltaGenerator
24
+ The Streamlit UI element that contains the history data.
25
+ """
26
+
27
+ with parent_elem:
28
+ if len(st.session_state.results) == 0:
29
+ st.markdown(
30
+ f"<p style='text-align: center; font-weight: bold; font-style: italic; font-size: 1.5vw;'>No History</p>",
31
+ unsafe_allow_html=True
32
+ )
33
+ else:
34
+ for idx, result in enumerate(st.session_state.results):
35
+ text = result['text_input']
36
+ discriminatory = False
37
+
38
+ data = []
39
+ for sent_item in result['results']:
40
+ sentence = sent_item['sentence']
41
+ bin_class = sent_item['binary_classification']['classification']
42
+ pred_class = sent_item['binary_classification']['prediction_class']
43
+ ml_regr = sent_item['multilabel_regression']
44
+
45
+ row_data = [sentence, bin_class]
46
+ if pred_class == 1:
47
+ discriminatory = True
48
+ for cat in ml_regr.keys():
49
+ perc = ml_regr[cat] * 100
50
+ row_data.append(f'{perc:.2f}%')
51
+ else:
52
+ for i in range(6):
53
+ row_data.append(None)
54
+
55
+ data.append(row_data)
56
+ df = pd.DataFrame(data=data, columns=['Sentence', 'Binary Classification', 'Gender', 'Race', 'Sexuality', 'Disability', 'Religion', 'Unspecified'])
57
+
58
+ with st.expander(label=f'Entry #{idx+1}', icon='🔴' if discriminatory else '🟢'):
59
+ st.markdown('<hr style="margin: 0.5em 0 0 0;">', unsafe_allow_html=True)
60
+ st.markdown(
61
+ f"<p style='text-align: center; font-weight: bold; font-style: italic; font-size: medium;'>\"{text}\"</p>",
62
+ unsafe_allow_html=True
63
+ )
64
+ st.markdown('<hr style="margin: 0 0 0.5em 0;">', unsafe_allow_html=True)
65
+ st.markdown('##### Sentence Breakdown:')
66
+ st.dataframe(df)
67
+
68
  @st.cache_data
69
+ def load_inference_handler(api_token: str) -> InferenceHandler | None:
70
+ """Loads an instance of the InferenceHandler class once a token is entered.
71
+
72
+ Parameters
73
+ ----------
74
+ api_token: str
75
+ The Hugging Face read/write token used for retrieving the binary classification and multilabel regression model tensor files.
76
+
77
+ Returns
78
+ -------
79
+ InferenceHandler | None
80
+ Returns an instance of the InferenceHandler class if a valid token is entered, otherwise returns None.
81
+ """
82
+
83
  try:
84
  return InferenceHandler(api_token)
85
  except:
86
  return None
87
 
88
+ def build_result_tree(parent_elem, results: dict):
89
+ """Loads the history of results from inference for previous inputs made by the user.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
 
91
+ Parameters
92
+ ----------
93
+ parent_elem : DeltaGenerator
94
+ The Streamlit UI element to post the data to.
95
+ results : dict
96
+ The resulting data from performing inference.
97
+ """
98
 
 
99
  label_dict = {
100
  'Gender': '#4A90E2',
101
  'Race': '#E67E22',
 
153
  unsafe_allow_html=True
154
  )
155
  st.markdown('<hr style="margin: 0 0 0.5em 0;">', unsafe_allow_html=True)
156
+
157
  classification = sent['classification']
158
  st.markdown(f'##### Classification - {classification}')
159
 
 
168
  )
169
  st.markdown('\n')
170
  else:
171
+ sent = sent_details[0]
172
  st.markdown(f"#### Classification - {sent['classification']}")
173
  if len(sent['annotated_categories']) > 0:
174
  st.markdown(
 
182
  st.markdown('\n')
183
 
184
  @st.cache_data
185
+ def analyze_text(input: str):
186
+ """Performs infernce on the entered text using the InferenceHandler.
187
+
188
+ Parameters
189
+ ----------
190
+ input : str
191
+ The text to analyze.
192
+ """
193
  if ih:
194
  res = None
195
  with rc:
196
  with st.spinner("Processing...", show_time=True) as spnr:
197
  # time.sleep(5)
198
+ res = ih.classify_text(input)
199
  del spnr
200
 
201
  if res is not None:
202
  st.session_state.results.append(res)
203
  build_result_tree(rc, res)
204
 
205
+ @st.cache_data
206
+ def load_datasets(_parent_elem, api_token: str):
207
+ if api_token is None or len(api_token) == 0:
208
+ raise Exception()
209
+
210
+ cache_path = snapshot_download(repo_id=DATASET_REPO, repo_type='dataset', token=api_token)
211
+ ds_record = pd.read_csv(os.path.join(cache_path, 'dataset_record.csv'))
212
+
213
+ raw_ds_path = os.path.join(cache_path, 'raw')
214
+ interim_ds_path = os.path.join(cache_path, 'interim')
215
+ processed_ds_path = os.path.join(cache_path, 'processed')
216
+
217
+ with _parent_elem:
218
+ st.markdown(f'### Disclaimer')
219
+ st.markdown("> The datasets displayed contain content that may be highly discriminatory or offensive in nature. Viewer discretion is advised. This content is presented solely for analysis, research, or educational purposes and does not reflect the views or values of the creators or maintainers of this application.")
220
+ st.markdown('<hr style="margin: 0 0 0.5em 0;">', unsafe_allow_html=True)
221
+
222
+ if os.path.exists(os.path.join(processed_ds_path, 'NLPinitiative_Master_Dataset.csv')):
223
+ master_df = pd.read_csv(os.path.join(processed_ds_path, 'NLPinitiative_Master_Dataset.csv'))
224
+
225
+ if len(master_df) > 0:
226
+ st.markdown(f'### NLPinitiative Master Dataset')
227
+ with st.expander(label='Master Dataset'):
228
+ st.dataframe(master_df)
229
+
230
+ if len(ds_record) > 0:
231
+ for _, row in ds_record.iterrows():
232
+ try:
233
+ ds_id = row['Dataset ID']
234
+ ds_ref_url = row['Dataset Reference URL']
235
+ raw_fn = row['Raw Dataset Filename']
236
+ norm_fn = row['Converted Filename']
237
+
238
+ raw_df = pd.read_csv(os.path.join(raw_ds_path, raw_fn))
239
+ norm_df = pd.read_csv(os.path.join(interim_ds_path, norm_fn))
240
+
241
+ st.markdown('<hr style="margin: 0 0 0.5em 0;">', unsafe_allow_html=True)
242
+ st.markdown(f'#### {ds_id} - [Link to Dataset Source]({ds_ref_url})')
243
+ with st.expander(label='Dataset'):
244
+ st.markdown(f'###### Raw Dataset')
245
+ st.dataframe(raw_df)
246
+ st.markdown(f'###### Normalized Dataset')
247
+ st.dataframe(norm_df)
248
+
249
+ except Exception as e:
250
+ logger.error(f'{e}')
251
+ else:
252
+ st.markdown(
253
+ f"<p style='text-align: center; font-weight: bold; font-style: italic; font-size: 1.5vw;'>No Datasets to Display</p>",
254
+ unsafe_allow_html=True
255
+ )
256
+
257
+ #===========================================================================================================================================
258
+
259
  st.title('NLPinitiative Text Classifier')
260
 
261
  st.sidebar.write("")
 
268
 
269
  tab1 = st.empty()
270
  tab2 = st.empty()
271
+ tab4 = st.empty()
272
  tab3 = st.empty()
273
 
274
+ tab1, tab2, tab3, tab4 = st.tabs(['Classifier', 'Input History', 'Datasets', 'About This App'])
275
 
276
  if "results" not in st.session_state:
277
  st.session_state.results = []
 
289
  analyze_text(text_area)
290
 
291
  with tab2:
292
+ hist_container = st.container(border=True)
293
+ try:
294
+ load_history(hist_container)
295
+ except:
296
+ hist_container.markdown(
297
+ f"<p style='text-align: center; font-weight: bold; font-style: italic; font-size: 1.5vw;'>No History</p>",
298
+ unsafe_allow_html=True
299
+ )
300
 
301
  with tab3:
302
+ ds_container = st.container(border=True)
303
+ try:
304
+ load_datasets(ds_container, API_KEY)
305
+ except Exception as e:
306
+ logger.error(f'{e}')
307
+ ds_container.markdown(
308
+ f"<p style='text-align: center; font-weight: bold; font-style: italic; font-size: 1.5vw;'>No Datasets to Display</p>",
309
+ unsafe_allow_html=True
310
+ )
311
+
312
+ with tab4:
313
  st.markdown(
314
+ f"""
315
+ ## About
316
+ The NLPinitiative Discriminatory Text Classifier is an advanced
317
+ natural language processing tool designed to detect and flag potentially
318
+ discriminatory or harmful language. By analyzing text for biased, offensive,
319
+ or exclusionary content, this classifier helps promote more inclusive and
320
+ respectful communication. Simply enter your text below, and the model will
321
+ assess it based on linguistic patterns and context. While the tool provides
322
+ valuable insights, we encourage users to review flagged content thoughtfully
323
+ and consider context when interpreting results.
324
+
325
+ The application utilizes two NLP models: a fine-tuned binary classifier for classifying input as
326
+ Discriminatory or Non-Discriminatory and a fine-tuned multilabel regression model for assessing
327
+ the likelihood of specific categories of discrimination (Gender, Race, Sexuality, Disability, Religion
328
+ and Unspecified). The base model used for both fine-tuned models is the pretrained
329
+ [BERT](https://doi.org/10.48550/arXiv.1810.04805) (Bidirectional Encoder Representations from Transformers)
330
+ model.
331
+ """
332
+ )
config.py DELETED
@@ -1,23 +0,0 @@
1
- # Used for setting some constants for the project codebase
2
-
3
- from pathlib import Path
4
-
5
- # Root Path
6
- ROOT = Path(__file__).resolve().parents[0]
7
-
8
- # Model Directory
9
- MODELS_DIR = ROOT / 'models'
10
-
11
- # Binary Classification Model Path
12
- BIN_MODEL_PATH = MODELS_DIR / 'binary_classification'
13
-
14
- # Multilabel Regression Model Path
15
- ML_MODEL_PATH = MODELS_DIR / 'multilabel_regression'
16
-
17
- # HF Hub Repositories
18
- BIN_REPO = 'dlsmallw/NLPinitiative-Binary-Classification'
19
- ML_REPO = 'dlsmallw/NLPinitiative-Multilabel-Regression'
20
- DATASET_REPO = 'dlsmallw/NLPinitiative-Dataset'
21
-
22
- BIN_API_URL = f"https://api-inference.huggingface.co/models/{BIN_REPO}"
23
- ML_API_URL = f"https://api-inference.huggingface.co/models/{ML_REPO}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
config.toml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ [repositories]
2
+ bin_repo = "dlsmallw/NLPinitiative-Binary-Classification"
3
+ ml_repo = "dlsmallw/NLPinitiative-Multilabel-Regression"
4
+ ds_repo = "dlsmallw/NLPinitiative-Dataset"
scripts/__init__.py CHANGED
@@ -1 +1 @@
1
- import config
 
1
+ import scripts.config as config
scripts/config.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Used for setting some constants for the project codebase
2
+ import toml
3
+ import typer
4
+ from pathlib import Path
5
+ from loguru import logger
6
+ from typing_extensions import Annotated
7
+
8
+ app = typer.Typer()
9
+
10
+ # Root Path
11
+ ROOT = Path(__file__).resolve().parents[1]
12
+
13
+ try:
14
+ logger.info('Loading config.toml...')
15
+ with open(ROOT / 'config.toml', 'r') as f:
16
+ config = toml.load(f, dict)
17
+ f.close()
18
+
19
+ if 'repositories' not in config.keys() or \
20
+ 'bin_repo' not in config['repositories'] or \
21
+ 'ml_repo' not in config['repositories'] or \
22
+ 'ds_repo' not in config['repositories']:
23
+ raise Exception('Malformed toml config file.')
24
+
25
+ logger.success('config.toml loaded successfully.')
26
+ except Exception as e:
27
+ logger.error(e)
28
+ config = {
29
+ 'repositories': {
30
+ 'bin_repo': '',
31
+ 'ml_repo': '',
32
+ 'ds_repo': ''
33
+ }
34
+ }
35
+
36
+ with open(ROOT / 'config.toml', 'w') as f:
37
+ toml.dump(config, f)
38
+ f.close()
39
+
40
+
41
+ # HF Hub Repositories
42
+ BIN_REPO = config['repositories']['bin_repo']
43
+ ML_REPO = config['repositories']['ml_repo']
44
+ DATASET_REPO = config['repositories']['ds_repo']
45
+
46
+ @app.command()
47
+ def main(
48
+ bin_repo: Annotated[str, typer.Option("--binary-repo", "-b")] = None,
49
+ ml_repo: Annotated[str, typer.Option("--multilabel-regression-repo", "-m")] = None,
50
+ ds_repo: Annotated[str, typer.Option("--dataset-repo", "-d")] = None
51
+ ):
52
+ toml_edited = False
53
+
54
+ if bin_repo is not None and len(bin_repo) > 0:
55
+ config['repositories']['bin_repo'] = bin_repo
56
+ toml_edited = True
57
+ logger.success(f'Successfully updated binary repository to {bin_repo}.')
58
+
59
+ if ml_repo is not None and len(ml_repo) > 0:
60
+ config['repositories']['ml_repo'] = ml_repo
61
+ toml_edited = True
62
+ logger.success(f'Successfully updated binary repository to {ml_repo}.')
63
+
64
+ if ds_repo is not None and len(ds_repo) > 0:
65
+ config['repositories']['ds_repo'] = ds_repo
66
+ toml_edited = True
67
+ logger.success(f'Successfully updated binary repository to "{ds_repo}".')
68
+
69
+ if toml_edited:
70
+ with open(ROOT / 'config.toml', 'w') as f:
71
+ toml.dump(config, f)
72
+ f.close()
73
+
74
+
75
+ if __name__ == "__main__":
76
+ app()
setup.sh CHANGED
@@ -35,4 +35,36 @@ docs() {
35
  log_error "Specify 'build' or 'serve'. For example: docs build"
36
  ;;
37
  esac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
 
35
  log_error "Specify 'build' or 'serve'. For example: docs build"
36
  ;;
37
  esac
38
+ }
39
+
40
+ set() {
41
+ if [[ $# -lt 2 ]]; then
42
+ echo "Command Requires Two Arguments."
43
+ else
44
+ case $1 in
45
+ bin_repo)
46
+ python ./scripts/config.py -b "$2"
47
+ ;;
48
+ ml_repo)
49
+ python ./scripts/config.py -m "$2"
50
+ ;;
51
+ ds_repo)
52
+ python ./scripts/config.py -d "$2"
53
+ ;;
54
+ *)
55
+ log_error "Specify 'bin_repo', 'ml_repo' or 'ds_repo'. For example: set bin_repo <repo id>"
56
+ ;;
57
+ esac
58
+ fi
59
+ }
60
+
61
+ run() {
62
+ case $1 in
63
+ dev)
64
+ streamlit run app.py
65
+ ;;
66
+ *)
67
+ log_error "Specify 'dev'. For example: run dev"
68
+ ;;
69
+ esac
70
  }