├── .gitignore ├── .streamlit └── secrets.toml.example ├── Dockerfile ├── Pipfile ├── Pipfile.lock ├── README.md ├── app.yaml ├── poetry.lock ├── pyproject.toml ├── rag_demo ├── __init__.py ├── __pycache__ │ └── neo4j_driver.cpython-311.pyc ├── analytics.py ├── constants.py ├── free_use_manager.py ├── graph_cypher_chain.py ├── graph_cypher_tool.py ├── graph_tool.py ├── main.py ├── rag_agent.py ├── sidebar.py ├── vector_chain.py ├── vector_graph_chain.py ├── vector_graph_tool.py └── vector_tool.py └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Notebook output 2 | failed_files.json 3 | 4 | # Jupyter Notebook 5 | .ipynb_checkpoints 6 | __pycache__ 7 | 8 | # Mac System file 9 | .DS_STORE 10 | 11 | # UI file 12 | .env 13 | # secrets.toml 14 | 15 | # Dependency managers 16 | *.lock -------------------------------------------------------------------------------- /.streamlit/secrets.toml.example: -------------------------------------------------------------------------------- 1 | NEO4J_URI="" 2 | NEO4J_USERNAME="neo4j" 3 | NEO4J_PASSWORD="" 4 | SEGMENT_WRITE_KEY="" 5 | OPENAI_API_KEY="" -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.11-slim 2 | 3 | WORKDIR /app 4 | 5 | COPY requirements.txt . 6 | COPY secrets.toml app/.streamlit/secrets.toml 7 | RUN pip install -r requirements.txt 8 | 9 | COPY . . 10 | 11 | CMD ["streamlit", "run", "rag_demo/main.py", "--server.enableCORS", "false", "--browser.serverAddress", "0.0.0.0", "--browser.gatherUsageStats", "false", "--server.port", "8080"] -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | langchain = "~=0.1.3" 8 | langchain-openai = "~=0.0.5" 9 | neo4j = "==5.16" 10 | segment-analytics-python = "==2.2.3" 11 | streamlit = "==1.30" 12 | streamlit-feedback = "==0.1.3" 13 | retry = "==0.9.2" 14 | langchain-community = "~=0.0.27" 15 | langchainhub = "~=0.1.15" 16 | 17 | [dev-packages] 18 | 19 | [requires] 20 | python_version = "3.11" 21 | -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "ba239b35c5ef2663d4a3eab4ad1fe634d510d965d2667264f6e0c03003f997f1" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.11" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "aiohttp": { 20 | "hashes": [ 21 | "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168", 22 | "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb", 23 | "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5", 24 | "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f", 25 | "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc", 26 | "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c", 27 | "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29", 28 | "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4", 29 | "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc", 30 | "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc", 31 | "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63", 32 | "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e", 33 | "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d", 34 | "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a", 35 | "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60", 36 | "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38", 37 | "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b", 38 | "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2", 39 | "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53", 40 | "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5", 41 | "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4", 42 | "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96", 43 | "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58", 44 | "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa", 45 | "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321", 46 | "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae", 47 | "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce", 48 | "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8", 49 | "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194", 50 | "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c", 51 | "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf", 52 | "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d", 53 | "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869", 54 | "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b", 55 | "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52", 56 | "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528", 57 | "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5", 58 | "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1", 59 | "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4", 60 | "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8", 61 | "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d", 62 | "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7", 63 | "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5", 64 | "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54", 65 | "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3", 66 | "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5", 67 | "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c", 68 | "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29", 69 | "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3", 70 | "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747", 71 | "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672", 72 | "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5", 73 | "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11", 74 | "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca", 75 | "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768", 76 | "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6", 77 | "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2", 78 | "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533", 79 | "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6", 80 | "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266", 81 | "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d", 82 | "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec", 83 | "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5", 84 | "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1", 85 | "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b", 86 | "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679", 87 | "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283", 88 | "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb", 89 | "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b", 90 | "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3", 91 | "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051", 92 | "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511", 93 | "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e", 94 | "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d", 95 | "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542", 96 | "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f" 97 | ], 98 | "markers": "python_version >= '3.8'", 99 | "version": "==3.9.3" 100 | }, 101 | "aiosignal": { 102 | "hashes": [ 103 | "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", 104 | "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" 105 | ], 106 | "markers": "python_version >= '3.7'", 107 | "version": "==1.3.1" 108 | }, 109 | "altair": { 110 | "hashes": [ 111 | "sha256:2ad7f0c8010ebbc46319cc30febfb8e59ccf84969a201541c207bc3a4fa6cf81", 112 | "sha256:8c4888ad11db7c39f3f17aa7f4ea985775da389d79ac30a6c22856ab238df399" 113 | ], 114 | "markers": "python_version >= '3.8'", 115 | "version": "==5.2.0" 116 | }, 117 | "annotated-types": { 118 | "hashes": [ 119 | "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43", 120 | "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d" 121 | ], 122 | "markers": "python_version >= '3.8'", 123 | "version": "==0.6.0" 124 | }, 125 | "anyio": { 126 | "hashes": [ 127 | "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8", 128 | "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6" 129 | ], 130 | "markers": "python_version >= '3.8'", 131 | "version": "==4.3.0" 132 | }, 133 | "attrs": { 134 | "hashes": [ 135 | "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", 136 | "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" 137 | ], 138 | "markers": "python_version >= '3.7'", 139 | "version": "==23.2.0" 140 | }, 141 | "backoff": { 142 | "hashes": [ 143 | "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", 144 | "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8" 145 | ], 146 | "markers": "python_version >= '3.7' and python_version < '4.0'", 147 | "version": "==2.2.1" 148 | }, 149 | "blinker": { 150 | "hashes": [ 151 | "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9", 152 | "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182" 153 | ], 154 | "markers": "python_version >= '3.8'", 155 | "version": "==1.7.0" 156 | }, 157 | "cachetools": { 158 | "hashes": [ 159 | "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945", 160 | "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105" 161 | ], 162 | "markers": "python_version >= '3.7'", 163 | "version": "==5.3.3" 164 | }, 165 | "certifi": { 166 | "hashes": [ 167 | "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", 168 | "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" 169 | ], 170 | "markers": "python_version >= '3.6'", 171 | "version": "==2024.2.2" 172 | }, 173 | "charset-normalizer": { 174 | "hashes": [ 175 | "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", 176 | "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", 177 | "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", 178 | "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", 179 | "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", 180 | "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", 181 | "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", 182 | "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", 183 | "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", 184 | "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", 185 | "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", 186 | "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", 187 | "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", 188 | "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", 189 | "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", 190 | "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", 191 | "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", 192 | "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", 193 | "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", 194 | "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", 195 | "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", 196 | "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", 197 | "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", 198 | "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", 199 | "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", 200 | "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", 201 | "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", 202 | "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", 203 | "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", 204 | "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", 205 | "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", 206 | "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", 207 | "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", 208 | "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", 209 | "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", 210 | "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", 211 | "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", 212 | "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", 213 | "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", 214 | "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", 215 | "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", 216 | "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", 217 | "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", 218 | "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", 219 | "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", 220 | "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", 221 | "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", 222 | "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", 223 | "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", 224 | "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", 225 | "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", 226 | "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", 227 | "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", 228 | "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", 229 | "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", 230 | "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", 231 | "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", 232 | "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", 233 | "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", 234 | "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", 235 | "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", 236 | "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", 237 | "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", 238 | "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", 239 | "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", 240 | "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", 241 | "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", 242 | "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", 243 | "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", 244 | "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", 245 | "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", 246 | "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", 247 | "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", 248 | "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", 249 | "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", 250 | "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", 251 | "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", 252 | "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", 253 | "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", 254 | "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", 255 | "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", 256 | "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", 257 | "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", 258 | "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", 259 | "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", 260 | "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", 261 | "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", 262 | "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", 263 | "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", 264 | "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" 265 | ], 266 | "markers": "python_version >= '3.7'", 267 | "version": "==3.3.2" 268 | }, 269 | "click": { 270 | "hashes": [ 271 | "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", 272 | "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" 273 | ], 274 | "markers": "python_version >= '3.7'", 275 | "version": "==8.1.7" 276 | }, 277 | "dataclasses-json": { 278 | "hashes": [ 279 | "sha256:73696ebf24936560cca79a2430cbc4f3dd23ac7bf46ed17f38e5e5e7657a6377", 280 | "sha256:f90578b8a3177f7552f4e1a6e535e84293cd5da421fcce0642d49c0d7bdf8df2" 281 | ], 282 | "markers": "python_version >= '3.7' and python_version < '4.0'", 283 | "version": "==0.6.4" 284 | }, 285 | "decorator": { 286 | "hashes": [ 287 | "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", 288 | "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" 289 | ], 290 | "markers": "python_version >= '3.5'", 291 | "version": "==5.1.1" 292 | }, 293 | "distro": { 294 | "hashes": [ 295 | "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", 296 | "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2" 297 | ], 298 | "markers": "python_version >= '3.6'", 299 | "version": "==1.9.0" 300 | }, 301 | "frozenlist": { 302 | "hashes": [ 303 | "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7", 304 | "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98", 305 | "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad", 306 | "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5", 307 | "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae", 308 | "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e", 309 | "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a", 310 | "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701", 311 | "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d", 312 | "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6", 313 | "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6", 314 | "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106", 315 | "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75", 316 | "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868", 317 | "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a", 318 | "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0", 319 | "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1", 320 | "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826", 321 | "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec", 322 | "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6", 323 | "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950", 324 | "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19", 325 | "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0", 326 | "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8", 327 | "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a", 328 | "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09", 329 | "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86", 330 | "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c", 331 | "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5", 332 | "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b", 333 | "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b", 334 | "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d", 335 | "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0", 336 | "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea", 337 | "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776", 338 | "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a", 339 | "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897", 340 | "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7", 341 | "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09", 342 | "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9", 343 | "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe", 344 | "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd", 345 | "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742", 346 | "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09", 347 | "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0", 348 | "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932", 349 | "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1", 350 | "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a", 351 | "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49", 352 | "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d", 353 | "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7", 354 | "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480", 355 | "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89", 356 | "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e", 357 | "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b", 358 | "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82", 359 | "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb", 360 | "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068", 361 | "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8", 362 | "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b", 363 | "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb", 364 | "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2", 365 | "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11", 366 | "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b", 367 | "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc", 368 | "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0", 369 | "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497", 370 | "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17", 371 | "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0", 372 | "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2", 373 | "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439", 374 | "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5", 375 | "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac", 376 | "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825", 377 | "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887", 378 | "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced", 379 | "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74" 380 | ], 381 | "markers": "python_version >= '3.8'", 382 | "version": "==1.4.1" 383 | }, 384 | "gitdb": { 385 | "hashes": [ 386 | "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4", 387 | "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b" 388 | ], 389 | "markers": "python_version >= '3.7'", 390 | "version": "==4.0.11" 391 | }, 392 | "gitpython": { 393 | "hashes": [ 394 | "sha256:1bf9cd7c9e7255f77778ea54359e54ac22a72a5b51288c457c881057b7bb9ecd", 395 | "sha256:2d99869e0fef71a73cbd242528105af1d6c1b108c60dfabd994bf292f76c3ceb" 396 | ], 397 | "markers": "python_version >= '3.7'", 398 | "version": "==3.1.42" 399 | }, 400 | "h11": { 401 | "hashes": [ 402 | "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", 403 | "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" 404 | ], 405 | "markers": "python_version >= '3.7'", 406 | "version": "==0.14.0" 407 | }, 408 | "httpcore": { 409 | "hashes": [ 410 | "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73", 411 | "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022" 412 | ], 413 | "markers": "python_version >= '3.8'", 414 | "version": "==1.0.4" 415 | }, 416 | "httpx": { 417 | "hashes": [ 418 | "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5", 419 | "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5" 420 | ], 421 | "markers": "python_version >= '3.8'", 422 | "version": "==0.27.0" 423 | }, 424 | "idna": { 425 | "hashes": [ 426 | "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", 427 | "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" 428 | ], 429 | "markers": "python_version >= '3.5'", 430 | "version": "==3.6" 431 | }, 432 | "importlib-metadata": { 433 | "hashes": [ 434 | "sha256:198f568f3230878cb1b44fbd7975f87906c22336dba2e4a7f05278c281fbd792", 435 | "sha256:f4bc4c0c070c490abf4ce96d715f68e95923320370efb66143df00199bb6c100" 436 | ], 437 | "markers": "python_version >= '3.8'", 438 | "version": "==7.0.2" 439 | }, 440 | "jinja2": { 441 | "hashes": [ 442 | "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", 443 | "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" 444 | ], 445 | "markers": "python_version >= '3.7'", 446 | "version": "==3.1.3" 447 | }, 448 | "jsonpatch": { 449 | "hashes": [ 450 | "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", 451 | "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c" 452 | ], 453 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", 454 | "version": "==1.33" 455 | }, 456 | "jsonpointer": { 457 | "hashes": [ 458 | "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a", 459 | "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88" 460 | ], 461 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", 462 | "version": "==2.4" 463 | }, 464 | "jsonschema": { 465 | "hashes": [ 466 | "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f", 467 | "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5" 468 | ], 469 | "markers": "python_version >= '3.8'", 470 | "version": "==4.21.1" 471 | }, 472 | "jsonschema-specifications": { 473 | "hashes": [ 474 | "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc", 475 | "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c" 476 | ], 477 | "markers": "python_version >= '3.8'", 478 | "version": "==2023.12.1" 479 | }, 480 | "langchain": { 481 | "hashes": [ 482 | "sha256:03f08cae7cd3f341c54f1042b3fe24d88f39eba7b7eda942735d8ced13fe6da9", 483 | "sha256:b5e678ac50d85370b9bc28f2c97ad5f029aac1c0cca79cac9354adf72741bc6e" 484 | ], 485 | "index": "pypi", 486 | "version": "==0.1.11" 487 | }, 488 | "langchain-community": { 489 | "hashes": [ 490 | "sha256:266dffbd4c1666db1889cad953fa5102d4debff782335353b6d78636a761778d", 491 | "sha256:377a7429580a71d909012df5aae538d295fa6f21bc479e5dac6fd1589762b3ab" 492 | ], 493 | "index": "pypi", 494 | "version": "==0.0.27" 495 | }, 496 | "langchain-core": { 497 | "hashes": [ 498 | "sha256:c9643505e41d25ba8f20a2e8bf083d0f0d50b9a098d901511fff8df79f831ada", 499 | "sha256:e13a016e55e7f082ff3eeeda2d0cb505b89a8830e3a23c1d134d0a89d7871894" 500 | ], 501 | "markers": "python_version < '4.0' and python_full_version >= '3.8.1'", 502 | "version": "==0.1.30" 503 | }, 504 | "langchain-openai": { 505 | "hashes": [ 506 | "sha256:4862fc72cecbee0240aaa6df0234d5893dd30cd33ca23ac5cfdd86c11d2c44df", 507 | "sha256:b7aba7fcc52305e78b08197ebc54fc45cc06dbc40ba5b913bc48a22b30a4f5c9" 508 | ], 509 | "index": "pypi", 510 | "version": "==0.0.8" 511 | }, 512 | "langchain-text-splitters": { 513 | "hashes": [ 514 | "sha256:ac459fa98799f5117ad5425a9330b21961321e30bc19a2a2f9f761ddadd62aa1", 515 | "sha256:f5b802f873f5ff6a8b9259ff34d53ed989666ef4e1582e6d1adb3b5520e3839a" 516 | ], 517 | "markers": "python_version < '4.0' and python_full_version >= '3.8.1'", 518 | "version": "==0.0.1" 519 | }, 520 | "langchainhub": { 521 | "hashes": [ 522 | "sha256:89a0951abd1db255e91c6d545d092a598fc255aa865d1ffc3ce8f93bbeae60e7", 523 | "sha256:fa3ff81a31946860f84c119f1e2f6b7c7707e2bd7ed2394a7313b286d59f3bda" 524 | ], 525 | "index": "pypi", 526 | "version": "==0.1.15" 527 | }, 528 | "langsmith": { 529 | "hashes": [ 530 | "sha256:327c66ec0de8c1bc57bfa47bbc70a29ef749e97c3e5571b9baf754d1e0644220", 531 | "sha256:69984268b9867cb31b875965b3f86b6f56ba17dd5454d487d3a1a999bdaeea69" 532 | ], 533 | "markers": "python_version < '4.0' and python_full_version >= '3.8.1'", 534 | "version": "==0.1.23" 535 | }, 536 | "markdown-it-py": { 537 | "hashes": [ 538 | "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", 539 | "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" 540 | ], 541 | "markers": "python_version >= '3.8'", 542 | "version": "==3.0.0" 543 | }, 544 | "markupsafe": { 545 | "hashes": [ 546 | "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", 547 | "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", 548 | "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", 549 | "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", 550 | "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", 551 | "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", 552 | "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", 553 | "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", 554 | "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", 555 | "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", 556 | "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", 557 | "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", 558 | "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", 559 | "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", 560 | "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", 561 | "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", 562 | "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", 563 | "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", 564 | "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", 565 | "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", 566 | "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", 567 | "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", 568 | "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", 569 | "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", 570 | "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", 571 | "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", 572 | "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", 573 | "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", 574 | "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", 575 | "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", 576 | "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", 577 | "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", 578 | "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", 579 | "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", 580 | "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", 581 | "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", 582 | "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", 583 | "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", 584 | "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", 585 | "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", 586 | "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", 587 | "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", 588 | "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", 589 | "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", 590 | "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", 591 | "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", 592 | "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", 593 | "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", 594 | "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", 595 | "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", 596 | "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", 597 | "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", 598 | "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", 599 | "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", 600 | "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", 601 | "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", 602 | "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", 603 | "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", 604 | "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", 605 | "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" 606 | ], 607 | "markers": "python_version >= '3.7'", 608 | "version": "==2.1.5" 609 | }, 610 | "marshmallow": { 611 | "hashes": [ 612 | "sha256:4e65e9e0d80fc9e609574b9983cf32579f305c718afb30d7233ab818571768c3", 613 | "sha256:f085493f79efb0644f270a9bf2892843142d80d7174bbbd2f3713f2a589dc633" 614 | ], 615 | "markers": "python_version >= '3.8'", 616 | "version": "==3.21.1" 617 | }, 618 | "mdurl": { 619 | "hashes": [ 620 | "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", 621 | "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" 622 | ], 623 | "markers": "python_version >= '3.7'", 624 | "version": "==0.1.2" 625 | }, 626 | "monotonic": { 627 | "hashes": [ 628 | "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7", 629 | "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c" 630 | ], 631 | "version": "==1.6" 632 | }, 633 | "multidict": { 634 | "hashes": [ 635 | "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556", 636 | "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c", 637 | "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29", 638 | "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b", 639 | "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8", 640 | "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7", 641 | "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd", 642 | "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40", 643 | "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6", 644 | "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3", 645 | "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c", 646 | "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9", 647 | "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5", 648 | "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae", 649 | "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442", 650 | "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9", 651 | "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc", 652 | "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c", 653 | "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea", 654 | "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5", 655 | "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50", 656 | "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182", 657 | "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453", 658 | "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e", 659 | "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600", 660 | "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733", 661 | "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda", 662 | "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241", 663 | "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461", 664 | "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e", 665 | "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e", 666 | "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b", 667 | "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e", 668 | "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7", 669 | "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386", 670 | "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd", 671 | "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9", 672 | "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf", 673 | "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee", 674 | "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5", 675 | "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a", 676 | "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271", 677 | "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54", 678 | "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4", 679 | "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496", 680 | "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb", 681 | "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319", 682 | "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3", 683 | "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f", 684 | "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527", 685 | "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed", 686 | "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604", 687 | "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef", 688 | "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8", 689 | "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5", 690 | "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5", 691 | "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626", 692 | "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c", 693 | "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d", 694 | "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c", 695 | "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc", 696 | "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc", 697 | "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b", 698 | "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38", 699 | "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450", 700 | "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1", 701 | "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f", 702 | "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3", 703 | "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755", 704 | "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226", 705 | "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a", 706 | "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046", 707 | "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf", 708 | "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479", 709 | "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e", 710 | "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1", 711 | "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a", 712 | "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83", 713 | "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929", 714 | "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93", 715 | "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a", 716 | "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c", 717 | "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44", 718 | "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89", 719 | "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba", 720 | "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e", 721 | "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da", 722 | "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24", 723 | "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423", 724 | "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef" 725 | ], 726 | "markers": "python_version >= '3.7'", 727 | "version": "==6.0.5" 728 | }, 729 | "mypy-extensions": { 730 | "hashes": [ 731 | "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", 732 | "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" 733 | ], 734 | "markers": "python_version >= '3.5'", 735 | "version": "==1.0.0" 736 | }, 737 | "neo4j": { 738 | "hashes": [ 739 | "sha256:3d04334f5f99dc06c8150e75f2d608a560789ef35670494ecdcec31c0af276a9" 740 | ], 741 | "index": "pypi", 742 | "version": "==5.16" 743 | }, 744 | "numpy": { 745 | "hashes": [ 746 | "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", 747 | "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", 748 | "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", 749 | "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", 750 | "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", 751 | "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", 752 | "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", 753 | "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", 754 | "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", 755 | "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", 756 | "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", 757 | "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", 758 | "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", 759 | "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", 760 | "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", 761 | "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", 762 | "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", 763 | "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", 764 | "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", 765 | "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", 766 | "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", 767 | "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", 768 | "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", 769 | "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", 770 | "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", 771 | "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", 772 | "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", 773 | "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", 774 | "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", 775 | "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", 776 | "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", 777 | "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", 778 | "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", 779 | "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", 780 | "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", 781 | "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" 782 | ], 783 | "markers": "python_version >= '3.9'", 784 | "version": "==1.26.4" 785 | }, 786 | "openai": { 787 | "hashes": [ 788 | "sha256:5769b62abd02f350a8dd1a3a242d8972c947860654466171d60fb0972ae0a41c", 789 | "sha256:ff6c6b3bc7327e715e4b3592a923a5a1c7519ff5dd764a83d69f633d49e77a7b" 790 | ], 791 | "markers": "python_full_version >= '3.7.1'", 792 | "version": "==1.13.3" 793 | }, 794 | "orjson": { 795 | "hashes": [ 796 | "sha256:001f4eb0ecd8e9ebd295722d0cbedf0748680fb9998d3993abaed2f40587257a", 797 | "sha256:05a1f57fb601c426635fcae9ddbe90dfc1ed42245eb4c75e4960440cac667262", 798 | "sha256:10c57bc7b946cf2efa67ac55766e41764b66d40cbd9489041e637c1304400494", 799 | "sha256:12365576039b1a5a47df01aadb353b68223da413e2e7f98c02403061aad34bde", 800 | "sha256:2973474811db7b35c30248d1129c64fd2bdf40d57d84beed2a9a379a6f57d0ab", 801 | "sha256:2b5c0f532905e60cf22a511120e3719b85d9c25d0e1c2a8abb20c4dede3b05a5", 802 | "sha256:2c51378d4a8255b2e7c1e5cc430644f0939539deddfa77f6fac7b56a9784160a", 803 | "sha256:2d99e3c4c13a7b0fb3792cc04c2829c9db07838fb6973e578b85c1745e7d0ce7", 804 | "sha256:2f256d03957075fcb5923410058982aea85455d035607486ccb847f095442bda", 805 | "sha256:34cbcd216e7af5270f2ffa63a963346845eb71e174ea530867b7443892d77180", 806 | "sha256:4228aace81781cc9d05a3ec3a6d2673a1ad0d8725b4e915f1089803e9efd2b99", 807 | "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04", 808 | "sha256:57d5d8cf9c27f7ef6bc56a5925c7fbc76b61288ab674eb352c26ac780caa5b10", 809 | "sha256:5bb399e1b49db120653a31463b4a7b27cf2fbfe60469546baf681d1b39f4edf2", 810 | "sha256:62482873e0289cf7313461009bf62ac8b2e54bc6f00c6fabcde785709231a5d7", 811 | "sha256:67384f588f7f8daf040114337d34a5188346e3fae6c38b6a19a2fe8c663a2f9b", 812 | "sha256:6ae4e06be04dc00618247c4ae3f7c3e561d5bc19ab6941427f6d3722a0875ef7", 813 | "sha256:6f7b65bfaf69493c73423ce9db66cfe9138b2f9ef62897486417a8fcb0a92bfe", 814 | "sha256:6fc2fe4647927070df3d93f561d7e588a38865ea0040027662e3e541d592811e", 815 | "sha256:71c6b009d431b3839d7c14c3af86788b3cfac41e969e3e1c22f8a6ea13139404", 816 | "sha256:7413070a3e927e4207d00bd65f42d1b780fb0d32d7b1d951f6dc6ade318e1b5a", 817 | "sha256:76bc6356d07c1d9f4b782813094d0caf1703b729d876ab6a676f3aaa9a47e37c", 818 | "sha256:7f6cbd8e6e446fb7e4ed5bac4661a29e43f38aeecbf60c4b900b825a353276a1", 819 | "sha256:8055ec598605b0077e29652ccfe9372247474375e0e3f5775c91d9434e12d6b1", 820 | "sha256:809d653c155e2cc4fd39ad69c08fdff7f4016c355ae4b88905219d3579e31eb7", 821 | "sha256:82425dd5c7bd3adfe4e94c78e27e2fa02971750c2b7ffba648b0f5d5cc016a73", 822 | "sha256:87f1097acb569dde17f246faa268759a71a2cb8c96dd392cd25c668b104cad2f", 823 | "sha256:920fa5a0c5175ab14b9c78f6f820b75804fb4984423ee4c4f1e6d748f8b22bc1", 824 | "sha256:92255879280ef9c3c0bcb327c5a1b8ed694c290d61a6a532458264f887f052cb", 825 | "sha256:946c3a1ef25338e78107fba746f299f926db408d34553b4754e90a7de1d44068", 826 | "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061", 827 | "sha256:9cf1596680ac1f01839dba32d496136bdd5d8ffb858c280fa82bbfeb173bdd40", 828 | "sha256:9fe41b6f72f52d3da4db524c8653e46243c8c92df826ab5ffaece2dba9cccd58", 829 | "sha256:b17f0f14a9c0ba55ff6279a922d1932e24b13fc218a3e968ecdbf791b3682b25", 830 | "sha256:b3d336ed75d17c7b1af233a6561cf421dee41d9204aa3cfcc6c9c65cd5bb69a8", 831 | "sha256:b66bcc5670e8a6b78f0313bcb74774c8291f6f8aeef10fe70e910b8040f3ab75", 832 | "sha256:b725da33e6e58e4a5d27958568484aa766e825e93aa20c26c91168be58e08cbb", 833 | "sha256:b72758f3ffc36ca566ba98a8e7f4f373b6c17c646ff8ad9b21ad10c29186f00d", 834 | "sha256:bcef128f970bb63ecf9a65f7beafd9b55e3aaf0efc271a4154050fc15cdb386e", 835 | "sha256:c8e8fe01e435005d4421f183038fc70ca85d2c1e490f51fb972db92af6e047c2", 836 | "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a", 837 | "sha256:d6768a327ea1ba44c9114dba5fdda4a214bdb70129065cd0807eb5f010bfcbb5", 838 | "sha256:e18668f1bd39e69b7fed19fa7cd1cd110a121ec25439328b5c89934e6d30d357", 839 | "sha256:e88b97ef13910e5f87bcbc4dd7979a7de9ba8702b54d3204ac587e83639c0c2b", 840 | "sha256:ea0b183a5fe6b2b45f3b854b0d19c4e932d6f5934ae1f723b07cf9560edd4ec7", 841 | "sha256:ede0bde16cc6e9b96633df1631fbcd66491d1063667f260a4f2386a098393790", 842 | "sha256:f541587f5c558abd93cb0de491ce99a9ef8d1ae29dd6ab4dbb5a13281ae04cbd", 843 | "sha256:fbbeb3c9b2edb5fd044b2a070f127a0ac456ffd079cb82746fc84af01ef021a4", 844 | "sha256:fdfa97090e2d6f73dced247a2f2d8004ac6449df6568f30e7fa1a045767c69a6", 845 | "sha256:ff0f9913d82e1d1fadbd976424c316fbc4d9c525c81d047bbdd16bd27dd98cfc" 846 | ], 847 | "markers": "python_version >= '3.8'", 848 | "version": "==3.9.15" 849 | }, 850 | "packaging": { 851 | "hashes": [ 852 | "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", 853 | "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" 854 | ], 855 | "markers": "python_version >= '3.7'", 856 | "version": "==23.2" 857 | }, 858 | "pandas": { 859 | "hashes": [ 860 | "sha256:04f6ec3baec203c13e3f8b139fb0f9f86cd8c0b94603ae3ae8ce9a422e9f5bee", 861 | "sha256:06cf591dbaefb6da9de8472535b185cba556d0ce2e6ed28e21d919704fef1a9e", 862 | "sha256:0ab90f87093c13f3e8fa45b48ba9f39181046e8f3317d3aadb2fffbb1b978572", 863 | "sha256:0f573ab277252ed9aaf38240f3b54cfc90fff8e5cab70411ee1d03f5d51f3944", 864 | "sha256:101d0eb9c5361aa0146f500773395a03839a5e6ecde4d4b6ced88b7e5a1a6403", 865 | "sha256:11940e9e3056576ac3244baef2fedade891977bcc1cb7e5cc8f8cc7d603edc89", 866 | "sha256:1ba21b1d5c0e43416218db63037dbe1a01fc101dc6e6024bcad08123e48004ab", 867 | "sha256:4aa1d8707812a658debf03824016bf5ea0d516afdea29b7dc14cf687bc4d4ec6", 868 | "sha256:4acf681325ee1c7f950d058b05a820441075b0dd9a2adf5c4835b9bc056bf4fb", 869 | "sha256:53680dc9b2519cbf609c62db3ed7c0b499077c7fefda564e330286e619ff0dd9", 870 | "sha256:739cc70eaf17d57608639e74d63387b0d8594ce02f69e7a0b046f117974b3019", 871 | "sha256:76f27a809cda87e07f192f001d11adc2b930e93a2b0c4a236fde5429527423be", 872 | "sha256:7d2ed41c319c9fb4fd454fe25372028dfa417aacb9790f68171b2e3f06eae8cd", 873 | "sha256:88ecb5c01bb9ca927ebc4098136038519aa5d66b44671861ffab754cae75102c", 874 | "sha256:8df8612be9cd1c7797c93e1c5df861b2ddda0b48b08f2c3eaa0702cf88fb5f88", 875 | "sha256:94e714a1cca63e4f5939cdce5f29ba8d415d85166be3441165edd427dc9f6bc0", 876 | "sha256:9bd8a40f47080825af4317d0340c656744f2bfdb6819f818e6ba3cd24c0e1397", 877 | "sha256:9d1265545f579edf3f8f0cb6f89f234f5e44ba725a34d86535b1a1d38decbccc", 878 | "sha256:a935a90a76c44fe170d01e90a3594beef9e9a6220021acfb26053d01426f7dc2", 879 | "sha256:af5d3c00557d657c8773ef9ee702c61dd13b9d7426794c9dfeb1dc4a0bf0ebc7", 880 | "sha256:c2ce852e1cf2509a69e98358e8458775f89599566ac3775e70419b98615f4b06", 881 | "sha256:c38ce92cb22a4bea4e3929429aa1067a454dcc9c335799af93ba9be21b6beb51", 882 | "sha256:c391f594aae2fd9f679d419e9a4d5ba4bce5bb13f6a989195656e7dc4b95c8f0", 883 | "sha256:c70e00c2d894cb230e5c15e4b1e1e6b2b478e09cf27cc593a11ef955b9ecc81a", 884 | "sha256:df0c37ebd19e11d089ceba66eba59a168242fc6b7155cba4ffffa6eccdfb8f16", 885 | "sha256:e97fbb5387c69209f134893abc788a6486dbf2f9e511070ca05eed4b930b1b02", 886 | "sha256:f02a3a6c83df4026e55b63c1f06476c9aa3ed6af3d89b4f04ea656ccdaaaa359", 887 | "sha256:f821213d48f4ab353d20ebc24e4faf94ba40d76680642fb7ce2ea31a3ad94f9b", 888 | "sha256:f9d3558d263073ed95e46f4650becff0c5e1ffe0fc3a015de3c79283dfbdb3df" 889 | ], 890 | "markers": "python_version >= '3.9'", 891 | "version": "==2.2.1" 892 | }, 893 | "pillow": { 894 | "hashes": [ 895 | "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8", 896 | "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39", 897 | "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac", 898 | "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869", 899 | "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e", 900 | "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04", 901 | "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9", 902 | "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e", 903 | "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe", 904 | "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef", 905 | "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56", 906 | "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa", 907 | "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f", 908 | "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f", 909 | "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e", 910 | "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a", 911 | "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2", 912 | "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2", 913 | "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5", 914 | "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a", 915 | "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2", 916 | "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213", 917 | "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563", 918 | "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591", 919 | "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c", 920 | "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2", 921 | "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb", 922 | "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757", 923 | "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0", 924 | "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452", 925 | "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad", 926 | "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01", 927 | "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f", 928 | "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5", 929 | "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61", 930 | "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e", 931 | "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b", 932 | "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068", 933 | "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9", 934 | "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588", 935 | "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483", 936 | "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f", 937 | "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67", 938 | "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7", 939 | "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311", 940 | "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6", 941 | "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72", 942 | "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6", 943 | "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129", 944 | "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13", 945 | "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67", 946 | "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c", 947 | "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516", 948 | "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e", 949 | "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e", 950 | "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364", 951 | "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023", 952 | "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1", 953 | "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04", 954 | "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d", 955 | "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a", 956 | "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7", 957 | "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb", 958 | "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4", 959 | "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e", 960 | "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1", 961 | "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48", 962 | "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868" 963 | ], 964 | "markers": "python_version >= '3.8'", 965 | "version": "==10.2.0" 966 | }, 967 | "protobuf": { 968 | "hashes": [ 969 | "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4", 970 | "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8", 971 | "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c", 972 | "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d", 973 | "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4", 974 | "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa", 975 | "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c", 976 | "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019", 977 | "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9", 978 | "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c", 979 | "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2" 980 | ], 981 | "markers": "python_version >= '3.8'", 982 | "version": "==4.25.3" 983 | }, 984 | "py": { 985 | "hashes": [ 986 | "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", 987 | "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" 988 | ], 989 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 990 | "version": "==1.11.0" 991 | }, 992 | "pyarrow": { 993 | "hashes": [ 994 | "sha256:07e652daac6d8b05280cd2af31c0fb61a4490ec6a53dc01588014d9fa3fdbee9", 995 | "sha256:1519e218a6941fc074e4501088d891afcb2adf77c236e03c34babcf3d6a0d1c7", 996 | "sha256:1b6e237dd7a08482a8b8f3f6512d258d2460f182931832a8c6ef3953203d31e1", 997 | "sha256:21d812548d39d490e0c6928a7c663f37b96bf764034123d4b4ab4530ecc757a9", 998 | "sha256:28cafa86e1944761970d3b3fc0411b14ff9b5c2b73cd22aaf470d7a3976335f5", 999 | "sha256:2c1c3fc16bc74e33bf8f1e5a212938ed8d88e902f372c4dac6b5bad328567d2f", 1000 | "sha256:309e6191be385f2e220586bfdb643f9bb21d7e1bc6dd0a6963dc538e347b2431", 1001 | "sha256:31dc30c7ec8958da3a3d9f31d6c3630429b2091ede0ecd0d989fd6bec129f0e4", 1002 | "sha256:3a99eac76ae14096c209850935057b9e8ce97a78397c5cde8724674774f34e5d", 1003 | "sha256:3f111a014fb8ac2297b43a74bf4495cc479a332908f7ee49cb7cbd50714cb0c1", 1004 | "sha256:47b1eda15d3aa3f49a07b1808648e1397e5dc6a80a30bf87faa8e2d02dad7ac3", 1005 | "sha256:4f87757f02735a6bb4ad2e1b98279ac45d53b748d5baf52401516413007c6999", 1006 | "sha256:5186048493395220550bca7b524420471aac2d77af831f584ce132680f55c3df", 1007 | "sha256:738f6b53ab1c2f66b2bde8a1d77e186aeaab702d849e0dfa1158c9e2c030add3", 1008 | "sha256:7543ea88a0ff72f8e6baaf9bfdbec2c62aeabdbede9e4a571c71cc3bc43b6302", 1009 | "sha256:7bd167536ee23192760b8c731d39b7cfd37914c27fd4582335ffd08450ff799d", 1010 | "sha256:7c08bb31eb2984ba5c3747d375bb522e7e536b8b25b149c9cb5e1c49b0ccb736", 1011 | "sha256:83bc586903dbeb4365cbc72b602f99f70b96c5882e5dfac5278813c7d624ca3c", 1012 | "sha256:862eac5e5f3b6477f7a92b2f27e560e1f4e5e9edfca9ea9da8a7478bb4abd5ce", 1013 | "sha256:8f0ea3a29cd5cb99bf14c1c4533eceaa00ea8fb580950fb5a89a5c771a994a4e", 1014 | "sha256:9ad931b996f51c2f978ed517b55cb3c6078272fb4ec579e3da5a8c14873b698d", 1015 | "sha256:a476fefe8bdd56122fb0d4881b785413e025858803cc1302d0d788d3522b374d", 1016 | "sha256:a6d1f7c15d7f68f08490d0cb34611497c74285b8a6bbeab4ef3fc20117310983", 1017 | "sha256:abad2e08652df153a72177ce20c897d083b0c4ebeec051239e2654ddf4d3c996", 1018 | "sha256:b4157f307c202cbbdac147d9b07447a281fa8e63494f7fc85081da351ec6ace9", 1019 | "sha256:b75e7da26f383787f80ad76143b44844ffa28648fcc7099a83df1538c078d2f2", 1020 | "sha256:bb902f780cfd624b2e8fd8501fadab17618fdb548532620ef3d91312aaf0888a", 1021 | "sha256:be5c3d463e33d03eab496e1af7916b1d44001c08f0f458ad27dc16093a020638", 1022 | "sha256:c0f9c1d630ed2524bd1ddf28ec92780a7b599fd54704cd653519f7ff5aec177a", 1023 | "sha256:c2ddb3be5ea938c329a84171694fc230b241ce1b6b0ff1a0280509af51c375fa", 1024 | "sha256:cde663352bc83ad75ba7b3206e049ca1a69809223942362a8649e37bd22f9e3b", 1025 | "sha256:ce8c89848fd37e5313fc2ce601483038ee5566db96ba0808d5883b2e2e55dc53", 1026 | "sha256:dd532d3177e031e9b2d2df19fd003d0cc0520d1747659fcabbd4d9bb87de508c", 1027 | "sha256:e1fa92512128f6c1b8dde0468c1454dd70f3bff623970e370d52efd4d24fd0be", 1028 | "sha256:e524a31be7db22deebbbcf242b189063ab9a7652c62471d296b31bc6e3cae77b", 1029 | "sha256:efd3816c7fbfcbd406ac0f69873cebb052effd7cdc153ae5836d1b00845845d7" 1030 | ], 1031 | "markers": "python_version >= '3.8'", 1032 | "version": "==15.0.1" 1033 | }, 1034 | "pydantic": { 1035 | "hashes": [ 1036 | "sha256:72c6034df47f46ccdf81869fddb81aade68056003900a8724a4f160700016a2a", 1037 | "sha256:e07805c4c7f5c6826e33a1d4c9d47950d7eaf34868e2690f8594d2e30241f11f" 1038 | ], 1039 | "markers": "python_version >= '3.8'", 1040 | "version": "==2.6.3" 1041 | }, 1042 | "pydantic-core": { 1043 | "hashes": [ 1044 | "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a", 1045 | "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed", 1046 | "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979", 1047 | "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff", 1048 | "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5", 1049 | "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45", 1050 | "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340", 1051 | "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad", 1052 | "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23", 1053 | "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6", 1054 | "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7", 1055 | "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241", 1056 | "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda", 1057 | "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187", 1058 | "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba", 1059 | "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c", 1060 | "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2", 1061 | "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c", 1062 | "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132", 1063 | "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf", 1064 | "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972", 1065 | "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db", 1066 | "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade", 1067 | "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4", 1068 | "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8", 1069 | "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f", 1070 | "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9", 1071 | "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48", 1072 | "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec", 1073 | "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d", 1074 | "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9", 1075 | "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb", 1076 | "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4", 1077 | "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89", 1078 | "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c", 1079 | "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9", 1080 | "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da", 1081 | "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac", 1082 | "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b", 1083 | "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf", 1084 | "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e", 1085 | "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137", 1086 | "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1", 1087 | "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b", 1088 | "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8", 1089 | "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e", 1090 | "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053", 1091 | "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01", 1092 | "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe", 1093 | "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd", 1094 | "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805", 1095 | "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183", 1096 | "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8", 1097 | "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99", 1098 | "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820", 1099 | "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074", 1100 | "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256", 1101 | "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8", 1102 | "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975", 1103 | "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad", 1104 | "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e", 1105 | "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca", 1106 | "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df", 1107 | "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b", 1108 | "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a", 1109 | "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a", 1110 | "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721", 1111 | "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a", 1112 | "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f", 1113 | "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2", 1114 | "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97", 1115 | "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6", 1116 | "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed", 1117 | "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc", 1118 | "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1", 1119 | "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe", 1120 | "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120", 1121 | "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f", 1122 | "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a" 1123 | ], 1124 | "markers": "python_version >= '3.8'", 1125 | "version": "==2.16.3" 1126 | }, 1127 | "pydeck": { 1128 | "hashes": [ 1129 | "sha256:9e0a67890ab061b8c6080e06f8c780934c00355a7114291c884f055f3fc0dc25", 1130 | "sha256:c89b3dd76f9991140a33b886b336c762105e9c9def8e842e891bc72dbce8a4ce" 1131 | ], 1132 | "markers": "python_version >= '3.7'", 1133 | "version": "==0.8.1b0" 1134 | }, 1135 | "pygments": { 1136 | "hashes": [ 1137 | "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", 1138 | "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" 1139 | ], 1140 | "markers": "python_version >= '3.7'", 1141 | "version": "==2.17.2" 1142 | }, 1143 | "python-dateutil": { 1144 | "hashes": [ 1145 | "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", 1146 | "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" 1147 | ], 1148 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", 1149 | "version": "==2.9.0.post0" 1150 | }, 1151 | "pytz": { 1152 | "hashes": [ 1153 | "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", 1154 | "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" 1155 | ], 1156 | "version": "==2024.1" 1157 | }, 1158 | "pyyaml": { 1159 | "hashes": [ 1160 | "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", 1161 | "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", 1162 | "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", 1163 | "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", 1164 | "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", 1165 | "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", 1166 | "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", 1167 | "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", 1168 | "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", 1169 | "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", 1170 | "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", 1171 | "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", 1172 | "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", 1173 | "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", 1174 | "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", 1175 | "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", 1176 | "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", 1177 | "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", 1178 | "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", 1179 | "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", 1180 | "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", 1181 | "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", 1182 | "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", 1183 | "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", 1184 | "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", 1185 | "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", 1186 | "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", 1187 | "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", 1188 | "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", 1189 | "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", 1190 | "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", 1191 | "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", 1192 | "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", 1193 | "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", 1194 | "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", 1195 | "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", 1196 | "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", 1197 | "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", 1198 | "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", 1199 | "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", 1200 | "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", 1201 | "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", 1202 | "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", 1203 | "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", 1204 | "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", 1205 | "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", 1206 | "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", 1207 | "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", 1208 | "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", 1209 | "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", 1210 | "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" 1211 | ], 1212 | "markers": "python_version >= '3.6'", 1213 | "version": "==6.0.1" 1214 | }, 1215 | "referencing": { 1216 | "hashes": [ 1217 | "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5", 1218 | "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7" 1219 | ], 1220 | "markers": "python_version >= '3.8'", 1221 | "version": "==0.33.0" 1222 | }, 1223 | "regex": { 1224 | "hashes": [ 1225 | "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5", 1226 | "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770", 1227 | "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc", 1228 | "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105", 1229 | "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d", 1230 | "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b", 1231 | "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9", 1232 | "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630", 1233 | "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6", 1234 | "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c", 1235 | "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482", 1236 | "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6", 1237 | "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a", 1238 | "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80", 1239 | "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5", 1240 | "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1", 1241 | "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f", 1242 | "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf", 1243 | "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb", 1244 | "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2", 1245 | "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347", 1246 | "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20", 1247 | "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060", 1248 | "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5", 1249 | "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73", 1250 | "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f", 1251 | "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d", 1252 | "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3", 1253 | "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae", 1254 | "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4", 1255 | "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2", 1256 | "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457", 1257 | "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c", 1258 | "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4", 1259 | "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87", 1260 | "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0", 1261 | "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704", 1262 | "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f", 1263 | "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f", 1264 | "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b", 1265 | "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5", 1266 | "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923", 1267 | "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715", 1268 | "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c", 1269 | "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca", 1270 | "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1", 1271 | "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756", 1272 | "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360", 1273 | "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc", 1274 | "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445", 1275 | "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e", 1276 | "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4", 1277 | "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a", 1278 | "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8", 1279 | "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53", 1280 | "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697", 1281 | "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf", 1282 | "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a", 1283 | "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415", 1284 | "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f", 1285 | "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9", 1286 | "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400", 1287 | "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d", 1288 | "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392", 1289 | "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb", 1290 | "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd", 1291 | "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861", 1292 | "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232", 1293 | "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95", 1294 | "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7", 1295 | "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39", 1296 | "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887", 1297 | "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5", 1298 | "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39", 1299 | "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb", 1300 | "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586", 1301 | "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97", 1302 | "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423", 1303 | "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69", 1304 | "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7", 1305 | "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1", 1306 | "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7", 1307 | "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5", 1308 | "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8", 1309 | "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91", 1310 | "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590", 1311 | "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe", 1312 | "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c", 1313 | "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64", 1314 | "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd", 1315 | "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa", 1316 | "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31", 1317 | "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988" 1318 | ], 1319 | "markers": "python_version >= '3.7'", 1320 | "version": "==2023.12.25" 1321 | }, 1322 | "requests": { 1323 | "hashes": [ 1324 | "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", 1325 | "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" 1326 | ], 1327 | "markers": "python_version >= '3.7'", 1328 | "version": "==2.31.0" 1329 | }, 1330 | "retry": { 1331 | "hashes": [ 1332 | "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606", 1333 | "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4" 1334 | ], 1335 | "index": "pypi", 1336 | "version": "==0.9.2" 1337 | }, 1338 | "rich": { 1339 | "hashes": [ 1340 | "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222", 1341 | "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432" 1342 | ], 1343 | "markers": "python_version >= '3.7'", 1344 | "version": "==13.7.1" 1345 | }, 1346 | "rpds-py": { 1347 | "hashes": [ 1348 | "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f", 1349 | "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c", 1350 | "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76", 1351 | "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e", 1352 | "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157", 1353 | "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f", 1354 | "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5", 1355 | "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05", 1356 | "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24", 1357 | "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1", 1358 | "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8", 1359 | "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b", 1360 | "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb", 1361 | "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07", 1362 | "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1", 1363 | "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6", 1364 | "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e", 1365 | "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e", 1366 | "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1", 1367 | "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab", 1368 | "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4", 1369 | "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17", 1370 | "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594", 1371 | "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d", 1372 | "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d", 1373 | "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3", 1374 | "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c", 1375 | "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66", 1376 | "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f", 1377 | "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80", 1378 | "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33", 1379 | "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f", 1380 | "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c", 1381 | "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022", 1382 | "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e", 1383 | "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f", 1384 | "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da", 1385 | "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1", 1386 | "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688", 1387 | "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795", 1388 | "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c", 1389 | "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98", 1390 | "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1", 1391 | "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20", 1392 | "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307", 1393 | "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4", 1394 | "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18", 1395 | "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294", 1396 | "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66", 1397 | "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467", 1398 | "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948", 1399 | "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e", 1400 | "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1", 1401 | "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0", 1402 | "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7", 1403 | "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd", 1404 | "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641", 1405 | "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d", 1406 | "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9", 1407 | "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1", 1408 | "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da", 1409 | "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3", 1410 | "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa", 1411 | "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7", 1412 | "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40", 1413 | "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496", 1414 | "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124", 1415 | "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836", 1416 | "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434", 1417 | "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984", 1418 | "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f", 1419 | "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6", 1420 | "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e", 1421 | "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461", 1422 | "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c", 1423 | "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432", 1424 | "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73", 1425 | "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58", 1426 | "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88", 1427 | "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337", 1428 | "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7", 1429 | "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863", 1430 | "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475", 1431 | "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3", 1432 | "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51", 1433 | "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf", 1434 | "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024", 1435 | "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40", 1436 | "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9", 1437 | "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec", 1438 | "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb", 1439 | "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7", 1440 | "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861", 1441 | "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880", 1442 | "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f", 1443 | "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd", 1444 | "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca", 1445 | "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58", 1446 | "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e" 1447 | ], 1448 | "markers": "python_version >= '3.8'", 1449 | "version": "==0.18.0" 1450 | }, 1451 | "segment-analytics-python": { 1452 | "hashes": [ 1453 | "sha256:06cc3d8e79103f02c3878ec66cb66152415473d0d2a142b98a0ee18da972e109", 1454 | "sha256:0df5908e3df74b4482f33392fdd450df4c8351bf54974376fbe6bf33b0700865" 1455 | ], 1456 | "index": "pypi", 1457 | "version": "==2.2.3" 1458 | }, 1459 | "six": { 1460 | "hashes": [ 1461 | "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", 1462 | "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" 1463 | ], 1464 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", 1465 | "version": "==1.16.0" 1466 | }, 1467 | "smmap": { 1468 | "hashes": [ 1469 | "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62", 1470 | "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da" 1471 | ], 1472 | "markers": "python_version >= '3.7'", 1473 | "version": "==5.0.1" 1474 | }, 1475 | "sniffio": { 1476 | "hashes": [ 1477 | "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", 1478 | "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc" 1479 | ], 1480 | "markers": "python_version >= '3.7'", 1481 | "version": "==1.3.1" 1482 | }, 1483 | "sqlalchemy": { 1484 | "hashes": [ 1485 | "sha256:0315d9125a38026227f559488fe7f7cee1bd2fbc19f9fd637739dc50bb6380b2", 1486 | "sha256:0d3dd67b5d69794cfe82862c002512683b3db038b99002171f624712fa71aeaa", 1487 | "sha256:124202b4e0edea7f08a4db8c81cc7859012f90a0d14ba2bf07c099aff6e96462", 1488 | "sha256:1ee8bd6d68578e517943f5ebff3afbd93fc65f7ef8f23becab9fa8fb315afb1d", 1489 | "sha256:243feb6882b06a2af68ecf4bec8813d99452a1b62ba2be917ce6283852cf701b", 1490 | "sha256:2858bbab1681ee5406650202950dc8f00e83b06a198741b7c656e63818633526", 1491 | "sha256:2f60843068e432311c886c5f03c4664acaef507cf716f6c60d5fde7265be9d7b", 1492 | "sha256:328529f7c7f90adcd65aed06a161851f83f475c2f664a898af574893f55d9e53", 1493 | "sha256:33157920b233bc542ce497a81a2e1452e685a11834c5763933b440fedd1d8e2d", 1494 | "sha256:3eba73ef2c30695cb7eabcdb33bb3d0b878595737479e152468f3ba97a9c22a4", 1495 | "sha256:426f2fa71331a64f5132369ede5171c52fd1df1bd9727ce621f38b5b24f48750", 1496 | "sha256:45c7b78dfc7278329f27be02c44abc0d69fe235495bb8e16ec7ef1b1a17952db", 1497 | "sha256:46a3d4e7a472bfff2d28db838669fc437964e8af8df8ee1e4548e92710929adc", 1498 | "sha256:4a5adf383c73f2d49ad15ff363a8748319ff84c371eed59ffd0127355d6ea1da", 1499 | "sha256:4b6303bfd78fb3221847723104d152e5972c22367ff66edf09120fcde5ddc2e2", 1500 | "sha256:56856b871146bfead25fbcaed098269d90b744eea5cb32a952df00d542cdd368", 1501 | "sha256:5da98815f82dce0cb31fd1e873a0cb30934971d15b74e0d78cf21f9e1b05953f", 1502 | "sha256:5df5d1dafb8eee89384fb7a1f79128118bc0ba50ce0db27a40750f6f91aa99d5", 1503 | "sha256:68722e6a550f5de2e3cfe9da6afb9a7dd15ef7032afa5651b0f0c6b3adb8815d", 1504 | "sha256:78bb7e8da0183a8301352d569900d9d3594c48ac21dc1c2ec6b3121ed8b6c986", 1505 | "sha256:81ba314a08c7ab701e621b7ad079c0c933c58cdef88593c59b90b996e8b58fa5", 1506 | "sha256:843a882cadebecc655a68bd9a5b8aa39b3c52f4a9a5572a3036fb1bb2ccdc197", 1507 | "sha256:87724e7ed2a936fdda2c05dbd99d395c91ea3c96f029a033a4a20e008dd876bf", 1508 | "sha256:8c7f10720fc34d14abad5b647bc8202202f4948498927d9f1b4df0fb1cf391b7", 1509 | "sha256:8e91b5e341f8c7f1e5020db8e5602f3ed045a29f8e27f7f565e0bdee3338f2c7", 1510 | "sha256:943aa74a11f5806ab68278284a4ddd282d3fb348a0e96db9b42cb81bf731acdc", 1511 | "sha256:9461802f2e965de5cff80c5a13bc945abea7edaa1d29360b485c3d2b56cdb075", 1512 | "sha256:9b66fcd38659cab5d29e8de5409cdf91e9986817703e1078b2fdaad731ea66f5", 1513 | "sha256:a6bec1c010a6d65b3ed88c863d56b9ea5eeefdf62b5e39cafd08c65f5ce5198b", 1514 | "sha256:a921002be69ac3ab2cf0c3017c4e6a3377f800f1fca7f254c13b5f1a2f10022c", 1515 | "sha256:aca7b6d99a4541b2ebab4494f6c8c2f947e0df4ac859ced575238e1d6ca5716b", 1516 | "sha256:ad7acbe95bac70e4e687a4dc9ae3f7a2f467aa6597049eeb6d4a662ecd990bb6", 1517 | "sha256:af8ce2d31679006e7b747d30a89cd3ac1ec304c3d4c20973f0f4ad58e2d1c4c9", 1518 | "sha256:b4a2cf92995635b64876dc141af0ef089c6eea7e05898d8d8865e71a326c0385", 1519 | "sha256:bbda76961eb8f27e6ad3c84d1dc56d5bc61ba8f02bd20fcf3450bd421c2fcc9c", 1520 | "sha256:bd7e4baf9161d076b9a7e432fce06217b9bd90cfb8f1d543d6e8c4595627edb9", 1521 | "sha256:bea30da1e76cb1acc5b72e204a920a3a7678d9d52f688f087dc08e54e2754c67", 1522 | "sha256:c61e2e41656a673b777e2f0cbbe545323dbe0d32312f590b1bc09da1de6c2a02", 1523 | "sha256:c6c4da4843e0dabde41b8f2e8147438330924114f541949e6318358a56d1875a", 1524 | "sha256:d3499008ddec83127ab286c6f6ec82a34f39c9817f020f75eca96155f9765097", 1525 | "sha256:dbb990612c36163c6072723523d2be7c3eb1517bbdd63fe50449f56afafd1133", 1526 | "sha256:dd53b6c4e6d960600fd6532b79ee28e2da489322fcf6648738134587faf767b6", 1527 | "sha256:df40c16a7e8be7413b885c9bf900d402918cc848be08a59b022478804ea076b8", 1528 | "sha256:e0a5354cb4de9b64bccb6ea33162cb83e03dbefa0d892db88a672f5aad638a75", 1529 | "sha256:e0b148ab0438f72ad21cb004ce3bdaafd28465c4276af66df3b9ecd2037bf252", 1530 | "sha256:e23b88c69497a6322b5796c0781400692eca1ae5532821b39ce81a48c395aae9", 1531 | "sha256:fc4974d3684f28b61b9a90fcb4c41fb340fd4b6a50c04365704a4da5a9603b05", 1532 | "sha256:feea693c452d85ea0015ebe3bb9cd15b6f49acc1a31c28b3c50f4db0f8fb1e71", 1533 | "sha256:fffcc8edc508801ed2e6a4e7b0d150a62196fd28b4e16ab9f65192e8186102b6" 1534 | ], 1535 | "markers": "python_version >= '3.7'", 1536 | "version": "==2.0.28" 1537 | }, 1538 | "streamlit": { 1539 | "hashes": [ 1540 | "sha256:536494a4edfe9b66ed70c437176cfd6c7e36b1d99d0587b0be64245fa89c241b", 1541 | "sha256:90333915d9df8ce3b06de31b8a5bbab51e8cf0982dc6c32da9d6b1f2b4a9fa78" 1542 | ], 1543 | "index": "pypi", 1544 | "version": "==1.30" 1545 | }, 1546 | "streamlit-feedback": { 1547 | "hashes": [ 1548 | "sha256:533082aa7b0978692527a46ef63d520db50be79d43a436baa6c2d11a1d93fe9d", 1549 | "sha256:90f198a4e116e901aaf08058261d444f0abcd3a365bac8c5d6fc08a3c05e02a2" 1550 | ], 1551 | "index": "pypi", 1552 | "version": "==0.1.3" 1553 | }, 1554 | "tenacity": { 1555 | "hashes": [ 1556 | "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a", 1557 | "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c" 1558 | ], 1559 | "markers": "python_version >= '3.7'", 1560 | "version": "==8.2.3" 1561 | }, 1562 | "tiktoken": { 1563 | "hashes": [ 1564 | "sha256:05b344c61779f815038292a19a0c6eb7098b63c8f865ff205abb9ea1b656030e", 1565 | "sha256:07f229a5eb250b6403a61200199cecf0aac4aa23c3ecc1c11c1ca002cbb8f159", 1566 | "sha256:0c1a3a5d33846f8cd9dd3b7897c1d45722f48625a587f8e6f3d3e85080559be8", 1567 | "sha256:0ef917fad0bccda07bfbad835525bbed5f3ab97a8a3e66526e48cdc3e7beacf7", 1568 | "sha256:168d718f07a39b013032741867e789971346df8e89983fe3c0ef3fbd5a0b1cb9", 1569 | "sha256:17cc8a4a3245ab7d935c83a2db6bb71619099d7284b884f4b2aea4c74f2f83e3", 1570 | "sha256:1ccb7a111ee76af5d876a729a347f8747d5ad548e1487eeea90eaf58894b3138", 1571 | "sha256:1f5f0f2ed67ba16373f9a6013b68da298096b27cd4e1cf276d2d3868b5c7efd1", 1572 | "sha256:277de84ccd8fa12730a6b4067456e5cf72fef6300bea61d506c09e45658d41ac", 1573 | "sha256:284aebcccffe1bba0d6571651317df6a5b376ff6cfed5aeb800c55df44c78177", 1574 | "sha256:293cb8669757301a3019a12d6770bd55bec38a4d3ee9978ddbe599d68976aca7", 1575 | "sha256:430bc4e650a2d23a789dc2cdca3b9e5e7eb3cd3935168d97d43518cbb1f9a911", 1576 | "sha256:432aa3be8436177b0db5a2b3e7cc28fd6c693f783b2f8722539ba16a867d0c6a", 1577 | "sha256:45577faf9a9d383b8fd683e313cf6df88b6076c034f0a16da243bb1c139340c3", 1578 | "sha256:47fdcfe11bd55376785a6aea8ad1db967db7f66ea81aed5c43fad497521819a4", 1579 | "sha256:5f1495450a54e564d236769d25bfefbf77727e232d7a8a378f97acddee08c1ae", 1580 | "sha256:6318b2bb2337f38ee954fd5efa82632c6e5ced1d52a671370fa4b2eff1355e91", 1581 | "sha256:6c4e4857d99f6fb4670e928250835b21b68c59250520a1941618b5b4194e20c3", 1582 | "sha256:702950d33d8cabc039845674107d2e6dcabbbb0990ef350f640661368df481bb", 1583 | "sha256:75af4c0b16609c2ad02581f3cdcd1fb698c7565091370bf6c0cf8624ffaba6dc", 1584 | "sha256:7bd1a288b7903aadc054b0e16ea78e3171f70b670e7372432298c686ebf9dd47", 1585 | "sha256:7c1492ab90c21ca4d11cef3a236ee31a3e279bb21b3fc5b0e2210588c4209e68", 1586 | "sha256:8bfe8a19c8b5c40d121ee7938cd9c6a278e5b97dc035fd61714b4f0399d2f7a1", 1587 | "sha256:9c44433f658064463650d61387623735641dcc4b6c999ca30bc0f8ba3fccaf5c", 1588 | "sha256:ac76e000183e3b749634968a45c7169b351e99936ef46f0d2353cd0d46c3118d", 1589 | "sha256:ace62a4ede83c75b0374a2ddfa4b76903cf483e9cb06247f566be3bf14e6beed", 1590 | "sha256:afb9a2a866ae6eef1995ab656744287a5ac95acc7e0491c33fad54d053288ad3", 1591 | "sha256:b2048e1086b48e3c8c6e2ceeac866561374cd57a84622fa49a6b245ffecb7744", 1592 | "sha256:c62c05b3109fefca26fedb2820452a050074ad8e5ad9803f4652977778177d9f", 1593 | "sha256:c9f497598b9f58c99cbc0eb764b4a92272c14d5203fc713dd650b896a03a50ad", 1594 | "sha256:cefb9870fb55dca9e450e54dbf61f904aab9180ff6fe568b61f4db9564e78871", 1595 | "sha256:e095131ab6092d0769a2fda85aa260c7c383072daec599ba9d8b149d2a3f4d8b", 1596 | "sha256:e2b380c5b7751272015400b26144a2bab4066ebb8daae9c3cd2a92c3b508fe5a", 1597 | "sha256:e65e8bd6f3f279d80f1e1fbd5f588f036b9a5fa27690b7f0cc07021f1dfa0839", 1598 | "sha256:e8d49d076058f23254f2aff9af603863c5c5f9ab095bc896bceed04f8f0b013a", 1599 | "sha256:fb7d2ccbf1a7784810aff6b80b4012fb42c6fc37eaa68cb3b553801a5cc2d1fc" 1600 | ], 1601 | "markers": "python_version >= '3.8'", 1602 | "version": "==0.6.0" 1603 | }, 1604 | "toml": { 1605 | "hashes": [ 1606 | "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", 1607 | "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" 1608 | ], 1609 | "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", 1610 | "version": "==0.10.2" 1611 | }, 1612 | "toolz": { 1613 | "hashes": [ 1614 | "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85", 1615 | "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d" 1616 | ], 1617 | "markers": "python_version >= '3.7'", 1618 | "version": "==0.12.1" 1619 | }, 1620 | "tornado": { 1621 | "hashes": [ 1622 | "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0", 1623 | "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63", 1624 | "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263", 1625 | "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052", 1626 | "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f", 1627 | "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee", 1628 | "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78", 1629 | "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579", 1630 | "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212", 1631 | "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e", 1632 | "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2" 1633 | ], 1634 | "markers": "python_version >= '3.8'", 1635 | "version": "==6.4" 1636 | }, 1637 | "tqdm": { 1638 | "hashes": [ 1639 | "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9", 1640 | "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531" 1641 | ], 1642 | "markers": "python_version >= '3.7'", 1643 | "version": "==4.66.2" 1644 | }, 1645 | "types-requests": { 1646 | "hashes": [ 1647 | "sha256:a82807ec6ddce8f00fe0e949da6d6bc1fbf1715420218a9640d695f70a9e5a9b", 1648 | "sha256:f1721dba8385958f504a5386240b92de4734e047a08a40751c1654d1ac3349c5" 1649 | ], 1650 | "markers": "python_version >= '3.8'", 1651 | "version": "==2.31.0.20240218" 1652 | }, 1653 | "typing-extensions": { 1654 | "hashes": [ 1655 | "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475", 1656 | "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb" 1657 | ], 1658 | "markers": "python_version >= '3.8'", 1659 | "version": "==4.10.0" 1660 | }, 1661 | "typing-inspect": { 1662 | "hashes": [ 1663 | "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", 1664 | "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78" 1665 | ], 1666 | "version": "==0.9.0" 1667 | }, 1668 | "tzdata": { 1669 | "hashes": [ 1670 | "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd", 1671 | "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252" 1672 | ], 1673 | "markers": "python_version >= '2'", 1674 | "version": "==2024.1" 1675 | }, 1676 | "tzlocal": { 1677 | "hashes": [ 1678 | "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8", 1679 | "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e" 1680 | ], 1681 | "markers": "python_version >= '3.8'", 1682 | "version": "==5.2" 1683 | }, 1684 | "urllib3": { 1685 | "hashes": [ 1686 | "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", 1687 | "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" 1688 | ], 1689 | "markers": "python_version >= '3.8'", 1690 | "version": "==2.2.1" 1691 | }, 1692 | "validators": { 1693 | "hashes": [ 1694 | "sha256:61cf7d4a62bbae559f2e54aed3b000cea9ff3e2fdbe463f51179b92c58c9585a", 1695 | "sha256:77b2689b172eeeb600d9605ab86194641670cdb73b60afd577142a9397873370" 1696 | ], 1697 | "markers": "python_version >= '3.8'", 1698 | "version": "==0.22.0" 1699 | }, 1700 | "yarl": { 1701 | "hashes": [ 1702 | "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51", 1703 | "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce", 1704 | "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559", 1705 | "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0", 1706 | "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81", 1707 | "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc", 1708 | "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4", 1709 | "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c", 1710 | "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130", 1711 | "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136", 1712 | "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e", 1713 | "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec", 1714 | "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7", 1715 | "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1", 1716 | "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455", 1717 | "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099", 1718 | "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129", 1719 | "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10", 1720 | "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142", 1721 | "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98", 1722 | "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa", 1723 | "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7", 1724 | "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525", 1725 | "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c", 1726 | "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9", 1727 | "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c", 1728 | "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8", 1729 | "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b", 1730 | "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf", 1731 | "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23", 1732 | "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd", 1733 | "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27", 1734 | "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f", 1735 | "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece", 1736 | "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434", 1737 | "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec", 1738 | "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff", 1739 | "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78", 1740 | "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d", 1741 | "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863", 1742 | "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53", 1743 | "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31", 1744 | "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15", 1745 | "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5", 1746 | "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b", 1747 | "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57", 1748 | "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3", 1749 | "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1", 1750 | "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f", 1751 | "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad", 1752 | "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c", 1753 | "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7", 1754 | "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2", 1755 | "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b", 1756 | "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2", 1757 | "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b", 1758 | "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9", 1759 | "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be", 1760 | "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e", 1761 | "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984", 1762 | "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4", 1763 | "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074", 1764 | "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2", 1765 | "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392", 1766 | "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91", 1767 | "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541", 1768 | "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf", 1769 | "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572", 1770 | "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66", 1771 | "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575", 1772 | "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14", 1773 | "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5", 1774 | "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1", 1775 | "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e", 1776 | "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551", 1777 | "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17", 1778 | "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead", 1779 | "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0", 1780 | "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe", 1781 | "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234", 1782 | "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0", 1783 | "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7", 1784 | "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34", 1785 | "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42", 1786 | "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385", 1787 | "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78", 1788 | "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be", 1789 | "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958", 1790 | "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749", 1791 | "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec" 1792 | ], 1793 | "markers": "python_version >= '3.7'", 1794 | "version": "==1.9.4" 1795 | }, 1796 | "zipp": { 1797 | "hashes": [ 1798 | "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", 1799 | "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" 1800 | ], 1801 | "markers": "python_version >= '3.8'", 1802 | "version": "==3.17.0" 1803 | } 1804 | }, 1805 | "develop": {} 1806 | } 1807 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Neo4j RAG Demo 2 | This sample application demonstrates how to implement a Large Language Model (LLM) and Retrieval Augmented Generation (RAG) system with a Neo4j Graph Database. This application uses Streamlit, LangChain, [Neo4jVector](https://python.langchain.com/docs/integrations/vectorstores/neo4jvector) vectorstore and [Neo4j DB QA Chain](https://python.langchain.com/docs/use_cases/graph/graph_cypher_qa) 3 | 4 | ![Alt Text](https://res.cloudinary.com/dk0tizgdn/image/upload/v1707842287/rag-demo-short_vwezew.gif) 5 | 6 | ## Requirements 7 | - [Poetry](https://python-poetry.org) for dependency managament. 8 | - Duplicate the `secrets.toml.example` file to `secrets.toml` and populate with appropriate keys. 9 | 10 | ## Usage 11 | ``` 12 | poetry update 13 | poetry run streamlit run rag_demo/main.py --server.port=80 14 | 15 | OR 16 | 17 | pipenv shell 18 | pipenv install 19 | pipenv run streamlit run rag_demo/main.py 20 | ``` 21 | 22 | ## GCloud Update 23 | A hosted example of the rag-demo can be found at https://dev.neo4j.com/rag-demo. To create and run your own hosted version of this app on Google Cloud: 24 | 25 | 1. First Install [gcloud CLI](https://cloud.google.com/sdk/docs/install), then: 26 | 2. Update the requirements.txt file with `poetry export --without-hashes --format=requirements.txt > requirements.txt` 27 | 3. Make sure a copy of the streamlit secrets.toml file is in the root folder path (may have to temp comment out from .gitignore for the gcloud build to properly find the secrets.toml file) 28 | 4. Run the following terminal commands 29 | ``` 30 | gcloud auth login 31 | gcloud init 32 | gcloud builds submit --tag gcr.io//streamlit-app 33 | gcloud run deploy --image gcr.io//streamlit-app --platform managed --allow-unauthenticated 34 | ``` -------------------------------------------------------------------------------- /app.yaml: -------------------------------------------------------------------------------- 1 | runtime: python311 2 | 3 | entrypoint: streamlit run rag_demo/main.py --server.enableCORS false --browser.serverAddress 0.0.0.0 --browser.gatherUsageStats false --server.port $PORT -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "rag-demo" 3 | version = "0.1.1" 4 | description = "" 5 | authors = ["Andreas Kollegger ", "Jennifer Reif", "Jason Koo ", "Alison Cossette "] 6 | readme = "README.md" 7 | packages = [{include = "rag_demo"}] 8 | 9 | [tool.poetry.dependencies] 10 | python = "^3.11" 11 | langchain = "^0.2.5" 12 | langchain-openai = "^0.1.8" 13 | langchain-community = "^0.2.5" 14 | langchainhub = "^0.1.20" 15 | neo4j = "^5.21.0" 16 | retry = "^0.9.2" 17 | segment-analytics-python = "^2.3.2" 18 | streamlit = "^1.35.0" 19 | streamlit-feedback = "^0.1.3" 20 | 21 | [build-system] 22 | requires = ["poetry-core"] 23 | build-backend = "poetry.core.masonry.api" 24 | -------------------------------------------------------------------------------- /rag_demo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-examples/rag-demo/738e96c4c6db75badcbc816ec5d97b0bacbcd234/rag_demo/__init__.py -------------------------------------------------------------------------------- /rag_demo/__pycache__/neo4j_driver.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-examples/rag-demo/738e96c4c6db75badcbc816ec5d97b0bacbcd234/rag_demo/__pycache__/neo4j_driver.cpython-311.pyc -------------------------------------------------------------------------------- /rag_demo/analytics.py: -------------------------------------------------------------------------------- 1 | from segment import analytics 2 | import streamlit as st 3 | import uuid 4 | 5 | SESSION_ID = "SESSION_ID" 6 | 7 | try: 8 | segment_key = st.secrets["SEGMENT_WRITE_KEY"] 9 | if segment_key == "" or segment_key is None: 10 | ANALYTICS_ENABLED = False 11 | else: 12 | ANALYTICS_ENABLED = True 13 | analytics.write_key = segment_key 14 | except: 15 | ANALYTICS_ENABLED = False 16 | 17 | def track( 18 | user_id: str, 19 | event_name: str, 20 | properties: dict): 21 | """Simple wrapper for Segment's analytics.track() 22 | 23 | Args: 24 | user_id (str): Unique identifier for session/user 25 | event_name (str): Name of tracking event 26 | properties (dict): Any optional additional properties 27 | """ 28 | 29 | if ANALYTICS_ENABLED is False: 30 | return 31 | 32 | if SESSION_ID not in st.session_state: 33 | st.session_state[SESSION_ID] = str(uuid.uuid4()) 34 | 35 | properties["session_id"] = st.session_state[SESSION_ID] 36 | 37 | analytics.track( 38 | user_id = user_id, 39 | event = event_name, 40 | properties = properties) -------------------------------------------------------------------------------- /rag_demo/constants.py: -------------------------------------------------------------------------------- 1 | SCHEMA_IMG_PATH = "https://res.cloudinary.com/dk0tizgdn/image/upload/v1709044753/rag-demo-data-model_j4dvfk.png" 2 | LANGCHAIN_IMG_PATH = "https://res.cloudinary.com/dk0tizgdn/image/upload/v1704991084/langchain-neo4j_cy2mky.png" 3 | 4 | # Has a white border around logo 5 | TITLE = f""" 6 | 9 |
SEC EDGAR Filings
10 |
11 | Powered by 12 |
13 | """ -------------------------------------------------------------------------------- /rag_demo/free_use_manager.py: -------------------------------------------------------------------------------- 1 | # Manages number of free questions permitted before forcing user to supply their own OpenAI Key 2 | 3 | import streamlit as st 4 | 5 | def _setup_free_questions_count(): 6 | if "FREE_QUESTIONS_REMAINING" not in st.session_state: 7 | try: 8 | st.session_state["FREE_QUESTIONS_REMAINING"] = st.secrets["FREE_QUESTIONS_PER_SESSION"] 9 | except: 10 | st.session_state["FREE_QUESTIONS_REMAINING"] = 100 11 | 12 | def free_questions_exhausted()-> bool: 13 | 14 | _setup_free_questions_count() 15 | 16 | remaining = st.session_state["FREE_QUESTIONS_REMAINING"] 17 | return remaining <= 0 18 | 19 | def user_supplied_openai_key_unavailable()-> bool: 20 | if "USER_OPENAI_KEY" not in st.session_state: 21 | return True 22 | uok = st.session_state["USER_OPENAI_KEY"] 23 | if uok is None or uok == "": 24 | return True 25 | return False 26 | 27 | def decrement_free_questions(): 28 | 29 | _setup_free_questions_count() 30 | 31 | remaining = st.session_state["FREE_QUESTIONS_REMAINING"] 32 | if remaining > 0: 33 | st.session_state["FREE_QUESTIONS_REMAINING"] = remaining - 1 34 | -------------------------------------------------------------------------------- /rag_demo/graph_cypher_chain.py: -------------------------------------------------------------------------------- 1 | from langchain.chains import GraphCypherQAChain 2 | from langchain.chains.conversation.memory import ConversationBufferMemory 3 | from langchain_community.graphs import Neo4jGraph 4 | from langchain.prompts.prompt import PromptTemplate 5 | from langchain_openai import ChatOpenAI 6 | from retry import retry 7 | import logging 8 | import streamlit as st 9 | 10 | CYPHER_GENERATION_TEMPLATE = """Task: Generate Cypher statement to query a graph database strictly based on the schema and instructions provided. 11 | Instructions: 12 | 1. Use only nodes, relationships, and properties mentioned in the schema. 13 | 2. Always enclose the Cypher output inside 3 backticks. Do not add 'cypher' after the backticks. 14 | 3. Always do a case-insensitive and fuzzy search for any properties related search. Eg: to search for a Company name use `toLower(c.name) contains 'neo4j'` 15 | 4. Always use aliases to refer the node in the query 16 | 5. Always return count(DISTINCT n) for aggregations to avoid duplicates 17 | 6. `OWNS_STOCK_IN` relationship is syonymous with `OWNS` and `OWNER` 18 | 7. Use examples of questions and accurate Cypher statements below to guide you. 19 | 20 | Schema: 21 | {schema} 22 | 23 | Examples: Here are a few examples of generated Cypher statements for particular questions: 24 | 25 | # How many Managers own Companies? 26 | MATCH (m:Manager)-[:OWNS_STOCK_IN]->(c:Company) 27 | RETURN count(DISTINCT m) 28 | 29 | # How many companies are in filings? 30 | MATCH (c:Company) 31 | RETURN count(DISTINCT c) 32 | 33 | # Which companies are vulnerable to material shortage? 34 | MATCH (co:Company)-[fi]-(f:Form)-[po]-(c:Chunk) 35 | WHERE toLower(c.text) CONTAINS "material" 36 | RETURN DISTINCT count(c) as chunks, co.name ORDER BY chunks desc 37 | 38 | # Which companies are in a specific industry? 39 | MATCH (co:Company)-[fi]-(f:Form)-[po]-(c:Chunk) 40 | WHERE toLower(c.text) CONTAINS "industryName" 41 | RETURN DISTINCT count(c) as chunks, co.name ORDER BY chunks desc 42 | 43 | The question is: 44 | {question}""" 45 | 46 | CYPHER_GENERATION_PROMPT = PromptTemplate( 47 | input_variables=["schema", "question"], template=CYPHER_GENERATION_TEMPLATE 48 | ) 49 | 50 | MEMORY = ConversationBufferMemory( 51 | memory_key="chat_history", 52 | input_key='question', 53 | output_key='answer', 54 | return_messages=True) 55 | 56 | url = st.secrets["NEO4J_URI"] 57 | username = st.secrets["NEO4J_USERNAME"] 58 | password = st.secrets["NEO4J_PASSWORD"] 59 | 60 | if "USER_OPENAI_API_KEY" in st.session_state: 61 | openai_key = st.session_state["USER_OPENAI_API_KEY"] 62 | else: 63 | openai_key = st.secrets["OPENAI_API_KEY"] 64 | 65 | graph = Neo4jGraph( 66 | url=url, 67 | username=username, 68 | password=password, 69 | sanitize = True 70 | ) 71 | 72 | # Official API doc for GraphCypherQAChain at: https://api.python.langchain.com/en/latest/chains/langchain.chains.graph_qa.base.GraphQAChain.html# 73 | graph_chain = GraphCypherQAChain.from_llm( 74 | cypher_llm=ChatOpenAI( 75 | openai_api_key=openai_key, 76 | temperature=0, 77 | model_name="gpt-4" 78 | ), 79 | qa_llm=ChatOpenAI( 80 | openai_api_key=openai_key, 81 | temperature=0, 82 | model_name="gpt-4" 83 | ), 84 | validate_cypher= True, 85 | graph=graph, 86 | verbose=True, 87 | # return_intermediate_steps = True, 88 | return_direct = True 89 | ) 90 | 91 | @retry(tries=2, delay=12) 92 | def get_results(question) -> str: 93 | """Generate a response from a GraphCypherQAChain targeted at generating answered related to relationships. 94 | 95 | Args: 96 | question (str): User query 97 | 98 | Returns: 99 | str: Answer from chain 100 | """ 101 | 102 | logging.info(f'Using Neo4j database at url: {url}') 103 | 104 | graph.refresh_schema() 105 | 106 | prompt=CYPHER_GENERATION_PROMPT.format(schema=graph.get_schema, question=question) 107 | print('Prompt:', prompt) 108 | 109 | chain_result = None 110 | 111 | try: 112 | chain_result = graph_chain.invoke({ 113 | "query": question}, 114 | prompt=prompt, 115 | return_only_outputs = True, 116 | ) 117 | except Exception as e: 118 | # Occurs when the chain can not generate a cypher statement 119 | # for the question with the given database schema 120 | logging.warning(f'Handled exception running graphCypher chain: {e}') 121 | 122 | logging.debug(f'chain_result: {chain_result}') 123 | 124 | if chain_result is None: 125 | return "Sorry, I couldn't find an answer to your question" 126 | 127 | result = chain_result.get("result", None) 128 | 129 | return result -------------------------------------------------------------------------------- /rag_demo/graph_cypher_tool.py: -------------------------------------------------------------------------------- 1 | from langchain.tools import tool 2 | from graph_cypher_chain import get_results 3 | 4 | @tool("graph-cypher-tool") 5 | def graph_cypher_tool(query:str) -> str: 6 | """ 7 | Useful when answer requires calculating numerical answers like aggregations. 8 | Use when question asks for a count or how many. 9 | Use full question as input. 10 | Do not call this tool more than once. 11 | Do not call another tool if this returns results. 12 | """ 13 | return get_results(query) -------------------------------------------------------------------------------- /rag_demo/graph_tool.py: -------------------------------------------------------------------------------- 1 | from langchain.tools import tool 2 | from graph_chain import get_results 3 | 4 | @tool("graph-tool") 5 | def graph_tool(query:str) -> str: 6 | """Tool for returning aggregations of Manager or Company or Industry data or if answer is dependent on relationships between a Company and other objects. Use this tool second and to verify results of vector-graph-tool. 7 | """ 8 | return get_results(query) -------------------------------------------------------------------------------- /rag_demo/main.py: -------------------------------------------------------------------------------- 1 | from analytics import track 2 | from free_use_manager import ( 3 | free_questions_exhausted, 4 | user_supplied_openai_key_unavailable, 5 | decrement_free_questions, 6 | ) 7 | from langchain.globals import set_llm_cache 8 | from langchain_community.cache import InMemoryCache 9 | from streamlit_feedback import streamlit_feedback 10 | from constants import TITLE 11 | import logging 12 | import rag_agent 13 | import streamlit as st 14 | from sidebar import sidebar 15 | 16 | # Logging options 17 | logger = logging.getLogger(__name__) 18 | logger.setLevel(logging.INFO) 19 | 20 | # Anonymous Session Analytics 21 | if "SESSION_ID" not in st.session_state: 22 | # Track method will create and add session id to state on first run 23 | track("rag_demo", "appStarted", {}) 24 | 25 | # LangChain caching to reduce API calls 26 | set_llm_cache(InMemoryCache()) 27 | 28 | # App title 29 | st.markdown(TITLE, unsafe_allow_html=True) 30 | sidebar() 31 | 32 | # Define message placeholder and emoji feedback placeholder 33 | placeholder = st.empty() 34 | emoji_feedback = st.empty() 35 | user_placeholder = st.empty() 36 | 37 | # Initialize message history 38 | if "messages" not in st.session_state: 39 | st.session_state.messages = [ 40 | { 41 | "role": "ai", 42 | "content": f"This is a Proof of Concept application which shows how GenAI can be used with Neo4j to build and consume Knowledge Graphs using both vectors and structured data.\nSee the sidebar for more information!", 43 | }, 44 | # {"role": "ai", "content": f"""This the schema in which the EDGAR filings are stored in Neo4j: \n """}, 45 | # {"role": "ai", "content": f"""This is how the Chatbot flow goes: \n """} 46 | ] 47 | 48 | # Display chat messages from history on app rerun 49 | with placeholder.container(): 50 | for message in st.session_state.messages: 51 | with st.chat_message(message["role"]): 52 | st.markdown(message["content"], unsafe_allow_html=True) 53 | 54 | # User input - switch between sidebar sample quick select or actual user input. Clunky but works. 55 | if free_questions_exhausted() and user_supplied_openai_key_unavailable(): 56 | st.warning( 57 | "Thank you for trying out the Neo4j Rag Demo. Please input your OpenAI Key in the sidebar to continue asking questions." 58 | ) 59 | st.stop() 60 | 61 | if "sample" in st.session_state and st.session_state["sample"] is not None: 62 | user_input = st.session_state["sample"] 63 | else: 64 | user_input = st.chat_input( 65 | placeholder="Ask question on the SEC Filings", key="user_input" 66 | ) 67 | 68 | if user_input: 69 | with user_placeholder.container(): 70 | track("rag_demo", "question_submitted", {"question": user_input}) 71 | st.session_state.messages.append({"role": "user", "content": user_input}) 72 | with st.chat_message("user"): 73 | st.markdown(user_input) 74 | 75 | with st.chat_message("ai"): 76 | 77 | # Agent response 78 | with st.spinner("..."): 79 | 80 | message_placeholder = st.empty() 81 | thought_container = st.container() 82 | 83 | # For displaying chain of thought - this callback handler appears to only works with the deprecated initialize_agent option (see rag_agent.py) 84 | # st_callback = StreamlitCallbackHandler( 85 | # parent_container= thought_container, 86 | # expand_new_thoughts=False 87 | # ) 88 | # StreamlitCcallbackHandler api doc: https://api.python.langchain.com/en/latest/callbacks/langchain_community.callbacks.streamlit.streamlit_callback_handler.StreamlitCallbackHandler.html 89 | 90 | agent_response = rag_agent.get_results( 91 | question=user_input, callbacks=[] 92 | ) 93 | 94 | if isinstance(agent_response, dict) is False: 95 | logging.warning( 96 | f"Agent response was not the expected dict type: {agent_response}" 97 | ) 98 | agent_response = str(agent_response) 99 | 100 | content = agent_response["output"] 101 | 102 | track( 103 | "rag_demo", "ai_response", {"type": "rag_agent", "answer": content} 104 | ) 105 | new_message = {"role": "ai", "content": content} 106 | st.session_state.messages.append(new_message) 107 | 108 | decrement_free_questions() 109 | 110 | message_placeholder.markdown(content) 111 | 112 | # Reinsert user chat input if sample quick select was previously used. 113 | if "sample" in st.session_state and st.session_state["sample"] is not None: 114 | st.session_state["sample"] = None 115 | user_input = st.chat_input( 116 | placeholder="Ask question on the SEC Filings", key="user_input" 117 | ) 118 | 119 | emoji_feedback = st.empty() 120 | 121 | # Emoji feedback 122 | with emoji_feedback.container(): 123 | feedback = streamlit_feedback(feedback_type="thumbs") 124 | if feedback: 125 | score = feedback["score"] 126 | last_bot_message = st.session_state["messages"][-1]["content"] 127 | track( 128 | "rag_demo", 129 | "feedback_submitted", 130 | {"score": score, "bot_message": last_bot_message}, 131 | ) 132 | -------------------------------------------------------------------------------- /rag_demo/rag_agent.py: -------------------------------------------------------------------------------- 1 | from langchain.agents import AgentExecutor, create_react_agent 2 | from langchain_community.agent_toolkits.load_tools import load_tools 3 | from langchain import hub # requires langchainhub package 4 | from langchain_openai import OpenAI 5 | from vector_graph_tool import vector_graph_tool 6 | from graph_cypher_tool import graph_cypher_tool 7 | from vector_tool import vector_tool 8 | from retry import retry 9 | 10 | 11 | # Setup tools the agent will use 12 | llm = OpenAI(temperature=0) 13 | tools = load_tools([], llm=llm) 14 | tools = tools + [vector_graph_tool, graph_cypher_tool, vector_tool] 15 | 16 | 17 | # REACT AGENT EXECUTOR 18 | 19 | prompt = hub.pull("hwchase17/react") 20 | 21 | # More on agent types: https://python.langchain.com/docs/modules/agents/agent_types/ 22 | agent = create_react_agent(llm, tools, prompt) 23 | 24 | # NOTE: early_stopping_method generate option ONLY available for multi-action agents 25 | agent_executor = AgentExecutor( 26 | agent=agent, 27 | tools=tools, 28 | verbose=True, 29 | ) 30 | 31 | 32 | @retry(tries=2, delay=20) 33 | def get_results(question, callbacks) -> dict: 34 | """Starts a LangChain agent to generate an answer using one of several Neo4j RAG tools. 35 | 36 | Args: 37 | question (str): User query 38 | callbacks (list): List of optional LangChain callback handlers 39 | 40 | Returns: 41 | dict: Final answer as a dict with the keys: input, output, intermediate_steps 42 | """ 43 | 44 | response = agent_executor.invoke({"input": question}, callbacks=callbacks) 45 | return response 46 | -------------------------------------------------------------------------------- /rag_demo/sidebar.py: -------------------------------------------------------------------------------- 1 | from constants import SCHEMA_IMG_PATH, LANGCHAIN_IMG_PATH 2 | import streamlit as st 3 | import streamlit.components.v1 as components 4 | 5 | def ChangeButtonColour(wgt_txt, wch_hex_colour = '12px'): 6 | htmlstr = """ """ 10 | 11 | htmlstr = htmlstr.replace('|wgt_txt|', "'" + wgt_txt + "'") 12 | components.html(f"{htmlstr}", height=0, width=0) 13 | 14 | def sidebar(): 15 | with st.sidebar: 16 | 17 | with st.expander("OpenAI Key"): 18 | new_oak = st.text_input("Your OpenAI API Key") 19 | # if "USER_OPENAI_KEY" not in st.session_state: 20 | # st.session_state["USER_OPENAI_KEY"] = new_oak 21 | # else: 22 | st.session_state["USER_OPENAI_KEY"] = new_oak 23 | 24 | st.markdown(f"""This the schema in which the EDGAR filings are stored in Neo4j: \n """, unsafe_allow_html=True) 25 | 26 | st.markdown(f"""This is how the Chatbot flow goes: \n """, unsafe_allow_html=True) 27 | 28 | st.markdown("""Questions you can ask of the dataset:""", unsafe_allow_html=True) 29 | 30 | # To style buttons closer together 31 | st.markdown(""" 32 | 41 | """, unsafe_allow_html=True) 42 | 43 | sample_questions = "How many companies are in the filings?", "Which companies are in the healthcare industry?","Which companies are vulnerable to lithium shortage?", "Which managers own more than one company?", "List the top 3 managers by the number of companies they own.", "Which 5 companies have the most managers?" 44 | 45 | for text, col in zip(sample_questions, st.columns(len(sample_questions))): 46 | if col.button(text, key=text): 47 | st.session_state["sample"] = text 48 | -------------------------------------------------------------------------------- /rag_demo/vector_chain.py: -------------------------------------------------------------------------------- 1 | from json import loads, dumps 2 | from langchain.prompts.prompt import PromptTemplate 3 | 4 | from langchain_community.vectorstores import Neo4jVector 5 | from langchain.chains import RetrievalQAWithSourcesChain 6 | from langchain.chains.conversation.memory import ConversationBufferMemory 7 | from langchain_openai import ChatOpenAI, OpenAIEmbeddings 8 | from retry import retry 9 | import logging 10 | import streamlit as st 11 | 12 | VECTOR_PROMPT_TEMPLATE = """Human: You are a Financial expert with SEC filings who can answer questions only based on the context below. 13 | * Answer the question STRICTLY based on the context provided in JSON below. 14 | * Do not assume or retrieve any information outside of the context 15 | * Use three sentences maximum and keep the answer concise 16 | * Think step by step before answering. 17 | * Do not return helpful or extra text or apologies 18 | * Just return summary to the user. DO NOT start with Here is a summary 19 | * List the results in rich text format if there are more than one results 20 | * If the context is empty, just respond None 21 | 22 | 23 | {input} 24 | 25 | 26 | Here is the context: 27 | 28 | {context} 29 | 30 | 31 | Assistant:""" 32 | VECTOR_PROMPT = PromptTemplate( 33 | input_variables=["input", "context"], template=VECTOR_PROMPT_TEMPLATE 34 | ) 35 | 36 | if "USER_OPENAI_API_KEY" in st.session_state: 37 | openai_key = st.session_state["USER_OPENAI_API_KEY"] 38 | else: 39 | openai_key = st.secrets["OPENAI_API_KEY"] 40 | 41 | EMBEDDING_MODEL = OpenAIEmbeddings(openai_api_key=openai_key) 42 | MEMORY = ConversationBufferMemory( 43 | memory_key="chat_history", 44 | input_key="question", 45 | output_key="answer", 46 | return_messages=True, 47 | ) 48 | 49 | index_name = "form_10k_chunks" 50 | node_property_name = "textopenaiembedding" 51 | url = st.secrets["NEO4J_URI"] 52 | username = st.secrets["NEO4J_USERNAME"] 53 | password = st.secrets["NEO4J_PASSWORD"] 54 | 55 | 56 | vector_store = None 57 | try: 58 | logging.debug(f"Attempting to retrieve existing vector index: {index_name}...") 59 | vector_store = Neo4jVector.from_existing_index( 60 | embedding=EMBEDDING_MODEL, 61 | url=url, 62 | username=username, 63 | password=password, 64 | index_name=index_name, 65 | embedding_node_property=node_property_name, 66 | ) 67 | logging.debug(f"Using existing index: {index_name}") 68 | except: 69 | logging.debug( 70 | f"No existing index found. Attempting to create a new vector index named {index_name}..." 71 | ) 72 | try: 73 | vector_store = Neo4jVector.from_existing_graph( 74 | embedding=EMBEDDING_MODEL, 75 | url=url, 76 | username=username, 77 | password=password, 78 | index_name=index_name, 79 | node_label="Chunk", 80 | text_node_properties=["text"], 81 | embedding_node_property=node_property_name, 82 | ) 83 | logging.debug(f"Created new index: {index_name}") 84 | except Exception as e: 85 | logging.error(f"Failed to retrieve existing or to create a Neo4jVector: {e}") 86 | 87 | if vector_store is None: 88 | logging.error(f"Failed to retrieve or create a Neo4jVector. Exiting.") 89 | exit() 90 | 91 | vector_retriever = vector_store.as_retriever() 92 | 93 | vector_chain = RetrievalQAWithSourcesChain.from_chain_type( 94 | ChatOpenAI(temperature=0, openai_api_key=openai_key), 95 | chain_type="stuff", 96 | retriever=vector_retriever, 97 | memory=MEMORY, 98 | reduce_k_below_max_tokens=True, 99 | max_tokens_limit=3000, 100 | ) 101 | 102 | 103 | @retry(tries=2, delay=5) 104 | def get_results(question) -> str: 105 | """Generate response using Neo4jVector using vector index only 106 | 107 | Args: 108 | question (str): User query 109 | 110 | Returns: 111 | str: Formatted string answer with citations, if available. 112 | """ 113 | 114 | logging.info(f"Using Neo4j url: {url}") 115 | 116 | # Returns a dict with keys: answer, sources 117 | chain_result = vector_chain.invoke( 118 | {"question": question}, 119 | prompt=VECTOR_PROMPT, 120 | return_only_outputs=True, 121 | ) 122 | 123 | logging.debug(f"chain_result: {chain_result}") 124 | 125 | result = chain_result["answer"] 126 | 127 | # Cite sources, if any 128 | sources = chain_result["sources"] 129 | sources_split = sources.split(", ") 130 | for source in sources_split: 131 | if source != "" and source != "N/A" and source != "None": 132 | result += f"\n - [{source}]({source})" 133 | 134 | return result 135 | 136 | 137 | # Using the vector store directly. But this could blow out the token count 138 | # @retry(tries=5, delay=5) 139 | # def get_results(question)-> str: 140 | # """Generate response using Neo4jVector using vector index only 141 | 142 | # Args: 143 | # question (str): User query 144 | 145 | # Returns: 146 | # str: Formatted string answer with citations, if available. 147 | # """ 148 | 149 | # logging.info(f'Using Neo4j url: {url}') 150 | 151 | # # Returns a dict with keys: answer, sources 152 | # vector_result = vector_store.similarity_search(question, k=3) 153 | 154 | # logging.debug(f'chain_result: {vector_result}') 155 | 156 | # result = vector_result 157 | 158 | # return result 159 | -------------------------------------------------------------------------------- /rag_demo/vector_graph_chain.py: -------------------------------------------------------------------------------- 1 | from langchain.prompts.prompt import PromptTemplate 2 | 3 | from langchain_community.vectorstores import Neo4jVector 4 | from langchain.chains import RetrievalQAWithSourcesChain 5 | from langchain.chains.conversation.memory import ConversationBufferMemory 6 | from langchain_openai import ChatOpenAI, OpenAIEmbeddings 7 | from retry import retry 8 | import logging 9 | import streamlit as st 10 | 11 | VECTOR_GRAPH_PROMPT_TEMPLATE = """Task: Provide names and related information financial filing data strictly based on the text and instructions provided. 12 | Instructions: 13 | 1. Answer the question STRICTLY based on the text. 14 | 2. Do not assume or retrieve any information outside of the text provided. 15 | 3. Use as much information from the text as possible, including sources and links if available. 16 | 4. If the output is empty, just respond None. 17 | 18 | Question: 19 | {question} 20 | """ 21 | VECTOR_GRAPH_PROMPT = PromptTemplate( 22 | input_variables=["question"], template=VECTOR_GRAPH_PROMPT_TEMPLATE 23 | ) 24 | 25 | if "USER_OPENAI_API_KEY" in st.session_state: 26 | openai_key = st.session_state["USER_OPENAI_API_KEY"] 27 | else: 28 | openai_key = st.secrets["OPENAI_API_KEY"] 29 | 30 | EMBEDDING_MODEL = OpenAIEmbeddings(openai_api_key=openai_key) 31 | MEMORY = ConversationBufferMemory( 32 | memory_key="chat_history", 33 | input_key="question", 34 | output_key="answer", 35 | return_messages=True, 36 | ) 37 | 38 | index_name = "form_10k_chunks" 39 | node_property_name = "textEmbedding" 40 | url = st.secrets["NEO4J_URI"] 41 | username = st.secrets["NEO4J_USERNAME"] 42 | password = st.secrets["NEO4J_PASSWORD"] 43 | retrieval_query = """ 44 | WITH node AS doc, score as similarity 45 | ORDER BY similarity DESC LIMIT 5 46 | CALL { WITH doc 47 | OPTIONAL MATCH (prevDoc:Chunk)-[:NEXT]->(doc) 48 | OPTIONAL MATCH (doc)-[:NEXT]->(nextDoc:Chunk) 49 | RETURN prevDoc, doc AS result, nextDoc 50 | } 51 | WITH result, prevDoc, nextDoc, similarity 52 | CALL { 53 | WITH result 54 | OPTIONAL MATCH (result)-[:PART_OF]->(:Form)<-[:FILED]-(company:Company) 55 | OPTIONAL MATCH (company)<-[:OWNS_STOCK_IN]-(manager:Manager) 56 | WITH result, company.name as companyName, apoc.text.join(collect(manager.managerName),';') as managers 57 | WHERE companyName IS NOT NULL OR managers > "" 58 | WITH result, companyName, managers 59 | ORDER BY result.score DESC 60 | RETURN result as document, result.score as popularity, companyName, managers 61 | } 62 | RETURN coalesce(prevDoc.text,'') + coalesce(document.text,'') + coalesce(nextDoc.text,'') + '\n Company: ' + coalesce(companyName,'') + '\n Managers: ' + coalesce(managers,'') as text, 63 | similarity as score, 64 | {companies: coalesce(companyName,''), managers: coalesce(managers,''), source: document.source} AS metadata 65 | """ 66 | 67 | 68 | vector_store = None 69 | try: 70 | logging.debug(f"Attempting to retrieve existing vector index: {index_name}...") 71 | vector_store = Neo4jVector.from_existing_index( 72 | embedding=EMBEDDING_MODEL, 73 | url=url, 74 | username=username, 75 | password=password, 76 | index_name=index_name, 77 | embedding_node_property=node_property_name, 78 | retrieval_query=retrieval_query, 79 | ) 80 | logging.debug(f"Using existing index: {index_name}") 81 | except: 82 | logging.debug( 83 | f"No existing index found. Attempting to create a new vector index named {index_name}..." 84 | ) 85 | try: 86 | vector_store = Neo4jVector.from_existing_graph( 87 | embedding=EMBEDDING_MODEL, 88 | url=url, 89 | username=username, 90 | password=password, 91 | index_name=index_name, 92 | node_label="Chunk", 93 | text_node_properties=["text"], 94 | embedding_node_property=node_property_name, 95 | retrieval_query=retrieval_query, 96 | ) 97 | logging.debug(f"Created new index: {index_name}") 98 | except Exception as e: 99 | logging.error(f"Failed to retrieve existing or to create a Neo4jVector: {e}") 100 | 101 | if vector_store is None: 102 | logging.error(f"Failed to retrieve or create a Neo4jVector. Exiting.") 103 | exit() 104 | 105 | vector_graph_retriever = vector_store.as_retriever() 106 | 107 | vector_graph_chain = RetrievalQAWithSourcesChain.from_chain_type( 108 | ChatOpenAI(temperature=0, openai_api_key=openai_key), 109 | chain_type="stuff", 110 | retriever=vector_graph_retriever, 111 | memory=MEMORY, 112 | reduce_k_below_max_tokens=True, 113 | max_tokens_limit=3000, 114 | ) 115 | 116 | 117 | @retry(tries=2, delay=5) 118 | def get_results(question) -> str: 119 | """Generate response using Neo4jVector using vector index only 120 | 121 | Args: 122 | question (str): User query 123 | 124 | Returns: 125 | str: Formatted string answer with citations, if available. 126 | """ 127 | 128 | logging.info(f"Using Neo4j url: {url}") 129 | 130 | prompt = VECTOR_GRAPH_PROMPT.format(question=question) 131 | 132 | # Returns a dict with keys: answer, sources 133 | chain_result = vector_graph_chain.invoke( 134 | {"question": question}, 135 | prompt=prompt, 136 | return_only_outputs=True, 137 | ) 138 | 139 | logging.debug(f"chain_result: {chain_result}") 140 | result = chain_result["answer"] 141 | 142 | # Cite sources, if any 143 | sources = chain_result["sources"] 144 | sources_split = sources.split(", ") 145 | for source in sources_split: 146 | if source != "" and source != "N/A" and source != "None": 147 | result += f"\n - [{source}]({source})" 148 | 149 | return result 150 | -------------------------------------------------------------------------------- /rag_demo/vector_graph_tool.py: -------------------------------------------------------------------------------- 1 | from langchain.tools import tool 2 | from vector_graph_chain import get_results 3 | 4 | @tool("vector-graph-tool") 5 | def vector_graph_tool(query:str) -> str: 6 | """ 7 | Useful when answer requires specific information about companies, managers, or industries. 8 | Use when question asks for which companies, managers, or industries. 9 | Use full question as input. 10 | Do not call this tool more than once. 11 | Do not call another tool if this returns results. 12 | """ 13 | return get_results(query) -------------------------------------------------------------------------------- /rag_demo/vector_tool.py: -------------------------------------------------------------------------------- 1 | from langchain.tools import tool 2 | from vector_graph_chain import get_results 3 | 4 | 5 | @tool("vector-tool") 6 | def vector_tool(query: str) -> str: 7 | """ 8 | For finding similar entities to the ones in the search query. 9 | Only use this tool if no answer from others. 10 | Do not call another tool after this one. 11 | """ 12 | return get_results(query) 13 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.9.3 ; python_version >= "3.11" and python_version < "4.0" 2 | aiosignal==1.3.1 ; python_version >= "3.11" and python_version < "4.0" 3 | altair==5.2.0 ; python_version >= "3.11" and python_version < "4.0" 4 | annotated-types==0.6.0 ; python_version >= "3.11" and python_version < "4.0" 5 | anyio==4.3.0 ; python_version >= "3.11" and python_version < "4.0" 6 | attrs==23.2.0 ; python_version >= "3.11" and python_version < "4.0" 7 | backoff==2.2.1 ; python_version >= "3.11" and python_version < "4.0" 8 | blinker==1.7.0 ; python_version >= "3.11" and python_version < "4.0" 9 | cachetools==5.3.3 ; python_version >= "3.11" and python_version < "4.0" 10 | certifi==2024.2.2 ; python_version >= "3.11" and python_version < "4.0" 11 | charset-normalizer==3.3.2 ; python_version >= "3.11" and python_version < "4.0" 12 | click==8.1.7 ; python_version >= "3.11" and python_version < "4.0" 13 | colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and platform_system == "Windows" 14 | dataclasses-json==0.6.4 ; python_version >= "3.11" and python_version < "4.0" 15 | decorator==5.1.1 ; python_version >= "3.11" and python_version < "4.0" 16 | distro==1.9.0 ; python_version >= "3.11" and python_version < "4.0" 17 | frozenlist==1.4.1 ; python_version >= "3.11" and python_version < "4.0" 18 | gitdb==4.0.11 ; python_version >= "3.11" and python_version < "4.0" 19 | gitpython==3.1.42 ; python_version >= "3.11" and python_version < "4.0" 20 | greenlet==3.0.3 ; python_version >= "3.11" and python_version < "4.0" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") 21 | h11==0.14.0 ; python_version >= "3.11" and python_version < "4.0" 22 | httpcore==1.0.4 ; python_version >= "3.11" and python_version < "4.0" 23 | httpx==0.27.0 ; python_version >= "3.11" and python_version < "4.0" 24 | idna==3.6 ; python_version >= "3.11" and python_version < "4.0" 25 | importlib-metadata==6.11.0 ; python_version >= "3.11" and python_version < "4.0" 26 | jinja2==3.1.3 ; python_version >= "3.11" and python_version < "4.0" 27 | jsonpatch==1.33 ; python_version >= "3.11" and python_version < "4.0" 28 | jsonpointer==2.4 ; python_version >= "3.11" and python_version < "4.0" 29 | jsonschema-specifications==2023.12.1 ; python_version >= "3.11" and python_version < "4.0" 30 | jsonschema==4.21.1 ; python_version >= "3.11" and python_version < "4.0" 31 | langchain-community==0.0.19 ; python_version >= "3.11" and python_version < "4.0" 32 | langchain-core==0.1.23 ; python_version >= "3.11" and python_version < "4.0" 33 | langchain-openai==0.0.5 ; python_version >= "3.11" and python_version < "4.0" 34 | langchain==0.1.6 ; python_version >= "3.11" and python_version < "4.0" 35 | langchainhub==0.1.15 ; python_version >= "3.11" and python_version < "4.0" 36 | langsmith==0.0.87 ; python_version >= "3.11" and python_version < "4.0" 37 | markdown-it-py==3.0.0 ; python_version >= "3.11" and python_version < "4.0" 38 | markupsafe==2.1.5 ; python_version >= "3.11" and python_version < "4.0" 39 | marshmallow==3.21.1 ; python_version >= "3.11" and python_version < "4.0" 40 | mdurl==0.1.2 ; python_version >= "3.11" and python_version < "4.0" 41 | multidict==6.0.5 ; python_version >= "3.11" and python_version < "4.0" 42 | mypy-extensions==1.0.0 ; python_version >= "3.11" and python_version < "4.0" 43 | neo4j==5.18.0 ; python_version >= "3.11" and python_version < "4.0" 44 | numpy==1.26.4 ; python_version >= "3.11" and python_version < "4.0" 45 | openai==1.13.3 ; python_version >= "3.11" and python_version < "4.0" 46 | packaging==23.2 ; python_version >= "3.11" and python_version < "4.0" 47 | pandas==2.2.1 ; python_version >= "3.11" and python_version < "4.0" 48 | pillow==10.2.0 ; python_version >= "3.11" and python_version < "4.0" 49 | protobuf==4.25.3 ; python_version >= "3.11" and python_version < "4.0" 50 | py==1.11.0 ; python_version >= "3.11" and python_version < "4.0" 51 | pyarrow==15.0.1 ; python_version >= "3.11" and python_version < "4.0" 52 | pydantic-core==2.16.3 ; python_version >= "3.11" and python_version < "4.0" 53 | pydantic==2.6.3 ; python_version >= "3.11" and python_version < "4.0" 54 | pydeck==0.8.0 ; python_version >= "3.11" and python_version < "4.0" 55 | pygments==2.17.2 ; python_version >= "3.11" and python_version < "4.0" 56 | pyjwt==2.8.0 ; python_version >= "3.11" and python_version < "4.0" 57 | python-dateutil==2.9.0.post0 ; python_version >= "3.11" and python_version < "4.0" 58 | pytz==2024.1 ; python_version >= "3.11" and python_version < "4.0" 59 | pyyaml==6.0.1 ; python_version >= "3.11" and python_version < "4.0" 60 | referencing==0.33.0 ; python_version >= "3.11" and python_version < "4.0" 61 | regex==2023.12.25 ; python_version >= "3.11" and python_version < "4.0" 62 | requests==2.31.0 ; python_version >= "3.11" and python_version < "4.0" 63 | retry==0.9.2 ; python_version >= "3.11" and python_version < "4.0" 64 | rich==13.7.1 ; python_version >= "3.11" and python_version < "4.0" 65 | rpds-py==0.18.0 ; python_version >= "3.11" and python_version < "4.0" 66 | segment-analytics-python==2.3.2 ; python_version >= "3.11" and python_version < "4.0" 67 | six==1.16.0 ; python_version >= "3.11" and python_version < "4.0" 68 | smmap==5.0.1 ; python_version >= "3.11" and python_version < "4.0" 69 | sniffio==1.3.1 ; python_version >= "3.11" and python_version < "4.0" 70 | sqlalchemy==2.0.28 ; python_version >= "3.11" and python_version < "4.0" 71 | streamlit-feedback==0.1.3 ; python_version >= "3.11" and python_version < "4.0" 72 | streamlit==1.27.2 ; python_version >= "3.11" and python_version < "4.0" 73 | tenacity==8.2.3 ; python_version >= "3.11" and python_version < "4.0" 74 | tiktoken==0.5.2 ; python_version >= "3.11" and python_version < "4.0" 75 | toml==0.10.2 ; python_version >= "3.11" and python_version < "4.0" 76 | toolz==0.12.1 ; python_version >= "3.11" and python_version < "4.0" 77 | tornado==6.4 ; python_version >= "3.11" and python_version < "4.0" 78 | tqdm==4.66.2 ; python_version >= "3.11" and python_version < "4.0" 79 | types-requests==2.31.0.20240218 ; python_version >= "3.11" and python_version < "4.0" 80 | typing-extensions==4.10.0 ; python_version >= "3.11" and python_version < "4.0" 81 | typing-inspect==0.9.0 ; python_version >= "3.11" and python_version < "4.0" 82 | tzdata==2024.1 ; python_version >= "3.11" and python_version < "4.0" 83 | tzlocal==5.2 ; python_version >= "3.11" and python_version < "4.0" 84 | urllib3==2.2.1 ; python_version >= "3.11" and python_version < "4.0" 85 | validators==0.22.0 ; python_version >= "3.11" and python_version < "4.0" 86 | watchdog==4.0.0 ; python_version >= "3.11" and python_version < "4.0" and platform_system != "Darwin" 87 | yarl==1.9.4 ; python_version >= "3.11" and python_version < "4.0" 88 | zipp==3.17.0 ; python_version >= "3.11" and python_version < "4.0" 89 | --------------------------------------------------------------------------------