From f8bb89cca09372a32129e343d0fc1d75db1a0e0d Mon Sep 17 00:00:00 2001 From: Aakash Singh Date: Tue, 20 Feb 2024 17:32:22 +0530 Subject: [PATCH 01/12] cleanup and fix docker local builds (#473) --- Pipfile | 1 + Pipfile.lock | 860 ++++++++++++----------- compose/local/django/celery/beat/start | 4 +- compose/local/django/celery/worker/start | 4 +- docker-compose.local.yaml | 17 +- docker-compose.production.yaml | 6 +- 6 files changed, 467 insertions(+), 425 deletions(-) diff --git a/Pipfile b/Pipfile index cf7c9ced..db43b4a2 100644 --- a/Pipfile +++ b/Pipfile @@ -53,6 +53,7 @@ factory-boy = "==3.3.0" django-debug-toolbar = "==4.2.0" django-extensions = "==3.2.3" psycopg = {extras = ["binary"], version = "==3.1.17"} +watchdog = "==4.0.0" [requires] python_version = "3.11" diff --git a/Pipfile.lock b/Pipfile.lock index 403bec11..3c9b0163 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f7eaea9dba25a601c70a711e0b46fefbee0f7beb7b750012fbd55c55e9bf857f" + "sha256": "63b31ab91cb495e4a97169808cd4de31645b941b2e62433ce1c0d9a7650b2565" }, "pipfile-spec": 6, "requires": { @@ -202,19 +202,19 @@ }, "boto3": { "hashes": [ - "sha256:7bf924c942426839efd7fa5c2c4fe85dba208258393e8017a5ad327c30e5948d", - "sha256:9e62f42de2873baab96eb822386d6a3b1d77f6715cb9033d7b4e6e9ebb0cdbe7" + "sha256:46432fd506708fec6caec4392d758c6f5b79a376dee67d3284fe8b6bfbafeaf4", + "sha256:5c96bed1269f77788780aa2005811dc3a37d4122f08b8e54063a1f4c1b9314a1" ], "markers": "python_version >= '3.8'", - "version": "==1.34.32" + "version": "==1.34.45" }, "botocore": { "hashes": [ - "sha256:466aee158bd0429dbd567c4e2bdf7be9a0a5a74409f8b295c30f34d84c497f9c", - "sha256:aa26a74df83eed3db9542c1cf9108138794c344918b36a506c0723717f1acaab" + "sha256:bf4fe24dd00a6262a27573dea1690ea68eb20f939e7086effadf19aa1acb44d1", + "sha256:e17874ac708fef295d2ea16bb2570ea0512c920de9f25f796de0d8c778f06a02" ], "markers": "python_version >= '3.8'", - "version": "==1.34.32" + "version": "==1.34.45" }, "cachetools": { "hashes": [ @@ -235,11 +235,11 @@ }, "certifi": { "hashes": [ - "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", - "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" ], "markers": "python_version >= '3.6'", - "version": "==2023.11.17" + "version": "==2024.2.2" }, "cffi": { "hashes": [ @@ -428,11 +428,11 @@ }, "dataclasses-json": { "hashes": [ - "sha256:35cb40aae824736fdf959801356641836365219cfe14caeb115c39136f775d2a", - "sha256:4aeb343357997396f6bca1acae64e486c3a723d8f5c76301888abeccf0c45176" + "sha256:73696ebf24936560cca79a2430cbc4f3dd23ac7bf46ed17f38e5e5e7657a6377", + "sha256:f90578b8a3177f7552f4e1a6e535e84293cd5da421fcce0642d49c0d7bdf8df2" ], "markers": "python_version >= '3.7' and python_version < '4.0'", - "version": "==0.6.3" + "version": "==0.6.4" }, "distro": { "hashes": [ @@ -536,11 +536,11 @@ }, "dnspython": { "hashes": [ - "sha256:6facdf76b73c742ccf2d07add296f178e629da60be23ce4b0a9c927b1e02c3a6", - "sha256:a0034815a59ba9ae888946be7ccca8f7c157b286f8455b379c692efb51022a15" + "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50", + "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc" ], "markers": "python_version >= '3.8'", - "version": "==2.5.0" + "version": "==2.6.1" }, "drf-nested-routers": { "hashes": [ @@ -794,11 +794,11 @@ }, "httpcore": { "hashes": [ - "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7", - "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535" + "sha256:5c0f9546ad17dac4d0772b0808856eb616eb8b48ce94f49ed819fd6982a8a544", + "sha256:9a6a501c3099307d9fd76ac244e08503427679b1e81ceb1d922485e2f2462ad2" ], "markers": "python_version >= '3.8'", - "version": "==1.0.2" + "version": "==1.0.3" }, "httpx": { "hashes": [ @@ -891,19 +891,19 @@ }, "langchain-community": { "hashes": [ - "sha256:ab957b34a562e0199b2ecf050bdc987c4fe889b2ac9f22b75a9fac8b9e30f53a", - "sha256:d503491bbfb691d1b3d10d74f7a69840cee3caf9b58a9a76f053ff925ea76733" + "sha256:bd112b5813702919c50f89b1afa2b63adf1da89999df4842b327ee11220f8c39", + "sha256:c56c48bc77d24e1fc399a9ee9a637d96e3b2ff952e3a080b5a41820d9d00fb3c" ], "markers": "python_version < '4.0' and python_full_version >= '3.8.1'", - "version": "==0.0.17" + "version": "==0.0.20" }, "langchain-core": { "hashes": [ - "sha256:5a60dc3c391b33834fb9c8b072abd7a0df4cbba8ce88eb1bcb288844000ab759", - "sha256:ad470b21cdfdc75e829cd91c8d8eb7e0438ab8ddb5b50828125ff7ada121ee7b" + "sha256:34359cc8b6f8c3d45098c54a6a9b35c9f538ef58329cd943a2249d6d7b4e5806", + "sha256:d42fac013c39a8b0bcd7e337a4cb6c17c16046c60d768f89df582ad73ec3c5cb" ], "markers": "python_version < '4.0' and python_full_version >= '3.8.1'", - "version": "==0.1.18" + "version": "==0.1.23" }, "langchain-experimental": { "hashes": [ @@ -916,11 +916,11 @@ }, "langsmith": { "hashes": [ - "sha256:9d0ccbcda7b69c83828060603a51bb4319e43b8dc807fbd90b6355f8ec709500", - "sha256:fefc631fc30d836b54d4e3f99961c41aea497633898b8f09e305b6c7216c2c54" + "sha256:36c4cc47e5b54be57d038036a30fb19ce6e4c73048cd7a464b8f25b459694d34", + "sha256:8903d3811b9fc89eb18f5961c8e6935fbd2d0f119884fbf30dc70b8f8f4121fc" ], "markers": "python_version < '4.0' and python_full_version >= '3.8.1'", - "version": "==0.0.85" + "version": "==0.0.87" }, "loguru": { "hashes": [ @@ -940,83 +940,99 @@ }, "multidict": { "hashes": [ - "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", - "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8", - "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03", - "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710", - "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161", - "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664", - "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569", - "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067", - "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313", - "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706", - "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2", - "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636", - "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49", - "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93", - "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603", - "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0", - "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60", - "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4", - "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e", - "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1", - "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60", - "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951", - "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc", - "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe", - "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95", - "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d", - "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8", - "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed", - "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2", - "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775", - "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87", - "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c", - "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2", - "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98", - "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3", - "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe", - "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78", - "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660", - "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176", - "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e", - "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988", - "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c", - "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c", - "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0", - "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449", - "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f", - "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde", - "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5", - "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d", - "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac", - "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a", - "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9", - "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca", - "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11", - "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35", - "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063", - "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b", - "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982", - "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258", - "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1", - "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52", - "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480", - "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7", - "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461", - "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d", - "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc", - "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779", - "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a", - "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547", - "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0", - "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171", - "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf", - "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d", - "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba" + "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556", + "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c", + "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29", + "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b", + "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8", + "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7", + "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd", + "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40", + "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6", + "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3", + "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c", + "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9", + "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5", + "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae", + "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442", + "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9", + "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc", + "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c", + "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea", + "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5", + "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50", + "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182", + "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453", + "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e", + "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600", + "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733", + "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda", + "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241", + "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461", + "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e", + "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e", + "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b", + "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e", + "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7", + "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386", + "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd", + "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9", + "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf", + "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee", + "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5", + "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a", + "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271", + "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54", + "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4", + "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496", + "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb", + "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319", + "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3", + "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f", + "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527", + "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed", + "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604", + "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef", + "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8", + "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5", + "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5", + "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626", + "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c", + "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d", + "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c", + "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc", + "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc", + "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b", + "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38", + "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450", + "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1", + "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f", + "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3", + "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755", + "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226", + "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a", + "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046", + "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf", + "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479", + "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e", + "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1", + "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a", + "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83", + "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929", + "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93", + "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a", + "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c", + "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44", + "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89", + "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba", + "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e", + "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da", + "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24", + "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423", + "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef" ], "markers": "python_version >= '3.7'", - "version": "==6.0.4" + "version": "==6.0.5" }, "mypy-extensions": { "hashes": [ @@ -1037,45 +1053,45 @@ }, "numpy": { "hashes": [ - "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd", - "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b", - "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e", - "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f", - "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f", - "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178", - "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3", - "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4", - "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e", - "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0", - "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00", - "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419", - "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4", - "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6", - "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166", - "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b", - "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3", - "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf", - "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2", - "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2", - "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36", - "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03", - "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce", - "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6", - "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13", - "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5", - "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e", - "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485", - "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137", - "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374", - "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58", - "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b", - "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb", - "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b", - "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda", - "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511" + "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", + "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", + "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", + "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", + "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", + "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", + "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", + "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", + "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", + "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", + "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", + "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", + "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", + "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", + "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", + "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", + "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", + "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", + "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", + "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", + "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", + "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", + "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", + "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", + "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", + "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", + "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", + "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", + "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", + "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", + "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", + "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", + "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", + "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", + "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", + "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" ], "markers": "python_version >= '3.9'", - "version": "==1.26.3" + "version": "==1.26.4" }, "openai": { "hashes": [ @@ -1191,20 +1207,20 @@ }, "protobuf": { "hashes": [ - "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62", - "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d", - "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61", - "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62", - "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3", - "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9", - "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830", - "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6", - "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0", - "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020", - "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e" + "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4", + "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8", + "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c", + "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d", + "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4", + "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa", + "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c", + "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019", + "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9", + "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c", + "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2" ], "markers": "python_version >= '3.8'", - "version": "==4.25.2" + "version": "==4.25.3" }, "psycopg": { "extras": [ @@ -1248,96 +1264,96 @@ }, "pydantic": { "hashes": [ - "sha256:1440966574e1b5b99cf75a13bec7b20e3512e8a61b894ae252f56275e2c465ae", - "sha256:ae887bd94eb404b09d86e4d12f93893bdca79d766e738528c6fa1c849f3c6bcf" + "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f", + "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9" ], "markers": "python_version >= '3.8'", - "version": "==2.6.0" + "version": "==2.6.1" }, "pydantic-core": { "hashes": [ - "sha256:06f0d5a1d9e1b7932477c172cc720b3b23c18762ed7a8efa8398298a59d177c7", - "sha256:07982b82d121ed3fc1c51faf6e8f57ff09b1325d2efccaa257dd8c0dd937acca", - "sha256:0f478ec204772a5c8218e30eb813ca43e34005dff2eafa03931b3d8caef87d51", - "sha256:102569d371fadc40d8f8598a59379c37ec60164315884467052830b28cc4e9da", - "sha256:10dca874e35bb60ce4f9f6665bfbfad050dd7573596608aeb9e098621ac331dc", - "sha256:150ba5c86f502c040b822777e2e519b5625b47813bd05f9273a8ed169c97d9ae", - "sha256:1661c668c1bb67b7cec96914329d9ab66755911d093bb9063c4c8914188af6d4", - "sha256:1a2fe7b00a49b51047334d84aafd7e39f80b7675cad0083678c58983662da89b", - "sha256:1ae8048cba95f382dba56766525abca438328455e35c283bb202964f41a780b0", - "sha256:20f724a023042588d0f4396bbbcf4cffd0ddd0ad3ed4f0d8e6d4ac4264bae81e", - "sha256:2133b0e412a47868a358713287ff9f9a328879da547dc88be67481cdac529118", - "sha256:21e3298486c4ea4e4d5cc6fb69e06fb02a4e22089304308817035ac006a7f506", - "sha256:21ebaa4bf6386a3b22eec518da7d679c8363fb7fb70cf6972161e5542f470798", - "sha256:23632132f1fd608034f1a56cc3e484be00854db845b3a4a508834be5a6435a6f", - "sha256:2d5bea8012df5bb6dda1e67d0563ac50b7f64a5d5858348b5c8cb5043811c19d", - "sha256:300616102fb71241ff477a2cbbc847321dbec49428434a2f17f37528721c4948", - "sha256:30a8259569fbeec49cfac7fda3ec8123486ef1b729225222f0d41d5f840b476f", - "sha256:399166f24c33a0c5759ecc4801f040dbc87d412c1a6d6292b2349b4c505effc9", - "sha256:3fac641bbfa43d5a1bed99d28aa1fded1984d31c670a95aac1bf1d36ac6ce137", - "sha256:42c29d54ed4501a30cd71015bf982fa95e4a60117b44e1a200290ce687d3e640", - "sha256:462d599299c5971f03c676e2b63aa80fec5ebc572d89ce766cd11ca8bcb56f3f", - "sha256:4eebbd049008eb800f519578e944b8dc8e0f7d59a5abb5924cc2d4ed3a1834ff", - "sha256:502c062a18d84452858f8aea1e520e12a4d5228fc3621ea5061409d666ea1706", - "sha256:5317c04349472e683803da262c781c42c5628a9be73f4750ac7d13040efb5d2d", - "sha256:5511f962dd1b9b553e9534c3b9c6a4b0c9ded3d8c2be96e61d56f933feef9e1f", - "sha256:561be4e3e952c2f9056fba5267b99be4ec2afadc27261505d4992c50b33c513c", - "sha256:601d3e42452cd4f2891c13fa8c70366d71851c1593ed42f57bf37f40f7dca3c8", - "sha256:644904600c15816a1f9a1bafa6aab0d21db2788abcdf4e2a77951280473f33e1", - "sha256:653a5dfd00f601a0ed6654a8b877b18d65ac32c9d9997456e0ab240807be6cf7", - "sha256:694a5e9f1f2c124a17ff2d0be613fd53ba0c26de588eb4bdab8bca855e550d95", - "sha256:71b4a48a7427f14679f0015b13c712863d28bb1ab700bd11776a5368135c7d60", - "sha256:72bf9308a82b75039b8c8edd2be2924c352eda5da14a920551a8b65d5ee89253", - "sha256:735dceec50fa907a3c314b84ed609dec54b76a814aa14eb90da31d1d36873a5e", - "sha256:73802194f10c394c2bedce7a135ba1d8ba6cff23adf4217612bfc5cf060de34c", - "sha256:780daad9e35b18d10d7219d24bfb30148ca2afc309928e1d4d53de86822593dc", - "sha256:8655f55fe68c4685673265a650ef71beb2d31871c049c8b80262026f23605ee3", - "sha256:877045a7969ace04d59516d5d6a7dee13106822f99a5d8df5e6822941f7bedc8", - "sha256:87bce04f09f0552b66fca0c4e10da78d17cb0e71c205864bab4e9595122cb9d9", - "sha256:8d4dfc66abea3ec6d9f83e837a8f8a7d9d3a76d25c9911735c76d6745950e62c", - "sha256:8ec364e280db4235389b5e1e6ee924723c693cbc98e9d28dc1767041ff9bc388", - "sha256:8fa00fa24ffd8c31fac081bf7be7eb495be6d248db127f8776575a746fa55c95", - "sha256:920c4897e55e2881db6a6da151198e5001552c3777cd42b8a4c2f72eedc2ee91", - "sha256:920f4633bee43d7a2818e1a1a788906df5a17b7ab6fe411220ed92b42940f818", - "sha256:9795f56aa6b2296f05ac79d8a424e94056730c0b860a62b0fdcfe6340b658cc8", - "sha256:98f0edee7ee9cc7f9221af2e1b95bd02810e1c7a6d115cfd82698803d385b28f", - "sha256:99c095457eea8550c9fa9a7a992e842aeae1429dab6b6b378710f62bfb70b394", - "sha256:99d3a433ef5dc3021c9534a58a3686c88363c591974c16c54a01af7efd741f13", - "sha256:99f9a50b56713a598d33bc23a9912224fc5d7f9f292444e6664236ae471ddf17", - "sha256:9c46e556ee266ed3fb7b7a882b53df3c76b45e872fdab8d9cf49ae5e91147fd7", - "sha256:9f5d37ff01edcbace53a402e80793640c25798fb7208f105d87a25e6fcc9ea06", - "sha256:a0b4cfe408cd84c53bab7d83e4209458de676a6ec5e9c623ae914ce1cb79b96f", - "sha256:a497be217818c318d93f07e14502ef93d44e6a20c72b04c530611e45e54c2196", - "sha256:ac89ccc39cd1d556cc72d6752f252dc869dde41c7c936e86beac5eb555041b66", - "sha256:adf28099d061a25fbcc6531febb7a091e027605385de9fe14dd6a97319d614cf", - "sha256:afa01d25769af33a8dac0d905d5c7bb2d73c7c3d5161b2dd6f8b5b5eea6a3c4c", - "sha256:b1fc07896fc1851558f532dffc8987e526b682ec73140886c831d773cef44b76", - "sha256:b49c604ace7a7aa8af31196abbf8f2193be605db6739ed905ecaf62af31ccae0", - "sha256:b9f3e0bffad6e238f7acc20c393c1ed8fab4371e3b3bc311020dfa6020d99212", - "sha256:ba07646f35e4e49376c9831130039d1b478fbfa1215ae62ad62d2ee63cf9c18f", - "sha256:bd88f40f2294440d3f3c6308e50d96a0d3d0973d6f1a5732875d10f569acef49", - "sha256:c0be58529d43d38ae849a91932391eb93275a06b93b79a8ab828b012e916a206", - "sha256:c45f62e4107ebd05166717ac58f6feb44471ed450d07fecd90e5f69d9bf03c48", - "sha256:c56da23034fe66221f2208c813d8aa509eea34d97328ce2add56e219c3a9f41c", - "sha256:c94b5537bf6ce66e4d7830c6993152940a188600f6ae044435287753044a8fe2", - "sha256:cebf8d56fee3b08ad40d332a807ecccd4153d3f1ba8231e111d9759f02edfd05", - "sha256:d0bf6f93a55d3fa7a079d811b29100b019784e2ee6bc06b0bb839538272a5610", - "sha256:d195add190abccefc70ad0f9a0141ad7da53e16183048380e688b466702195dd", - "sha256:d25ef0c33f22649b7a088035fd65ac1ce6464fa2876578df1adad9472f918a76", - "sha256:d6cbdf12ef967a6aa401cf5cdf47850559e59eedad10e781471c960583f25aa1", - "sha256:d8c032ccee90b37b44e05948b449a2d6baed7e614df3d3f47fe432c952c21b60", - "sha256:daff04257b49ab7f4b3f73f98283d3dbb1a65bf3500d55c7beac3c66c310fe34", - "sha256:e83ebbf020be727d6e0991c1b192a5c2e7113eb66e3def0cd0c62f9f266247e4", - "sha256:ed3025a8a7e5a59817b7494686d449ebfbe301f3e757b852c8d0d1961d6be864", - "sha256:f1936ef138bed2165dd8573aa65e3095ef7c2b6247faccd0e15186aabdda7f66", - "sha256:f5247a3d74355f8b1d780d0f3b32a23dd9f6d3ff43ef2037c6dcd249f35ecf4c", - "sha256:fa496cd45cda0165d597e9d6f01e36c33c9508f75cf03c0a650018c5048f578e", - "sha256:fb4363e6c9fc87365c2bc777a1f585a22f2f56642501885ffc7942138499bf54", - "sha256:fb4370b15111905bf8b5ba2129b926af9470f014cb0493a67d23e9d7a48348e8", - "sha256:fbec2af0ebafa57eb82c18c304b37c86a8abddf7022955d1742b3d5471a6339e" + "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379", + "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06", + "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05", + "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7", + "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753", + "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a", + "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731", + "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc", + "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380", + "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3", + "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c", + "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11", + "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990", + "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a", + "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2", + "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8", + "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97", + "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a", + "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8", + "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef", + "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77", + "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33", + "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82", + "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5", + "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b", + "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55", + "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e", + "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b", + "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7", + "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec", + "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc", + "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469", + "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b", + "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20", + "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e", + "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d", + "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f", + "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b", + "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039", + "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e", + "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2", + "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f", + "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b", + "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc", + "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8", + "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522", + "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e", + "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784", + "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a", + "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890", + "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485", + "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545", + "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f", + "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943", + "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878", + "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f", + "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17", + "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7", + "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286", + "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c", + "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb", + "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646", + "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978", + "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8", + "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15", + "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272", + "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2", + "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55", + "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf", + "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545", + "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4", + "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a", + "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804", + "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4", + "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0", + "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a", + "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113", + "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d", + "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25" ], "markers": "python_version >= '3.8'", - "version": "==2.16.1" + "version": "==2.16.2" }, "pypdf2": { "hashes": [ @@ -1358,10 +1374,10 @@ }, "pytz": { "hashes": [ - "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40", - "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a" + "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", + "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" ], - "version": "==2023.4" + "version": "==2024.1" }, "pyyaml": { "hashes": [ @@ -1547,108 +1563,108 @@ }, "rpds-py": { "hashes": [ - "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147", - "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7", - "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2", - "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68", - "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1", - "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382", - "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d", - "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921", - "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38", - "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4", - "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a", - "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d", - "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518", - "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e", - "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d", - "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf", - "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5", - "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba", - "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6", - "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59", - "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253", - "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6", - "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f", - "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3", - "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea", - "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1", - "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76", - "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93", - "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad", - "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad", - "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc", - "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049", - "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d", - "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90", - "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d", - "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd", - "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25", - "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2", - "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f", - "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6", - "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4", - "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c", - "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8", - "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d", - "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b", - "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19", - "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453", - "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9", - "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde", - "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296", - "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58", - "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec", - "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99", - "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a", - "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb", - "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383", - "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d", - "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896", - "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc", - "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6", - "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b", - "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7", - "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22", - "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf", - "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394", - "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0", - "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57", - "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74", - "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83", - "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29", - "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9", - "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f", - "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745", - "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb", - "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811", - "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55", - "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342", - "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23", - "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82", - "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041", - "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb", - "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066", - "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55", - "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6", - "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a", - "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140", - "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b", - "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9", - "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256", - "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c", - "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772", - "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4", - "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae", - "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920", - "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a", - "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b", - "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361", - "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8", - "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a" + "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f", + "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c", + "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76", + "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e", + "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157", + "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f", + "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5", + "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05", + "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24", + "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1", + "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8", + "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b", + "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb", + "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07", + "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1", + "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6", + "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e", + "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e", + "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1", + "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab", + "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4", + "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17", + "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594", + "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d", + "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d", + "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3", + "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c", + "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66", + "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f", + "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80", + "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33", + "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f", + "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c", + "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022", + "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e", + "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f", + "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da", + "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1", + "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688", + "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795", + "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c", + "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98", + "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1", + "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20", + "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307", + "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4", + "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18", + "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294", + "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66", + "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467", + "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948", + "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e", + "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1", + "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0", + "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7", + "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd", + "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641", + "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d", + "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9", + "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1", + "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da", + "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3", + "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa", + "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7", + "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40", + "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496", + "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124", + "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836", + "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434", + "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984", + "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f", + "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6", + "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e", + "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461", + "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c", + "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432", + "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73", + "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58", + "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88", + "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337", + "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7", + "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863", + "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475", + "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3", + "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51", + "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf", + "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024", + "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40", + "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9", + "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec", + "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb", + "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7", + "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861", + "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880", + "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f", + "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd", + "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca", + "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58", + "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e" ], "markers": "python_version >= '3.8'", - "version": "==0.17.1" + "version": "==0.18.0" }, "rsa": { "hashes": [ @@ -1700,58 +1716,58 @@ }, "sqlalchemy": { "hashes": [ - "sha256:0d3cab3076af2e4aa5693f89622bef7fa770c6fec967143e4da7508b3dceb9b9", - "sha256:0dacf67aee53b16f365c589ce72e766efaabd2b145f9de7c917777b575e3659d", - "sha256:10331f129982a19df4284ceac6fe87353ca3ca6b4ca77ff7d697209ae0a5915e", - "sha256:14a6f68e8fc96e5e8f5647ef6cda6250c780612a573d99e4d881581432ef1669", - "sha256:1b1180cda6df7af84fe72e4530f192231b1f29a7496951db4ff38dac1687202d", - "sha256:29049e2c299b5ace92cbed0c1610a7a236f3baf4c6b66eb9547c01179f638ec5", - "sha256:342d365988ba88ada8af320d43df4e0b13a694dbd75951f537b2d5e4cb5cd002", - "sha256:420362338681eec03f53467804541a854617faed7272fe71a1bfdb07336a381e", - "sha256:4344d059265cc8b1b1be351bfb88749294b87a8b2bbe21dfbe066c4199541ebd", - "sha256:4f7a7d7fcc675d3d85fbf3b3828ecd5990b8d61bd6de3f1b260080b3beccf215", - "sha256:555651adbb503ac7f4cb35834c5e4ae0819aab2cd24857a123370764dc7d7e24", - "sha256:59a21853f5daeb50412d459cfb13cb82c089ad4c04ec208cd14dddd99fc23b39", - "sha256:5fdd402169aa00df3142149940b3bf9ce7dde075928c1886d9a1df63d4b8de62", - "sha256:605b6b059f4b57b277f75ace81cc5bc6335efcbcc4ccb9066695e515dbdb3900", - "sha256:665f0a3954635b5b777a55111ababf44b4fc12b1f3ba0a435b602b6387ffd7cf", - "sha256:6f9e2e59cbcc6ba1488404aad43de005d05ca56e069477b33ff74e91b6319735", - "sha256:736ea78cd06de6c21ecba7416499e7236a22374561493b456a1f7ffbe3f6cdb4", - "sha256:74b080c897563f81062b74e44f5a72fa44c2b373741a9ade701d5f789a10ba23", - "sha256:75432b5b14dc2fff43c50435e248b45c7cdadef73388e5610852b95280ffd0e9", - "sha256:75f99202324383d613ddd1f7455ac908dca9c2dd729ec8584c9541dd41822a2c", - "sha256:790f533fa5c8901a62b6fef5811d48980adeb2f51f1290ade8b5e7ba990ba3de", - "sha256:798f717ae7c806d67145f6ae94dc7c342d3222d3b9a311a784f371a4333212c7", - "sha256:7c88f0c7dcc5f99bdb34b4fd9b69b93c89f893f454f40219fe923a3a2fd11625", - "sha256:7d505815ac340568fd03f719446a589162d55c52f08abd77ba8964fbb7eb5b5f", - "sha256:84daa0a2055df9ca0f148a64fdde12ac635e30edbca80e87df9b3aaf419e144a", - "sha256:87d91043ea0dc65ee583026cb18e1b458d8ec5fc0a93637126b5fc0bc3ea68c4", - "sha256:87f6e732bccd7dcf1741c00f1ecf33797383128bd1c90144ac8adc02cbb98643", - "sha256:884272dcd3ad97f47702965a0e902b540541890f468d24bd1d98bcfe41c3f018", - "sha256:8b8cb63d3ea63b29074dcd29da4dc6a97ad1349151f2d2949495418fd6e48db9", - "sha256:91f7d9d1c4dd1f4f6e092874c128c11165eafcf7c963128f79e28f8445de82d5", - "sha256:a2c69a7664fb2d54b8682dd774c3b54f67f84fa123cf84dda2a5f40dcaa04e08", - "sha256:a3be4987e3ee9d9a380b66393b77a4cd6d742480c951a1c56a23c335caca4ce3", - "sha256:a86b4240e67d4753dc3092d9511886795b3c2852abe599cffe108952f7af7ac3", - "sha256:aa9373708763ef46782d10e950b49d0235bfe58facebd76917d3f5cbf5971aed", - "sha256:b64b183d610b424a160b0d4d880995e935208fc043d0302dd29fee32d1ee3f95", - "sha256:b801154027107461ee992ff4b5c09aa7cc6ec91ddfe50d02bca344918c3265c6", - "sha256:bb209a73b8307f8fe4fe46f6ad5979649be01607f11af1eb94aa9e8a3aaf77f0", - "sha256:bc8b7dabe8e67c4832891a5d322cec6d44ef02f432b4588390017f5cec186a84", - "sha256:c51db269513917394faec5e5c00d6f83829742ba62e2ac4fa5c98d58be91662f", - "sha256:c55731c116806836a5d678a70c84cb13f2cedba920212ba7dcad53260997666d", - "sha256:cf18ff7fc9941b8fc23437cc3e68ed4ebeff3599eec6ef5eebf305f3d2e9a7c2", - "sha256:d24f571990c05f6b36a396218f251f3e0dda916e0c687ef6fdca5072743208f5", - "sha256:db854730a25db7c956423bb9fb4bdd1216c839a689bf9cc15fada0a7fb2f4570", - "sha256:dc55990143cbd853a5d038c05e79284baedf3e299661389654551bd02a6a68d7", - "sha256:e607cdd99cbf9bb80391f54446b86e16eea6ad309361942bf88318bcd452363c", - "sha256:ecf6d4cda1f9f6cb0b45803a01ea7f034e2f1aed9475e883410812d9f9e3cfcf", - "sha256:f2a159111a0f58fb034c93eeba211b4141137ec4b0a6e75789ab7a3ef3c7e7e3", - "sha256:f37c0caf14b9e9b9e8f6dbc81bc56db06acb4363eba5a633167781a48ef036ed", - "sha256:f5693145220517b5f42393e07a6898acdfe820e136c98663b971906120549da5" + "sha256:03f448ffb731b48323bda68bcc93152f751436ad6037f18a42b7e16af9e91c07", + "sha256:0de1263aac858f288a80b2071990f02082c51d88335a1db0d589237a3435fe71", + "sha256:0fb3bffc0ced37e5aa4ac2416f56d6d858f46d4da70c09bb731a246e70bff4d5", + "sha256:120af1e49d614d2525ac247f6123841589b029c318b9afbfc9e2b70e22e1827d", + "sha256:1306102f6d9e625cebaca3d4c9c8f10588735ef877f0360b5cdb4fdfd3fd7131", + "sha256:15e19a84b84528f52a68143439d0c7a3a69befcd4f50b8ef9b7b69d2628ae7c4", + "sha256:1ab4e0448018d01b142c916cc7119ca573803a4745cfe341b8f95657812700ac", + "sha256:1fc19ae2e07a067663dd24fca55f8ed06a288384f0e6e3910420bf4b1270cc51", + "sha256:2f5c9dfb0b9ab5e3a8a00249534bdd838d943ec4cfb9abe176a6c33408430230", + "sha256:30d81cc1192dc693d49d5671cd40cdec596b885b0ce3b72f323888ab1c3863d5", + "sha256:33e8bde8fff203de50399b9039c4e14e42d4d227759155c21f8da4a47fc8053c", + "sha256:4535c49d961fe9a77392e3a630a626af5baa967172d42732b7a43496c8b28876", + "sha256:48217be1de7d29a5600b5c513f3f7664b21d32e596d69582be0a94e36b8309cb", + "sha256:5ada0438f5b74c3952d916c199367c29ee4d6858edff18eab783b3978d0db16d", + "sha256:5b78aa9f4f68212248aaf8943d84c0ff0f74efc65a661c2fc68b82d498311fd5", + "sha256:5cd20f58c29bbf2680039ff9f569fa6d21453fbd2fa84dbdb4092f006424c2e6", + "sha256:611068511b5531304137bcd7fe8117c985d1b828eb86043bd944cebb7fae3910", + "sha256:680b9a36029b30cf063698755d277885d4a0eab70a2c7c6e71aab601323cba45", + "sha256:6c5bad7c60a392850d2f0fee8f355953abaec878c483dd7c3836e0089f046bf6", + "sha256:6c7a596d0be71b7baa037f4ac10d5e057d276f65a9a611c46970f012752ebf2d", + "sha256:7f470327d06400a0aa7926b375b8e8c3c31d335e0884f509fe272b3c700a7254", + "sha256:86a6ed69a71fe6b88bf9331594fa390a2adda4a49b5c06f98e47bf0d392534f8", + "sha256:8dfc936870507da96aebb43e664ae3a71a7b96278382bcfe84d277b88e379b18", + "sha256:954d9735ee9c3fa74874c830d089a815b7b48df6f6b6e357a74130e478dbd951", + "sha256:9e56afce6431450442f3ab5973156289bd5ec33dd618941283847c9fd5ff06bf", + "sha256:a3012ab65ea42de1be81fff5fb28d6db893ef978950afc8130ba707179b4284a", + "sha256:ad862295ad3f644e3c2c0d8b10a988e1600d3123ecb48702d2c0f26771f1c396", + "sha256:b1d9d1bfd96eef3c3faedb73f486c89e44e64e40e5bfec304ee163de01cf996f", + "sha256:b86abba762ecfeea359112b2bb4490802b340850bbee1948f785141a5e020de8", + "sha256:b90053be91973a6fb6020a6e44382c97739736a5a9d74e08cc29b196639eb979", + "sha256:c4fbe6a766301f2e8a4519f4500fe74ef0a8509a59e07a4085458f26228cd7cc", + "sha256:ca891af9f3289d24a490a5fde664ea04fe2f4984cd97e26de7442a4251bd4b7c", + "sha256:cb0845e934647232b6ff5150df37ceffd0b67b754b9fdbb095233deebcddbd4a", + "sha256:ce850db091bf7d2a1f2fdb615220b968aeff3849007b1204bf6e3e50a57b3d32", + "sha256:d04e579e911562f1055d26dab1868d3e0bb905db3bccf664ee8ad109f035618a", + "sha256:d07ee7793f2aeb9b80ec8ceb96bc8cc08a2aec8a1b152da1955d64e4825fcbac", + "sha256:d177b7e82f6dd5e1aebd24d9c3297c70ce09cd1d5d37b43e53f39514379c029c", + "sha256:d7b5a3e2120982b8b6bd1d5d99e3025339f7fb8b8267551c679afb39e9c7c7f1", + "sha256:d873c21b356bfaf1589b89090a4011e6532582b3a8ea568a00e0c3aab09399dd", + "sha256:d997c5938a08b5e172c30583ba6b8aad657ed9901fc24caf3a7152eeccb2f1b4", + "sha256:dbcd77c4d94b23e0753c5ed8deba8c69f331d4fd83f68bfc9db58bc8983f49cd", + "sha256:e36aa62b765cf9f43a003233a8c2d7ffdeb55bc62eaa0a0380475b228663a38f", + "sha256:e97cf143d74a7a5a0f143aa34039b4fecf11343eed66538610debc438685db4a", + "sha256:eb15ef40b833f5b2f19eeae65d65e191f039e71790dd565c2af2a3783f72262f", + "sha256:ec1f5a328464daf7a1e4e385e4f5652dd9b1d12405075ccba1df842f7774b4fc", + "sha256:f9374e270e2553653d710ece397df67db9d19c60d2647bcd35bfc616f1622dcd", + "sha256:fa67d821c1fd268a5a87922ef4940442513b4e6c377553506b9db3b83beebbd8", + "sha256:fd8aafda7cdff03b905d4426b714601c0978725a19efc39f5f207b86d188ba01", + "sha256:ff2f1b7c963961d41403b650842dc2039175b906ab2093635d8319bef0b7d620" ], "markers": "python_version >= '3.7'", - "version": "==2.0.25" + "version": "==2.0.27" }, "sqlparse": { "hashes": [ @@ -1814,11 +1830,11 @@ }, "tqdm": { "hashes": [ - "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", - "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" + "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9", + "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531" ], "markers": "python_version >= '3.7'", - "version": "==4.66.1" + "version": "==4.66.2" }, "typing-extensions": { "hashes": [ @@ -1837,11 +1853,11 @@ }, "tzdata": { "hashes": [ - "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3", - "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9" + "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd", + "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252" ], "markers": "python_version >= '2'", - "version": "==2023.4" + "version": "==2024.1" }, "uritemplate": { "hashes": [ @@ -1856,7 +1872,7 @@ "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" ], - "markers": "python_version >= '3.7'", + "markers": "python_version >= '3.6'", "version": "==2.0.7" }, "vine": { @@ -2161,11 +2177,11 @@ }, "faker": { "hashes": [ - "sha256:2b57f0256da6b45b7851dca87836ef5e2ae2fbb64d63d8697f1e47830d7b505d", - "sha256:fa6d969728ef3da6229da91267a1bd4e6b902044c4822012d4fc46c71bb92b26" + "sha256:0520a6b97e07c658b2798d7140971c1d5bc4bcd5013e7937fe075fd054aa320c", + "sha256:f07b64d27f67b62c7f0536a72f47813015b3b51cd4664918454011094321e464" ], "markers": "python_version >= '3.8'", - "version": "==22.6.0" + "version": "==23.2.1" }, "filelock": { "hashes": [ @@ -2195,11 +2211,11 @@ }, "identify": { "hashes": [ - "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d", - "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34" + "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791", + "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e" ], "markers": "python_version >= '3.8'", - "version": "==2.5.33" + "version": "==2.5.35" }, "ipdb": { "hashes": [ @@ -2509,11 +2525,11 @@ }, "setuptools": { "hashes": [ - "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05", - "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78" + "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401", + "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6" ], "markers": "python_version >= '3.8'", - "version": "==69.0.3" + "version": "==69.1.0" }, "six": { "hashes": [ @@ -2562,6 +2578,42 @@ "markers": "python_version >= '3.7'", "version": "==20.25.0" }, + "watchdog": { + "hashes": [ + "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257", + "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca", + "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b", + "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85", + "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b", + "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19", + "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50", + "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92", + "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269", + "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f", + "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c", + "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b", + "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87", + "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b", + "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b", + "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8", + "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c", + "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3", + "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7", + "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605", + "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935", + "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b", + "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927", + "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101", + "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07", + "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec", + "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4", + "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245", + "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==4.0.0" + }, "wcwidth": { "hashes": [ "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", diff --git a/compose/local/django/celery/beat/start b/compose/local/django/celery/beat/start index 0d318fb8..36daca83 100644 --- a/compose/local/django/celery/beat/start +++ b/compose/local/django/celery/beat/start @@ -5,4 +5,6 @@ set -o nounset rm -f './celerybeat.pid' -celery -A core.celery_app beat -l INFO +watchmedo \ + auto-restart --directory=./ --pattern=*.py --recursive -- \ + celery --workdir="/app" -A core.celery_app beat --loglevel=INFO diff --git a/compose/local/django/celery/worker/start b/compose/local/django/celery/worker/start index 5cc526ac..0f039d2e 100644 --- a/compose/local/django/celery/worker/start +++ b/compose/local/django/celery/worker/start @@ -4,4 +4,6 @@ set -o errexit set -o nounset -watchgod celery.__main__.main --args -A core.celery_app worker -l INFO +watchmedo \ + auto-restart --directory=./ --pattern=*.py --recursive -- \ + celery --workdir="/app" -A core.celery_app worker --loglevel=INFO diff --git a/docker-compose.local.yaml b/docker-compose.local.yaml index ee487a3f..eaac25a6 100644 --- a/docker-compose.local.yaml +++ b/docker-compose.local.yaml @@ -9,8 +9,7 @@ services: build: context: . dockerfile: ./compose/local/django/Dockerfile - image: django - container_name: ayushma_local_django + image: ayushma_local depends_on: - postgres - redis @@ -27,8 +26,7 @@ services: build: context: . dockerfile: ./compose/production/postgres/Dockerfile - image: postgres - container_name: ayushma_local_postgres + image: ayushma_postgres volumes: - ayushma_local_postgres_data:/var/lib/postgresql/data:Z - ayushma_local_postgres_data_backups:/backups:z @@ -37,24 +35,13 @@ services: redis: image: redis:6 - container_name: ayushma_local_redis celeryworker: <<: *django - image: ayushma_local_celeryworker - container_name: ayushma_local_celeryworker - depends_on: - - redis - - postgres ports: [] command: /start-celeryworker celerybeat: <<: *django - image: ayushma_local_celerybeat - container_name: ayushma_local_celerybeat - depends_on: - - redis - - postgres ports: [] command: /start-celerybeat diff --git a/docker-compose.production.yaml b/docker-compose.production.yaml index 8d527675..ef55f10c 100644 --- a/docker-compose.production.yaml +++ b/docker-compose.production.yaml @@ -9,7 +9,7 @@ services: build: context: . dockerfile: ./compose/production/django/Dockerfile - image: ayushma_production_django + image: ayushma_production depends_on: - postgres - redis @@ -24,7 +24,7 @@ services: build: context: . dockerfile: ./compose/production/postgres/Dockerfile - image: ayushma_production_postgres + image: ayushma_postgres volumes: - production_postgres_data:/var/lib/postgresql/data:Z - production_postgres_data_backups:/backups:z @@ -36,12 +36,10 @@ services: celeryworker: <<: *django - image: ayushma_production_celeryworker ports: [] command: /start-celeryworker celerybeat: <<: *django - image: ayushma_production_celerybeat ports: [] command: /start-celerybeat From bde9e60b74baf28a90038081705d0bd55f52abfd Mon Sep 17 00:00:00 2001 From: Ashesh <3626859+Ashesh3@users.noreply.github.com> Date: Thu, 28 Mar 2024 14:56:36 +0530 Subject: [PATCH 02/12] Add routes for care scribe (#493) --- ayushma/models/enums.py | 7 ++++ ayushma/utils/converse.py | 2 +- ayushma/utils/openaiapi.py | 4 +- ayushma/views/orphan.py | 75 ++++++++++++++++++++++++++++++++------ 4 files changed, 74 insertions(+), 14 deletions(-) diff --git a/ayushma/models/enums.py b/ayushma/models/enums.py index a7a7c9cb..0a856e94 100644 --- a/ayushma/models/enums.py +++ b/ayushma/models/enums.py @@ -18,6 +18,13 @@ class STTEngine(IntegerChoices): GOOGLE = 2 SELF_HOSTED = 3 + @classmethod + def get_id_from_name(cls, name): + for member in cls: + if member.name.lower() == name.lower(): + return member.value + return None + class TTSEngine(IntegerChoices): OPENAI = (1, "openai") diff --git a/ayushma/utils/converse.py b/ayushma/utils/converse.py index 19ea4aca..7063b18b 100644 --- a/ayushma/utils/converse.py +++ b/ayushma/utils/converse.py @@ -47,7 +47,7 @@ def converse_api( if not open_ai_key: open_ai_key = ( request.headers.get("OpenAI-Key") - or (chat.project.open_ai_key) + or (chat.project and chat.project.openai_key) or (user.allow_key and settings.OPENAI_API_KEY) ) noonce = request.data.get("noonce") diff --git a/ayushma/utils/openaiapi.py b/ayushma/utils/openaiapi.py index 2326d5ff..d0b688bc 100644 --- a/ayushma/utils/openaiapi.py +++ b/ayushma/utils/openaiapi.py @@ -311,7 +311,7 @@ def converse( prompt = chat.prompt or (chat.project and chat.project.prompt) - if documents or chat.project.model == ModelType.GPT_4_VISUAL: + if documents or (chat.project and chat.project.model == ModelType.GPT_4_VISUAL): prompt = "Image Capabilities: Enabled\n" + prompt # excluding the latest query since it is not a history @@ -327,7 +327,7 @@ def converse( elif message.messageType == ChatMessageType.AYUSHMA: chat_history.append(AIMessage(content=f"Ayushma: {message.message}")) - tts_engine = chat.project.tts_engine + tts_engine = chat.project and chat.project.tts_engine if not stream: lang_chain_helper = LangChainHelper( diff --git a/ayushma/views/orphan.py b/ayushma/views/orphan.py index ff3d0751..046ba1fd 100644 --- a/ayushma/views/orphan.py +++ b/ayushma/views/orphan.py @@ -1,27 +1,29 @@ -import time -from types import SimpleNamespace - import openai from django.conf import settings -from django.http import StreamingHttpResponse -from drf_spectacular.utils import extend_schema, extend_schema_view, inline_serializer +from drf_spectacular.utils import extend_schema from rest_framework import permissions, status from rest_framework.decorators import action from rest_framework.exceptions import ValidationError from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin from rest_framework.parsers import MultiPartParser from rest_framework.response import Response -from rest_framework.serializers import CharField, IntegerField -from ayushma.models import APIKey, Chat, ChatMessage, Project +from ayushma.models import APIKey, Chat +from ayushma.models.enums import STTEngine from ayushma.serializers import ChatDetailSerializer, ConverseSerializer from ayushma.utils.converse import converse_api -from ayushma.utils.language_helpers import translate_text -from ayushma.utils.openaiapi import converse +from ayushma.utils.speech_to_text import speech_to_text from utils.views.base import BaseModelViewSet from utils.views.mixins import PartialUpdateModelMixin -from .chat import ChatViewSet +PREDEFINED_CONFIGS = { + "ai_form_fill": { + "model": "gpt-4-turbo-preview", + "response_format": "json_object", + "max_tokens": 4096, + "temperature": 0, + }, +} class Struct: @@ -34,7 +36,7 @@ def has_permission(self, request, view): if request.headers.get("X-API-KEY"): api_key = request.headers.get("X-API-KEY") try: - key = APIKey.objects.get(key=api_key) + APIKey.objects.get(key=api_key) return True except APIKey.DoesNotExist: return False @@ -82,6 +84,7 @@ def create(self, request, *args, **kwargs): response = converse_api( request=self.request, chat=chat, + is_thread=False, ) return Response( { @@ -110,7 +113,57 @@ def converse(self, *args, **kwarg): response = converse_api( request=self.request, chat=chat, + is_thread=False, ) return response except Exception as e: return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) + + @action(detail=False, methods=["post"]) + def transcribe(self, request, *args, **kwargs): + language = request.data.get("language") or "en" + audio = request.data.get("audio") + engine = request.data.get("engine") + if not audio or not engine: + raise ValidationError("audio and engine are required") + try: + engine_id = STTEngine.get_id_from_name(engine) + transcript = speech_to_text(engine_id, audio, language + "-IN") + return Response({"transcript": transcript}) + except Exception as e: + return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) + + @action(detail=False, methods=["post"]) + def completion(self, request, *args, **kwargs): + task = request.data.get("task") + + if not task: + raise ValidationError("task is required") + + config = PREDEFINED_CONFIGS.get(task) + + if not config: + raise ValidationError("Invalid task") + + model = config.get("model") + response_format = config.get("response_format") + max_tokens = config.get("max_tokens") + temperature = config.get("temperature") + + messages = request.data.get("messages") + if not messages or len(messages) == 0: + raise ValidationError("audio and engine are required") + try: + client = openai.OpenAI(api_key=settings.OPENAI_API_KEY) + completion = client.chat.completions.create( + model=model, + temperature=temperature, + response_format={"type": response_format}, + messages=messages, + max_tokens=max_tokens, + ) + + ai_response = completion.choices[0].message.content + return Response({"response": ai_response}) + except Exception as e: + return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) From 9533035c6bb83bd46492614055af52c7996d213c Mon Sep 17 00:00:00 2001 From: Abhiuday Gupta <77210185+aeswibon@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:01:21 +0530 Subject: [PATCH 03/12] fix: Adds Linter CI and maintains formatting across codebase (#497) * ci(lint): added linter CI Signed-off-by: Abhiuday * fix(pre-commit): updates the linter version Signed-off-by: Abhiuday * fix(ayushma): fixed format across codebase Signed-off-by: Abhiuday * ci(lint): fixed CI Signed-off-by: Abhiuday --------- Signed-off-by: Abhiuday --- .devcontainer/Dockerfile | 3 --- .github/workflows/linter.yaml | 32 +++++++++++++++++++++++++++ .pre-commit-config.yaml | 14 ++++++------ .vscode/settings.json | 2 +- Makefile | 2 +- ayushma/admin.py | 11 +++++++-- ayushma/apps.py | 2 +- ayushma/management/commands/upsert.py | 5 +++-- ayushma/models/services.py | 1 - ayushma/models/token.py | 6 ++--- ayushma/permissions.py | 2 -- ayushma/serializers/document.py | 15 ++++++------- ayushma/serializers/testsuite.py | 9 ++++++-- ayushma/token.py | 4 +--- ayushma/utils/converse.py | 7 +++--- ayushma/views/auth.py | 15 +++++-------- ayushma/views/chat.py | 8 ++++--- ayushma/views/orphan.py | 6 +---- ayushma/views/service.py | 28 +++-------------------- ayushma/views/token.py | 2 +- core/settings/local.py | 4 +--- pyproject.toml | 24 ++++++++++++++++++++ setup.cfg | 4 ---- 23 files changed, 115 insertions(+), 91 deletions(-) create mode 100644 .github/workflows/linter.yaml create mode 100644 pyproject.toml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d86e3124..0041c58d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -10,6 +10,3 @@ ENV PYTHONUNBUFFERED 1 # [Optional] Uncomment this section to install additional OS packages. # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ # && apt-get -y install --no-install-recommends - - - diff --git a/.github/workflows/linter.yaml b/.github/workflows/linter.yaml new file mode 100644 index 00000000..aa225e94 --- /dev/null +++ b/.github/workflows/linter.yaml @@ -0,0 +1,32 @@ +name: Lint Code Base +on: + pull_request: + branches: + - master +jobs: + build: + if: github.repository == 'coronasafe/ayushma' + name: Lint Code Base + runs-on: ubuntu-latest + permissions: + contents: read + packages: read + statuses: write + steps: + - name: Checkout Code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Lint Code Base + uses: super-linter/super-linter/slim@v6 + env: + DEFAULT_BRANCH: master + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VALIDATE_ALL_CODEBASE: false + VALIDATE_PYTHON_BLACK: true + VALIDATE_PYTHON_FLAKE8: true + VALIDATE_PYTHON_ISORT: true + LINTER_RULES_PATH: / + PYTHON_FLAKE8_CONFIG_FILE: "setup.cfg" + PYTHON_BLACK_CONFIG_FILE: "pyproject.toml" + PYTHON_ISORT_CONFIG_FILE: "pyproject.toml" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2b9044e1..3680aa4a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,26 +1,26 @@ exclude: "docs|node_modules|migrations|.git|.venv" default_stages: [commit] fail_fast: true - repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 + rev: v4.5.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort - + additional_dependencies: ["isort[pyproject]"] - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 24.3.0 hooks: - id: black - + args: ["--config=pyproject.toml"] - repo: https://github.com/PyCQA/flake8 - rev: 4.0.1 + rev: 7.0.0 hooks: - id: flake8 args: ["--config=setup.cfg"] + additional_dependencies: [flake8-isort] diff --git a/.vscode/settings.json b/.vscode/settings.json index 02714a6b..2e6efc0c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,7 +10,7 @@ "[python]": { "editor.defaultFormatter": "ms-python.black-formatter", "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" } }, "editor.formatOnSave": true, diff --git a/Makefile b/Makefile index 209e88c2..a9548416 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ logs: makemigrations: up docker exec django bash -c "python manage.py makemigrations" - + checkmigration: docker compose -f $(docker_config_file) exec django bash -c "python manage.py makemigrations --check --dry-run" diff --git a/ayushma/admin.py b/ayushma/admin.py index ceb68ae7..b86cd670 100644 --- a/ayushma/admin.py +++ b/ayushma/admin.py @@ -1,7 +1,6 @@ from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from djangoql.admin import DjangoQLSearchMixin -from simple_history.admin import SimpleHistoryAdmin from ayushma.models.services import Service, TempToken from ayushma.models.testsuite import Feedback, TestQuestion, TestRun, TestSuite @@ -32,7 +31,15 @@ class UserAdmin(DjangoQLSearchMixin, BaseUserAdmin): fieldsets = ( ( None, - {"fields": ("email", "username", "password", "external_id", "allow_key")}, + { + "fields": ( + "email", + "username", + "password", + "external_id", + "allow_key", + ) + }, ), ( "User info", diff --git a/ayushma/apps.py b/ayushma/apps.py index a0be6977..ae9c4b39 100644 --- a/ayushma/apps.py +++ b/ayushma/apps.py @@ -6,5 +6,5 @@ class AyushmaConfig(AppConfig): name = "ayushma" def ready(self): - #from .signals import # noqa: F401 + # from .signals import # noqa: F401 pass diff --git a/ayushma/management/commands/upsert.py b/ayushma/management/commands/upsert.py index a239f19e..69694318 100644 --- a/ayushma/management/commands/upsert.py +++ b/ayushma/management/commands/upsert.py @@ -31,7 +31,8 @@ class Command(BaseCommand): def handle(self, *args, **options): upsert_dir = "upsert" pinecone.init( - api_key=settings.PINECONE_API_KEY, environment=settings.PINECONE_ENVIRONMENT + api_key=settings.PINECONE_API_KEY, + environment=settings.PINECONE_ENVIRONMENT, ) print("Initialized Pinecone and OpenAI") @@ -49,7 +50,7 @@ def handle(self, *args, **options): batch_size = 100 # process everything in batches of 100 (creates 100 vectors per upset) - print(f"Fetching Pinecone index...") + print("Fetching Pinecone index...") if settings.PINECONE_INDEX not in pinecone.list_indexes(): pinecone.create_index( settings.PINECONE_INDEX, diff --git a/ayushma/models/services.py b/ayushma/models/services.py index 0f9db546..6b961eb9 100644 --- a/ayushma/models/services.py +++ b/ayushma/models/services.py @@ -1,5 +1,4 @@ import secrets -import time from django.db import models from django.utils import timezone diff --git a/ayushma/models/token.py b/ayushma/models/token.py index 5aab6450..b9a3452a 100644 --- a/ayushma/models/token.py +++ b/ayushma/models/token.py @@ -1,6 +1,6 @@ +from django.conf import settings from django.db import models from django.utils.translation import gettext_lazy as _ -from django.conf import settings from ayushma.token import RandomStringTokenGenerator from utils.models.base import BaseModel @@ -11,9 +11,7 @@ class ResetPasswordToken(BaseModel): settings.AUTH_USER_MODEL, related_name="password_reset_tokens", on_delete=models.CASCADE, - verbose_name=_( - "The User which is associated to this password reset token" - ), + verbose_name=_("The User which is associated to this password reset token"), ) created_at = models.DateTimeField( auto_now_add=True, verbose_name=_("When was this token generated") diff --git a/ayushma/permissions.py b/ayushma/permissions.py index a6005929..09166692 100644 --- a/ayushma/permissions.py +++ b/ayushma/permissions.py @@ -1,5 +1,3 @@ -from ipaddress import ip_address - from django.utils import timezone from rest_framework import permissions diff --git a/ayushma/serializers/document.py b/ayushma/serializers/document.py index 1d727445..bb57027d 100644 --- a/ayushma/serializers/document.py +++ b/ayushma/serializers/document.py @@ -1,12 +1,6 @@ -import os -import uuid - -from django.conf import settings -from django.core.files.storage import FileSystemStorage from rest_framework import serializers -from rest_framework.response import Response -from ayushma.models import Document, DocumentType +from ayushma.models import Document class DocumentSerializer(serializers.ModelSerializer): @@ -23,7 +17,12 @@ class Meta: "text_content", "uploading", ) - read_only_fields = ("external_id", "created_at", "modified_at", "uploading") + read_only_fields = ( + "external_id", + "created_at", + "modified_at", + "uploading", + ) write_only_fields = ("file",) def validate(self, data): diff --git a/ayushma/serializers/testsuite.py b/ayushma/serializers/testsuite.py index a9fc33f2..5e7e07d2 100644 --- a/ayushma/serializers/testsuite.py +++ b/ayushma/serializers/testsuite.py @@ -9,7 +9,7 @@ TestSuite, ) from ayushma.serializers.document import DocumentSerializer -from ayushma.serializers.project import ProjectSerializer, ProjectUpdateSerializer +from ayushma.serializers.project import ProjectUpdateSerializer from ayushma.serializers.users import UserSerializer @@ -67,7 +67,12 @@ class Meta: "modified_at", ) - read_only_fields = ("user_object", "external_id", "created_at", "modified_at") + read_only_fields = ( + "user_object", + "external_id", + "created_at", + "modified_at", + ) class TestResultSerializer(serializers.ModelSerializer): diff --git a/ayushma/token.py b/ayushma/token.py index ade3bd71..b95fbb6a 100644 --- a/ayushma/token.py +++ b/ayushma/token.py @@ -7,6 +7,4 @@ def __init__(self, length=6): self.length = length def generate(self): - return "".join( - [random.choice(string.digits) for _ in range(self.length)] - ) + return "".join([random.choice(string.digits) for _ in range(self.length)]) diff --git a/ayushma/utils/converse.py b/ayushma/utils/converse.py index 7063b18b..3fdf0f52 100644 --- a/ayushma/utils/converse.py +++ b/ayushma/utils/converse.py @@ -73,7 +73,7 @@ def converse_api( converse_type = "audio" if audio else "text" # convert stream to boolean - if type(stream) != bool: + if not isinstance(stream, bool): if stream == "false": stream = False else: @@ -82,7 +82,7 @@ def converse_api( if is_thread: stream = False # Threads do not support streaming - if type(generate_audio) != bool: + if not isinstance(generate_audio, bool): if generate_audio == "false": generate_audio = False else: @@ -195,7 +195,8 @@ def converse_api( response_message = list(response_message)[0] return Response( - ChatMessageSerializer(response_message).data, status=status.HTTP_200_OK + ChatMessageSerializer(response_message).data, + status=status.HTTP_200_OK, ) return response diff --git a/ayushma/views/auth.py b/ayushma/views/auth.py index bb7a78f6..ed64f40f 100644 --- a/ayushma/views/auth.py +++ b/ayushma/views/auth.py @@ -1,19 +1,14 @@ -from drf_spectacular.utils import ( - extend_schema, - OpenApiResponse, -) +from drf_spectacular.utils import OpenApiResponse, extend_schema from rest_framework import status -from rest_framework.viewsets import GenericViewSet -from rest_framework.decorators import action -from rest_framework.response import Response from rest_framework.authtoken.models import Token +from rest_framework.decorators import action from rest_framework.exceptions import ParseError from rest_framework.permissions import AllowAny +from rest_framework.response import Response +from rest_framework.viewsets import GenericViewSet from ayushma.serializers.auth import AuthSerializer -from ayushma.serializers.users import ( - UserCreateSerializer, -) +from ayushma.serializers.users import UserCreateSerializer class AuthViewSet(GenericViewSet): diff --git a/ayushma/views/chat.py b/ayushma/views/chat.py index c6f72163..9767e25e 100644 --- a/ayushma/views/chat.py +++ b/ayushma/views/chat.py @@ -3,7 +3,7 @@ from django.conf import settings from drf_spectacular.utils import extend_schema from rest_framework import filters, status -from rest_framework.decorators import action, api_view, permission_classes +from rest_framework.decorators import action from rest_framework.exceptions import ValidationError from rest_framework.mixins import ( CreateModelMixin, @@ -122,7 +122,8 @@ def speech_to_text(self, *args, **kwarg): stt_engine = Project.objects.get(external_id=project_id).stt_engine except Project.DoesNotExist: return Response( - {"error": "Project not found"}, status=status.HTTP_400_BAD_REQUEST + {"error": "Project not found"}, + status=status.HTTP_400_BAD_REQUEST, ) try: stats["transcript_start_time"] = time.time() @@ -139,7 +140,8 @@ def speech_to_text(self, *args, **kwarg): ) return Response( - {"transcript": translated_text, "stats": stats}, status=status.HTTP_200_OK + {"transcript": translated_text, "stats": stats}, + status=status.HTTP_200_OK, ) @extend_schema( diff --git a/ayushma/views/orphan.py b/ayushma/views/orphan.py index 046ba1fd..0d94abb6 100644 --- a/ayushma/views/orphan.py +++ b/ayushma/views/orphan.py @@ -35,11 +35,7 @@ class APIKeyAuth(permissions.BasePermission): def has_permission(self, request, view): if request.headers.get("X-API-KEY"): api_key = request.headers.get("X-API-KEY") - try: - APIKey.objects.get(key=api_key) - return True - except APIKey.DoesNotExist: - return False + return APIKey.objects.filter(key=api_key).exists() class OrphanChatViewSet( diff --git a/ayushma/views/service.py b/ayushma/views/service.py index 04a7b8a9..d9a3396a 100644 --- a/ayushma/views/service.py +++ b/ayushma/views/service.py @@ -1,28 +1,10 @@ -import time -from types import SimpleNamespace - -import openai -from django.conf import settings -from django.http import StreamingHttpResponse -from drf_spectacular.utils import extend_schema, extend_schema_view, inline_serializer -from rest_framework import permissions, status -from rest_framework.decorators import action -from rest_framework.exceptions import ValidationError +from rest_framework import permissions from rest_framework.mixins import CreateModelMixin -from rest_framework.parsers import MultiPartParser -from rest_framework.response import Response -from rest_framework.serializers import CharField, IntegerField -from ayushma.models import APIKey, Chat, ChatMessage, Project -from ayushma.serializers import ChatDetailSerializer, ConverseSerializer +from ayushma.models import APIKey from ayushma.serializers.services import TempTokenSerializer -from ayushma.utils.converse import converse_api -from ayushma.utils.language_helpers import translate_text -from ayushma.utils.openaiapi import converse from utils.views.base import BaseModelViewSet -from .chat import ChatViewSet - class Struct: def __init__(self, **entries): @@ -33,11 +15,7 @@ class APIKeyAuth(permissions.BasePermission): def has_permission(self, request, view): if request.headers.get("X-API-KEY"): api_key = request.headers.get("X-API-KEY") - try: - key = APIKey.objects.get(key=api_key) - return True - except APIKey.DoesNotExist: - return False + return APIKey.objects.filter(key=api_key).exists() class TempTokenViewSet(BaseModelViewSet, CreateModelMixin): diff --git a/ayushma/views/token.py b/ayushma/views/token.py index 7857f5fc..8af0e901 100644 --- a/ayushma/views/token.py +++ b/ayushma/views/token.py @@ -148,7 +148,7 @@ def validation(password): # find the token try: - reset_password_token = ResetPasswordToken.objects.get(key=token) + ResetPasswordToken.objects.get(key=token) except ResetPasswordToken.DoesNotExist: return Response(status=status.HTTP_400_BAD_REQUEST) diff --git a/core/settings/local.py b/core/settings/local.py index 2320a6da..ea7710e0 100644 --- a/core/settings/local.py +++ b/core/settings/local.py @@ -35,9 +35,7 @@ # WhiteNoise # ------------------------------------------------------------------------------ # http://whitenoise.evans.io/en/latest/django.html#using-whitenoise-in-development -INSTALLED_APPS = [ - "whitenoise.runserver_nostatic" -] + INSTALLED_APPS # noqa F405 +INSTALLED_APPS = ["whitenoise.runserver_nostatic"] + INSTALLED_APPS # noqa F405 # django-debug-toolbar diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..52ea391e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,24 @@ +[tool.isort] +profile = "black" +known_third_party = [ + "bs4", + "celery", + "corsheaders", + "django", + "django_filters", + "djangoql", + "drf_spectacular", + "environ", + "google", + "langchain", + "nltk", + "openai", + "pinecone", + "pypdf2", + "requests", + "rest_framework", + "rest_framework_simplejw", + "sentry_sdk", + "simple_history", + "tiktoken" +] diff --git a/setup.cfg b/setup.cfg index 9dcdd6bb..c0b76cdb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,7 +27,3 @@ exclude = __pycache__, .venv, migrations, - - -[isort] -profile = black From ee6d6819317ad95124db518b6a2a351c72d31de2 Mon Sep 17 00:00:00 2001 From: Abhiuday Gupta <77210185+aeswibon@users.noreply.github.com> Date: Thu, 4 Apr 2024 19:48:19 +0530 Subject: [PATCH 04/12] fix(error): added more specific errors (#491) Signed-off-by: Abhiuday --- ayushma/utils/converse.py | 4 +- ayushma/utils/language_helpers.py | 13 ++-- ayushma/utils/openaiapi.py | 36 +++++++---- ayushma/utils/speech_to_text.py | 101 ++++++++++++++++++------------ ayushma/utils/upsert.py | 7 ++- ayushma/views/chat.py | 2 +- 6 files changed, 99 insertions(+), 64 deletions(-) diff --git a/ayushma/utils/converse.py b/ayushma/utils/converse.py index 3fdf0f52..268f9d6e 100644 --- a/ayushma/utils/converse.py +++ b/ayushma/utils/converse.py @@ -118,9 +118,9 @@ def converse_api( # store time to complete request stats["start_time"] = time.time() if converse_type == "audio" and not audio: - return Exception("Please provide audio to generate transcript") + return Exception("[Converse] Please provide audio to generate transcript") if converse_type == "text" and not text: - return Exception("Please provide text to generate transcript") + return Exception("[Converse] Please provide text to generate transcript") if converse_type == "audio": stats["transcript_start_time"] = time.time() diff --git a/ayushma/utils/language_helpers.py b/ayushma/utils/language_helpers.py index 460e2093..c42a8209 100644 --- a/ayushma/utils/language_helpers.py +++ b/ayushma/utils/language_helpers.py @@ -16,8 +16,8 @@ def translate_text(target, text): result = translate_client.translate(text, target_language=target) return result["translatedText"] except Exception as e: - print(e) - raise APIException("Translation failed") + print(f"Translation failed: {e}") + raise APIException("[Translation] Failed to translate the text") language_code_voice_map = { @@ -55,7 +55,8 @@ def text_to_speech(text, language_code, service): synthesis_input = texttospeech.SynthesisInput(text=text) voice = texttospeech.VoiceSelectionParams( - language_code=language_code, name=language_code_voice_map[language_code] + language_code=language_code, + name=language_code_voice_map[language_code], ) audio_config = texttospeech.AudioConfig( audio_encoding=texttospeech.AudioEncoding.MP3 @@ -77,7 +78,7 @@ def text_to_speech(text, language_code, service): ) return response.read() else: - raise APIException("Service not supported") + raise APIException("[Text to Speech] Service not supported.") except Exception as e: - print(e) - return None + print(f"Failed to convert text to speech: {e}") + raise APIException("[Text to Speech] Failed to convert text to speech.") diff --git a/ayushma/utils/openaiapi.py b/ayushma/utils/openaiapi.py index d0b688bc..e137aa3c 100644 --- a/ayushma/utils/openaiapi.py +++ b/ayushma/utils/openaiapi.py @@ -94,7 +94,7 @@ def get_sanitized_reference(pinecone_references: List[QueryResponse]) -> str: else: sanitized_reference[document_id] = text except Exception as e: - print(e) + print(f"Error extracting reference: {e}") pass return json.dumps(sanitized_reference) @@ -143,17 +143,17 @@ def get_reference(text, openai_key, namespace, top_k): try: embeddings.append(get_embedding(text=[text], openai_api_key=openai_key)) except Exception as e: - return Exception( - e.__str__(), - ) + print(f"Error generating embeddings: {e}") + return Exception("[Reference] Error generating embeddings") else: parts = split_text(text) for part in parts: try: embeddings.append(get_embedding(text=[part], openai_api_key=openai_key)) except Exception as e: + print(f"Error generating embeddings: {e}") raise Exception( - e.__str__(), + "[Reference] Error generating embeddings for split text" ) # find similar embeddings from pinecone index for each embedding pinecone_references: List[QueryResponse] = [] @@ -187,7 +187,7 @@ def add_reference_documents(chat_message): except Document.DoesNotExist: pass except Exception as e: - print("Error adding reference documents: ", e) + print(f"Error adding reference documents: {e}") chat_message.original_message = chat_text[ :ref_start_idx @@ -297,10 +297,13 @@ def converse( elif fetch_references and chat.project and chat.project.external_id: try: reference = get_reference( - english_text, openai_key, str(chat.project.external_id), match_number + english_text, + openai_key, + str(chat.project.external_id), + match_number, ) except Exception as e: - print(e) + print(f"Error fetching references: {e}") reference = "" else: reference = "" @@ -438,8 +441,10 @@ def converse( None, ) except Exception as e: - print(e) - error_text = str(e) + print(f"Error in streaming response: {e}") + error_text = ( + "[Streaming] Something went wrong in getting response, stream stopped" + ) translated_error_text = error_text if user_language != "en-IN": translated_error_text = translate_text(user_language, error_text) @@ -464,7 +469,13 @@ def converse( }, ) yield create_json_response( - local_translated_text, chat.external_id, "", str(e), True, True, None + local_translated_text, + chat.external_id, + "", + str(e), + True, + True, + None, ) @@ -499,7 +510,8 @@ def converse_thread( if status == "completed": break else: - raise Exception("Thread timed out") + print("[Thread] Run did not complete, timed out") + raise Exception("[Thread] Run did not complete, timed out") response = ( client.beta.threads.messages.list(thread_id=thread.thread_id) diff --git a/ayushma/utils/speech_to_text.py b/ayushma/utils/speech_to_text.py index 551ba73e..7ed443d6 100644 --- a/ayushma/utils/speech_to_text.py +++ b/ayushma/utils/speech_to_text.py @@ -14,15 +14,21 @@ def __init__(self, api_key, language_code): self.language_code = language_code def recognize(self, audio): - client = OpenAI(api_key=self.api_key) - transcription = client.audio.transcriptions.create( - model="whisper-1", - # https://github.com/openai/openai-python/tree/main#file-uploads - file=(audio.name, audio.read()), - language=self.language_code.replace("-IN", ""), - # api_version="2020-11-07", - ) - return transcription.text + try: + client = OpenAI(api_key=self.api_key) + transcription = client.audio.transcriptions.create( + model="whisper-1", + # https://github.com/openai/openai-python/tree/main#file-uploads + file=(audio.name, audio.read()), + language=self.language_code.replace("-IN", ""), + # api_version="2020-11-07", + ) + return transcription.text + except Exception as e: + print(f"Failed to recognize speech with whisper engine: {e}") + raise ValueError( + "[Speech to Text] Failed to recognize speech with Whisper engine" + ) class GoogleEngine: @@ -31,19 +37,25 @@ def __init__(self, api_key, language_code): self.language_code = language_code def recognize(self, audio): - client = speech.SpeechClient() - audio_content = audio.file.read() - audio_data = speech.RecognitionAudio(content=audio_content) - - config = speech.RecognitionConfig( - encoding=speech.RecognitionConfig.AudioEncoding.ENCODING_UNSPECIFIED, - language_code=self.language_code, - ) - - response = client.recognize(config=config, audio=audio_data) - if not response.results: - return "" - return response.results[0].alternatives[0].transcript + try: + client = speech.SpeechClient() + audio_content = audio.file.read() + audio_data = speech.RecognitionAudio(content=audio_content) + + config = speech.RecognitionConfig( + encoding=speech.RecognitionConfig.AudioEncoding.ENCODING_UNSPECIFIED, + language_code=self.language_code, + ) + + response = client.recognize(config=config, audio=audio_data) + if not response.results: + return "" + return response.results[0].alternatives[0].transcript + except Exception as e: + print(f"Failed to recognize speech with google engine: {e}") + raise ValueError( + "[Speech to Text] Failed to recognize speech with Google engine" + ) class SelfHostedEngine: @@ -51,21 +63,26 @@ def __init__(self, api_key, language_code): self.language_code = language_code def recognize(self, audio): - response = requests.post( - settings.SELF_HOSTED_ENDPOINT, - files={"audio": audio}, - data={ - # change this model to get faster results see: https://github.com/coronasafe/care-whisper - "model": "small", - "language": self.language_code.replace("-IN", ""), - }, - ) - - if not response.ok: - print("Failed to recognize speech with self hosted engine") - return "" - response = response.json() - return response["data"]["transcription"].strip() + try: + response = requests.post( + settings.SELF_HOSTED_ENDPOINT, + files={"audio": audio}, + data={ + # change this model to get faster results see: https://github.com/coronasafe/care-whisper + "model": "small", + "language": self.language_code.replace("-IN", ""), + }, + ) + + if not response.ok: + print("Failed to recognize speech with self hosted engine") + return "" + response = response.json() + return response["data"]["transcription"].strip() + except Exception as e: + raise ValueError( + "[Speech to Text] Failed to recognize speech with Self Hosted engine" + ) engines = { @@ -82,14 +99,16 @@ def speech_to_text(engine_id, audio, language_code): engine_class = engines.get(engine_name) if not engine_class: - raise ValueError(f"Invalid STT engine ID: {engine_id}") + raise ValueError(f"[Speech to Text] Engine with ID {engine_id} not found") try: engine = engine_class(api_key, language_code) recognized_text = engine.recognize(audio) if not recognized_text: - raise ValueError("Failed to detect any speech in provided audio") + raise ValueError("[Speech to Text] No text recognized") return recognized_text except Exception as e: - print(f"Failed to recognize speech with {engine_name} engine: {e}") - raise e + print(f"Failed to transcribe speech with {engine_name} engine: {e}") + raise ValueError( + f"[Speech to Text] Failed to transcribe speech with {engine_name} engine" + ) diff --git a/ayushma/utils/upsert.py b/ayushma/utils/upsert.py index 5c85353e..13727e17 100644 --- a/ayushma/utils/upsert.py +++ b/ayushma/utils/upsert.py @@ -58,7 +58,8 @@ def upsert( None """ pinecone.init( - api_key=settings.PINECONE_API_KEY, environment=settings.PINECONE_ENVIRONMENT + api_key=settings.PINECONE_API_KEY, + environment=settings.PINECONE_ENVIRONMENT, ) print("Initialized Pinecone and OpenAI") @@ -80,7 +81,9 @@ def upsert( raise Exception("Either filepath, url or text must be provided") if len(document_lines) == 0: - raise Exception("No text found in document") + raise Exception( + "[Upsert] No text found in the document. Please check the document." + ) print(document_lines) batch_size = ( diff --git a/ayushma/views/chat.py b/ayushma/views/chat.py index 9767e25e..42de4ee0 100644 --- a/ayushma/views/chat.py +++ b/ayushma/views/chat.py @@ -134,7 +134,7 @@ def speech_to_text(self, *args, **kwarg): print(f"Failed to transcribe speech with {stt_engine} engine: {e}") return Response( { - "error": "Something went wrong in getting transcription, please try again later" + "error": "[Transcribing] Something went wrong in getting transcription, please try again later" }, status=status.HTTP_500_INTERNAL_SERVER_ERROR, ) From 1323bfca6db5208ccecc91d72855bb78df108405 Mon Sep 17 00:00:00 2001 From: Ashesh <3626859+Ashesh3@users.noreply.github.com> Date: Mon, 22 Apr 2024 21:49:53 +0530 Subject: [PATCH 05/12] Stability Enhancements and Bug Fixes (#510) * Stability Enhancements and Bug Fixes * Fix ai name removal --- ayushma/migrations/0052_document_failed.py | 17 +++++++ ayushma/models/document.py | 1 + ayushma/serializers/users.py | 3 ++ ayushma/tasks/__init__.py | 18 ++++++++ ayushma/tasks/stale_cleanup.py | 52 ++++++++++++++++++++++ ayushma/utils/converse.py | 2 +- ayushma/utils/openaiapi.py | 9 ++-- ayushma/utils/speech_to_text.py | 9 ++-- ayushma/views/chat.py | 24 ++++++++-- ayushma/views/project.py | 10 +++-- ayushma/views/users.py | 11 +++-- 11 files changed, 134 insertions(+), 22 deletions(-) create mode 100644 ayushma/migrations/0052_document_failed.py create mode 100644 ayushma/tasks/stale_cleanup.py diff --git a/ayushma/migrations/0052_document_failed.py b/ayushma/migrations/0052_document_failed.py new file mode 100644 index 00000000..fc391be4 --- /dev/null +++ b/ayushma/migrations/0052_document_failed.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.6 on 2024-04-17 13:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("ayushma", "0051_project_tts_engine"), + ] + + operations = [ + migrations.AddField( + model_name="document", + name="failed", + field=models.BooleanField(default=False), + ), + ] diff --git a/ayushma/models/document.py b/ayushma/models/document.py index 55c2d1be..95602cff 100644 --- a/ayushma/models/document.py +++ b/ayushma/models/document.py @@ -19,6 +19,7 @@ class Document(BaseModel): "TestQuestion", on_delete=models.PROTECT, null=True, blank=True ) uploading = models.BooleanField(default=True) + failed = models.BooleanField(default=False) def __str__(self) -> str: return f"{self.title} in {self.project.title}" diff --git a/ayushma/serializers/users.py b/ayushma/serializers/users.py index c4cee45a..edb5f375 100644 --- a/ayushma/serializers/users.py +++ b/ayushma/serializers/users.py @@ -16,6 +16,7 @@ class Meta: "allow_key", "is_staff", "is_reviewer", + "date_joined", ) @@ -56,6 +57,7 @@ class Meta: "is_staff", "is_reviewer", "password", + "date_joined", ) read_only_fields = ( "external_id", @@ -64,6 +66,7 @@ class Meta: "allow_key", "is_staff", "is_reviewer", + "date_joined", ) def update(self, instance, validated_data): diff --git a/ayushma/tasks/__init__.py b/ayushma/tasks/__init__.py index e69de29b..275c5ba5 100644 --- a/ayushma/tasks/__init__.py +++ b/ayushma/tasks/__init__.py @@ -0,0 +1,18 @@ +from celery import current_app +from celery.schedules import crontab + +from ayushma.tasks.stale_cleanup import clean_stale_test_runs, clean_stale_upsert_doc + + +@current_app.on_after_finalize.connect +def setup_periodic_tasks(sender, **kwargs): + sender.add_periodic_task( + crontab(minute="*/30"), # Every 30 minutes + clean_stale_test_runs.s(), + name="clean_stale_test_runs", + ) + sender.add_periodic_task( + crontab(minute="*/30"), # Every 30 minutes + clean_stale_upsert_doc.s(), + name="clean_stale_upsert_doc", + ) diff --git a/ayushma/tasks/stale_cleanup.py b/ayushma/tasks/stale_cleanup.py new file mode 100644 index 00000000..372d515f --- /dev/null +++ b/ayushma/tasks/stale_cleanup.py @@ -0,0 +1,52 @@ +from datetime import timedelta + +from celery import shared_task +from django.utils.timezone import now + +from ayushma.models.document import Document +from ayushma.models.enums import StatusChoices +from ayushma.models.testsuite import TestRun + + +@shared_task(bind=True) +def clean_stale_test_runs(self): + try: + # Get testRuns that are created over 6 hours ago and are still in RUNNING state + test_runs = TestRun.objects.filter( + created_at__lt=now() - timedelta(hours=6), + status=StatusChoices.RUNNING, + ) + + # Cancel the testRuns + for test_run in test_runs: + print( + f"Cleaning stale test run: {test_run.id}; Created at: {test_run.created_at}" + ) + test_run.status = StatusChoices.FAILED + test_run.save() + except Exception as e: + print(f"Error occurred while cleaning stale test runs: {e}") + raise e + + +@shared_task(bind=True) +def clean_stale_upsert_doc(self): + try: + # Get stale Document objects that are still in UPLOADING state after 6 hours + documents = Document.objects.filter( + created_at__lt=now() - timedelta(hours=6), + uploading=True, + ) + + # Set the documents to failed state + for document in documents: + print( + f"Cleaning stale document: {document.id}; Created at: {document.created_at}" + ) + document.failed = True + document.uploading = False + document.save() + + except Exception as e: + print(f"Error occurred while cleaning stale test runs: {e}") + raise e diff --git a/ayushma/utils/converse.py b/ayushma/utils/converse.py index 268f9d6e..aa325588 100644 --- a/ayushma/utils/converse.py +++ b/ayushma/utils/converse.py @@ -47,7 +47,7 @@ def converse_api( if not open_ai_key: open_ai_key = ( request.headers.get("OpenAI-Key") - or (chat.project and chat.project.openai_key) + or (chat.project and chat.project.open_ai_key) or (user.allow_key and settings.OPENAI_API_KEY) ) noonce = request.data.get("noonce") diff --git a/ayushma/utils/openaiapi.py b/ayushma/utils/openaiapi.py index e137aa3c..c82da95d 100644 --- a/ayushma/utils/openaiapi.py +++ b/ayushma/utils/openaiapi.py @@ -345,7 +345,7 @@ def converse( response = lang_chain_helper.get_response( english_text, reference, chat_history, documents ) - chat_response = response.replace("Ayushma: ", "") + chat_response = response.replace(f"{AI_NAME}:", "").lstrip() stats["response_end_time"] = time.time() translated_chat_response, url, chat_message = handle_post_response( chat_response, @@ -391,8 +391,6 @@ def converse( documents, ) chat_response = "" - skip_token = len(f"{AI_NAME}: ") - while True: if token_queue.empty(): continue @@ -427,10 +425,9 @@ def converse( ayushma_voice=url, ) break - if skip_token > 0: - skip_token -= 1 - continue + chat_response += next_token[0] + chat_response = chat_response.replace(f"{AI_NAME}:", "").lstrip() yield create_json_response( local_translated_text, chat.external_id, diff --git a/ayushma/utils/speech_to_text.py b/ayushma/utils/speech_to_text.py index 7ed443d6..a004ebd9 100644 --- a/ayushma/utils/speech_to_text.py +++ b/ayushma/utils/speech_to_text.py @@ -79,7 +79,7 @@ def recognize(self, audio): return "" response = response.json() return response["data"]["transcription"].strip() - except Exception as e: + except Exception: raise ValueError( "[Speech to Text] Failed to recognize speech with Self Hosted engine" ) @@ -99,16 +99,17 @@ def speech_to_text(engine_id, audio, language_code): engine_class = engines.get(engine_name) if not engine_class: - raise ValueError(f"[Speech to Text] Engine with ID {engine_id} not found") + print(f"Invalid Speech to Text engine: {engine_name}") + raise ValueError("The selected Speech to Text engine is not valid") try: engine = engine_class(api_key, language_code) recognized_text = engine.recognize(audio) if not recognized_text: - raise ValueError("[Speech to Text] No text recognized") + raise ValueError("No text recognized in the audio") return recognized_text except Exception as e: print(f"Failed to transcribe speech with {engine_name} engine: {e}") raise ValueError( - f"[Speech to Text] Failed to transcribe speech with {engine_name} engine" + f"[Speech to Text] Failed to transcribe speech with {engine_name} engine: {e}" ) diff --git a/ayushma/views/chat.py b/ayushma/views/chat.py index 42de4ee0..0a76686f 100644 --- a/ayushma/views/chat.py +++ b/ayushma/views/chat.py @@ -16,6 +16,8 @@ from rest_framework.response import Response from ayushma.models import Chat, ChatFeedback, Project +from ayushma.models.chat import ChatMessage +from ayushma.models.enums import ChatMessageType from ayushma.permissions import IsTempTokenOrAuthenticated from ayushma.serializers import ( ChatDetailSerializer, @@ -131,11 +133,25 @@ def speech_to_text(self, *args, **kwarg): stats["transcript_end_time"] = time.time() translated_text = transcript except Exception as e: - print(f"Failed to transcribe speech with {stt_engine} engine: {e}") + print(f"Failed to transcribe speech with {stt_engine} engine:\n{e}") + + error_msg = ( + f"[Transcribing] Something went wrong in getting transcription.\n{e}" + ) + chat = Chat.objects.get(external_id=kwarg["external_id"]) + chat.title = "Transcription Error" + chat.save() + ChatMessage.objects.create( + message=error_msg, + original_message=error_msg, + chat=chat, + messageType=ChatMessageType.SYSTEM, + language=language, + meta={}, + ) + return Response( - { - "error": "[Transcribing] Something went wrong in getting transcription, please try again later" - }, + {"error": error_msg}, status=status.HTTP_500_INTERNAL_SERVER_ERROR, ) diff --git a/ayushma/views/project.py b/ayushma/views/project.py index 6de7ff85..091be342 100644 --- a/ayushma/views/project.py +++ b/ayushma/views/project.py @@ -26,8 +26,12 @@ class ProjectViewSet( CreateModelMixin, DestroyModelMixin, ): - queryset = Project.objects.all() - filter_backends = (filters.SearchFilter, DjangoFilterBackend) + queryset = Project.objects.all().order_by("-is_default") + filter_backends = ( + filters.SearchFilter, + DjangoFilterBackend, + filters.OrderingFilter, + ) search_fields = ("title",) filterset_fields = ("archived",) serializer_class = ProjectSerializer @@ -56,7 +60,7 @@ def get_queryset(self): if self.action == "list": if not self.request.user.is_staff: queryset = self.queryset.filter(is_default=True) - return queryset + return queryset.order_by("-is_default") def perform_create(self, serializer): serializer.save(creator=self.request.user) diff --git a/ayushma/views/users.py b/ayushma/views/users.py index f13bfe0e..b68949ea 100644 --- a/ayushma/views/users.py +++ b/ayushma/views/users.py @@ -1,8 +1,7 @@ from django_filters.rest_framework import DjangoFilterBackend from drf_spectacular.utils import extend_schema -from rest_framework import permissions +from rest_framework import filters, permissions from rest_framework.decorators import action -from rest_framework.filters import SearchFilter from ayushma.models import User from ayushma.serializers.users import ( @@ -15,7 +14,12 @@ class UserViewSet(FullBaseModelViewSet): - queryset = User.objects.all() + queryset = User.objects.all().order_by("-date_joined") + filter_backends = ( + filters.SearchFilter, + DjangoFilterBackend, + filters.OrderingFilter, + ) serializer_class = UserDetailSerializer permission_classes = (permissions.IsAdminUser,) serializer_action_classes = { @@ -29,7 +33,6 @@ class UserViewSet(FullBaseModelViewSet): "partial_update_me": (permissions.IsAuthenticated(),), } lookup_field = "username" - filter_backends = [SearchFilter, DjangoFilterBackend] search_fields = ["full_name"] filterset_fields = ["is_staff", "is_reviewer", "allow_key"] From c29dae8eb0202a5f0d88422fefd0d7c8cefa2645 Mon Sep 17 00:00:00 2001 From: Pranshu Aggarwal <70687348+Pranshu1902@users.noreply.github.com> Date: Tue, 14 May 2024 10:21:27 +0530 Subject: [PATCH 06/12] Show chat's feedbacks (#512) * show chats feedbacks filtered * return queryset as response --- ayushma/views/chat.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ayushma/views/chat.py b/ayushma/views/chat.py index 0a76686f..4c7818dc 100644 --- a/ayushma/views/chat.py +++ b/ayushma/views/chat.py @@ -49,6 +49,7 @@ class ChatViewSet( "list_all": ChatDetailSerializer, "converse": ConverseSerializer, "speech_to_text": SpeechToTextSerializer, + "feedbacks": ChatFeedbackSerializer, } permission_classes = (IsTempTokenOrAuthenticated,) lookup_field = "external_id" @@ -98,6 +99,18 @@ def perform_create(self, serializer): serializer.save(user=self.request.user, project=project) super().perform_create(serializer) + @extend_schema( + tags=("chats",), + ) + @action(detail=True, methods=["get"]) + def feedbacks(self, *args, **kwarg): + q = ChatFeedback.objects.filter(chat_message__chat__external_id=kwarg["external_id"]) + serialized_data = ChatFeedbackSerializer(q, many=True).data + return Response( + {"data": serialized_data}, + status=status.HTTP_200_OK, + ) + @extend_schema( tags=("chats",), ) From adf8daafb70a30281ddf6753a6341023dfa867a7 Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Wed, 3 Jul 2024 17:31:45 +0530 Subject: [PATCH 07/12] Switched to Milvus (#518) * Switched to Milvus * updated readme * changes * linted --- .envs/.local/.django | 1 + Makefile | 5 +- Pipfile | 3 +- Pipfile.lock | 1425 +++++++++-------- Procfile | 4 - README.md | 59 +- ayushma/management/__init__.py | 0 ayushma/management/commands/upsert.py | 83 - ...53_alter_chat_model_alter_project_model.py | 46 + ayushma/models/enums.py | 1 + ayushma/utils/langchain.py | 5 +- ayushma/utils/openaiapi.py | 61 +- ayushma/utils/upsert.py | 46 +- ayushma/utils/vectordb.py | 215 +++ ayushma/views/chat.py | 4 +- ayushma/views/document.py | 13 +- ayushma/views/project.py | 6 +- compose/production/milvus/embedEtcd.yaml | 5 + core/settings/base.py | 13 +- core/settings/production.py | 2 +- docker-compose.local.yaml | 28 + docker-compose.production.yaml | 28 + example.env | 2 - prompt-example.txt | 13 + 24 files changed, 1208 insertions(+), 860 deletions(-) delete mode 100644 Procfile delete mode 100644 ayushma/management/__init__.py delete mode 100644 ayushma/management/commands/upsert.py create mode 100644 ayushma/migrations/0053_alter_chat_model_alter_project_model.py create mode 100644 ayushma/utils/vectordb.py create mode 100644 compose/production/milvus/embedEtcd.yaml create mode 100644 prompt-example.txt diff --git a/.envs/.local/.django b/.envs/.local/.django index 247287be..05c5b39f 100644 --- a/.envs/.local/.django +++ b/.envs/.local/.django @@ -5,6 +5,7 @@ IPYTHONDIR=/app/.ipython # Redis # ------------------------------------------------------------------------------ REDIS_URL=redis://redis:6379/0 +DATABASE_URL=postgres://debug:debug@postgres:5432/ayushma # Celery # ------------------------------------------------------------------------------ diff --git a/Makefile b/Makefile index a9548416..0eb9637a 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,10 @@ logs: docker compose -f $(docker_config_file) logs makemigrations: up - docker exec django bash -c "python manage.py makemigrations" + docker compose -f $(docker_config_file) exec django bash -c "python manage.py makemigrations" + +migrate: up + docker compose -f $(docker_config_file) exec django bash -c "python manage.py migrate" checkmigration: docker compose -f $(docker_config_file) exec django bash -c "python manage.py makemigrations --check --dry-run" diff --git a/Pipfile b/Pipfile index db43b4a2..75a45bec 100644 --- a/Pipfile +++ b/Pipfile @@ -24,7 +24,7 @@ drf-nested-routers = "==0.93.4" drf-spectacular = "==0.27.0" requests = "==2.31.0" openai = "==1.2.4" -pinecone-client = "==2.2.4" +pinecone-client = "==4.1.1" pypdf2 = "==3.0.1" tiktoken = "==0.5.2" langchain = "==0.0.352" @@ -41,6 +41,7 @@ nltk = "==3.8.1" gunicorn = "==21.2.0" psycopg = {extras = ["c"], version = "==3.1.17"} sentry-sdk = "==1.30.0" +pymilvus = "*" [dev-packages] ipdb = "==0.13.13" diff --git a/Pipfile.lock b/Pipfile.lock index 3c9b0163..2eca5bd5 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "63b31ab91cb495e4a97169808cd4de31645b941b2e62433ce1c0d9a7650b2565" + "sha256": "e2d224518ee4b6b66d64f42bd2d4f64c19eb45c5750e6bb787de91ca26242003" }, "pipfile-spec": 6, "requires": { @@ -18,85 +18,85 @@ "default": { "aiohttp": { "hashes": [ - "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168", - "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb", - "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5", - "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f", - "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc", - "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c", - "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29", - "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4", - "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc", - "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc", - "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63", - "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e", - "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d", - "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a", - "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60", - "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38", - "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b", - "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2", - "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53", - "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5", - "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4", - "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96", - "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58", - "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa", - "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321", - "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae", - "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce", - "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8", - "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194", - "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c", - "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf", - "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d", - "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869", - "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b", - "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52", - "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528", - "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5", - "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1", - "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4", - "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8", - "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d", - "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7", - "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5", - "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54", - "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3", - "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5", - "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c", - "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29", - "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3", - "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747", - "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672", - "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5", - "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11", - "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca", - "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768", - "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6", - "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2", - "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533", - "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6", - "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266", - "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d", - "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec", - "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5", - "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1", - "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b", - "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679", - "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283", - "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb", - "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b", - "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3", - "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051", - "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511", - "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e", - "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d", - "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542", - "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f" + "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8", + "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c", + "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475", + "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed", + "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf", + "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372", + "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81", + "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f", + "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1", + "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd", + "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a", + "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb", + "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46", + "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de", + "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78", + "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c", + "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771", + "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb", + "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430", + "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233", + "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156", + "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9", + "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59", + "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888", + "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c", + "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c", + "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da", + "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424", + "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2", + "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb", + "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8", + "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a", + "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10", + "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0", + "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09", + "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031", + "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4", + "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3", + "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa", + "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a", + "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe", + "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a", + "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2", + "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1", + "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323", + "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b", + "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b", + "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106", + "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac", + "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6", + "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832", + "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75", + "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6", + "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d", + "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72", + "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db", + "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a", + "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da", + "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678", + "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b", + "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24", + "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed", + "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f", + "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e", + "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58", + "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a", + "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342", + "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558", + "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2", + "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551", + "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595", + "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee", + "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11", + "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d", + "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7", + "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f" ], "markers": "python_version >= '3.8'", - "version": "==3.9.3" + "version": "==3.9.5" }, "aiosignal": { "hashes": [ @@ -116,11 +116,11 @@ }, "annotated-types": { "hashes": [ - "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43", - "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d" + "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", + "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" ], "markers": "python_version >= '3.8'", - "version": "==0.6.0" + "version": "==0.7.0" }, "anyio": { "hashes": [ @@ -169,11 +169,11 @@ }, "asgiref": { "hashes": [ - "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e", - "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed" + "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", + "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590" ], - "markers": "python_version >= '3.7'", - "version": "==3.7.2" + "markers": "python_version >= '3.8'", + "version": "==3.8.1" }, "attrs": { "hashes": [ @@ -202,27 +202,27 @@ }, "boto3": { "hashes": [ - "sha256:46432fd506708fec6caec4392d758c6f5b79a376dee67d3284fe8b6bfbafeaf4", - "sha256:5c96bed1269f77788780aa2005811dc3a37d4122f08b8e54063a1f4c1b9314a1" + "sha256:0b21b84db4619b3711a6f643d465a5a25e81231ee43615c55a20ff6b89c6cc3c", + "sha256:7cb697d67fd138ceebc6f789919ae370c092a50c6b0ccc4ef483027935502eab" ], "markers": "python_version >= '3.8'", - "version": "==1.34.45" + "version": "==1.34.137" }, "botocore": { "hashes": [ - "sha256:bf4fe24dd00a6262a27573dea1690ea68eb20f939e7086effadf19aa1acb44d1", - "sha256:e17874ac708fef295d2ea16bb2570ea0512c920de9f25f796de0d8c778f06a02" + "sha256:a980fa4adec4bfa23fff70a3512622e9412c69c791898a52cafc2458b0be6040", + "sha256:e29c8e9bfda0b20a1997792968e85868bfce42fefad9730f633a81adcff3f2ef" ], "markers": "python_version >= '3.8'", - "version": "==1.34.45" + "version": "==1.34.137" }, "cachetools": { "hashes": [ - "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2", - "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1" + "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945", + "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105" ], "markers": "python_version >= '3.7'", - "version": "==5.3.2" + "version": "==5.3.3" }, "celery": { "hashes": [ @@ -235,11 +235,11 @@ }, "certifi": { "hashes": [ - "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", - "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516", + "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56" ], "markers": "python_version >= '3.6'", - "version": "==2024.2.2" + "version": "==2024.6.2" }, "cffi": { "hashes": [ @@ -405,11 +405,11 @@ }, "click-didyoumean": { "hashes": [ - "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667", - "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035" + "sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463", + "sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c" ], - "markers": "python_full_version >= '3.6.2' and python_full_version < '4.0.0'", - "version": "==0.3.0" + "markers": "python_full_version >= '3.6.2'", + "version": "==0.3.1" }, "click-plugins": { "hashes": [ @@ -428,11 +428,11 @@ }, "dataclasses-json": { "hashes": [ - "sha256:73696ebf24936560cca79a2430cbc4f3dd23ac7bf46ed17f38e5e5e7657a6377", - "sha256:f90578b8a3177f7552f4e1a6e535e84293cd5da421fcce0642d49c0d7bdf8df2" + "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", + "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0" ], "markers": "python_version >= '3.7' and python_version < '4.0'", - "version": "==0.6.4" + "version": "==0.6.7" }, "distro": { "hashes": [ @@ -534,14 +534,6 @@ "markers": "python_version >= '3.6'", "version": "==3.14.0" }, - "dnspython": { - "hashes": [ - "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50", - "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc" - ], - "markers": "python_version >= '3.8'", - "version": "==2.6.1" - }, "drf-nested-routers": { "hashes": [ "sha256:01aa556b8c08608bb74fb34f6ca065a5183f2cda4dc0478192cc17a2581d71b0", @@ -560,6 +552,14 @@ "markers": "python_version >= '3.6'", "version": "==0.27.0" }, + "environs": { + "hashes": [ + "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124", + "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9" + ], + "markers": "python_version >= '3.6'", + "version": "==9.5.0" + }, "frozenlist": { "hashes": [ "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7", @@ -711,69 +711,62 @@ }, "grpcio": { "hashes": [ - "sha256:0250a7a70b14000fa311de04b169cc7480be6c1a769b190769d347939d3232a8", - "sha256:069fe2aeee02dfd2135d562d0663fe70fbb69d5eed6eb3389042a7e963b54de8", - "sha256:082081e6a36b6eb5cf0fd9a897fe777dbb3802176ffd08e3ec6567edd85bc104", - "sha256:0c5807e9152eff15f1d48f6b9ad3749196f79a4a050469d99eecb679be592acc", - "sha256:14e8f2c84c0832773fb3958240c69def72357bc11392571f87b2d7b91e0bb092", - "sha256:2a6087f234cb570008a6041c8ffd1b7d657b397fdd6d26e83d72283dae3527b1", - "sha256:2bb2a2911b028f01c8c64d126f6b632fcd8a9ac975aa1b3855766c94e4107180", - "sha256:2f44c32aef186bbba254129cea1df08a20be414144ac3bdf0e84b24e3f3b2e05", - "sha256:30e980cd6db1088c144b92fe376747328d5554bc7960ce583ec7b7d81cd47287", - "sha256:33aed0a431f5befeffd9d346b0fa44b2c01aa4aeae5ea5b2c03d3e25e0071216", - "sha256:33bdea30dcfd4f87b045d404388469eb48a48c33a6195a043d116ed1b9a0196c", - "sha256:39aa848794b887120b1d35b1b994e445cc028ff602ef267f87c38122c1add50d", - "sha256:4216e67ad9a4769117433814956031cb300f85edc855252a645a9a724b3b6594", - "sha256:49c9b6a510e3ed8df5f6f4f3c34d7fbf2d2cae048ee90a45cd7415abab72912c", - "sha256:4eec8b8c1c2c9b7125508ff7c89d5701bf933c99d3910e446ed531cd16ad5d87", - "sha256:50d56280b482875d1f9128ce596e59031a226a8b84bec88cb2bf76c289f5d0de", - "sha256:53b69e79d00f78c81eecfb38f4516080dc7f36a198b6b37b928f1c13b3c063e9", - "sha256:55ccb7db5a665079d68b5c7c86359ebd5ebf31a19bc1a91c982fd622f1e31ff2", - "sha256:5a1ebbae7e2214f51b1f23b57bf98eeed2cf1ba84e4d523c48c36d5b2f8829ff", - "sha256:61b7199cd2a55e62e45bfb629a35b71fc2c0cb88f686a047f25b1112d3810904", - "sha256:660fc6b9c2a9ea3bb2a7e64ba878c98339abaf1811edca904ac85e9e662f1d73", - "sha256:6d140bdeb26cad8b93c1455fa00573c05592793c32053d6e0016ce05ba267549", - "sha256:6e490fa5f7f5326222cb9f0b78f207a2b218a14edf39602e083d5f617354306f", - "sha256:6ecf21d20d02d1733e9c820fb5c114c749d888704a7ec824b545c12e78734d1c", - "sha256:70c83bb530572917be20c21f3b6be92cd86b9aecb44b0c18b1d3b2cc3ae47df0", - "sha256:72153a0d2e425f45b884540a61c6639436ddafa1829a42056aa5764b84108b8e", - "sha256:73e14acd3d4247169955fae8fb103a2b900cfad21d0c35f0dcd0fdd54cd60367", - "sha256:76eaaba891083fcbe167aa0f03363311a9f12da975b025d30e94b93ac7a765fc", - "sha256:79ae0dc785504cb1e1788758c588c711f4e4a0195d70dff53db203c95a0bd303", - "sha256:7d142bcd604166417929b071cd396aa13c565749a4c840d6c702727a59d835eb", - "sha256:8c9554ca8e26241dabe7951aa1fa03a1ba0856688ecd7e7bdbdd286ebc272e4c", - "sha256:8d488fbdbf04283f0d20742b64968d44825617aa6717b07c006168ed16488804", - "sha256:91422ba785a8e7a18725b1dc40fbd88f08a5bb4c7f1b3e8739cab24b04fa8a03", - "sha256:9a66f4d2a005bc78e61d805ed95dedfcb35efa84b7bba0403c6d60d13a3de2d6", - "sha256:9b106bc52e7f28170e624ba61cc7dc6829566e535a6ec68528f8e1afbed1c41f", - "sha256:9b54577032d4f235452f77a83169b6527bf4b77d73aeada97d45b2aaf1bf5ce0", - "sha256:a09506eb48fa5493c58f946c46754ef22f3ec0df64f2b5149373ff31fb67f3dd", - "sha256:a212e5dea1a4182e40cd3e4067ee46be9d10418092ce3627475e995cca95de21", - "sha256:a731ac5cffc34dac62053e0da90f0c0b8560396a19f69d9703e88240c8f05858", - "sha256:af5ef6cfaf0d023c00002ba25d0751e5995fa0e4c9eec6cd263c30352662cbce", - "sha256:b58b855d0071575ea9c7bc0d84a06d2edfbfccec52e9657864386381a7ce1ae9", - "sha256:bc808924470643b82b14fe121923c30ec211d8c693e747eba8a7414bc4351a23", - "sha256:c557e94e91a983e5b1e9c60076a8fd79fea1e7e06848eb2e48d0ccfb30f6e073", - "sha256:c71be3f86d67d8d1311c6076a4ba3b75ba5703c0b856b4e691c9097f9b1e8bd2", - "sha256:c8754c75f55781515a3005063d9a05878b2cfb3cb7e41d5401ad0cf19de14872", - "sha256:cb0af13433dbbd1c806e671d81ec75bd324af6ef75171fd7815ca3074fe32bfe", - "sha256:cba6209c96828711cb7c8fcb45ecef8c8859238baf15119daa1bef0f6c84bfe7", - "sha256:cf77f8cf2a651fbd869fbdcb4a1931464189cd210abc4cfad357f1cacc8642a6", - "sha256:d7404cebcdb11bb5bd40bf94131faf7e9a7c10a6c60358580fe83913f360f929", - "sha256:dd1d3a8d1d2e50ad9b59e10aa7f07c7d1be2b367f3f2d33c5fade96ed5460962", - "sha256:e5d97c65ea7e097056f3d1ead77040ebc236feaf7f71489383d20f3b4c28412a", - "sha256:f1c3dc536b3ee124e8b24feb7533e5c70b9f2ef833e3b2e5513b2897fd46763a", - "sha256:f2212796593ad1d0235068c79836861f2201fc7137a99aa2fea7beeb3b101177", - "sha256:fead980fbc68512dfd4e0c7b1f5754c2a8e5015a04dea454b9cada54a8423525" - ], - "version": "==1.60.1" + "sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3", + "sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094", + "sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b", + "sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d", + "sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2", + "sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172", + "sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d", + "sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c", + "sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b", + "sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3", + "sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9", + "sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357", + "sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61", + "sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5", + "sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a", + "sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280", + "sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434", + "sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce", + "sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d", + "sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c", + "sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f", + "sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f", + "sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57", + "sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f", + "sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0", + "sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2", + "sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0", + "sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a", + "sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6", + "sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d", + "sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85", + "sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a", + "sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d", + "sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f", + "sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb", + "sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86", + "sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7", + "sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda", + "sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d", + "sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434", + "sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91", + "sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a", + "sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3", + "sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3", + "sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1", + "sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae" + ], + "markers": "python_version >= '3.8'", + "version": "==1.63.0" }, "grpcio-status": { "hashes": [ - "sha256:3034fdb239185b6e0f3169d08c268c4507481e4b8a434c21311a03d9eb5889a0", - "sha256:61b5aab8989498e8aa142c20b88829ea5d90d18c18c853b9f9e6d407d37bf8b4" + "sha256:206ddf0eb36bc99b033f03b2c8e95d319f0044defae9b41ae21408e7e0cda48f", + "sha256:62e1bfcb02025a1cd73732a2d33672d3e9d0df4d21c12c51e0bbcaf09bab742a" ], - "version": "==1.60.1" + "version": "==1.62.2" }, "gunicorn": { "hashes": [ @@ -794,27 +787,27 @@ }, "httpcore": { "hashes": [ - "sha256:5c0f9546ad17dac4d0772b0808856eb616eb8b48ce94f49ed819fd6982a8a544", - "sha256:9a6a501c3099307d9fd76ac244e08503427679b1e81ceb1d922485e2f2462ad2" + "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61", + "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5" ], "markers": "python_version >= '3.8'", - "version": "==1.0.3" + "version": "==1.0.5" }, "httpx": { "hashes": [ - "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf", - "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd" + "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5", + "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5" ], "markers": "python_version >= '3.8'", - "version": "==0.26.0" + "version": "==0.27.0" }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.7" }, "inflection": { "hashes": [ @@ -834,11 +827,11 @@ }, "joblib": { "hashes": [ - "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1", - "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9" + "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", + "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e" ], - "markers": "python_version >= '3.7'", - "version": "==1.3.2" + "markers": "python_version >= '3.8'", + "version": "==1.4.2" }, "jsonpatch": { "hashes": [ @@ -850,19 +843,19 @@ }, "jsonpointer": { "hashes": [ - "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a", - "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" + "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", + "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==2.4" + "markers": "python_version >= '3.7'", + "version": "==3.0.0" }, "jsonschema": { "hashes": [ - "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f", - "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5" + "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7", + "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802" ], "markers": "python_version >= '3.8'", - "version": "==4.21.1" + "version": "==4.22.0" }, "jsonschema-specifications": { "hashes": [ @@ -874,11 +867,11 @@ }, "kombu": { "hashes": [ - "sha256:0eac1bbb464afe6fb0924b21bf79460416d25d8abc52546d4f16cad94f789488", - "sha256:30e470f1a6b49c70dc6f6d13c3e4cc4e178aa6c469ceb6bcd55645385fc84b93" + "sha256:011c4cd9a355c14a1de8d35d257314a1d2456d52b7140388561acac3cf1a97bf", + "sha256:5634c511926309c7f9789f1433e9ed402616b56836ef9878f01bd59267b4c7a9" ], "markers": "python_version >= '3.8'", - "version": "==5.3.5" + "version": "==5.3.7" }, "langchain": { "hashes": [ @@ -922,21 +915,23 @@ "markers": "python_version < '4.0' and python_full_version >= '3.8.1'", "version": "==0.0.87" }, - "loguru": { + "marshmallow": { "hashes": [ - "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb", - "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac" + "sha256:4f57c5e050a54d66361e826f94fba213eb10b67b2fdb02c3e0343ce207ba1662", + "sha256:86ce7fb914aa865001a4b2092c4c2872d13bc347f3d42673272cabfdbad386f1" ], - "markers": "python_version >= '3.5'", - "version": "==0.7.2" + "markers": "python_version >= '3.8'", + "version": "==3.21.3" }, - "marshmallow": { + "milvus-lite": { "hashes": [ - "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd", - "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9" + "sha256:c828190118b104b05b8c8e0b5a4147811c86b54b8fb67bc2e726ad10fc0b544e", + "sha256:e1537633c39879714fb15082be56a4b97f74c905a6e98e302ec01320561081af", + "sha256:f016474d663045787dddf1c3aad13b7d8b61fd329220318f858184918143dcbf", + "sha256:fcb909d38c83f21478ca9cb500c84264f988c69f62715ae9462e966767fb76dd" ], - "markers": "python_version >= '3.8'", - "version": "==3.20.2" + "markers": "sys_platform != 'win32'", + "version": "==2.4.7" }, "multidict": { "hashes": [ @@ -1110,6 +1105,41 @@ "markers": "python_version >= '3.7'", "version": "==23.2" }, + "pandas": { + "hashes": [ + "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863", + "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2", + "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1", + "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad", + "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db", + "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76", + "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51", + "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32", + "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08", + "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b", + "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4", + "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921", + "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288", + "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee", + "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0", + "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24", + "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99", + "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151", + "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd", + "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce", + "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57", + "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef", + "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54", + "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a", + "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238", + "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23", + "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772", + "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce", + "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad" + ], + "markers": "python_version >= '3.9'", + "version": "==2.2.2" + }, "pillow": { "hashes": [ "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5", @@ -1175,12 +1205,20 @@ }, "pinecone-client": { "hashes": [ - "sha256:2c1cc1d6648b2be66e944db2ffa59166a37b9164d1135ad525d9cd8b1e298168", - "sha256:5bf496c01c2f82f4e5c2dc977cc5062ecd7168b8ed90743b09afcc8c7eb242ec" + "sha256:b2e78c29de50c180dbfe75e15f08c87ec1a3a4f1bc6b2be1f0ccaee1ab4434fa", + "sha256:e74ea91a0129a80f301662e286b1883f2eb896683ff7d2cdb03ea06346844d0d" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==2.2.4" + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==4.1.1" + }, + "pinecone-plugin-interface": { + "hashes": [ + "sha256:875857ad9c9fc8bbc074dbe780d187a2afd21f5bfe0f3b08601924a61ef1bba8", + "sha256:b8e6675e41847333aa13923cc44daa3f85676d7157324682dc1640588a982846" + ], + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==0.0.7" }, "ply": { "hashes": [ @@ -1191,19 +1229,19 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d", - "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6" + "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10", + "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.0.43" + "version": "==3.0.47" }, "proto-plus": { "hashes": [ - "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2", - "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c" + "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445", + "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12" ], - "markers": "python_version >= '3.6'", - "version": "==1.23.0" + "markers": "python_version >= '3.7'", + "version": "==1.24.0" }, "protobuf": { "hashes": [ @@ -1241,119 +1279,138 @@ }, "pyasn1": { "hashes": [ - "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58", - "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c" + "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c", + "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.5.1" + "markers": "python_version >= '3.8'", + "version": "==0.6.0" }, "pyasn1-modules": { "hashes": [ - "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c", - "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d" + "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6", + "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.3.0" + "markers": "python_version >= '3.8'", + "version": "==0.4.0" }, "pycparser": { "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "version": "==2.21" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pydantic": { "hashes": [ - "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f", - "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9" + "sha256:d970ffb9d030b710795878940bd0489842c638e7252fc4a19c3ae2f7da4d6141", + "sha256:ead4f3a1e92386a734ca1411cb25d94147cf8778ed5be6b56749047676d6364e" ], "markers": "python_version >= '3.8'", - "version": "==2.6.1" + "version": "==2.8.0" }, "pydantic-core": { "hashes": [ - "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379", - "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06", - "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05", - "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7", - "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753", - "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a", - "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731", - "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc", - "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380", - "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3", - "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c", - "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11", - "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990", - "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a", - "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2", - "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8", - "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97", - "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a", - "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8", - "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef", - "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77", - "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33", - "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82", - "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5", - "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b", - "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55", - "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e", - "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b", - "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7", - "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec", - "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc", - "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469", - "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b", - "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20", - "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e", - "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d", - "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f", - "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b", - "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039", - "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e", - "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2", - "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f", - "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b", - "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc", - "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8", - "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522", - "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e", - "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784", - "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a", - "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890", - "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485", - "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545", - "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f", - "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943", - "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878", - "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f", - "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17", - "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7", - "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286", - "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c", - "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb", - "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646", - "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978", - "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8", - "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15", - "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272", - "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2", - "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55", - "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf", - "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545", - "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4", - "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a", - "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804", - "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4", - "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0", - "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a", - "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113", - "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d", - "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25" + "sha256:03aceaf6a5adaad3bec2233edc5a7905026553916615888e53154807e404545c", + "sha256:05e83ce2f7eba29e627dd8066aa6c4c0269b2d4f889c0eba157233a353053cea", + "sha256:0b0eefc7633a04c0694340aad91fbfd1986fe1a1e0c63a22793ba40a18fcbdc8", + "sha256:0e75794883d635071cf6b4ed2a5d7a1e50672ab7a051454c76446ef1ebcdcc91", + "sha256:0f6dd3612a3b9f91f2e63924ea18a4476656c6d01843ca20a4c09e00422195af", + "sha256:116b326ac82c8b315e7348390f6d30bcfe6e688a7d3f1de50ff7bcc2042a23c2", + "sha256:16197e6f4fdecb9892ed2436e507e44f0a1aa2cff3b9306d1c879ea2f9200997", + "sha256:1c3c5b7f70dd19a6845292b0775295ea81c61540f68671ae06bfe4421b3222c2", + "sha256:1dacf660d6de692fe351e8c806e7efccf09ee5184865893afbe8e59be4920b4a", + "sha256:1def125d59a87fe451212a72ab9ed34c118ff771e5473fef4f2f95d8ede26d75", + "sha256:1e4f46189d8740561b43655263a41aac75ff0388febcb2c9ec4f1b60a0ec12f3", + "sha256:1f038156b696a1c39d763b2080aeefa87ddb4162c10aa9fabfefffc3dd8180fa", + "sha256:21d9f7e24f63fdc7118e6cc49defaab8c1d27570782f7e5256169d77498cf7c7", + "sha256:22b813baf0dbf612752d8143a2dbf8e33ccb850656b7850e009bad2e101fc377", + "sha256:22e3b1d4b1b3f6082849f9b28427ef147a5b46a6132a3dbaf9ca1baa40c88609", + "sha256:23425eccef8f2c342f78d3a238c824623836c6c874d93c726673dbf7e56c78c0", + "sha256:25c46bb2ff6084859bbcfdf4f1a63004b98e88b6d04053e8bf324e115398e9e7", + "sha256:2761f71faed820e25ec62eacba670d1b5c2709bb131a19fcdbfbb09884593e5a", + "sha256:2aec8eeea0b08fd6bc2213d8e86811a07491849fd3d79955b62d83e32fa2ad5f", + "sha256:2d06a7fa437f93782e3f32d739c3ec189f82fca74336c08255f9e20cea1ed378", + "sha256:316fe7c3fec017affd916a0c83d6f1ec697cbbbdf1124769fa73328e7907cc2e", + "sha256:344e352c96e53b4f56b53d24728217c69399b8129c16789f70236083c6ceb2ac", + "sha256:35681445dc85446fb105943d81ae7569aa7e89de80d1ca4ac3229e05c311bdb1", + "sha256:366be8e64e0cb63d87cf79b4e1765c0703dd6313c729b22e7b9e378db6b96877", + "sha256:3a7235b46c1bbe201f09b6f0f5e6c36b16bad3d0532a10493742f91fbdc8035f", + "sha256:3c05eaf6c863781eb834ab41f5963604ab92855822a2062897958089d1335dad", + "sha256:3e147fc6e27b9a487320d78515c5f29798b539179f7777018cedf51b7749e4f4", + "sha256:3f0f3a4a23717280a5ee3ac4fb1f81d6fde604c9ec5100f7f6f987716bb8c137", + "sha256:5084ec9721f82bef5ff7c4d1ee65e1626783abb585f8c0993833490b63fe1792", + "sha256:52527e8f223ba29608d999d65b204676398009725007c9336651c2ec2d93cffc", + "sha256:53b06aea7a48919a254b32107647be9128c066aaa6ee6d5d08222325f25ef175", + "sha256:58e251bb5a5998f7226dc90b0b753eeffa720bd66664eba51927c2a7a2d5f32c", + "sha256:603a843fea76a595c8f661cd4da4d2281dff1e38c4a836a928eac1a2f8fe88e4", + "sha256:616b9c2f882393d422ba11b40e72382fe975e806ad693095e9a3b67c59ea6150", + "sha256:649a764d9b0da29816889424697b2a3746963ad36d3e0968784ceed6e40c6355", + "sha256:658287a29351166510ebbe0a75c373600cc4367a3d9337b964dada8d38bcc0f4", + "sha256:6d0f52684868db7c218437d260e14d37948b094493f2646f22d3dda7229bbe3f", + "sha256:6dc85b9e10cc21d9c1055f15684f76fa4facadddcb6cd63abab702eb93c98943", + "sha256:72432fd6e868c8d0a6849869e004b8bcae233a3c56383954c228316694920b38", + "sha256:73deadd6fd8a23e2f40b412b3ac617a112143c8989a4fe265050fd91ba5c0608", + "sha256:763602504bf640b3ded3bba3f8ed8a1cc2fc6a87b8d55c1c5689f428c49c947e", + "sha256:7701df088d0b05f3460f7ba15aec81ac8b0fb5690367dfd072a6c38cf5b7fdb5", + "sha256:78d584caac52c24240ef9ecd75de64c760bbd0e20dbf6973631815e3ef16ef8b", + "sha256:7a3639011c2e8a9628466f616ed7fb413f30032b891898e10895a0a8b5857d6c", + "sha256:7b6a24d7b5893392f2b8e3b7a0031ae3b14c6c1942a4615f0d8794fdeeefb08b", + "sha256:7d4df13d1c55e84351fab51383520b84f490740a9f1fec905362aa64590b7a5d", + "sha256:7e37b6bb6e90c2b8412b06373c6978d9d81e7199a40e24a6ef480e8acdeaf918", + "sha256:8093473d7b9e908af1cef30025609afc8f5fd2a16ff07f97440fd911421e4432", + "sha256:840200827984f1c4e114008abc2f5ede362d6e11ed0b5931681884dd41852ff1", + "sha256:85770b4b37bb36ef93a6122601795231225641003e0318d23c6233c59b424279", + "sha256:879ae6bb08a063b3e1b7ac8c860096d8fd6b48dd9b2690b7f2738b8c835e744b", + "sha256:87d3df115f4a3c8c5e4d5acf067d399c6466d7e604fc9ee9acbe6f0c88a0c3cf", + "sha256:8b315685832ab9287e6124b5d74fc12dda31e6421d7f6b08525791452844bc2d", + "sha256:8e49524917b8d3c2f42cd0d2df61178e08e50f5f029f9af1f402b3ee64574392", + "sha256:978d4123ad1e605daf1ba5e01d4f235bcf7b6e340ef07e7122e8e9cfe3eb61ab", + "sha256:a0586cddbf4380e24569b8a05f234e7305717cc8323f50114dfb2051fcbce2a3", + "sha256:a272785a226869416c6b3c1b7e450506152d3844207331f02f27173562c917e0", + "sha256:a340d2bdebe819d08f605e9705ed551c3feb97e4fd71822d7147c1e4bdbb9508", + "sha256:a3f243f318bd9523277fa123b3163f4c005a3e8619d4b867064de02f287a564d", + "sha256:a4f0f71653b1c1bad0350bc0b4cc057ab87b438ff18fa6392533811ebd01439c", + "sha256:ab760f17c3e792225cdaef31ca23c0aea45c14ce80d8eff62503f86a5ab76bff", + "sha256:ac76f30d5d3454f4c28826d891fe74d25121a346c69523c9810ebba43f3b1cec", + "sha256:ad1bd2f377f56fec11d5cfd0977c30061cd19f4fa199bf138b200ec0d5e27eeb", + "sha256:b2ba34a099576234671f2e4274e5bc6813b22e28778c216d680eabd0db3f7dad", + "sha256:b2f13c3e955a087c3ec86f97661d9f72a76e221281b2262956af381224cfc243", + "sha256:b34480fd6778ab356abf1e9086a4ced95002a1e195e8d2fd182b0def9d944d11", + "sha256:b4a085bd04af7245e140d1b95619fe8abb445a3d7fdf219b3f80c940853268ef", + "sha256:b81ec2efc04fc1dbf400647d4357d64fb25543bae38d2d19787d69360aad21c9", + "sha256:b8c46a8cf53e849eea7090f331ae2202cd0f1ceb090b00f5902c423bd1e11805", + "sha256:bc7e43b4a528ffca8c9151b6a2ca34482c2fdc05e6aa24a84b7f475c896fc51d", + "sha256:c3dc8ec8b87c7ad534c75b8855168a08a7036fdb9deeeed5705ba9410721c84d", + "sha256:c4a9732a5cad764ba37f3aa873dccb41b584f69c347a57323eda0930deec8e10", + "sha256:c867230d715a3dd1d962c8d9bef0d3168994ed663e21bf748b6e3a529a129aab", + "sha256:cafde15a6f7feaec2f570646e2ffc5b73412295d29134a29067e70740ec6ee20", + "sha256:cb1ad5b4d73cde784cf64580166568074f5ccd2548d765e690546cff3d80937d", + "sha256:d08264b4460326cefacc179fc1411304d5af388a79910832835e6f641512358b", + "sha256:d42669d319db366cb567c3b444f43caa7ffb779bf9530692c6f244fc635a41eb", + "sha256:d43e7ab3b65e4dc35a7612cfff7b0fd62dce5bc11a7cd198310b57f39847fd6c", + "sha256:d5b8376a867047bf08910573deb95d3c8dfb976eb014ee24f3b5a61ccc5bee1b", + "sha256:d6f2d8b8da1f03f577243b07bbdd3412eee3d37d1f2fd71d1513cbc76a8c1239", + "sha256:d6f8c49657f3eb7720ed4c9b26624063da14937fc94d1812f1e04a2204db3e17", + "sha256:d70a8ff2d4953afb4cbe6211f17268ad29c0b47e73d3372f40e7775904bc28fc", + "sha256:d82e5ed3a05f2dcb89c6ead2fd0dbff7ac09bc02c1b4028ece2d3a3854d049ce", + "sha256:e9dcd7fb34f7bfb239b5fa420033642fff0ad676b765559c3737b91f664d4fa9", + "sha256:ed741183719a5271f97d93bbcc45ed64619fa38068aaa6e90027d1d17e30dc8d", + "sha256:ee7785938e407418795e4399b2bf5b5f3cf6cf728077a7f26973220d58d885cf", + "sha256:efbb412d55a4ffe73963fed95c09ccb83647ec63b711c4b3752be10a56f0090b", + "sha256:f8ea1d8b7df522e5ced34993c423c3bf3735c53df8b2a15688a2f03a7d678800" + ], + "markers": "python_version >= '3.8'", + "version": "==2.20.0" + }, + "pymilvus": { + "hashes": [ + "sha256:073b76bc36f6f4e70f0f0a0023a53324f0ba8ef9a60883f87cd30a44b6c6f2b5", + "sha256:50c53eb103e034fbffe936fe942751ea3dbd2452e18cf79acc52360ed4987fb7" ], + "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.16.2" + "version": "==2.4.4" }, "pypdf2": { "hashes": [ @@ -1366,11 +1423,19 @@ }, "python-dateutil": { "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.2" + "version": "==2.9.0.post0" + }, + "python-dotenv": { + "hashes": [ + "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", + "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a" + ], + "markers": "python_version >= '3.8'", + "version": "==1.0.1" }, "pytz": { "hashes": [ @@ -1447,110 +1512,96 @@ }, "referencing": { "hashes": [ - "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5", - "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7" + "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c", + "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de" ], "markers": "python_version >= '3.8'", - "version": "==0.33.0" + "version": "==0.35.1" }, "regex": { "hashes": [ - "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5", - "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770", - "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc", - "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105", - "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d", - "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b", - "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9", - "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630", - "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6", - "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c", - "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482", - "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6", - "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a", - "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80", - "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5", - "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1", - "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f", - "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf", - "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb", - "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2", - "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347", - "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20", - "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060", - "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5", - "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73", - "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f", - "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d", - "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3", - "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae", - "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4", - "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2", - "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457", - "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c", - "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4", - "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87", - "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0", - "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704", - "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f", - "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f", - "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b", - "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5", - "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923", - "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715", - "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c", - "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca", - "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1", - "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756", - "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360", - "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc", - "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445", - "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e", - "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4", - "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a", - "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8", - "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53", - "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697", - "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf", - "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a", - "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415", - "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f", - "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9", - "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400", - "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d", - "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392", - "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb", - "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd", - "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861", - "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232", - "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95", - "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7", - "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39", - "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887", - "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5", - "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39", - "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb", - "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586", - "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97", - "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423", - "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69", - "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7", - "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1", - "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7", - "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5", - "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8", - "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91", - "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590", - "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe", - "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c", - "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64", - "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd", - "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa", - "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31", - "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988" + "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649", + "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35", + "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb", + "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68", + "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5", + "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133", + "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0", + "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d", + "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da", + "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f", + "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d", + "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53", + "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa", + "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a", + "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890", + "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67", + "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c", + "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2", + "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced", + "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741", + "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f", + "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa", + "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf", + "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4", + "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5", + "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2", + "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384", + "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7", + "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014", + "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704", + "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5", + "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2", + "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49", + "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1", + "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694", + "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629", + "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6", + "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435", + "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c", + "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835", + "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e", + "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201", + "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62", + "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5", + "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16", + "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f", + "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1", + "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f", + "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f", + "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145", + "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3", + "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed", + "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143", + "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca", + "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9", + "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa", + "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850", + "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80", + "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe", + "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656", + "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388", + "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1", + "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294", + "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3", + "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d", + "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b", + "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40", + "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600", + "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c", + "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569", + "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456", + "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9", + "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb", + "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e", + "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f", + "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d", + "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a", + "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a", + "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796" ], - "markers": "python_version >= '3.7'", - "version": "==2023.12.25" + "markers": "python_version >= '3.8'", + "version": "==2024.5.15" }, "requests": { "hashes": [ @@ -1563,108 +1614,108 @@ }, "rpds-py": { "hashes": [ - "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f", - "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c", - "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76", - "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e", - "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157", - "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f", - "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5", - "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05", - "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24", - "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1", - "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8", - "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b", - "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb", - "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07", - "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1", - "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6", - "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e", - "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e", - "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1", - "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab", - "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4", - "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17", - "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594", - "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d", - "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d", - "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3", - "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c", - "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66", - "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f", - "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80", - "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33", - "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f", - "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c", - "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022", - "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e", - "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f", - "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da", - "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1", - "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688", - "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795", - "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c", - "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98", - "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1", - "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20", - "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307", - "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4", - "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18", - "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294", - "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66", - "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467", - "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948", - "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e", - "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1", - "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0", - "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7", - "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd", - "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641", - "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d", - "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9", - "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1", - "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da", - "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3", - "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa", - "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7", - "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40", - "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496", - "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124", - "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836", - "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434", - "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984", - "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f", - "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6", - "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e", - "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461", - "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c", - "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432", - "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73", - "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58", - "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88", - "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337", - "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7", - "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863", - "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475", - "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3", - "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51", - "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf", - "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024", - "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40", - "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9", - "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec", - "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb", - "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7", - "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861", - "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880", - "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f", - "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd", - "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca", - "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58", - "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e" + "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee", + "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc", + "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc", + "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944", + "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20", + "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7", + "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4", + "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6", + "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6", + "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93", + "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633", + "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0", + "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360", + "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8", + "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139", + "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7", + "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a", + "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9", + "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26", + "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724", + "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72", + "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b", + "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09", + "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100", + "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3", + "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261", + "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3", + "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9", + "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b", + "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3", + "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de", + "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d", + "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e", + "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8", + "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff", + "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5", + "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c", + "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e", + "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e", + "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4", + "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8", + "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922", + "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338", + "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d", + "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8", + "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2", + "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72", + "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80", + "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644", + "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae", + "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163", + "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104", + "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d", + "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60", + "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a", + "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d", + "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07", + "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49", + "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10", + "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f", + "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2", + "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8", + "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7", + "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88", + "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65", + "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0", + "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909", + "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8", + "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c", + "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184", + "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397", + "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a", + "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346", + "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590", + "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333", + "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb", + "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74", + "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e", + "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d", + "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa", + "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f", + "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53", + "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1", + "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac", + "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0", + "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd", + "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611", + "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f", + "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c", + "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5", + "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab", + "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc", + "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43", + "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da", + "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac", + "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843", + "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e", + "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89", + "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64" ], "markers": "python_version >= '3.8'", - "version": "==0.18.0" + "version": "==0.18.1" }, "rsa": { "hashes": [ @@ -1676,11 +1727,11 @@ }, "s3transfer": { "hashes": [ - "sha256:3cdb40f5cfa6966e812209d0994f2a4709b561c88e90cf00c2696d2df4e56b2e", - "sha256:d0c8bbf672d5eebbe4e57945e23b972d963f07d82f661cabf678a5c88831595b" + "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6", + "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69" ], "markers": "python_version >= '3.8'", - "version": "==0.10.0" + "version": "==0.10.2" }, "sentry-sdk": { "hashes": [ @@ -1690,6 +1741,14 @@ "index": "pypi", "version": "==1.30.0" }, + "setuptools": { + "hashes": [ + "sha256:b8b8060bb426838fbe942479c90296ce976249451118ef566a5a0b7d8b78fb05", + "sha256:bd63e505105011b25c3c11f753f7e3b8465ea739efddaccef8f0efac2137bac1" + ], + "markers": "python_version >= '3.8'", + "version": "==70.2.0" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", @@ -1700,11 +1759,11 @@ }, "sniffio": { "hashes": [ - "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101", - "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384" + "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", + "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc" ], "markers": "python_version >= '3.7'", - "version": "==1.3.0" + "version": "==1.3.1" }, "soupsieve": { "hashes": [ @@ -1716,74 +1775,74 @@ }, "sqlalchemy": { "hashes": [ - "sha256:03f448ffb731b48323bda68bcc93152f751436ad6037f18a42b7e16af9e91c07", - "sha256:0de1263aac858f288a80b2071990f02082c51d88335a1db0d589237a3435fe71", - "sha256:0fb3bffc0ced37e5aa4ac2416f56d6d858f46d4da70c09bb731a246e70bff4d5", - "sha256:120af1e49d614d2525ac247f6123841589b029c318b9afbfc9e2b70e22e1827d", - "sha256:1306102f6d9e625cebaca3d4c9c8f10588735ef877f0360b5cdb4fdfd3fd7131", - "sha256:15e19a84b84528f52a68143439d0c7a3a69befcd4f50b8ef9b7b69d2628ae7c4", - "sha256:1ab4e0448018d01b142c916cc7119ca573803a4745cfe341b8f95657812700ac", - "sha256:1fc19ae2e07a067663dd24fca55f8ed06a288384f0e6e3910420bf4b1270cc51", - "sha256:2f5c9dfb0b9ab5e3a8a00249534bdd838d943ec4cfb9abe176a6c33408430230", - "sha256:30d81cc1192dc693d49d5671cd40cdec596b885b0ce3b72f323888ab1c3863d5", - "sha256:33e8bde8fff203de50399b9039c4e14e42d4d227759155c21f8da4a47fc8053c", - "sha256:4535c49d961fe9a77392e3a630a626af5baa967172d42732b7a43496c8b28876", - "sha256:48217be1de7d29a5600b5c513f3f7664b21d32e596d69582be0a94e36b8309cb", - "sha256:5ada0438f5b74c3952d916c199367c29ee4d6858edff18eab783b3978d0db16d", - "sha256:5b78aa9f4f68212248aaf8943d84c0ff0f74efc65a661c2fc68b82d498311fd5", - "sha256:5cd20f58c29bbf2680039ff9f569fa6d21453fbd2fa84dbdb4092f006424c2e6", - "sha256:611068511b5531304137bcd7fe8117c985d1b828eb86043bd944cebb7fae3910", - "sha256:680b9a36029b30cf063698755d277885d4a0eab70a2c7c6e71aab601323cba45", - "sha256:6c5bad7c60a392850d2f0fee8f355953abaec878c483dd7c3836e0089f046bf6", - "sha256:6c7a596d0be71b7baa037f4ac10d5e057d276f65a9a611c46970f012752ebf2d", - "sha256:7f470327d06400a0aa7926b375b8e8c3c31d335e0884f509fe272b3c700a7254", - "sha256:86a6ed69a71fe6b88bf9331594fa390a2adda4a49b5c06f98e47bf0d392534f8", - "sha256:8dfc936870507da96aebb43e664ae3a71a7b96278382bcfe84d277b88e379b18", - "sha256:954d9735ee9c3fa74874c830d089a815b7b48df6f6b6e357a74130e478dbd951", - "sha256:9e56afce6431450442f3ab5973156289bd5ec33dd618941283847c9fd5ff06bf", - "sha256:a3012ab65ea42de1be81fff5fb28d6db893ef978950afc8130ba707179b4284a", - "sha256:ad862295ad3f644e3c2c0d8b10a988e1600d3123ecb48702d2c0f26771f1c396", - "sha256:b1d9d1bfd96eef3c3faedb73f486c89e44e64e40e5bfec304ee163de01cf996f", - "sha256:b86abba762ecfeea359112b2bb4490802b340850bbee1948f785141a5e020de8", - "sha256:b90053be91973a6fb6020a6e44382c97739736a5a9d74e08cc29b196639eb979", - "sha256:c4fbe6a766301f2e8a4519f4500fe74ef0a8509a59e07a4085458f26228cd7cc", - "sha256:ca891af9f3289d24a490a5fde664ea04fe2f4984cd97e26de7442a4251bd4b7c", - "sha256:cb0845e934647232b6ff5150df37ceffd0b67b754b9fdbb095233deebcddbd4a", - "sha256:ce850db091bf7d2a1f2fdb615220b968aeff3849007b1204bf6e3e50a57b3d32", - "sha256:d04e579e911562f1055d26dab1868d3e0bb905db3bccf664ee8ad109f035618a", - "sha256:d07ee7793f2aeb9b80ec8ceb96bc8cc08a2aec8a1b152da1955d64e4825fcbac", - "sha256:d177b7e82f6dd5e1aebd24d9c3297c70ce09cd1d5d37b43e53f39514379c029c", - "sha256:d7b5a3e2120982b8b6bd1d5d99e3025339f7fb8b8267551c679afb39e9c7c7f1", - "sha256:d873c21b356bfaf1589b89090a4011e6532582b3a8ea568a00e0c3aab09399dd", - "sha256:d997c5938a08b5e172c30583ba6b8aad657ed9901fc24caf3a7152eeccb2f1b4", - "sha256:dbcd77c4d94b23e0753c5ed8deba8c69f331d4fd83f68bfc9db58bc8983f49cd", - "sha256:e36aa62b765cf9f43a003233a8c2d7ffdeb55bc62eaa0a0380475b228663a38f", - "sha256:e97cf143d74a7a5a0f143aa34039b4fecf11343eed66538610debc438685db4a", - "sha256:eb15ef40b833f5b2f19eeae65d65e191f039e71790dd565c2af2a3783f72262f", - "sha256:ec1f5a328464daf7a1e4e385e4f5652dd9b1d12405075ccba1df842f7774b4fc", - "sha256:f9374e270e2553653d710ece397df67db9d19c60d2647bcd35bfc616f1622dcd", - "sha256:fa67d821c1fd268a5a87922ef4940442513b4e6c377553506b9db3b83beebbd8", - "sha256:fd8aafda7cdff03b905d4426b714601c0978725a19efc39f5f207b86d188ba01", - "sha256:ff2f1b7c963961d41403b650842dc2039175b906ab2093635d8319bef0b7d620" + "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96", + "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396", + "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb", + "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac", + "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704", + "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca", + "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe", + "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808", + "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4", + "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42", + "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc", + "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c", + "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238", + "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f", + "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740", + "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d", + "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327", + "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4", + "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e", + "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911", + "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac", + "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c", + "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e", + "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58", + "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4", + "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88", + "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be", + "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005", + "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc", + "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443", + "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1", + "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484", + "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1", + "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67", + "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203", + "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05", + "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227", + "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3", + "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449", + "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109", + "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b", + "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3", + "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9", + "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c", + "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa", + "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0", + "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298", + "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a", + "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9" ], "markers": "python_version >= '3.7'", - "version": "==2.0.27" + "version": "==2.0.31" }, "sqlparse": { "hashes": [ - "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3", - "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c" + "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93", + "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663" ], - "markers": "python_version >= '3.5'", - "version": "==0.4.4" + "markers": "python_version >= '3.8'", + "version": "==0.5.0" }, "tenacity": { "hashes": [ - "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a", - "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c" + "sha256:9e6f7cf7da729125c7437222f8a522279751cdfbe6b67bfe64f75d3a348661b2", + "sha256:cd80a53a79336edba8489e767f729e4f391c896956b57140b5d7511a64bbd3ef" ], - "markers": "python_version >= '3.7'", - "version": "==8.2.3" + "markers": "python_version >= '3.8'", + "version": "==8.4.2" }, "tiktoken": { "hashes": [ @@ -1830,19 +1889,19 @@ }, "tqdm": { "hashes": [ - "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9", - "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531" + "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644", + "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb" ], "markers": "python_version >= '3.7'", - "version": "==4.66.2" + "version": "==4.66.4" }, "typing-extensions": { "hashes": [ - "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", - "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" + "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", + "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], "markers": "python_version >= '3.8'", - "version": "==4.9.0" + "version": "==4.12.2" }, "typing-inspect": { "hashes": [ @@ -1859,6 +1918,90 @@ "markers": "python_version >= '2'", "version": "==2024.1" }, + "ujson": { + "hashes": [ + "sha256:0de4971a89a762398006e844ae394bd46991f7c385d7a6a3b93ba229e6dac17e", + "sha256:129e39af3a6d85b9c26d5577169c21d53821d8cf68e079060602e861c6e5da1b", + "sha256:22cffecf73391e8abd65ef5f4e4dd523162a3399d5e84faa6aebbf9583df86d6", + "sha256:232cc85f8ee3c454c115455195a205074a56ff42608fd6b942aa4c378ac14dd7", + "sha256:2544912a71da4ff8c4f7ab5606f947d7299971bdd25a45e008e467ca638d13c9", + "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd", + "sha256:26b0e2d2366543c1bb4fbd457446f00b0187a2bddf93148ac2da07a53fe51569", + "sha256:2987713a490ceb27edff77fb184ed09acdc565db700ee852823c3dc3cffe455f", + "sha256:29b443c4c0a113bcbb792c88bea67b675c7ca3ca80c3474784e08bba01c18d51", + "sha256:2a890b706b64e0065f02577bf6d8ca3b66c11a5e81fb75d757233a38c07a1f20", + "sha256:2aff2985cef314f21d0fecc56027505804bc78802c0121343874741650a4d3d1", + "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf", + "sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc", + "sha256:38d5d36b4aedfe81dfe251f76c0467399d575d1395a1755de391e58985ab1c2e", + "sha256:3ff201d62b1b177a46f113bb43ad300b424b7847f9c5d38b1b4ad8f75d4a282a", + "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539", + "sha256:4734ee0745d5928d0ba3a213647f1c4a74a2a28edc6d27b2d6d5bd9fa4319e27", + "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165", + "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126", + "sha256:57aaf98b92d72fc70886b5a0e1a1ca52c2320377360341715dd3933a18e827b1", + "sha256:59e02cd37bc7c44d587a0ba45347cc815fb7a5fe48de16bf05caa5f7d0d2e816", + "sha256:5b6fee72fa77dc172a28f21693f64d93166534c263adb3f96c413ccc85ef6e64", + "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8", + "sha256:604a046d966457b6cdcacc5aa2ec5314f0e8c42bae52842c1e6fa02ea4bda42e", + "sha256:618efd84dc1acbd6bff8eaa736bb6c074bfa8b8a98f55b61c38d4ca2c1f7f287", + "sha256:61d0af13a9af01d9f26d2331ce49bb5ac1fb9c814964018ac8df605b5422dcb3", + "sha256:61e1591ed9376e5eddda202ec229eddc56c612b61ac6ad07f96b91460bb6c2fb", + "sha256:621e34b4632c740ecb491efc7f1fcb4f74b48ddb55e65221995e74e2d00bbff0", + "sha256:6627029ae4f52d0e1a2451768c2c37c0c814ffc04f796eb36244cf16b8e57043", + "sha256:67079b1f9fb29ed9a2914acf4ef6c02844b3153913eb735d4bf287ee1db6e557", + "sha256:6dea1c8b4fc921bf78a8ff00bbd2bfe166345f5536c510671bccececb187c80e", + "sha256:6e32abdce572e3a8c3d02c886c704a38a1b015a1fb858004e03d20ca7cecbb21", + "sha256:7223f41e5bf1f919cd8d073e35b229295aa8e0f7b5de07ed1c8fddac63a6bc5d", + "sha256:73814cd1b9db6fc3270e9d8fe3b19f9f89e78ee9d71e8bd6c9a626aeaeaf16bd", + "sha256:7490655a2272a2d0b072ef16b0b58ee462f4973a8f6bbe64917ce5e0a256f9c0", + "sha256:7663960f08cd5a2bb152f5ee3992e1af7690a64c0e26d31ba7b3ff5b2ee66337", + "sha256:78778a3aa7aafb11e7ddca4e29f46bc5139131037ad628cc10936764282d6753", + "sha256:7c10f4654e5326ec14a46bcdeb2b685d4ada6911050aa8baaf3501e57024b804", + "sha256:7ec0ca8c415e81aa4123501fee7f761abf4b7f386aad348501a26940beb1860f", + "sha256:924f7318c31874d6bb44d9ee1900167ca32aa9b69389b98ecbde34c1698a250f", + "sha256:94a87f6e151c5f483d7d54ceef83b45d3a9cca7a9cb453dbdbb3f5a6f64033f5", + "sha256:98ba15d8cbc481ce55695beee9f063189dce91a4b08bc1d03e7f0152cd4bbdd5", + "sha256:a245d59f2ffe750446292b0094244df163c3dc96b3ce152a2c837a44e7cda9d1", + "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00", + "sha256:a65b6af4d903103ee7b6f4f5b85f1bfd0c90ba4eeac6421aae436c9988aa64a2", + "sha256:a984a3131da7f07563057db1c3020b1350a3e27a8ec46ccbfbf21e5928a43050", + "sha256:a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e", + "sha256:ab13a2a9e0b2865a6c6db9271f4b46af1c7476bfd51af1f64585e919b7c07fd4", + "sha256:ac56eb983edce27e7f51d05bc8dd820586c6e6be1c5216a6809b0c668bb312b8", + "sha256:ad88ac75c432674d05b61184178635d44901eb749786c8eb08c102330e6e8996", + "sha256:b0111b27f2d5c820e7f2dbad7d48e3338c824e7ac4d2a12da3dc6061cc39c8e6", + "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1", + "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f", + "sha256:ba17799fcddaddf5c1f75a4ba3fd6441f6a4f1e9173f8a786b42450851bd74f1", + "sha256:ba43cc34cce49cf2d4bc76401a754a81202d8aa926d0e2b79f0ee258cb15d3a4", + "sha256:baed37ea46d756aca2955e99525cc02d9181de67f25515c468856c38d52b5f3b", + "sha256:beeaf1c48e32f07d8820c705ff8e645f8afa690cca1544adba4ebfa067efdc88", + "sha256:c18610b9ccd2874950faf474692deee4223a994251bc0a083c114671b64e6518", + "sha256:c66962ca7565605b355a9ed478292da628b8f18c0f2793021ca4425abf8b01e5", + "sha256:caf270c6dba1be7a41125cd1e4fc7ba384bf564650beef0df2dd21a00b7f5770", + "sha256:cc6139531f13148055d691e442e4bc6601f6dba1e6d521b1585d4788ab0bfad4", + "sha256:d2c75269f8205b2690db4572a4a36fe47cd1338e4368bc73a7a0e48789e2e35a", + "sha256:d47ebb01bd865fdea43da56254a3930a413f0c5590372a1241514abae8aa7c76", + "sha256:d4dc2fd6b3067c0782e7002ac3b38cf48608ee6366ff176bbd02cf969c9c20fe", + "sha256:d7d0e0ceeb8fe2468c70ec0c37b439dd554e2aa539a8a56365fd761edb418988", + "sha256:d8640fb4072d36b08e95a3a380ba65779d356b2fee8696afeb7794cf0902d0a1", + "sha256:dee5e97c2496874acbf1d3e37b521dd1f307349ed955e62d1d2f05382bc36dd5", + "sha256:dfef2814c6b3291c3c5f10065f745a1307d86019dbd7ea50e83504950136ed5b", + "sha256:e1402f0564a97d2a52310ae10a64d25bcef94f8dd643fcf5d310219d915484f7", + "sha256:e7ce306a42b6b93ca47ac4a3b96683ca554f6d35dd8adc5acfcd55096c8dfcb8", + "sha256:e82d4bb2138ab05e18f089a83b6564fee28048771eb63cdecf4b9b549de8a2cc", + "sha256:ecb24f0bdd899d368b715c9e6664166cf694d1e57be73f17759573a6986dd95a", + "sha256:f00ea7e00447918ee0eff2422c4add4c5752b1b60e88fcb3c067d4a21049a720", + "sha256:f3caf9cd64abfeb11a3b661329085c5e167abbe15256b3b68cb5d914ba7396f3", + "sha256:f44bd4b23a0e723bf8b10628288c2c7c335161d6840013d4d5de20e48551773b", + "sha256:f77b74475c462cb8b88680471193064d3e715c7c6074b1c8c412cb526466efe9", + "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1", + "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746" + ], + "markers": "python_version >= '3.8'", + "version": "==5.10.0" + }, "uritemplate": { "hashes": [ "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0", @@ -1869,11 +2012,11 @@ }, "urllib3": { "hashes": [ - "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", - "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" + "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", + "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" ], - "markers": "python_version >= '3.6'", - "version": "==2.0.7" + "markers": "python_version >= '3.8'", + "version": "==2.2.2" }, "vine": { "hashes": [ @@ -1999,11 +2142,11 @@ "develop": { "asgiref": { "hashes": [ - "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e", - "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed" + "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", + "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590" ], - "markers": "python_version >= '3.7'", - "version": "==3.7.2" + "markers": "python_version >= '3.8'", + "version": "==3.8.1" }, "asttokens": { "hashes": [ @@ -2177,19 +2320,19 @@ }, "faker": { "hashes": [ - "sha256:0520a6b97e07c658b2798d7140971c1d5bc4bcd5013e7937fe075fd054aa320c", - "sha256:f07b64d27f67b62c7f0536a72f47813015b3b51cd4664918454011094321e464" + "sha256:0f60978314973de02c00474c2ae899785a42b2cf4f41b7987e93c132a2b8a4a9", + "sha256:886ee28219be96949cd21ecc96c4c742ee1680e77f687b095202c8def1a08f06" ], "markers": "python_version >= '3.8'", - "version": "==23.2.1" + "version": "==26.0.0" }, "filelock": { "hashes": [ - "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e", - "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c" + "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb", + "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7" ], "markers": "python_version >= '3.8'", - "version": "==3.13.1" + "version": "==3.15.4" }, "flake8": { "hashes": [ @@ -2211,11 +2354,11 @@ }, "identify": { "hashes": [ - "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791", - "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e" + "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa", + "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d" ], "markers": "python_version >= '3.8'", - "version": "==2.5.35" + "version": "==2.5.36" }, "ipdb": { "hashes": [ @@ -2228,11 +2371,11 @@ }, "ipython": { "hashes": [ - "sha256:1050a3ab8473488d7eee163796b02e511d0735cf43a04ba2a8348bd0f2eaf8a5", - "sha256:48fbc236fbe0e138b88773fa0437751f14c3645fb483f1d4c5dee58b37e5ce73" + "sha256:1cec0fbba8404af13facebe83d04436a7434c7400e59f47acf467c64abd0956c", + "sha256:e6b347c27bdf9c32ee9d31ae85defc525755a1869f14057e900675b9e8d6e6ff" ], "markers": "python_version >= '3.11'", - "version": "==8.21.0" + "version": "==8.26.0" }, "isort": { "hashes": [ @@ -2252,11 +2395,11 @@ }, "matplotlib-inline": { "hashes": [ - "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", - "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" + "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", + "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca" ], - "markers": "python_version >= '3.5'", - "version": "==0.1.6" + "markers": "python_version >= '3.8'", + "version": "==0.1.7" }, "mccabe": { "hashes": [ @@ -2276,11 +2419,11 @@ }, "nodeenv": { "hashes": [ - "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2", - "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec" + "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", + "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==1.8.0" + "version": "==1.9.1" }, "packaging": { "hashes": [ @@ -2292,11 +2435,11 @@ }, "parso": { "hashes": [ - "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", - "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" + "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", + "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d" ], "markers": "python_version >= '3.6'", - "version": "==0.8.3" + "version": "==0.8.4" }, "pathspec": { "hashes": [ @@ -2311,16 +2454,16 @@ "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" ], - "markers": "sys_platform != 'win32'", + "markers": "sys_platform != 'win32' and sys_platform != 'emscripten'", "version": "==4.9.0" }, "platformdirs": { "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", + "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "version": "==4.2.2" }, "pre-commit": { "hashes": [ @@ -2333,11 +2476,11 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d", - "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6" + "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10", + "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.0.43" + "version": "==3.0.47" }, "psycopg": { "extras": [ @@ -2452,19 +2595,19 @@ }, "pygments": { "hashes": [ - "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", - "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" + "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" ], - "markers": "python_version >= '3.7'", - "version": "==2.17.2" + "markers": "python_version >= '3.8'", + "version": "==2.18.0" }, "python-dateutil": { "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.2" + "version": "==2.9.0.post0" }, "pyyaml": { "hashes": [ @@ -2523,14 +2666,6 @@ "markers": "python_version >= '3.6'", "version": "==6.0.1" }, - "setuptools": { - "hashes": [ - "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401", - "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6" - ], - "markers": "python_version >= '3.8'", - "version": "==69.1.0" - }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", @@ -2541,11 +2676,11 @@ }, "sqlparse": { "hashes": [ - "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3", - "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c" + "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93", + "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663" ], - "markers": "python_version >= '3.5'", - "version": "==0.4.4" + "markers": "python_version >= '3.8'", + "version": "==0.5.0" }, "stack-data": { "hashes": [ @@ -2556,27 +2691,27 @@ }, "traitlets": { "hashes": [ - "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74", - "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e" + "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", + "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f" ], "markers": "python_version >= '3.8'", - "version": "==5.14.1" + "version": "==5.14.3" }, "typing-extensions": { "hashes": [ - "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", - "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" + "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", + "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], "markers": "python_version >= '3.8'", - "version": "==4.9.0" + "version": "==4.12.2" }, "virtualenv": { "hashes": [ - "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3", - "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b" + "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a", + "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589" ], "markers": "python_version >= '3.7'", - "version": "==20.25.0" + "version": "==20.26.3" }, "watchdog": { "hashes": [ diff --git a/Procfile b/Procfile deleted file mode 100644 index 89db3785..00000000 --- a/Procfile +++ /dev/null @@ -1,4 +0,0 @@ -release: python manage.py migrate -web: gunicorn core.wsgi:application --timeout 180 -# worker: REMAP_SIGTERM=SIGQUIT celery -A core.celery_app worker --loglevel=info -# beat: REMAP_SIGTERM=SIGQUIT celery -A core.celery_app beat --loglevel=info diff --git a/README.md b/README.md index 81cdb372..1146e68f 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,49 @@ # Ayushma AI -This is a Django Project. +Empowering Nurses with Multilingual ICU Protocols. Leveraging the rapid advancements in AI technology, created multilingual interfaces that assist nurses in rapidly upgrading their knowledge about ICU protocols. This is a Django project. ## Requirements -- Python 3.8 -- Postgres 15 - OpenAI Account with a valid API Key -- Pinecone Account with a valid API Key +- Docker ## Optional Requirements -- Docker +- Pinecone Account with a valid API Key - AWS SES Accout - AWS S3 Account - Google Cloud account with access to speech to text API -## Installation +## Running the Project -create a virtual environment and install the requirements +> We strongly recommend using Docker to run the project. Manual methods are not supported at the moment. ```bash -pip3 install --user virtualenv -virtualenv .venv -source .venv/bin/activate -pip3 install -r requirements/local.txt +make up ``` ## Env Variables -You can add these at the end of your `activate` file in `[virtualenvfolder] -> bin` like `export [env] = [value]` - -| Variable | Description -| --- | --- -| AI_NAME | Name of the AI (default: Ayushma) -| OPENAI_API_KEY | OpenAI API Key -| PINECONE_API_KEY | Pinecone API Key -| PINECONE_ENVIRONMENT | Pinecone Environment -| PINECONE_INDEX | Pinecone Index -| CURRENT_DOMAIN | Current Domain where the frontend is hosted. ex. `https://ayushma.ohc.network` -| EMAIL_HOST | SES Email Host (Optional) -| EMAIL_USER | SES Email User (Optional) -| EMAIL_PASSWORD | SES Email Password (Optional) -| GOOGLE_APPLICATION_CREDENTIALS | Google Cloud Credentials (Optional). These should be in a file named `gc_credential.json` in the root of the project -| S3_SECRET_KEY | AWS S3 Secret Key (Optional) -| S3_KEY_ID | AWS S3 Key ID (Optional) -| S3_BUCKET_NAME | AWS S3 Bucket Name (Optional) -| S3_REGION | AWS S3 Region (Optional) -| GOOGLE_RECAPTCHA_SECRET_KEY | Google Recaptcha Secret Key (Optional) +Add these environment variables to your `.env` file. + +| Variable | Description | +| ------------------------------ | -------------------------------------------------------------------------------------------------------------------- | +| AI_NAME | Name of the AI (default: Ayushma) | +| OPENAI_API_KEY | OpenAI API Key | +| PINECONE_API_KEY | Pinecone API Key | +| PINECONE_INDEX | Pinecone Index | +| VECTOR_DB | The Vector DB you would like to choose. "milvus" (default) or "pinecone" | +| CURRENT_DOMAIN | Current Domain where the frontend is hosted. ex. `https://ayushma.ohc.network` | +| EMAIL_HOST | SES Email Host (Optional) | +| EMAIL_USER | SES Email User (Optional) | +| EMAIL_PASSWORD | SES Email Password (Optional) | +| GOOGLE_APPLICATION_CREDENTIALS | Google Cloud Credentials (Optional). These should be in a file named `gc_credential.json` in the root of the project | +| S3_SECRET_KEY | AWS S3 Secret Key (Optional) | +| S3_KEY_ID | AWS S3 Key ID (Optional) | +| S3_BUCKET_NAME | AWS S3 Bucket Name (Optional) | +| S3_REGION | AWS S3 Region (Optional) | +| GOOGLE_RECAPTCHA_SECRET_KEY | Google Recaptcha Secret Key (Optional) | + +## Google Cloud + +To use Google Cloud Speech to Text API, you need to enable the API and create a service account. Download the credentials and save them in a file named `gc_credential.json` in the root of the project. diff --git a/ayushma/management/__init__.py b/ayushma/management/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ayushma/management/commands/upsert.py b/ayushma/management/commands/upsert.py deleted file mode 100644 index 69694318..00000000 --- a/ayushma/management/commands/upsert.py +++ /dev/null @@ -1,83 +0,0 @@ -import hashlib -import os - -import pinecone -from django.conf import settings -from django.core.management.base import BaseCommand -from PyPDF2 import PdfReader -from tqdm.auto import tqdm - -from ayushma.utils.openaiapi import get_embedding - - -def read_document(filepath): - if filepath.endswith(".pdf"): # Handle pdf files - pdf_reader = PdfReader(filepath) - text = "" - for i in range(len(pdf_reader.pages)): - page = pdf_reader.pages[i] - text += page.extract_text() - document_text = text - else: - with open(filepath, "r") as f: # Handle txt and md files - document_text = f.read() - - return document_text - - -class Command(BaseCommand): - help = "Upserts data to Pinecone index" - - def handle(self, *args, **options): - upsert_dir = "upsert" - pinecone.init( - api_key=settings.PINECONE_API_KEY, - environment=settings.PINECONE_ENVIRONMENT, - ) - print("Initialized Pinecone and OpenAI") - - for filename in os.listdir(upsert_dir): - if filename == ".gitkeep": - continue - print(f"Processing {filename}...") - - filepath = os.path.join(upsert_dir, filename) - filename_md5 = hashlib.md5(filename.encode()).hexdigest() - - print(f"Md5 of {filename} is {filename_md5}") - - document_lines = read_document(filepath).splitlines() - - batch_size = 100 # process everything in batches of 100 (creates 100 vectors per upset) - - print("Fetching Pinecone index...") - if settings.PINECONE_INDEX not in pinecone.list_indexes(): - pinecone.create_index( - settings.PINECONE_INDEX, - dimension=1536, # 1536 is the dimension of the text-embedding-ada-002 model - ) - pinecone_index = pinecone.Index(index_name=settings.PINECONE_INDEX) - - print(f"Upserting {filename} to Pinecone index...") - - for i in tqdm(range(0, len(document_lines), batch_size)): - i_end = min( - i + batch_size, len(document_lines) - ) # set end position of batch - lines_batch = document_lines[ - i : i + batch_size - ] # get batch of lines and IDs - lines_batch = [ - line.strip() for line in lines_batch if line.strip() - ] # remove blank lines - ids_batch = [str(n) for n in range(i, i_end)] # create IDs - embeds = get_embedding(lines_batch) # create embeddings - meta = [ - {"text": line} for line in lines_batch - ] # prep metadata and upsert batch - to_upsert = zip(ids_batch, embeds, meta) # zip together - pinecone_index.upsert( - vectors=list(to_upsert), namespace=filename_md5 - ) # upsert to Pinecone - - print(f"Finished upserting {filename} to Pinecone index") diff --git a/ayushma/migrations/0053_alter_chat_model_alter_project_model.py b/ayushma/migrations/0053_alter_chat_model_alter_project_model.py new file mode 100644 index 00000000..ffcfe757 --- /dev/null +++ b/ayushma/migrations/0053_alter_chat_model_alter_project_model.py @@ -0,0 +1,46 @@ +# Generated by Django 4.2.6 on 2024-07-02 16:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ayushma", "0052_document_failed"), + ] + + operations = [ + migrations.AlterField( + model_name="chat", + name="model", + field=models.IntegerField( + blank=True, + choices=[ + (1, "Gpt 3 5"), + (2, "Gpt 3 5 16K"), + (3, "Gpt 4"), + (4, "Gpt 4 32K"), + (5, "Gpt 4 Visual"), + (6, "Gpt 4 Turbo"), + (7, "Gpt 4 Omni"), + ], + null=True, + ), + ), + migrations.AlterField( + model_name="project", + name="model", + field=models.IntegerField( + choices=[ + (1, "Gpt 3 5"), + (2, "Gpt 3 5 16K"), + (3, "Gpt 4"), + (4, "Gpt 4 32K"), + (5, "Gpt 4 Visual"), + (6, "Gpt 4 Turbo"), + (7, "Gpt 4 Omni"), + ], + default=1, + ), + ), + ] diff --git a/ayushma/models/enums.py b/ayushma/models/enums.py index 0a856e94..eea3c919 100644 --- a/ayushma/models/enums.py +++ b/ayushma/models/enums.py @@ -47,6 +47,7 @@ class ModelType(IntegerChoices): GPT_4_32K = 4 GPT_4_VISUAL = 5 GPT_4_TURBO = 6 + GPT_4_OMNI = 7 class StatusChoices(IntegerChoices): diff --git a/ayushma/utils/langchain.py b/ayushma/utils/langchain.py index 22449090..56bf63a7 100644 --- a/ayushma/utils/langchain.py +++ b/ayushma/utils/langchain.py @@ -2,13 +2,14 @@ import openai from django.conf import settings -from langchain import LLMChain, PromptTemplate from langchain.callbacks.manager import AsyncCallbackManager +from langchain.chains import LLMChain from langchain.chat_models import ChatOpenAI from langchain.llms import AzureOpenAI from langchain.prompts import ( ChatPromptTemplate, MessagesPlaceholder, + PromptTemplate, SystemMessagePromptTemplate, ) from langchain.prompts.chat import BaseStringMessagePromptTemplate @@ -38,6 +39,8 @@ def get_model_name(model_type: ModelType): return "gpt-4-vision-preview" elif model_type == ModelType.GPT_4_TURBO: return "gpt-4-1106-preview" + elif model_type == ModelType.GPT_4_OMNI: + return "gpt-4o" else: if settings.OPENAI_API_TYPE == "azure": return settings.AZURE_CHAT_MODEL diff --git a/ayushma/utils/openaiapi.py b/ayushma/utils/openaiapi.py index c82da95d..d90d1ec3 100644 --- a/ayushma/utils/openaiapi.py +++ b/ayushma/utils/openaiapi.py @@ -10,7 +10,6 @@ from django.conf import settings from langchain.schema import AIMessage, HumanMessage from openai import OpenAI -from pinecone import QueryResponse from ayushma.models import ChatMessage from ayushma.models.chat import Chat @@ -18,6 +17,7 @@ from ayushma.models.enums import ChatMessageType, ModelType from ayushma.utils.langchain import LangChainHelper from ayushma.utils.language_helpers import text_to_speech, translate_text +from ayushma.utils.vectordb import VectorDB from core.settings.base import AI_NAME @@ -67,39 +67,6 @@ def get_embedding( return [record.embedding for record in res.data] -def get_sanitized_reference(pinecone_references: List[QueryResponse]) -> str: - """ - Extracts the text from the Pinecone QueryResponse object and sanitizes it. - - Args: - pinecone_reference (List[QueryResponse]): The similar documents retrieved from - the Pinecone index. - - Returns: - A string containing the document id and text from the Pinecone QueryResponse object. - - Example usage: - >>> get_sanitized_reference([QueryResponse(...), QueryResponse(...)]) - "{'28': 'Hello how are you, I am fine, thank you.', '21': 'How was your day?, Mine was good.'}" - """ - sanitized_reference = {} - - for reference in pinecone_references: - for match in reference.matches: - try: - document_id = str(match.metadata["document"]) - text = str(match.metadata["text"]).replace("\n", " ") + "," - if document_id in sanitized_reference: - sanitized_reference[document_id] += text - else: - sanitized_reference[document_id] = text - except Exception as e: - print(f"Error extracting reference: {e}") - pass - - return json.dumps(sanitized_reference) - - def num_tokens_from_string(string: str, encoding_name: str) -> int: """Returns the number of tokens in a text string.""" encoding = tiktoken.get_encoding(encoding_name) @@ -155,18 +122,18 @@ def get_reference(text, openai_key, namespace, top_k): raise Exception( "[Reference] Error generating embeddings for split text" ) - # find similar embeddings from pinecone index for each embedding - pinecone_references: List[QueryResponse] = [] - - for embedding in embeddings: - similar: QueryResponse = settings.PINECONE_INDEX_INSTANCE.query( - vector=embedding, - top_k=int(top_k), - namespace=namespace, - include_metadata=True, - ) - pinecone_references.append(similar) - return get_sanitized_reference(pinecone_references=pinecone_references) + # find similar embeddings from vector index for each embedding + + flat_embeddings = [item for sublist in embeddings for item in sublist] + vdb = VectorDB() + similar = vdb.search( + embeddings=flat_embeddings, + partition_name=namespace, + limit=int(top_k), + ) + + print("References fetched") + return vdb.sanitize(similar) def add_reference_documents(chat_message): @@ -299,7 +266,7 @@ def converse( reference = get_reference( english_text, openai_key, - str(chat.project.external_id), + str(chat.project.external_id).replace("-", "_"), match_number, ) except Exception as e: diff --git a/ayushma/utils/upsert.py b/ayushma/utils/upsert.py index 13727e17..252730cd 100644 --- a/ayushma/utils/upsert.py +++ b/ayushma/utils/upsert.py @@ -2,13 +2,13 @@ from io import BytesIO from typing import Optional -import pinecone import requests from bs4 import BeautifulSoup from django.conf import settings from PyPDF2 import PdfReader from ayushma.utils.openaiapi import get_embedding +from ayushma.utils.vectordb import VectorDB def read_document(url): @@ -42,10 +42,10 @@ def upsert( text: Optional[str] = None, ): """ - Upserts the contents of a file, URL, or text to a Pinecone index with the specified external ID. + Upserts the contents of a file, URL, or text to a vector index with the specified external ID. Args: - external_id (str): The external ID to use when upserting to the Pinecone index. + external_id (str): The external ID to use when upserting to the vector index. document_id (int): The external_id of the document that is to be upserted (external_id of the doc is added to the metadata) s3_url (str, optional): The S3 URL of the file to upsert. Defaults to None. url (str, optional): The URL of the website to upsert. Defaults to None. @@ -57,11 +57,6 @@ def upsert( Returns: None """ - pinecone.init( - api_key=settings.PINECONE_API_KEY, - environment=settings.PINECONE_ENVIRONMENT, - ) - print("Initialized Pinecone and OpenAI") print("Processing...") @@ -90,31 +85,22 @@ def upsert( 100 # process everything in batches of 100 (creates 100 vectors per upset) ) - print("Fetching Pinecone index...") - if settings.PINECONE_INDEX not in pinecone.list_indexes(): - pinecone.create_index( - settings.PINECONE_INDEX, - dimension=1536, # 1536 is the dimension of the text-embedding-ada-002 model - ) - pinecone_index = pinecone.Index(index_name=settings.PINECONE_INDEX) - - print("Upserting to Pinecone index...") + print("Upserting to vector collection...") for i in range(0, len(document_lines), batch_size): - i_end = min(i + batch_size, len(document_lines)) # set end position of batch lines_batch = document_lines[i : i + batch_size] # get batch of lines and IDs lines_batch = [ line.strip() for line in lines_batch if line.strip() ] # remove blank lines - ids_batch = [f"{document_id}_{n}" for n in range(i, i_end)] # create IDs - - embeds = get_embedding(lines_batch) # create embeddings - meta = [ - {"text": line, "document": str(document_id)} for line in lines_batch - ] # prep metadata and upsert batch - to_upsert = zip(ids_batch, embeds, meta) # zip together - pinecone_index.upsert( - vectors=list(to_upsert), namespace=str(external_id) - ) # upsert to Pinecone - - print("Finished upserting to Pinecone index") + + embeds = get_embedding(lines_batch) + partition_name = str(external_id).replace("-", "_") + + VectorDB().insert( + vectors=embeds, + texts=lines_batch, + subject=str(document_id), + partition_name=partition_name, + ) + + print("Finished upserting to vectorDB") diff --git a/ayushma/utils/vectordb.py b/ayushma/utils/vectordb.py new file mode 100644 index 00000000..95657846 --- /dev/null +++ b/ayushma/utils/vectordb.py @@ -0,0 +1,215 @@ +import json +from abc import ABC, abstractmethod + +from django.conf import settings +from pinecone import Pinecone +from pymilvus import MilvusClient + + +class AbstractVectorDB(ABC): + + client = None + collection_name = None + dimensions = 1536 + top_k = 10 + + @abstractmethod + def initialize(self) -> None: + pass + + @abstractmethod + def get_or_create_partition(self, partition_name: str): + pass + + @abstractmethod + def insert(self, vectors, texts, subject, partition_name): + pass + + @abstractmethod + def get_or_create_collection(self, collection_name: str = None): + pass + + @abstractmethod + def sanitize(self, references): + pass + + @abstractmethod + def delete_partition(self, partition_name): + pass + + @abstractmethod + def delete_subject(self, subject, partition_name): + pass + + @abstractmethod + def search(self, embeddings, partition_name, limit=None): + pass + + +class MilvusVectorDB(AbstractVectorDB): + collection_name = settings.MILVUS_COLLECTION + + def initialize(self) -> None: + self.client = MilvusClient( + uri=settings.MILVUS_URL, + ) + self.get_or_create_collection() + + def get_or_create_partition(self, partition_name: str): + partitions = self.client.list_partitions(collection_name=self.collection_name) + if partition_name not in partitions: + self.client.create_partition( + collection_name=self.collection_name, partition_name=partition_name + ) + + def insert(self, vectors, texts, subject, partition_name): + + self.get_or_create_partition(partition_name) + + data = [ + {"id": i, "vector": vectors[i], "text": texts[i], "subject": subject} + for i in range(len(vectors)) + ] + + self.client.insert( + collection_name=self.collection_name, + data=data, + partition_name=partition_name, + ) + + def get_or_create_collection(self, collection_name: str = None): + if collection_name is None: + collection_name = self.collection_name + if not self.client.has_collection(collection_name=collection_name): + self.client.create_collection( + collection_name=collection_name, + dimension=self.dimensions, + ) + + def search(self, embeddings, partition_name, limit=None): + self.get_or_create_partition(partition_name) + + results = self.client.search( + collection_name=self.collection_name, + partition_names=[partition_name], + data=embeddings, + top_k=limit or self.top_k, + output_fields=["text", "subject"], + ) + return results[0] + + def sanitize(self, references): + sanitized_reference = {} + + for reference in references: + try: + document_id = str(reference["entity"]["subject"]) + text = str(reference["entity"]["text"]).replace("\n", " ") + "," + if document_id in sanitized_reference: + sanitized_reference[document_id] += text + else: + sanitized_reference[document_id] = text + except Exception as e: + print(f"Error extracting reference: {e}") + pass + + return json.dumps(sanitized_reference) + + def delete_partition(self, partition_name): + self.client.drop_partition( + collection_name=self.collection_name, partition_name=partition_name + ) + + def delete_subject(self, subject, partition_name): + self.client.delete( + collection_name=self.collection_name, + partition_name=partition_name, + filter='subject in ["' + str(subject) + '"]', + ) + + +class PineconeVectorDB(AbstractVectorDB): + collection_name = settings.PINECONE_INDEX + + def initialize(self): + self.client = Pinecone( + api_key=settings.PINECONE_API_KEY, + ) + self.get_or_create_collection() + + def get_or_create_partition(self, partition_name): + pass + + def insert(self, vectors, texts, subject, partition_name): + meta = [{"text": texts[i], "document": subject} for i in range(len(vectors))] + ids = [str(i) for i in range(len(vectors))] + data = zip(ids, vectors, meta) + + self.client.Index(self.collection_name).upsert( + vectors=data, + namespace=partition_name, + ) + + def get_or_create_collection(self, collection_name=None): + if collection_name is None: + collection_name = self.collection_name + indexes = self.client.list_indexes().get("indexes", []) + print("Indexes", indexes) + index_names = [index["name"] for index in indexes] + if collection_name not in index_names: + self.client.create_index( + name=collection_name, + dimension=self.dimensions, + ) + + def search(self, embeddings, partition_name, limit=None): + index = self.client.Index(self.collection_name) + result = index.query( + vector=embeddings, + namespace=partition_name, + top_k=limit or self.top_k, + include_metadata=True, + ) + return result.matches + + def sanitize(self, references): + sanitized_reference = {} + for match in references: + try: + document_id = str(match.metadata["document"]) + text = str(match.metadata["text"]).replace("\n", " ") + "," + if document_id in sanitized_reference: + sanitized_reference[document_id] += text + else: + sanitized_reference[document_id] = text + except Exception as e: + print(f"Error extracting reference: {e}") + pass + + return json.dumps(sanitized_reference) + + def delete_partition(self, partition_name): + index = self.client.Index(self.collection_name) + index.delete(namespace=partition_name, deleteAll=True) + + def delete_subject(self, subject, partition_name): + index = self.client.Index(self.collection_name) + index.delete( + namespace=partition_name, + filter={"document": subject}, + ) + + +class VectorDB: + def __init__(self): + vector_db_type = settings.VECTOR_DB.lower() + if vector_db_type == "milvus": + self.vector_db = MilvusVectorDB() + elif vector_db_type == "pinecone": + self.vector_db = PineconeVectorDB() + else: + raise ValueError(f"Unsupported VECTOR_DB type: {settings.VECTOR_DB}") + self.vector_db.initialize() + + def __getattr__(self, name): + return getattr(self.vector_db, name) diff --git a/ayushma/views/chat.py b/ayushma/views/chat.py index 4c7818dc..ac4f591e 100644 --- a/ayushma/views/chat.py +++ b/ayushma/views/chat.py @@ -104,7 +104,9 @@ def perform_create(self, serializer): ) @action(detail=True, methods=["get"]) def feedbacks(self, *args, **kwarg): - q = ChatFeedback.objects.filter(chat_message__chat__external_id=kwarg["external_id"]) + q = ChatFeedback.objects.filter( + chat_message__chat__external_id=kwarg["external_id"] + ) serialized_data = ChatFeedbackSerializer(q, many=True).data return Response( {"data": serialized_data}, diff --git a/ayushma/views/document.py b/ayushma/views/document.py index c9a5901d..fc3e2d40 100644 --- a/ayushma/views/document.py +++ b/ayushma/views/document.py @@ -1,4 +1,3 @@ -from django.conf import settings from rest_framework.exceptions import ValidationError from rest_framework.mixins import ( CreateModelMixin, @@ -14,6 +13,7 @@ from ayushma.models.testsuite import TestQuestion from ayushma.serializers.document import DocumentSerializer, DocumentUpdateSerializer from ayushma.tasks.upsertdoc import upsert_doc +from ayushma.utils.vectordb import VectorDB from utils.views.base import BaseModelViewSet from utils.views.mixins import PartialUpdateModelMixin @@ -58,6 +58,8 @@ def perform_create(self, serializer): doc_url = None try: doc_url = self.request.build_absolute_uri(document.file.url) + # replace localhost with "django" (docker service name) for celery worker to access the file. This is a hack, feel free to improve. + doc_url = doc_url.replace("http://localhost", "http://django") except Exception as e: print(e) pass @@ -66,18 +68,19 @@ def perform_create(self, serializer): def perform_destroy(self, instance): # delete namespace from vectorDB + try: - settings.PINECONE_INDEX_INSTANCE.delete( - namespace=self.kwargs["project_external_id"], - filter={"document": str(instance.external_id)}, + VectorDB().delete_subject( + partition_name=self.kwargs["project_external_id"].replace("-", "_"), + subject=str(instance.external_id), ) + return super().perform_destroy(instance) except Exception as e: print(e) return Response( {"non_field_errors": "Error deleting document from vectorDB"}, status=400, ) - return super().perform_destroy(instance) class TestQuestionDocumentViewSet( diff --git a/ayushma/views/project.py b/ayushma/views/project.py index 091be342..1163844d 100644 --- a/ayushma/views/project.py +++ b/ayushma/views/project.py @@ -14,6 +14,7 @@ from ayushma.models import Project from ayushma.serializers.project import ProjectSerializer, ProjectUpdateSerializer +from ayushma.utils.vectordb import VectorDB from utils.views.base import BaseModelViewSet from utils.views.mixins import PartialUpdateModelMixin @@ -68,9 +69,8 @@ def perform_create(self, serializer): def perform_destroy(self, instance): # delete namespaces from vectorDB try: - settings.PINECONE_INDEX_INSTANCE.delete( - namespace=str(instance.external_id), - deleteAll=True, + VectorDB().delete_partition( + partition_name=str(instance.external_id).replace("-", "_") ) except Exception as e: print(e) diff --git a/compose/production/milvus/embedEtcd.yaml b/compose/production/milvus/embedEtcd.yaml new file mode 100644 index 00000000..0142678d --- /dev/null +++ b/compose/production/milvus/embedEtcd.yaml @@ -0,0 +1,5 @@ +listen-client-urls: http://0.0.0.0:2379 +advertise-client-urls: http://0.0.0.0:2379 +quota-backend-bytes: 4294967296 +auto-compaction-mode: revision +auto-compaction-retention: "1000" diff --git a/core/settings/base.py b/core/settings/base.py index 0c92e48a..8def4091 100644 --- a/core/settings/base.py +++ b/core/settings/base.py @@ -6,7 +6,6 @@ import environ import openai -import pinecone from corsheaders.defaults import default_headers from django.urls import reverse_lazy @@ -41,7 +40,7 @@ DATABASES = { "default": env.db( "DATABASE_URL", - default="postgres://postgres:postgres@localhost:5432/ayushma", + default="postgres://debug:debug@postgres/ayushma", ) } @@ -243,7 +242,7 @@ # http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-broker_url CELERY_BROKER_URL = env( "CELERY_BROKER_URL", - default=env("REDIS_URL", default="redis://localhost:6379/0"), + default=env("REDIS_URL", default="redis://redis:6379/0"), ) # http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-result_backend CELERY_RESULT_BACKEND = CELERY_BROKER_URL @@ -349,11 +348,13 @@ # Pinecone PINECONE_API_KEY = env("PINECONE_API_KEY", default="") -PINECONE_ENVIRONMENT = env("PINECONE_ENVIRONMENT", default="") PINECONE_INDEX = env("PINECONE_INDEX", default="") -pinecone.init(api_key=PINECONE_API_KEY, environment=PINECONE_ENVIRONMENT) -PINECONE_INDEX_INSTANCE = pinecone.Index(index_name=PINECONE_INDEX) +VECTOR_DB = env("VECTOR_DB", default="milvus") + +# Milvus +MILVUS_URL = env("MILVUS_URL", default="http://milvus:19530") +MILVUS_COLLECTION = env("MILVUS_COLLECTION", default="ayushma") # S3 AWS_STORAGE_BUCKET_NAME = env("S3_BUCKET_NAME", default=None) diff --git a/core/settings/production.py b/core/settings/production.py index 6b76cfa7..8077d14e 100644 --- a/core/settings/production.py +++ b/core/settings/production.py @@ -30,7 +30,7 @@ CACHES = { "default": { "BACKEND": "django.core.cache.backends.redis.RedisCache", - "LOCATION": env("REDIS_URL", default="redis://localhost:6379/"), + "LOCATION": env("REDIS_URL", default="redis://redis:6379/"), } } diff --git a/docker-compose.local.yaml b/docker-compose.local.yaml index eaac25a6..7973050c 100644 --- a/docker-compose.local.yaml +++ b/docker-compose.local.yaml @@ -3,6 +3,7 @@ version: '3' volumes: ayushma_local_postgres_data: {} ayushma_local_postgres_data_backups: {} + ayushma_local_milvus_data: {} services: django: &django @@ -21,6 +22,8 @@ services: ports: - "8000:8000" command: /start + networks: + - default postgres: build: @@ -32,9 +35,13 @@ services: - ayushma_local_postgres_data_backups:/backups:z env_file: - ./.envs/.local/.postgres + networks: + - default redis: image: redis:6 + networks: + - default celeryworker: <<: *django @@ -45,3 +52,24 @@ services: <<: *django ports: [] command: /start-celerybeat + + milvus: + image: milvusdb/milvus:v2.4.5 + container_name: milvus-standalone + environment: + - ETCD_USE_EMBED=true + - ETCD_DATA_DIR=/var/lib/milvus/etcd + - ETCD_CONFIG_PATH=/milvus/configs/embedEtcd.yaml + - COMMON_STORAGETYPE=local + volumes: + - ayushma_local_milvus_data:/var/lib/milvus + - ./compose/production/milvus/embedEtcd.yaml:/milvus/configs/embedEtcd.yaml + command: ["milvus", "run", "standalone"] + security_opt: + - seccomp:unconfined + networks: + - default + +networks: + default: + name: ayushma_local diff --git a/docker-compose.production.yaml b/docker-compose.production.yaml index ef55f10c..f3e20a32 100644 --- a/docker-compose.production.yaml +++ b/docker-compose.production.yaml @@ -3,6 +3,7 @@ version: '3' volumes: production_postgres_data: {} production_postgres_data_backups: {} + production_milvus_data: {} services: django: &django @@ -19,6 +20,8 @@ services: ports: - "8000:8000" command: /start + networks: + - default postgres: build: @@ -30,9 +33,13 @@ services: - production_postgres_data_backups:/backups:z env_file: - ./.envs/.production/.postgres + networks: + - default redis: image: redis:6 + networks: + - default celeryworker: <<: *django @@ -43,3 +50,24 @@ services: <<: *django ports: [] command: /start-celerybeat + + milvus: + image: milvusdb/milvus:v2.4.5 + container_name: milvus-standalone + environment: + - ETCD_USE_EMBED=true + - ETCD_DATA_DIR=/var/lib/milvus/etcd + - ETCD_CONFIG_PATH=/milvus/configs/embedEtcd.yaml + - COMMON_STORAGETYPE=local + volumes: + - production_milvus_data:/var/lib/milvus + - ./compose/production/milvus/embedEtcd.yaml:/milvus/configs/embedEtcd.yaml + command: ["milvus", "run", "standalone"] + security_opt: + - seccomp:unconfined + networks: + - default + +networks: + default: + name: ayushma_production diff --git a/example.env b/example.env index 724fc5e5..0ecedda9 100644 --- a/example.env +++ b/example.env @@ -7,9 +7,7 @@ AZURE_CHAT_MODEL= AZURE_EMBEDDING_DEPLOYMENT= STT_API_KEY= PINECONE_INDEX= -PINECONE_ENVIRONMENT= PINECONE_API_KEY= -DATABASE_URL= GOOGLE_APPLICATION_CREDENTIALS=./gc_credential.json S3_SECRET_KEY= S3_KEY_ID= diff --git a/prompt-example.txt b/prompt-example.txt new file mode 100644 index 00000000..c3d6f47b --- /dev/null +++ b/prompt-example.txt @@ -0,0 +1,13 @@ +You are a female assistant called Ayushma who understands all languages and responds only in English and you must follow the given algorithm strictly to assist the user. Remember you must give accurate answers, so stick strictly to the references as explained in algorithm. Give detailed response without going out of the references provided. +Your output must be in markdown format find important terms and add bold to it (example **word**) find numbers and add italic to it(example *word*) add bullet points to a list(example -word1\n-word2): + +references = {reference} + +- Analyze the given "references" and current user's query and return a response if "references" strictly contains the information to solve the current query else return "Sorry I am not able to find anything related to your query in my database". +- Analyze "chat history with user" and "query" and generate an appropriate result for the "query" +- Analyze "references", chat history with user and user's current query to give the most descriptive and most accurate answer to solve the user's query. + +Output Format (follow the below format strictly and you must provide the references ids array in all your responses after the result. Do not mention about the references anywhere else): + +Ayushma: +References: From d60c51a03d963aa04b43be413d4d3fa3f26fb28b Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Wed, 24 Jul 2024 21:49:39 +0530 Subject: [PATCH 08/12] added gpt 4 o mini --- ...54_alter_chat_model_alter_project_model.py | 48 +++++++++++++++++++ ayushma/models/enums.py | 1 + ayushma/utils/langchain.py | 5 +- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 ayushma/migrations/0054_alter_chat_model_alter_project_model.py diff --git a/ayushma/migrations/0054_alter_chat_model_alter_project_model.py b/ayushma/migrations/0054_alter_chat_model_alter_project_model.py new file mode 100644 index 00000000..9304a05a --- /dev/null +++ b/ayushma/migrations/0054_alter_chat_model_alter_project_model.py @@ -0,0 +1,48 @@ +# Generated by Django 4.2.6 on 2024-07-24 14:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ayushma", "0053_alter_chat_model_alter_project_model"), + ] + + operations = [ + migrations.AlterField( + model_name="chat", + name="model", + field=models.IntegerField( + blank=True, + choices=[ + (1, "Gpt 3 5"), + (2, "Gpt 3 5 16K"), + (3, "Gpt 4"), + (4, "Gpt 4 32K"), + (5, "Gpt 4 Visual"), + (6, "Gpt 4 Turbo"), + (7, "Gpt 4 Omni"), + (8, "Gpt 4 Omni Mini"), + ], + null=True, + ), + ), + migrations.AlterField( + model_name="project", + name="model", + field=models.IntegerField( + choices=[ + (1, "Gpt 3 5"), + (2, "Gpt 3 5 16K"), + (3, "Gpt 4"), + (4, "Gpt 4 32K"), + (5, "Gpt 4 Visual"), + (6, "Gpt 4 Turbo"), + (7, "Gpt 4 Omni"), + (8, "Gpt 4 Omni Mini"), + ], + default=1, + ), + ), + ] diff --git a/ayushma/models/enums.py b/ayushma/models/enums.py index eea3c919..64f89c6e 100644 --- a/ayushma/models/enums.py +++ b/ayushma/models/enums.py @@ -48,6 +48,7 @@ class ModelType(IntegerChoices): GPT_4_VISUAL = 5 GPT_4_TURBO = 6 GPT_4_OMNI = 7 + GPT_4_OMNI_MINI = 8 class StatusChoices(IntegerChoices): diff --git a/ayushma/utils/langchain.py b/ayushma/utils/langchain.py index 56bf63a7..da538edb 100644 --- a/ayushma/utils/langchain.py +++ b/ayushma/utils/langchain.py @@ -38,9 +38,12 @@ def get_model_name(model_type: ModelType): elif model_type == ModelType.GPT_4_VISUAL: return "gpt-4-vision-preview" elif model_type == ModelType.GPT_4_TURBO: - return "gpt-4-1106-preview" + return "gpt-4-turbo" elif model_type == ModelType.GPT_4_OMNI: return "gpt-4o" + elif model_type == ModelType.GPT_4_OMNI_MINI: + return "gpt-4o-mini" + else: if settings.OPENAI_API_TYPE == "azure": return settings.AZURE_CHAT_MODEL From 0fb18ceccabb18914b239c4639bf0d2834261ec9 Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Wed, 21 Aug 2024 02:41:15 +0530 Subject: [PATCH 09/12] multimodel testing --- ayushma/admin.py | 13 +- .../0055_testresult_model_testrun_models.py | 52 +++++ ayushma/models/testsuite.py | 5 +- ayushma/serializers/testsuite.py | 1 + ayushma/tasks/testrun.py | 179 +++++++++--------- 5 files changed, 163 insertions(+), 87 deletions(-) create mode 100644 ayushma/migrations/0055_testresult_model_testrun_models.py diff --git a/ayushma/admin.py b/ayushma/admin.py index b86cd670..d941c13f 100644 --- a/ayushma/admin.py +++ b/ayushma/admin.py @@ -3,7 +3,13 @@ from djangoql.admin import DjangoQLSearchMixin from ayushma.models.services import Service, TempToken -from ayushma.models.testsuite import Feedback, TestQuestion, TestRun, TestSuite +from ayushma.models.testsuite import ( + Feedback, + TestQuestion, + TestResult, + TestRun, + TestSuite, +) from .models import APIKey, Chat, ChatMessage, Document, Project, User @@ -132,4 +138,9 @@ class TestRunAdmin(DjangoQLSearchMixin, admin.ModelAdmin): pass +@admin.register(TestResult) +class TestResultAdmin(DjangoQLSearchMixin, admin.ModelAdmin): + pass + + admin.site.site_header = "Ayushma Admin" diff --git a/ayushma/migrations/0055_testresult_model_testrun_models.py b/ayushma/migrations/0055_testresult_model_testrun_models.py new file mode 100644 index 00000000..be257198 --- /dev/null +++ b/ayushma/migrations/0055_testresult_model_testrun_models.py @@ -0,0 +1,52 @@ +# Generated by Django 4.2.6 on 2024-07-26 11:39 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ayushma", "0054_alter_chat_model_alter_project_model"), + ] + + operations = [ + migrations.AddField( + model_name="testresult", + name="model", + field=models.IntegerField( + blank=True, + choices=[ + (1, "Gpt 3 5"), + (2, "Gpt 3 5 16K"), + (3, "Gpt 4"), + (4, "Gpt 4 32K"), + (5, "Gpt 4 Visual"), + (6, "Gpt 4 Turbo"), + (7, "Gpt 4 Omni"), + (8, "Gpt 4 Omni Mini"), + ], + null=True, + ), + ), + migrations.AddField( + model_name="testrun", + name="models", + field=django.contrib.postgres.fields.ArrayField( + base_field=models.IntegerField( + choices=[ + (1, "Gpt 3 5"), + (2, "Gpt 3 5 16K"), + (3, "Gpt 4"), + (4, "Gpt 4 32K"), + (5, "Gpt 4 Visual"), + (6, "Gpt 4 Turbo"), + (7, "Gpt 4 Omni"), + (8, "Gpt 4 Omni Mini"), + ] + ), + default=list, + size=None, + ), + ), + ] diff --git a/ayushma/models/testsuite.py b/ayushma/models/testsuite.py index d93dee4e..a5c74653 100644 --- a/ayushma/models/testsuite.py +++ b/ayushma/models/testsuite.py @@ -1,3 +1,4 @@ +from django.contrib.postgres.fields import ArrayField from django.db import models from django.db.models import ( CASCADE, @@ -10,7 +11,7 @@ from ayushma.models import Project from ayushma.models.document import Document -from ayushma.models.enums import FeedBackRating, StatusChoices +from ayushma.models.enums import FeedBackRating, ModelType, StatusChoices from ayushma.models.users import User from utils.models.base import BaseModel @@ -34,6 +35,7 @@ class TestRun(BaseModel): project = ForeignKey(Project, on_delete=CASCADE) status = IntegerField(choices=StatusChoices.choices, default=StatusChoices.RUNNING) references = models.BooleanField(default=True) + models = ArrayField(models.IntegerField(choices=ModelType.choices), default=list) class TestResult(BaseModel): @@ -45,6 +47,7 @@ class TestResult(BaseModel): cosine_sim = FloatField() bleu_score = FloatField() references = models.ManyToManyField(Document, blank=True) + model = models.IntegerField(choices=ModelType.choices, blank=True, null=True) class Feedback(BaseModel): diff --git a/ayushma/serializers/testsuite.py b/ayushma/serializers/testsuite.py index 5e7e07d2..8f14dbb2 100644 --- a/ayushma/serializers/testsuite.py +++ b/ayushma/serializers/testsuite.py @@ -111,6 +111,7 @@ class Meta: "status", "test_results", "references", + "models", ) read_only_fields = ( "external_id", diff --git a/ayushma/tasks/testrun.py b/ayushma/tasks/testrun.py index 55c93263..138cca2a 100644 --- a/ayushma/tasks/testrun.py +++ b/ayushma/tasks/testrun.py @@ -30,100 +30,109 @@ def mark_test_run_as_completed(self, test_run_id): test_run = TestRun.objects.get(id=test_run_id) test_suite = test_run.test_suite test_questions = test_suite.testquestion_set.all() + test_models = test_run.models temperature = test_suite.temperature topk = test_suite.topk - chat = Chat() - chat.title = "Test Run: " + test_run.created_at.strftime("%Y-%m-%d %H:%M:%S") - chat.project = test_run.project - chat.save() - - for test_question in test_questions: - sleep( - 30 - ) # Wait for 30 seconds to give previous test question time to complete - - if TestRun.objects.get(id=test_run_id).status == StatusChoices.CANCELED: - print("Test run canceled") - return - - test_result = TestResult() - test_result.test_run = test_run - test_result.test_question = test_question - test_result.question = test_question.question - test_result.human_answer = test_question.human_answer - - try: - english_text = test_question.question - translated_text = test_question.question - - if test_question.language != "en": - english_text = translate_text("en-IN", english_text) - translated_text = translate_text( - test_question.language + "-IN", english_text - ) + for model in test_models: - if test_run.project.assistant_id: - ai_response = converse_thread( - thread=chat, - english_text=english_text, - openai_key=settings.OPENAI_API_KEY, - ) - reference_documents = [] - else: - response = next( - converse( + chat = Chat() + chat.title = "Test Run: " + test_run.created_at.strftime( + "%Y-%m-%d %H:%M:%S" + ) + chat.project = test_run.project + chat.model = model + chat.save() + + for test_question in test_questions: + sleep( + 30 + ) # Wait for 30 seconds to give previous test question time to complete + + if TestRun.objects.get(id=test_run_id).status == StatusChoices.CANCELED: + print("Test run canceled") + return + + test_result = TestResult() + test_result.test_run = test_run + test_result.test_question = test_question + test_result.question = test_question.question + test_result.human_answer = test_question.human_answer + test_result.model = model + + try: + english_text = test_question.question + translated_text = test_question.question + + if test_question.language != "en": + english_text = translate_text("en-IN", english_text) + translated_text = translate_text( + test_question.language + "-IN", english_text + ) + + if test_run.project.assistant_id: + ai_response = converse_thread( + thread=chat, english_text=english_text, - local_translated_text=translated_text, openai_key=settings.OPENAI_API_KEY, - chat=chat, - match_number=topk, - stats=dict(), - temperature=temperature, - user_language=test_question.language + "-IN", - stream=False, - generate_audio=False, - fetch_references=test_run.references, - documents=test_question.documents.all(), ) + reference_documents = [] + else: + response = next( + converse( + english_text=english_text, + local_translated_text=translated_text, + openai_key=settings.OPENAI_API_KEY, + chat=chat, + match_number=topk, + stats=dict(), + temperature=temperature, + user_language=test_question.language + "-IN", + stream=False, + generate_audio=False, + fetch_references=test_run.references, + documents=test_question.documents.all(), + ) + ) + ai_response = response.message + reference_documents = response.reference_documents + + # Calculate cosine similarity + openai.api_key = settings.OPENAI_API_KEY + ai_response_embedding = get_embedding(ai_response) + human_answer_embedding = get_embedding(test_question.human_answer) + cosine_sim = cosine_similarity( + ai_response_embedding, human_answer_embedding ) - ai_response = response.message - reference_documents = response.reference_documents - - # Calculate cosine similarity - openai.api_key = settings.OPENAI_API_KEY - ai_response_embedding = get_embedding(ai_response) - human_answer_embedding = get_embedding(test_question.human_answer) - cosine_sim = cosine_similarity( - ai_response_embedding, human_answer_embedding - ) - - # Calculate BLEU score ( https://www.nltk.org/api/nltk.translate.bleu_score.html#nltk.translate.bleu_score.SmoothingFunction.__init__ ) - reference_tokens = test_question.human_answer.split() - candidate_tokens = ai_response.split() - - smoothie = SmoothingFunction().method4 - bleu_score = sentence_bleu( - [reference_tokens], candidate_tokens, smoothing_function=smoothie - ) - - test_result.answer = ai_response - test_result.cosine_sim = cosine_sim - test_result.bleu_score = round(bleu_score, 4) - try: - test_result.references.set(reference_documents.all()) - except Exception: - pass - - except Exception as e: - print("Error while running test question: ", e) - test_result.answer = "" - test_result.cosine_sim = 0 - test_result.bleu_score = 0 - - finally: - test_result.save() + + # Calculate BLEU score ( https://www.nltk.org/api/nltk.translate.bleu_score.html#nltk.translate.bleu_score.SmoothingFunction.__init__ ) + reference_tokens = test_question.human_answer.split() + candidate_tokens = ai_response.split() + + smoothie = SmoothingFunction().method4 + bleu_score = sentence_bleu( + [reference_tokens], + candidate_tokens, + smoothing_function=smoothie, + ) + + test_result.answer = ai_response + test_result.cosine_sim = cosine_sim + test_result.bleu_score = round(bleu_score, 4) + try: + test_result.references.set(reference_documents.all()) + except Exception: + pass + + except Exception as e: + print("Error while running test question: ", e) + test_result.answer = "" + test_result.cosine_sim = 0 + test_result.bleu_score = 0 + + finally: + test_result.save() test_run.status = StatusChoices.COMPLETED test_run.save() From 1b0804a39808d6a8d280983a1159e8084663cb42 Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Fri, 6 Sep 2024 10:00:07 +0530 Subject: [PATCH 10/12] shifted captcha validation to the end --- ayushma/serializers/users.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/ayushma/serializers/users.py b/ayushma/serializers/users.py index edb5f375..aaa9348d 100644 --- a/ayushma/serializers/users.py +++ b/ayushma/serializers/users.py @@ -29,16 +29,11 @@ class Meta: model = User fields = ("username", "full_name", "password", "email", "recaptcha") - def validate_recaptcha(self, value): - if not validatecaptcha(value): + def create(self, validated_data): + recaptcha = validated_data.pop("recaptcha", None) + if not validatecaptcha(recaptcha): raise serializers.ValidationError("Invalid captcha") - return value - - def validate(self, validated_data): - validated_data.pop("recaptcha", None) - return validated_data - def create(self, validated_data): validated_data["password"] = make_password(validated_data["password"]) return super().create(validated_data) From 5109cf353cd0612d54eb5d6330f34818edb0a62e Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Fri, 13 Sep 2024 15:28:12 +0530 Subject: [PATCH 11/12] added test recaptcha key --- core/settings/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/settings/base.py b/core/settings/base.py index 8def4091..c611d1ab 100644 --- a/core/settings/base.py +++ b/core/settings/base.py @@ -367,7 +367,9 @@ DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage" AI_NAME = env("AI_NAME", default="Ayushma") -GOOGLE_RECAPTCHA_SECRET_KEY = env("GOOGLE_RECAPTCHA_SECRET_KEY", default=None) +GOOGLE_RECAPTCHA_SECRET_KEY = env( + "GOOGLE_RECAPTCHA_SECRET_KEY", default="6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe" +) # url for self hosted speech to text SELF_HOSTED_ENDPOINT = env("SELF_HOSTED_ENDPOINT", default=None) From 381439e9dc44b63ef00ae0dfbdadfb9407d4cdd7 Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Fri, 13 Sep 2024 15:45:12 +0530 Subject: [PATCH 12/12] Changed coronasafe to OHC Network --- .github/workflows/linter.yaml | 2 +- ayushma/utils/speech_to_text.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linter.yaml b/.github/workflows/linter.yaml index aa225e94..1c688851 100644 --- a/.github/workflows/linter.yaml +++ b/.github/workflows/linter.yaml @@ -5,7 +5,7 @@ on: - master jobs: build: - if: github.repository == 'coronasafe/ayushma' + if: github.repository == 'ohcnetwork/ayushma' name: Lint Code Base runs-on: ubuntu-latest permissions: diff --git a/ayushma/utils/speech_to_text.py b/ayushma/utils/speech_to_text.py index a004ebd9..11a95940 100644 --- a/ayushma/utils/speech_to_text.py +++ b/ayushma/utils/speech_to_text.py @@ -68,7 +68,7 @@ def recognize(self, audio): settings.SELF_HOSTED_ENDPOINT, files={"audio": audio}, data={ - # change this model to get faster results see: https://github.com/coronasafe/care-whisper + # change this model to get faster results see: https://github.com/ohcnetwork/care-whisper "model": "small", "language": self.language_code.replace("-IN", ""), },